m5l.eu is a Fediverse instance that uses the ActivityPub protocol. In other words, users at this host can communicate with people that use software like Mastodon, Pleroma, Friendica, etc. all around the world.
This server runs the snac software and there is no automatic sign-up process.
Some notable users of #Lua (beside @silverbulletmd of course):
Pico 8 https://www.lexaloffle.com/dl/docs/pico-8_manual.html
LOVE https://www.love2d.org/
Dwarf fortress: https://dwarffortresswiki.org/index.php/Lua_scripting
Neovim: https://neovim.io/doc/user/lua.html
Pandoc: https://pandoc.org/lua-filters.html
Roblox: https://luau.org/
Openresty https://openresty.org/en/
Minetest https://www.minetest.net/
Redis: https://redis.io/docs/latest/develop/interact/programmability/eval-intro/
ScyllaDB: https://opensource.docs.scylladb.com/stable/cql/functions.html
Some thoughts on what makes #Lua special in my mind:
1. The language is small and easy to learn. If you know any other procedural language, you will pick it up in a few hours tops.
2. Since Lua is designed to be embedded in an existing application, it doesn’t come with a huge general purpose library you have to learn. Like (1) lowering the barrier to entry.
3. This context suits a dynamic language very well. Little ceremony. Code that is straight to the point.
4. Cultural observation: since Lua is often used in more “casual” programming settings (game development, editor customization, environment tweaking) with relatively low stakes, practices that “proper” software engineering practice would oppose, become acceptable for convenience and productivity. Global variables? YOLO. Unit tests? Nah. Just get shit done.
@zef @silverbulletmd @neovim I would say another one to look at it may be #vis and #textadept. Both are heavily #lua based and can give some insight of patterns you may want to use. Even more so than #neovim. 😅
Ok. Day one of using @silverbulletmd in #Vim mode lead to already fixing some ugly UI glitches. Now thinking how to expand #Lua APIs to define Vim commands, bindings and other things. Also a reason to dive a bit deeper into @neovim which leans heavily on Lua. Also an interesting source of inspiration for Lua API design potentially.
@zef #lua is one of the few languages I've kept using for decades. It's a simple enough, but immensely powerful. What we should've gotten for the web instead of #Javascript. 😏
The one data structure grew on me. I kind of miss it when I'm not using the language. Cause you can do practically anything you need. And with metatables, you can make data structures function exactly how you need. With guards and limits to your heart's desire. 😅
Ok, so I’m now a few months into building a custom (almost from scratch) #Lua implementation for @silverbulletmd dubbed #SpaceLua (for reasons).
A few things that panned out really well, and a few surprises that I did not anticipate:
0. General recommendation: don’t do this. Don’t just implement a full programming language because you think it’s a good idea. I also told this myself. It didn’t work. It was a “I’ve don’t this stuff before, I can do it again” type of deal. I was mostly right. But don’t do this.
1. Initially I opted for a custom interpreter (implemented in TypeScript) because I wanted to expose asynchronous (promise based) JS APIs to Lua, and I didn’t see how to do that nicely with a #Wasm-compiled version of the official Lua interpreter. Also I felt that having full control of the running system would turn out to be valuable down the line (I was right on this one).
2. I got the parser part mostly free. I found an existing Lua grammar for the Lezer parser library that #SilverBullet uses. Had to add a few things and had some struggles. This part was pretty seamless with a few glitches here and there.
3. Implementing the core interpreter runtime was actually quite easy. Lua is a mostly simple and small language. Again, I’ve done this before so that helped. Writing good test suites makes this doable and AI helped a lot generating those test suites (because it knows Lua).
4. What I didn’t anticipate is the pain in implementing the full Lua API, especially the `string.*` one which has its own pattern matching language (similar but distinct from regular expressions), which honestly I could do without. But it’s there, and people want to use it, so I need a full implementation. Issues keep coming up, though.
This is what #FOSS promises to be, and it does feel nice to actually do it.
Discovered #SilverBullet today. Uses #lua for scripting, #localfirst, and is built with #deno. 🤯 Just wow! I'm going to need to play with this. 😏