LINUX.ORG.RU

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

 , , ,


2

0

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

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

Ответ на: Re: Как оптимизировали программу на Ocaml от tailgunner

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

> FM, которые я R, говорят, что gcc умеет оптимизировать хвостовые вызовы с существенными ограничения.

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

беда кэмла в том, что он пытается быть быстрым. в среде, в которой это не так уж и просто сделать :(

yeolahim ()
Ответ на: Re: Как оптимизировали программу на Ocaml от www_linux_org_ru

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

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

> нужен только local type inference и его вариации

приходим к выводу, что плюсовый auto идеальный вариант

yeolahim ()
Ответ на: Re: Как оптимизировали программу на Ocaml от lester

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

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

alx_me ★★☆ ()
Ответ на: Re: Как оптимизировали программу на Ocaml от alx_me

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

> Не понимаю необходимости такого средства и вопрошаю умудрённых.

Пример: мы представим конечный автомат в виде класса, функции перехода в виде функций. Допустим, нас интересует только конечное состояние. Тогда нужна эта фича компилятора (sibling call optimization).

Почему конечный автомат в виде класса, а не кучи goto-шек? потому, что наследование дает другой автомат, а с goto-шками не прокатит.

www_linux_org_ru ★★★★★ ()
Ответ на: Re: Как оптимизировали программу на Ocaml от yeolahim

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

> е мое, не имеет значение язык

Ну ну. Для нефункционального языка пупок порвётся в общем виде хвосты развязывать. И напротив, для функциональнго программирования возможность этой оптимизации естественна и не безобразна.

alx_me ★★☆ ()
Ответ на: Re: Как оптимизировали программу на Ocaml от alx_me

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

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

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

lester ★★★★ ()
Ответ на: Re: Как оптимизировали программу на Ocaml от www_linux_org_ru

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

>потому, что наследование дает другой автомат, а с goto-шками не прокатит.

Если добавить к нему ещё одно возможное состояние при наследовании, то даже при незначительных отличиях наследованных функций перехода, те из них, которые должны теперь учитывать ещё один вариант, надо будет писать заново?

TREIBSTOFF ()
Ответ на: Re: Как оптимизировали программу на Ocaml от lester

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

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

мне жаль людей, которым приходится с тобой работать. нет, правда

jtootf ★★★★★ ()
Ответ на: Re: Как Ocaml обогнал по скорости C++ от tailgunner

Re: Как Ocaml обогнал по скорости C++

Поцчему старый? ;) Поцчему троль? Я всю правду декларирую, ницчего от себя не выдумываю

А еще можно аптимизировать программы на CLisp http://www.rsdn.ru/forum/decl/3459836.flat.aspx

Karapuz ★★★★★ ()
Ответ на: Re: Как оптимизировали программу на Ocaml от lester

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

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

о, да тут круче чем в цирке!

jtootf ★★★★★ ()
Ответ на: Re: Как Ocaml обогнал по скорости C++ от lester

Re: Как Ocaml обогнал по скорости C++

>бред, взяли два варианта( с++ был быстрее ),

Ну, два варианта, http://web.archive.org/web/20040805153930/http://homepage.mac.com/spullara/ra... http://www.theserverside.com/news/thread.tss?thread_id=25743 ANCI C и Java. Оптимизируй так, чтобы C догнал жабу

Karapuz ★★★★★ ()
Ответ на: Re: Как оптимизировали программу на Ocaml от jtootf

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

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


а... ты тот самый, который две недели решал баг с неправильными ключами сборки, все-никак не простишь, что я с тебя простебался? :)

lester ★★★★ ()
Ответ на: Re: Как оптимизировали программу на Ocaml от lester

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

>ты тот самый, который две недели решал баг с неправильными ключами сборки, все-никак не простишь, что я с тебя простебался? :)

ну хоть память у тебя хорошая :) жаль, остальной частью мозга обидели

jtootf ★★★★★ ()
Ответ на: Re: Как оптимизировали программу на Ocaml от lester

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

>две недели... ОМГ, ну тоооормоооз

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

нет, ну это же невероятно прекрасно. браво! бис!

jtootf ★★★★★ ()
Ответ на: Re: Как оптимизировали программу на Ocaml от jtootf

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

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


(раскланиваюсь)

lester ★★★★ ()
Ответ на: Re: Как оптимизировали программу на Ocaml от tailgunner

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

Надеюсь, Вы не пропустили мимо глаз слово "конкретный" ;)

Вот один из конкретных аналогов:
int f(int x){return x + 1;}
int g(int x){return x * 2;}

int concrete_composition(int z){return f(g(z));}

Но выйдет ли сделать то же самое, что и на ocaml-е ?

impfp ()
Ответ на: Re: Как оптимизировали программу на Ocaml от lester

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

если через пару часов/дней/недель надумаешь - создавай отдельный топик, не факт, что я потом найду( буду искать ) твой ответ здесь

lester ★★★★ ()
Ответ на: Re: Как оптимизировали программу на Ocaml от lester

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

> слабо посоревноваться в написании тестовой задачи, чтоб определить кто лучше программирует? ;)

Я пытался замерить твоё ЧСВ стандартным измерителем, купленным в магазине, но он перед тем, как пустить дым и издохнуть, что-то написал про деление на нуль...

mv ★★★★★ ()

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

> Я пытался замерить твоё ЧСВ стандартным измерителем, купленным в магазине, но он перед тем, как пустить дым и издохнуть, что-то написал про деление на нуль...

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

lester ★★★★ ()
Ответ на: Re: Как оптимизировали программу на Ocaml от impfp

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

> Надеюсь, Вы не пропустили мимо глаз слово "конкретный" ;)

Не пропустил, но у слова "конкретный" много значений.

>Вот один из конкретных аналогов:

> int f(int x){return x + 1;}

> int g(int x){return x * 2;}

> int concrete_composition(int z){return f(g(z));}

Это не аналог, даже со скидкой на "конкретность". "Конкретный" аналог должен принимать указатели на функции как аргументы, но "конкретность" делает пример банальным.

tailgunner ★★★★★ ()

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

> Я пытался замерить твоё ЧСВ стандартным измерителем, купленным в магазине, но он перед тем, как пустить дым и издохнуть, что-то написал про деление на нуль...

Ах, да... Прочитал в инструкции, что клоунов им замерять категорически воспрещается.

mv ★★★★★ ()

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

> Ах, да... Прочитал в инструкции, что клоунов им замерять категорически воспрещается.

а вот вы все серьезно воспринимаете, зря - это про ваше ЧСВ говорит, а не мое

lester ★★★★ ()
Ответ на: Re: Как оптимизировали программу на Ocaml от lester

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

>ну давай, дууумааай....

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

предлагаю слегка изменить условия (горький опыт предметного спора на ЛОРе) - каждый сформулирует по задачке, и каждый предоставит два решения; ну да я надеюсь, что ты не сачковал курс теории игр :)

если согласен - давай задачку

jtootf ★★★★★ ()
Ответ на: Re: Как оптимизировали программу на Ocaml от jtootf

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

> предлагаю слегка изменить условия (горький опыт предметного спора на ЛОРе) - каждый сформулирует по задачке, и каждый предоставит два решения; ну да я надеюсь, что ты не сачковал курс теории игр :)

предлагаю одну задачу на выбор ЛОР'ев - две задачи дольше решать

lester ★★★★ ()
Ответ на: Re: Как оптимизировали программу на Ocaml от lester

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

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

Задача: есть орбитальный комплекс, собирающий данные. К сожалению, в известной специалистам функции закралась очепятка, необратимо искажающая данные. Нужно обновить код дефектной функции, не прерывая работы всего комплекса. Комплекс доступен по tcp/ip.

mv ★★★★★ ()
Ответ на: Re: Как оптимизировали программу на Ocaml от impfp

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

Сорри за словесную неточность :)
"Но выйдет ли сделать то же самое, что и на ocaml-е ?"
читать как
"Но выйдет ли сделать абсолютно то же самое, что и на ocaml-е ?"

ps ...и какими силами?

impfp ()

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

А самыми быстрыми были не реализации машин, а интерпретаторы команд этой виртуальной машины в байткод...

jackill ★★★★★ ()
Ответ на: Re: Как оптимизировали программу на Ocaml от tailgunner

Re: аналог должен

Если бы результаты выполнения compose / concrete_composition для указанных функций были бы различными, то, может, аналог и должен был бы.:)

Однако, реализовать именно полный аналог кода вида:
let compose f g = function x -> f(g(x));;

что нам можно было бы сделать в Си? Что-то вроде:
void* compose(void* (*f)(void*), void* (*g)(void*), void* x)
{
return f(g(x));
}
императивное. Но вычислит то что надо; или даже как-нить пострашнее:
void* (*)(void*) compose(void* (*f)(void* (*)(void*)), void* (*g)(void*))
{
return f(g); /*а вообще эта скомпилируется?*/
}

Чего-то в Си по сранению даже с окамлом определенно не хватает :)

impfp ()

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

>Задача: есть орбитальный комплекс, собирающий данные. К сожалению, в известной специалистам функции закралась очепятка, необратимо искажающая данные. Нужно обновить код дефектной функции, не прерывая работы всего комплекса. Комплекс доступен по tcp/ip.

Хм. Вполне стандартная фича лиспа. Исторический пример: http://www.flownet.com/gat/jpl-lisp.html >The Remote Agent software, running on a custom port of Harlequin Common Lisp, flew aboard Deep Space 1 (DS1), the first mission of NASA's New Millennium program. Remote Agent controlled DS1 for two days in May of 1999. During that time we were able to debug and fix a race condition that had not shown up during ground testing. (Debugging a program running on a $100M piece of hardware that is 100 million miles away is an interesting experience. Having a read-eval-print loop running on the spacecraft proved invaluable in finding and fixing the problem. The story of the Remote Agent bug is an interesting one in and of itself.)

dmitry_vk ★★★ ()
Ответ на: Re: Как оптимизировали программу на Ocaml от dmitry_vk

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

> Хм. Вполне стандартная фича лиспа. Исторический пример: http://www.flownet.com/gat/jpl-lisp.html

Да, я знаю, это оно :) Мы уже вот тут: http://www.linux.org.ru/view-message.jsp?msgid=3855459

mv ★★★★★ ()
Ответ на: Re: аналог должен от impfp

Re: аналог должен

> Чего-то в Си по сранению даже с окамлом определенно не хватает :)

Если у тебя это и получится, то совсем непросто в рамках С99, тебе явно придется менять сегмент кода, что непереносимо.

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

www_linux_org_ru ★★★★★ ()

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

> Нужно обновить код дефектной функции, не прерывая работы всего комплекса. Комплекс доступен по tcp/ip.

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

------------

Нет речи о том, что С++ плохо приспособлен или вообще не приспособлен для ряда задач. Но когда на нём пишешь, это нужно делать не через жопу.

Ну и радостно утверждать, что OCaml или Lisp могут полностью заменить C++ довольно глупо. В ряде задач - да, в ряде - нет. Но это очевидная банальность.

constRS ()
Ответ на: Re: Как оптимизировали программу на Ocaml от constRS

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

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

Вроде, кто-то из друзей в ЖЖ писал, что сменил работу (программистсткую) на связанную с ракетной техникой. Начальник на предыдущей работе в своей молодости кодировал алгоритмы распознавания ракетных пусков.

mv ★★★★★ ()

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

> Начальник на предыдущей работе в своей молодости кодировал алгоритмы распознавания ракетных пусков.

Извиняюсь за серость - это наверху, на спутниках работает?

constRS ()

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

> Нужно обновить код дефектной функции, не прерывая работы всего комплекса. Комплекс доступен по tcp/ip.

Банальщина какая.

системный вызов ptrace, а затем делаем с кодом всё что угодно. Есть конечно нюансы с кодовыми сегментами, но если заранее предусмотреть - то всё ок.

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