<lop...@gmail.com> writes:

> Phillip, Paul - thanks a lot for you suggestions!
>
> Phillip - I will definitely give your trick a try.
>
> Right now, without experimenting, I see two shortcomings. First, as Paul 
> mentioned, checking assertion status via call to Java function will 
> introduce performance penalty, whereas the use of pure Java assert 
> construct would leave minimal overhead when disabled. 


Not convinced that this is true. The Java assert construct only has
minimal overhead because of a JVM trick -- that is the if check is
compiled out. In Java this requires JVM support, but in lisp as far as I
can tell, it's trivial; you just do the check in a macro. Consider...


;; this is the "are assertions on or off" variable
(def assertions-on true)

;; this is our macro -- which prints to tell us when the if statement evals.
(defmacro assrt [body]
  (println "checking assertions on")
  (if assertions-on
    body))

;; this is the condition that we are checking
(def y true)

;; and here we test 100 times
(doseq [k (range 100)]
  (assrt
   (when y
     (println "Yikes!!!"))))



The "checking assertions on" is only run once (actually, it appears to
happen twice for me, and I have no idea at all why). Same trick as
Java -- optimise the check away at compile time.

Indeed, this is how Clojure's assert works.



> Second issue is that with the described hack it would be difficult to
> switch assertions on/off on a per module basis, which is allowed by
> the jvm options.

Okay.

>
> So let me be a bit more precise. It would be great to have 
>
> (awesome-assert (some-test x y z))
>
> which one can switch on/off on a per 'ns' basis via Java options + which 
> leaves the smallest possible overhead when disabled.


I think that you are worried about the overhead unnecessarily, though.
The assert status is checked at macro expansion time. If per module
switching on and off is what then I would suggest that you build on top
of the existing assert.

Phil

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to