On 02/04/2011 10:33 AM, mathew wrote:
> On Thu, Feb 3, 2011 at 22:29, Jeremy Bopp <jeremy / bopp.net> wrote:
>> Globs aren't implemented by the OS or the filesystem.
> 
> Wrong.
> 
> % man -s3 glob
> 
> GLOB(3)                   Linux Programmer's Manual                   GLOB(3)
> 
> NAME
>        glob,  globfree  - find pathnames matching a pattern, free memory from
>        glob()
> 
> SYNOPSIS
>        #include <glob.h>
> 
>        int glob(const char *pattern, int flags,
>                 int (*errfunc) (const char *epath, int eerrno),
>                 glob_t *pglob);
>        void globfree(glob_t *pglob);
> [...]


That implementation is provided by libc:

$ dpkg -S glob.h
libc6-dev: /usr/include/glob.h

As a result, we are free to ignore it, and in fact Ruby must ignore it
because Ruby has some extensions not supported by this function.  We
don't have such an option when it comes to the case-sensitivity of
filesystems.  Feel free to try to prove me wrong on that point though.

> And on Windows:
> http://msdn.microsoft.com/en-us/library/8bch7bkk.aspx

The same is true on Windows.  The implementation of glob functionality
is something that the programming environment is able to ignore simply
by implementing its own.  Furthermore, what you linked does not appear
to be a generic globbing function.  I think it will only work for
expanding program arguments, so you probably can't use it within your
program to scan directory contents using a glob.

The question that the Ruby community has to answer is how it wants to
handle something like globbing where canonical tools included with one
platform behave differently than equivalent tools on another one do.

My argument is that where possible, such as with globbing, Ruby should
pick a single implementation to be the default on all platforms.  It
doesn't matter what the default is as long as it's functional and as
consistently implemented as possible on the platform.  This aids writing
cross platform scripts since there are fewer gotchyas when porting the
scripts.  If Ruby chose instead to implement platform specific quirks by
default, the script writer would have yet another set of things for
which he/she must account during development and testing.

Now, if there was enough desire, it should be possible to implement
platform-specific quirks; however, their use should be completely
optional and never the default.

-Jeremy