4 ms·
You can see my other comment to your same question. Also, even if you do not use Spec, you do get a lot of compile-time validation like making sure all argument
by hellofunk 9y ago
You can see my other comment to your same question. Also, even if you do not use Spec, you do get a lot of compile-time validation like making sure all arguments are passed to a function, not leaving them out, etc. Try that in Javascript!
- ngrilly 9y agoAre you sure about "you do get compile-time validation like making sure all arguments are passed to a function"? If I run this: (defn bar [x y] (println x y)) (defn foo [v] (if v (bar 12 42 79))) (foo false) The program prints nothing and Clojure reports no error. But when I run this: (foo true) Then Clojure reports an error: Exception in thread "main" clojure.lang.ArityException: Wrong number of args (3) passed to: user/bar, compiling:(.../test.clj:6:5)
- hellofunk 9y agoI don't spend much time on the JVM, but in ClojureScript, this is what I get for a similar test (including multiple definitions of foo in my case, i've elided the whole source file here): (defn foo [a b] :hi) (defn bar [] (foo 1 2 3)) WARNING: Wrong number of args (3) passed to prepost.core/foo at line 25 src/cljs/prepost/core.cljs WARNING: foo at line 24 is being replaced at line 48 src/cljs/prepost/core.cljs It's a compile-time warning even when the app is not running, but ClojureScript goes through a different compilation step than JVM Clojure. Perhaps I was mistaken in the JVM case, or someone else can chime in.
- ngrilly 9y agoMaybe ClojureScript is doing something Clojure doesn't at compilation time…