You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

50 lines
1.8 KiB

# Possible Future Features
These are some features we're interested in, but don't have yet, and which will
require some amount of design work.
## File Locking
POSIX's answer is `fcntl` with `F_SETLK`/`F_GETLK`/etc., which provide advisory
record locking. Unfortunately, these locks are associated with processes, which
means that if two parts of a program independently open a file and try to lock
it, if they're in the same process, they automatically share the lock.
Other locking APIs exist on various platforms, but none is widely standardized.
POSIX `F_SETLK`-style locking is used by SQLite.
## File change monitoring
POSIX has no performant way to monitor many files or directories for changes.
Many popular operating systems have system-specific APIs to do this though, so
it'd be desirable to come up with a portable API to provide access to this
functionality.
## Scalable event-based I/O
POSIX's `select` and `poll` have the property that each time they're called,
the implementation has to scan through all the file descriptors to report if any
of them has I/O ready, which is inefficient when there are large numbers of
open files or sockets.
Many popular operating systems have system-specific APIs that provide
alternative ways to monitor large numbers of I/O streams though, so it'd be
desirable to come up with a portable API to provide access to this
functionality.
## Crash recovery
POSIX doesn't have clear guidance on what applications can expect their
data will look like if the system crashes or the storage device is otherwise
taken offline abruptly.
We have `fsync` and `fdatasync`, but even these have been a topic of
[much discussion].
[much discussion]: https://wiki.postgresql.org/wiki/Fsync_Errors
Also, currently WASI's docs don't make any guarantees about things like
`path_rename` being atomic.