(How to Write a (Lisp) Interpreter (In Python)) (2010)
47 points by tosh 2 hours ago | 22 comments

chombier 46 minutes ago
If you ever wondered how to write a programming language, this is probably the best resource to get started (and then of course Crafting Interpreters).

See also part 2 https://norvig.com/lispy2.html

reply
zahlman 2 hours ago
(how-to in-python (write (interpreter lisp)))
reply
consumer451 27 minutes ago
Yes, but to be fair, you only have a couple minutes to fight the HN title regex.
reply
RedCinnabar 5 minutes ago
Man these kind of resources have aged really bad in the age of AI.
reply
jgalt212 2 minutes ago
How so?
reply
timonoko 25 minutes ago
One of those exercises that are now just boring, because AI does it better.

Gemini did write Lisp-1 interpreter in Linux-assembly the other day. It was ready to implement garbage collection and compiler and all shit, but that was just depressing from human point of view.

reply
genxy 36 seconds ago
There is always someone better than you at almost everything you do, this is statistical reality.

If all you care about is the artifact and not the path, there is no reason to do anything.

Use the tool to better yourself, your understanding and push the limits of what is possible. If an Lisp in assembly with GC is now hello world, change what a hard project is.

I see this attitude a lot, and I think it is rooted in a sort of self-centered elitism. Anyone can do it, so why do it? Instead you could have the AI teach you how to implement it yourself with a deep understanding that no human, even if you paid them, would put up with.

But sure, get depressed. But why tho?

reply
tosh 12 minutes ago
is learning how to accomplish or understand something boring

just because someone or something else does it better?

reply
chamomeal 13 minutes ago
I mean it’s still worth doing, even if AI can do it. But I definitely empathize with that bit of AI ennui.
reply
librasteve 33 minutes ago
or you could just use Raku and its “surprisingly good lisp impression”:

https://www.codesections.com/blog/raku-lisp-impression/

reply
azhenley 2 hours ago
Writing a Lisp is one of my favorite projects. I try to do it every year or two, taking a different approach each time.
reply
onraglanroad 23 minutes ago
The one where you replaced parentheses with the crying laughing emojis was definitely the worst.
reply
tosh 2 hours ago
I can't recommend highly enough to implement a simple lisp (or a forth).

Illuminating experience and it will also help you see (among many other things) the parentheses in a different light.

reply
stdatomic 2 hours ago
First day of paradigms course in the 2000s and prof says "if your opinion of Scheme is too many parentheses, then you're an idiot."

Needless to say that was my opinion and every day I think, more and more, how right he was.

(later I did make some gui apps that included scripting and chose s-expr syntax because of how simple it is to implement it)

reply
bananaflag 48 minutes ago
There are two problems with Lisp parentheses in my opinion:

1) Humans are not that equipped to handle that level of nesting without some other aid, this is why Lisp code is usually indented.

2) Parentheses aren't just about grouping, and this is unintuitive. For example, x is not the same as (x). This is a bit like in set theory where x is not the same as {x}, but parentheses do not look like the kind of sign that would work like that.

reply
NooneAtAll3 57 minutes ago
main problem isn't brackets themselves - it's that they're too on the right

had brackets been displayed as curly braces in C - everything would look much more manageable

reply
eska 29 minutes ago
I changed my opinion about parens when I stopped formatting like C, and used indent rather than parens to denote blocks. That is, a large amount of them at the end is totally fine.
reply
phpnode 34 minutes ago
so, instead of

    (foo (bar (1 2 3))
you'd prefer

    {
      foo {
        bar {
          1
          2
          3
        }
      }
    }
is that right?
reply
irishcoffee 14 minutes ago
Emacs vs vim, go!
reply
joshuamorton 25 minutes ago
There are edge cases where this fails, but `def parse(s): return json.loads('['+re.sub('([")])\s*(["(])','\g<1>,\g<2>',re.sub('[^()\s]+','"\g<0>"',s)).replace('(','[').replace(')',']')+']')` is a surprisingly robust lisp parser.
reply
urcite_ty_kokos 2 hours ago
Appreciated the title xD
reply
e12e 2 hours ago
(2010)?
reply