NHacker Next
  • new
  • past
  • show
  • ask
  • show
  • jobs
  • submit
Biff.core: system composition for Clojure web apps (biffweb.com)
lukaszkorecki 20 hours ago [-]
Maybe I'm grumpy and old or something, but I wish there was only one Component library for Clojure, out of all the things this should have been the one everyone settled on.
jacobobryant 20 hours ago [-]
If everyone wants to move to biff.core that's fine with me!
embedding-shape 16 hours ago [-]
Said every author of a component library :) Maybe the plurality of choice is good.
jacobobryant 16 hours ago [-]
hehe yes. There are plenty of other languages with dominant frameworks etc; I like being in a community of experimenters.
embedding-shape 33 minutes ago [-]
We're still missing a library that joins all the conceptual models together and is compatible with all of the libraries at the same time :wink:
joebe89 6 hours ago [-]
Well if it helps I'm cheerful and young(ish) and feel the same.
holistio 1 days ago [-]
Recently my impression has been that whatever the agentic tools are best at is also what's best for solo projects or proof of concepts.

I used to love writing custom CSS, but Claude is just so much better at Tailwind that I ended up switching, even though I still kind of loathe the class soup.

Is AI any good at Clojure?

iLemming 24 hours ago [-]
> Is AI any good at Clojure?

It's okay when you use it just like any other PL, which is roughly the Unix/pipe model - batch-style. Agent spawns process -> reads stdout/stderr -> spawns next process. State lives in-between the calls and in files. Each tool invocation is stateless.

Things get far more interesting when you give an LLM a true Lisp REPL. LLM stops guessing and starts empirically analyzing current state of things and produces working solution faster, costing far less tokens. And you get to watch it solve things interactively, e.g. I often let AI poke through our UI (via Playwright-driven Clojurescript REPL), while monitoring situation in k8s - through nrepl port, connected to Clojure REPL.

jwr 1 days ago [-]
AI is very good at Clojure. In fact, from what I can see, I get a much better experience on a large Clojure+ClojureScript code base than many other people. Surprisingly so. I'm still not sure why, is it higher token density of the language? My experience? Large, well-written and well-maintained code base to lean on as context? In any case, the experience so far has been excellent.
Capricorn2481 16 hours ago [-]
I have been trying to explain to people that LLMs are worse in languages like Rust. You have a better test harness with the type system, but the syntax is so much more complicated. Handling all of those special cases, where a misplaced asterisk can mean accessing a completely different data structure, is exactly what LLMs are bad at. Because it is just trying to write something plausible.

Clojure meanwhile is very terse without being unreadable. It really does read like a series of data transformations.

mechanicum 1 days ago [-]
Last year, I thought it was awful. Even Opus would reliably unbalance parentheses on practically every edit and then enter a doom spiral of making things worse as it tried to figure out the right place to put a `)`.

Recently, I’ve been quite impressed, at least with Claude. At some point they figured out the parens issue, and the code is largely solid and idiomatic. I’ve mostly used it with Polylith apps, so the context for any given change is naturally well-defined. Usual issues with failing to reuse existing functions or make sound decisions about architecture, but no more so than I’ve seen with TypeScript or Rust.

I think there are a few points in its favour: it’s a very concise language, the documentation is terse but precise and comprehensive, and while there’s obviously nowhere near as much Clojure out there as there is JavaScript or Python, there is a lot. As the Clojure demographic skews toward experienced, senior programmers, I’d guess the quality of that corpus is probably well above average.

Java stack trace errors might even be an advantage now.

kayo_20211030 24 hours ago [-]
Yes. Generally, it's quite good. It does have a blind spot with parens, but good old Claude Opus then cranks up a python script (yes!) to sort it all out. I wouldn't leave any of the models out on their own - you'll still have to clean up some obviously crazy stuff, but it's pretty clear what needs to done. In conclusion, Claude and ChatGPT are quite decent at Clojure. Oh, I do like Biff.
y1n0 23 hours ago [-]
I would guess the parens will be problematic because of tokenization. something like `)))` is a single token and so is ')])'. I think having strings like that as single tokens probably makes the link between open and closing parens harder to associate. Probably could be papered over with harness help.
arikrahman 23 hours ago [-]
It's the language best positioned for AI with world class nREPL.
oDot 1 days ago [-]
This is a bit of an "XY Problem" question.

I have migrated all my code to Gleam, FE and BE, Bun, browser, and BEAM.

Claude knows much less about Gleam than it does about Javascript or React. However the constraints of Gleam and its Elm inspired framework Lustre are so strong, Claude gives me much better results.

The only difference is I need to adjust my initial guidance.

elxr 24 hours ago [-]
Any favorite gleam projects to learn from?

I've always admired the direction gleam was heading in, and the community is awesome. But with gradual typing now in elixir, I'm weighing whether or not gleam offers anything special enough to get me spending time there instead of just using elixir.

bananadonkey 19 hours ago [-]
I am currently working through https://lukwol.github.io/gleam-guide/ and it's fun so far as a ReasonML/Elm/elixir enjoyer
elxr 3 hours ago [-]
Looks sweet. Where did you even find that?

Gleam, lustre, and tauri? Amazing

escherize 22 hours ago [-]
I wrote a book about setting up a small gleam project, covers organization of the project in general. A draft is live at https://escherize.com/gleam-katas
elxr 21 hours ago [-]
Beautiful. Will definitely work through this.
packetlost 24 hours ago [-]
Lustre is great
bbkane 1 days ago [-]
How are you liking Gleam and Lustre? What went particularly well or badly?
jacobobryant 1 days ago [-]
AI has been working out well for me writing Clojure, both in personal projects and at work. Documentation, not so much... I write all that by hand.

For Biff I've been using AI to generate a rough draft of all the code and then I take a manual pass over things before releasing. Seems to be a good middle ground.

devin 22 hours ago [-]
Maybe I'm just lucky, but I almost never run into paren-matching issues. Hooked to a working REPL, Clojure isn't merely "good", I'd say it is dominant compared to a lot of other langs.
holistio 19 hours ago [-]
If anyone can enlighten me as to why my above comment is getting downvoted: please do.

My impression is that I voiced a valid concern. I suspected handling parentheses is problematic.

iLemming 15 hours ago [-]
> why my above comment is getting downvoted

The most infamous two letters of our time - humans do not like machines, and absolutely hate those who do.

> I voiced a valid concern

Not unwarranted. When you treat a homoiconic language just like any other, LLMs do sometimes get messy with paren-balancing, but most models correct it on a second-third try. You still get some benefits - e.g., Clojure is the most token efficient mainstreamish PL.

To get the most benefit from it, one must teach the model to treat it just like a human programmer would. It makes no sense to treat Clojure like Python or Go, or C - it's like ordering a pair of swim fins and jumping into water with the unpacked box. Lisp dialects shine when you use the REPL (true Lisp REPL - not some faux-repl like Python's), so you have to "teach" the model a way to operate the live REPL, not passively reading/writing "static" code that's fed into it batch-style. When you do that, models not only get much better grasp of where the syntactic elements should be, they start reasoning about the program in a way more interesting fashion, empirically evaling pieces on the fly, interactively - without juggling state, without compiling, without even having to save things (until proven to work).

Does that make Clojure "the best LLM-suited PL"? Not really - there's simply no such thing. For sure though, the homoiconic nature of the language absolutely makes it enormously interesting and well-suited for it.

michaelmrose 1 days ago [-]
It is but it remains shockingly bad at closing sufficiently deeply nested parens at least as far as chatGPT
iLemming 23 hours ago [-]
I bet you're just treating it like any other (non-homoiconic) language. An agent that edits files and re-runs `clj` is doing something fundamentally different from what a Clojure developer typically does. When you give the agent a REPL - things get far more interesting.
michaelmrose 10 hours ago [-]
Not really running agents at all literally just using the $20 chatGPT subscription and editing files.
iLemming 2 hours ago [-]
Well, that's not how a Clojure dev normally would write it. If you're not using the REPL (with or without AI) - you're missing the point/misusing the tool. Therefore "remains shockingly bad" perspective is unfair - it's like using a screwdriver to remove nails while complaining that it keeps bending.
Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact
Rendered at 18:00:31 GMT+0000 (Coordinated Universal Time) with Vercel.