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

Aug 27, 2016 06:17

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

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

Leave a comment

Comments 35

swizard August 27 2016, 11:08:29 UTC
Ну так-то да, по-факту, в пакете elm-lang/trampoline, действительно, не хватает функции "andThen : Trampoline a -> (a -> Trampoline b) -> Trampoline b"

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

Reply


thedeemon August 27 2016, 05:54:53 UTC
Интересно, как с этим у PureScript.

Reply

kika August 27 2016, 06:54:53 UTC
Ну вот, пока я разрабатывал программное обеспечение, уже успели спросить.
Я ниже запостил, а вот программное обеспечение в виде текста:
https://gist.github.com/kika/b3dbba968f52614f71ac89d066723b21

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

Reply

thedeemon August 27 2016, 07:12:36 UTC
Это обход проблемы, а сама проблема-то там есть? Если в лоб написать взаимнорекурсивные ф-ии, что будет?

Reply

kika August 27 2016, 07:19:52 UTC
Куда ж она денется, подлежащий яваскрипт от наличия монад лучше не становится. Пурескрипт точно так же оптимизирует в цикл только классическую хвостовую рекурсию.

... )

Reply


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:08:56 UTC
Концепция TCO для тех людей, которые подобные языки делают - слишком сложна. Но включить в язык бесплатный jump goto по вычисляемому адресу они (censored) могли бы? Тем более, что в любом наборе инструкций оно есть. Кстати, отвественность за отсутствие этого пресловутого вычисляемого goto лежит на самых корифеях. Они бы сделали - остальные бы повторили в своих поделиях. Одна нищасная инструкция... Её отсутствие - такой же фейл, как нулевой указатель Хоара, или даже худший.

Reply


all_round_man September 5 2016, 13:16:07 UTC
Согласно эволюционной теории не "более лучшие", а более приспособленные к данной ситуации вытесняют других. Разве у Lisp'а на практике не были в своё время проблемы (пришлось даже пилить лисп-машину), хаскель делали без оглядки на практику, для академических нужд - чего же теперь жаловаться.

Reply


Leave a comment

Up