Исправление AndreyKl, (текущая версия) :
Берём типовой пример применения gettext. Типы параметров шаблона разные, а сам шаблон зависит от переменной окружения.
Если шаблон дан в тексте программы (ну т.е. что то вродеprintf(_("Hello, %name"), name)
), то напрашивается вариант как то доказать что gettext (и ngettext) не испортят шаблон. Т.е. он будет изоморфен оригиральному в смысле подставленных переменных.
Либо как то расширить printf чтобы она могла игнорировать часть параметров (т.е. если они даны в строке командной, но не даны в шаблоне, то пофиг). Но это уже становится не совсем printf, кажется.
Если же вообще могут быть любые модификации шаблона или шаблоны не видно в коде, то есть возможность какую то функцию написать используя идрисовскую рефлексию, которая в компил тайме прочитает шаблоны (вероятно из отдельных файлов) и проверит что параметры подходят.
Естественно гарантия распространяется только на проверенные шаблоны, если их кто то изменит после компиляции, то как бы и всё. Но это, кажется, очевидно.
Если вообще любые шаблоны которые пользователь вводит в рантайме, то надо писать обычную проверку в рантайме, можно ли что-то ещё придумать я не знаю.
Исправление AndreyKl, :
Берём типовой пример применения gettext. Типы параметров шаблона разные, а сам шаблон зависит от переменной окружения.
Если шаблон дан в тексте программы (ну т.е. что то вродеprintf(_("Hello, %name"), name)
), то напрашивается вариант как то доказать что gettext (и ngettext) не испортят шаблон. Т.е. он будет изоморфен оригиральному в смысле подставленных переменных.
Либо как то расширить printf чтобы она могла игнорировать часть параметров (т.е. если они даны в строке командной, но не даны в шаблоне, то пофиг). Но это уже становится не совсем printf, кажется.
Если же вообще могут быть любые модификации шаблона или шаблоны не видно в коде, то есть возможность какую то функцию написать используя идрисовскую рефлексию, которая в компил тайме прочитает шаблоны и проверит что параметры подходят.
Естественно гарантия распространяется только на проверенные шаблоны, если их кто то изменит после компиляции, то как бы и всё. Но это, кажется, очевидно.
Если вообще любые шаблоны которые пользователь вводит в рантайме, то надо писать обычную проверку в рантайме, можно ли что-то ещё придумать я не знаю.
Исправление AndreyKl, :
Берём типовой пример применения gettext. Типы параметров шаблона разные, а сам шаблон зависит от переменной окружения.
Если шаблон дан в тексте программы (ну т.е. что то вродеprintf(_("Hello, %name"), name)
), то напрашивается вариант как то доказать что gettext (и ngettext) не испортят шаблон. Т.е. он будет изоморфен оригиральному в смысле подставленных переменных.
Либо как то расширить printf чтобы она могла игнорировать часть параметров (т.е. если они даны в строке командной, но не даны в шаблоне, то пофиг). Но это уже становится не совсем printf, кажется.
Если же вообще могут быть любые модификации шаблона или шаблоны не видно в коде, то можно какую то функцию замутить на идрисовой рефлексии которая в компил тайме прочитает шаблоны и проверит что параметры подходят.
Естественно гарантия распространяется только на проверенные шаблоны, если их кто то изменит после компиляции, то как бы и всё. Но это, кажется, очевидно.
Если вообще любые шаблоны которые пользователь вводит в рантайме, то надо писать обычную проверку в рантайме, можно ли что-то ещё придумать я не знаю.
Исходная версия AndreyKl, :
Берём типовой пример применения gettext. Типы параметров шаблона разные, а сам шаблон зависит от переменной окружения.
Если шаблон дан в тексте программы (ну т.е. что то вроде
`printf(_(«Hello, %name»), name)`), то напрашивается вариант как то доказать что gettext (и ngettext) не испортят шаблон. Т.е. он будет изоморфен оригиральному в смысле подставленных переменных.
Либо как то расширить printf чтобы она могла игнорировать часть параметров (т.е. если они даны в строке командной, но не даны в шаблоне, то пофиг). Но это уже становится не совсем printf, кажется.
Если же вообще могут быть любые модификации шаблона или шаблоны не видно в коде, то можно какую то функцию замутить на идрисовой рефлексии которая в компил тайме прочитает шаблоны и проверит что параметры подходят.
Естественно гарантия распространяется только на проверенные шаблоны, если их кто то изменит после компиляции, то как бы и всё. Но это, кажется, очевидно.
Если вообще любые шаблоны которые пользователь вводит в рантайме, то надо писать обычную проверку в рантайме, можно ли что-то ещё придумать я не знаю.