On 13-05-09 10:49 PM, Mikhail Zabaluev wrote: > I agree. And if expressions are in Rust, you get the benefit of a Rust > compiler validating them. A lambda must produce _some_ string to be > valid; match clauses will be checked for correct type and coverage. > Dynamically interpreted syntax engines do not usually give this benefit > and may in fact let the translator unwittingly and quietly introduce > runtime errors, which are less likely to be caught the farther off the > beaten track the language is (I may be bitter at my EU-market Samsung > TV, that has the Russian language option for the UI, but starts crashing > randomly if you switch to it; no grudge against the Samsung folks on > this list).
The sublanguage is non-effectful, non-stateful, non-turing-complete, and has no functions. Evaluation time is linear and harmless if it fails: it can just use the default (non-translated -- wrong language) format if interpretation goes wrong. I will reiterate why I keep objecting to "using rust code" as both the wrong answer and an answer to the wrong question: - Dynamic loading of translations currently happens in the deployment environment. If you require rust code, you're requiring a dynamic load of a .so or .dll rather than reading a .po file for a string. - There are extensive existing toolchains, processes and communities who have no interest in learning to program in rust to (eg.) translate a web browser or consumer product. http://www.poedit.net/screenshots.php https://en.wikipedia.org/wiki/Virtaal http://mozilla.locamotion.org/ http://weblate.org/en/ http://sourceforge.net/projects/translate/ etc. etc. - The whole point of this thread is to _design_ a formatting mini-language. If "plain rust code" was sufficient for this, people would write: let x = do fmt::with_sfmt_writer |f| { f.putstr("there are "); a.fmtD(f); f.putstr(" files in the folder"); }; rather than: let x = fmt!("there are %d files in the folder", a); Yet here we are discussing that format-string mini-language. So all I'm saying is: given that we _are_ discussing the design of a held-in-a-format-string mini-language, why not make sure that design scales nicely to cases when a translator has to express the little bits of logic they often do, such as: "there {num_files, plural, one {is one file} other {are {num_files} files}} in the folder" This is relatively easy to adopt as an extension to {}-based format strings, whereas it's tricker with %s-based. I think this thread keeps going repeatedly off into discussion of problems we are not facing. We're not trying to eliminate format-string mini-languages from rust: we're trying to design one. We're not trying to solve all hypothetical turing-complete translation tasks: we're trying to accommodate the level of translation-variability that normal translators (even people writing non-translated format strings in their home language) run into all the time when composing format strings. -Graydon _______________________________________________ Rust-dev mailing list Rust-dev@mozilla.org https://mail.mozilla.org/listinfo/rust-dev