Same. It's been quite a fun ride (and I just paid off my credit card balance with it) but I've also learned quite a bit immersing myself in the chaos.
Got to go have a tooth extracted in a couple of hours :( anyone having a worse afternoon? I see lots of ice cream and beer in my immediate future tonight.
What's with the surge https://github.com/fogus/tori-lisp https://github.com/halgari/fae https://twitter.com/cgrand/status/1350063059864346624 lately?
I think you've just noticed the ever ongoing surge of mini lisps; it doesn't really stop
yeah, there have been toy lisps on a pretty regular schedule since lisp
one of my favorites lately is fennel, janet, from the same original author, is pretty cool too
I mean this is already the 3rd or 4th from Tim :)
baldridge?
His Clojure tutorials live on, some good stuff in there https://tbaldridge.pivotshare.com/
yes
i miss him being in the community
me too
+1 not-lately https://github.com/pixie-lang/
accidentally hit the "sort lines" button in my text editor... what great code popped out of that
alphabetically-oriented programming
if your codebase isn't stable under sort, are you really a programmer?
if you use FP you could also use uniq after the sort :D
is it a stable sort?
FP stands for fixed point. (= code (sort code))
ITYM (comp (partial apply =) (juxt identity sort))
what happened?
Yes! I love fennel, itās been a ton of fun hacking on spacehammer with it.
"You haven't mastered a tool until you understand when it should not be used." ā Kelsey Hightower
I stumbled upon this quote and it got me thinking.
What are some things you wouldnāt recommend Clojure for?
What is Clojure not so good at or when shouldnāt you use Clojure?To put it as mutually respectful and briefly as I am able: Tim is in that class of devs who has strong opinions about language design\contribution since he is also a language designer. He holds conflicting ideas in how the contribution process to core should operate.
if your primary constraints include ā¢ low memory usage ā¢ predictable response time ā¢ high numeric throughput ā¢ fast startup ā¢ static assurances about data types you probably don't want clojure various experts might disagree about how many you need before it's a definite no, hopefully none would use clojure when checking all of the boxes
You also have Carp which has Clojure like syntax, an interpreter, but the compiled image uses an ownership model instead of GC
ā¢ low memory usage - agree ā¢ predictable response time - I agree with the GC argument, but thereās GC solutions on the JVM (azul, etc) which allow for more predictable response times; another option is turning off GC completely and letting the system just crash out of memory (OK for some types of problems)) ā¢ high numeric throughput - I would agree about that in terms of community/library support but not because of a fundamental limitation of the language (see http://neanderthal.uncomplicate.org ) ā¢ fast startup - thatās fair (possibly use ClojureScript?) ā¢ static assurances - thatās fair (I would question the āconstraintā in the first place, but thatās a whole another discussion š )
@raspasov you can improve the predictability of gc, but consider if your domain was eg. a low power software defined radio - any gc in your main loop is a problem period, and "run until you crash" still uses the allocator which still causes periodic pauses on numeric throughput, it's simply easier to write a java class that crunches numbers efficiently than it is to write clojure code that properly unboxes and eliminates runtime reflection, perhaps I'm too dumb to know how my graph algorithm could have used matrices, but I can tell you it got 32x faster and stopped being a bottleneck when it was replaced by 40 lines of very readable procedural java code
(graphs don't really parallelize / vectorize like matrix math does)
@noisesmith good points, I agree; limited Java in the right places can definitely be useful for optimization.
ā¢ āfast startup - thatās fair (possibly use ClojureScript?)ā Two of the kinda-fast-startup Clojure variants of which Iām aware are https://github.com/babashka/babashka and https://github.com/candid82/joker. The former is much more like Clojure itself AFAICT, as itās based on GraalVM, a type of JVM. The latter is an interpreter written in Golang. Included in the canonical build is a startup accelerator I wrote, which seems to make it fairly ācompetitiveā with babashka, though perhaps using slightly less resources (probably due to having no JIT or equivalent whatsoever). Someday I hope to investigate whether startup time can be reduced even further, as it still seems slower than necessary to me.
that's true, and they introduce their own tradeoffs - they are not appropriate for the kind of high throughput app that clojure excells with
eg. you can use cljs instead of clj in an aws lambda, but it only saves you total time if your job is short and computationally simple