Skip to content(if available)orjump to list(if available)

Why Go Rocks for Building a Lua Interpreter

williamdclt

Well done, writing interpreters is fun!

I’m not really sold on why Go would be a particularly good fit for the task, compared to other languages. Seems to be mostly “interfaces are useful for interpreters, and GC means I don’t have to care about memory management” - both of which are true but hardly specific to Go. There’s some form of interface in almost every mainstream language, I think the implementation would be pretty much the same in any GCd language

lopatin

I never thought that Go would be a technology of choise for PL stuff. I always considered it more of a Java-lite for Web systems and also for CLI stuff, but here we are! TypeScript rewrote their compiler to Go. Being a compiler, they had no use of piggy backing on the GC, looks like they just liked the language.

3836293648

Typescript chose Go specicfically because they didn't rewrite it. Go has close enough semantics to TypeScript that they could write a Go backend for tsc and do a machine port to Go and continue working from that

osigurdson

Yeah. They said that there were lots of nested structures with cycles and so on so it would be hard to do with Rust. Link below.

https://youtu.be/10qowKUW82U?t=762

azemetre

Didn't MSFT also fire the lead engineer for this project shortly after?

9rx

> I’m not really sold on why Go would be a particularly good fit for the task, compared to other languages.

Can't every language rock for building a Lua interpreter? It isn't a competition.

null

[deleted]

ufo

I know the author starts the post by saying he won't explain the reasons why he had to write a new Lua interpreter from scratch, but I'm still curious about that. Does anyone know? I dug through some of the links in the post and couldn't find the answer.

zombiezen

Yup, as others have mentioned, it's for zb. I originally outlined some background on design goals for this blog post, but the outline for that section was as big as the outline for the rest of the post, so I cut it. I'll probably write that one up as another blog post in the near future. :)

(Also, my pronouns are she/her.)

Lyngbakr

This is exactly the part I got hung up on, too.

    The exact reasons aren’t important for this blog post, but neither the reference implementation [...] nor the other open source Go Lua intepreters I could find were a good fit for my needs.
I'm intrigued because presumably the shortcomings of the other implementations are important to how they chose to implement Lua here.

Scaevolus

It's for zb, a Bazel-inspired build system that uses Lua instead of Starlark (stripped down python).

mdaniel

Zb: An Early-Stage Build System - https://news.ycombinator.com/item?id=41595310 - Sep, 2024 (125 comments)

and the beta announcement was also recently submitted, but without commentary https://news.ycombinator.com/item?id=44290692

wavemode

Given this is going to be used as a scripting language for a build system, it's possible they are trying to implement a restricted subset of Lua rather than than the full language.

shhsshs

From the article:

    My Lua data types have a notable difference from C Lua: an ability to be “frozen”.

wavemode

I'm surprised there was no mention of implementing Lua's coroutines via Go's goroutines.

anaempromptu

tfw you learn lua so you can build robots on minecraft

andrewmcwatters

Not that it's terribly important, but in the Lua circles, the reference implementation is usually referred to as PUC-Rio Lua.

jekwoooooe

Go rocks for pretty much everything