节点打包。豫
yuyan · 247 行 · 16022 字节 · UTF-8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247
寻观「标准库」之书。
寻观「标准库」之「数据结构」之「特殊字符」之书。
寻观「标准库」之「数据结构」之「字节串」之书。
寻观「标准库」之「数据结构」之「多态列工具」之书。
寻观「标准库」之「操作系统」之「异步子进程」之书。
寻观「编译器核心」之「网页汇编核心」之「回收编码」之书。
寻观「编译器核心」之「编译步骤」之「代码生成」之「回收值桥接」之书。
寻观「双宿主构建」之「文本工具」之书。
寻观「双宿主构建」之「接口适配」之书。
寻观「双宿主构建」之「宿主构建」之书。
「:文言:路一之发行包:程序.wasm、单一启动文件 启动.mjs、发行清单 清单.json。前半纯函数,后半涉磁盘与子进程。汉语:节点模式的发行包只有三个文件:应用的 程序.wasm、单个 JS 启动文件 启动.mjs(Node 宿主,内联共用模块并嵌入值桥与宿主支持清单)、发行清单 清单.json(应用要求的接口清单与程序摘要)。本篇前半是纯函数,后半做磁盘与子进程的事。:」
「节点宿主目录」者『豫言操作系统/宿主/节点/』也。
「节点支持表路径」者『豫言操作系统/宿主/节点/宿主支持清单.tsv』也。
「:文言:工具先取 .wasm 之版,无则取旧名。汉语:构建根里的外部工具先用同名加 .wasm 的版本(在 Node 上运行的 WasmGC 程序),没有时用不带后缀的旧名。:」
「工具路径」乃化「字符串」而「字符串」也。
「工具路径」者会「名」而
若「文件系统」之「路径存在」于(『./』附「名」附『.wasm』)则
『./』附「名」附『.wasm』
否则
『./』附「名」
也。
「:文言:去各行首之 export,使模可内联于一函之中。汉语:去掉每行开头的「export 」,让 ES 模块源码能放进一个函数体里内联。:」
「去导出前缀」乃化「字符串」而「字符串」也。
「去导出前缀」者会「文」而
「间合」
于「新行」
于(「态射」授以「字符串」授以「字符串」
于(「按字切分」于「新行」于「文」)
于(会「行」而若「串开头是它吗」于『export 』于「行」则「去除串开头」于『export 』于「行」否则「行」))
也。
「:文言:一模内联为一立即之函,出其所列之名;诸模之私名各居其域,不相扰。汉语:把一个共用 ES 模块内联成立即执行的函数,只取出列出的导出名;各模块的私有名字留在各自的函数作用域里,互不冲突。:」
「内联模块文」乃化「字符串」而化(「列」于「字符串」)而「字符串」也。
「内联模块文」者会「源」而会「导出名们」而
虑「名表」者「间合」于『, 』于「导出名们」而
『const {』附「名表」附『} = (() => {』附「新行」附(「去导出前缀」于「源」)附「新行」附『return {』附「名表」附
『};』附「新行」附
『})();』
也。
「:文言:以新段代起标至止标之文,二标并去。汉语:把文字里从起始标记开头到结束标记结尾的一段(含两个标记)换成新段;缺少标记时抛出中文事故。:」
「替换标记区段」乃
化「字符串」而
化「字符串」而
化「字符串」而
化「字符串」而
「字符串」
也。
「替换标记区段」者会「文」而会「起标」而会「止标」而会「新段」而
鉴「串从左搜索单个」于「起标」于「文」而
有「可无」则
「发生事故」授以「字符串」于(『启动文件源码缺少标记:』附「起标」)
或有(「可有」于「起位」)则(
鉴「串从左搜索单个」于「止标」于「文」而
有「可无」则
「发生事故」授以「字符串」于(『启动文件源码缺少标记:』附「止标」)
或有(「可有」于「止位」)则
(「获取子字符串」于「零」于「起位」于「文」)附「新段」附(「获取子字符串」
于(「加」于「止位」于(「串长度」于「止标」))
于(「串长度」于「文」)
于「文」)
)
也。
「:文言:字节书为十进制之列,逗号隔之。汉语:把字节串写成逗号分隔的十进制数(JS 数组字面量的内容)。:」
「字节数组文」乃化「字节串」而「字符串」也。
「字节数组文」者会「字节」而
「间合」
于『,』
于(「态射」授以「整数」授以「字符串」
于(「整数范围」于「零」于(「字节串长度」于「字节」))
于(会「序」而「整数表示」于(「字节串取字节」于「字节」于「序」)))
也。
「:文言:取一组清单之文,逗号隔之。汉语:取出宿主支持清单里“是否应用提供”等于给定值的一组清单原文,用逗号连接。:」
「支持组文」乃化(「列」于(「爻」合「字符串」))而化「爻」而「字符串」也。
「支持组文」者会「项们」而会「应用乎」而
「间合」
于『,』
于(「态射」授以(「爻」合「字符串」)授以「字符串」
于(「滤」授以(「爻」合「字符串」)于(会「项」而「爻相等」于(「项」中「零」)于「应用乎」)于「项们」)
于(会「项」而「项」中「一」))
也。
「:文言:宿主支持之文:宿主所供与应用所供二列,皆原清单之文。汉语:把宿主支持清单写成 JSON:宿主提供与应用提供两组,元素是各接口清单文件的原文。参数是(是否应用提供,清单原文)列表。:」
「宿主支持文」乃化(「列」于(「爻」合「字符串」))而「字符串」也。
「宿主支持文」者会「项们」而
『{"宿主提供":[』附(「支持组文」于「项们」于「阴」)附『],"应用提供":[』附(「支持组文」于「项们」于「阳」)附『]}』
也。
「:文言:发行清单:式、版、程序名、程序摘要、应用所需与所供。汉语:发行清单 清单.json 的全文:格式名与版本、程序文件名、程序 SHA-256 摘要、应用要求的接口清单组(装载包工具所出)、应用提供的接口清单。:」
「发行清单文」乃
化「字符串」而
化「字符串」而
化(「列」于「字符串」)而
「字符串」
也。
「发行清单文」者会「摘要」而会「要求文」而会「提供文们」而
『{"格式":"豫言节点发行清单","格式版本":1,"程序":"程序.wasm","程序摘要":"』附「摘要」附『","接口要求":』附「要求文」附
『,"应用提供":[』附(「间合」于『,』于「提供文们」)附『]}』附「新行」
也。
「:文言:组启动文件:内联共用之模,嵌值桥与宿主支持。汉语:组装启动文件:在 Node 宿主源码的两个标记区段里分别放入内联的共用模块和嵌入常量,并加上“生成文件勿改”的注释。:」
「组启动文件」乃化「字符串」而化「字符串」而化「字符串」而「字符串」也。
「组启动文件」者会「宿主源」而会「内联段」而会「内嵌段」而
『// 文言:此文由 yy双宿主构建 节点模式所生,勿手改。汉语:本文件由 yy双宿主构建 --自动 节点 生成,是路一的单文件 Node 宿主;不要手改,改 豫言操作系统/宿主/节点/应用宿主.mjs 后重新构建。』
附
「新行」附
(「替换标记区段」
于(「替换标记区段」于「宿主源」于『// 〔内联起〕』于『// 〔内联止〕』于「内联段」)
于『// 〔内嵌起〕』
于『// 〔内嵌止〕』
于「内嵌段」)
也。
「:文言:行命而取其出;非零则告码、令与误出。汉语:运行外部命令并返回标准输出;退出码非零时抛出带命令行、退出码与错误输出的中文事故。:」
「取命令输出」乃化「字符串」而化(「列」于「字符串」)而「字符串」也。
「取命令输出」者会「程序」而会「参数们」而
虑「果」者
「异步」之「等待」授以「子进程结果」
于(「异步获取输出」于「程序」于「参数们」)而
若「等于」于(「果」中「一」)于「零」则
「果」中「二」
否则
「发生事故」授以「字符串」于(『命令执行失败(退出码 』附(「整数表示」于(「果」中「一」))附『):』附(「间合」
于『 』
于(「缀」于「程序」于「参数们」))附「新行」附(「果」中「三」))
也。
「:文言:程序之摘要,以 shasum 取之,同接口检查器。汉语:用 shasum -a 256 求 程序.wasm 的摘要(接口检查器生成清单时同样用它)。:」
「程序摘要」乃化「字符串」而「字符串」也。
「程序摘要」者会「文件」而
「获取子字符串」于「零」于「六四」于(「取命令输出」于『shasum』于(「列」【『-a』,『256』,「文件」】))
也。
「:文言:生成启动文件:读宿主源与三共用模,析支持表,嵌同代值桥。汉语:生成 启动.mjs:读 Node 宿主源码与三个共用模块(云工值桥、句柄表、接口核对),按宿主支持清单读入各接口清单,并嵌入本工具生成的同代值桥。:」
「生成节点启动文件」乃化「有」而「字符串」也。
「生成节点启动文件」者会「无」而
虑「宿主源」者
「文件系统」之「读文件」于(「节点宿主目录」附『应用宿主.mjs』)而
虑「内联段」者
(「内联模块文」
于(「文件系统」之「读文件」于『豫言操作系统/宿主/云工/值桥.mjs』)
于(「列」【『创建值桥』,『文字』】))附「新行」
附
(「内联模块文」
于(「文件系统」之「读文件」于『豫言操作系统/宿主/云工/句柄.mjs』)
于(「列」【『创建句柄表』】))附「新行」附
(「内联模块文」
于(「文件系统」之「读文件」于『豫言操作系统/装载/接口核对.mjs』)
于(「列」【『核对接口装载』】))
而
虑「支持表」者
「解析节点支持表」于(「文件系统」之「读文件」于「节点支持表路径」)而
虑「支持文」者
「宿主支持文」
于(「态射」授以「节点支持项」授以(「爻」合「字符串」)
于「支持表」
于(会「项」而(「应用提供支持吗」于「项」)与(「文件系统」之「读文件」于(「项」中「二」))))
而
虑「内嵌段」者
『const 内嵌 = {值桥: [』附(「字节数组文」于(「回收模块编码带名」于「回收值桥接」))附『], 宿主支持: 』附
「支持文」附
『};』
而
「组启动文件」于「宿主源」于「内联段」于「内嵌段」
也。
「:文言:应用所供之接口:先核入口之实现,后生其清单。汉语:应用提供的接口(如启动):先用接口检查器按“应用”角色核对应用入口源码里的实现(应用目录须有 实现接口。豫),再生成该接口的清单原文。:」
「应用提供清单」乃化「字符串」而化「字符串」而化「字符串」而「字符串」也。
「应用提供清单」者会「应用入口」而会「输出目录」而会「接口名」而
虑「接口包」者
『豫言操作系统接口/』附「接口名」附『/豫言操作系统』附「接口名」附『。包。豫』而
虑「检查器」者「工具路径」于『yy豫言操作系统接口检查』而
虑「无」者
「成功运行带码」于「检查器」于(「列」【「接口包」,「应用入口」,『应用』】)而
虑「临时」者「输出目录」附『/.应用提供清单.json』而
虑「无」者
「成功运行带码」于「检查器」于(「列」【『--清单』,「接口包」,「临时」】)而
虑「文」者「文件系统」之「读文件」于「临时」而
虑「无」者
「子进程」之「成功运行」于『rm』于(「列」【『-f』,「临时」】)
而
「文」
也。
「:文言:造节点发行包:编程序,集客需之簿,核应用所供,书清单与启动文件。汉语:构建节点发行包:编译应用为 程序.wasm;用装载包工具重验各接口绑定并取得应用要求清单组;核对应用提供的接口;写 清单.json(含程序摘要)与 启动.mjs。输出目录最后只有这三个文件。参数:应用入口、输出目录、编译器、包上下文、绑定目录列表、应用提供的接口名列表。:」
「构建节点发行包」乃
化「字符串」而
化「字符串」而
化「字符串」而
化「字符串」而
化(「列」于「字符串」)而
化(「列」于「字符串」)而
「有」
也。
「构建节点发行包」者会「应用入口」而会「输出目录」而会「编译器」而会「包上下文」而会「绑定目录们」而会「应用提供们」而
虑「无」者
「子进程」之「成功运行」于『mkdir』于(「列」【『-p』,「输出目录」】)而
虑「程序」者「输出目录」附『/程序.wasm』而
「:文言:构建恒并行二十四路。汉语:与云工、浏览器模式相同,编译器以并行模式、二十四路调度运行。:」
虑「无」者
「成功运行带码」
于「编译器」
于(「列」【
「应用入口」,
『--package-context』,
「包上下文」,
『--do-not-load-cache』,
『--parallel』,
『-j』,
『24』,
『-o』,
「程序」
】)而
虑「无」者
「成功运行带码」于(「工具路径」于『yy豫言操作系统装载包』)
于(「缀」于「输出目录」于「绑定目录们」)
而
虑「要求文」者
「文件系统」之「读文件」于(「输出目录」附『/接口要求组.json』)而
虑「无」者
「子进程」之「成功运行」
于『rm』
于(「列」【『-f』,(「输出目录」附『/接口要求组.json』),(「输出目录」附『/宿主提供组.json』)】)
而
虑「提供文们」者
「态射」授以「字符串」授以「字符串」
于「应用提供们」
于(会「名」而「应用提供清单」于「应用入口」于「输出目录」于「名」)
而
虑「无」者
「文件系统」之「写文件」
于(「输出目录」附『/清单.json』)
于(「发行清单文」于(「程序摘要」于「程序」)于「要求文」于「提供文们」)
而
虑「无」者
「文件系统」之「写文件」于(「输出目录」附『/启动.mjs』)
于(「生成节点启动文件」于「元」)
而
「打印行」于(『豫言节点发行包已生成:』附「输出目录」附『(程序.wasm、启动.mjs、清单.json)』)
也。