LINUX.ORG.RU

5-й номер журнала «Практика функционального программирования»

 , , , , , ,


0

0

Вышел новый, пятый номер журнала «Практика функционального программирования». В новом номере опубликованы следующие статьи:

  • Инструменты интроспекции в Erlang/OTP. Максим Трескин
  • Экономия ошибок. С. Зефиров, А. Сафронов, В. Шабанов, Е. Мельников
  • Введение в F#. Евгений Лазин, Максим Моисеев, Давид Сорокин
  • Лисп — философия разработки. Всеволод Дёмкин, Александр Манзюк
  • Оптимизирующие парсер-комбинаторы. Дмитрий Попов
  • Модель типизации Хиндли — Милнера и пример её реализации на языке Haskell. Роман Душкин

Также в этом номере опубликованы результаты конкурса, который был объявлен в 3-м номере журнала.

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

★★★★★

Проверено: maxcom ()

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

>> ассемблер с nop порвет все

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

А сгенерировать gcc и вручную поправить ляпы не пробовали?

Советую поэксперементировать. Легко можно получить десятки процентов производительности под конкретный комп.

anonymous ()
Ответ на: комментарий от archimag

> Обычно есть выбор - Лисп или не Лисп.

Такой выбор есть всегда для всех языков. И что? Ты будешь делать выбор инструментального средства на основе синтаксических предпочтений? Мне это кажется странным, если задачу можно решить как на C так и на Python, то я никогда не будут делать выбор на основе того, что синтаксис Python мне нравится меньше, чем синтаксис С.

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

anonymous ()
Ответ на: комментарий от archimag

> Ну как же, если для IO используется flexi-streams, то на больших объёмах данных (а там вроде были большие) этого достаточно что бы убить производительность.

нет, для io не использовался flexi-streams. много на io уходит от того, что диск медленный :) - таже проблема с io есть и в питоновской реализации

Что такое быстрый питон?

с помощью чёрной магии его можно сделать 3/2*C-fast

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

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

Можешь смеяться, но это - один из важнейших критериев. От этого напрямую зависит производительность труда. Язык должен нравится. Иначе это не программинг, а мучение какое-то. Но я обычно не испытываю таких проблем. Мне нравились практически все языки, но которых я писал, включая фокал ;) А ассемблер PDP11 до сих вызывает приятные воспоминания.

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

> А сгенерировать gcc и вручную поправить ляпы не пробовали?

а пример небольшой программы и такой правки будет?

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

> Можешь смеяться, но это - один из важнейших критериев.

..

Мне нравились практически все языки, но которых я писал,


включая фокал ;)



Хм, и каким тогда образом ты пришёл к такому выводу? Мне вот скобочки изначально не нравились, но немного освоился и стал воспринимать их нормально. И мне не понятно, почему у других могут быть проблемы с этим. Синтаксис Python мне тоже никогда не нравился, но это совершенно не помешало мне написать на нём достаточно много строк кода. Любой синтаксис быстро перестаёшь замечать и концентрируешься на сути.

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

> а пример небольшой программы и такой правки будет?

да да, мне тоже интересна ручная оптимизация, особенно после компилирования iccой с ключом -fast

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

> Мне вот скобочки изначально не нравились, но немного освоился ..

про скобочки вообще адский «аргумент» противников. На предложение сделать скобочки еле видимыми в редакторе, они обычно мямлят

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

> На предложение сделать скобочки еле видимыми в редакторе, они обычно мямлят

это избавит от необходимости их вводить, а потом высматривать при редактировании?

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

> предложение сделать скобочки еле видимыми в редакторе

Давай уж сразу невидимыми :) И read-table переопределить, да.

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

> а потом высматривать при редактировании?

А кто их вообще высматривает? Emacs делает всю основную работу.

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

> Ну т.е. мы наконец пришли к тому, что основной претензией к CL являются скобочки?

Э? Я сразу сказал - синтаксис и невменяемые фанбои.

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

> Ну т.е. мы наконец пришли к тому, что основной претензией к CL являются скобочки?

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

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

> Хм, и каким тогда образом ты пришёл к такому выводу?

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

p.s. кстати, что у тебя за работа такая на лиспе, что ты постоянно висишь на лоре?

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

> это избавит от необходимости их вводить, а потом высматривать при редактировании?

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

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

> я к тому, что «дебильные скобочки» это вообще не аргумент

вы тоже бросаетесь в крайности :) таки аргумент, но не основной - все-таки действительно есть люди, которым они не нравятся

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

> К какому выводу? К тому, что производительность труда

повышается порою в разы, когда тебе нравится то, что ты делаешь?


Нет, что синтаксис влияет на то, что нравится, а что нет.

кстати, что у тебя за работа такая на лиспе, что ты постоянно

висишь на лоре?



Завидуешь?

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

Потому что там не Python, а Cython + C (читай в solutions.zip). Да, к тому же, и не работающее корректно. Т.е., может, там не учитывается какая-то особенность, которая могла скорость погасить в 2 раза, например. Кто знает? ;)

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

синтаксис в lispе? это что-то новенькое .. что там за синтаксис такой?

мне нравится как про скобки сказал Грэм как-то, типо когда я слышу, что у лиспа проблемы со скобками мне это напоминает: «Попробовал я ваш банан, белая часть внутри вкусная, а вот кожура снаружи горькая»

как думаешь какого бы вкуса был банан без кожуры?

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

отлично! там Python+Cython+C - чёрная магия вобщем :) и она ничем не хуже чем чёрно-магические оптимизации решения на sbcl

ошибка там явно мелочная какая-то, наверняка проблема в моей адхок реализации strncmp, которой как оказалось нет в linux, а проверить я не удосужился

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

> синтаксис в lispе? это что-то новенькое .. что там за синтаксис такой?

Ты из секты, которая считает, что у Лиспа нет синтаксиса? А он есть.

как думаешь какого бы вкуса был банан без кожуры?

Прикинь, не ты один знаешь, что банан надо чистить :D

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

> Ты из секты, которая считает, что у Лиспа нет синтаксиса? А он есть.

просвети, что за синтаксис, серьёзно? Я могу согласиться, что у s-выражения есть синтаксис, спецификация на этот синтаксис вот:

(a0 a1 a2..)

это схоже с тем, что, например у NSPredicate в gnustep, есть самостоятельный синтаксис

то есть ты хочешь сказать, что раз лисп умеет вычеслять s-выражения, то синтаксис s-выражения это lisp синтаксис? а как же быть если с s-выражениями работает не lisp, а что-нибудь другое, например конвертилка в html, написанная на haskell?

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

> просвети, что за синтаксис, серьёзно?

Первая ссылка в гугле: http://www.gigamonkeys.com/book/syntax-and-semantics.html

а как же быть если с s-выражениями работает не lisp, а что-нибудь другое

Значит, у этого другого Лисп-подобный синтаксис // К.О.

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

> Нет, что синтаксис влияет на то, что нравится, а что нет.

Ты думаешь, что люди в большинстве своем мазохисты? Я думаю, что нет. Более того, уверен, что многие программисты получают удовольствие от написания кода на своих языках, будь то питон, лисп, с#, ява, c++ или хаскель. И синтаксис играет непоследнюю роль.

Завидуешь?

А чему тут завидовать? В пустую тратишь время. Например, у меня после форумов часто бывает ощущение бесцельно потраченного времени. Но иногда просто не идет работа, вот и читаю форумы...

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

> И синтаксис играет непоследнюю роль.

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

А чему тут завидовать? В пустую тратишь время.

Например, у меня после форумов часто бывает ощущение


бесцельно потраченного времени



Ну это значит ты тратишь бесцельно время, я слежу статистикой количества переходов на http://lisper.ru/ с ЛОР и она даёт мне основания думать, что в этом есть смысл ;)

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

> Но если нет у тебя, то почему они должны быть у других?

Это 5 :D Если мне нравится Haskell, то почему он не нравится Вам? Зачетная логика. Вы не гипножаба?

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

> Это 5 :D Если мне нравится Haskell, то почему он не нравится Вам?

Зачетная логика. Вы не гипножаба?


Ответ на вопрос почему мне не нравится Haskell не имеет никакого отношения к синтаксису (хотя и у него синтаксис тот ещё).

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

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

Если мы с тобой оба готовы принять «скобочки», то это не значит, что они не могут не нравится другим. Увы.

Кстати, я считаю синтаксис Хаскеля одним из лучших как и ML-подобных языков. Предпочтения все же есть меня ;)

dave ★★★★★ ()

немного оффтопика - помимо поддержки С++0х в VC2010 включили возможность hotpatching'а, так что можно любую функцию подменить на лету, почему решил написать - mv как-то указывал на это как на плюс лиспа против С/С++

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

> Если мы с тобой оба готовы принять «скобочки», то это не значит,

что они не могут не нравится другим.


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

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

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

> хотя и у него синтаксис тот ещё

Как по мне, так синтаксис у него приятный, в отличие много от чего. Так почему, если он нравится мне, он не нравится Вам?! (ц) архимаг

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

> так что можно любую функцию подменить на лету

Ну ты же не можешь изменить тип возвращаемого значения? Или типы агрументов? Или их колличество? А изменить определение класса? А изменить определение шаблона и потом перекомпилировать зависящие от него функции?

P.S. Вообще рад за C++

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

> Как по мне, так синтаксис у него приятный, в отличие много от чего.

Так почему, если он нравится мне, он не нравится Вам?!


Вы читать то умеете? Я выше писал, что и синтаксис лиспа не вызывает у меня восторгов (а больше всего нравится синтаксис в стиле С), но я принимаю его ради тех преимуществ, которые даёт CL. Собственно, в этом и заключается моя мысль, что синтаксис не имеет значение. Нравится он или нет это не важно, ибо его просто перестаёшь замечать. Какой бы он ни был. Я вот даже на Perl кое-что писал...

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

синтаксис у C отвратительный. Если бы не нормальные IDE, то больше тратилось бы времени на удовлетворение компилятора, а не на решение проблемы.

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

> *erlang программисты смотрят на этот пост с улыбкой*

Хм, у «улыбающихся erlang-программистов» есть инструмент, сопоставимый со SLIME?

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

> А клиент - там я уже сделал Perl-конвертер из C# классов в формы списков/редактирования (XAML).
хороший подход, только не маловато ли информации для хорошего гуя только в C# классах (даже с учетом аннотаций) ? там же помимо типичных crud действий много чего можно наворотить

Касательно «1000 боилерплейта», тут меня терзают смутные сомнения. :)

Чтобы за 1 строкой спрятать 1000, эти строки всё равно надо написать!


например, определение сущности с наследованием -> уровни гуй/web, классы, хранилище и наприер cкелет доки, и конечно там «темлейты» будут не сравнить с боилерплейтом - но они не на один раз

Работу, как правило, ускоряют библиотеки, а не выразительные скобочки языка :)

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

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

> возможность hotpatching'а, так что можно любую функцию подменить на лету
да, а объекты на лету менять можно ?)
hint: make-instances-obsolete

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

> Ну ты же не можешь изменить тип возвращаемого значения? Или типы агрументов? Или их колличество? А изменить определение класса? А изменить определение шаблона и потом перекомпилировать зависящие от него функции?

libtcc( правда только для С ) позволит программе пересобрать себя в рантайме, но разве это надо? одно дело закрыть уязвимость/баг, а другое - по сути перейти на новую версию, тем более такой переход для серверного ПО можно организовать прозрачно без всякой перекомпиляции

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

> Ну ты же не можешь изменить тип возвращаемого значения? Или типы агрументов?

ужас какой; если это хочется, значит посыпется много где

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

Или их колличество?

а тут может и надо согласиться — допустим, хочется передать в одном месте доп. флажок

А изменить определение класса?

нафиг, можно создать субкласс, а менять — вряд ли надо

А изменить определение шаблона и потом перекомпилировать зависящие от него функции?

на лету? нафиг.

Вообще рад за C++

вот давай расскажи на примерах, где это hotpatching реально полезно — это могло бы быть реальной киллерфичей лиспа

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

> только не маловато ли информации для хорошего гуя только в C# классах (даже с учетом аннотаций) ?

при наличии человеческих аннотаций (типа как в с++ — аргумент шаблона может быть адресом статической переменной) было бы не маловато

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

> а зачем? чтоб медленней работать?
чтоб новые функции/методы могли с ними работать, иначе это действительно годится только дырки латать и то не все, медленней тут не причем кстати

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

> только не маловато ли информации для хорошего гуя только в C# классах (даже с учетом аннотаций) ?

и если уж ты спрашиваешь, приведи пример того, что, возможно, по твоему, на аннотациях не выразимо

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

> чтоб новые функции/методы могли с ними работать, иначе это действительно годится только дырки латать и то не все

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

медленней тут не причем кстати


ну да - динамические языки пользуются «бесплатно» такой возможностью :)

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

> чтоб новые функции/методы могли с ними работать, иначе это действительно годится только дырки латать и то не все

hotpatching нужен __ТОЛЬКО__ для латания дырок

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