xbintsc 0.5.6 → 0.5.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (490) hide show
  1. package/AGENTS.md +20 -10
  2. package/README.md +8 -7
  3. package/README.zh-CN.md +6 -6
  4. package/dist/src/binder/declarations.js +14 -3
  5. package/dist/src/binder/declarations.js.map +1 -1
  6. package/dist/src/cli/hints.js +7 -1
  7. package/dist/src/cli/hints.js.map +1 -1
  8. package/dist/src/cli/main.js +115 -15
  9. package/dist/src/cli/main.js.map +1 -1
  10. package/dist/src/cli/watch.d.ts +25 -0
  11. package/dist/src/cli/watch.js +93 -0
  12. package/dist/src/cli/watch.js.map +1 -0
  13. package/dist/src/codegen/generator/calls/access.js +11 -2
  14. package/dist/src/codegen/generator/calls/access.js.map +1 -1
  15. package/dist/src/codegen/generator/calls/closures.js +12 -4
  16. package/dist/src/codegen/generator/calls/closures.js.map +1 -1
  17. package/dist/src/codegen/generator/context.d.ts +8 -0
  18. package/dist/src/codegen/generator/context.js +22 -3
  19. package/dist/src/codegen/generator/context.js.map +1 -1
  20. package/dist/src/codegen/generator/expressions/operators.js +17 -15
  21. package/dist/src/codegen/generator/expressions/operators.js.map +1 -1
  22. package/dist/src/codegen/generator/expressions/primary.js +5 -0
  23. package/dist/src/codegen/generator/expressions/primary.js.map +1 -1
  24. package/dist/src/codegen/generator/module.js +0 -7
  25. package/dist/src/codegen/generator/module.js.map +1 -1
  26. package/dist/src/codegen/generator/numeric.d.ts +6 -3
  27. package/dist/src/codegen/generator/numeric.js +54 -11
  28. package/dist/src/codegen/generator/numeric.js.map +1 -1
  29. package/dist/src/codegen/generator/state.js +23 -0
  30. package/dist/src/codegen/generator/state.js.map +1 -1
  31. package/dist/src/codegen/generator/statements/control-flow.js +1 -4
  32. package/dist/src/codegen/generator/statements/control-flow.js.map +1 -1
  33. package/dist/src/codegen/generator/statements/loops.js +48 -16
  34. package/dist/src/codegen/generator/statements/loops.js.map +1 -1
  35. package/dist/src/codegen/generator/tables.js +26 -1
  36. package/dist/src/codegen/generator/tables.js.map +1 -1
  37. package/dist/src/diagnostics/diagnostic.d.ts +3 -1
  38. package/dist/src/diagnostics/diagnostic.js +23 -3
  39. package/dist/src/diagnostics/diagnostic.js.map +1 -1
  40. package/dist/src/driver/app-artifacts.d.ts +42 -0
  41. package/dist/src/driver/app-artifacts.js +53 -0
  42. package/dist/src/driver/app-artifacts.js.map +1 -0
  43. package/dist/src/driver/build-key.d.ts +29 -0
  44. package/dist/src/driver/build-key.js +35 -0
  45. package/dist/src/driver/build-key.js.map +1 -0
  46. package/dist/src/driver/bundler/graph.js +61 -12
  47. package/dist/src/driver/bundler/graph.js.map +1 -1
  48. package/dist/src/driver/bundler/merge.js +7 -1
  49. package/dist/src/driver/bundler/merge.js.map +1 -1
  50. package/dist/src/driver/compiler.d.ts +10 -67
  51. package/dist/src/driver/compiler.js +95 -234
  52. package/dist/src/driver/compiler.js.map +1 -1
  53. package/dist/src/driver/config.d.ts +3 -0
  54. package/dist/src/driver/config.js +8 -0
  55. package/dist/src/driver/config.js.map +1 -1
  56. package/dist/src/driver/frontend.d.ts +37 -0
  57. package/dist/src/driver/frontend.js +92 -0
  58. package/dist/src/driver/frontend.js.map +1 -0
  59. package/dist/src/driver/index.d.ts +1 -1
  60. package/dist/src/driver/index.js.map +1 -1
  61. package/dist/src/driver/options.d.ts +64 -0
  62. package/dist/src/driver/options.js +9 -0
  63. package/dist/src/driver/options.js.map +1 -0
  64. package/dist/src/driver/runtime-objects.d.ts +38 -0
  65. package/dist/src/driver/runtime-objects.js +112 -0
  66. package/dist/src/driver/runtime-objects.js.map +1 -0
  67. package/dist/src/driver/toolchain-provider.d.ts +4 -0
  68. package/dist/src/driver/toolchain-provider.js +4 -0
  69. package/dist/src/driver/toolchain-provider.js.map +1 -1
  70. package/dist/src/driver/toolchain.d.ts +32 -1
  71. package/dist/src/driver/toolchain.js +115 -11
  72. package/dist/src/driver/toolchain.js.map +1 -1
  73. package/dist/src/driver/version.d.ts +12 -0
  74. package/dist/src/driver/version.js +13 -0
  75. package/dist/src/driver/version.js.map +1 -0
  76. package/dist/src/driver/win-icon.d.ts +7 -9
  77. package/dist/src/driver/win-icon.js +37 -35
  78. package/dist/src/driver/win-icon.js.map +1 -1
  79. package/dist/src/extensions/node/fs/index.d.ts +4 -3
  80. package/dist/src/extensions/node/fs/index.js +12 -3
  81. package/dist/src/extensions/node/fs/index.js.map +1 -1
  82. package/dist/src/extensions/node/fs-promises/index.d.ts +5 -5
  83. package/dist/src/extensions/node/fs-promises/index.js +15 -6
  84. package/dist/src/extensions/node/fs-promises/index.js.map +1 -1
  85. package/dist/src/parser/declarations/classes.js +5 -0
  86. package/dist/src/parser/declarations/classes.js.map +1 -1
  87. package/dist/src/parser/declarations/functions.js +13 -1
  88. package/dist/src/parser/declarations/functions.js.map +1 -1
  89. package/dist/src/parser/modules.js +8 -3
  90. package/dist/src/parser/modules.js.map +1 -1
  91. package/dist/src/parser/parser.d.ts +1 -0
  92. package/dist/src/parser/parser.js +23 -0
  93. package/dist/src/parser/parser.js.map +1 -1
  94. package/dist/tests/cli/check.test.d.ts +6 -0
  95. package/dist/tests/cli/check.test.js +68 -0
  96. package/dist/tests/cli/check.test.js.map +1 -0
  97. package/dist/tests/cli/main.test.js +19 -0
  98. package/dist/tests/cli/main.test.js.map +1 -1
  99. package/dist/tests/cli/watch.test.d.ts +6 -0
  100. package/dist/tests/cli/watch.test.js +72 -0
  101. package/dist/tests/cli/watch.test.js.map +1 -0
  102. package/dist/tests/codegen/expressions.test.js +15 -3
  103. package/dist/tests/codegen/expressions.test.js.map +1 -1
  104. package/dist/tests/codegen/llvm.test.js +16 -0
  105. package/dist/tests/codegen/llvm.test.js.map +1 -1
  106. package/dist/tests/diagnostics/diagnostic.test.js +8 -0
  107. package/dist/tests/diagnostics/diagnostic.test.js.map +1 -1
  108. package/dist/tests/docs/structure.test.d.ts +1 -0
  109. package/dist/tests/docs/structure.test.js +92 -0
  110. package/dist/tests/docs/structure.test.js.map +1 -0
  111. package/dist/tests/driver/compiler.test.js +6 -0
  112. package/dist/tests/driver/compiler.test.js.map +1 -1
  113. package/dist/tests/driver/config.test.js +9 -0
  114. package/dist/tests/driver/config.test.js.map +1 -1
  115. package/dist/tests/driver/icon.test.js +19 -32
  116. package/dist/tests/driver/icon.test.js.map +1 -1
  117. package/dist/tests/driver/invalid-input.test.d.ts +10 -0
  118. package/dist/tests/driver/invalid-input.test.js +29 -0
  119. package/dist/tests/driver/invalid-input.test.js.map +1 -0
  120. package/dist/tests/driver/modules.test.js +42 -3
  121. package/dist/tests/driver/modules.test.js.map +1 -1
  122. package/dist/tests/driver/toolchain-provider.test.js +27 -1
  123. package/dist/tests/driver/toolchain-provider.test.js.map +1 -1
  124. package/dist/tests/driver/toolchain.test.js +60 -2
  125. package/dist/tests/driver/toolchain.test.js.map +1 -1
  126. package/dist/tests/e2e/array-buffer.test.d.ts +5 -0
  127. package/dist/tests/e2e/array-buffer.test.js +38 -0
  128. package/dist/tests/e2e/array-buffer.test.js.map +1 -0
  129. package/dist/tests/e2e/array-from-iterables.test.d.ts +7 -0
  130. package/dist/tests/e2e/array-from-iterables.test.js +34 -0
  131. package/dist/tests/e2e/array-from-iterables.test.js.map +1 -0
  132. package/dist/tests/e2e/array-symbol-iterator.test.d.ts +8 -0
  133. package/dist/tests/e2e/array-symbol-iterator.test.js +42 -0
  134. package/dist/tests/e2e/array-symbol-iterator.test.js.map +1 -0
  135. package/dist/tests/e2e/async-await.test.js +1 -1
  136. package/dist/tests/e2e/async-fs.test.d.ts +9 -0
  137. package/dist/tests/e2e/async-fs.test.js +119 -0
  138. package/dist/tests/e2e/async-fs.test.js.map +1 -0
  139. package/dist/tests/e2e/async-generators.test.d.ts +1 -0
  140. package/dist/tests/e2e/async-generators.test.js +154 -0
  141. package/dist/tests/e2e/async-generators.test.js.map +1 -0
  142. package/dist/tests/e2e/await-ordering.test.d.ts +5 -0
  143. package/dist/tests/e2e/await-ordering.test.js +37 -0
  144. package/dist/tests/e2e/await-ordering.test.js.map +1 -0
  145. package/dist/tests/e2e/compile-builtins.test.js +1 -1
  146. package/dist/tests/e2e/compile-modules.test.js +7 -0
  147. package/dist/tests/e2e/compile-modules.test.js.map +1 -1
  148. package/dist/tests/e2e/date-parse.test.d.ts +8 -0
  149. package/dist/tests/e2e/date-parse.test.js +38 -0
  150. package/dist/tests/e2e/date-parse.test.js.map +1 -0
  151. package/dist/tests/e2e/default-anonymous-exports.test.d.ts +7 -0
  152. package/dist/tests/e2e/default-anonymous-exports.test.js +23 -0
  153. package/dist/tests/e2e/default-anonymous-exports.test.js.map +1 -0
  154. package/dist/tests/e2e/fetch.test.js +24 -0
  155. package/dist/tests/e2e/fetch.test.js.map +1 -1
  156. package/dist/tests/e2e/globals-microtask.test.d.ts +9 -0
  157. package/dist/tests/e2e/globals-microtask.test.js +37 -0
  158. package/dist/tests/e2e/globals-microtask.test.js.map +1 -0
  159. package/dist/tests/e2e/gui-inline-svg.test.d.ts +11 -0
  160. package/dist/tests/e2e/gui-inline-svg.test.js +160 -0
  161. package/dist/tests/e2e/gui-inline-svg.test.js.map +1 -0
  162. package/dist/tests/e2e/gui-media.test.js +8 -1
  163. package/dist/tests/e2e/gui-media.test.js.map +1 -1
  164. package/dist/tests/e2e/inspect-builtins.test.d.ts +10 -0
  165. package/dist/tests/e2e/inspect-builtins.test.js +43 -0
  166. package/dist/tests/e2e/inspect-builtins.test.js.map +1 -0
  167. package/dist/tests/e2e/json-builtin-objects.test.d.ts +9 -0
  168. package/dist/tests/e2e/json-builtin-objects.test.js +23 -0
  169. package/dist/tests/e2e/json-builtin-objects.test.js.map +1 -0
  170. package/dist/tests/e2e/json-circular.test.d.ts +6 -0
  171. package/dist/tests/e2e/json-circular.test.js +43 -0
  172. package/dist/tests/e2e/json-circular.test.js.map +1 -0
  173. package/dist/tests/e2e/json-parse-reviver.test.d.ts +6 -0
  174. package/dist/tests/e2e/json-parse-reviver.test.js +29 -0
  175. package/dist/tests/e2e/json-parse-reviver.test.js.map +1 -0
  176. package/dist/tests/e2e/json-stringify-replacer.test.d.ts +6 -0
  177. package/dist/tests/e2e/json-stringify-replacer.test.js +27 -0
  178. package/dist/tests/e2e/json-stringify-replacer.test.js.map +1 -0
  179. package/dist/tests/e2e/json-stringify-space.test.d.ts +6 -0
  180. package/dist/tests/e2e/json-stringify-space.test.js +23 -0
  181. package/dist/tests/e2e/json-stringify-space.test.js.map +1 -0
  182. package/dist/tests/e2e/method-dispatch-errors.test.d.ts +9 -0
  183. package/dist/tests/e2e/method-dispatch-errors.test.js +38 -0
  184. package/dist/tests/e2e/method-dispatch-errors.test.js.map +1 -0
  185. package/dist/tests/e2e/native-extensions.test.js +1 -1
  186. package/dist/tests/e2e/native-extensions.test.js.map +1 -1
  187. package/dist/tests/e2e/promise-with-resolvers.test.d.ts +5 -0
  188. package/dist/tests/e2e/promise-with-resolvers.test.js +20 -0
  189. package/dist/tests/e2e/promise-with-resolvers.test.js.map +1 -0
  190. package/dist/tests/e2e/property-descriptors.test.d.ts +5 -0
  191. package/dist/tests/e2e/property-descriptors.test.js +25 -0
  192. package/dist/tests/e2e/property-descriptors.test.js.map +1 -0
  193. package/dist/tests/e2e/property-ic.test.d.ts +1 -0
  194. package/dist/tests/e2e/property-ic.test.js +55 -0
  195. package/dist/tests/e2e/property-ic.test.js.map +1 -0
  196. package/dist/tests/e2e/runtime-errors.test.d.ts +10 -0
  197. package/dist/tests/e2e/runtime-errors.test.js +52 -0
  198. package/dist/tests/e2e/runtime-errors.test.js.map +1 -0
  199. package/dist/tests/e2e/structured-clone.test.d.ts +6 -0
  200. package/dist/tests/e2e/structured-clone.test.js +49 -0
  201. package/dist/tests/e2e/structured-clone.test.js.map +1 -0
  202. package/dist/tests/e2e/text-codec.test.d.ts +6 -0
  203. package/dist/tests/e2e/text-codec.test.js +24 -0
  204. package/dist/tests/e2e/text-codec.test.js.map +1 -0
  205. package/dist/tests/e2e/typed-array-views.test.d.ts +6 -0
  206. package/dist/tests/e2e/typed-array-views.test.js +39 -0
  207. package/dist/tests/e2e/typed-array-views.test.js.map +1 -0
  208. package/dist/tests/e2e/url-search-params.test.d.ts +5 -0
  209. package/dist/tests/e2e/url-search-params.test.js +30 -0
  210. package/dist/tests/e2e/url-search-params.test.js.map +1 -0
  211. package/dist/tests/e2e/weak-collections.test.d.ts +1 -0
  212. package/dist/tests/e2e/weak-collections.test.js +88 -0
  213. package/dist/tests/e2e/weak-collections.test.js.map +1 -0
  214. package/dist/tests/parser/declarations.test.js +12 -0
  215. package/dist/tests/parser/declarations.test.js.map +1 -1
  216. package/dist/tests/parser/module-syntax.test.js +9 -0
  217. package/dist/tests/parser/module-syntax.test.js.map +1 -1
  218. package/dist/tests/parser/parser.test.js +7 -0
  219. package/dist/tests/parser/parser.test.js.map +1 -1
  220. package/dist/tests/version.test.js +5 -1
  221. package/dist/tests/version.test.js.map +1 -1
  222. package/doc/ai/README.md +4 -3
  223. package/doc/ai/cli.md +41 -0
  224. package/doc/ai/contributing.md +20 -16
  225. package/doc/ai/extensions.md +13 -10
  226. package/doc/ai/language-support.md +19 -14
  227. package/doc/ai/troubleshooting.md +11 -9
  228. package/doc/ai/zh-CN/README.md +3 -2
  229. package/doc/ai/zh-CN/cli.md +35 -0
  230. package/doc/ai/zh-CN/contributing.md +16 -15
  231. package/doc/ai/zh-CN/extensions.md +12 -9
  232. package/doc/ai/zh-CN/language-support.md +19 -15
  233. package/doc/ai/zh-CN/troubleshooting.md +9 -8
  234. package/doc/gui/api.md +8 -0
  235. package/doc/gui/build.md +13 -4
  236. package/doc/gui/known-issues.md +19 -14
  237. package/doc/gui/media.md +32 -3
  238. package/doc/gui/rendering.md +3 -1
  239. package/doc/gui.md +28 -5
  240. package/doc/icon.md +5 -4
  241. package/doc/implemented/async.md +51 -0
  242. package/doc/implemented/binder.md +13 -0
  243. package/doc/implemented/cli.md +47 -0
  244. package/doc/implemented/codegen.md +33 -0
  245. package/doc/implemented/collections.md +26 -0
  246. package/doc/implemented/driver.md +19 -0
  247. package/doc/implemented/extensions.md +19 -0
  248. package/doc/implemented/fetch.md +44 -0
  249. package/doc/implemented/lexer.md +23 -0
  250. package/doc/implemented/modules.md +28 -0
  251. package/doc/implemented/node/assert.md +17 -0
  252. package/doc/implemented/node/buffer.md +29 -0
  253. package/doc/implemented/node/child-process.md +29 -0
  254. package/doc/implemented/node/crypto.md +9 -0
  255. package/doc/implemented/node/dgram.md +15 -0
  256. package/doc/implemented/node/events.md +37 -0
  257. package/doc/implemented/node/fs-promises.md +49 -0
  258. package/doc/implemented/node/fs.md +112 -0
  259. package/doc/implemented/node/http.md +21 -0
  260. package/doc/implemented/node/net.md +17 -0
  261. package/doc/implemented/node/os.md +22 -0
  262. package/doc/implemented/node/path.md +33 -0
  263. package/doc/implemented/node/process.md +23 -0
  264. package/doc/implemented/node/querystring.md +20 -0
  265. package/doc/implemented/node/stream-promises.md +8 -0
  266. package/doc/implemented/node/stream.md +19 -0
  267. package/doc/implemented/node/test.md +10 -0
  268. package/doc/implemented/node/url.md +8 -0
  269. package/doc/implemented/node/util.md +25 -0
  270. package/doc/implemented/node/worker-threads.md +10 -0
  271. package/doc/implemented/node/zlib.md +8 -0
  272. package/doc/implemented/node.md +48 -0
  273. package/doc/implemented/operators.md +38 -0
  274. package/doc/implemented/parser.md +58 -0
  275. package/doc/implemented/pipeline.md +28 -0
  276. package/doc/implemented/runtime-core.md +32 -0
  277. package/doc/implemented/stdlib.md +78 -0
  278. package/doc/implemented/strings.md +27 -0
  279. package/doc/implemented/tests.md +10 -0
  280. package/doc/implemented/typed-arrays.md +26 -0
  281. package/doc/implemented/value-model.md +18 -0
  282. package/doc/implemented.md +54 -355
  283. package/doc/node-implemented.md +3 -585
  284. package/doc/node-unimplemented.md +3 -164
  285. package/doc/requirements.md +23 -8
  286. package/doc/unimplemented/classes.md +22 -0
  287. package/doc/unimplemented/deviations.md +27 -0
  288. package/doc/unimplemented/expressions.md +26 -0
  289. package/doc/unimplemented/functions.md +21 -0
  290. package/doc/unimplemented/modules.md +22 -0
  291. package/doc/unimplemented/node/async.md +20 -0
  292. package/doc/unimplemented/node/bun.md +9 -0
  293. package/doc/unimplemented/node/fs-promises.md +20 -0
  294. package/doc/unimplemented/node/fs.md +30 -0
  295. package/doc/unimplemented/node/globals.md +23 -0
  296. package/doc/unimplemented/node/modules.md +21 -0
  297. package/doc/unimplemented/node.md +21 -0
  298. package/doc/unimplemented/statements.md +18 -0
  299. package/doc/unimplemented/stdlib.md +54 -0
  300. package/doc/unimplemented/toolchain.md +14 -0
  301. package/doc/unimplemented/types.md +12 -0
  302. package/doc/unimplemented.md +18 -275
  303. package/doc/xbintsc.config.schema.json +12 -0
  304. package/doc/zh-CN/gui/api.md +7 -0
  305. package/doc/zh-CN/gui/build.md +11 -3
  306. package/doc/zh-CN/gui/known-issues.md +17 -11
  307. package/doc/zh-CN/gui/media.md +26 -2
  308. package/doc/zh-CN/gui/rendering.md +2 -1
  309. package/doc/zh-CN/gui.md +21 -3
  310. package/doc/zh-CN/icon.md +5 -4
  311. package/doc/zh-CN/implemented/async.md +49 -0
  312. package/doc/zh-CN/implemented/binder.md +13 -0
  313. package/doc/zh-CN/implemented/cli.md +46 -0
  314. package/doc/zh-CN/implemented/codegen.md +33 -0
  315. package/doc/zh-CN/implemented/collections.md +26 -0
  316. package/doc/zh-CN/implemented/driver.md +19 -0
  317. package/doc/zh-CN/implemented/extensions.md +19 -0
  318. package/doc/zh-CN/implemented/fetch.md +31 -0
  319. package/doc/zh-CN/implemented/lexer.md +23 -0
  320. package/doc/zh-CN/implemented/modules.md +28 -0
  321. package/doc/zh-CN/implemented/node/assert.md +17 -0
  322. package/doc/zh-CN/implemented/node/buffer.md +25 -0
  323. package/doc/zh-CN/implemented/node/child-process.md +27 -0
  324. package/doc/zh-CN/implemented/node/crypto.md +9 -0
  325. package/doc/zh-CN/implemented/node/dgram.md +15 -0
  326. package/doc/zh-CN/implemented/node/events.md +36 -0
  327. package/doc/zh-CN/implemented/node/fs-promises.md +30 -0
  328. package/doc/zh-CN/implemented/node/fs.md +105 -0
  329. package/doc/zh-CN/implemented/node/http.md +17 -0
  330. package/doc/zh-CN/implemented/node/net.md +17 -0
  331. package/doc/zh-CN/implemented/node/os.md +21 -0
  332. package/doc/zh-CN/implemented/node/path.md +26 -0
  333. package/doc/zh-CN/implemented/node/process.md +23 -0
  334. package/doc/zh-CN/implemented/node/querystring.md +20 -0
  335. package/doc/zh-CN/implemented/node/stream-promises.md +8 -0
  336. package/doc/zh-CN/implemented/node/stream.md +15 -0
  337. package/doc/zh-CN/implemented/node/test.md +10 -0
  338. package/doc/zh-CN/implemented/node/url.md +8 -0
  339. package/doc/zh-CN/implemented/node/util.md +25 -0
  340. package/doc/zh-CN/implemented/node/worker-threads.md +9 -0
  341. package/doc/zh-CN/implemented/node/zlib.md +8 -0
  342. package/doc/zh-CN/implemented/node.md +45 -0
  343. package/doc/zh-CN/implemented/operators.md +38 -0
  344. package/doc/zh-CN/implemented/parser.md +58 -0
  345. package/doc/zh-CN/implemented/pipeline.md +25 -0
  346. package/doc/zh-CN/implemented/runtime-core.md +31 -0
  347. package/doc/zh-CN/implemented/stdlib.md +76 -0
  348. package/doc/zh-CN/implemented/strings.md +27 -0
  349. package/doc/zh-CN/implemented/tests.md +10 -0
  350. package/doc/zh-CN/implemented/typed-arrays.md +26 -0
  351. package/doc/zh-CN/implemented/value-model.md +18 -0
  352. package/doc/zh-CN/implemented.md +50 -350
  353. package/doc/zh-CN/node-implemented.md +4 -531
  354. package/doc/zh-CN/node-unimplemented.md +4 -139
  355. package/doc/zh-CN/plan-require-node-modules.md +4 -4
  356. package/doc/zh-CN/requirements.md +20 -6
  357. package/doc/zh-CN/unimplemented/classes.md +22 -0
  358. package/doc/zh-CN/unimplemented/deviations.md +24 -0
  359. package/doc/zh-CN/unimplemented/expressions.md +24 -0
  360. package/doc/zh-CN/unimplemented/functions.md +21 -0
  361. package/doc/zh-CN/unimplemented/modules.md +19 -0
  362. package/doc/zh-CN/unimplemented/node/async.md +20 -0
  363. package/doc/zh-CN/unimplemented/node/bun.md +8 -0
  364. package/doc/zh-CN/unimplemented/node/fs-promises.md +12 -0
  365. package/doc/zh-CN/unimplemented/node/fs.md +24 -0
  366. package/doc/zh-CN/unimplemented/node/globals.md +14 -0
  367. package/doc/zh-CN/unimplemented/node/modules.md +15 -0
  368. package/doc/zh-CN/unimplemented/node.md +18 -0
  369. package/doc/zh-CN/unimplemented/statements.md +15 -0
  370. package/doc/zh-CN/unimplemented/stdlib.md +54 -0
  371. package/doc/zh-CN/unimplemented/toolchain.md +14 -0
  372. package/doc/zh-CN/unimplemented/types.md +11 -0
  373. package/doc/zh-CN/unimplemented.md +14 -237
  374. package/llms.txt +32 -4
  375. package/package.json +1 -1
  376. package/runtime/ext_gui/inline_svg.cpp +219 -0
  377. package/runtime/ext_gui/inline_svg.h +41 -0
  378. package/runtime/ext_gui/layout.cpp +18 -0
  379. package/runtime/ext_gui/layout.h +7 -0
  380. package/runtime/ext_gui/layout_flow.cpp +4 -3
  381. package/runtime/ext_gui/paint.cpp +14 -0
  382. package/runtime/ext_gui/paint.h +5 -1
  383. package/runtime/ext_gui/renderer_image.cpp +53 -25
  384. package/runtime/ext_gui/renderer_shaders.h +2 -2
  385. package/runtime/ext_gui/stb_image.h +1 -17
  386. package/runtime/ext_gui/style_ua.cpp +3 -0
  387. package/runtime/ext_gui/svg.cpp +122 -39
  388. package/runtime/ext_gui/svg.h +14 -3
  389. package/runtime/ext_gui/window.cpp +28 -0
  390. package/runtime/ext_node/child_process/child_process.c +173 -73
  391. package/runtime/ext_node/fs/async_api.c +314 -0
  392. package/runtime/ext_node/fs/async_complete.c +99 -0
  393. package/runtime/ext_node/fs/async_fh.c +206 -0
  394. package/runtime/ext_node/fs/async_job.c +81 -0
  395. package/runtime/ext_node/fs/async_job.h +132 -0
  396. package/runtime/ext_node/fs/async_worker.c +534 -0
  397. package/runtime/ext_node/fs/async_worker_dir.c +439 -0
  398. package/runtime/ext_node/fs/async_worker_dir.h +33 -0
  399. package/runtime/ext_node/fs/async_worker_fd.c +74 -0
  400. package/runtime/ext_node/fs/dir.c +60 -15
  401. package/runtime/ext_node/fs/fs_common.h +9 -0
  402. package/runtime/ext_node/fs/fs_ops.c +18 -29
  403. package/runtime/ext_node/fs/parts/builtins.inc +34 -0
  404. package/runtime/ext_node/fs/parts/platform.inc +66 -0
  405. package/runtime/ext_node/fs/promises.c +44 -234
  406. package/runtime/rt.h +15 -0
  407. package/runtime/rt_internal.h +108 -0
  408. package/runtime/xt_alloc.c +43 -7
  409. package/runtime/xt_array_buffer.c +284 -0
  410. package/runtime/xt_async.c +46 -21
  411. package/runtime/xt_async_io.c +333 -0
  412. package/runtime/xt_async_io.h +47 -0
  413. package/runtime/xt_bigint/helpers.inc +3 -3
  414. package/runtime/xt_builtins.c +21 -17
  415. package/runtime/xt_constructors.c +12 -2
  416. package/runtime/xt_containers/access.inc +148 -3
  417. package/runtime/xt_containers/objects.inc +26 -2
  418. package/runtime/xt_containers/shapes.inc +71 -0
  419. package/runtime/xt_containers.c +1 -0
  420. package/runtime/xt_coroutine.c +17 -0
  421. package/runtime/xt_fetch/async.inc +295 -0
  422. package/runtime/xt_fetch/request.inc +6 -183
  423. package/runtime/xt_fetch/socket.inc +5 -4
  424. package/runtime/xt_fetch.c +6 -4
  425. package/runtime/xt_generator.c +299 -10
  426. package/runtime/xt_io/inspect.inc +112 -0
  427. package/runtime/xt_loop.c +79 -7
  428. package/runtime/xt_performance.c +37 -0
  429. package/runtime/xt_promise.c +63 -1
  430. package/runtime/xt_stdlib/arrays.inc +1 -1
  431. package/runtime/xt_stdlib/dispatch.inc +46 -11
  432. package/runtime/xt_stdlib/strings.inc +1 -1
  433. package/runtime/xt_stdlib2/array-statics.inc +25 -0
  434. package/runtime/xt_stdlib2/arrays.inc +5 -3
  435. package/runtime/xt_stdlib2/container.inc +5 -0
  436. package/runtime/xt_stdlib2/date.inc +111 -3
  437. package/runtime/xt_stdlib2/error.inc +24 -0
  438. package/runtime/xt_stdlib2/json.inc +310 -19
  439. package/runtime/xt_stdlib2/number-string-statics.inc +1 -1
  440. package/runtime/xt_stdlib2/objects.inc +122 -0
  441. package/runtime/xt_stdlib2/set.inc +1 -1
  442. package/runtime/xt_structured_clone.c +159 -0
  443. package/runtime/xt_symbol.c +2 -2
  444. package/runtime/xt_text_codec.c +69 -0
  445. package/runtime/xt_typed_array/construction.inc +35 -5
  446. package/runtime/xt_typed_array/elements.inc +159 -0
  447. package/runtime/xt_typed_array/methods.inc +21 -5
  448. package/runtime/xt_typed_array.c +7 -10
  449. package/runtime/xt_url.c +375 -0
  450. package/runtime/xt_values/arithmetic.inc +2 -2
  451. package/runtime/xt_values/conversions.inc +1 -1
  452. package/runtime/xt_weak.c +281 -0
  453. package/scripts/build-gui.ts +133 -60
  454. package/scripts/check-version.ts +3 -3
  455. package/src/binder/declarations.ts +14 -3
  456. package/src/cli/hints.ts +8 -1
  457. package/src/cli/main.ts +119 -18
  458. package/src/cli/watch.ts +101 -0
  459. package/src/codegen/generator/calls/access.ts +10 -2
  460. package/src/codegen/generator/calls/closures.ts +12 -4
  461. package/src/codegen/generator/context.ts +23 -3
  462. package/src/codegen/generator/expressions/operators.ts +27 -13
  463. package/src/codegen/generator/expressions/primary.ts +4 -0
  464. package/src/codegen/generator/module.ts +0 -7
  465. package/src/codegen/generator/numeric.ts +85 -11
  466. package/src/codegen/generator/state.ts +23 -0
  467. package/src/codegen/generator/statements/control-flow.ts +1 -4
  468. package/src/codegen/generator/statements/loops.ts +50 -16
  469. package/src/codegen/generator/tables.ts +26 -1
  470. package/src/diagnostics/diagnostic.ts +23 -3
  471. package/src/driver/app-artifacts.ts +77 -0
  472. package/src/driver/build-key.ts +55 -0
  473. package/src/driver/bundler/graph.ts +63 -13
  474. package/src/driver/bundler/merge.ts +4 -1
  475. package/src/driver/compiler.ts +94 -328
  476. package/src/driver/config.ts +11 -0
  477. package/src/driver/frontend.ts +120 -0
  478. package/src/driver/index.ts +0 -1
  479. package/src/driver/options.ts +70 -0
  480. package/src/driver/runtime-objects.ts +134 -0
  481. package/src/driver/toolchain-provider.ts +4 -0
  482. package/src/driver/toolchain.ts +154 -10
  483. package/src/driver/version.ts +12 -0
  484. package/src/driver/win-icon.ts +36 -36
  485. package/src/extensions/node/fs/index.ts +12 -3
  486. package/src/extensions/node/fs-promises/index.ts +15 -6
  487. package/src/parser/declarations/classes.ts +4 -0
  488. package/src/parser/declarations/functions.ts +12 -1
  489. package/src/parser/modules.ts +8 -4
  490. package/src/parser/parser.ts +28 -0
@@ -1,369 +1,69 @@
1
1
  # xbintsc 已实现语法与功能
2
2
 
3
- > 语言 / Language:[English](../implemented.md) | **简体中文**
4
-
5
3
  本文档基于对源码(`src/`、`runtime/`)与测试(`tests/`)的逐文件核对整理,仅列出**当前真正可用**的语法与功能。标注了对应实现位置,便于溯源。
6
4
 
7
- > 说明:本编译器「解析」的范围远大于「生成代码」的范围。许多 TypeScript 语法可以被解析、甚至被绑定,但代码生成阶段会报 `UnsupportedFeature`。这些内容**不**列在这里,见 [未实现文档](unimplemented.md)。
8
-
9
- ---
10
-
11
- ## 1. 编译流水线(整体已实现)
12
-
13
- ```
14
- source.ts
15
- │ 词法分析 src/lexer/scanner.ts + token.ts
16
- ▼
17
- tokens
18
- │ 语法分析 src/parser/parser.ts → AST src/ast/
19
- ▼
20
- AST
21
- │ 名字绑定 src/binder/binder.ts → 作用域/符号/闭包捕获
22
- ▼
23
- bound AST
24
- │ 代码生成 src/codegen/llvm.ts + values.ts → LLVM IR 文本
25
- ▼
26
- module.ll ── clang ──► module.o ──链接──► 可执行文件
27
- ▲
28
- runtime/*.c(C 运行时,按功能拆分)
29
- ```
30
-
31
- - 前端与后端、运行时、扩展完全解耦。
32
- - 流程由 `src/driver/compiler.ts` 串起:`读取 → 解析 → 绑定 → IR → 目标文件 → 链接`。
33
- - **自举**:`xbintsc` 可编译自身前端。用编译器构建 `src/cli/main.ts` 可得到可用的 `xbintsc` 二进制,且该二进制再自编译时产出的 LLVM IR 逐字节一致(源码 ≡ 第 1 代 ≡ 第 2 代 ≡ 第 3 代)。运行时仍为手写 C。
34
-
35
- ---
36
-
37
- ## 2. 词法分析(Lexer,已实现)
38
-
39
- 实现位置:`src/lexer/scanner.ts`、`src/lexer/token.ts`
40
-
41
- - 完整 Token 分类:标识符、关键字、私有标识符、数字、字符串、模板、正则(扫描)、所有标点与运算符。
42
- - 完整关键字表:`abstract any as asserts async await bigint boolean break case catch class const constructor continue debugger declare default delete do else enum export extends false finally for from function get if implements import in infer instanceof interface is keyof let module namespace never new null number object package private protected public readonly return satisfies set static string super switch symbol this throw true try type typeof undefined unique unknown var void while with yield`
43
- - 数字字面量:
44
- - 十进制、`0x` 十六进制、`0o` 八进制、`0b` 二进制
45
- - 下划线分隔 `1_000_000`
46
- - 小数、指数 `1.5e3`
47
- - BigInt 字面量(`10n`、`0xFFn`)求值为任意精度整数(算术、位运算、移位、比较、`toString(radix)`、`BigInt()` / `BigInt.asIntN` / `BigInt.asUintN`)
48
- - BigInt 字面量的值在词法 / 语法阶段即精确解析为 `bigint`(不经过 `Number`),超过 2^53 的字面量在 token / AST 中也保持完整精度
49
- - 字符串字面量:
50
- - 单引号 / 双引号
51
- - 转义:`\n \t \r \b \f \0 \\ \' \"`、`\xHH`、`\uHHHH`、`\u{...}`
52
- - 模板字面量(词法层):无替换模板、模板头 `TemplateHead`、模板中 `TemplateMiddle`、模板尾 `TemplateTail`,支持 `${}` 与转义。
53
- - 正则字面量扫描(`/pattern/flags`),并区分除法 `/`。
54
- - 私有标识符 `#name`。
55
- - 注释:单行 `//` 与块注释 `/* */`(含未闭合诊断)。
56
- - 换行与空白跟踪(用于 ASI),BOM / CRLF 规范化(`SourceFile`)。
57
- - 词法诊断:未终止字符串 / 模板 / 注释、非法字符、非法数字、非法转义。
58
-
59
- ---
60
-
61
- ## 3. 语法分析(Parser,已实现)
62
-
63
- 实现位置:`src/parser/parser.ts`、`src/ast/nodes.ts`
64
-
65
- ### 3.1 语句
66
-
67
- - 变量声明:`var` / `let` / `const`,支持多声明符 `const a = 1, b = 2;`
68
- - 函数声明、函数表达式和方法,含 `async` 修饰与生成器(`function*`、`yield`、`yield*`、`.next`/`.throw`/`.return`)
69
- - `class` 声明 / 类表达式(构造函数、字段、方法、`static`、`extends`)
70
- - `if` / `else`
71
- - `while`、`do...while`
72
- - `for`(初始化、条件、增量均可省略)
73
- - `for...of`、`for...in`(见 3.5 语义限制)
74
- - `return`、`break`、`continue`、`throw`(含带标签的 `break label` / `continue label`)
75
- - `switch` / `case` / `default`(含穿透 fall-through)
76
- - `try` / `catch` / `finally`(基于运行时 setjmp 帧的可捕获异常)
77
- - `export var` / `export let` / `export const`(修饰符解析后擦除)
78
- - 块语句 `{}`、空语句 `;`、`debugger;`
79
- - 表达式语句
80
-
81
- ### 3.2 表达式
82
-
83
- - 全部常见运算符及优先级 / 结合性(见第 5 节)
84
- - 赋值表达式与全部复合赋值(见第 5 节)
85
- - 条件(三元)表达式 `a ? b : c`
86
- - 箭头函数 `() => expr` / `() => { ... }`(含类型参数、返回类型注解)
87
- - 函数表达式 `function () {}` 与命名函数表达式 `function g() {}`
88
- - 调用表达式 `f(...)`、成员访问 `a.b`、元素访问 `a[i]`
89
- - 数组字面量 `[1, 2]`、稀疏数组 elision、展开 `[...a]`(也支持字符串、`Map`、`Set`)
90
- - 对象字面量 `{ a: 1 }`、简写属性 `{ a }`、方法简写 `{ m() {} }`、getter/setter 简写 `{ get x() {} }` / `{ set x(v) {} }`、计算属性名 `{ [expr]: 1 }`、对象展开 `{ ...obj }`
91
- - 模板字面量 `${}` 替换、标记模板(含 raw 字符串与 `String.raw`)
92
- - 括号表达式、`as` / `satisfies` / 非空断言 `!`(类型擦除)
93
- - 一元:`+ - ! ~ typeof void`、前缀 / 后缀 `++ --`
94
- - 可选链 `?.` / `?.[]` / `?.()`(含空值短路语义)
95
- - `delete` 表达式(删除对象属性)
96
-
97
- ### 3.3 TypeScript 类型语法(仅解析、结构保留后擦除)
98
-
99
- - 类型注解、返回类型注解、类型参数 `<T>` 与约束 `<T extends U>`、类型参数默认值
100
- - 类型引用、限定名 `A.B`
101
- - 联合 `|`、交叉 `&`、数组 `T[]`、元组 `[T, U]`、可选元组成员 `T?`、剩余元组成员 `...T`
102
- - 函数类型 `(a: T) => U`、构造签名 `new () => T`
103
- - 对象类型字面量、属性签名、方法签名、索引签名 `[k: string]: T`
104
- - 条件类型 `T extends U ? X : Y`、映射类型 `{ [K in T]: U }`、`infer`
105
- - 类型运算符 `keyof`、`unique`、`readonly`
106
- - `typeof`(类型查询)、索引访问类型 `T[K]`
107
- - 字面量类型、`this` 类型
108
- - 类型谓词 `x is T` / `asserts x is T`
109
- - 接口、类型别名、枚举、命名空间 / 模块声明
110
- - `import` / `export` 的各种形式(结构解析)
111
-
112
- ### 3.4 模块语法(结构解析 + 驱动打包)
113
-
114
- - `import default, { named } from "..."`、`import * as ns from "..."`(相对模块的命名空间导入会降级为合成对象字面量;扩展模块如 `path` 亦已支持)、`import type`
115
- - `export default`、`export { a as b }`、`export *`、`export =`
116
- - import attributes(`with` / `assert`)
117
- - `import` / `export` 的**运行时语义**由 `src/driver/modules.ts` 在驱动层完成:递归解析相对依赖**以及裸名称的 `node_modules` 包**(遵循 `exports` / `module` / `main` 与包子路径),按模块前缀重命名顶层符号、改写引用,合并为单文件后重新绑定。包可以是 ESM 或 CommonJS:`node_modules` 内的 CJS 文件会获得合成的 `module` / `exports`,`require` 调用被降级为依赖的导出对象,静态识别出的导出对 ESM 导入方可见;`node_modules` 之外的 `require()` 仍报错并提示改用 `import`。循环依赖报错。
118
-
119
- ### 3.5 ASI
120
-
121
- - 自动分号插入(Automatic Semicolon Insertion),依据 `precededByLineBreak` / `}` / EOF。
122
-
123
- ---
124
-
125
- ## 4. 名字绑定与作用域(Binder,已实现)
126
-
127
- 实现位置:`src/binder/binder.ts`
128
-
129
- - 作用域种类:模块、函数、块、`for`、`catch`
130
- - 符号种类:`var` / `let` / `const` / `function` / `parameter` / `class` / `interface` / `type` / `enum` / `import` / `namespace`
131
- - `var` 与函数声明提升到函数作用域;`let` / `const` 保持块作用域
132
- - 标识符 → 声明 的解析;未解析标识符收集(`CannotFindName`)
133
- - 闭包捕获分析:被内层函数引用的外部变量标记 `captured` / `boxed`,并穿过中间闭包传递捕获索引
134
- - 参数登记为局部符号;命名函数表达式自名登记为 `const`
135
- - 类型专用声明(interface / type alias)不参与值捕获
136
-
137
- ---
138
-
139
- ## 5. 运算符与赋值(代码生成已实现)
140
-
141
- 实现位置:`src/codegen/llvm.ts`(`BINARY_RUNTIME`、`emitPrefix`、`emitPostfix`、`emitAssignment`)
142
-
143
- ### 5.1 算术
144
-
145
- `+ - * / % **`(`**` 右结合)
146
-
147
- ### 5.2 比较与相等
148
-
149
- `< <= > >=`、`== !=`(宽松相等)、`=== !==`(严格相等)
150
-
151
- ### 5.3 逻辑与短路
152
-
153
- `&& || ??`(含短路求值)、`!`
5
+ 文档按编译阶段与功能域拆分为多个页面,改动只落在对应的小文件里,避免所有分支都修改同一份大文档。
154
6
 
155
- ### 5.4 位运算
7
+ > 说明:本编译器「解析」的范围远大于「生成代码」的范围。许多 TypeScript 语法可以被解析、甚至被绑定,但代码生成阶段会报 `UnsupportedFeature`。这些内容**不**列在这里,见[未实现文档](../unimplemented.md)。
156
8
 
157
- `& | ^ ~ << >> >>>`
158
-
159
- ### 5.5 一元
160
-
161
- `+ - ! ~`、前缀 / 后缀 `++ --`
162
-
163
- ### 5.6 赋值
164
-
165
- `= += -= *= /= %= **= <<= >>= >>>= &= |= ^= &&= ||= ??=`
166
-
167
- ### 5.7 其他表达式运算符
168
-
169
- - 逗号表达式 `,`
170
- - `in` 运算符(`key in obj`,映射 `xt_in`)
171
- - `delete obj.key` / `delete obj[key]`(映射 `xt_delete`)
172
- - `instanceof`(映射 `xt_instance_of`,沿原型链判断)
173
-
174
- > `typeof` / `void` 作为一元运算符已实现。
175
-
176
- ---
177
-
178
- ## 6. 值模型与调用约定(已实现)
179
-
180
- 实现位置:`src/codegen/values.ts`、`runtime/rt.h`
181
-
182
- - 所有 JS 值统一为 64 位 `xt_value`(NaN-boxing)。
183
- - 双精度浮点不装箱;其它类型为高 16 位 tag + 48 位 payload 的带标签指针。
184
- - Tag:`undefined` / `null` / `false` / `true` / `string` / `object` / `array` / `function`。
185
- - 统一函数 ABI:
186
-
187
- ```c
188
- xt_value fn(xt_value thisValue, xt_value env, int32_t argc, xt_value *argv);
189
- ```
190
-
191
- - `thisValue` 作为首个 ABI 参数线程化(异常安全、支持嵌套);箭头函数从环境额外槽位词法继承 `this`。
192
- - 闭包通过 `env` 线程化捕获变量(引用传递,box 包装),直接调用与闭包调用共用同一代码路径。
193
- - `xt_object` 带原型字段,属性查找沿原型链;`xt_function` 带 `prototype` 与属性包(静态成员)。`xt_array` 也带 `[[Prototype]]`(Array.prototype)。`Object.prototype` 是普通对象的原型根,提供 `hasOwnProperty` / `toString` / `valueOf` / `isPrototypeOf` / `propertyIsEnumerable` / `__proto__`;`Object.getPrototypeOf({}) === Object.prototype`。
194
-
195
- ---
196
-
197
- ## 7. LLVM IR 代码生成(Codegen,已实现)
198
-
199
- 实现位置:`src/codegen/llvm.ts`
200
-
201
- - 生成 LLVM IR 文本(`.ll`),无需自建寄存器分配(依赖 `alloca` + mem2reg)。
202
- - 语句 / 块边界值放在 `alloca`;条件与短路运算物化为临时槽,不使用 `phi`。
203
- - 控制流:`if` / `while` / `do` / `for` / `for...of` / `for...in`,`switch`,`try/catch/finally`,`break` / `continue` / `return`。
204
- - `for...of` 与展开通过 `xt_iter_open` → `xt_iter_has` / `xt_iter_value` 迭代数组、字符串、类型化数组、`Map`、`Set`、生成器以及任何暴露 `[Symbol.iterator]()` 的对象(`Map` 产出 `[key, value]` 对);非可迭代值抛出 `TypeError`。
205
- - `switch` 以严格相等逐 `case` 测试,命中后执行并在 `break` 前穿透。
206
- - `try/catch/finally` 通过运行时 `_setjmp` 帧实现:`xt_try_enter` 入栈、`_setjmp` 捕获、`xt_throw` 长跳转;IR 会把调用方的帧地址(`@llvm.frameaddress(0)`)作为 `_setjmp` 的第二个参数传入,与 clang 编译 MSVC 时的降级方式一致:Windows UCRT 的 `_setjmp` 会把这个帧存入 `_JUMP_BUFFER.Frame`,`longjmp` 再交给 `RtlUnwind` 执行栈展开;若不传该参数,`longjmp` 会展开到错误目标(`STATUS_BAD_FUNCTION_TABLE`)。使用 `_setjmp` 而非导出的 `setjmp` 符号,因为后者的 Windows ABI 是不兼容的双参数例程。含 `try` 的函数会强制局部变量驻留内存(内联汇编逃生点)以保证长跳转后值不丢失。
207
- - `for...in` 复用 `xt_object_keys` 枚举键(数组 / 字符串得到字符串下标)。
208
- - 表达式:
209
- - 标识符、数字、BigInt(任意精度)、字符串、模板、布尔、`null`、`undefined`、`arguments`
210
- - 算术 / 比较 / 逻辑 / 短路 / 条件 / 位运算 / 一元(含 `typeof` `void`)/ 前后缀增减 / 复合赋值 / 逻辑赋值
211
- - 数组字面量(含展开 `[...]`)、对象字面量(含简写 / 方法 / 对象展开 `{...obj}`)
212
- - 类型化数组(`Uint8Array`、`Int8Array`、`Uint8ClampedArray`、`Uint16Array`、`Int16Array`、`Uint32Array`、`Int32Array`、`Float32Array`、`Float64Array`):构造(`new X(n)` / `new X(可迭代)` / `X.from` / `X.of`)、`length` / `byteLength` / `byteOffset` / `BYTES_PER_ELEMENT`、按元素类型强制的读写(`ToIntN` / `ToUintN`、`Uint8ClampedArray` 舍入、`Float32` 单精度舍入)以及原型方法 `fill` / `set` / `slice` / `subarray` / `join` / `toString` / `indexOf` / `lastIndexOf` / `includes` / `forEach` / `map` / `filter` / `every` / `some` / `find` / `findIndex` / `reduce` / `reverse` / `sort` / `copyWithin` / `at` / `keys` / `values` / `entries`。有意保留的差异见未实现文档(`subarray` 返回副本、迭代器方法返回数组、无 `ArrayBuffer`/`DataView`)。
213
- - 属性访问(含 `length` 特判、`Math` 常量)、元素访问、调用
214
- - 一等公民内建构造器(`const A = Array`、`const M = Map`、`const E = TypeError`、类型化数组):裸引用下降为 `xt_builtin_constructor`,得到带 `name` / `length`、`prototype` 与静态成员(`A.isArray`、`A.from`、`M.prototype` 等)的缓存函数。通过别名调用或 `new` 会分派到同一运行时构造器,`x instanceof A` 沿共享原型链判断。
215
- - 可选链 `?.` / `?.[]` / `?.()`:以空值判断短路到 `undefined`
216
- - `delete`、`in`、`instanceof`
217
- - `this`(保存到函数 `%saved.this`;箭头函数从环境槽读)、`super`(`super.x` / `super(...)`)、`new`、`await`
218
- - 闭包(箭头函数 / 函数表达式)与捕获环境构建
219
- - 类:构造器闭包 + 原型对象,存入 LLVM 全局(`@class.<id>`);实例字段在构造器体前初始化;`static` 成员存于构造器属性包;`extends` 设置原型链;`super(...)` 通过原型上的隐藏 `__ctor` 调用。
220
- - `async`:闭包用 `xt_function_set_async` 标记;调用时在栈式协程(`xt_coroutine.c`、`xt_async.c`)上运行函数体并立即返回 promise。函数体同步执行到第一个等待**未 settle** promise 的 `await` 后挂起;promise settle 时排入微任务恢复协程。逃出函数体的异常会让该 promise reject,而不是同步抛出。`await` 非 promise 或已 settle 的值仍走同步快路径,rejection 触发异常。
221
- - 标准库调用:`console.*`、`Math.*`、`Object.*`、数组 / 字符串方法统一走 `xt_call_method` / `xt_math_call` / `xt_object_*`;`JSON`/`Date`/`Map`/`Set`/`RegExp`/`Promise` 静态与构造走对应 `xt_*`;全局函数(`parseInt` 等)走 `xt_parse_int` 等。
222
- - 全局字符串池(`@.str.N` 私有常量,UTF-8 转义)。
223
- - 内置调用:`console.log` / `info` / `warn` / `error`、`Math.*`、`Object.*`、数组 / 字符串方法、全局函数、扩展 builtins(统一 `(argc, argv)` ABI)。
224
- - `main` 入口(返回 0,调用模块函数,并在返回前 `xt_drain_microtasks`)。
225
- - 未支持节点统一报 `UnsupportedFeature`,不会崩溃。
226
-
227
- ---
228
-
229
- ## 8. C 运行时(Runtime,已实现)
230
-
231
- 实现位置:`runtime/xt_alloc.c`、`runtime/xt_values.c`、`runtime/xt_containers.c`、
232
- `runtime/xt_stdlib.c`、`runtime/xt_stdlib2.c`、`runtime/xt_promise.c`、`runtime/xt_async.c`、
233
- `runtime/xt_coroutine.c`、`runtime/xt_builtins.c`、
234
- `runtime/xt_io.c`,共享私有头 `runtime/rt_internal.h`;公开 ABI 见 `runtime/rt.h`。
235
-
236
- - 分配器:`xt_alloc` 背后的非移动标记-清扫回收器(显式根、子系统根提供者与保守 C 栈扫描)。
237
- - 值构造:`xt_undefined/xt_null/xt_bool/xt_number/xt_string_new/xt_string_from_cstr`。
238
- - 字符串:UTF-8 存储,对外呈现 JavaScript 的 UTF-16 视图(`length`、索引、`slice`、`indexOf`、`split`、`padStart`、`codePointAt` 按码元计数;`for...of` 与 `Array.from` 按码点计数;孤立代理项以 WTF-8 保存,并在拼接时重新组合)、惰性 cons 节点拼接(首次观察时才扁平化,因此循环追加保持线性复杂度)、相等比较、格式化数字转字符串。`xt_string_length` 供 I/O 使用,返回字节数;`xt_string_utf16_length` 返回 JavaScript 长度。
239
- - 类型转换:`xt_truthy`、`xt_to_number`、`xt_to_string`、`xt_typeof`。
240
- - 算术:`add/sub/mul/div/mod/pow/neg/pos`。
241
- - 位运算:`and/or/xor/not/shl/shr/ushr`(含 `ToInt32` 语义)。
242
- - 比较:`lt/le/gt/ge`、宽松 / 严格相等、`not`、`is_nullish`。
243
- - 对象:线性属性列表,`object_new/get/set/has/keys/values/entries/assign/spread`。
244
- - 数组:`array_new/get/set/push/length/spread`;对 `arr.length` 赋值会截断 / 扩展(与 JS 一致);`iter_length` / `iter_value` 为数组、字符串(按码点)、`Map`、`Set` 提供统一迭代视图。
245
- - 类型化数组(`xt_typed_array.c`):以属性包对象表示,每种元素类型一个原型;读取返回已存值,写入按元素类型强制转换;提供 `from` / `of` 静态方法与完整原型方法集;`subarray` 返回副本。
246
- - Symbol(`xt_symbol.c`):`Symbol(description)` 原始值(`XT_OBJECT_KIND_SYMBOL`)、13 个著名符号(`Symbol.iterator`、`Symbol.asyncIterator`、`Symbol.match` 等)、`Symbol.for` / `Symbol.keyFor` 全局注册表、`symbol.description` / `toString()` / `valueOf()`;symbol 可作为属性键(`Object.getOwnPropertySymbols`,symbol 键的 `get`/`set`/`in`/`delete`),会被 `Object.keys` / `values` / `entries` / `for...in` / `JSON.stringify` 跳过,打印为 `Symbol(desc)`。
247
- - 通用成员访问:`xt_get` / `xt_set`(对数组 / 对象 / 字符串分发)。
248
- - 标准库:`xt_call_method`(统一分发数组 / 字符串方法与对象上的函数属性)、`xt_math_call`(`Math.*` 与常量)、全局函数 `xt_parse_int/parse_float/is_nan/is_finite/number_ctor/string_ctor/boolean_ctor/fetch`。
249
- - 运算符辅助:`xt_in`(`in`)、`xt_delete`(`delete`)、`xt_rest_args`(剩余参数 / `arguments`)。
250
- - Box:`box_new/get/set`(用于闭包捕获变量)。
251
- - 函数与闭包:`arg`、`closure_new/call/env/arity`。
252
- - 异常:`xt_try_enter` / `xt_try_exception` / `xt_try_leave` 维护 `_setjmp` 帧栈;`xt_throw` 在存在帧时长跳到最近 `try`,否则打印 `Uncaught ...` 后退出。codegen 还会维护一条影子调用栈(函数名、源文件、行号):`Error.stack` 用它生成堆栈,原生崩溃时致命信号处理器也会打印同一组帧。`--debug` 还会生成 `!DICompileUnit` / `!DISubprogram` / `!DILocation` 元数据,并用 `-g -fno-omit-frame-pointer` 编译,因此 gdb/lldb/WinDbg 可以把指令映射回源码行。
253
- - 输出:`xt_print/xt_println/xt_console_log/info/warn/error`(Node 风格 inspect:数组 `[ a, b ]`、对象 `{ k: v }`;`info`/`log` 到 stdout,`warn`/`error` 到 stderr),以及 `dir/trace/assert/count/countReset/group/groupEnd/table/time/timeEnd/timeLog`。
254
- - 对象 / 函数:`xt_object` 带原型链,`xt_function` 带属性包(静态成员与 `prototype`);`xt_new`(实例化)、`xt_instance_of`(原型链)、`xt_object_freeze/is_frozen/from_entries`;`xt_constructors.c` 保存一等公民构造器缓存、构造器原型与静态值分派。
255
- - 标准库扩展(`xt_stdlib2.c`):数组 / 字符串 / 数字 / 对象的扩展方法;`Object` / `Array` / `Number` / `String` 静态方法;`JSON.parse` / `JSON.stringify`;`Map` / `Set`;`Date`(`gmtime_r`);`RegExp`(POSIX ERE `regcomp`/`regexec` 的 `test`/`exec`)。
256
- - Promise(`xt_promise.c`):微任务队列(`xt_microtasks`);`xt_promise_ctor/resolve/reject/static`、实例 `then/catch/finally`;`xt_drain_microtasks` 在程序结束时清空队列,事件循环也会在回调之间清空它。`xt_await`(位于 `xt_async.c`)对已 settle 的值同步返回,对 pending promise 则挂起当前 async 协程并登记等待者。
257
- - 异步协程(`xt_async.c`)复用共享的栈式协程运行时(`xt_coroutine.c`,POSIX `ucontext` / Windows fiber):每次 `async` 调用拥有私有栈,切换异常帧栈与 GC 栈区间,因此 `await` 可跨越 `try`/`finally`、循环与闭包。由定时器、套接字回调或另一个协程 settle 的 promise 会在微任务队列上恢复挂起的函数体。
258
- - Fetch(`xt_fetch.c`):全局 `fetch(input, init)` 是阻塞式 HTTP/1.1 客户端,返回的 promise 已经 settle(交换同步完成,不经过 reactor 调度)。只接受 `http://` URL——由于未链接 TLS 后端,`https://` 会以 `TypeError` 拒绝——支持 `method`、`headers`(普通对象或 `Headers`)、`body` 与 `redirect`(`follow` / `manual` / `error`),最多跟随 20 次重定向,并在 301/302/303 时将 POST 改为 GET。解析出的 `Response` 形状对象暴露 `ok` / `status` / `statusText` / `url` / `headers` 以及 `text()` / `json()` / `arrayBuffer()` / `bytes()` / `clone()`;`Headers` 大小写不敏感,提供 `get` / `has` / `set` / `append` / `delete` / `keys` / `values` / `entries` / `forEach` / `getSetCookie`。非法 URL 与网络失败会以 `TypeError` 拒绝。
259
-
260
- ---
261
-
262
- ## 9. 扩展机制(Extensions,已实现)
263
-
264
- 实现位置:`src/extensions/registry.ts`、`src/extensions/node/`
265
-
266
- - 扩展是普通对象:`runtimeSources()`(额外 C 源)、`linkerFlags()`(额外链接参数)、`builtins()`(全局标识符 → 运行时符号,统一 `(argc, argv)` ABI)与 `modules()`(导入说明符 → 命名导出 / 命名空间)。
267
- - `ExtensionRegistry`:注册 / 注销 / 查询 / 汇总 builtins、modules、runtime 源、链接参数。
268
- - 内置核心扩展 `core`:暴露 `print`(映射 `xt_println`),始终注册。
269
- - Node 扩展 `node`:
270
- - 模块化组织:`src/extensions/node/fs/` + `runtime/ext_node/fs/read_file.c`
271
- - 暴露可导入模块(`fs`、`fs/promises`、`path`、`os`、`process` 等),同时支持裸名称与 `node:` 前缀;`import { readFileSync } from "fs"` 解析到 `xt_node_read_text_file`,`path`/`os`/`process` 的导出映射到命名空间分发器。
272
- - 添加新模块只需新增目录 + C 实现,核心编译器无需改动。
273
- - 原生 C++/Rust 扩展(`src/extensions/native.ts`、`--ext-native`):
274
- - `nativeObjects()` 链接以 `(argc, argv)` ABI 暴露 `extern "C"` 符号的预编译对象/静态库;JSON manifest 把它们映射为 builtins/modules(`linkerFlags` / `linkerFlagsByPlatform` 用于 C++/Rust 运行时)。
275
- - 编写辅助位于 `runtime/xt_ext.h`(C/C++)与 `runtime/xt_ext.rs`(Rust);可运行工程在 `examples/extensions/`。
276
- - 驱动原样链接这些产物,增量缓存会对其内容取指纹,因此重建库会使缓存二进制失效。
277
- - CI 在 Linux、macOS、Windows 上都会构建两种语言的示例;Windows 下系统 clang 链接 MSVC ABI(C++ `-lmsvcprt`,Rust `*-pc-windows-msvc` 加 Windows 系统库)。
278
-
279
- ---
280
-
281
- ## 10. 驱动、增量编译与工具链(已实现)
282
-
283
- 实现位置:`src/driver/compiler.ts`、`src/driver/cache.ts`、`src/driver/toolchain.ts`、`src/driver/paths.ts`
284
-
285
- - 编译流水线:读源 → 模块打包(`src/driver/modules.ts`,当入口含 `import`/`export` 时)→ 解析 → 绑定/检查 → IR → 目标文件 → 链接。
286
- - 增量缓存:以「编译器版本 + 源码哈希 + emit 类型 + 优化级别 + 平台 + 扩展指纹(名称、链接参数、原生对象内容)」为键,产物存在且新鲜则跳过构建。
287
- - C 运行时与扩展源按内容哈希缓存目标文件,只编译一次。
288
- - 工具链封装:查找 `clang`(可用 `xbintsc_CLANG` 覆盖)、编译 IR、编译 C、链接。
289
- - 链接参数:非 Windows 自动加 `-lm`;扩展可追加链接参数。
290
- - 项目编译配置(`src/driver/config.ts`、`xbintsc.config.json`):`entry`、`outDir`、`output`、`optimize`、`extensions`、`extNative`、`force` 与 `app`(`name`、`icon`、`bundle`、`bundleId`)。从入口/当前目录向上查找,可用 `--config` 指定、`--no-config` 关闭;所有路径以配置文件所在目录为基准;CLI 参数优先于配置。
291
- - 应用图标(`src/driver/icon.ts`、`win-icon.ts`、`mac-bundle.ts`,`--icon`/`app.icon`):PNG/ICO/ICNS 以 `xt_app_icon_*` 符号内嵌;Windows 上通过 `llvm-rc`/`windres` 合成 PE 资源;macOS 上打包为 `Foo.app`(用 `sips`/`iconutil` 生成 `AppIcon.icns`)。`gui` 扩展用内嵌字节调用 `SDL_SetWindowIcon`;`xbintsc_RC` 可覆盖资源编译器。
292
-
293
- ---
294
-
295
- ## 11. CLI 与编程接口(已实现)
296
-
297
- 实现位置:`src/cli/main.ts`、`src/index.ts`、`bin/xbintsc.js`
298
-
299
- ### 11.1 CLI 命令
300
-
301
- ```
302
- xbintsc build <file.ts> [options] 编译为原生二进制
303
- xbintsc run <file.ts> [-- args] 编译并执行
304
- xbintsc emit <file.ts> 打印 LLVM IR
305
- xbintsc version 打印版本
306
- xbintsc help 帮助
307
- ```
9
+ > 语言 / Language:[English](../implemented.md) | **简体中文**
308
10
 
309
- ### 11.2 CLI 选项
11
+ ## 目录
310
12
 
311
- ```
312
- -o, --output <path> 输出路径
313
- --out <dir> 输出目录(默认 build/)
314
- --emit <kind> exe | obj | ir(默认 exe)
315
- -O0..-O3 优化级别(默认 -O2)
316
- --ext <names> 逗号分隔扩展(如 node)
317
- --ext-native <m> 从 JSON manifest 注册 C++/Rust 扩展
318
- --config <path> 使用项目配置(默认自动查找 xbintsc.config.json)
319
- --no-config 不读取任何项目配置
320
- --icon <path> 内嵌应用图标(PNG/ICO/ICNS)
321
- --bundle macOS:同时生成 .app bundle
322
- --app-name <name> bundle / 显示名称
323
- --app-id <id> macOS bundle 标识符(如 com.example.demo)
324
- --force 忽略增量缓存
325
- --verbose 打印进度信息
326
- ```
13
+ ### 流水线与前端
327
14
 
328
- ### 11.3 编程接口
15
+ - [编译流水线](./implemented/pipeline.md) —— 源码 → token → AST → IR → 二进制,自举
16
+ - [词法分析](./implemented/lexer.md) —— token、字面量、关键字、词法诊断
17
+ - [语法分析](./implemented/parser.md) —— 语句、表达式、类型语法、ASI
18
+ - [名字绑定与作用域](./implemented/binder.md) —— 作用域、符号、闭包捕获
329
19
 
330
- ```ts
331
- import { build, compileString } from "xbintsc";
20
+ ### 语义与代码生成
332
21
 
333
- const { ir } = compileString("console.log(1 + 1);");
334
- const result = build("program.ts", { emit: "exe", outDir: "build" });
335
- ```
22
+ - [运算符与赋值](./implemented/operators.md) —— 算术、比较、逻辑、位运算、赋值
23
+ - [值模型与调用约定](./implemented/value-model.md) —— NaN-boxing、函数 ABI、闭包、原型
24
+ - [LLVM IR 代码生成](./implemented/codegen.md) —— 控制流、表达式、类、内联缓存、入口
336
25
 
337
- ---
26
+ ### 运行时与标准库
338
27
 
339
- ## 12. 测试(已实现)
28
+ - [C 运行时核心](./implemented/runtime-core.md) —— 分配器/GC、值、转换、对象、异常
29
+ - [字符串与文本](./implemented/strings.md) —— UTF-8/UTF-16 模型、字符串方法、文本编解码
30
+ - [标准库](./implemented/stdlib.md) —— Object、Array、Number/BigInt/Math、JSON、Date、RegExp、Symbol、错误、console
31
+ - [集合](./implemented/collections.md) —— Map、Set、WeakMap、WeakSet、WeakRef、迭代
32
+ - [类型化数组与二进制数据](./implemented/typed-arrays.md) —— 类型化数组、ArrayBuffer、DataView
33
+ - [异步、Promise 与生成器](./implemented/async.md) —— async/await、异步生成器、Promise、定时器
34
+ - [fetch](./implemented/fetch.md) —— 由 reactor 驱动的 HTTP/1.1 客户端与 Headers
340
35
 
341
- 实现位置:`tests/`(`lexer` / `parser` / `binder` / `codegen` / `driver` / `extensions` / `cli` / `e2e`)
36
+ ### 模块与工具
342
37
 
343
- - 各模块单元测试;e2e 在存在 `clang` 时真正编译并运行二进制,否则自动跳过。
344
- - e2e 覆盖:算术与打印、递归函数、循环 / 数组 / 字符串拼接、闭包按引用捕获、对象 / 数组 JS 风格打印、Node `fs` 扩展(经 `import`)、`switch` 穿透、数组 / 字符串方法、`Math` 与全局函数与 `console` 各等级、默认 / 剩余参数与 `arguments`、`Object` 助手与展开与 `in`/`delete`、`for...in` 对象键枚举、`try/catch/finally`、可选链、类与 `new`/`this`/`static`/`extends`/`super`/`instanceof`、`async`/`await` 与 `Promise`、真实 await 挂起(定时器、TCP 套接字与 `fs/promises` 跨事件循环轮次、恢复后的 rejection 与 `finally`)、`Map`/`Set`/`JSON` 与扩展标准库、`Map`/`Set` 的 `for...of`、数组 `length` 赋值与可迭代展开、多文件 `import`/`export`、类型化数组(元素强制转换、`from`/`of`、迭代与原型方法)、对象 rest 解构与内建 `instanceof`,一等公民内建构造器与 `Object.prototype`(别名、静态成员、`getPrototypeOf`、`hasOwnProperty.call`),以及全局 `fetch`(HTTP GET/POST、请求头、重定向、JSON/文本/二进制响应体与 `TypeError` 拒绝)。
38
+ - [模块系统](./implemented/modules.md) —— import/export、打包、`node_modules`、`import.meta`
39
+ - [扩展机制](./implemented/extensions.md) —— 注册表、`node` 扩展、原生 C++/Rust 扩展
40
+ - [Node 扩展](./implemented/node.md) —— 21 个 Node 内置模块,每个模块一页
41
+ - [驱动、增量编译与工具链](./implemented/driver.md) —— 缓存、clang/LTO/PGO、配置、图标
42
+ - [CLI 与编程接口](./implemented/cli.md) —— 命令、参数、嵌入式 API
43
+ - [测试](./implemented/tests.md) —— 单元测试、e2e 与差分测试
345
44
 
346
- ---
45
+ ## 改动应该写在哪一页?
347
46
 
348
- ## 13. 已实现特性速查表
47
+ 按功能选择归属页面,可以让无关分支不修改同一个文件。
349
48
 
350
- | 类别 | 内容 |
49
+ | 你改动了…… | 编辑 |
351
50
  | --- | --- |
352
- | 声明 | `var` `let` `const`、函数声明、函数表达式、箭头函数、`class`(声明 / 表达式)、接口 / 类型别名(擦除) |
353
- | 控制流 | `if/else`、`while`、`do...while`、`for`、`for...of`、`for...in`、`switch`、`try/catch/finally`、`break`、`continue`、`return`、`throw` |
354
- | 表达式 | 标识符、字面量、模板字符串、数组 / 对象字面量(含展开)、调用、成员 / 元素访问、可选链、闭包、`arguments`、`this`、`new`、`super`、`await` |
355
- | 运算符 | 算术、比较、相等、逻辑、位运算、移位、一元(含 `typeof`/`void`)、前后缀增减、复合赋值、逻辑赋值、`in`、`delete`、`instanceof` |
356
- | 函数 | 默认参数、剩余参数、捕获闭包、`this` 绑定、箭头函数词法 `this`、`call`/`apply`/`bind`、`name`/`length` |
357
- | 类 / OO | 构造函数、实例字段、方法、`static`、继承 `extends`/`super`、原型链、`instanceof` |
358
- | 异步 | `async`/`await` 具备真实的栈式协程挂起(pending promise 会暂停函数体,直到定时器/套接字/其他协程将其 settle)、`Promise`(`then/catch/finally`、`resolve/reject/all/allSettled/race`) |
359
- | 模块 | `import`/`export`(具名 / 默认 / 再导出 / `export *`),相对路径多文件打包(`.js` 系列说明符解析到对应 `.ts` 源码,省略后缀时优先 TypeScript 后缀而非同名的 JavaScript 文件;纯 `.js` / `.jsx` / `.mjs` / `.cjs` 源码也可直接打包)与 `node_modules` 包(`exports` / `module` / `main`、作用域包与子路径),裸说明符解析到扩展模块;`node_modules` 内的 CommonJS 包会被降级(`require` / `module.exports` / `exports`),用户代码中的 `require()` 报错并提示改用 `import` |
360
- | 标准库 | 数组 / 字符串 / 数字 / 对象扩展方法、类型化数组、`Math`、`JSON`、`Date`、`RegExp`、`Map`、`Set`、`Symbol`、`Error` 家族、`Object/Array/Number/String/Symbol` 静态、`console.*` |
361
- | 值模型 | 64 位 NaN-boxing、统一函数 ABI(含 `this`)、闭包环境、对象原型链 |
362
- | 运行时 | 字符串 / 对象 / 数组 / 类型化数组 / 闭包 / 算术 / 比较 / 可捕获异常 / Promise / 异步协程 / 集合 / symbol / 生成器 / `fetch` / `console` |
363
- | 扩展 | 扩展注册表、`core`(print)、`node`(fs / path / os / process / buffer / stream / net / dgram / http,按说明符导入) |
364
- | GUI(`gui` 扩展) | 自托管 HTML/CSS 渲染器窗口(SDL3 + SDL_GPU):DOM/CSS/布局、CSS `transform`/`transform-origin`、`<img>`/SVG、`<video>`/`<audio>`、`<canvas>` 2D、事件、transition(含 `transform`) |
365
- | 工具链 | clang 编译 IR/C、链接、增量缓存 |
366
- | 项目配置 | `xbintsc.config.json`(`entry` / `outDir` / `optimize` / `extensions` / `app`),支持查找与 CLI 优先级 |
367
- | 应用图标 | 编译期内嵌(PNG/ICO/ICNS),Windows PE 资源、macOS `.app` bundle、`gui` 运行时窗口/Dock 图标 |
368
- | 自举 | `xbintsc` 可将 `src/cli/main.ts` 编译为原生二进制;产出的 IR 从第 1 代起达到不动点 |
369
- | 平台 | macOS / Linux / Windows(构建层面已适配,CI 见 `.github/workflows`) |
51
+ | 分词器、字面量、关键字 | [词法分析](./implemented/lexer.md) |
52
+ | 语句 / 表达式 / 类型语法 | [语法分析](./implemented/parser.md) |
53
+ | 作用域、符号、捕获 | [名字绑定](./implemented/binder.md) |
54
+ | 运算符、赋值降级 | [运算符与赋值](./implemented/operators.md) |
55
+ | 值表示、函数 ABI | [值模型](./implemented/value-model.md) |
56
+ | 控制流、表达式降级、类、`main` | [代码生成](./implemented/codegen.md) |
57
+ | 分配器、GC、类型转换、异常 | [运行时核心](./implemented/runtime-core.md) |
58
+ | 字符串模型与方法 | [字符串与文本](./implemented/strings.md) |
59
+ | Object/Array/Number/Math/JSON/Date/RegExp/Symbol/错误/console | [标准库](./implemented/stdlib.md) |
60
+ | Map/Set/WeakMap/WeakSet/WeakRef/迭代 | [集合](./implemented/collections.md) |
61
+ | 类型化数组、ArrayBuffer、DataView | [类型化数组](./implemented/typed-arrays.md) |
62
+ | async/await、Promise、生成器、定时器 | [异步](./implemented/async.md) |
63
+ | HTTP 客户端 | [fetch](./implemented/fetch.md) |
64
+ | import/export 与打包 | [模块系统](./implemented/modules.md) |
65
+ | 扩展注册表或 `node` 扩展 | [扩展机制](./implemented/extensions.md) |
66
+ | 某个 Node 模块(`fs`、`path`、`http` 等) | [Node 扩展](./implemented/node.md) |
67
+ | 构建缓存、clang、LTO/PGO、配置、图标 | [驱动](./implemented/driver.md) |
68
+ | CLI 参数或嵌入式 API | [CLI](./implemented/cli.md) |
69
+ | 测试与差分测试 | [测试](./implemented/tests.md) |