October 24th, 2009

Book

Наколенные поделия

Речь о том, что хаскель в принципе годится и для наколенных поделий тоже, не уступая скриптовым языкам. У меня задачи такие тоже бывают на работе - написать на коленке одноразовую поедалку текста, чтобы найти в большом файле аномалию. "Маленький датасет для тестов" у меня - это 2-4 гб. В среднем 60 гб, бывает что до 2 тб, и 10 тб не за горами. Перл такие объемы медленно хавает, где-то 15 мб-сек при простой обработке, падает до 2 мб чуть что сложнее. grep-sed я использую, но это неудобно для моих наколенных задач - чуть сложнее обработка чем может grep - всё, нужна интеграция язык общего назначения, считай шелловый код выкидывать.

Кроме того, иногда требуется UI, а какой на перле UI? Tk и wxWidgets только. Tk однопоточен и виджеты убогие, там, где Tk хватает, можно и MSHTA + JS, с ними меньше гемора по таблицам всяким и сложным лейаутам. А там, где нужен нормальный UI, на wxWidgets заебешься писать, нужно специализированный фронт-энд к нему писать. На перле не хочется, ибо был выбран исторически - как единственный язык с приличными возможностями абстрации и приличными либами, который я знал. Сейчас же есть финансовая и временнАя возможность рискнуть, слазить надо на что-то более приличное, чем ужас из значков имени Ларри. Всякие @{$#foo} не самые приятные выражения для отладки.

Варианта всего два  - Haskell и OCAML. Java слишком многословна и рутинна, Python медленный, да и с деплойментом не всё так хорошо, как хотелось бы.
 
Book

Haskell vs Prolog

Хаскел не сложнее Пролога. Но он 

1) подкупает видимой схожестью прогамм с алголовскими
2) не прощает ошибок

В результате первого пункта начинающие решают ничего не читать, а "врубиться интуитивно", и у них даже что-то получается - многие программы на Хаскеле можно читать и писать так, как будто это call-by-value language, а не graph rewriting system. 

Но при попытке написать что-нибудь большое и красивое сталкиваются с утечками и некомпилируемости программ ("борьба с тайпчекером").

Тогда они, по-прежнему уверенные, что всё просто, начинают читать статьи от таких же невежественных долбоебов, пытающихся объяснить на пальцах GRS, монадический ввод-вывод и систему типов. И получается у них "вычисления по требованию", "контейнеры-скафандрики", "лямбда-исчисление с нормальным порядком редукции", "списки экшенов", "значения с сайд-эффектами имеют тип IO" и прочая ересь и полуправда.
Book

Находки века

На Wikibooks есть стоящие статейки по хаскелу (читать именно в таком порядке):

http://en.wikibooks.org/wiki/Haskell/Performance_Introduction
http://en.wikibooks.org/wiki/Haskell/Graph_reduction
http://en.wikibooks.org/wiki/Haskell/Denotational_semantics
http://en.wikibooks.org/wiki/Haskell/Laziness

А также (о ужас, не понимаю, как мог пропустить)

http://www.haskell.org/haskellwiki/Category:Research
Book

Классические работы по языкам программирования

Вот отличный сборник классических трудов

http://www.cs.uu.nl/wiki/Techno/ProgrammingLanguageTheoryTextsOnline

По теме оттуда могу порекомендовать:

Rinus Plasmeijer and Marko van Eekelen. Functional Programming and Parallel Graph Rewriting.

Henk Barendregt. Lambda Calculi with Types.

Simon Peyton Jones and David R. Lester. Implementing functional languages: a tutorial.