Thread

  1. Re: [PATCH] Fix severe performance regression with gettext 0.20+ on Windows

    Nazir Bilal Yavuz <byavuz81@gmail.com> — 2025-12-12T09:18:09Z

    Hi,
    
    On Thu, 11 Dec 2025 at 20:49, Andres Freund <andres@anarazel.de> wrote:
    >
    > Hi,
    >
    > On 2025-12-11 11:45:01 -0600, Bryan Green wrote:
    > > On 12/11/2025 10:05 AM, Andres Freund wrote:
    > > > On 2025-12-11 15:43:36 +0100, Peter Eisentraut wrote:
    > > >> On 10.12.25 01:45, Bryan Green wrote:
    > > >>> The attached patch takes a pragmatic approach: for gettext 0.20.1+, we
    > > >>> avoid triggering the bug by using Windows locale format instead of
    > > >>> calling IsoLocaleName(). This works because gettext 0.20.1+ internally
    > > >>> converts the Windows format back to POSIX for catalog lookups, whereas
    > > >>> 0.19.8 and earlier need POSIX format directly.
    > > >>
    > > >> I can confirm that this patch fixes the performance deviation from
    > > >> activating --enable-nls on Windows (tested with MSYS2/UCRT64).
    > > >
    > > > FWIW, Bilal and I had, IIRC, explicitly not enabled on windows CI because it
    > > > made the build process even slower. But perhaps we should re-measure the
    > > > difference and re-consider?
    > > >
    > > > Greetings,
    > > >
    > > > Andres Freund
    > > As long as you use Windows locale names once this patch is in place.
    > > Posix locale names will still incur the performance hit until the next
    > > gettext release. Once using the next gettext release there will not be a
    > > performance penalty for using an invalid locale on Windows.
    >
    > What I was referring to was that *building* with NLS support is slower than
    > building without, which is the reason why CI currently isn't testing NLS in
    > the "Windows - Server 2022, MinGW64 - Meson" task. Even with ccache, the CI
    > builds with mingw are pretty darn slow, adding the overhead of creating a good
    > number of additional files is (or was, haven't retested this recently) making
    > it even slower.
    
    I tested this and the timings (minute:seconds) of running tests:
    
    MinGW + NLS [1]: 16:01
    MinGW + Patch + NLS [2]: 13:57
    
    I ran the CI again to make sure and the speed up was similar.
    
    [1] https://cirrus-ci.com/task/5944143274311680
    [2] https://cirrus-ci.com/task/5477244862201856
    
    -- 
    Regards,
    Nazir Bilal Yavuz
    Microsoft