Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does clojure convert dashes in names to underscores in the filesystem?

Tags:

clojure

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 filesystem. Can anyone explain this to me, and is it possible to be able to use dashes in the filenames too?

like image 632
yazz.com Avatar asked Dec 12 '10 09:12

yazz.com


Video Answer


2 Answers

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_.

like image 188
Stuart Sierra Avatar answered Sep 22 '22 01:09

Stuart Sierra


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.

like image 25
pauldoo Avatar answered Sep 22 '22 01:09

pauldoo