3 ms·
How is the specification checked, statically or dynamically?
by ngrilly 9y ago
How is the specification checked, statically or dynamically?
- hellofunk 9y agoYou 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…