LINUX.ORG.RU

Как оптимизировали программу на Ocaml

 , , ,


2

0

По ссылке приведены примеры программ с соревнований на ICFPC'09 (кстати, самим по себе интересными тем, что участники соревновались в управлении космическими аппаратами) которые демонстрируют как оптимизационные возможности, свойственные функциональным языкам (в частности хвостовая рекурсия), позволяют написанной на нём программе-интерпретатору некоего языка управления двигателем космического аппарата обогнать по скорости работы аналогичную на C/C++.

>>> Подробности

Ответ на: комментарий от lester

>> Я и привел пример - континуации. Аналогом оптимизированного кода на Окамле для С++ было бы собрать цепочку из Loki::Chain.

>то что в Ocaml надо такая оптимизация( только из-за скорости ), не значит, что в С++ это даст прирост скорости, более вероятно, что наоборот

Такая цепочка из континуаций была бы очень кстати если надо организовать Undo/Redo в меню. Или две цепочки - цепочка Redo фиксирует все действия пользователя в виде псевдокода, цепочка Undo фиксирует обратные действия. Типовый паттерн, можно сказать.

Absurd ★★★
()
Ответ на: комментарий от lester

аж ностальгия проняла...
вот что я писал, например, на паскале:

http://xmages.net/show.php/319031_A.PNG.html
http://xmages.net/show.php/319034_B.PNG.html

по функциональности значительно превосходит VolcovCommander, весит 65Кб, умеет автодополнение кода, подсветку синтаксиса, имеет абсолютно все функции VC + много дополнительных фишек

lester ★★★★
()
Ответ на: комментарий от Absurd

> Или две цепочки - цепочка Redo фиксирует все действия пользователя в виде псевдокода, цепочка Undo фиксирует обратные действия. Типовый паттерн, можно сказать.

абсолютно типовой - и для С++ полно реализаций

lester ★★★★
()
Ответ на: комментарий от lester

>> Или две цепочки - цепочка Redo фиксирует все действия пользователя в виде псевдокода, цепочка Undo фиксирует обратные действия. Типовый паттерн, можно сказать.

>абсолютно типовой - и для С++ полно реализаций

Это не единственное применение для континуаций.

Absurd ★★★
()
Ответ на: комментарий от Absurd

> Это не единственное применение для континуаций.

верю, но С++ это умеет, а изначально мы рассматривали - что же С++ не умеет

lester ★★★★
()
Ответ на: комментарий от lester

>> Это не единственное применение для континуаций.

>верю, но С++ это умеет, а изначально мы рассматривали - что же С++ не умеет

Ну в общем классы типа boost::function и Loki::Functor написаны настолько анально, что определение "умеет" немного не соответствует истине. Континуации можно и на асме реализовать.

Absurd ★★★
()
Ответ на: комментарий от eao197

> эксперименты для дилетантов должны проводиться в лабораториях для дилетантов ;)

Бгг. Если это дилетанты, то покажи мне профессионалов...

> исследователи могут писать свой проект на чем хотят и как хотят. А потом в любой момент выбросить. Но если бы им пришлось передать свой код на сопровождение в течении лет 10-15 обычным программистам, то спрос был бы другой.

Я думаю, что ядро Ccured/Ivy - довольно старое, может, лет 10 ему и есть. Но пойнт в том, что не каждая программа обязана имеет срок жизни 15 лет и запускаться на платформах, о которых большинство людей и не слышало.

> Поэтому за сопровождение чужого C++ного кода я бы еще взялся. А вот OCaml-овского -- только за очень большие деньги.

Чтобы взять на сопровождение Ocaml-код, ты должен как минимум иметь опыт работы на Ocaml.

tailgunner ★★★★★
()
Ответ на: комментарий от eao197

> Хоть у C++ читабельность далеко не самая лучшая, но все же (на мой взгляд) лучше, чем у OCaml.

На мой взгляд, у OCaml читабельность намного выше, чем у плюсов. Но я бы за его поддержку не взялся, т.к. х.з. что там внутри происходит, на уровне байтов.

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

> На мой взгляд, у OCaml читабельность намного выше, чем у плюсов

нет ничего читабельнее грамотно оформленных и откомментаренных интерфейсов и фабрик :)

lester ★★★★
()
Ответ на: комментарий от lester

> я про предпочтения, а не работу

А я не работаю там, где мне не нравится.

mv ★★★★★
()
Ответ на: комментарий от lester

>верю, но С++ это умеет, а изначально мы рассматривали - что же С++ не умеет

макросы, новые операторы, аллокаторы, апи, лёгкая расширяемость, полная диспетчеризация объектов в рантайме, фп, вывод типов, из коробки даже лямбды и потоков нет. главное учесть сколько сил для добавления всего этого в язык нужно потратить, а то ведь все языки полные по тьюрингу эквивалентны.

TREIBSTOFF
()
Ответ на: комментарий от lester

> С, basic, prolog, pascal, java, python etc.,

И что (и сколько) на питоне писал?

mv ★★★★★
()
Ответ на: комментарий от TREIBSTOFF

> макросы, новые операторы, аллокаторы, апи, лёгкая расширяемость, полная диспетчеризация объектов в рантайме, фп, вывод типов, из коробки даже лямбды и потоков нет. главное учесть сколько сил для добавления всего этого в язык нужно потратить, а то ведь все языки полные по тьюрингу эквивалентны.

Ему это всё не надо, разве не понятно ещё? :)

mv ★★★★★
()
Ответ на: комментарий от mv

> Ему это всё не надо, разве не понятно ещё? :)

вы однозначно бредите

lester ★★★★
()
Ответ на: комментарий от tailgunner

>> эксперименты для дилетантов должны проводиться в лабораториях для дилетантов ;)

>Бгг. Если это дилетанты, то покажи мне профессионалов...

Похоже, что я не удачно пошутил на тему того, что к разным типам проектов применяются разные подходы. И то, что хорошо для профессионалов из Беркли будет работать явно не во всех условиях.

>Чтобы взять на сопровождение Ocaml-код, ты должен как минимум иметь опыт работы на Ocaml.

С меня хватило попыток анализа чужого OCaml-ового кода при изучении OCaml-а.

eao197 ★★★★★
()
Ответ на: комментарий от TREIBSTOFF

> макросы

я что-то упустил? макросы и шаблоны в С++ не подходят?

> новые операторы


то ругаются, что перегрузка операторов зло, то требуют новые...

> аллокаторы


вы очевидно просто не знаете о чем пишете

> апи, лёгкая расширяемость


а это вы о чем?

> полная диспетчеризация объектов в рантайме


убивать, убивать, убивать

> вывод типов


typeof что-ли?

> из коробки даже лямбды и потоков нет. главное учесть сколько сил для добавления всего этого в язык нужно потратить, а то ведь все языки полные по тьюрингу эквивалентны.


вы так говорите будто каждый раз собственную реализацию пишите

lester ★★★★
()
Ответ на: комментарий от mv

> Ему это всё не надо, разве не понятно ещё? :)

вы жидко обделались со своим аргументами - так молчите уже в тряпочку ;)

lester ★★★★
()
Ответ на: комментарий от lester

> точно так же надо реагировать на код таких вот "знатоков"

Я хотя бы знаю оба предмета спора, и C++, и Common Lisp.

mv ★★★★★
()
Ответ на: комментарий от eao197

>> Чтобы взять на сопровождение Ocaml-код, ты должен как минимум иметь опыт работы на Ocaml.

> С меня хватило попыток анализа чужого OCaml-ового кода при изучении OCaml-а.

Я пытался начать учить Окамль лет 7 назад - бросил со словами "да на*я эта пое*ень нада?!!11". Сейчас читаю учебник в свободное время - язык мне нравится.

tailgunner ★★★★★
()
Ответ на: комментарий от mv

> Я хотя бы знаю оба предмета спора, и C++, и Common Lisp.

лисперы настолько жалки, что фантазируют будто их Lisp кто-то будет обсуждать :)

lester ★★★★
()
Ответ на: комментарий от Waterlaz

> бгыыыы..... специально для тебя

ЛОЛ, типа нельзя было прочитать по другому, читайте про auto - и дрожите от ненависти

lester ★★★★
()

смешно выглядит - никто не знает про auto, зато все бгггыкают, тупые тролли такие тупые

lester ★★★★
()
Ответ на: комментарий от lester

>> auto еще не реализовано, и когда будет - это только подобие настоящего вывода типов.

> man gcc

Ты версию забыл указать. А то, что auto имеет довольно ограниченные возможности, просто проигнорировал.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

> Ты версию забыл указать

man google

> А то, что auto имеет довольно ограниченные возможности, просто проигнорировал.


например?

lester ★★★★
()
Ответ на: комментарий от tailgunner

а в двух словах нет? если вы обиделись насчет gcc - я знаю, что в 4.3/4.4 работает, а когда появилось точно не знаю

lester ★★★★
()
Ответ на: комментарий от lester

>смешно выглядит - никто не знает про auto, зато все бгггыкают, тупые тролли такие тупые

Извини, но когда видишь человеков, которым и в Си++ всего хватает, а на вопросы по теме они отвечают как-то так:

>> макросы

>я что-то упустил? макросы и шаблоны в С++ не подходят?

>> вывод типов

>typeof что-ли?

то удержаться и не потроллить такое чудо очень трудно :3

Waterlaz ★★★★★
()

Когда дятлы оптимизируют программу. Нормальные люди меняют алгоритм. Редко кому надо линейно опустить график временнОй сложности скажем O(n^2). Обычно всем хочется вместо этого Nlog(N).

alx_me ★★☆
()
Ответ на: комментарий от lester

>я что-то упустил? макросы и шаблоны в С++ не подходят?

Макросы ничего не знают о языке, шаблоны С++ вроде бы даже полные по тьюрингу, но они предназначены только для С++ с его синтаксисом.

>а это вы о чем?

те же нэймспейсы( отсутствуют в стандарте), расширяемость - цена за новые фичи, т.е лёгкость их добавления.

>убивать, убивать, убивать

если половина происходит во время компиляции( тут уще можно вспомнить специализации шаблонов и их связь с перегрузкой функции), в рантайме другая половина, а в результате получается ошибка.

>typeof что-ли?

Нет, с точки зрения cs - решение уравнений. Если память не изменяет, то даже классы в C++ с их наследованием не совсем типы, что может в некоторых случаях приводить к ошибке.

>вы так говорите будто каждый раз собственную реализацию пишите

После знакомства с с++ я ничего не пишу.

TREIBSTOFF
()
Ответ на: комментарий от lester

> а в двух словах нет?

В Си++ нельзя поставить auto в параметр или в возвращаемое значение.

> насчет gcc - я знаю, что в 4.3/4.4 работает

В 4.3 - не работает.

tailgunner ★★★★★
()
Ответ на: комментарий от alx_me

> Когда дятлы оптимизируют программу. Нормальные люди меняют алгоритм.

Кстати, автор статьи так и поступил.

tailgunner ★★★★★
()
Ответ на: комментарий от Waterlaz

> то удержаться и не потроллить такое чудо очень трудно :3

знаем мы как такие знатоки как ты код пишут - по ссылке такой же знаток С++ обгонял, кроме кучи определений в мозгах мало что есть ;)

lester ★★★★
()
Ответ на: комментарий от lester

> например?

ты зря кипятишься (хотя что касается вывода типов, я пока что не знаю чего-то нужного и большего, чем auto)

макросы = возможность создавать свои конструкции, такие же как for(;;)

апи = апи компилятора

полноценная диспетчирезация в рантайме = апи для vtbl

ну и т.д.

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от tailgunner

> В 4.3 - не работает.

да - я не прав, в 4.4 появилось, просто у меня обновления в убунте ставятся автоматом - видимо не заметил, что уже не 4.3 версия

> В Си++ нельзя поставить auto в параметр или в возвращаемое значение.


вызову смех знатоков - но разве это надо? в большинстве случаев подойдут старые добрые шаблоны

lester ★★★★
()
Ответ на: комментарий от www_linux_org_ru

> макросы = возможность создавать свои конструкции, такие же как for(;;)

спасибо за объяснение, сомнительной полезности фича

> апи = апи компилятора


это надо разве что для IDE

> полноценная диспетчирезация в рантайме = апи для vtbl


это я понял, тут все по прежнему - "убивать, убивать, убивать"

lester ★★★★
()
Ответ на: комментарий от lester

>> В Си++ нельзя поставить auto в параметр или в возвращаемое значение.

> вызову смех знатоков - но разве это надо?

Ну как бы речь не об этом, а об ограниченности auto. И таки да, auto на параметрах и возвратах - надо.

> в большинстве случаев подойдут старые добрые шаблоны

Типовая параметризация в Ocaml сделана на порядок красивее. Кстати, в Си++ она появилась ( в изуродованном виде, ИМХО) из ML - близкого родственника Ocaml.

tailgunner ★★★★★
()
Ответ на: комментарий от lester

>> апи = апи компилятора

> это надо разве что для IDE

нет, оно нужно, т.к. запросы очень разные

одним нужно преаллоцировать все объекты и запретить аллокацию. другим нужно создание полноценных замыканий (лямбд) на автомате.

одним нужны pipml-лизованные версии классов. другим наоборот.

и т.д.

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от tailgunner

> И таки да, auto на параметрах и возвратах - надо.

В возрватах ЕМНИП оно есть.

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от lester

> это я понял, тут все по прежнему - "убивать, убивать, убивать"

и что взамен? руками прописывать множественную диспетчеризацию?

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от lester

> спасибо за объяснение, сомнительной полезности фича

pattern matching (не регулярные выражения) весьма нужен, не меньше чем for в некоторых областях

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от mv

> Я хотя бы знаю оба предмета спора, и C++, и Common Lisp.

(мечтательно) если бы ты вправду знал Common Lisp, то незамедлительно пнул бы с++, сказав, что там нету restarts...

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

> (мечтательно) если бы ты вправду знал Common Lisp, то незамедлительно пнул бы с++, сказав, что там нету restarts...

Список лисповых плюшек, ранее неоднократно озвученный на этом сайте (и не только мной, прошу заметить), ищется поиском. На самом деле, надоело объяснять.

mv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.