athos / JiSE

JiSE: Java in S-Expression
Eclipse Public License 2.0
104 stars 2 forks source link

Are there any comparison benchmarks for the examples? #3

Open zcaudate opened 4 years ago

zcaudate commented 4 years ago

I'm really curious about the typical speeds for the algorithms you implemented (like AOBench).

I ran it, it feels really fast but I'm not sure what a comparison might be.

Do you have any comparisons that you might have ran yourself?

zcaudate commented 4 years ago

Sorry to spam you like this. I promise I'll stop. I wanted to get across some ideas that I've been thinking about - why clojure is getting stuck and how jise might be able to solve some of these problems.

  1. Performance. It is accepted that immutability is the way to go and it's really easy to build very robust systems. However, once a system has been built and is needed to be optimised, there is no real pathway forward - and sometimes it's easier to just write Java in order to get the best benchmarks. I think Jise can really help with that.

  2. Interop. Not able to extend abstract classes is a big pain when doing repl-driven development because the two options are gen-class and writing in java which both means restarting the repl. This is really not good. I really like jise because of this - does the library do class reloading on eval? Also, there's a whole bunch of libraries that rely on extending Abstract Classes to work (I've listed a bunch already) --> even JUnit would be much easier to run with clojure with this pathway. My main focus right now is to find an easy way to interop with native libraries so javacpp and jnr (both need to extend abstract classes) would be great to get working.

  3. Clojurescript. This is the official way of getting Clojure to run JS. I'm really not a fan of it because:

    • it brings in Google closure,
    • there's a huge compilation pipeline,
    • packages are not npm friendly
    • the tooling around code editing does not compare with the JS ecosystem.

I think there is a more efficient pathway to writing portable JS code with Wasm, especially when immutability is not as important as performance. The example for AOBench would definitely have much impact if it were for JS.

This example for instance would be great to port to jise: https://mirkosertic.github.io/Bytecoder/chapter-1/chapter-1-1/page-1-1-a/

  1. Code Generation.

I think this would be really wishful thinking but it would be really great if code can be transformed. The current way of generating classes (one class per function) is quite wasteful and it'll be really great if there was a way of generating one class per namespace. That will make it super quick to load.