erlang + Zig NIF example
erl 25
zig 0.13.0
(l)ubuntu 22.04 lts
// zig build-lib -dynamic niftest.zig -I $ERL_ROOT/usr/include --library c -femit-bin=niftest.so
$ zig build-lib -dynamic niftest.zig -I $HOME/.kerl/erlangs/25.3/usr/include --library c -O ReleaseFast -femit-bin=niftest.so
$ erl
Erlang/OTP 25 [erts-13.2] [source] [64-bit] [smp:20:20] [ds:20:20:10] [async-threads:1] [jit:ns]
Eshell V13.2 (abort with ^G)
1> c(niftest).
{ok,niftest}
2> niftest:hello().
"Hello world!"
3> niftest:factorial(5).
120
4> niftest:factorial(20).
2432902008176640000
5> niftest:factorial(34).
295232799039604140847618609643520000000
6> niftest:factorial(35).
{error,"input too large, max is 34"}
7> niftest:factorial(-5).
{error,badarg}
8> q().
ok
https://www.erlang.org/docs/25/man/erl_nif.html
https://www.erlang.org/doc/system/nif.html
https://www.erlang.org/doc/system/debugging.html