LINUX.ORG.RU

История изменений

Исправление 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, кажется.

Если же вообще могут быть любые модификации шаблона или шаблоны не видно в коде, то можно какую то функцию замутить на идрисовой рефлексии которая в компил тайме прочитает шаблоны и проверит что параметры подходят.

Естественно гарантия распространяется только на проверенные шаблоны, если их кто то изменит после компиляции, то как бы и всё. Но это, кажется, очевидно.

Если вообще любые шаблоны которые пользователь вводит в рантайме, то надо писать обычную проверку в рантайме, можно ли что-то ещё придумать я не знаю.