Hi all:
Shady is intended to be a collection of JVM interop facilities. Right
now it contains two useful pieces of functionality for producing iterop
classes: a version of `gen-class` supporting dynamic redefinition like
`deftype`; and a `defclass` macro providing a `deftype`-like interface
to that `gen-class`.
For example:
(ns example.defclass
(:use [shady.defclass :only [defclass]]))
(defclass Example [field1 field2]
:extend BaseClass
:constructors {[String String] [String]}
Example
(-init [arg1 arg2] [[arg1] [arg1 arg2]])
(newMethod ^String [^int param]
(str "example:" field1 ":" param ":" field2))
BaseClass
(override ^Long [^Class class] 10)
SomeInterface
(implementedMethod []
"Types defaulting to Object, as you'd hope."))
The interface is cleaner (IMHO), and normalized with the other Clojure
type-definition facilities. The support for dynamic class redefinition
is clinically proven to produce 73% less heartache for interop
situations where you need full JVM classes. Be warned though, under the
hood `defclass` does still use the same class-generation code as
`gen-class`, with all that implies (performance, methods backed by
functions bound to vars in the implementing namespace, etc).
You can get the source from github:
https://github.com/llasram/shady
And the jar from Clojars:
[shady "0.1.0"]
This is the first Clojure library I'm pushing for broader consumption,
so feedback is more than welcome.
-Marshall
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en