воскресенье, 30 апреля 2017 г.

Впечатления от месяца работы с Haskell

Так уж получилось, что данный месяц я провел за прохождением курса по ФП на Haskell. Курс оказался чрезвычайно интересным, но несколько сложным. Я узнал довольно много интересных вещей. Некоторые из них мне понравились, некоторые не очень. Однако тем не менее, некоторые вещи оказались немного непонятны.


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

Ещё CPS показался несколько жестью, в которой распутать поток исполнения порой чрезвычайно трудно (особенно в последнем задании курса). Но неожиданно на ней делают и довольно интересные вещи, например trampoline style. Непонятно правда, каково всё это в поддержке и можно ли будет в этом разобраться через год-два написания. Есть ощущение, что на это просто забивают и живут с магией. Или же не используют вообще?

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

Вообще есть ощущение, что сырой Haskell сильно неудобен, так как  некоторые участки библиотек, входящих в стандартную поставку Haskell Platform вовсю юзают расширения языка, а boilerplate иногда писать несколько тяжело. В wikibooks тоже вовсю юзают расширения языка, к примеру GeneralizedNewtypeDeriving, который чертовски крут, а мы чем хуже? Почему бы сразу их не включить в сам язык?

Планирую таки внимательно прочитать Real World Haskell, возможно удастся ответить себе на часть этих вопросов. 

Комментариев нет:

Отправить комментарий