История изменений
Исправление Freyr69, (текущая версия) :
Во-первых, таких задач не так уж и много. Ну или мне так везло.
Скорее второе, зависит от типичных задач, гоферам и параметрический полиморфизм не нужен в их web мирке (где живут одни строки). Кодогенерация решает ту же задачу, что и полиморфизм, HKT, модули/классы, а именно — code reuse в конкретных случаях, когда бойлерплейт генерируется на основе значения. Пример: строки форматирования (regexp, sql, разные форматтеры), протоколы, описанные формально (adtgen, graphql), парсеры из bnf (до свидания костыли, вроде menhir и lex) и.т.д.
Во-вторых, ту же кодогенерацию можно делать внешними средствами
А вот это как раз зло и небезопасно, ибо внешнее средство код воспринимает в лучшем случае как ast (и тогда оно не знает про типы), в худжем транслирует текст в текст, и вот тогда это небезопасный кривой ад.
И с internal DSL проблема в том, что язык должен быть мощнее, а значит сложнее. И порог входа в него будет выше.
На любителя, конечно, я предпочитаю с первого взгляда видеть намерение писавшего код, а не утопать в левом нечитаемом бойлерплейте. Для тех, кто любит наоборот, есть замечательные языки, вроде Go и java.
Исходная версия Freyr69, :
Во-первых, таких задач не так уж и много. Ну или мне так везло.
Скорее второе, зависит от типичных задач, гоферам и параметрический полиморфизм не нужен в их мирке. Кодогенерация решает ту же задачу, что и полиморфизм, HKT, модули/классы, а именно — code reuse в конкретных случаях, когда бойлерплейт генерируется на основе значения. Пример: строки форматирования (regexp, sql, разные форматтеры), протоколы, описанные формально (adtgen, graphql), парсеры из bnf (до свидания костыли, вроде menhir и lex) и.т.д.
Во-вторых, ту же кодогенерацию можно делать внешними средствами
А вот это как раз зло и небезопасно, ибо внешнее средство код воспринимает в лучшем случае как ast (и тогда оно не знает про типы), в худжем транслирует текст в текст, и вот тогда это небезопасный кривой ад.
И с internal DSL проблема в том, что язык должен быть мощнее, а значит сложнее. И порог входа в него будет выше.
На любителя, конечно, я предпочитаю с первого взгляда видеть намерение писавшего код, а не утопать в левом нечитаемом бойлерплейте. Для тех, кто любит наоборот, есть замечательные языки, вроде Go и java.