Announcing Spritely Oaken

45 points by mplant


minimax

Engines are a Scheme idea introduced by Kent Dybvig and Bob Hieb. The basic concept is that the system runtime keeps track of how many units of computation (‘ticks’) have been executed, and when that number exceeds a certain limit (the amount of ‘fuel’ in the engine), it pauses execution and returns the unfinished task back to whoever started it. They can then decide whether to stop running the computation, or give it more fuel and carry on.

Some might know this idea as “gas”, a key component of Vitalik Buterin’s 2014 Ethereum whitepaper and the subsequently deployed cryptocurrency system. But Dybvig and Heib published in 1988! And, checking their reference section, they are building on earlier work on timed preemption, a basic concept you might recognized from multitasking operating systems. Buterin didn’t cite a source, but I doubt that “gas” was an independent reinvention.

sjamaan

Very cool to see this sort of development based on research, and using Scheme, no less!

snej

Sounds kind of like an effect system plus capabilities. (Don’t some Lisps already have effects?)

wink

Hardly a week goes by without yet another story of some rascal sharing a Minecraft mod pack on a forum or uploading a mod to the Steam Workshop which, in reality, exists to steal browser cookies or passwords.

Never really heard about one of these in World of Warcraft (Lua) - I once found one in another game with Lua mods, but it was nothing too bad.

ceph

Lua is typically used in an embedding context where the engine can control what effects are exposed to the VM, which means that the script engine can’t get access to file or network primitives without some sort of VM exploit. Of course it may be possible due to oversights that allow loading Lua C API modules, but it’s usually fairly suspicious to ship a simple mod with a DLL or other shared library.

Minecraft mods are just JARs that are loaded into the same unrestricted JVM instance as the game itself, and it’s not uncommon for JARs to opaquely package JNI shared libs which aren’t quite as facially obvious.