upvote
Main factors were (roughly in order):

- None of us are experts in Rust, and we're all solid at Python.

- Rust felt like an under-correction for what we wanted (get all friction in front of the LLM out of the way).

- Our high-performance stuff is not being migrated at this time (Scarf Gateway), so we're just talking about basic CRUD backends here. Basically any language will work.

reply
You might not like Microsoft but they did a video on why they re-wrote the last version of the Typescript compiler in Go. Basically, because of LLMs. It's worth viewing even if you don't decide to go with Go.
reply
Python has so many footguns for server work and the world's worst typing system. It sounds like Golang is perfect for your use-case
reply
Golang has to compile the world iirc, so it'll need more and more time and resources as the slop grows in size.

Whereas Python just interprets and gets off to the races.

Feels like we had this discussion years ago as humans..the false promise of dynamic languages.

reply
Python just interprets and blows up in production more like it ;) Also so slow. But bad Golang is full of `any` and turns into a Python in disguise.
reply
What is exactly slow when building APIs in Python and compared to what? :)
reply
agreed. i just use haskell for everything because i'm not a wuss
reply
Go compiles things at package-level granularity. You only need to recompile your reverse dependencies on making changes. Also there's build caching available out-of-the-box, as well as some support for test caching.
reply
True that an interpreted language has a leg up on any compiled language in the arena of compile time, but worth noting that one of Go's primary design goals was improving compile times of massive code bases. Google was drowning under the weight of compiling huge C++ codebases and Go was the response to that (among other things).
reply
Python is preferred because Python programmers are cheaper than other languages. Not because of any sort of technical advantages. Its literally the worse performing programming language in popular use. And it uses invisible characters in its syntax. Truly, it is the VHS of our industry.
reply
good point

it's a shame scarf is struggling so much they are pinching pennies :/

reply
> None of us are experts in Rust, and we're all solid at Python.

you don't need to be, you can learn Rust or whatever way-better-than Python language as you use it with an LLM! it's an amazing process.

reply
Personally been experimenting in Lean 4. LLMs understand it, can be given simple rules to improve it. Typing is strong, proofs are solid, and it compiles quickly.

On the contrary, for a small rust project, I had to clean out 180gb of cargo nonsense from the last ~3 days worth of compiles on a single, narrowly focused topic branch.

The library situation might be funky, but I'm also learning Lean 4 by hand. The tooling & lsp integration is lovely.

reply
OCaml works incredibly well with LLMs.
reply
Which models have you found work best with OCaml?

I also went through quite a process to select a language to work with LLMs[1] before settling on OCaml.

I am not unhappy with the choice and find it works quite well, with relevant skills loaded, but I am always interested in others’ experience and understanding what they’ve discovered works well.

[1] https://news.ycombinator.com/item?id=48105850

reply
I was very happy with GLM 5.1 and Kimi 2.7. I did see an improvement in GLM 5.2. I found it to be more realistic about what was and wasn't good architectural choices.

I have a pretty elaborate harness setup, I use my own spec DSL to plan and execute code. So what works for me may not totally apply to others.

I haven't used the frontier models in a few months, so I can't speak at all to this latest batch. When I switched over from frontier I found that what I lost in training data, I more than made up for with Pi harness.

Your process seems more thorough than mine. Mine was literally "I like camels". Switching over to OCaml I found wonderful - I had not worked with FP before and I found it delightful, it kind of cured my programming burnout a bit. I hand built a CRUD app in OCaml/Dream but still feel like a rank beginner, especially when it comes to actually writing code, lol. But I'm getting much better at reading it.

I think the typing and structure of OCaml is a great fit for LLMs, but also the proximity to other things like DSLs, formal proofs, and algebraic structures has tons of untapped potential.

I'm having an absolute blast with it. I like programming again.

reply
One more thing - just seeing your affinity for Julia. I built a fully interpreted Lisp in OCaml which you might find interesting. I added my email to my profile here, feel free to reach out.
reply
LLM are string happy instead of using ADT with ocaml. That was my main pain point with it. Otherwise fairly happy, I would feel C#/.net core would be the best overall in term of language/platform.
reply
>agents need strong type systems and narrow guardrails

I read the second paragraph of linked article as saying close to the opposite of that, particularly,

"the model can often avoid the mistake before the compiler ever sees the code. And as the models get better, the relative value of catching every possible issue at compile time changes."

In other words, LLMs are much less likely than humans to make dumb, fat-finger mistakes, and, when they do, are able to catch and fix them more quickly, ergo the value of type checking has fallen.

Everything in the prior sentence is, obviously, highly debatable. But it felt like part of the premise.

reply
My experience with Claude and Ruby, Python, Javascript is similar: it's pretty good at finding the array of strings that was passed to a method instead of an array of integers. Think about record ids coming from a JSON API call. Or the single value instead of an array. I don't remember which Python XML parser is fond of returning one or the other according to the cardinality of the sub elements. Anyway, not only it writes the code to handle those cases but it traces the code and it finds the bugs. So type checking at coding time and who cares about writing the type annotations. They would be probably good to speed up the code at runtime but none of my customers use them and none of them is concerned about the current response time of their systems.
reply
i read that too, but i am highly skeptical. i wish the author would investigate that claim and provide some actual examples substantiating it.
reply
I've gotten best results with LLMs generating Go, Java, and C# code as they have the best combination of strong type systems and fast or no compile times.
reply
I used TS and Go mostly with LLMs and they are very good at them. Python has been fine too honestly. A surprise entry is Flutter/Dart. They are very good at it. I think it's a mixture of types, the good tooling and focused documentation.

All of these I run in a cli that has automatic LSP in it so that's a huge factor too. The agent is automatically told when there would be compile time errors as well as linter issues.

reply
I'd argue that any type system that don't support enforcing non-nil/nullability is not strong in any way and probably worse than not having any type system at all as they give a false sense of security.
reply
Yes, and in Java/C# case, AOT compilation is also available.

I would also add Kotlin, Clojure and F#.

Scala not really as the compilation is not much better, and since the Scala 3 reboot, the ecosystem doesn't seem to be doing that well.

The market opportunity for Haskell on the JVM is gone, although they are doing cool stuff with capabilities.

reply
just curious, can you point to more details to what happened with scala3?
reply
The usage stats on GitHub are declining, for example. Devs are choosing Kotlin, Rust, and Go over Scala.

IMHO there are a bunch of reasons

* Scala 3 was a Python 3-esque disruptive event

* Perception as an overly-complex kitchen-sink inclusive language

* Kotlin took up the "better Java" mantle

* Rust became attractive to devs not committed to the JVM

* Go became less sucky

* SBT is disliked and Metals was buggy and unstable (and still slow)

* Suffers from the "we won't be able to find devs" problem where Kotlin, Rust and Go don't

* A bunch of community drama drove some devs away to Rust

I say this as someone using Scala 3 with ZIO effects system and Mill build tool and thinks it is fantastic.

reply
I don't think that Devs making those chooses but business and industry forcing devs to explore other options. One of the main issues with Scala currently that is no good selling story anymore for a business peoples. Even Rust story with 'memory safety' very fragile because not a lot of businesses see it as huge issue which worth additional effort (probably only MS backing helps there).

In the past it was lot of selling points that business could see:

- 'better java' - more velocity over java without loosing anything

- 'type safety / FP' - less errors that cost money in production (backed by 'Typesafe/Lightbend' company)

- 'akka' - platform for distributed/concurrency applications (in pre kubernetes era was big demand for it)

- 'spark' - initially Scala was only way to use it fully

- 'twitter' - startup success story

- and few more

But now nothing from this list has any real meaning for peoples making decisions currently.

Kotlin actually suffer from this too as 'better java' not that big deal when java constantly improving.

reply
I can't even describe how much I dislike SBT.
reply
There's definitely less Scala jobs on the market these days.
reply
They introduced a new Python like syntax, and pushed to move away from the curly based syntax.

There were other breaking changes as well.

https://docs.scala-lang.org/scala3/guides/migration/compatib...

This naturally broke all the tooling.

Then you have Metals for VSCode InteliJ plugins, while the Eclipse plugin was dropped.

InteliJ plugin is much further than Metals, however there is the conflict of interests with pushing Kotlin instead.

Meanwhile most Scala shops have pivoted to also give feature parity on modern Java, and Kotlin, thus reducing the interest in using Scala in first place.

However as mentioned, they are doing cool stuff with capabilities at EPFL for Scala 3.

https://virtuslab.com/blog/scala/introduction-to-scala-3-che...

reply
Just to put it in perspective, most Scala programmers rejected Scala3 before it was even written. The Scala team, in their infinite wisdom with a collective 2 years of professional programming under their belt knew better. Nobody switched and Scala2 has been slowly dying with their neglect ever since.

PS The Scala team should have been fixing their type inference engine which lacked some important features and needed a better (Horn clause based) architecture. They did a complete rewrite instead.

reply
wait, how did the scala team end up with only 2 years of professional programming experience? did the original developers all leave?
reply
I think it is a play on Scala being mostly developed at EFPL as research language and only a few on the team having worked in the industry.
reply
Very interesting that I followed a very similar reasoning and settled on F#. Tells me that our process must have been very similar.
reply
Why did you choose F# over OCaml? I am in the same boat and evaluating both. Mainly systems programming, applications, etc.
reply
Both of these are near useless for systems programming and predictable behavior when caring about performance.
reply
Jane Street uses OCaml in a domain where performance matters.*

*https://signalsandthreads.com/performance-engineering-on-har...

reply
Jane Street has unlimited engineers and money to do this.

At least from the sidelines, it looks like they've built/forked most parts of the OCaml ecosystem to make it work (OxCaml, Dune was built by then, custom profilers, custom networking hardware, etc).

Of course a lot of their work is open source and can be used, but I wouldn't assume that it would be worth the effort to do something similar with OCaml yourself. Maybe it is! LLMs go brrr and all that.

reply