Hey I wrote up a blog post on tooling for programm...
# thinking-together
n
Hey I wrote up a blog post on tooling for programming languages, basically tools like tree-sitter that help programming language implementors provide higher quality user experience. I’d love to see what people think of the post! It’s in draft but I’ll probably publish it soon. https://github.com/NicholasLYang/uptointerpretation/blob/master/content/posts/tooling-for-tooling.md
j
There's good and bad here. I like that you talk about incremental/error tolerant aspects of things, as these are very much required to build good tooling. OTOH: • the bit about language servers seems to come from the perspective that they're a good thing when they're really just a gnarly patch for languages that don't support interactive development • Treesitter generating C is one of the good things about it, as the C ABI is a sort of lingua franca on the operating systems we have available • You'll need to explain your pushback against (for example) bison and Racket in more detail to be taken seriously, it's currently just handwaving
n
Thanks for the feedback! I’d have to politely disagree about the point on language servers. I’ve tried interactive development and I think it’s a valid set of tradeoffs but not my personal cup of tea. Tree sitter generating C is probably the right call, but I would be interested to see if generating Rust or Zig would be worthwhile, as you could keep the C ABI but make the build process way way easier. I’ve been trying to compile a rust codebase with tree-sitter to wasm and because of the C code, I can’t compile to wasm32-wasi without some messy patching, and wasm32-unknown-emscripten appears to be going out of date and has ABI incompatibilities with Rust compiled to wasm. If tree-sitter could generate rust it’d make the composability a lot nicer. As for your last point, yeah fair. I’ll try to come up with good examples. Bison has quite poor documentation and an extremely poor dev experience but you’re right, I need to iron that out concretely. Racket is almost worth an entire blog post on its own. I like it a lot but it’s kind of too large and encompassing of an ecosystem to simply be a tool inside a compiler. You either use racket or you don’t. Thanks again!
j
I'd be interested in hearing a bit about your experiences with interactive development! 🫖