You wrote, "Although it's hard to imagine a CPU so slow that case-conversion cost actually mattered, at some point that must have been the rationale" but in fact it was not. In fact it's the other way around.
I believe Multics was the first case-sensitive system, with Unix following its example. Until then everything was case insensitive (ITS, CTSS, TOPS-10, VMS, TENEX, CMS etc etc). Many of the early systems had only one case anyway, or the system code was, so if you had a terminal that supported multiple case it was automatically folded. e.g. the PDP-6/10 set of machines, although they supported 7 bit ascii (five characters to a word) also used a six bit character set (packed six characters to a word) that only had upper case.
Multics reveled in the luxury of its mainframe power (around 1 MIPS perhaps) and had a "full" (don't remember if it was 7 or 8 bit, suspect 7) ASCII character set.
You'll also see that many older programming languages (e.g. FORTRAN, LISP, and, sigh, BASIC and COBOL) are case insensitive while newer ones are not.
Today's case sensitivity does seem to be descended from Unix and C. Windows file names are still case insensitive. Windows will preserve the original case when displaying file names, but at the API level, file names are case insensitive (you can't have two files called "foobar" and "FOOBAR" in the same directory, and "delete foobar" will delete "FOOBAR"). Windows environment variable names are also case insensitive.
While we're on the subject: other forms of trolling are allowing control characters in filenames, not performing unicode normalization, and allowing filenames to begin with certain shell metacharacters.
So, if case has no meaning, why is it that in languages where everything could be done in all lower case, programmers create conventions that actually inject case?
The only languages that don't use case are those languages where case-insensitivity was aggressively enforced.
That's not a vote for case insensitivity.
And, that's before we start considering languages where case actually completely changes the glyph or has no well-defined meaning.
OS X is case-insensitive in the FS by default, so I guess that's a win? You'll never notice it until one day you lose a file when you're unpacking an archive from another platform that has different files named Makefile, makefile, and MAKEFILE (not that I'm condoning that practice).
More importantly, case folding is complicated or ill-defined in some non-English languages, and there are presumably edge cases in the algorithms. So it gets harder to tell what any given code will do.
If "var x" and "VAR X" were the same in JavaScript, we'd just have to make our company style guide longer. Having more ways to write different-looking but equivalent code isn't necessarily a good thing.
Sure, it's fun to write code like this: Circle circle = Circle.CIRCLE; But were I to use a case-insensitive language, I'm pretty sure I'd get comfortable not being able to do so.
Sounds like the kind of thing you should try before advocating it.
Yeah, case-sensitivity in programming languages is a sad artifact of the past, I believe (just my opinion).
There were research studies showing that folks made less errors with case-insensitivity, and it's something that would help novices without hurting "experts" at all (in fact, save time). Even Guido van Rossom thought it might be a good idea to make Python case-insensitive apparently, but folks revolted (NIMPY - not in my python!): https://mail.python.org/pipermail/python-list/2000-May/03710...
Ultimately, who cares if python or javascript (excuse me, Python or JavaScript) are case sensitive. That's just how they are designed, and they weren't designed for beginners. Maybe future language designers though might not do something solely because it is the tradition, the cargo cult practice.
> Java converts a 15-character mixed-case string to lowercase at about 11,600 conversions per millisecond [...]
Converting two strings to lowercase and comparing those is not case insensitivity. I present to you 4 characters: I, ı, İ and i. They break your application.
And that's where case-insensitivity becomes evil. I have no facts (other than code reviews I do) to back this up; but the amount of developers who don't understand case-insensitivity is hideously dangerous. Where I work I would venture to say I correct 95% of developers from this (C#):
Even that flops with the Turkish Is though - what you need there is "accent insensitivity".
I fundamentally agree with the argument that most things should be case insensitive - I just think that the task cannot be trusted to most of the developers today. Even though I am extremely well versed in globalization even I mess up the majority of the time. Case insensitivity is HARD.
Somebody said it. There are literally zero reasons for a programming language to not be case insensitive by default. Unicode shouldn't be a problem either, as long as there is a predetermined method of upcasing/downcasing everything.
I thought a lot of modern systems either disallowed folders and groups of same name with different cases. Or are designed in a way that there can exist multiple things with identical name. So I feel while I do agree completely. In many intelligently designed systems. It's a non issue. Though the domain/website thing Sometimes is quite annoying.
I believe Multics was the first case-sensitive system, with Unix following its example. Until then everything was case insensitive (ITS, CTSS, TOPS-10, VMS, TENEX, CMS etc etc). Many of the early systems had only one case anyway, or the system code was, so if you had a terminal that supported multiple case it was automatically folded. e.g. the PDP-6/10 set of machines, although they supported 7 bit ascii (five characters to a word) also used a six bit character set (packed six characters to a word) that only had upper case.
Multics reveled in the luxury of its mainframe power (around 1 MIPS perhaps) and had a "full" (don't remember if it was 7 or 8 bit, suspect 7) ASCII character set.
You'll also see that many older programming languages (e.g. FORTRAN, LISP, and, sigh, BASIC and COBOL) are case insensitive while newer ones are not.