Daniel Barlow <dan@...> writes:
> I haven't seen a better name than SB-POSIX yet, so I'll probably go
> with that. If I call it SB-OSI it'll only get arguments about whether
> it should have a completely different API on Windows
> (SB-OSI:WAIT-FOR-MULTIPLE-OBJECTS?) or is there something special
> about POSIXish systems that mean they get preferential treatment?
One good thing about calling it SB-POSIX is that it implies that it
will work the same on all POSIX platforms. Thus you can expect the
same behavior if you're on Linux, Solaris, BSD, whatever. Even
Windows, for the parts of POSIX that it supports.
If you want the non-POSIX stuff that is provided by the local
operating system you can use SB-SYSCALL. That could be different for
each operating system. The name implies this specificity.
Under Windows it wouldn't be a bad idea to provide 'emulation' in
SB-POSIX of POSIX functionality that isn't already provided by the
Windows API. An example would be mmap(). A number of these functions
would need to be implemented for porting SBCL anyway, so providing
them to the end user wouldn't be terribly difficult. The emulation
layer would need to be in C, not in Lisp, so the difference would be
essentially transparent to the Lisp user. It would also help to make
Unix-based Lisp programs oodles more portable to the Windows version,
SB-SYSCALL wouldn't be portable. That would be guaranteed. Any
portability would depend on inherent compatibility between operating
systems. So using SB-SYSCALL would doom you to a specific OS.
As for the question of things becoming POSIX standards in the future,
well what's wrong with having to update SB-POSIX? I say not to worry
about that until it actually happens. Everybody else interacting with
POSIX has to deal with the same problem.
Now the real dirty question is whether to implement specific parts of
the POSIX standards in specific packages. I think that would be a bad
James A. Crippen <james at unlambda.com> Lambda Unlimited
61.2204N, -149.8964W Recursion 'R' Us
Anchorage, Alaska, USA, Earth Y = \f.(\x.f(xx))(\x.f(xx))