package luv
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=8e01b4a50c8876cdd98d8e245c0687c4dc4d883aed161ad9c5ace1fb1fdaae99
doc/luv/Luv/Require/index.html
Module Luv.Require
Source
Feature checks.
You probably don't need these!
If you installed Luv in the usual way, through either opam or esy, you can ignore this module completely. In this case, Luv internally installed a vendored libuv of a recent version, and you have all the latest APIs available — whatever is exposed by your version of Luv is actually implemented by libuv.
However, if you installed Luv through a system package manager, or tweaked your Luv installation so that it links to a system or other external libuv — or if your users will do so — that external libuv might be of a considerably older version than Luv expects. Not all features normally exposed by Luv might actually be available.
For that case, this module provides a bunch of useful feature checks, so that you can control the behavior of your downstream project and/or prevent its compilation with too old a libuv.
This module itself is present since Luv 0.5.7.
A value of type 'a feature
is physically either a bool
or an int
.
The constraint
notation can be ignored. It's part of this module's internal type machinery for implementing compile-time feature checking.
Specific features (see below) have types like _40 feature
or _true feature
. The first is an int
feature whose run-time value is 40
, and the second is a bool
feature whose run-time value is true
.
As you can see, the run-time value can be seen from the type, and therefore from the docs, at a glance. So, you can quickly find out what your libuv supports by generating the docs for your Luv installation and looking at this module.
Of course, if you installed Luv through opam/esy and are using its vendored libuv, the int
features will simply be the corresponding libuv version, and all the bool
features will be _true
.
Returns the value of a feature at run time — in the ordinary way. Examples:
Luv.Require.(get luv05)
returns7
at the time of this writing — the current patch version of Luv (0.5.7).Luv.Require.(get random)
returnstrue
if Luv was linked with a libuv late enough that it supportsuv_random
(1.33.0 or higher).
Triggers a compile-time check of an int
feature.
For example, take Luv.Require.(libuv1 >= _33)
.
If the linked libuv has version 1.33.0 or higher, this check compiles. The compiled check then does nothing at run time — it is zero-cost.
If libuv has version less than 1.33.0, compilation of this expression triggers a type error. If that is too severe, you can relax to a run-time check by doing Luv.Require.(get libuv1) >= 33
instead.
The compile-time numbers _0
— _99
are defined for use with Luv.Require.(>=)
. They are hidden from this documentation to reduce visual noise.
These compile-time checks are modular in the sense that you can spread them throughout your project, locally where various features of libuv are being used, so that you don't have to do a survey of all your code in order to figure out the overall minimum libuv version. During build, your project will compile only if all the checks in its modules pass. They will then be optimized away.
Triggers a compile-time check of a bool
feature.
For example, take Luv.Require.(has random)
.
If the linked libuv has uv_random
, this check compiles, and is fully optimized away.
If libuv lacks uv_random
, compilation of this check triggers a type error. The check can be relaxed to run time by doing Luv.Require.(get random)
instead.
As with Luv.Require.(>=)
, you can insert these checks throughout your program, locally near where you use libuv features. The project will compile only if all the checks pass.
Features
val libuv1 :
(int
* ___0 s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s
s
s
s
s
s
s
s
s
s
s
s
s
s)
feature
libuv minor version in the 1.x series.
See Luv.System_info.available_parallelism
. Requires libuv 1.44.0.
See Luv.Time.clock_gettime
. Requires libuv 1.45.0.
See Luv.System_info.cpumask_size
. Requires libuv 1.45.0.
See `DISCONNECT
in Luv.Poll.Event.t
. Requires libuv 1.9.0.
See `EFTYPE
in Luv.Error.t
. Requires libuv 1.21.0.
See `EILSEQ
in Luv.Error.t
. Requires libuv 1.32.0.
See `ENODATA
in Luv.Error.t
. Requires libuv 1.45.0.
See `ENOTTY
in Luv.Error.t
. Requires libuv 1.16.0.
See `EOVERFLOW
in Luv.Error.t
. Requires libuv 1.42.0.
See Luv.Error.err_name
. Requires libuv 1.22.0.
See `ESOCKTNOSUPPORT
in Luv.Error.t
. Requires libuv 1.42.0.
See `EUNATCH
in Luv.Error.t
. Requires libuv 1.46.0.
See Luv.File.copyfile
. Requires libuv 1.14.0.
See signature of Luv.File.copyfile
. Requires libuv 1.20.0.
See Luv.File.lutime
. Requires libuv 1.36.0.
See Luv.File.lchown
. Requires libuv 1.21.0.
See Luv.File.mkstemp
. Requires libuv 1.34.0.
See `FILEMAP
Luv.File.Open_flag.t
. Requires libuv 1.31.0.
See Luv.File.realpath
. Requires libuv 1.8.0.
See Luv.File.statfs
. Requires libuv 1.31.0.
See Luv.Resource.available_memory
. Requires libuv 1.45.0.
See Luv.Resource.constrained_memory
. Requires libuv 1.29.0.
See Luv.File.get_osfhandle
. Requires libuv 1.12.0.
See Luv.Thread.getaffinity
Requires libuv 1.45.0.
See Luv.Thread.getcpu
. Requires libuv 1.45.0.
See Luv.Thread.getpriority
. Requires libuv 1.48.0.
See Luv.Time.gettimeofday
. Requires libuv 1.28.0.
See Luv.Network.if_indextoiid
. Requires libuv 1.16.0.
See Luv.Network.if_indextoname
. Requires libuv 1.16.0.
See Luv.Loop.library_shutdown
. Requires libuv 1.38.0.
See Luv.Loop.fork
. Requires libuv 1.12.0.
See Luv.Metrics.idle_time
. Requires libuv 1.39.0.
See Luv.Metrics.info
. Requires libuv 1.45.0.
See Luv.Mutex.init
. Requires libuv 1.15.0.
See Luv.File.open_osfhandle
. Requires libuv 1.23.0.
See Luv.Env.environ
. Requires libuv 1.31.0.
See Luv.Path.homedir
. Requires libuv 1.6.0.
See Luv.Passwd.get_group
. Requires libuv 1.45.0.
See Luv.Passwd.get_passwd
. Requires libuv 1.9.0.
See Luv.Passwd.get_passwd
. Requires libuv 1.45.0.
See Luv.Env.getenv
. Requires libuv 1.12.0.
See Luv.Network.gethostname
. Requires libuv 1.12.0.
See Luv.Pid.getpid
. Requires libuv 1.18.0.
See Luv.Pid.getppid
. Requires libuv 1.16.0.
See Luv.Resource.setpriority
. Requires libuv 1.23.0.
See Luv.Path.tmpdir
. Requires libuv 1.9.0.
See Luv.System_info.uname
. Requires libuv 1.25.0.
See Luv.Process.to_parent_pipe
. Requires libuv 1.21.0.
See Luv.Pipe.pipe
Requires libuv 1.41.0.
See Luv.Pipe.bind
. Requires libuv 1.46.0.
See Luv.Pipe.connect
. Requires libuv 1.46.0.
See Luv.Pipe.chmod
. Requires libuv 1.16.0.
See `PRIORITIZED
in Luv.Poll.Event.t
. Requires libuv 1.14.0.
See Luv.Process.spawn
. Requires libuv 1.24.0.
See Luv.Process.spawn
. Requires libuv 1.24.0.
See Luv.Process.spawn
. Requires libuv 1.48.0.
See Luv.Random.random
. Requires libuv 1.33.0.
See Luv.File.readdir
. Requires libuv 1.28.0.
See Luv.Thread.setaffinity
. Requires libuv 1.45.0.
See Luv.Thread.setpriority
. Requires libuv 1.48.0.
See Luv.Signal.start_oneshot
. Requires libuv 1.12.0.
See Luv.Time.sleep
. Requires libuv 1.34.0.
See Luv.TCP.socketpair
. Requires libuv 1.41.0.
See Luv.Error.strerror
. Requires libuv 1.22.0.
See Luv.TCP.close_reset
. Requires libuv 1.32.0.
See Luv.TCP.init
. Requires libuv 1.7.0.
See Luv.Timer.get_due_in
. Requires libuv 1.40.0.
See Luv.Thread.create
. Requires libuv 1.26.0.
See Luv.Error.translate_sys_error
. Requires libuv 1.10.0.
See Luv.Stream.try_write2
. Requires libuv 1.42.0.
See Luv.TTY.set_vterm_state
. Requires libuv 1.33.0.
See Luv.UDP.Connected
. Requires libuv 1.27.0.
See Luv.UDP.init
. Requires libuv 1.7.0.
See `MMSG_CHUNK
in Luv.UDP.Recv_flag.t
. Requires libuv 1.35.0.
See `MMSG_FREE
in Luv.UDP.Recv_flag.t
. Requires libuv 1.40.0.
See Luv.UDP.init
. Requires libuv 1.37.0.
See Luv.UDP.set_source_membership
. Requires libuv 1.32.0.
See Luv.UDP.using_recvmmsg
. Requires libuv 1.39.0.
See Luv.String
. Requires libuv 1.47.0.