> In particular, files and programs are the same in MS-DOS and Unix. You can, for instance, ls the ls command or cat the cat command.
Uh, no you cant:
$ ls ls
ls: cannot access ls: No such file or directory
$ cat cat
cat: cat: No such file or directory $ ls $(which ls)
$ cat $(which cat)looks just like (funcall #'funcall ... ;)
Its more like
ls /bin/ls
you can simply cat cat or ls ls by cd-ing to /bin first... with the caveat that some distros have moved them to /usr/bin or somewhere, hence the 'which'
The execute bit comparison is especially specious. If I try to execute a non-executable file, it fails. It doesn't go look for an executable file with the same name. Same as if I try to invoke 0 in Clojure. e.g. (0)
He's right that the symbol resolution of the first entry has different rules but ignores the fact that the shell isn't very good at higher order commands. Which is probably okay for a shell but not much use for a modern programming language.
Finally, he's right that multiple namespaces are a good idea, but that's Accepted Truth these days. It's just that we think namespacing should be under the control of the dev, not dependent on the type of the variable.