frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

Open in hackernews

OCaml Programming: Correct and Efficient and Beautiful

https://cs3110.github.io/textbook/cover.html
100•smartmic•7h ago

Comments

teiferer•6h ago
Could an OCaml expert give a quick take on the view that if FP, why not go all the way and do Haskell instead? I mean, if "correct, efficient, beautiful" are attributes of OCaml (and I know opinions differ, but let's assume for a moment..) then shouldn't they be attributes of Haskell too, maybe even more so in some ways?
skybrian•6h ago
I'm not an OCaml or Haskell expert, but I expect that laziness makes performance harder to reason about?

Edit: but in this case, apparently the book was written for a course at Cornell where they teach both functional and imperative programming using the same language.

derriz•6h ago
In my experience, reasoning about (or maybe being able to manage) memory consumption is more of an issue for fully lazy languages.

Having worked on a code-base written in a lazy (Haskel-like) FPL where the architecture relied heavily on laziness, the least pleasant issue to deal with was sudden and obscure explosions in memory consumption.

Which would of course have a big impact on performance so maybe this was your point also.

hermanhermitage•6h ago
That’s been my experience. Across the spectrum of languages I’ve found certain features such as dynamic memory, managed memory, memory safety, evaluation model, etc all have an impact on the transparency of understanding time and space characteristics. I spend most of my time in assembly and C, but love the sheer ranges of language options we have today. I put Haskell in the “Miranda” branch of languages which I love for tackling some problems but day to day but I’ve never got a handle on how that translates into predictable characteristics of the generated code.
OneDeuxTriSeiGo•6h ago
At least theoretically they could be however OCaml is in large part driven by Jane Street and has been for some time now and Jane Street's entire business model is built around optimizing for ultra high throughput, ultra low latency software where mistakes could cost on the order of hundreds of billions of dollars.

So my guess would be less that Haskell is not these things (nor couldn't it be) but rather that OCaml has had the external forces necessary to optimise for these things above all else.

AnimalMuppet•5h ago
Is OCaml lazy? I'm not an expert, but if you want ultra high throughput, you might not want lazy. If I understand correctly, in Haskell some nonobvious things can slow you down because of the laziness.
sestep•5h ago
No, OCaml is not lazy.
KiranRao0•5h ago
OCaml is not lazy.

src: https://signalsandthreads.com/future-of-programming/

shawn_w•6h ago
Personally, I don't like how Haskell considers things like I/O as side effects that have be wrapped in monads. Ocaml feels much more practical.

Plus, though both languages allow defining new infix operators, ocaml coders are much more restrained about it than haskellers, and I hate having to figure out what >>>>$=<<< does when it shows up in code.

Quekid5•4h ago
*. sends its regards

:)

faldor20•5h ago
As someone who has lightly used Haskell and quite heavily used ocaml:

- Pragmatism: The ocaml community has a stronger focus on practical real projects. This is shown by the kind of packages available on the ecosystem and the way those packages are presented. (A number of Haskell packages I've tried to use often seen to be primarily intellectual pursuit with little documentation on actually using them).

- Simplicity: Haskell does have some amazing features, but it has so many different ways to do things, so many compiler flags, code can look vastly different from one codebase to another. It's kind of the c++ of FP. Ocaml is definitely more cohesive in its approach.

Tooling: last I used Haskell the whole ecosystem was pretty rough, with two package managers and a lot of complexity in just setting up a project. Ocaml is not at the level of rust or other modern languages, but is definitely a stop above I'd say.

Syzygies•5h ago
I started with SML in the 1980's, implementing a core math algorithm (Grobner bases) used in my K&R C computer algebra system Macaulay. Then I got this idea there should be a related algorithm in a different problem domain (Hilbert bases) and I managed to convert my code in twenty minutes. It ran. This completely blew my mind, on par with switching from punched card Fortran to an APL terminal in the 1970's.

Everyone talks a good line about more powerful, expressive programming languages till they need to put in the work. Ten years effort to program like ten people the rest of your life? I'm 69 now, I can see how such an investment pays off.

I moved to OCaml. Studying their library source code is the best intro ever to functional programming, but I felt your "all the way" pull and switched to Haskell. (Monads make explicit what a C program is doing anyway. Explicit means the compiler can better help. What it comes down to is making programming feel like thinking about algebra. This is only an advantage if one is receptive to the experience.)

I'm about to commit to Lean 4 as "going all the way". Early in AI pair programming, I tested a dozen languages including these with a challenging parallel test project, and concluded that AI couldn't handle Lean 4. It keeps trying to write proofs, despite Lean's excellence as a general purpose programming language, better than Haskell. That would be like asking for help with Ruby, and AI assuming you want to write a web server.

I now pay $200 a month for Anthropic Max access to Claude Code Opus 4 (regularly hitting limits) having committed to Swift (C meets Ruby, again not just for macOS apps, same category error) so I could have first class access to macOS graphics for my 3-manifold topology research. Alas, you can only build so high a building with stone, I need the abstraction leverage of best-in-category functional languages.

It turns out that Opus 4 can program in Lean 4, which I find more beautiful than any of the dozens of languages I've tried over a lifetime. Even Scheme with parentheses removal done right, and with far more powerful abstractions.

pmarreck•3h ago
Have you looked at Idris 2?

I'm 53, impressed that you're still going at it at 69!

Syzygies•1h ago
Yes. I'm impressed with Idris 2. I love how it uses Chez Scheme, my favorite scheme implementation. I contributed for a bit to getting Idris installation working on Apple Silicon Macs based on Racket's port of Chez Scheme, only to learn that I was working with Idris instructions that hadn't been updated.

Lean 4 is a better supported effort, with traction among mathematicians because of the math formalization goal.

I have more reasons to want to learn Lean 4. Peel away their syntax, and Lean 4 proofs are the word problem for typed trees with recursion. I find the reliance of AI on artificial neurons as arbitrary as so many advanced life forms on Earth sharing the same paltry code base for eyes, a nose, a mouth, and GI tracts. Just as many physicists see life as inevitable, in a billion runs of our simulation I'm sure AI would arise based on many foundations. Our AI fakes recursion effectively using many layers, but staring at the elementary particles that make up Lean proofs one sees a reification of thought itself, with recursion a native feature. I have to believe this would make a stronger foundation for AI.

I don't get that same rush looking at Idris. Using Lean 4 for general purpose programming? It must be good training.

pmarreck•2m ago
I'll have to have a look at Lean 4 then.

The simulation hypothesis has a flaw IMHO- If it is modelable and therefore computable, it may be subject to the halting problem

yodsanklai•5h ago
Pros and cons as usual. I worked with both languages professionally but I personally find OCaml more practical, better at programming in the large and easier to write maintainable code. It's a simpler language overall (side effects, strict evaluation). I find the language finds sweet spot between these attributes whereas Haskell is more abstract.

That being said, Haskell is pretty nice as well but I'd pick OCaml for real world stuff.

One thing that bothered me with both these languages is that people not fluent with FP could write code that isn't idiomatic at all. It's probably a bit harder to do in Haskell.

mbac32768•4h ago
FP is great but not necessarily at all costs.

OCaml is immediate by default instead of lazy, and allows imperative code with side-effects. Both escape hatches from the pure FP world.

So, performance is easier to reason about and you can interact with your side-effecty real world stuff without having to reorganize your whole program around the correct monad.

Most of the time you want your loops to be higher order functions but once in awhile you want to just build a vector from a for loop. OCaml let's you do it without it being a whole intervention.

droideqa•4h ago
What about Haskell STM versus OCaml Multicore Eio?
kcsrk•3h ago
Kcas is the Haskell STM analogue in OCaml https://github.com/ocaml-multicore/kcas/
nextos•3h ago
Also, a major differentiator is that Haskell deals with effects primarily by using monads, whereas many modern functional languages (e.g. Koka or Flix) are being designed from the ground up to use algebraic effects instead. OCaml is also embracing effects. Haskell has some effect libraries as well, but monadic code is everywhere. IMHO, as someone who loves Haskell, algebraic effects will make FP much more approachable.
KevinMS•3h ago
My take is that OCaml lets you sneak a little mutation in, with a little effort, which can make a huge difference in the performance of some algorithms.
iLoveOncall•6h ago
There's absolutely nothing efficient nor beautiful about programming in OCaml.
yawaramin•5h ago
Username checks out.
crvdgc•6h ago
Apart from being tied with Jane Street's libraries, Real World OCaml is "deeper" in that it also talks about implementation details. This book has a more "introduction to functional programming via OCaml" vibe. Both are good textbooks with different emphases.

The main author Michael Clarkson also started a similar lecture series on Software Foundations using Rocq (Coq)[1]. Not sure if that's still updated though.

[1]: https://github.com/clarksmr/sf-lectures

pizlonator•2h ago
I would take the FP zealots more seriously if they stopped asserting that FP makes things more correct.

Zero evidence that this is the case.

I can tell you that debugging a compiler written in ML is a dumpster fire compared to debugging a compiler written in C++. If take C++ over any FP language for compilers any day of the week.

yawaramin•1h ago
OCaml is not just FP. It's FP + strong static typing + modular programming + exhaustive pattern matching + fast compiles + great set of built-in compiler lints (eg unused code warnings, mutation warnings). All of these things together help write very reliable code.
anon-3988•2h ago
I just want OCAML to have curly braces, please. And the variable scope thing in OCAML is extremely off putting.
debugnik•1h ago
You can use the ReasonML syntax with the standard OCaml toolchain, it's the same language with curly braces. (Not to be confused with ReScript which spun off of it, but is now a different language that only targets the JavaScript stack.)

Do you simply dislike the OCaml syntax or is it some particular quirk?

> the variable scope thing

The what thing? Variables are just lexically scoped, are you referring to shadowing?

zdragnar•1h ago
Have you tried reason? Seems like a step in the direction you're looking for anyway

Niche Creator Monetization

https://tinyidea.net/idea/idea-coj2emzjlp
1•freeourdays•8m ago•1 comments

Monitoring K8s using a combo of daemonset/deployment of OpenTelemetry Collector

https://signoz.io/blog/kubernetes-observability-with-opentelemetry/
1•ankit01-oss•8m ago•0 comments

A Food Reckoning Is Coming

https://www.theatlantic.com/science/archive/2025/06/climate-food-land-problem/683005/
3•littlexsparkee•9m ago•1 comments

Why Cursor is a great company

https://zandrey.com/cursor-is-great/
2•rats•10m ago•0 comments

Cara Membatalkan Pinjaman LazBon LazaDa

1•Lazbon•11m ago•0 comments

CachyOS Kernels Based on Different Schedulers and Performance Improvements

https://github.com/CachyOS/linux-cachyos
2•theycallhermax•11m ago•0 comments

Built an NSFW AI image generator for AI art creators

https://nsfw-image-generator.com/
1•kevinleee•14m ago•1 comments

Personality Dimensions and Temperaments of Engineering Professors and Students

https://arxiv.org/abs/1507.06896
1•fzliu•21m ago•1 comments

Show HN: Launch Hacker News like community on your Domain

1•kocial•22m ago•1 comments

Show HN: Cant, rust nn lib for learning

https://github.com/TuckerBMorgan/can-t
2•TuckerBMorgan•25m ago•0 comments

Neovim plugin to prompt any model from Markdown files

https://github.com/robcmills/prompt.nvim
1•robcmills•26m ago•0 comments

Chemical Process Produces Critical Battery Metals with No Waste

https://spectrum.ieee.org/nmc-battery-aspiring-materials
3•stubish•32m ago•0 comments

Elon Musk opened a diner in Hollywood. What could go wrong?

https://www.theguardian.com/us-news/2025/jul/26/elon-musk-tesla-diner-hollywood
4•rob74•35m ago•1 comments

Doge is suggesting an AI tool that puts half of federal regs on a 'delete list'

https://www.engadget.com/big-tech/doge-is-reportedly-pushing-an-ai-tool-that-would-put-half-of-all-federal-regulations-on-a-delete-list-212053871.html
3•Incipient•37m ago•1 comments

Company developing Paducah laser uranium enrichment hits regulatory milestone

https://www.wkms.org/energy/2025-07-02/company-developing-paducah-laser-uranium-enrichment-facility-hits-key-regulatory-milestone
1•perihelions•38m ago•0 comments

Texas Is Getting Tough on Data Protection

https://www.adexchanger.com/data-privacy-roundup/texas-is-getting-tough-on-data-protection/
1•dotcoma•40m ago•0 comments

ChatGPT Gave Instructions for Murder, Self-Mutilation

https://www.theatlantic.com/technology/archive/2025/07/chatgpt-ai-self-mutilation-satanism/683649/
1•jrflowers•41m ago•0 comments

The future is not self-hosted, but self-sovereign

https://www.robertmao.com/blog/en/the-future-is-not-self-hosted-but-self-sovereign
2•robmao•41m ago•1 comments

Is Australia's bloated property market destroying the middle class?

https://www.theguardian.com/australia-news/2025/jul/13/great-job-good-education-no-home-is-australias-bloated-property-market-destroying-the-middle-class
3•PaulHoule•44m ago•1 comments

Show HN: I built a tool to fight YouTube clickbait with AI summaries

https://www.peekatube.com/en
1•project_stain•46m ago•0 comments

Show HN: Explore GitHub via What Stargazers Also Starred

https://github.com/fengkan/GitHub-Stargazer-Constellation
1•fengkan•52m ago•0 comments

Trump's AI Action Plan is a blueprint for dystopia

https://www.bloodinthemachine.com/p/trumps-ai-action-plan-is-a-blueprint
4•dotcoma•54m ago•0 comments

Are prompts the new unit of work?

https://www.archgw.com/blogs/are-prompts-the-new-unit-of-work
1•honorable_coder•57m ago•1 comments

How to expose Kubernetes OIDC JWKS endpoints

https://gawsoft.com/blog/kubernetes-oidc-expose-without-anonymous/
1•gawsoft•58m ago•1 comments

William Cowper's pet hares [1784]

https://cowperandnewtonmuseum.org.uk/the-history-of-my-three-hares/
3•quuxplusone•1h ago•0 comments

Post to HN

https://blog.cloudflare.com/zero-trust-warp-with-a-masque/
1•sawoo•1h ago•0 comments

$Lei – Aesthetic Computer

https://prompt.ac/$lei
1•justanothersys•1h ago•1 comments

Verify Identities During Self-Service Registration

https://fusionauth.io/blog/identity-verification-before-registration
1•mooreds•1h ago•0 comments

Fast and cheap bulk storage: using LVM to cache HDDs on SSDs

https://quantum5.ca/2025/05/11/fast-cheap-bulk-storage-using-lvm-to-cache-hdds-on-ssds/
21•todsacerdoti•1h ago•1 comments

Measuring Engineering

https://fffej.substack.com/p/measuring-engineering
1•mooreds•1h ago•0 comments