frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

Analysis and protection against HTTP/2 'Made You Reset' CVE-2025-8671

https://tempesta-tech.com/blog/the-made-you-reset-http2-ddos-attack-analysis-and-mitigation/
1•krizhanovsky•22s ago•0 comments

Better Access Control by Default with Phoenix 1.8.0 Scopes

https://fullstack.ing/posts/better-access-control-by-default-with-phoenix-1-8-0-scopes
1•fullstacking•29s ago•0 comments

Josef Prusa Warns Open Hardware 3D Printing Is Dead

https://hackaday.com/2025/08/13/josef-prusa-warns-open-hardware-3d-printing-is-dead/
1•josephcsible•42s ago•0 comments

Vector Search Capabilities for SQLite

https://github.com/sqliteai/sqlite-vector
1•marcobambini•44s ago•0 comments

Show HN: Catalyst, a tool for short, playable interactive videos

https://usecatalyst.xyz
1•abracadabratony•44s ago•0 comments

Developing Artificial Life from Scratch (2019)

https://blog.labtag.com/developing-artificial-life-from-scratch/
1•hakonbogen•5m ago•0 comments

Show HN: Learn what CQRS, Event Sourcing and co. Are all about

https://www.cqrs.com/
1•goloroden•7m ago•0 comments

LLM Tokenization Demo

https://github.com/tokfan/llm-tokenization-streamlit-demo
2•tokfan•8m ago•0 comments

Idk

1•heheehe•8m ago•1 comments

A New List Reveals Top Websites Meta Is Scraping of Copyrighted Content

https://www.dropsitenews.com/p/meta-facebook-tech-copyright-privacy-whistleblower
1•exiguus•9m ago•0 comments

The road to artificial general intelligence

https://www.technologyreview.com/2025/08/13/1121479/the-road-to-artificial-general-intelligence/
1•birriel•9m ago•0 comments

An Unusual Employment Vetting Experience. Grifter Chancing His Luck or DPRK?

https://medium.com/@ItsNotNicole/an-unusual-employment-vetting-experience-general-grifter-chancing-his-luck-or-dprk-d7a8a5cd5e21
1•SchizoDuckie•10m ago•0 comments

Who made these knotted records during the Inca Empire?

https://www.npr.org/2025/08/13/nx-s1-5500316/khipu-quipu-inca-empire-knots-record-keeping
1•hackernj•10m ago•0 comments

Sin City tourism slump signals wider economic slowdown

https://www.axios.com/2025/08/09/las-vegas-tourism-slump-signals-wider-economic-slowdown
1•JumpCrisscross•11m ago•0 comments

McDonald's Japan cancels Pokémon card promotion as resellers throw away food

https://www.sbs.com.au/news/article/mcdonalds-japan-cancels-pokemon-card-promotion-amid-food-wastage-online-resales/6b01iiqjd
2•colinprince•11m ago•0 comments

NetBSD manpage of sleep(1) consider a bug

https://hachyderm.io/@ayke/115021950503132713
2•exiguus•12m ago•0 comments

In biggest exit in Israeli history, Google buys cyber unicorn Wiz for $32B

https://www.timesofisrael.com/in-biggest-exit-in-israeli-history-google-buying-cyber-unicorn-wiz-for-32-billion/
1•CharlesW•13m ago•1 comments

Illinois bans use of artificial intelligence for mental health therapy

https://www.washingtonpost.com/nation/2025/08/12/illinois-ai-therapy-ban/
3•reaperducer•14m ago•0 comments

Linux Lands Fix for Early 6.17 Regression Causing 37~43% Performance Hit

https://www.phoronix.com/news/Linux-6.17-Early-Regression-Fix
1•Bender•16m ago•0 comments

Don't Phish-Let Me Down: Fido Authentication Downgrade

https://www.proofpoint.com/us/blog/threat-insight/dont-phish-let-me-down-fido-authentication-downgrade
1•gnabgib•17m ago•0 comments

Show HN: IngressKit – API Plugin for Cleaning CSVs, Webhooks, and AI JSON Output

https://ingresskit.dev/
1•pilothobs•17m ago•0 comments

CISA signals that micro segmentation is no longer optional

https://www.scworld.com/perspective/cisa-signals-that-micro-segmentation-is-no-longer-optional
1•Bender•17m ago•0 comments

Happiness Should Be a Career Goal

https://dontbreakprod.com/posts/happiness-should-be-a-career-goal
1•dorkrawk•18m ago•0 comments

Did I take this privacy/anonymous project a bit too far?

https://accountproxy.com
1•perfectlyzero•19m ago•1 comments

CrankTest: A proposed benchmark of LLM sycophancy

https://twitter.com/lefthanddraft/status/1955233374605639795
1•OgsyedIE•20m ago•0 comments

What Was Elon Musk Trying to Achieve with Doge?

https://foreignpolicy.com/2025/05/14/elon-musk-donald-trump-doge-russell-vought/
3•rbanffy•21m ago•0 comments

Ask HN: Would a list of coffee shops serving good specialty coffee be useful?

2•pomdevv•23m ago•2 comments

Health of K8S External Secrets Project

https://github.com/external-secrets/external-secrets/issues/5084
1•mooreds•25m ago•0 comments

That 16 Billion Password Story (AKA "Data Troll")

https://www.troyhunt.com/that-16-billion-password-story-aka-data-troll/
2•el_duderino•25m ago•0 comments

FUSE Passthrough

https://docs.kernel.org/filesystems/fuse-passthrough.html
1•harporoeder•25m ago•0 comments
Open in hackernews

OCaml as my primary language

https://xvw.lol/en/articles/why-ocaml.html
116•nukifw•2h ago

Comments

moi2388•2h ago
If I wanted to program in OCaml, id program in F# instead
nukifw•1h ago
Hi! Thank you for your interest (and for potentially reading this).

Yes, F# is a very nice language, however, it seems to me that I am making a somewhat forced comparison between OCaml and F# in the following section: https://xvw.lol/en/articles/why-ocaml.html#ocaml-and-f

Smaug123•1h ago
You can hack up GADTs in F# - for example, https://github.com/Smaug123/WoofWare.Incremental/blob/9b8181... (which uses https://github.com/G-Research/TypeEquality ). (The other missing features I agree are missing.)
nukifw•1h ago
Yes, the trick is expanded here: https://libres.uncg.edu/ir/asu/f/Johann_Patricia_2008_Founda... (if you have `Eq a b = Refl : a a eq` you should be able to encode every useful GADTs. But having a compiler support is nice for specifics reason like being able to "try" to detect unreachable cases in match branches for examples.
debugnik•1h ago
I've used equality witnesses in F# before, they kinda work but can't match proper GADTs. First you'll need identity conversion methods on the witness, because patterns can't introduce type equalities, then you'll realise you can't refute unreachable branches for the same reason, so you still need to use exceptions.
moi2388•43m ago
Thanks, that was an interesting read for sure!
jimbob45•1h ago
It's always weird when Microsoft pulls an "embrace, extend, extinguish" but the "extinguish" part happens without their involvement or desire and then we're all stuck wondering how Microsoft got left holding the bag.
shortrounddev2•1h ago
OCaml is a great language without great tooling. Desperately needs a good LSP implementation to run breakpoints and other debugging tools on VSCode or other LSP-aware IDEs. I know there ARE tools available but there isn't great support for them and they don't work well
nukifw•1h ago
Indeed, efforts should be made in terms of DAP (https://microsoft.github.io/debug-adapter-protocol//), extending the following experimentation: https://lambdafoo.com/posts/2024-03-25-ocaml-debugging-with-.... However, I find the assertion about tooling a bit exaggerated, don't you?
dismalaf•1h ago
?? OCaml has had a completion engine for as long as I can remember (definitely over a decade) and it powers their LSP these days. I do know however that the community focuses mostly on Vim and Emacs.
debugnik•1h ago
LSP isn't the protocol that interfaces with debuggers, that'd be DAP. You're right that OCaml debugging is kinda clunky at the moment.

OCaml does have an okay LSP implementation though, and it's getting better; certainly more stable than F#'s in my experience, since that comparison is coming up a lot in this comment section.

ackfoobar•1h ago
> Sum types: For example, Kotlin and Java (and de facto C#) use a construct associated with inheritance relations called sealing.

This has the benefit of giving you the ability to refer to a case as its own type.

> the expression of sums verbose and, in my view, harder to reason about.

You declare the sum type once, and use it many times. Slightly more verbose sum type declaration is worth it when it makes using the cases cleaner.

wiseowise•1h ago
> Slightly more verbose sum type declaration is worth it *when it makes using the cases cleaner.*

Correct. This is not the case when you talk about Java/Kotlin. Just ugliness and typical boilerplate heavy approach of JVM languages.

gf000•1h ago
You mistyped "backwards compatible change" going back to close to 3 decades.
ackfoobar•1h ago
> Just ugliness and typical boilerplate heavy approach of JVM languages.

I have provided a case how using inheritance to express sum types can help in the use site. You attacked without substantiating your claim.

wiseowise•1h ago
Kotlin's/Java's implementation is just a poor man's implementation of very restricted set of real sum types. I have no idea what

> This has the benefit of giving you the ability to refer to a case as its own type.

means.

ackfoobar•1h ago
> I have no idea

I can tell.

Thankfully the OCaml textbook has this explicitly called out.

https://dev.realworldocaml.org/variants.html#combining-recor...

> The main downside is the obvious one, which is that an inline record can’t be treated as its own free-standing object. And, as you can see below, OCaml will reject code that tries to do so.

wiseowise•57m ago
That's for embedded records. You can have the same thing as Kotlin but with better syntax.
ackfoobar•46m ago
If you don't do inline records you either

- create a separate record type, which is no less verbose than Java's approach

- use positional destructuring, which is bug prone for business logic.

nukifw•1h ago
In the specific case of OCaml, this is also possible using indexing and GADTs or polymorphic variants. But generally, referencing as its own type serves different purposes. From my point of view, distinguishing between sum branches often tends to result in code that is difficult to reason about and difficult to generalise due to concerns about variance and loss of type equality.
ackfoobar•1h ago
Unless you reach an unsound part of the type system I don't see how. Could you provide an example?
sunnydiskincali•12m ago
> This has the benefit of giving you the ability to refer to a case as its own type.

A case of a sum-type is an expression (of the variety so-called a type constructor), of course it has a type.

  datatype shape =
      Circle of real
    | Rectangle of real * real
    | Point

   Circle : real -> shape
   Rectangle : real * real -> shape
   Point : () -> shape
A case itself isn't a type, though it has a type. Thanks to pattern matching, you're already unwrapping the parameter to the type-constructor when handling the case of a sum-type. It's all about declaration locality. (real * real) doesn't depend on the existence of shape.

The moment you start ripping cases as distinct types out of the sum-type, you create the ability to side-step exhaustiveness and sum-types become useless in making invalid program states unrepresentable. They're also no longer sum-types. If you have a sum-type of nominally distinct types, the sum-type is contingent on the existence of those types. In a class hierarchy, this relationship is bizarrely reversed and there are knock-on effects to that.

> You declare the sum type once, and use it many times.

And you typically write many sum-types. They're disposable. And more to the point, you also have to read the code you write. The cost of verbosity here is underestimated.

> Slightly more verbose sum type declaration is worth it when it makes using the cases cleaner.

C#/Java don't actually have sum-types. It's an incompatible formalism with their type systems.

Anyways, let's look at these examples:

C#:

  public abstract record Shape;
  public sealed record Circle(double Radius) : Shape;
  public sealed record Rectangle(double Width, double Height) : Shape;
  public sealed record Point() : Shape;
  
  double Area(Shape shape) => shape switch
  {
      Circle c => Math.PI * c.Radius * c.Radius,
      Rectangle r => r.Width * r.Height,
      Point => 0.0,
      _ => throw new ArgumentException("Unknown shape", nameof(shape))
  };
ML:

  datatype shape =
      Circle of real
    | Rectangle of real * real
    | Point
  
  val result =
    case shape of
        Circle r => Math.pi * r * r
      | Rectangle (w, h) => w * h
      | Point => 0.0
They're pretty much the same outside of C#'s OOP quirkiness getting in it's own way.
_mu•1h ago
I haven't worked in OCaml but I have worked a bit in F# and found it to be a pleasant experience.

One thing I am wondering about in the age of LLMs is if we should all take a harder look at functional languages again. My thought is that if FP languages like OCaml / Haskell / etc. let us compress a lot of information into a small amount of text, then that's better for the context window.

Possibly we might be able to put much denser programs into the model and one-shot larger changes than is achievable in languages like Java / C# / Ruby / etc?

nukifw•1h ago
To be completely honest, I currently only use LLMs to assist me in writing documentation (and translating articles), but I know that other people are looking into it: https://anil.recoil.org/wiki?t=%23projects
d4mi3n•1h ago
I think this is putting the cart before the horse. Programs are generally harder to read than they are to write, so optimizing for concise output to benefit the tool at the potential expense of the human isn't a trade I'd personally make.

Granted, this may just be an argument for being more comfortable reading/writing code in a particular style, but even without the advantages of LLMs adoption of functional paradigms and tools has been a struggle.

gf000•1h ago
My completely non-objective experiment of writing a simple CLI game in C++ and Haskell shows that the lines of code were indeed less in case of Haskell.. but the number of words were roughly the same, meaning the Haskell code just "wider" instead of "higher".

And then I didn't even make this "experiment" with Java or another managed, more imperative language which could have shed some weight due to not caring about manual memory management.

So not sure how much truth is in there - I think it differs based on the given program: some lend itself better for an imperative style, others prefer a more functional one.

esafak•1h ago
I think LLMs benefit from training examples, static typing, and an LSP implementation more than terseness.
nextos•1h ago
Exactly. My experience building a system that generates Dafny and Liquid Haskell is that you can get much further than with a language that is limited to dynamic or simple static types.
jappgar•1h ago
That was my optimistic take before I started working on a large Haskell code base.

Aside from the obvious problem that there's not enough FP in the training corpus, it seems like terser languages don't work all that well with LLMs.

My guess is that verbosity actually helps the generation self-correct... if it predicts some "bad" tokens it can pivot more easily and still produce working code.

sshine•47m ago
> terser languages don't work all that well with LLMs

I’d believe that, but I haven’t tried enough yet. It seems to be doing quite well with jq. I wonder how its APL fares.

When Claude generates Haskell code, I constantly want to reduce it. Doing that is a very mechanical process; I wonder if giving an agent a linter would give better results than overloading it all to the LLM.

yawaramin•27m ago
There's actually a significant difference between Haskell and OCaml here so we can't lump them together. OCaml is a significantly simpler, and moderately more verbose, language than Haskell. That helps LLMs when they do codegen.
b_e_n_t_o_n•23m ago
This has been my experience as well. Ai writes Go better than any language besides maybe html and JavaScript/python.
sshine•54m ago
> My thought is that if FP languages like OCaml / Haskell / etc. let us compress a lot of information into a small amount of text, then that's better for the context window.

Claude Code’s Haskell style is very verbose; if-then-elsey, lots of nested case-ofs, do-blocks at multiple levels of intension, very little naming things at top-level.

Given a sample of a simple API client, and a request to do the same but for another API, it did very well.

I concluded that I just have more opinions about Haskell than Java or Rust. If it doesn’t look nice, why even bother with Haskell.

I reckon that you could seed it with style examples that take up very little context space. Also, remind it to not enable language pragmas per file when they’re already in .cabal, and similar.

raphinou•1h ago
Some years ago I also wanted to make ocaml my primary language, but rapidly encountered problems: difficulty to install (on Linux due to the requirement of a very unusual tool which name and function I forgot), no response from community regarding how to solve that problem, no solid postgresql driver, ....

Wanting to use a functional language I pivoted to fsharp, which was not the expected choice for me as I use Linux exclusively. I have been happy with this choice, it has even become my preferred language. The biggest problem for me was the management of the fsharp community, the second class citizen position of fsharp in the DotNet ecosystem, and Microsoft's action screwing the goodwill of the dev community (eg hot reload episode). I feel this hampered the growth of the fsharp community.

I'm now starting to use rust, and the contrast on these points couldn't be bigger.

Edit: downvoters, caring to share why? I thought sharing my experience would have been appreciated. Would like to know why I was wrong.

johnisgood•1h ago
> difficulty to install

Use opam: https://opam.ocaml.org or https://opam.ocaml.org/doc/Install.html.

Additionally, see: https://ocaml.org/install#linux_mac_bsd and https://ocaml.org/docs/set-up-editor.

It is easy to set up with Emacs, for example. VSCodium has OCaml extension as well.

All you need for the OCaml compiler is opam, it handles all the packages and the compiler.

For your project, use dune: https://dune.readthedocs.io/en/stable/quick-start.html.

Milpotel•1h ago
"use opam" is always the answer but in reality its the worst package manager ever. I've never seen so many packages fail to install, so many broken dependencies and miscompilations that resulted in segfaults due to wrong dependencies. I just gave up with Ocaml due to the crappy ecosystem, although I could have lived with the other idiosyncrasies.
nukifw•1h ago
There is a lot of work on Dune Package Management that will fix some legacy issues related to OPAM, https://dune.readthedocs.io/en/stable/tutorials/dune-package... !! Stay tuned!
johnisgood•52m ago
Dune is not a dependency manager, it is a build tool. Opam is the dependency manager. By default, Dune doesn't fetch dependencies, opam does that. That said, Dune does use opam, yeah.
nukifw•47m ago
And the next milestone of Dune is to become an alternative package manager via Dune package Management, using a store in a "nixish" way.
johnisgood•45m ago
I suppose it is still going to use opam internally, right?
yawaramin•24m ago
No, it is doing its own package management implementation.
johnisgood•23m ago
So dune is going to replace opam? Where can I read more about this if so?
nukifw•41m ago
Package description, but it use its own engine.
johnisgood•54m ago
I have never had issues and been writing OCaml and using opam for years.

Can you be more specific?

(Why the down-vote? He does need to be specific, right? Additionally, my experiences are somehow invalid?)

sestep•51m ago
And even if you do get opam working for a project, it's not at all reproducible and will just randomly break at some point in the future. For instance, I had this in a Dockerfile for one project:

  RUN eval $(opam env) && opam install --yes dune=3.7.0
One day the build just randomly broke. Had to replace it with this:

  RUN eval $(opam env) && opam install --yes dune=3.19.1
Not a big change, but the fact that this happens at all is just another part of building with OCaml feeling like building on a foundation of sand. Modern languages have at least learned how to make things reproducible with e.g. lockfiles, but OCaml has not.
johnisgood•48m ago
Use "opam lock" and "opam pin". Additionally, Dune's lockdir feature uses opam's solver internally to generate a lock directory containing ".opam.locked" files for every dependency. This is Dune's way of having fully reproducible builds without relying on opam's switch state alone.

Additionally, see: https://dune.readthedocs.io/en/stable/tutorials/dune-package....

sestep•39m ago
No, the problem is that dune=3.7.0 got removed from the registry entirely.
johnisgood•24m ago
It is still there according to "opam show dune --all-versions", so no, it has not been removed.

Anyways, what you could do is:

  opam pin add dune 3.7.0
  opam install dune
Alternatively, you can use the tarball directly:

  opam pin add dune https://github.com/ocaml/dune/releases/download/3.7.0/dune-3.7.0.tbz
debugnik•13m ago
I mean, it's quite clunky, but on Linux or WSL I've never had the broken experience you talk about. Could you share your setup? Was this maybe on bare macOS or Windows, in which case I totally believe it because they've been neglected?
davidwritesbugs•34m ago
I abandoned ocaml just because I couldn't get a stepping debugger to work. Can't remember the exact issues but I tried to install in vscode to no avail & I've no interest in emacs
loxs•1h ago
I migrated from OCaml to Rust around 2020, haven't looked back. Although Rust is quite a lot less elegant and has some unpleasant deficiencies (lambdas, closures, currying)... and I end up having to close one one eye sometimes and clone some large data-structure to make my life easier... But regardless, its huge ecosystem and great tooling allows me to build things comparatively so easily, that OCaml has no chance. As a bonus, the end result is seriously faster - I know because I rewrote one of my projects and for some time I had feature parity between the OCaml and Rust versions.

Nevertheless, I have fond memories of OCaml and a great amount of respect for the language design. Haven't checked on it since, probably should. I hope part of the problems have been solved.

ackfoobar•56m ago
> the end result is seriously faster

Do you have a ballpark value of how much faster Rust is? Also I wonder if OxCaml will be roughly as fast with less effort.

FrustratedMonky•1h ago
In F# comparison. Modules "my opinion, strongly justify preferring one over the other".

Strong stance on Modules. My ignorance, what do they do that provides that much benefit. ??

debugnik•48m ago
In short, OCaml modules are used for coarse-grained generics.

Modules are like structurally-typed records that can contain both abstract types and values/functions dependent on those types; every implementation file is itself a module. When passed to functors (module-level functions), they allow you to parameterize large pieces of code, depending on multiple types and functions, all at once quite cleanly. And simply including them or narrowing their signatures is how one exports library APIs.

(The closest equivalent I can imagine to module signatures is Scala traits with abstract type members, but structurally-typed and every package is an instance.)

However, they are a bit too verbose for finer-grained generics. For example, a map with string keys needs `module String_map = Map.Make(String)`. There is limited support for passing modules as first-class values with less ceremony, hopefully with more on the way.

akkad33•43m ago
I don't know OCAML well but I think this is referring to the fact that modules on OCAML can be generic. In f# there is no HKTs that is types that can be parameterised with type classes. So in F# you have to have List.map, option.map etc, whereas in a language like OCAML or Haskell they would have one parametrised module
noelwelsh•59m ago
I saw a talk by someone from Google about their experiences using Rust in the Android team. Two points stuck out: they migrated many projects from Python, so performance can't have been that much of a concern, and in their surveys the features people liked most were basics like pattern matching and ADTs. My conclusion is that for a lot of tasks the benefit from Rust came from ML cicra 1990, not lifetimes etc. I feel if OCaml had got its act together around about 2010 with multicore and a few other annoyances[1] it could have been Rust. Unfortunately it fell into the gap between what academia could justify working on and what industry was willing to do.

[1]: Practically speaking, the 31-bit Ints are annoying if you're trying to do any bit bashing, but aesthetically the double semicolons are an abomination and irk me far more.

unstruktured•51m ago
There is absolutely no reason to use double semicolons in practice. The only place you really should see it is when using the repl.
benreesman•48m ago
Came here to see if the top comment on an OCaml thread had something about Rust changing the subject to Rust with an oblique tieback to TFA.

Come on guys, this was old five years ago and its not organic, the strike force is quieter about brigading than it used to be, but you can still set your watch by it.

simonask•23m ago
This is one of the wilder conspiracy theories to me, and that says a lot in 2025.
garbthetill•47m ago
doesnt rust still have the advantage of having no gc? I dont like writing rust, but the selling point of being able to write performative code with memory safety guarantees has always stuck with me
noelwelsh•38m ago
I think "no gc but memory safe" is what originally got people excited about Rust. It's a genuinely new capability in production ready languages. However, I think Rust is used in many contexts where a GC is just fine and working with lifetimes makes many programs more painful to write. I think for many programs the approach taken by Oxidized OCaml[1] or Scala[2] gives 80% of the benefit while being a lot more ergonomic to work with.

When I see Rust topping the "most loved language" on Stack Overflow etc. what I think is really happening is that people are using a "modern" language for the first time. I consistently see people gushing about, e.g., pattern matching in Rust. I agree pattern matching is awesome, but it is also not at all novel if you are a PL nerd. It's just that most commercial languages are crap from a PL nerd point of view.

So I think "no gc but memory safe" is what got people to look at Rust, but it's 1990s ML (ADTs, pattern matching, etc.) that keeps them there.

[1]: https://github.com/oxcaml/oxcaml

[2]: https://docs.scala-lang.org/scala3/reference/experimental/cc...

vips7L•16m ago
You can write safe and performative code with a garbage collector. They're not mutually exclusive. It just depends on your latency and throughput requirements.
nine_k•38m ago
I'd say that Google strives to have a reasonably short list of languages approved for production-touching code. Rust can replace / complement C++, while OCaml cannot (it could replace Go instead... fat chance!). So I suspect that the team picked Rust because it was the only blessed language with ADTs, not because they won't like something with faster compile times.

No way OCaml could have stolen the Rust's thunder: we have a number of very decent and performant GC-based languages, from Go to Haskell; we only had one bare-metal-worthy expressive language in 2010, C++, and it was pretty terrible (still is, but before C++11 and C++17 it was even more terrible).

hardwaregeek•8m ago
Wouldn’t Kotlin be a more reasonable choice in that case? It has ADTs and a lot of the same niceties of Rust.
nine_k•49m ago
I wish somebody with this amount of experience would compare the benefits / shortcomings of using the ReasonML syntax. (The article mentions it once, in passing.)
hardwaregeek•6m ago
I like Reason syntax and I wish it was more common, but I think if you want to engage in the OCaml community it’s probably better to just bite the bullet and use the standard syntax. It’s what almost everybody uses so you’ll need to understand it to read any code or documentation in the ecosystem
garbthetill•36m ago
What a brilliant article, it really puts to rest for me, the whole “why not use F#?” argument. In almost every OCaml thread, someone suggests F# as a way to sidestep OCaml’s tooling.

I’ve always been curious about OCaml, especially since some people call it “Go with types” and I’m not a fan of writing Rust. But I’m still not sold on OCaml as a whole, its evangelists just don’t win me over the way the Erlang, Ruby, Rust, or Zig folks do. I just cant see the vision

debugnik•24m ago
Funny, I moved to OCaml to sidestep F# tooling. At least last time I used F#: Slow compiler, increasingly C#-only ecosystem, weak and undocumented MSBuild (writing custom tasks would otherwise be nice!), Ionide crashes, Fantomas is unsound...

But OCaml sadly can't replace F# for all my use cases. F# does get access to many performance-oriented features that the CLR supports and OCaml simply can't, such as value-types. Maybe OxCaml can fix that long term, but I'm currently missing a performant ML-like with a simple toolchain.

manoDev•5m ago
The syntax seems absolutely alien to me – although it's a functional language, most of it reads like imperative code with a bunch of semicolons (double semicolons even) and lack of scoping hints.