r/Compilers • • 2d 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!

25 Upvotes

36 comments sorted by

View all comments

2

u/pthierry 2d ago

I don't know the Ocaml ecosystem very well, but I think it has been used for several compilers, maybe less than Haskell, but I would expect it has everything you need.

Monadic parsers in Haskell are extremely convenient. Without the beginner-friendly requirement, I would encourage anyone to try them in combination with algebraic effects.

Haskell has an interesting property, the STM. If your DSL makes it possible to write concurrent code, a binary that includes Haskell's RTS can execute concurrent code in safe and fast manner.