Windows registry handling / hugs CVS repository?

Sigbjorn Finne sigbjorn_finne@hotmail.com
Mon, 2 Apr 2001 16:03:27 +0200


Antony Courtney antony@apocalypse.org writes:
> 
> I think that the way hugs uses the registry under Windows is
> dangerous and buggy.  This message describes the problems
> and proposes some alternative designs.  I welcome comments
> and suggestions.
> 
    ... points deleted....
> 

Hi,

I'm mostly in agreement with what you're saying & it's a good
thing you bring it up. However, I think that the use of the Registry
for storing options is a Good Thing, and shouldn't be scrapped
just because the current interface has a flaw (or two.) It's
a good thing because:

  - the current interface provides a simple way for users to configure
    their setup. I'd claim that twiddling with environment variables
    isn't as straightforward for many Windows platform users
    (which in some cases means editing autoexec.bat and restarting.)

  - it simplifies the work of installation software; not just an installer
    for Hugs itself, but libraries that are distributed separately
    (via the Projects subkey.)

  - it lets you configure machine-wide Hugs settings, something
    that's fiddly to do using environment variables (.bat or shell
    scripts that wrap the hugs executable; tedious.) Setting the
    machine-wide Hugs settings could be easier though (at the
    moment, you'll have to use a Registry editor.)

  - it avoids running into notorious problems with not big enough
    environment blocks on various Win9x systems, should the
    length of an environment variable like HUGSFLAGS become
    too long.

So, the question is more what is an appropriate and safer way
of configuring the Hugs registry settings. Alastair implemented the
current behaviour, and has identified before the very weakness
you bring up. My suggestion would be the following:

  - if there's a HUGSFLAGS environment variable, use it & ignore
    the registry. Keeps people that prefer & are accustomed to
    env. vars happy.
  - :set doesn't persist to the registry.
  - provide an option like :regsave for persisting to the Registry.
    A nop if you're using environment variables. :set emits an
    informational message telling the user that :regsave is now needed
    to achieve persistence.
  - provide a UI for changing the options. WinHugs does this
    well (via the Options dialog); HaskellScript also via one of
    its samples, and you could easily imagine an applet that came
    with the Hugs distribution which did the same thing (I wrote
    a Hugs98 control panel applet which did just this sometime
    ago, and I could  locate the code if there's interest in providing
    something like this.) The UI could also let you modify the
    environment variable, at least on Win2k and NT systems.

i.e., not too far from what you're suggesting.

BTW, re: buffers - the Registry API (RegQuery*) lets you query
the size of a string value (REG_SZ), so there's really no need to
guess string lengths, they can be precisely determined.

--sigbjorn