
Ask HN: Transpiling a dynamically typed language to a statically typed language - leksak
Hi, I have been pondering what I want to do for my master
thesis (2+ years away) and I have an idea. I am writing to ask if
the question has a known answer or is even theoretically possible
to conduct.<p>My idea is to write a source-to-source compiler from a Lisp_2 to
Rust, but I do not know if it is possible to transpile from a
dynamic language to a statically typed language. Is it?
======
nakkaya
It is possible. Some scheme compilers use C as their intermediate language.
Scheme to C to binary. (Gambit/Chicken/Stalin etc.). I have a project [1][2]
that compiles a subset of Clojure to C++11 that is written using literate
programming [3]. It thoroughly documented and should give you an idea on how
to build your own.

[1] [http://dropbox.nakkaya.com/builds/ferret-
manual.html](http://dropbox.nakkaya.com/builds/ferret-manual.html) [2]
[http://nakkaya.com/2011/06/29/ferret-an-experimental-
clojure...](http://nakkaya.com/2011/06/29/ferret-an-experimental-clojure-
compiler/) (Old version for more documentation on the idea.) [3]
[https://en.wikipedia.org/wiki/Literate_programming](https://en.wikipedia.org/wiki/Literate_programming)

------
malisper
In one of the later chapters, the book Lisp in Small Pieces (great book),
shows you how to write a a Scheme compiler to C. The general idea is you
create a structure that contains a union type of all types in the dynamic
language, and also a tag that tells you which type it is.

------
duncanawoods
That doesn't sound hard to me - you just use a high level type that implements
the coercion/conversion rules of the dynamic lang types.

GC lang to non-GC lang is a more interesting challenge. If anyone has
transpiled a gc lang to C++ I'd love to know how they did it.

------
szemet
[https://en.wikipedia.org/wiki/HipHop_for_PHP](https://en.wikipedia.org/wiki/HipHop_for_PHP)
[https://www.call-cc.org](https://www.call-cc.org)

------
ryanlm
My honest opinion is that unless you've written C, or assembly, I don't
consider you a real programmer.

~~~
leksak
What does this have to do, at all, with the question?

