For the latest stable version, please use Emilua API 0.10! |
ChangeLog
0.7 - 2024-04-17
Added
-
Add seccomp support.
-
Add
filesystem.mkdir()
to complementfilesystem.create_directory()
. -
filesystem.mode()
accepts new arguments now. -
Add
filesystem.chroot()
. -
filesystem.current_working_directory()
acceptsfile_descriptor
objects on UNIX now. -
Add extra optional parameter to filesystem.mknod().
-
Add
filesystem.clock.epoch()
. It’s useful to set the last modification date of every file in some directory for the purposes of a reproducible build or something. However there are more attributes besides last-write-time you need to care about if you’re planning to play with reproducible builds (be warned!). -
Add
filesystem.clock.unix_epoch()
andfilesystem.clock.now()
. -
Add more POSIX bindings to init.script API.
-
Add the
flock()
family tofile.stream
andfile.random_access
. -
Now it’s possible to configure Landlock mode for the calling process or
system.spawn()
subprocesses. -
Add
byte_span
methods for primitive types serialization (e.g. reading i32le from a 4-sized buffer). It also works as an endianness handling interface. 64-bit integers are omitted from the interface because LuaJIT only offers a hacky way to handle them.
Changed
-
Make subprocess.pid nullable. That’s useful for synchronization when multiple fibers are observing parts of subprocess state.
-
Allow file_descriptor.close() to be called multiple times in a row.
-
Change
filesystem.copy_file()
parameters. -
Change every name in the module filesystem from
hard_*
tohard*
(e.g.create_hard_link()
tocreate_hardlink()
). This C++17 convention is dumb and Python’s pathlib is the one who got it right. -
Change default
record_separator
instream.scanner
to"\n"
. -
Always start subprocess-based actors with umask 022.
-
Change
system.spawn()
parameters fromnsenter_*
tosetns_*
.
0.6 - 2024-01-06
Added
-
Add FreeBSD’s jails support.
-
Add function
format()
to format strings. The implementation uses C++'s libfmt. -
Add more functions to the module filesystem:
exists()
,is_block_file()
,is_character_file()
,is_directory()
,is_fifo()
,is_other()
,is_regular_file()
,is_socket()
,is_symlink()
,mode()
. It was already possible to query for these attributes. These functions were added as an extra convenience. -
Add yet more functions to the module filesystem:
mkfifo()
,mknod()
,makedev()
. -
New UNIX socket options to retrieve security labels and credentials from the remote process.
-
file_descriptor
implemented for Windows pipes andfile.stream
. -
Many improvements to Windows version of
system.spawn()
.
Changed
-
Convert decomposition functions from filesystem.path to properties:
root_name
,root_directory
,root_path
,relative_path
,parent_path
,filename
,stem
,extension
. -
Convert some filesystem.path properties to string:
root_name
,root_directory
,filename
,stem
,extension
. -
filesystem.path.iterator() will return strings at each iteration now.
0.5 - 2023-12-03
0.4 - 2023-04-03
Added
-
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).
-
Modules
ip
andtls
grew a lot. The API for sockets now supports IO ops onbyte_span
instances, and plenty of new functions and classes (including UDP) were added. -
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. -
Documentation can now be installed as manpages.
-
Support for io_uring.
Changed
-
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. -
Moved
steady_timer
to the new moduletime
. -
tls.ctx
renamed totls.context
. -
inbox.recv()
renamed toinbox.receive()
-
Module
cond
renamed tocondition_variable
. -
error_code.cat
renamed toerror_code.category
. -
spawn_ctx_threads()
renamed tospawn_context_threads()
. -
inherit_ctx
renamed toinherit_context
inspawn_vm()
. -
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.
-
The build system now makes use of Meson’s wrap system.
0.3 - 2021-03-04
Added
-
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.
0.2 - 2021-01-31
Changed
-
Refactor module system. The new module system is incompatible with the previous one. Please refer to the documentation.
-
Numeric values for error codes changed.