路二(径生原生之二进制)于 Linux 之最小闭环,底层之模。书“你好”一行,自标准入读至多六十四字节而原样书之,终以退出码七。书、读、退皆径发 Linux 之系统调用:导入之模块名 Linux,导入之名即系统调用之名(write、read、exit_group);寄存器之降依入口之表成系统调用之桩,址类之参入系统之前加线性内存之基址。
构与生(于仓库之根):
node 豫言操作系统/宿主/节点/宿主.cjs yy豫构.wasm 构建 原生你好 --输出 yy原生你好.wasm -j 24
node 豫言操作系统/宿主/节点/宿主.cjs yy豫构.wasm 构建 豫言裸机 原生生成 --输出 yy原生生成.wasm -j 24
YY_GC_INITIAL_HEAP_SIZE_MB=512 node 豫言操作系统/宿主/节点/宿主.cjs yy原生生成.wasm Linux 臂六十四 yy原生你好.wasm yy原生你好臂
YY_GC_INITIAL_HEAP_SIZE_MB=512 node 豫言操作系统/宿主/节点/宿主.cjs yy原生生成.wasm Linux 兼容六十四 yy原生你好.wasm yy原生你好兼
所成者,静态之 ELF64 可执行文件,于 Linux 之 arm64 与 x86-64 径行,不倚动态之库。
原生生成 今由原生运行时行之,初始线性内存以一页六万五千五百三十六字节整块而分,须以环境变量增其初堆。
于 macOS 可以 Docker 验之(FROM scratch 之镜像,唯含此一文件):
printf 'FROM scratch\nCOPY --chmod=755 yy原生你好臂 /hello\nENTRYPOINT ["/hello"]\n' > Dockerfile
docker build --platform linux/arm64 -t yy-hello .
printf '回声\n' | docker run --rm -i --platform linux/arm64 yy-hello; echo $?
当书“你好”与“回声”二行,退出码七。x86-64 则易以 yy原生你好兼 与 linux/amd64。
macOS 之版
苹果入口。豫 乃同一程序之 macOS 版:书、读、退经 libSystem 之 write、read、exit(导入之模块名为苹果);所生之 Mach-O 位置无关,由 dyld 绑其导入之槽,附特设之签名,可于本机(arm64)径行:
node 豫言操作系统/宿主/节点/宿主.cjs yy豫构.wasm 构建 原生你好 苹果入口 --输出 yy原生你好苹果.wasm -j 24
YY_GC_INITIAL_HEAP_SIZE_MB=512 node 豫言操作系统/宿主/节点/宿主.cjs yy原生生成.wasm 苹果 臂六十四 yy原生你好苹果.wasm yy原生你好苹果
chmod +x yy原生你好苹果
printf '回声\n' | ./yy原生你好苹果; echo $?
Linux 之版,其生之令则为 node 豫言操作系统/宿主/节点/宿主.cjs yy原生生成.wasm Linux 臂六十四 …。