This is the working draft for the new asys
package APIs.
- asynchrony
- more filesystem operations
- networking
- DNS
- TCP
- UDP
- Unix/IPC
- processes
- pipes
- message passing (via extended
Serializer
)
- streams
- (TODO) wrap stdin, stdout, stderr in streams
- (TODO) compatibility layer for old APIs to aid transition
Current WIP is the eval implementation. HL will remain broken until eval is feature-complete.
Target | Build | Binds | FS | T | Net | T | Prc | T | Note |
---|---|---|---|---|---|---|---|---|---|
eval | Y | P | P | P | P | P | P | P | ffi, impl, externs |
hl | Y | Y | Y | P | N | N | N | N | ffi, impl |
cpp | N | N | N | N | N | N | N | N | |
js | - | - | N | N | N | N | N | N | hxnodejs only, most APIs forwarded directly |
rest | - | N | N | N | N | N | N | N |
-
Build
- can we compile the interpreter (if any) with libuv? -
Binds
- is the FFI finished, or is there a good binding library available? -
FS
- are the filesystem functions implemented? -
Net
- are the networking (TCP, UDP, DNS) functions implemented? -
Prc
- are the process functions implemented? -
T
- are the tests for the previous column done? -
Y
,P
,N
,-
- yes, partially, no, not applicable -
hl, eval, cpp - use GC a bit better; automatically close
uv_file
(and others?) once collected -
eval - figure out instance variables (
final
in particular) on eval types, would allow unifying e.g.sys.uv.Stat
These should be implemented in pure Haxe, with minimal #if <target>
parts where necessary.
Feature | Impl | T | Notes |
---|---|---|---|
streams | P | P | based on streams3 of Node.js; simplified interface (dropped legacy APIs) |
- stream auto-HWM balancing, piping
- compatibility layer (
sys-compat
)
Category | Function | Notes |
---|---|---|
FS | copyfile |
n/a; only in libuv >= 1.14 |
FS | chmod with followSymlinks == false |
n/a; lchmod only in libuv >= 1.21 |
FS | chown with followSymlinks == false |
n/a; lchown only in libuv >= 1.21 |
FS | truncate |
emulated with open("r+") , ftruncate (see node) |
FS | mkdir with recursive == true |
emulated |
FS | rmdir |
??? should we have a recursive mode for rmdir |
- implementations
common-impl
- implementations common to all targetseval-impl
- externs for evalhl-impl
- implementations for HashLinksys-compat
- compatibility layer (old APIs implemented using the new APIs)
- documentation
- tests
tests
- unit tests
The new sys APIs are in the asys
package. Some new additions which are not sys-specific are added to the haxe
pacakge. The classes in <target>-impl
are expected to shadow those in common-impl
, just like the existing standard library in Haxe.
Once the new APIs are ready to be merged into the standard library:
common-impl
will be added tostd
- for each
<target>
<target>-impl/<target>
will be added tostd/<target>
- all other directories in
<target>-impl
will be added tostd/<target>/_std
A build of the documentation is available here. It can be built manually using the docs/generate.sh
script.
To test the HashLink implementations, please use the feature/libuv
branch of Aurel300/hashlink, which includes updated libuv FFI.
git clone git@github.com:Aurel300/hashlink.git
cd hashlink
make
make install
To test the Eval implementations, please use the feature/eval-libuv
branch of Aurel300/haxe, which includes libuv FFI and OCaml implementations.
cd tests
haxe build-hl.hxml && hl bin/test.hl
haxe build-eval.hxml