I have been using clojure for a couple of months now and one thing I really don\'t understand is why dashes in namespace names must be represented as underscores in the file
It's a necessary workaround for Java interoperability.
When a Clojure namespace is AOT (ahead-of-time) compiled into a Java .class file, it has to have a name that is a valid Java identifier. Dashes aren't valid in Java class names, so Clojure converts them to underscores. It also converts characters like *
into words like _STAR_
.
Do you mean that the .class
files on disk have underscores where the functions in Clojure had dashes? I'm sure I read that it's something to do with the JVM not supporting dashes in those file names. (Or at least it not being a guarantee that it supports them.)
This is only a limitation of the class file names, and Clojure silently deals with this problem anyway. Your own code can still handle files with dashes in the filename.
I'm sorry that I don't have a reference for this right now.