Hi Srinath,

Sorry for the late response. Clojure code gets eventually compiled into
java byte code. So it can be run from Java.

Performance-wise running clojure directly is quite slow. Actually the
startup time of clojure is slow [1]. However, we can use gen-class or proxy
keywords of clojure to say a clojure namespace should generate a java class
directly. I think we should be able to use *load* or *compile* functions of
clojure to compile it beforehand and simply do a java call on that class.

For an extension that does exponentiation, the pure clojure syntax would be
something similar to below for a function that returns power for two
parameters.

(defn exp [x n]
  (reduce * (repeat n x)))

If we write a function executor making use of the current extension points
of Siddhi and java.lang.Math.pow(), it will be something like below.

(ns org.wso2.siddhi.math
  (:import '(org.wso2.siddhi.core.function FunctionExecutor))
  (:use [clojure])
  (:gen-class
    :name org.wso2.siddhi.math.PowerFunction
    :extends [org.wso2.siddhi.core.function.FunctionExecutor]))

(defn -processEvent [this params (Object.)]
  (. Math pow (aget params 0) (aget params 1)))

The siddhi query would be something like below.

from healthStatStream#window.lenght(1) join avgLoadTable
on healthStatStream.nodeId == avgLoadTable.nodeId
select healthStatStream.nodeId, custom.power(healthStatStream.load -
avgLoadTable.load , 2) as variance
insert into loadVarianceStream;

Since clojure is interoperable with Java  [2] (which is same for Scala I
think), we can directly use Java classes in clojure and vice versa. Clojure
syntax is more towards functional/Lisp like syntax more than Scala IMHO. So
if we are looking at providing extensions that are geared a bit more
towards object oriented style, +1 to use Scala instead of Clojure. Though
clojure does have a certain techy appeal because it is more of a functional
programming language... :-)

[1] http://nicholaskariniemi.github.io/2014/02/25/clojure-bootstrapping.html
[2]
https://github.com/clojuredocs/guides/blob/master/articles/language/interop.md

Thanks,
Lasantha

On 26 November 2014 at 11:11, Srinath Perera <[email protected]> wrote:

> Can we run Clojure from Java? How fast would that be? Can we give a
> example on how it will look like?
>
> I was chatting with Sanjiva, and he proposed java scripts. However, until
> we switch to Java 8, it is slow. Need to discuss that.
>
> --Srinath
>
> On Mon, Nov 24, 2014 at 1:20 PM, Lasantha Fernando <[email protected]>
> wrote:
>
>> Can we use Clojure for this? Clojure can be used as a dynamic language as
>> well [1,2]. I think we should be able to use the load-file [3] function or
>> load/load-script [4,5].
>>
>> Since clojure has a strong affinity to Storm, someone coming in from
>> Storm background will be more used to Clojure IMHO. Clojure also supports
>> lambda expressions. (It is also mostly a functional programming language
>> :-))
>>
>> [1]
>> http://nicholaskariniemi.github.io/2014/01/26/clojure-compilation.html
>> [2]
>> http://nicholaskariniemi.github.io/2014/02/06/clojure-compilation2.html
>> [3] https://clojuredocs.org/clojure.core/load-file
>> [4] https://clojuredocs.org/clojure.core/load
>> [5] https://clojuredocs.org/clojure.main/load-script
>>
>> Thanks,
>> Lasantha
>>
>> On 22 November 2014 at 09:15, Srinath Perera <[email protected]> wrote:
>>
>>> Would that needs tools.jar in the classpath?
>>>
>>> One advantage of scala are lamba function (e.g. see Sameera's slides on
>>> java 8) .. but disadvantage is you need to learn scala a bit.
>>>
>>> --Srinath
>>>
>>> On Fri, Nov 21, 2014 at 4:43 PM, Rajeev Sampath <[email protected]>
>>> wrote:
>>>
>>>>
>>>> On Fri, Nov 21, 2014 at 10:40 AM, Srinath Perera <[email protected]>
>>>> wrote:
>>>>
>>>>> Useful to have in competition with Storm. Performance is the concern.
>>>>>
>>>>> One ida is to get extensions as scala function and running is using
>>>>> https://code.google.com/p/scalascriptengine/
>>>>>
>>>>>
>>>> This will be a very useful feature to have.
>>>>
>>>> Also another option is to let users embed plain java code inline, and
>>>> then convert it to bytecode at the query initialization time with a
>>>> bytecode generator like Javassist.
>>>> http://www.csg.ci.i.u-tokyo.ac.jp/~chiba/javassist/
>>>>
>>>>
>>>> Thanks
>>>> Rajeev
>>>>
>>>>
>>>>> WDYT?
>>>>>
>>>>> --Srinath
>>>>>
>>>>> --
>>>>> ============================
>>>>> Blog: http://srinathsview.blogspot.com twitter:@srinath_perera
>>>>> Site: http://people.apache.org/~hemapani/
>>>>> Photos: http://www.flickr.com/photos/hemapani/
>>>>> Phone: 0772360902
>>>>>
>>>>> _______________________________________________
>>>>> Architecture mailing list
>>>>> [email protected]
>>>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Rajeev Sampath
>>>> Senior Software Engineer
>>>> WSO2, Inc.; http://www.wso2.com.
>>>>
>>>> Mobile:
>>>> * +94716265766 <%2B94716265766>*
>>>>
>>>
>>>
>>>
>>> --
>>> ============================
>>> Srinath Perera, Ph.D.
>>>    http://people.apache.org/~hemapani/
>>>    http://srinathsview.blogspot.com/
>>>
>>> _______________________________________________
>>> Architecture mailing list
>>> [email protected]
>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>>>
>>>
>>
>>
>> --
>> *Lasantha Fernando*
>> Software Engineer - Data Technologies Team
>> WSO2 Inc. http://wso2.com
>>
>> email: [email protected]
>> mobile: (+94) 71 5247551
>>
>> _______________________________________________
>> Architecture mailing list
>> [email protected]
>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>>
>>
>
>
> --
> ============================
> Blog: http://srinathsview.blogspot.com twitter:@srinath_perera
> Site: http://people.apache.org/~hemapani/
> Photos: http://www.flickr.com/photos/hemapani/
> Phone: 0772360902
>
> _______________________________________________
> Architecture mailing list
> [email protected]
> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>
>


-- 
*Lasantha Fernando*
Software Engineer - Data Technologies Team
WSO2 Inc. http://wso2.com

email: [email protected]
mobile: (+94) 71 5247551
_______________________________________________
Architecture mailing list
[email protected]
https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture

Reply via email to