Re: Alright, fess up, who's unhappy with clojurescript?

2011-07-30 Thread Alexander Yakushev
The moment I saw the previous controversial topic - about yes language push - I realized that Clojure has become mature. When the people who do not agree with some choices appear not just outside but in the community itself - it means that the language matters to them despite the parts they don't

Re: Alright, fess up, who's unhappy with clojurescript?

2011-07-31 Thread Alexander Yakushev
On Jul 30, 6:02 pm, daly d...@axiom-developer.org wrote: While it is fine to say get involved in head-punching I think it is important to realize that it is Rich's head being punched. Seems like I was unclear in my statement. I'll try to do it again. At any point of a lifetime of a computer

Implementing multimethods in pure Clojure

2010-12-11 Thread Alexander Yakushev
I am currently giving some lectures about Clojure to a group of students. One of the Lisp features I promote to them is the ability to write language in the language itself. So during the lecture when I talked about multimethods one student asked if one could write own multimethods implementation

Re: Implementing multimethods in pure Clojure

2010-12-11 Thread Alexander Yakushev
On Dec 11, 5:37 pm, Ken Wesson kwess...@gmail.com wrote: On Sat, Dec 11, 2010 at 3:32 AM, Alexander Yakushev Making the thing work with (name args ...) is not too too difficult. You'd have to have defmethod output both a def of an atom like above, but with a gensym for a name, and a defn

Re: Implementing multimethods in pure Clojure

2010-12-11 Thread Alexander Yakushev
On Dec 11, 6:56 pm, Meikel Brandmeyer m...@kotka.de wrote: Hi, I suppose you are Unlogic from IRC. I don't whether you saw it, but I posted some rough sketch:http://paste.pocoo.org/show/303462/ It just introduces the function binding, no other global objects are introduced. The methods

Re: Implementing multimethods in pure Clojure

2010-12-12 Thread Alexander Yakushev
On Dec 12, 12:24 am, Meikel Brandmeyer m...@kotka.de wrote: I'm a bit confused. It just looks like a normal function call. (my-defmulti foo type) (my-defmethod foo String [x] (str A String: x)) (foo Hello, World!) So it just looks like an ordinary function. Extracting the multi-call

Re: Implementing multimethods in pure Clojure

2010-12-12 Thread Alexander Yakushev
On Dec 12, 12:36 am, Ken Wesson kwess...@gmail.com wrote: You can change the metadata on the object held by the atom (if that object supports metadata) via (swap! a with-meta ...). One thing a bit annoying is if you want to alter the metadata in an incremental way. To do that atomically

Re: How to disallow unlisted optional argument keys?

2011-01-30 Thread Alexander Yakushev
Why not use a constraint? It looks much cleaner. (defn hello [ {:keys [a b] :as input}] {:pre [(= (set (keys input)) #{:a :b})]} hello) You can learn more about constraints here: http://vimeo.com/channels/fulldisclojure#8399758 -- You received this message because you are

How to disallow unlisted optional argument keys?

2011-01-30 Thread Alexander Yakushev
Where is this documented? I couldn't find the documentation for it. I learned about them in Full Disclojure screencasts by Sean Devlin. -- 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

a tour of Clojure (network analysis of Clojure projects)

2011-02-01 Thread Alexander Yakushev
Great work! Very informative indeed. Especially thank you for sharing with Overtone, tremendously interesting project and presentation. -- 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

Deflayout - define Swing UI declaratively

2011-02-02 Thread Alexander Yakushev
. But often you don't need that complex layout, any simpler layout will do. So I spent an evening writing this https://github.com/alexander-yakushev/deflayout . Currently only BorderLayout and FlowLayout are supported, but layouts can be added easily. I wanted somebody to look at the code and give

Deflayout - define Swing UI declaratively

2011-02-03 Thread Alexander Yakushev
(deflayout frame {:west gamepanel :east (deflayout sidepanel [nextpanel (JButton. Exit)] :flow :trailing)) Actually I thought about something like that, but then I decided to come up with something at least a bit uniform. -- You received this message because you are subscribed to the Google

Google Summer of Code 2012 - any mentors?

2012-02-09 Thread Alexander Yakushev
Hello, I am wondering if there is there anybody willing to take part in this year's GSoC as a mentor? I would be happy to contribute this summer's time to hacking Clojure and there are probably more students that would. Best regards, Alexander -- You received this message because you are

Re: Google Summer of Code 2012 - any mentors?

2012-02-26 Thread Alexander Yakushev
So the application submiting procedure for organizations starts tomorrow but sadly there isn't any word about it at least on Confluence. There are willing mentors on the clojure-dev list and ideas to submit but as far as I understood from the GSOC site an organization must apply to host all these

Re: Google Summer of Code 2012 - any mentors?

2012-02-27 Thread Alexander Yakushev
I post the following proposal here because I'm not sure I've done it right. It would be interesting for me and may be for someone else. Decent Emacs-based Clojure IDE Brief explanation: Clojure has a critical need for a good novice-friendly IDE. Counterclockwise certainly has its advantages but

Re: Google Summer of Code 2012 - any mentors?

2012-02-27 Thread Alexander Yakushev
On Feb 27, 9:13 pm, Cedric Greevey cgree...@gmail.com wrote: Whoa, hold your horses. Aren't Decent and Emacs-based mutually-exclusive? No, they are not. Novice-friendly and Emacs-based definitely are. Well, if we are considering a novice in software development then you are probably right. I

Re: Google Summer of Code 2012 - any mentors?

2012-02-27 Thread Alexander Yakushev
On Feb 27, 10:00 pm, Cedric Greevey cgree...@gmail.com wrote: The emacs learning curve is more like a vertical cliff face than a ladder with lots of small steps... I still don't get the point you are trying to bring. Is it You can't be productive with Emacs? If so then you are wrong and because

Re: Google Summer of Code 2012 - any mentors?

2012-02-27 Thread Alexander Yakushev
On Feb 28, 12:59 am, Cedric Greevey cgree...@gmail.com wrote: ... Ok, I got the idea now and I for sure understand your frustration with Emacs. Emacs is definitely not for the weak of spirit (it's not a pun in any way, I just compare your words to my own beginner's experiences) requiring you to

Re: Google Summer of Code 2012 - any mentors?

2012-02-29 Thread Alexander Yakushev
Can someone confirm that Clojure/core has already sent an application GSoC participation? I am just wondering if core is already interested in this kind of event or the initiative currently comes only from mentors. -- You received this message because you are subscribed to the Google Groups

Re: Google Summer of Code 2012 - any mentors?

2012-03-01 Thread Alexander Yakushev
Here's one more idea but I'm not quite sure how to implement it so if anyone can confirm that it is doable then it would be nice to have this idea on the GSoC list. Clojure already has a set of benchmarks to test its performance but the data is not so easy to get for an common Clojure user

Re: Google Summer of Code 2012 - any mentors?

2012-03-04 Thread Alexander Yakushev
I hate to be boring but if the application has not been filed yet then now is the best time to do it. Only five days left, and it is good to have some spare time to correct the mistakes, you know:). -- You received this message because you are subscribed to the Google Groups Clojure group. To

Re: Google Summer of Code 2012 - any mentors?

2012-03-07 Thread Alexander Yakushev
Great job answering the application questions, David! I was just wondering if Steve Yegge could vouch for Clojure since I remember him being very excited about the language, so maybe he might say a nice word for Clojure participation... -- You received this message because you are subscribed

Re: Alternate set literal syntax?

2012-03-24 Thread Alexander Yakushev
Your point is clear and valid but isn't it a bit harsh to write the response in a tone like this? After all we are asking and answering questions here, it's not like something is going to change after one request. BTW it is nice to hear Clojure being reliable enough in people's eyes to be

Re: ANN: Clojure/dev Google Summer of Code 2012 Proposals Selected!

2012-04-24 Thread Alexander Yakushev
have been accepted for Clojure/dev's Google Summer of Code 2012! Jon Rose - Lightweight Clojure editor Raphael Amiard - Pluggable backend infrastructure for ClojureScript Alexander Yakushev - Toolchain for dynamic Clojure development on Android Ambrose Bonnaire-Sargeant - Typed

Re: -- macro proposal

2013-07-17 Thread Alexander Yakushev
What a twist. Does any of the participants care to comment on this one? A hundred posts of bashing a person from the position of authority while the macro in question already sits in Core. I am against the usage of it myself, and closely followed previous discussions on this topic to

Re: -- macro proposal

2013-07-17 Thread Alexander Yakushev
this, and was rejected by Rich and company. Have anything changed in Clojure since then, that arguments against as- are no longer valid? On Wednesday, July 17, 2013 7:55:37 PM UTC+3, Nelson Morris wrote: Note the original discussion was from 2010. On Wed, Jul 17, 2013 at 11:49 AM, Alexander Yakushev unl

Re: -- macro proposal

2013-07-17 Thread Alexander Yakushev
added to eliminate: (let [x ... x ... x ...] ...) Which is pretty ugly and also it's pretty easy to get into trouble. David On Wed, Jul 17, 2013 at 12:49 PM, Alexander Yakushev unl...@bytopia.orgwrote: What a twist. Does any of the participants care to comment

Can't get namespace metadata

2013-07-20 Thread Alexander Yakushev
Example: user= (meta (find-ns 'clojure.set)) nil user= (meta (find-ns 'clojure.string)) nil user= (meta (find-ns 'clojure.core)) {:doc Fundamental library of the Clojure language} clojure.core is the only namespace that has metadata. Apparently because it has metadata set differently

Re: Can't get namespace metadata

2013-07-23 Thread Alexander Yakushev
On Saturday, July 20, 2013 8:50:18 AM UTC-4, Alexander Yakushev wrote: Example: user= (meta (find-ns 'clojure.set)) nil user= (meta (find-ns 'clojure.string)) nil user= (meta (find-ns 'clojure.core)) {:doc Fundamental library of the Clojure language} clojure.core is the only namespace that has

Re: [ANN] Nightcode, an IDE for Clojure and Java

2013-08-02 Thread Alexander Yakushev
This initial version looks very mature already! I wonder what will become of it by the time of the release. Great job, Zach! Eagerly waiting to see Nightcode's future. On Friday, August 2, 2013 4:03:03 PM UTC+3, Zach Oakes wrote: I’ve been working on a simple IDE for the past few months. It

[ANN] Compliment - a completion library you deserve

2013-08-09 Thread Alexander Yakushev
Dear community, I've just released the initial version of my clojure-complete fork, Compliment. I decided to move it into a separate project after I rewrote most of it. Here is project's link: https://github.com/alexander-yakushev/compliment . There is a rationale in README, where I explain

GSoC report: Extend Neko library for Android

2013-09-23 Thread Alexander Yakushev
, Alex Yakushev [1] https://github.com/clojure-android/lein-droid [2] https://github.com/alexander-yakushev/neko [3] https://github.com/alexander-yakushev/compliment/ [4] https://github.com/alexander-yakushev/ac-nrepl-compliment [5] http://www.youtube.com/watch?v=sqI-iUmxJS0 -- -- You received

[ANN] Show the latest version of the library on your Github README page

2013-10-08 Thread Alexander Yakushev
Have you ever felt annoyed to update the README after you released a new version of your project? Have your users ever struggled to make the older version work because you forgot to update that README? Suffer no more, because Clojars has just the right medicine for you. From now on, you can

Re: [ANN] Show the latest version of the library on your Github README page

2013-10-09 Thread Alexander Yakushev
? On Tuesday, October 8, 2013 6:25:07 AM UTC-7, Alexander Yakushev wrote: Have you ever felt annoyed to update the README after you released a new version of your project? Have your users ever struggled to make the older version work because you forgot to update that README? Suffer no more

Re: how can I print the function name as parameter?

2014-05-02 Thread Alexander Yakushev
You need to pass not the function itself, but its Var. Because Vars are the ones that hold metadata. (show #'elementary/nothing-but-the-truth true) On Friday, May 2, 2014 4:28:49 AM UTC+2, Erlis Vidal wrote: Hi guys, I want to write a function (show) that will receive a function as

[ANN] Skummet alpha-1 released

2014-08-12 Thread Alexander Yakushev
for Skummet: https://github.com/alexander-yakushev/leantest. I'd be really grateful if you tried this project and shared your experiences (specifically disappointing ones:)). It is important now to test Skummet with different libraries and find code where it falls short compiling. A good idea

Re: [ANN] Skummet alpha-1 released

2014-08-12 Thread Alexander Yakushev
, or just Dalvik? Great work. Zach On Tuesday, August 12, 2014 10:18:23 AM UTC-4, Alexander Yakushev wrote: So I am finally comfortable for showing Project Skummet to the general public. Skummet is a experimental Clojure branch that features a modified AOT-compiler providing the following

[ANN] defprecated 0.1.0 - deprecation made easy

2014-11-28 Thread Alexander Yakushev
://github.com/alexander-yakushev/defprecated Regards, Alex Yakushev -- 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

Re: [ANN] Clojure 1.7.0-alpha6 released

2015-04-05 Thread Alexander Yakushev
On the other hand, Clojure-Android runtime is largely similar to regular Clojure except for some small differences; so in order to use feature expressions there effectively it might make sense to wait until broader capabilities (feature combinations, feature inheritance etc.) is introduced. --

Re: [ANN] Clojure 1.7.0-alpha6 released

2015-04-05 Thread Alexander Yakushev
in not knowing how the Clojure Android stuff works or where a feature indicating Android could be set without support for custom features. Do you currently fork to support Android? On Apr 5, 2015, at 1:44 PM, Alexander Yakushev al...@bytopia.org javascript: wrote: Hello Alex, As I've

Re: [ANN] Clojure 1.7.0-alpha6 released

2015-04-05 Thread Alexander Yakushev
Awesome, thanks for the help and the clarification! On Monday, April 6, 2015 at 1:59:21 AM UTC+3, Alex Miller wrote: Yes, each platform defines their own platform feature so it wouldn't be too hard to change the specified platform in the fork. However the key here is that the conditional

Re: [ANN] Clojure 1.7.0-alpha6 released

2015-04-05 Thread Alexander Yakushev
Hello Alex, As I've understood from the dev.clojure.org page, additional features and feature combinations will become available later. Can we please get :clj/android (or :clja) still in 1.7? If so, what has to be done by me or Daniel to make it happen? Thanks! On Tuesday, March 31, 2015 at

[bug] Reflector can't resolve a method in a non-public generic-typed abstact class

2015-07-27 Thread Alexander Yakushev
Reproducible minimal example here: https://github.com/alexander-yakushev/generics-reflection-bug . Clone it and do `lein run`. The example is small enough to paste it here. So we have a class called AbstractStorage: abstract class AbstractStorageT { T thingToStore; public

Re: How to make a static variable dynamic at runtime?

2015-07-22 Thread Alexander Yakushev
Sorry, didn't link to the exact time. The correct link is: https://youtu.be/8NUI07y1SlQ?t=217 -- 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

Re: How to make a static variable dynamic at runtime?

2015-07-22 Thread Alexander Yakushev
Hello Yuri, You probably need something like with-redefs[1] to do mocking. Setting a var to dynamic at runtime will have impact only on code that was *compiled* after doing that. See the excerpt from Daniel's talk about this behavior[2]. [1]

Re: [clojure-android] ANN: turboshrimp 2.0.2, for control of Parrot AR.Drone

2016-04-18 Thread Alexander Yakushev
This is amazing! Thanks for sharing, John! I must myself get a drone now:) On Mon, Apr 18, 2016, 01:33 John Wiseman wrote: > I've released a new version of turboshrimp, my library to control the > Parrot AR.Drone. > > https://github.com/wiseman/turboshrimp > > Version 2.0.2

Re: What to read after 3 dozen "introduction to transducers" blog posts

2017-05-16 Thread Alexander Yakushev
This was beautiful. I was held in suspense through the whole story, and I cried in the end. But I must tell you that such sacrifices to data gods are justified, so I will keep reifying and transducing until the very last drop of bytes leaks from the oblatory value. On Wednesday, May 10, 2017

[ANN] clj-async-profiler — embeddable profiler with flame graphs, based on Java's async-profiler

2017-12-11 Thread Alexander Yakushev
I've just released a wrapper around https://github.com/jvm-profiling-tools/async-profiler that allows controlling the profiler directly from the REPL of the program you want to profile. The JAR file ships the profiling agent and the flamegraph generation script from

Re: [ANN] clj-async-profiler — embeddable profiler with flame graphs, based on Java's async-profiler

2017-12-11 Thread Alexander Yakushev
, December 11, 2017 at 4:42:23 PM UTC+2, Alexander Yakushev wrote: > > I've just released a wrapper around > https://github.com/jvm-profiling-tools/async-profiler that allows > controlling the profiler directly from the REPL of the program you want to > profile. The JAR file

Re: Is the vector a sequence?

2018-04-28 Thread Alexander Yakushev
You might also want to check this: http://bytopia.org/2016/03/08/what-is-a-list/ On Friday, April 20, 2018 at 6:33:02 PM UTC+3, ru wrote: > > Hi, > > user=> (seq? [1 2 3 4 5]) > > false > > user=> > > > Sincerely, > > Ru > -- You received this message because you are subscribed to the

[ANN] clj-java-decompiler - decompile any Clojure form into Java in the REPL

2018-01-29 Thread Alexander Yakushev
I'm happy to release clj-java-decompiler[1] today, a wrapper around Procyon[2] Java decompiler. With it, you can cut the feedback loop of writing a file, AOT-compiling it, and then running the classes through a decompiler to a single call in the REPL. user> (clj-java-decompiler.core/decompile

Re: Amazonica s3

2018-02-23 Thread Alexander Yakushev
Hello Rohit, We use Amazonica to read files from a bucket encrypted with Server-Side Encryption (SSE). The way to do it depends on the way the files were encrypted. If the KMS key was "associated" with the encrypted file (not sure if I'm using the correct terminology, I'm no AWS expert) and

Clojure's long startup time analysis

2018-01-02 Thread Alexander Yakushev
People often ask why Clojure is so slow to boot up. In this blog post, I analyze the profile pictures of different ways to start Clojure — raw, with Leiningen, and with Boot. Enjoy! http://clojure-goes-fast.com/blog/clojures-slow-start/ -- You received this message because you are subscribed

Re: Why does the `def-` not exist?

2018-02-26 Thread Alexander Yakushev
istic strongly supports def- - and I don't see why it would > hurt. > Having def- in clojure.core will not magically result in having defmacro- > and defmulti- and xyz-. Its a false and the only counterargument I have > seen. > > It would be very useful, though. > > On

Re: [ANN] clj-memory meter – measure the memory used by arbitrary objects

2018-03-06 Thread Alexander Yakushev
user=> (count nn) 25000 user=> (mm/measure nn) "940.3 KB" ;; Still shared though! user=>(mm/measure [mm nn]) "1.8 MB" -- 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

Re: [ANN] clj-memory meter – measure the memory used by arbitrary objects

2018-03-07 Thread Alexander Yakushev
Looks like it's because of JDK9. I created a Github issue, let's take it there: https://github.com/clojure-goes-fast/clj-memory-meter/issues/1 On Wednesday, March 7, 2018 at 5:49:07 PM UTC+2, 路Ricardo M. wrote: > > Java Version: > java version "9.0.4" > Java(TM) SE Runtime Environment (build

Re: [ANN] clj-memory meter – measure the memory used by arbitrary objects

2018-04-17 Thread Alexander Yakushev
> > keskiviikko 7. maaliskuuta 2018 18.13.23 UTC+2 Alexander Yakushev > kirjoitti: >> >> Looks like it's because of JDK9. I created a Github issue, let's take it >> there: https://github.com/clojure-goes-fast/clj-memory-meter/issues/1 >> >> On Wednesday, March

[ANN] clj-memory meter – measure the memory used by arbitrary objects

2018-03-05 Thread Alexander Yakushev
I'm happy to release the first version of clj-memory-meter . It's a thin wrapper around jamm which allows measuring how much space an arbitrary object occupies. clj-memory-meter is usable from the REPL,

Re: Why does the `def-` not exist?

2018-02-26 Thread Alexander Yakushev
Usually, it is better to use metadata rather than create an exponential explosion of names. Public/private is just one dimension, but you also have static/non-static, dynamic/non-dynamic, etc. Then you have functions, vars, macros, perhaps modified functions (like schema.core/defn). Cartesian

Re: [ANN] speculative - the missing specs

2018-10-21 Thread Alexander Yakushev
Nice work, Erik! I have an immediate comment. It seems like your README example is inconsistent with the code. The README says that `(map 'lol 'lol)` fails because 'lol is not a fn?. But fn? is a very strict predicate that doesn't cover maps, keywords, etc. I've looked into the code and you

Re: Problem disposing java objects

2018-09-02 Thread Alexander Yakushev
I suspect the problem is with map which is lazy. If you discard the result of the top-level expression it might not be fully completed or not even run at all. To force a lazy collection (thus, triggering the side effects you desire) you could do the following things: (mapv close pages)

Re: [ANN] 1.10.0-beta6

2018-11-16 Thread Alexander Yakushev
Could you please give a brief rationale for why metadata-polymorphism is now opt-in? I'm wondering what kind of the undesired behavior this is meant to prevent. On Friday, November 16, 2018 at 10:04:00 PM UTC+2, Alex Miller wrote: > > 1.10.0-beta6 is now available. > > You can try it with clj

Re: [ANN] Clojure 1.10.0-beta8

2018-11-21 Thread Alexander Yakushev
Absolutely not trying to propel this discussion forward, but *ackchyually *even with the given semantics ("async-require should be used in asynchronous code"), the better word would be "concurrent" or "multithreaded". But I certainly didn't intend this thread to unwind so much and take away

Re: Prototype code for enhanced CIDER code completion for Java methods

2018-11-25 Thread Alexander Yakushev
To anyone who's interested in having precise completion for Java classes – a feature like this is available in the latest CIDER snapshot: https://twitter.com/unlog1c/status/1066748173094453248. You can get a filtered completion by prepending a type tag to the next symbol. On Friday, October

Re: [ANN] Clojure 1.10.0-beta8

2018-11-21 Thread Alexander Yakushev
Could I suggest bikeshedding on the name async-require? Before I've seen the patch, my initial impression was that it loads namespaces asynchronously (that is, returns control immediately and loads them in the background). It might be somewhat confusing that a function async-require is

Re: [ANN] Clojure 1.10.0-RC2

2018-11-28 Thread Alexander Yakushev
We moved from 1.9 to 1.10-RC2 (OpenJDK8) on one of our production services. Steady flight so far, thanks! On Tuesday, November 27, 2018 at 2:00:25 AM UTC+2, Alex Miller wrote: > > 1.10.0-RC2 is now available. > > You can try it with clj using: > > clj -Sdeps '{:deps {org.clojure/clojure

Re: Trouble with advanced macros

2019-03-30 Thread Alexander Yakushev
No, I still don't get it. Why wouldn't this work? (def config1 {:key (fn [] (str "do something horrible complicated here" (:blah state) (:key other-state) (:something evenmorestate)))}) ;; To invoke: ((:key config1)) -- You received this message because you are subscribed to the Google

Re: Trouble with advanced macros

2019-03-30 Thread Alexander Yakushev
Honestly, it looks to me that you are concocting something overly complicated. Are you sure that a combination of anonymous functions and dynamic variables won't suffice? Can you, in broad strokes, describe what you want to achieve? On Sat, Mar 30, 2019, 18:31 Nathan Rogers wrote: > (def dict

Re: Trouble with advanced macros

2019-03-29 Thread Alexander Yakushev
Looks like you are missing a few unquotes. Is this what you expected? (def dict {:key `(str "obj isn't defined in this scope" (:blah ~'obj))}) (defmacro my-macro [my-obj & args] `(let [~'obj ~my-obj] (print ~(:key dict) ~@args))) (my-macro {:blah "thingy"} "test string") ;; obj isn't

Re: regex in edn?

2019-03-29 Thread Alexander Yakushev
Not adding much to what you've already said, but a custom reader tag is exactly what I would reach out for in this situation. -- 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

Re: avoiding casts with aget & friends

2019-02-01 Thread Alexander Yakushev
The "easiest" way to obtain JIT-produced native code without having to sift through mountains of it is to use JMH[1] in -perfasm mode[2]. Here's an article on how to use JMH from Clojure[3]. However, if you start to spend so much time optimizing primitive operations in Clojure (and this