⚡ Wren is a small, fast, class-based concurrent scripting language
「 Think Smalltalk in a Lua-sized package with a dash of Erlang and wrapped up in a familiar, modern syntax 」
⚡ Wren is a small, fast, class-based concurrent scripting language
「 Think Smalltalk in a Lua-sized package with a dash of Erlang and wrapped up in a familiar, modern syntax 」
🦾 Why Lua Beats MicroPython for Serious Embedded Devs
「 Lua isn’t just compatible with embedded systems; the Lua ANSI C library was designed for them. Its architecture is clean, compact, and deterministic.
MicroPython, on the other hand, is a reimplementation of Python 3. It works well for many embedded use cases, but it inherits assumptions from a desktop-oriented language 」
https://www.embedded.com/why-lua-beats-micropython-for-serious-embedded-devs
I'm currently writing #Fennel examples, and this is delightful. I even managed to make the decide
function even more beautiful than it was!
(local ruleset [is-in-ai-robots-txt?
default])
(fn decide [request]
(accumulate [outcome nil
_ f (ipairs ruleset)
&until (not= outcome nil)]
(f request)))
This is perfection.
From nothing to running iocaine + Caddy with ai.robots.txt
's robots.json
and a few metrics as a starting point.
Contains #Roto, #Lua, and #Fennel - and a few tests too, for each.
I'm on a bit of a roll lately, and have released #iocaine version 2.4.0 just a few moments ago.
This does not bring that many significant changes as 2.3.0 did, but it does introduce #Lua and #Fennel as languages you can script its decision making with, on top of #Roto, which was introduced in 2.2.0.
While these languages run slower than Roto, they're still very fast, and are not going to be a bottleneck - they do provide a more familiar language to write the decision making in!
Oh, and metrics can now be persisted across restarts.
"What is acceptable?", you may ask.
Well, anything faster than ~40k req/sec in release mode will do. Why ~40k req/sec? Because that's my reverse proxy's bottleneck.
I also expect a very naive implementation of return false
to run at at least at 1k req/sec in release mode.
What's a naive implementation? Creating the runtime environment on every request, and compiling the trivial program on every request.
In other #iocaine news, I'm doing some final polishing on #Lua scripting support, to make it as convenient as #Roto.
Right now, there's a differenc between how Lua and Roto scripts are loaded: with Roto, one needs to give a path to a directory, and pkg.roto
will be loaded from there, and any import
s will be relative to that directory.
With Lua, one gives iocaine a file path, and - currently - needs to set up the package.path
search path manually.
So here's what I'll do: I'll make iocaine require a directory for Lua too, and it will add it to package.path
, and will require("main")
. The required module will also have to return a table with at least a decide
key, and an optional run_tests
key. This will simplify finding the functions to run, and will greatly reduce the number of special cases.
Today, I'm writing tests. Originally, I planned to write a bunch of tests in Rust to exercise the request handlers, but that felt like a huge pain in the backside, and would've involved a lot of repetition and boilerplate.
Then, I figured: I'll write the tests in #Roto and #Lua! Test the things from that side. Much less boilerplate, but still a lot of repetition.
Instead, I'll be writing a test suite to verify the decisions of a request handler. I'll run it for both engines, #Roto and #Lua. I will still have to write the scripts twice, but I will only write the verification once.
「 Teal is a statically-typed dialect of Lua. It extends Lua with type annotations, allowing you to specify arrays, maps and records, as well as interfaces, union types and generics.
It aims to fill a niche similar to that of TypeScript in the JavaScript world 」
I am in urgent job search mode, so I'm gonna throw this out here and see if anything comes of it.
I am a #Canadian, fluent in both #English and #French. I have experience with several programming languages. My strongest proficiency is with #Haskell and #C. I also have a reasonable grasp of #HTML, #JavaScript, #SQL, #Python, #Lua, #Linux system administration, #bash scripting, #Perl, #AWK, some #Lisp (common, scheme, and emacs), and probably several others I've forgotten to mention.
I am not necessarily looking for something in tech. I just need something stable. I have done everything from software development, to customer support, to factory work, though my current circumstances make in-person work more difficult than remote work. I have been regarded as a hard worker in every job I have ever held.
A space for Bonfire maintainers and contributors to communicate