News for hackers. Stuff that matters.
Re:Why Is Swift's String API So Hard? by zzalpha on Friday November 06, 2015 @11:00AM (#10520121)
I wonder if part of the reason for this is that Common Lisp dates back to a time when filesystem path structures were a lot more variable.

These days, you either have Unix-style or Windows-style paths and that's basically it

But go back 30 years and there was quite a bit more variety that would make an abstraction layer all but a requirement if you wanted to define a portable language spec.

Re:Why Is Swift's String API So Hard? by gongador on Sunday November 08, 2015 @02:28PM (#10529497)
Indeed.

"The dominant file systems at the time the design was done were TOPS-10, TENEX, TOPS-20, VAX VMS, AT&T Unix, MIT Multics, MIT ITS, not to mention a bunch of mainframe OS's. Some were uppercase only, some mixed, some were case-sensitive but case-translating (like CL). Some had dirs as files, some not. Some had quote chars for funny file chars, some not. Some had wildcards, some didn't. Some had :up in relative pathnames, some didn't. Some had namable root dirs, some didn't. There were file systems with no directories, file systems with non-hierarchical directories, file systems with no file types, file systems with no versions, file systems with no devices, and so on. People often critique the design now because Unix and Mac and DOS are so comparatively similar (compared to some of those others)..."

-- Kent Pitman in comp.lang.lisp, https://groups.google.com/forum/#!original/comp.lang.lisp/Pl...

Re:Why Is Swift's String API So Hard? by rprospero on Friday November 06, 2015 @12:46PM (#10520737)
I remember reading a LISP book from the 80's that gently bragged about how all the legacy C code would have to be rewritten after upcoming operating systems moved beyond identifying files by a tree of folders, but that your LISP code would be future proof.
Re:Why Is Swift's String API So Hard? by jdmichal on Friday November 06, 2015 @02:09PM (#10521310)
This strikes me as one of those instances were the cost of the abstraction exceeds the savings. There are some things which are simply core to your code. Attempting to abstract those things is going to create a lot of pain when, realistically, those things changing would require component rewrites anyway.

If you're working with files, you've probably made many implicit assumptions about how the file system works and how it is represented. So you are either going to have a leaky abstraction that works, or a non-leaky abstraction that has those assumptions built in and will break when porting to a system without those assumptions anyway.