While I'm not as familiar with the CLR and its bytecode syntax, from what I 
can tell from the README, mage and insn seem to have similar goals and 
ideas.

I'll attempt to summarize the differences that I could find, if the mage 
author *nasser* is available I would appreciate his or her input.

Mage provides fns for yielding the Clojure data that it consumes. At one 
point in development I also did this. Something like the following.

(insn/visit :members [(insn/field [:public] "foo" :int)
                      (insn/method :init [:int :void]
                        [[:iload 1]
                         #_...])])

I ultimately decided against this approach. I felt that using raw Clojure 
data provided more clarity, which is of course subjective. You can easily 
implement these and more application-specific versions yourself if you 
desire. I use the library for a couple of unreleased projects and I have 
fns named emit-box, emit-proxy-method, etc.

Mage will automatically flatten nested bytecode sequences. This is not 
necessary in my opinion since you can just use unquote-splicing within an 
op sequence.

Mage has the concept of named local variables. I don't know if this is a 
CLR concept, I assume this is a convenience feature to avoid having to 
refer to method locals by number. If so, I could easily implement this as 
it seems to be the same concept as Insn's autogenerated labels.

Finally, mage seems to require always writing out an assembly .dll to disk 
on each emit. Not a big deal, but Insn allows more control in this regard 
as your generated classes may exist entirely in memory.

Anyway, I hope this helped. Again I am only passingly familiar with mage 
and I have not read the source code. I would also be nice if the mage 
author would provide some tests. :)


On Friday, August 18, 2017 at 10:44:54 PM UTC-7, Colin Fleming wrote:
>
> This looks very interesting. How would you compare this to Mage for the 
> CLR? Are they essentially equivalent?
>

-- 
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/d/optout.

Reply via email to