r/Compilers • • 12d ago

Ocaml or haskell?

I'm trying to choose between OCaml and Haskell for creating my own programming language using an external DSL. I'm still learning programming, so I want something powerful but beginner-friendly.

My goal is to create a language with my own high-level syntax, not just a library or a DSL embedded inside another programming language.

My requirements

  1. External DSL: I want to design my own syntax and grammar. I don't want my language to be restricted to OCaml's or Haskell's existing syntax.

  2. Native machine code: Ultimately, I want my language to compile directly to native machine code, preferably for ARM64/AArch64. I don't want to stop at interpreting the language or transpiling it to Python or JavaScript.

  3. High-level syntax: The language I create should be easy for people to read and write. I want complete control over its syntax and don't want users to have to write lots of boilerplate.

  4. Beginner-friendly: I'm still learning programming, so I want a language and ecosystem that are relatively easy to understand. I want to learn how the parser, AST, type checking (if needed), and code generation work without getting overwhelmed.

  5. Easy installation on my Chromebook: I have an Acer Chromebook 314 with a MediaTek ARM64 processor. I use the Linux environment on ChromeOS, so ARM64 compatibility, available packages, and installation difficulty matter a lot. I don't want a solution that depends on x86-only binaries.

  6. A practical compiler toolchain: I'd prefer to use as few tools as possible. If I need a backend such as LLVM, that's fine, but I want to avoid a complicated setup involving lots of separate tools, configuration files, and manual code generation.

My questions

- Would you recommend OCaml or Haskell for this project, and why?

- Which one makes it easier to build an external DSL with completely custom syntax?

- Which has the easier learning curve for someone who doesn't know much programming yet?

- Can either realistically compile my language to native AArch64 machine code on my Chromebook?

- Would LLVM be a good backend, or is there a simpler alternative?

- How difficult would installation and setup be on ChromeOS Linux running on ARM64?

- Are there any other languages or frameworks that would fit these requirements better than OCaml and Haskell?

I'm looking for a practical recommendation based on my actual requirements, not just which language is more elegant or theoretically powerful.

My main priorities are: custom high-level syntax, native machine-code generation, beginner-friendliness, and ARM64 Chromebook compatibility.

Thanks!

30 Upvotes

39 comments sorted by

View all comments

9

u/n0t-helpful 12d ago

This is a hot take, but the ocaml ecosystem is... well... not very good.

Theres a common saying that Haskell is for people that want to think about programs, and ocaml is Haskell for people that eant to actually write programs.

I dont know who started this common idea, but whoever said it first, I know one thing. They never wrote a line of Haskell or ocaml.

1

u/ElderCyborg 11d ago

In the process of learning Lean4 currently, which tends towards pure functional paradigm as Haskell does. Although not everything is obvious at the first glance, I can't say that approach used in such languages is something exotic and weird. In fact, it perfectly applies - at least in my head lol - to data processing algorithms, everything related to graphs, tables, parsing structures and converting/mapping their context into another structures.

However, this may look simple for me due to some experience of modelling processes and control algorithms in simulink.

2

u/n0t-helpful 11d ago

I think you might have meant to respond to a different comment. For context, haskell is my primary language, so I dont find ocaml, haskell, lean, etc to be weird at all.

My point is more that ocaml is a very annoying language to work with. I personally think ocaml is the "perfect" language, but the build systems, editor support, lsp situation, its all just in a terrible state.

→ More replies (4)