For the latest stable version, please use Emilua API 0.10!

ChangeLog

0.5

  • Add mutex.try_lock().

  • Add module recursive_mutex.

  • Add module future.

  • Add filesystem.chown().

  • Enable IPC-based actors on all UNIX systems.

  • spawn_vm() performs the same module path resolution from require() now. That means it’s possible to use root-imports from spawn_vm().

  • spawn_vm() parameters refactored (API break).

  • Add Linux Landlock support.

  • Add FreeBSD Capsicum support.

0.4

  • A new byte_span type akin to Go slices is used for IO ops.

  • Actor channels now can transceive file descriptors.

  • Support for Linux namespaces. Now you can set up sandboxes and run isolated actors (or just the well-known containers).

  • Upgrade to C++20. The motivating feature for the upgrade was std::atomic<std::weak_ptr<T>>. However, other C++20 features are being used as well.

  • Removed println().

  • Removed sleep_for. Its functionality has been replaced by the module time.

  • Moved steady_timer to the new module time.

  • Removed ip.tcp.resolver. Its functionality has been replaced by ip.get_address_info().

  • tls.ctx renamed to tls.context.

  • Modules ip and tls grew a lot. The API for sockets now supports IO ops on byte_span instances, and plenty of new functions and classes (including UDP) were added.

  • inbox.recv() renamed to inbox.receive()

  • Module cond renamed to condition_variable.

  • error_code.cat renamed to error_code.category.

  • spawn_ctx_threads() renamed to spawn_context_threads().

  • inherit_ctx renamed to inherit_context in spawn_vm().

  • New modules.

    • time: clocks and timers.

    • pipe.

    • unix: UNIX domain sockets.

    • serial_port: serial ports.

    • system: UNIX signals, CLI args, env vars, process credentials, and much more.

    • file: file IO. Only available on systems with proactors (e.g. Windows with IOCP, and Linux with io_uring). BSD can still be supported later (with kqueue + POSIX AIO).

    • filesystem: portable path-manipulation, and plenty of filesystem operations & algorithms.

    • stream: AWK-inspired scanner and common stream algorithms.

    • regex: Basic regex functions. The interface has been inspired by C++, Python and AWK.

    • generic_error: portable error comparison for filesystem, sockets, and much more.

    • asio_error: errors thrown by the asio layer.

    • websocket.

  • Lua programs can define their own error categories now.

  • Several new OS-specific APIs (e.g. Linux capabilities, and Windows' TransmitFile()).

  • Add http.request.upgrade_desired().

  • http.socket can work on top of UNIX domain stream sockets now.

  • Now Emilua is less liberal on accepted values for env var EMILUA_COLORS.

  • Finer-grained cancellation of IO ops.

  • Locales are set at application startup.

  • Bug fixes.

  • The build system now makes use of Meson’s wrap system.

  • Documentation can now be installed as manpages.

  • Support for io_uring.

0.3

  • HTTP request and response objects now use read-write locks and there is some limited sharing that you can do with them without stumbling upon EBUSY errors.

  • Improvements to the module system (that’s the main feature for this release). You should be able to use guix as the package manager for your emilua projects.

  • EMILUA_PATH environment variable.

  • Native plugins API (it can be disabled at build configure time).

  • Add logging module.

  • Add manpage.

  • --version CLI arg.

  • Build configure options to disable threading.

  • Use fmtlib from host system.

0.2

  • Fix build when compiler is GCC.

  • Refactor module system. The new module system is incompatible with the previous one. Please refer to the documentation.

  • Add HTTP query function: http.request.continue_required().

  • Remove failed_to_load_module error code. Now you should see "iostream error" or other more informative error reasons upon a failed module load.

  • Numeric values for error codes changed.