

Hedgehog: an embedded Lisp in 20k - gnosis
http://hedgehog.oliotalo.fi/

======
swannodette
Their FOSDEM paper is a must read. A balanced and honest assessment of their
little Lisp.

 _Customers have not cared whether Lisp is used or not. They have only cared
about the results, and being able to change specifications with relative ease
even after delivery and deployment has sometimes been a killer argument._

~~~
silentbicycle
Indeed. Also interesting: Hedgehog lacks any mutation operator, because
(paraphrasing) debugging issues caused by mutability over a slow serial line
is not an effective use of time.

Also, it sounds like the way they implemented the standard library (at the
Lisp level; functions used are part of the bytecode) brings implicit tree-
shaking. Probably an excellent trade-off for embedded programming.

~~~
andrewcooke
i had to google "tree shaking". i (now) think it means removing unneeded parts
of the system for deployment (like compiler and debugger). but i don't
understand how anything a library does can implicitly implement that. can you
expand?

~~~
silentbicycle
The way the system is set up (according to the paper), all functions appear as
bytecode, i.e., the only stdlib functions added are those that are _actually
used_. Probably not a big deal in most cases, but it sounds like a major bonus
for embedded systems. For hedgehog, most of the system is only present at
compile-time, under the assumption that it can do heavy compilation but will
run on a weak system.

Also, thanks for all your blogging / commenting / etc. about OCaml over the
years! Learned a ton. I'll buy you coffee or a pint if we ever cross paths.

~~~
andrewcooke
OK, thanks. (Do you have the right person? I haven't used OCaml for years now.
Anyway, if so, glad I could help...)

~~~
silentbicycle
I think so...it was several years ago, when I was learning OCaml.

------
Emore
I can think of another programming language called Hedgehog, developed by
Palantir Technologies: <https://wiki.palantir.com/pflc/the-hedgehog-
language.html>

