Re: The case for glob in SRFI 170 Lassi Kortela 11 Dec 2019 18:03 UTC

> Yes, it's messy.  Yes, it has a lot of goofy options.  Yes, its regex
> language is like nothing else anywhere (except its ancestors in the DEC
> operating systems, though [...] comes from Unix regex).
> BUT: it's in C, and that makes it fast even on slow Schemes.  I think
> that alone makes it worth considering.

As stated, I'd vote against it in this SRFI, but would probably like it
in a dedicated higher-level SRFI.

- As mentioned, it's significantly higher-level than the other stuff in
this SRFI.

- It's easy to implement in portable Scheme on top of a directory walker.

- Not sure interpreter speed is the bottleneck even on slow
interpreters; is interpretation really slower than syscalls and disk I/O?

- Probably not implemented in C on Windows API. Windows FindFirstFile()
has its own weird glob syntax that we need to deliberately avoid in any

- There is no agreement on a particular glob syntax. In particular, "**"
globs are useful but not as standard. How are international characters
handled? Etc.

- It'd be nice to use S-expression regexps instead of using string
regexps and worrying about escaping. Probably would be nice to have the
traditional string regexps as well.

> Specifics:  I think GLOB_MARK (terminate directory paths with slashes)
> should always be on, GLOB_ERR (raise an error if opening or reading a
> directory fails, otherwise carry on) should be exposed, and GLOB_NOSORT
> (don't sort results) should be exposed in the reverse sense.
> So:  (glob pattern report-error? sorted?).   The result is a list of
> strings, possibly an empty list (if you want the bash behavior of
> returning the pattern as a result, do it yourself).

Another procedure that begs for keyword arguments ;-) Or some other way
to pass named options.

Not much opinion on those particular options; errors should probably be
on by default.

> Glibc exposes a lot more flags than Posix, but I don't think any of them
> are killers.

We also need to support musl libc and the like. Do those have glob()?