git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] Poison gettext with the Ook language

From
Duy Nguyen <pclouds@gmail.com>
Date
Oct 23, 2018, 15:00 UTC
Message-ID
<CACsJy8CX78EbANbv8a354djJaO6dKRpXshHhHJTspJvOSewgpA@mail.gmail.com>
In-Reply-To
<8736sxc6gt.fsf@evledraar.gmail.com>

On Tue, Oct 23, 2018 at 12:17 PM Ævar Arnfjörð Bjarmason <avarab@gmail.com> wrote:

Show 30 quoted lines
>
>
> On Tue, Oct 23 2018, Johannes Schindelin wrote:
>
> > Hi Ævar,
> >
> > On Mon, 22 Oct 2018, Ævar Arnfjörð Bjarmason wrote:
> >
> >> So I think the only reason to keep it [GETTEXT_POISON] compile-time is
> >> performance, but I don't think that matters. It's not like we're
> >> printing gigabytes of _() formatted output. Everything where formatting
> >> matters is plumbing which doesn't use this API. These messages are
> >> always for human consumption.
> >
> > Well, let's make sure that your impression is correct before going too
> > far. I, too, had the impression that gettext cannot possibly be expensive,
> > especifally in Git for Windows' settings, where we do not even ship
> > translations. Yet see the commit message of cc5e1bf99247 (gettext: avoid
> > initialization if the locale dir is not present, 2018-04-21):
> >
> >       The runtime of a simple `git.exe version` call on Windows is
> >       currently dominated by the gettext setup, adding a whopping ~150ms
> >       to the ~210ms total.
> >
> > I would be in favor of your change to make this a runtime option, of
> > course, as long as it does not affect performance greatly (in particular
> > on Windows, where we fight an uphill battle to make Git faster).
>
> How expensive gettext() may or may not be isn't relevant to the
> GETTEXT_POISON compile-time option.

If a user requests NO_GETTEXT, they should have zero (or near zero) cost related to gettext. Which is true until now (the inline _() version is expanded to pretty much no-op with the exception of NULL string)

Show 5 quoted lines
> The effect of what I'm suggesting here, and which my WIP patch in
> <875zxtd59e.fsf@evledraar.gmail.com> implements is that we'd do a
> one-time getenv() for each process that prints a _() message that we
> aren't doing now, and for each message call a function that would check
> a boolean "are we in poison mode" static global variable.

Just don't do the getenv() inside _() even if you just do it one time. getenv() may invalidate whatever value from the previous call. I would not want to find out my code broke because of an getenv() inside some innocent _()... And we should still respect NO_GETTEXT, not doing any extra work when it's defined.

-- 
Duy
Previous: Johannes SchindelinNext: Ævar Arnfjörð Bjarmason
Message 43 of 49 in “Poison gettext with the Ook language”
  1. Poison gettext with the Ook languageNguyễn Thái Ngọc Duy, Oct 22, 2018
  2. SZEDER GáborOct 22, 2018
  3. 1/8 test-lib.sh: preserve GIT_GETTEXT_POISON from the environmentSZEDER Gábor, Oct 22, 2018
  4. 2/8 gettext: don't poison if GIT_GETTEXT_POISON is set but emptySZEDER Gábor, Oct 22, 2018
  5. Ævar Arnfjörð BjarmasonOct 22, 2018
  6. 3/8 lib-rebase: loosen GETTEXT_POISON check in fake editorSZEDER Gábor, Oct 22, 2018
  7. 4/8 gettext: #ifdef away GETTEXT POISON-related code from _() and Q_()SZEDER Gábor, Oct 22, 2018
  8. 5/8 gettext: put "# GETTEXT POISON #" string literal into a macroSZEDER Gábor, Oct 22, 2018
  9. 6/8 gettext: use an enum for the mode of GETTEXT POISONingSZEDER Gábor, Oct 22, 2018
  10. 7/8 gettext: introduce GIT_GETTEXT_POISON=scrambledSZEDER Gábor, Oct 22, 2018
  11. Duy NguyenOct 23, 2018
  12. 8/8 travis-ci: run GETTEXT POISON build job in scrambled mode, tooSZEDER Gábor, Oct 22, 2018
  13. Duy NguyenOct 23, 2018
  14. Jakub NarebskiOct 27, 2018
  15. Johannes SchindelinOct 22, 2018
  16. Ævar Arnfjörð BjarmasonOct 22, 2018
  17. Ævar Arnfjörð BjarmasonOct 22, 2018
  18. Junio C HamanoOct 22, 2018
  19. i18n: make GETTEXT_POISON a runtime optionÆvar Arnfjörð Bjarmason, Oct 23, 2018
  20. Junio C HamanoOct 24, 2018
  21. Jeff KingOct 24, 2018
  22. Junio C HamanoOct 25, 2018
  23. Jeff KingOct 25, 2018
  24. Ramsay JonesOct 25, 2018
  25. Jeff KingOct 25, 2018
  26. Ævar Arnfjörð BjarmasonOct 26, 2018
  27. Jeff KingOct 27, 2018
  28. Ævar Arnfjörð BjarmasonOct 27, 2018
  29. i18n: make GETTEXT_POISON a runtime optionÆvar Arnfjörð Bjarmason, Oct 24, 2018
  30. i18n: make GETTEXT_POISON a runtime optionÆvar Arnfjörð Bjarmason, Nov 1, 2018
  31. Junio C HamanoNov 2, 2018
  32. SZEDER GáborNov 2, 2018
  33. Ævar Arnfjörð BjarmasonNov 8, 2018
  34. SZEDER GáborNov 8, 2018
  35. Junio C HamanoNov 8, 2018
  36. Eric SunshineNov 8, 2018
  37. 0/2 i18n: make GETTEXT_POISON a runtime optionÆvar Arnfjörð Bjarmason, Nov 8, 2018
  38. 1/2 i18n: make GETTEXT_POISON a runtime optionÆvar Arnfjörð Bjarmason, Nov 8, 2018
  39. 2/2 Makefile: ease dynamic-gettext-poison transitionÆvar Arnfjörð Bjarmason, Nov 8, 2018
  40. Johannes SchindelinOct 23, 2018
  41. Ævar Arnfjörð BjarmasonOct 23, 2018
  42. Johannes SchindelinOct 23, 2018
  43. Duy NguyenOct 23, 2018
  44. Ævar Arnfjörð BjarmasonOct 23, 2018
  45. Duy NguyenOct 24, 2018
  46. Ævar Arnfjörð BjarmasonOct 24, 2018
  47. Junio C HamanoOct 25, 2018
  48. Jeff KingOct 25, 2018
  49. Junio C HamanoOct 27, 2018

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.