История изменений
Исправление LamerOk, (текущая версия) :
В случае printf все его разумные применения это семейство безопасных функций которое вполне укладывается (...) в систему типов С++
Верно. Но решать эту задачу языковыми средствами С/С++ не удобно. А задача типовая.
А произвольный «DSL» my_eval(«``DSL`` lines here», ...) будет настолько хорош насколько будет хорош интерпретатор my_eval
Тоже верно.
В таком случае (если DSL достаточно сложный и нужны проверки в compile-time) лучше сделать внешний язык *.dsl -> *.cc
Опять же верно, именно так и делают - см. lex/yacc.
Но форматная строка принтфа - промежуточный случай. Делать внешний препроцессор - оверкилл, всех устраивает текущее решение, которое является компромиссом между удобством использования и «безопасностью».
Исходная версия LamerOk, :
В случае printf все его разумные применения это семейство безопасных функций которое вполне укладывается (...) в систему типов С++
Верно. Но решать эту задачу языковыми средствами С/С++ не удобно. А задача типовая.
А произвольный «DSL» my_eval(«``DSL`` lines here», ...) будет настолько хорош насколько будет хорош интерпретатор my_eval
Тоже верно.
В таком случае (если DSL достаточно сложный и нужны проверки в compile-time) лучше сделать внешний язык *.dsl -> *.cc
Опять же верно, именно так и делают - см. lex/yacc.
Но форматная строка принтфа - промежуточный случай. Делать внешний перпроцессор - оверкилл, всех устраивает текущее решение, которое является компромиссом между удобством использования и «безопасностью».