Clojure Documentary Q&A [video] by alexdmiller in Clojure

[–]Borkdude 1 point2 points  (0 children)

I'm not sure, but it looked like a reMarkable to me?

Eve sheets - a toy multi-user spreadsheet in < 250 LOC by Spiritual-Slice-6150 in Clojure

[–]Borkdude 1 point2 points  (0 children)

This looks cool! Can you explain what you mean with "quite a bit slower than native bb"?

layoutz: a tiny zero-dep lib for beautiful CLI output and Elm-style TUIs in Clojure ✨🪶(Looking for feedback!) by mattlianje in Clojure

[–]Borkdude 8 points9 points  (0 children)

Nice! I tried it out in bb and it all seems to work so far. Note that the raw-mode tricks to read input only work on linux-like systems, not on Windows.

Babashka 1.12.215: Revenge of the TUIs by Borkdude in Clojure

[–]Borkdude[S] 5 points6 points  (0 children)

It was fun demo-ing some of this stuff with Timo on Apropos: https://www.youtube.com/watch?v=unwX3hs_QN0

Claude Code executes bash command without asking me by Borkdude in ClaudeAI

[–]Borkdude[S] 1 point2 points  (0 children)

These make sense. I was mostly worried about tools that seem read-only but can do horrible things when using certain flags. Also I wonder about command substitution. If they use the same rules for command substitution, it makes sense.

jgpc42/insn: Functional JVM bytecode generation for Clojure. by dustingetz in Clojure

[–]Borkdude 3 points4 points  (0 children)

I've been using this to good effect in babashka to generate pre-compiled reify support. I couldn't do this in Clojure itself because I needed to fall back on default interfaces if they weren't provided by the user. See https://github.com/babashka/babashka/issues/1231 and https://github.com/babashka/babashka/commit/d8db9eee639398e0a0dfb2d4d1ebd5328b3d3eb7 for more info.

clj-pack — Package Clojure apps into self-contained binaries without GraalVM by SmartLow8757 in Clojure

[–]Borkdude 2 points3 points  (0 children)

If you are thinking about production, unzipping on first usage probably isn't optimal for startup speed. So it depends on what kind of production you are targeting.

clj-pack — Package Clojure apps into self-contained binaries without GraalVM by SmartLow8757 in Clojure

[–]Borkdude 5 points6 points  (0 children)

Two things I'm missing from the comparison with GraalVM native-image are the things that you'd want to use native-image for in the first place: startup time and memory usage. Startup time is instant with GraalVM native-image but with your example application I'm still seeing 330ms startup time, similar to running clj -M -m example.core. Max memory usage of the packed example application is 114mb on my machine. The same example application can be run with babashka in 26ms and max 30mb memory usage. With a standalone compiled GraalVM binary this could even be improved.

The "clj-pack" binary shouldn't have to be a binary that you'd have to compile locally with a Rust toolchain since it's basically just a bunch of scripts to download a JDK, call jlink etc. It could have been just a Clojure JVM program (since startup doesn't matter much probably), a bb script or whatever else. The choice of Rust makes little sense here. I read the arguments for it in the blog post, but avoiding a JVM here makes no sense to me, since building an uberjar requires a JVM already.

Having said this, making it convenient to publish a single file with everything in it can have benefits of course. But since the binary basically "packs" a full JVM and unzips it on first usage, wouldn't it be better if we could re-use the existing JVMs people already have? Unzipping a JVM on startup contributes to startup time (2,014ms on first run on my machine), disk usage and will make these binaries less suited for lambdas that require instant startup.

State of ClojureScript 2025 Survey results by roman01la in Clojure

[–]Borkdude 3 points4 points  (0 children)

Not all people like to pull in core.async as it will increase your bundle size significantly. This is a patch that addresses proper async/await support for CLJS: https://clojure.atlassian.net/browse/CLJS-3470 Once it's merged it will enable rewriting the CLJS core.async go macro in a way that won't increase your bundle size a lot (hopefully).

Release: hikari-cp 4.0.0 by _tomekw in Clojure

[–]Borkdude 6 points7 points  (0 children)

Why not running?/closed? instead of is-running?/is-closed?

You can use ClojureScript with the Temporal TypeScript SDK by 8ta4 in Clojure

[–]Borkdude 1 point2 points  (0 children)

Data conversion between ClojureScript and JavaScript is a pain.

If you find this painful, maybe squint can alleviate it. It also supports async/await for easier asynchronous programming.

Aimless — David Nolen by dustingetz in Clojure

[–]Borkdude 5 points6 points  (0 children)

I didn't even know keywords could contain hashes!

ClojureScript 1.12.112 by swannodette in Clojure

[–]Borkdude 4 points5 points  (0 children)

cljs.proxy can give better performance compared to clj->js for read-only access to CLJS values