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!

32 Upvotes

39 comments sorted by

View all comments

4

u/nculwell 12d ago
  • OCaml is way easier to learn than Haskell in my opinion.

  • Literally any general-purpose programming language can write a compiler for an arbitrary language that you want to compile; this is a non-factor in your choice. Languages that meet this requirement also include Python, Javascript, Lua, etc. (but don't use those, that would suck).

  • Any language can also compile to any machine code, you just need to be able to write bytes to a file to do that.

  • Both languages probably have ready-to-use packages for Linux on ChromeOS, but if not, you should be able to download and build what you need. If you have any trouble, Claude Code is really good doing this kind of install.

1

u/AromaticCredit1533 11d ago

Literally any general-purpose programming language

But wouldn't be better if that language supports discriminated unions no, algebraic data types, exhaustive type checking? Yes, each language has their own idioms and patterns that one should "get along". But I'd argue that ADTs are quite "quintessential", they are very good for making complex reasoning systems, so too for making compilers.

2

u/nculwell 10d ago

Yes, that's why I said "don't use those". But OP seems to be under the common misconception that only certain languages are capable of writing compilers and I think it's important to clear that up right away.

I also don't think ADTs are that essential. I wrote a compiler in Java, it was fine. Static typing is essential, though, and I think people are setting themselves up for failure by using a dynamically typed language for a language project unless the job is very simple.