
Implementing a JIT Compiled Language with Haskell and LLVM - rwosync
http://www.stephendiehl.com/llvm
======
raphaelj
I did a compiler for a subset of the C programming language (int & bool types,
arrays, functions, loops, ...) for my post-graduate compiler course last year
:

[https://github.com/RaphaelJ/Cours-
passerelle/blob/master/Com...](https://github.com/RaphaelJ/Cours-
passerelle/blob/master/Compilateur/) (comments are in French)

It was amazing : the full compiler was around 650 lines of code while only
using Parsec as a third party library and was able to compile correctly at the
first successful compilation. Compiling to LLVM (as text, I didn't used any
library for code generation) using monads and Text-Lazy was also pretty
pleasant.

My only deception was to be unable to use GADTs : these are awesome but so
hard to use with a parser.

~~~
frik
Wow, cool. Thanks for sharing the link! (the code is in English, only the
comments are in French)

One rather minor question: Is writing comments or even code in the local
language still common in France? Afaik, in most European countries the CS
courses are taught in English.

~~~
Dewie
All the literature, programming libraries etc. have corrupted my brain to the
point that I write my code in English when it's only for my own eyes, even
though it isn't my native tongue.

~~~
pjmlp
I do the same. :)

------
valtron
Also worth reading: [http://llvm.lyngvig.org/Articles/Mapping-High-Level-
Construc...](http://llvm.lyngvig.org/Articles/Mapping-High-Level-Constructs-
to-LLVM-IR)

------
carterschonwald
llvm-general is a great library, it is seriously the best high level api for
LLVM usage currently on the planet.

I'm very very grateful that Stephen Diehl took the time to port the
Kaleidoscope tutorial to LLVM-General

------
exDM69
Here's my toy programming language compiler written in Haskell using LLVM. It
has classical Hindley-Milner type inference and a limited form of "lambda"
closures using LLVM's trampoline intrinsic.

It's not in a state where the language would actually be useful for useful,
and it's only a learning project for me. I tried to suggest this project as
the topic of my master's thesis but my prof thought that it wasn't a good
subject.

[https://github.com/rikusalminen/funfun](https://github.com/rikusalminen/funfun)

------
pjmlp
Nice work! This will be a nice addition to my compiler design documentation.

Many thanks for the effort.

------
egonschiele
Holy cow. I tried using the llvm library a year ago to do something similar,
and found it very hard to use. I can't believe someone else did it, and was
nice enough to do a detailed writeup on it!

------
ericfode12
So much awesome!!!

------
abc_lisper
Very nice!

------
mamcx
Interesting. However, I still don't found good info in how do the rest of the
work: GC, debugger, exception..

------
jheriko
windows version? not everyone is a CS student or academic...

making language tools in windows is actually quite challenging due to the poor
quality of tools. its the only thing i've ever struggled with in that area.
using haskell and llvm makes it a little easier than using C and llvm but not
much...

it would be nice to have a windows friendly set of instructions - setting up
GHC, happy, alex etc. isn't hard, but LLVM is a pain for windows.

it would be nice if it was in C rather than Haskell too. imo its highly likely
nobody wants to touch Haskell if they have a choice. then the many C tools one
might want to use like flex, bison - even win-flex and win-bison are a bit
rubbish and difficult to configure for use in windows...

still a very useful article - its great to see an example worked through like
this, its one of the best forms of documentation imo and not enough of that
around in this area...

~~~
exDM69
> it would be nice if it was in C rather than Haskell too. imo its highly
> likely nobody wants to touch Haskell if they have a choice.

This is roughly a "port" of the LLVM "Kaleidoscope" tutorial, which is
originally written in C++. There's also an O'Caml version.

Haskell is (not coincidentally) an excellent language for writing compilers.
"nobody wants to touch Haskell" is just trolling that earned you a downvote.

~~~
jheriko
oh sure, there is a nice mapping between parser combinators and lbnf, however
most programmers have little experience of fp and don't want to touch haskell
for anything. this might be unpopular, but it has the unfortunate property of
being a true statement. i'm happy to be downvoted for 'trolling'

i had seen that kaleidoscope tutorial in the LLVM docs before but didn't
remember it particularly or find it helpful - perhaps its the presentation but
this site is much more polished than that part of the llvm docs. granted they
make the explicit choice to not use lexer/parser generators but that is not as
practical in c/c++ as it is with haskell and adds a lot of needless cruft imo.

------
strictfp
Thank you very much for sharing!

