Thanks -- I had seen some Clojure startup benchmarks in relation to Java 9: 
https://mjg123.github.io/2017/10/04/AppCDS-and-Clojure.html.  I did try these 
on one of my projects that uses a lot of Clojure library deps and I went from 
~11 second startup to ~5 (both were AOT/direct linking compiled).

I appreciate the discussion.  I think it's helped me think a little more 
clearly about what my goals/requirements are.  I started thinking about why 
I've chosen to use any JVM language over just plain Java.  After all, no JVM 
language is going to execute faster or have more support behind it than Java 
itself.  I won't enumerate all the reasons writing Java code is more painful 
than <other language here> code as the reasons are mostly personal per 
developer, and I'm guessing that most people here in this particular forum have 
already come to the same conclusion.

I'd love to know why people here have chosen Clojure.  Everyone chooses it for 
persistent data structures and functional programming, as Clojure essentially 
forces you to use them.  I've found structuring my code that way seems less 
prone to bugs and more reusable and compose-able.  However, with Java now 
having lambda functions it's possible to get *some* of the same advantages 
there.

For me the selling point of Clojure was the learning a lisp.  My motivation for 
wanting to learn a lisp, and the fact that Clojure was so perfectly practical I 
could potentially use it professionally (JVM!) started me down the path.  Where 
I hoped I would end up is leveraging macros.  I've always done a lot of code 
generation in my Java projects... from things like using templating languages 
to generate java source files to using annotations to generate additional java 
code at compile time.  What I've found with Clojure and macros is -- it's 
sooooo much easier to do those same things.  I know there's a huge emphasis in 
the Clojure community (and maybe all lisps) of not over-using macros... and I'm 
not disagreeing with that.  But to me that's the heart of why I would ever use 
a lisp.

So finally full circle (back to Kawa)...  *my* primary benefit of Clojure could 
be summarized as "JVM + Macros" (which to me is orthogonal to the 
immutable/functional benefit - as it is possible to program this way in other 
languages, and I'd argue writing in Clojure/<another JVM language> usually 
limits projects to small teams of experts and on those types of teams it would 
be possible to be disciplined enough to do so in a language that doesn't force 
it).  Kawa has "JVM + Macros" (though at the moment I find scheme macros much 
less approachable than CL or Clojure macros).  It also has different 
development trade-offs, but the things I like:
  - Little to no overhead over plain Java
    - I think this would make it sell-able in the enterprise world for 
*libraries* or *part* of a project.  Could a couple of experts using Kawa 
replace a lot of the code I used to generate in far more awful ways than macros 
(templates or annotation processors)?  If Kawa easily compiles to Java and has 
good code completion (i.e., not IFn passing Objects but actual static method 
definitions with types)...  I bet "regular" Java-based software projects 
wouldn't mind consuming libraries written in Kawa.  And if there wasn't a 10-20 
second startup penalty for using the library... (even though I know, in 
"situated" programs this really doesn't matter at all -- but it does from a 
language adoption standpoint.  I think I couldn't convince a project to let me 
write a library in Clojure if it took 20 seconds to load the library).
  - Still has macros and sexps
    - I prefer Clojure's syntax to scheme (maybe just because I'm used to it).  
But it's really the same argument people have against using Clojure 
(parenthesis :-)).  Other low overhead JVM languages like Scala don't have 
macros.
  - I could still use Clojure's data structures and even STM from Kawa
    - Clojure's runtime is very approachable and a beautiful piece of software 
(I don't even mind the Java source formatting -- reminds of C# actually -- why 
indent *everything* when the language says you must have a top level "form" 
(namespace in C# / class in Java? :-)).  Using its data structures and even STM 
would be very straightforward.

My motivations in writing here is to get people's feedback about using Kawa / 
other lisps when their main motivation is to stay in the JVM ecosystem.  I'd 
love to see both Kawa and Clojure be so easy to intertwine into a larger Java 
project that they could be used even within large enterprise-y Java projects 
(for some portion of the project).  My interest in that is mostly personal :-). 
 I think using them in this manner would be a real benefit to both those 
projects and to developers on them.  That's what gets me excited about Kawa -- 
I think I maybe I could sell it's use as a library in a large corporate project 
simply because there's no runtime overhead.

‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐

On April 5, 2018 4:00 AM, Didier <didi...@gmail.com> wrote:

> I'd recommend you try some of the startup optimizations for the JVM that 
> zprint does: 
> https://github.com/kkinnear/zprint/blob/master/doc/filter.md#we-all-know-that-clojure-startup-is-so-slow-that-this-will-not-work
> 
> With it, they've managed to get the Clojure zprint filter to start faster 
> then the equivalent ClojureScript one.
> 
> 
> --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> 
> 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.


-- 
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