Комментарии 5
Нифига не понял страданий автора, он заинлайнил переменные, и сделал так, чтобы результат одной функции передавался в другую, и чего в этом достойно публикации?
Критикуя, предлагай! Только, пожалуйста, без птичьего жаргона.
Предлагаю изучить, что такое continuation-passing style. Это когда функция принимает дополнительный аргумент-функцию, и вместо возврата результат передаётся в эту функцию. Это будет максимально выраженной реализацией той вашей картинки, где стрелочки передаются между модулями напрямую. Насколько я знаю, BEAM оптимизирует хвостовые вызовы, так что вы сможете сидеть в своём REPL до посинения.
Прекрасное решение! Я его не знал. Думаю, что большая половина читателей его тоже не знали. Теперь знают. И всё благодаря вам.
А я только предложил метафору, которую реазовал как знал.
Тогда попутный вопрос, в чем преимущества и недостатки предложенных вами и мной способов?
Я подумал, что главное отличие вашего решения и конвейера это динамическая и статическая "маршрутизация" вызовов. Можно сказать, что динамическая интереснее, но я предпочту делать её через обычные сообщения между GenServer-ами. Про решение с GenServer я написал один абзац и объяснил почему в данном случае предпочел конвейер в качестве "утки".
А ваше предложение натолкнуло меня на мысль, что обе представленные схемы тоже неточны. Буду дописывать статью. Спасибо за мысли.

Дуализм стилей реализации интерпретатора