Трамплины и продолжения

Aug 27, 2016 06:17

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

trampoline, continuations, continuation passing style, tail recursion, haskell, lisp, tco, elm

Leave a comment

kika August 27 2016, 06:52:53 UTC
Отличный пост с метавыводом.

Великолепная иллюстрация к тому почему я ушел с Эльма (написав на нем всего строк 500). Проще освоить базовый хаскель чем так себя мучить.

Интересно конечно как долго Эван будет жрать кактус и не вводить монады и тайпклассы. Главное, это практически ничего не стоит.


Reply

thedeemon August 27 2016, 07:15:28 UTC
Так это дело политическое: введешь монады, отпугнешь пользователей, мейнстримом не станешь. У него отличный доклад был на эту тему - как стать мейнстримом, как не распугать народ. Вот когда в C# они появятся в явном виде (а не только где-то глубоко в семантике LINQ), тогда можно будет.

Reply

kika August 27 2016, 07:24:05 UTC
Доклад-то отличный и на митапах ранних мы это обсуждали и я был ярым энтузиастом этого дела, наконец-то все хорошее без всего плохого, не надо ломать мозг об эти сложности. Пока собственно с хелловорлдов не съехал и не стал писать что-то полезное.

На самом деле Эльм отлично разгребает дорогу перед Пурескриптом, все очень радуются.

Reply

swizard August 27 2016, 11:23:46 UTC
Ну, де-факто тайпклассы и монады в эльме равно есть. Просто монады в виде полуобязательной функции "andThen" для типов-врапперов, функторы в виде функций "map", а тайпклассы в виде "специальных" типов "number". "comparable" и тд.

Осталось только принять волевое решение, и объявить это публично, что, мол, да - монады :)

Reply

dmzlj August 28 2016, 08:14:37 UTC
А программирование на типах там есть? Монады это всё фигня и есть в сиплюсплюсе, точнее, их там можно сделать. Ну, более менее сделать. Как в окамле будет выглядеть.

Reply

kika August 28 2016, 20:26:32 UTC
Так от этого заявления же ничего не изменится. Свой тайпкласс как нельзя было объявить так и будет нельзя. Ну даже хрен с ними со своими, нельзя же будет все равно добавить даже свой инстанс к существующему. По-моему каждый второй юзер Эльма пишет сначала свои union types типа data DayOfWeek = Sun|Mon|Tue|... а потом как дурак toInt:Day -> Int чтобы их сравнивать. Я вот лично в этом месте чувствовал себя полным идиотом.

Reply

dmzlj August 28 2016, 08:13:09 UTC
Базовый хаскель не решает проблему JS. А GHCJS... Я хочу увидеть человека, который на нем что-то реальное сделал. В продакшоне.

Reply

kurilka August 28 2016, 10:09:53 UTC
мы с тобой очно общались :)
так что мечты сбываются

Reply

dmzlj August 28 2016, 12:17:15 UTC
Хочу подробностей!

Reply

kurilka August 28 2016, 13:10:32 UTC
По честному там небольшая внутренняя тулза, основной косячино вылез в виде https://github.com/ghcjs/ghcjs/issues/449 .
Reflex же прикольный, но сообщество небольшое, приходится напильником местами править.
Фронтенд с бэкэндом стыкуются через Servant (на котором бэкэнд работает).

Reply

kika August 28 2016, 20:12:03 UTC
Я не про решение "проблемы JS" (whatever this means), а про то, что Эльм сконструирован как Хаскеле-подобный язык без "плохих частей" Хаскеля, под которыми подразумеваются отнюдь не те, которые на самом деле являются слабыми местами Х-ля (типа рекордов или row polymorphism), а те, которые сложны для тупых (типа монад, функторов, аппликативов и проч. алгебры).
В результате получилось то, что получилось - сложность-то осталась, просто ее тщательно заштукатурили и закрасили. Монадические вычисления есть, но комбинировать их можно только каким-нибудь одним единственным способом, реализация которого спрятана где-то под капотом или нельзя вообще, если об этом заранее не подумал лично Эван или приближенные к нему лица.
И на своем опыте я понял что проще прочитать книжку про хаскель (20 раз подряд даже) и понять наконец что ж там происходит, чем каждый раз заново изучать сложные правила взаимодействия простейших "какбымонад" в Эльме, потому что так как получалось раньше, теперь не получается, ибо мне теперь надо чуть-чуть по другому и ВНЕЗАПНО ЭТО МЕНЯЕТ ВСЁ!!!11.
А я представляю собой как раз типичную ЦА Эльма - я терминально тупой в во всем что хотя бы отдаленно похоже на дискретную алгебру.

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

Reply

dmzlj August 28 2016, 20:34:18 UTC
Но вот тут теряется момент, ради чего это всё. Если речь зашла об эльме, то значит, что требуется решать проблему JS, потому что ни на что большее Эльм вроде не претендует и не годен.

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

И возвращаясь к хаскелу - можно хоть 50 раз прочитать по нему книжку, но это не приблизит нас к решению проблемы JS, сегодня за вечер я так и не смог собрать ни одного ghcjs-ного приложения....

Reply

kika August 28 2016, 21:44:54 UTC
> сговняли, как получилось

Не, это сознательное дизайн решение. Я спрашивал Эвана лично и масса людей спрашивала (и наверное продолжает) в мейллисте и он раз за разом подтверждал что монад, тайпклассов и HKT нет и не будет потому что это "сложно". А политика и code of conduct должны обеспечивать inclusion и бла-бла-бла.
И его видео going mainstream об этом же говорит.
Я не уверен конечно что "не будет", возможно это всё так "хитро задумано", но пока нет и на горизонте вроде не прослеживается. Хотя я перестал внимательно следить за Эльмом где-то в районе 0.16.

> не приблизит нас к решению проблемы JS

Какой именно? Если бы у js была бы одна проблема :-)

Reply

dmzlj August 29 2016, 06:05:18 UTC
1) У меня серьезные сомнения, что можно сделать подобный язык, взяв хаскелл и убрав все "ненужное". Всё это "ненужное" лезет само и определяется неким набором аксиом при начале разработки языка. И если так получилось, что он статически типизированный, чистый, ленивый, то остальное само прилезет, так или иначе.

2) Джаваскрипт сам по себе проблема, разбивать его на более мелкие проблемы бессмысленно:

https://wiki.haskell.org/The_JavaScript_Problem

Reply

kika August 29 2016, 07:15:13 UTC
Ну вот пурескрипт получился гораздо более целостный, но его не изобретали "для тупых". Это "легкий хаскель", с нулевым рантаймом (поэтому без ленивости), но зато с нормальными рекордами и полиморфизмом для эффектов. То есть язык сделать можно, просто он не будет "простой". С моей точки зрения странно брать хаскель в качестве образца для простого языка.

В этом смысле почти любой язык - проблема. Яваскрипт конечно выдающийся по бардачности, но плохому программисту тот же Питон, скажем, тоже не мешает писать омерзительные программы. Я уж про Перл не говорю, на котором написана гора совершенно отличного софта и во много раз больше ядерного говна. И на С++ тоже, а уж Ява...

Reply


Leave a comment

Up