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.
- package/AGENTS.md +20 -10
- package/README.md +8 -7
- package/README.zh-CN.md +6 -6
- package/dist/src/binder/declarations.js +14 -3
- package/dist/src/binder/declarations.js.map +1 -1
- package/dist/src/cli/hints.js +7 -1
- package/dist/src/cli/hints.js.map +1 -1
- package/dist/src/cli/main.js +115 -15
- package/dist/src/cli/main.js.map +1 -1
- package/dist/src/cli/watch.d.ts +25 -0
- package/dist/src/cli/watch.js +93 -0
- package/dist/src/cli/watch.js.map +1 -0
- package/dist/src/codegen/generator/calls/access.js +11 -2
- package/dist/src/codegen/generator/calls/access.js.map +1 -1
- package/dist/src/codegen/generator/calls/closures.js +12 -4
- package/dist/src/codegen/generator/calls/closures.js.map +1 -1
- package/dist/src/codegen/generator/context.d.ts +8 -0
- package/dist/src/codegen/generator/context.js +22 -3
- package/dist/src/codegen/generator/context.js.map +1 -1
- package/dist/src/codegen/generator/expressions/operators.js +17 -15
- package/dist/src/codegen/generator/expressions/operators.js.map +1 -1
- package/dist/src/codegen/generator/expressions/primary.js +5 -0
- package/dist/src/codegen/generator/expressions/primary.js.map +1 -1
- package/dist/src/codegen/generator/module.js +0 -7
- package/dist/src/codegen/generator/module.js.map +1 -1
- package/dist/src/codegen/generator/numeric.d.ts +6 -3
- package/dist/src/codegen/generator/numeric.js +54 -11
- package/dist/src/codegen/generator/numeric.js.map +1 -1
- package/dist/src/codegen/generator/state.js +23 -0
- package/dist/src/codegen/generator/state.js.map +1 -1
- package/dist/src/codegen/generator/statements/control-flow.js +1 -4
- package/dist/src/codegen/generator/statements/control-flow.js.map +1 -1
- package/dist/src/codegen/generator/statements/loops.js +48 -16
- package/dist/src/codegen/generator/statements/loops.js.map +1 -1
- package/dist/src/codegen/generator/tables.js +26 -1
- package/dist/src/codegen/generator/tables.js.map +1 -1
- package/dist/src/diagnostics/diagnostic.d.ts +3 -1
- package/dist/src/diagnostics/diagnostic.js +23 -3
- package/dist/src/diagnostics/diagnostic.js.map +1 -1
- package/dist/src/driver/app-artifacts.d.ts +42 -0
- package/dist/src/driver/app-artifacts.js +53 -0
- package/dist/src/driver/app-artifacts.js.map +1 -0
- package/dist/src/driver/build-key.d.ts +29 -0
- package/dist/src/driver/build-key.js +35 -0
- package/dist/src/driver/build-key.js.map +1 -0
- package/dist/src/driver/bundler/graph.js +61 -12
- package/dist/src/driver/bundler/graph.js.map +1 -1
- package/dist/src/driver/bundler/merge.js +7 -1
- package/dist/src/driver/bundler/merge.js.map +1 -1
- package/dist/src/driver/compiler.d.ts +10 -67
- package/dist/src/driver/compiler.js +95 -234
- package/dist/src/driver/compiler.js.map +1 -1
- package/dist/src/driver/config.d.ts +3 -0
- package/dist/src/driver/config.js +8 -0
- package/dist/src/driver/config.js.map +1 -1
- package/dist/src/driver/frontend.d.ts +37 -0
- package/dist/src/driver/frontend.js +92 -0
- package/dist/src/driver/frontend.js.map +1 -0
- package/dist/src/driver/index.d.ts +1 -1
- package/dist/src/driver/index.js.map +1 -1
- package/dist/src/driver/options.d.ts +64 -0
- package/dist/src/driver/options.js +9 -0
- package/dist/src/driver/options.js.map +1 -0
- package/dist/src/driver/runtime-objects.d.ts +38 -0
- package/dist/src/driver/runtime-objects.js +112 -0
- package/dist/src/driver/runtime-objects.js.map +1 -0
- package/dist/src/driver/toolchain-provider.d.ts +4 -0
- package/dist/src/driver/toolchain-provider.js +4 -0
- package/dist/src/driver/toolchain-provider.js.map +1 -1
- package/dist/src/driver/toolchain.d.ts +32 -1
- package/dist/src/driver/toolchain.js +115 -11
- package/dist/src/driver/toolchain.js.map +1 -1
- package/dist/src/driver/version.d.ts +12 -0
- package/dist/src/driver/version.js +13 -0
- package/dist/src/driver/version.js.map +1 -0
- package/dist/src/driver/win-icon.d.ts +7 -9
- package/dist/src/driver/win-icon.js +37 -35
- package/dist/src/driver/win-icon.js.map +1 -1
- package/dist/src/extensions/node/fs/index.d.ts +4 -3
- package/dist/src/extensions/node/fs/index.js +12 -3
- package/dist/src/extensions/node/fs/index.js.map +1 -1
- package/dist/src/extensions/node/fs-promises/index.d.ts +5 -5
- package/dist/src/extensions/node/fs-promises/index.js +15 -6
- package/dist/src/extensions/node/fs-promises/index.js.map +1 -1
- package/dist/src/parser/declarations/classes.js +5 -0
- package/dist/src/parser/declarations/classes.js.map +1 -1
- package/dist/src/parser/declarations/functions.js +13 -1
- package/dist/src/parser/declarations/functions.js.map +1 -1
- package/dist/src/parser/modules.js +8 -3
- package/dist/src/parser/modules.js.map +1 -1
- package/dist/src/parser/parser.d.ts +1 -0
- package/dist/src/parser/parser.js +23 -0
- package/dist/src/parser/parser.js.map +1 -1
- package/dist/tests/cli/check.test.d.ts +6 -0
- package/dist/tests/cli/check.test.js +68 -0
- package/dist/tests/cli/check.test.js.map +1 -0
- package/dist/tests/cli/main.test.js +19 -0
- package/dist/tests/cli/main.test.js.map +1 -1
- package/dist/tests/cli/watch.test.d.ts +6 -0
- package/dist/tests/cli/watch.test.js +72 -0
- package/dist/tests/cli/watch.test.js.map +1 -0
- package/dist/tests/codegen/expressions.test.js +15 -3
- package/dist/tests/codegen/expressions.test.js.map +1 -1
- package/dist/tests/codegen/llvm.test.js +16 -0
- package/dist/tests/codegen/llvm.test.js.map +1 -1
- package/dist/tests/diagnostics/diagnostic.test.js +8 -0
- package/dist/tests/diagnostics/diagnostic.test.js.map +1 -1
- package/dist/tests/docs/structure.test.d.ts +1 -0
- package/dist/tests/docs/structure.test.js +92 -0
- package/dist/tests/docs/structure.test.js.map +1 -0
- package/dist/tests/driver/compiler.test.js +6 -0
- package/dist/tests/driver/compiler.test.js.map +1 -1
- package/dist/tests/driver/config.test.js +9 -0
- package/dist/tests/driver/config.test.js.map +1 -1
- package/dist/tests/driver/icon.test.js +19 -32
- package/dist/tests/driver/icon.test.js.map +1 -1
- package/dist/tests/driver/invalid-input.test.d.ts +10 -0
- package/dist/tests/driver/invalid-input.test.js +29 -0
- package/dist/tests/driver/invalid-input.test.js.map +1 -0
- package/dist/tests/driver/modules.test.js +42 -3
- package/dist/tests/driver/modules.test.js.map +1 -1
- package/dist/tests/driver/toolchain-provider.test.js +27 -1
- package/dist/tests/driver/toolchain-provider.test.js.map +1 -1
- package/dist/tests/driver/toolchain.test.js +60 -2
- package/dist/tests/driver/toolchain.test.js.map +1 -1
- package/dist/tests/e2e/array-buffer.test.d.ts +5 -0
- package/dist/tests/e2e/array-buffer.test.js +38 -0
- package/dist/tests/e2e/array-buffer.test.js.map +1 -0
- package/dist/tests/e2e/array-from-iterables.test.d.ts +7 -0
- package/dist/tests/e2e/array-from-iterables.test.js +34 -0
- package/dist/tests/e2e/array-from-iterables.test.js.map +1 -0
- package/dist/tests/e2e/array-symbol-iterator.test.d.ts +8 -0
- package/dist/tests/e2e/array-symbol-iterator.test.js +42 -0
- package/dist/tests/e2e/array-symbol-iterator.test.js.map +1 -0
- package/dist/tests/e2e/async-await.test.js +1 -1
- package/dist/tests/e2e/async-fs.test.d.ts +9 -0
- package/dist/tests/e2e/async-fs.test.js +119 -0
- package/dist/tests/e2e/async-fs.test.js.map +1 -0
- package/dist/tests/e2e/async-generators.test.d.ts +1 -0
- package/dist/tests/e2e/async-generators.test.js +154 -0
- package/dist/tests/e2e/async-generators.test.js.map +1 -0
- package/dist/tests/e2e/await-ordering.test.d.ts +5 -0
- package/dist/tests/e2e/await-ordering.test.js +37 -0
- package/dist/tests/e2e/await-ordering.test.js.map +1 -0
- package/dist/tests/e2e/compile-builtins.test.js +1 -1
- package/dist/tests/e2e/compile-modules.test.js +7 -0
- package/dist/tests/e2e/compile-modules.test.js.map +1 -1
- package/dist/tests/e2e/date-parse.test.d.ts +8 -0
- package/dist/tests/e2e/date-parse.test.js +38 -0
- package/dist/tests/e2e/date-parse.test.js.map +1 -0
- package/dist/tests/e2e/default-anonymous-exports.test.d.ts +7 -0
- package/dist/tests/e2e/default-anonymous-exports.test.js +23 -0
- package/dist/tests/e2e/default-anonymous-exports.test.js.map +1 -0
- package/dist/tests/e2e/fetch.test.js +24 -0
- package/dist/tests/e2e/fetch.test.js.map +1 -1
- package/dist/tests/e2e/globals-microtask.test.d.ts +9 -0
- package/dist/tests/e2e/globals-microtask.test.js +37 -0
- package/dist/tests/e2e/globals-microtask.test.js.map +1 -0
- package/dist/tests/e2e/gui-inline-svg.test.d.ts +11 -0
- package/dist/tests/e2e/gui-inline-svg.test.js +160 -0
- package/dist/tests/e2e/gui-inline-svg.test.js.map +1 -0
- package/dist/tests/e2e/gui-media.test.js +8 -1
- package/dist/tests/e2e/gui-media.test.js.map +1 -1
- package/dist/tests/e2e/inspect-builtins.test.d.ts +10 -0
- package/dist/tests/e2e/inspect-builtins.test.js +43 -0
- package/dist/tests/e2e/inspect-builtins.test.js.map +1 -0
- package/dist/tests/e2e/json-builtin-objects.test.d.ts +9 -0
- package/dist/tests/e2e/json-builtin-objects.test.js +23 -0
- package/dist/tests/e2e/json-builtin-objects.test.js.map +1 -0
- package/dist/tests/e2e/json-circular.test.d.ts +6 -0
- package/dist/tests/e2e/json-circular.test.js +43 -0
- package/dist/tests/e2e/json-circular.test.js.map +1 -0
- package/dist/tests/e2e/json-parse-reviver.test.d.ts +6 -0
- package/dist/tests/e2e/json-parse-reviver.test.js +29 -0
- package/dist/tests/e2e/json-parse-reviver.test.js.map +1 -0
- package/dist/tests/e2e/json-stringify-replacer.test.d.ts +6 -0
- package/dist/tests/e2e/json-stringify-replacer.test.js +27 -0
- package/dist/tests/e2e/json-stringify-replacer.test.js.map +1 -0
- package/dist/tests/e2e/json-stringify-space.test.d.ts +6 -0
- package/dist/tests/e2e/json-stringify-space.test.js +23 -0
- package/dist/tests/e2e/json-stringify-space.test.js.map +1 -0
- package/dist/tests/e2e/method-dispatch-errors.test.d.ts +9 -0
- package/dist/tests/e2e/method-dispatch-errors.test.js +38 -0
- package/dist/tests/e2e/method-dispatch-errors.test.js.map +1 -0
- package/dist/tests/e2e/native-extensions.test.js +1 -1
- package/dist/tests/e2e/native-extensions.test.js.map +1 -1
- package/dist/tests/e2e/promise-with-resolvers.test.d.ts +5 -0
- package/dist/tests/e2e/promise-with-resolvers.test.js +20 -0
- package/dist/tests/e2e/promise-with-resolvers.test.js.map +1 -0
- package/dist/tests/e2e/property-descriptors.test.d.ts +5 -0
- package/dist/tests/e2e/property-descriptors.test.js +25 -0
- package/dist/tests/e2e/property-descriptors.test.js.map +1 -0
- package/dist/tests/e2e/property-ic.test.d.ts +1 -0
- package/dist/tests/e2e/property-ic.test.js +55 -0
- package/dist/tests/e2e/property-ic.test.js.map +1 -0
- package/dist/tests/e2e/runtime-errors.test.d.ts +10 -0
- package/dist/tests/e2e/runtime-errors.test.js +52 -0
- package/dist/tests/e2e/runtime-errors.test.js.map +1 -0
- package/dist/tests/e2e/structured-clone.test.d.ts +6 -0
- package/dist/tests/e2e/structured-clone.test.js +49 -0
- package/dist/tests/e2e/structured-clone.test.js.map +1 -0
- package/dist/tests/e2e/text-codec.test.d.ts +6 -0
- package/dist/tests/e2e/text-codec.test.js +24 -0
- package/dist/tests/e2e/text-codec.test.js.map +1 -0
- package/dist/tests/e2e/typed-array-views.test.d.ts +6 -0
- package/dist/tests/e2e/typed-array-views.test.js +39 -0
- package/dist/tests/e2e/typed-array-views.test.js.map +1 -0
- package/dist/tests/e2e/url-search-params.test.d.ts +5 -0
- package/dist/tests/e2e/url-search-params.test.js +30 -0
- package/dist/tests/e2e/url-search-params.test.js.map +1 -0
- package/dist/tests/e2e/weak-collections.test.d.ts +1 -0
- package/dist/tests/e2e/weak-collections.test.js +88 -0
- package/dist/tests/e2e/weak-collections.test.js.map +1 -0
- package/dist/tests/parser/declarations.test.js +12 -0
- package/dist/tests/parser/declarations.test.js.map +1 -1
- package/dist/tests/parser/module-syntax.test.js +9 -0
- package/dist/tests/parser/module-syntax.test.js.map +1 -1
- package/dist/tests/parser/parser.test.js +7 -0
- package/dist/tests/parser/parser.test.js.map +1 -1
- package/dist/tests/version.test.js +5 -1
- package/dist/tests/version.test.js.map +1 -1
- package/doc/ai/README.md +4 -3
- package/doc/ai/cli.md +41 -0
- package/doc/ai/contributing.md +20 -16
- package/doc/ai/extensions.md +13 -10
- package/doc/ai/language-support.md +19 -14
- package/doc/ai/troubleshooting.md +11 -9
- package/doc/ai/zh-CN/README.md +3 -2
- package/doc/ai/zh-CN/cli.md +35 -0
- package/doc/ai/zh-CN/contributing.md +16 -15
- package/doc/ai/zh-CN/extensions.md +12 -9
- package/doc/ai/zh-CN/language-support.md +19 -15
- package/doc/ai/zh-CN/troubleshooting.md +9 -8
- package/doc/gui/api.md +8 -0
- package/doc/gui/build.md +13 -4
- package/doc/gui/known-issues.md +19 -14
- package/doc/gui/media.md +32 -3
- package/doc/gui/rendering.md +3 -1
- package/doc/gui.md +28 -5
- package/doc/icon.md +5 -4
- package/doc/implemented/async.md +51 -0
- package/doc/implemented/binder.md +13 -0
- package/doc/implemented/cli.md +47 -0
- package/doc/implemented/codegen.md +33 -0
- package/doc/implemented/collections.md +26 -0
- package/doc/implemented/driver.md +19 -0
- package/doc/implemented/extensions.md +19 -0
- package/doc/implemented/fetch.md +44 -0
- package/doc/implemented/lexer.md +23 -0
- package/doc/implemented/modules.md +28 -0
- package/doc/implemented/node/assert.md +17 -0
- package/doc/implemented/node/buffer.md +29 -0
- package/doc/implemented/node/child-process.md +29 -0
- package/doc/implemented/node/crypto.md +9 -0
- package/doc/implemented/node/dgram.md +15 -0
- package/doc/implemented/node/events.md +37 -0
- package/doc/implemented/node/fs-promises.md +49 -0
- package/doc/implemented/node/fs.md +112 -0
- package/doc/implemented/node/http.md +21 -0
- package/doc/implemented/node/net.md +17 -0
- package/doc/implemented/node/os.md +22 -0
- package/doc/implemented/node/path.md +33 -0
- package/doc/implemented/node/process.md +23 -0
- package/doc/implemented/node/querystring.md +20 -0
- package/doc/implemented/node/stream-promises.md +8 -0
- package/doc/implemented/node/stream.md +19 -0
- package/doc/implemented/node/test.md +10 -0
- package/doc/implemented/node/url.md +8 -0
- package/doc/implemented/node/util.md +25 -0
- package/doc/implemented/node/worker-threads.md +10 -0
- package/doc/implemented/node/zlib.md +8 -0
- package/doc/implemented/node.md +48 -0
- package/doc/implemented/operators.md +38 -0
- package/doc/implemented/parser.md +58 -0
- package/doc/implemented/pipeline.md +28 -0
- package/doc/implemented/runtime-core.md +32 -0
- package/doc/implemented/stdlib.md +78 -0
- package/doc/implemented/strings.md +27 -0
- package/doc/implemented/tests.md +10 -0
- package/doc/implemented/typed-arrays.md +26 -0
- package/doc/implemented/value-model.md +18 -0
- package/doc/implemented.md +54 -355
- package/doc/node-implemented.md +3 -585
- package/doc/node-unimplemented.md +3 -164
- package/doc/requirements.md +23 -8
- package/doc/unimplemented/classes.md +22 -0
- package/doc/unimplemented/deviations.md +27 -0
- package/doc/unimplemented/expressions.md +26 -0
- package/doc/unimplemented/functions.md +21 -0
- package/doc/unimplemented/modules.md +22 -0
- package/doc/unimplemented/node/async.md +20 -0
- package/doc/unimplemented/node/bun.md +9 -0
- package/doc/unimplemented/node/fs-promises.md +20 -0
- package/doc/unimplemented/node/fs.md +30 -0
- package/doc/unimplemented/node/globals.md +23 -0
- package/doc/unimplemented/node/modules.md +21 -0
- package/doc/unimplemented/node.md +21 -0
- package/doc/unimplemented/statements.md +18 -0
- package/doc/unimplemented/stdlib.md +54 -0
- package/doc/unimplemented/toolchain.md +14 -0
- package/doc/unimplemented/types.md +12 -0
- package/doc/unimplemented.md +18 -275
- package/doc/xbintsc.config.schema.json +12 -0
- package/doc/zh-CN/gui/api.md +7 -0
- package/doc/zh-CN/gui/build.md +11 -3
- package/doc/zh-CN/gui/known-issues.md +17 -11
- package/doc/zh-CN/gui/media.md +26 -2
- package/doc/zh-CN/gui/rendering.md +2 -1
- package/doc/zh-CN/gui.md +21 -3
- package/doc/zh-CN/icon.md +5 -4
- package/doc/zh-CN/implemented/async.md +49 -0
- package/doc/zh-CN/implemented/binder.md +13 -0
- package/doc/zh-CN/implemented/cli.md +46 -0
- package/doc/zh-CN/implemented/codegen.md +33 -0
- package/doc/zh-CN/implemented/collections.md +26 -0
- package/doc/zh-CN/implemented/driver.md +19 -0
- package/doc/zh-CN/implemented/extensions.md +19 -0
- package/doc/zh-CN/implemented/fetch.md +31 -0
- package/doc/zh-CN/implemented/lexer.md +23 -0
- package/doc/zh-CN/implemented/modules.md +28 -0
- package/doc/zh-CN/implemented/node/assert.md +17 -0
- package/doc/zh-CN/implemented/node/buffer.md +25 -0
- package/doc/zh-CN/implemented/node/child-process.md +27 -0
- package/doc/zh-CN/implemented/node/crypto.md +9 -0
- package/doc/zh-CN/implemented/node/dgram.md +15 -0
- package/doc/zh-CN/implemented/node/events.md +36 -0
- package/doc/zh-CN/implemented/node/fs-promises.md +30 -0
- package/doc/zh-CN/implemented/node/fs.md +105 -0
- package/doc/zh-CN/implemented/node/http.md +17 -0
- package/doc/zh-CN/implemented/node/net.md +17 -0
- package/doc/zh-CN/implemented/node/os.md +21 -0
- package/doc/zh-CN/implemented/node/path.md +26 -0
- package/doc/zh-CN/implemented/node/process.md +23 -0
- package/doc/zh-CN/implemented/node/querystring.md +20 -0
- package/doc/zh-CN/implemented/node/stream-promises.md +8 -0
- package/doc/zh-CN/implemented/node/stream.md +15 -0
- package/doc/zh-CN/implemented/node/test.md +10 -0
- package/doc/zh-CN/implemented/node/url.md +8 -0
- package/doc/zh-CN/implemented/node/util.md +25 -0
- package/doc/zh-CN/implemented/node/worker-threads.md +9 -0
- package/doc/zh-CN/implemented/node/zlib.md +8 -0
- package/doc/zh-CN/implemented/node.md +45 -0
- package/doc/zh-CN/implemented/operators.md +38 -0
- package/doc/zh-CN/implemented/parser.md +58 -0
- package/doc/zh-CN/implemented/pipeline.md +25 -0
- package/doc/zh-CN/implemented/runtime-core.md +31 -0
- package/doc/zh-CN/implemented/stdlib.md +76 -0
- package/doc/zh-CN/implemented/strings.md +27 -0
- package/doc/zh-CN/implemented/tests.md +10 -0
- package/doc/zh-CN/implemented/typed-arrays.md +26 -0
- package/doc/zh-CN/implemented/value-model.md +18 -0
- package/doc/zh-CN/implemented.md +50 -350
- package/doc/zh-CN/node-implemented.md +4 -531
- package/doc/zh-CN/node-unimplemented.md +4 -139
- package/doc/zh-CN/plan-require-node-modules.md +4 -4
- package/doc/zh-CN/requirements.md +20 -6
- package/doc/zh-CN/unimplemented/classes.md +22 -0
- package/doc/zh-CN/unimplemented/deviations.md +24 -0
- package/doc/zh-CN/unimplemented/expressions.md +24 -0
- package/doc/zh-CN/unimplemented/functions.md +21 -0
- package/doc/zh-CN/unimplemented/modules.md +19 -0
- package/doc/zh-CN/unimplemented/node/async.md +20 -0
- package/doc/zh-CN/unimplemented/node/bun.md +8 -0
- package/doc/zh-CN/unimplemented/node/fs-promises.md +12 -0
- package/doc/zh-CN/unimplemented/node/fs.md +24 -0
- package/doc/zh-CN/unimplemented/node/globals.md +14 -0
- package/doc/zh-CN/unimplemented/node/modules.md +15 -0
- package/doc/zh-CN/unimplemented/node.md +18 -0
- package/doc/zh-CN/unimplemented/statements.md +15 -0
- package/doc/zh-CN/unimplemented/stdlib.md +54 -0
- package/doc/zh-CN/unimplemented/toolchain.md +14 -0
- package/doc/zh-CN/unimplemented/types.md +11 -0
- package/doc/zh-CN/unimplemented.md +14 -237
- package/llms.txt +32 -4
- package/package.json +1 -1
- package/runtime/ext_gui/inline_svg.cpp +219 -0
- package/runtime/ext_gui/inline_svg.h +41 -0
- package/runtime/ext_gui/layout.cpp +18 -0
- package/runtime/ext_gui/layout.h +7 -0
- package/runtime/ext_gui/layout_flow.cpp +4 -3
- package/runtime/ext_gui/paint.cpp +14 -0
- package/runtime/ext_gui/paint.h +5 -1
- package/runtime/ext_gui/renderer_image.cpp +53 -25
- package/runtime/ext_gui/renderer_shaders.h +2 -2
- package/runtime/ext_gui/stb_image.h +1 -17
- package/runtime/ext_gui/style_ua.cpp +3 -0
- package/runtime/ext_gui/svg.cpp +122 -39
- package/runtime/ext_gui/svg.h +14 -3
- package/runtime/ext_gui/window.cpp +28 -0
- package/runtime/ext_node/child_process/child_process.c +173 -73
- package/runtime/ext_node/fs/async_api.c +314 -0
- package/runtime/ext_node/fs/async_complete.c +99 -0
- package/runtime/ext_node/fs/async_fh.c +206 -0
- package/runtime/ext_node/fs/async_job.c +81 -0
- package/runtime/ext_node/fs/async_job.h +132 -0
- package/runtime/ext_node/fs/async_worker.c +534 -0
- package/runtime/ext_node/fs/async_worker_dir.c +439 -0
- package/runtime/ext_node/fs/async_worker_dir.h +33 -0
- package/runtime/ext_node/fs/async_worker_fd.c +74 -0
- package/runtime/ext_node/fs/dir.c +60 -15
- package/runtime/ext_node/fs/fs_common.h +9 -0
- package/runtime/ext_node/fs/fs_ops.c +18 -29
- package/runtime/ext_node/fs/parts/builtins.inc +34 -0
- package/runtime/ext_node/fs/parts/platform.inc +66 -0
- package/runtime/ext_node/fs/promises.c +44 -234
- package/runtime/rt.h +15 -0
- package/runtime/rt_internal.h +108 -0
- package/runtime/xt_alloc.c +43 -7
- package/runtime/xt_array_buffer.c +284 -0
- package/runtime/xt_async.c +46 -21
- package/runtime/xt_async_io.c +333 -0
- package/runtime/xt_async_io.h +47 -0
- package/runtime/xt_bigint/helpers.inc +3 -3
- package/runtime/xt_builtins.c +21 -17
- package/runtime/xt_constructors.c +12 -2
- package/runtime/xt_containers/access.inc +148 -3
- package/runtime/xt_containers/objects.inc +26 -2
- package/runtime/xt_containers/shapes.inc +71 -0
- package/runtime/xt_containers.c +1 -0
- package/runtime/xt_coroutine.c +17 -0
- package/runtime/xt_fetch/async.inc +295 -0
- package/runtime/xt_fetch/request.inc +6 -183
- package/runtime/xt_fetch/socket.inc +5 -4
- package/runtime/xt_fetch.c +6 -4
- package/runtime/xt_generator.c +299 -10
- package/runtime/xt_io/inspect.inc +112 -0
- package/runtime/xt_loop.c +79 -7
- package/runtime/xt_performance.c +37 -0
- package/runtime/xt_promise.c +63 -1
- package/runtime/xt_stdlib/arrays.inc +1 -1
- package/runtime/xt_stdlib/dispatch.inc +46 -11
- package/runtime/xt_stdlib/strings.inc +1 -1
- package/runtime/xt_stdlib2/array-statics.inc +25 -0
- package/runtime/xt_stdlib2/arrays.inc +5 -3
- package/runtime/xt_stdlib2/container.inc +5 -0
- package/runtime/xt_stdlib2/date.inc +111 -3
- package/runtime/xt_stdlib2/error.inc +24 -0
- package/runtime/xt_stdlib2/json.inc +310 -19
- package/runtime/xt_stdlib2/number-string-statics.inc +1 -1
- package/runtime/xt_stdlib2/objects.inc +122 -0
- package/runtime/xt_stdlib2/set.inc +1 -1
- package/runtime/xt_structured_clone.c +159 -0
- package/runtime/xt_symbol.c +2 -2
- package/runtime/xt_text_codec.c +69 -0
- package/runtime/xt_typed_array/construction.inc +35 -5
- package/runtime/xt_typed_array/elements.inc +159 -0
- package/runtime/xt_typed_array/methods.inc +21 -5
- package/runtime/xt_typed_array.c +7 -10
- package/runtime/xt_url.c +375 -0
- package/runtime/xt_values/arithmetic.inc +2 -2
- package/runtime/xt_values/conversions.inc +1 -1
- package/runtime/xt_weak.c +281 -0
- package/scripts/build-gui.ts +133 -60
- package/scripts/check-version.ts +3 -3
- package/src/binder/declarations.ts +14 -3
- package/src/cli/hints.ts +8 -1
- package/src/cli/main.ts +119 -18
- package/src/cli/watch.ts +101 -0
- package/src/codegen/generator/calls/access.ts +10 -2
- package/src/codegen/generator/calls/closures.ts +12 -4
- package/src/codegen/generator/context.ts +23 -3
- package/src/codegen/generator/expressions/operators.ts +27 -13
- package/src/codegen/generator/expressions/primary.ts +4 -0
- package/src/codegen/generator/module.ts +0 -7
- package/src/codegen/generator/numeric.ts +85 -11
- package/src/codegen/generator/state.ts +23 -0
- package/src/codegen/generator/statements/control-flow.ts +1 -4
- package/src/codegen/generator/statements/loops.ts +50 -16
- package/src/codegen/generator/tables.ts +26 -1
- package/src/diagnostics/diagnostic.ts +23 -3
- package/src/driver/app-artifacts.ts +77 -0
- package/src/driver/build-key.ts +55 -0
- package/src/driver/bundler/graph.ts +63 -13
- package/src/driver/bundler/merge.ts +4 -1
- package/src/driver/compiler.ts +94 -328
- package/src/driver/config.ts +11 -0
- package/src/driver/frontend.ts +120 -0
- package/src/driver/index.ts +0 -1
- package/src/driver/options.ts +70 -0
- package/src/driver/runtime-objects.ts +134 -0
- package/src/driver/toolchain-provider.ts +4 -0
- package/src/driver/toolchain.ts +154 -10
- package/src/driver/version.ts +12 -0
- package/src/driver/win-icon.ts +36 -36
- package/src/extensions/node/fs/index.ts +12 -3
- package/src/extensions/node/fs-promises/index.ts +15 -6
- package/src/parser/declarations/classes.ts +4 -0
- package/src/parser/declarations/functions.ts +12 -1
- package/src/parser/modules.ts +8 -4
- package/src/parser/parser.ts +28 -0
|
@@ -1,141 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Node 扩展:未实现(已迁移)
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
本文档基于对 Node 扩展源码(`src/extensions/node/`)与 C 运行时(`runtime/ext_node/`)的逐文件核对整理,列出 **Node 扩展当前未实现 / 缺失** 的功能。
|
|
6
|
-
|
|
7
|
-
> 相关文档:
|
|
8
|
-
> - 核心语言能力见 [implemented.md](implemented.md) / [unimplemented.md](unimplemented.md)
|
|
9
|
-
> - Node 扩展已实现部分见 [node-implemented.md](node-implemented.md)
|
|
10
|
-
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
## 1. `fs` 模块未实现
|
|
14
|
-
|
|
15
|
-
`fs` 现在实现了**同步** API 表面(文件、目录、描述符、元数据、链接、`cp`、`glob`、`Dir`、`constants`),`fs/promises` 将每个同步函数包进已 settle 的 Promise(见 [node-implemented.md](node-implemented.md))。其余仍未实现,因为 xbintsc 的 `fs` **没有异步 I/O 调度器后端**(核心事件循环已提供定时器与套接字):
|
|
16
|
-
|
|
17
|
-
| 未实现 API | 类别 |
|
|
18
|
-
| --- | --- |
|
|
19
|
-
| `readFile` / `writeFile` / `appendFile` / `open` / `close` / `read` / `write` / `stat` / … | 回调式异步文件操作(`fs/promises` 提供 Promise 形式) |
|
|
20
|
-
| `createReadStream` / `createWriteStream` | 流式读写 |
|
|
21
|
-
| `watch` / `watchFile` | **真正的**文件监听:函数存在但返回对象从不触发(无 inotify/kqueue 后端) |
|
|
22
|
-
| `openAsBlob`、`statfs` 回调形式、`rmdir` 的 `maxRetries` / `retryDelay` | 需异步重试的杂项选项 |
|
|
23
|
-
| `glob` 的 `exclude` / `follow`、`cp` 的 `filter` | 选项回调 |
|
|
24
|
-
|
|
25
|
-
### 1.1 读取语义缺口
|
|
26
|
-
|
|
27
|
-
- `readFileSync` 支持编码选项(默认/`utf8`/`ascii`/`latin1`/`binary`/`hex`/`base64`/`base64url`),但默认**不返回 `Buffer`**:即使提供了 `Buffer`(以普通对象模拟),`readFileSync` 仍以字符串返回。要读取原始字节请显式指定。
|
|
28
|
-
- 未实现 `utf16le` / `ucs2` 解码(按文本返回字节)。
|
|
29
|
-
- `watch` / `watchFile` / `unwatchFile` 返回 API 形态的发射器对象,`.close()` / `.on()` 方法存在但**不会触发**事件。
|
|
30
|
-
- `Dir.read(cb)` / `Dir.close(cb)` 与 `FileHandle` 异步方法都会**同步**完成(回调/Promise 立即被调用)。
|
|
31
|
-
- `mkdtempSync` 总是向前缀追加 6 个随机字符(不要求以 `XXXXXX` 结尾)。
|
|
32
|
-
- `globSync` 支持 `*`、`?`、`[...]`、`**`,但不支持 `exclude` 回调与 `follow`;`**` 不跟随符号链接(与 Node 默认一致)。
|
|
33
|
-
- `cpSync` 的符号链接处理在常见场景下与 Node 一致,但不支持 `verbatimSymlinks`。
|
|
34
|
-
- 平台差异:Windows 上 `readlinkSync` 抛 `ENOSYS`,`chmodSync` / `lchmodSync` / `chownSync` / `lchownSync` / `fchmodSync` / `fchownSync` 为空操作;`statfsSync` 在 Windows/AIX/Sun 返回全零字段;`lutimesSync` 在 macOS/Windows 退化为 `utimesSync`。
|
|
35
|
-
|
|
36
|
-
---
|
|
37
|
-
|
|
38
|
-
## 2. 其它 Node 模块完全未实现
|
|
39
|
-
|
|
40
|
-
以下 Node 内置模块没有任何对应扩展 / 内置函数(`fs` / `fs/promises` / `path` / `os` / `process` / `buffer` / `stream` / `dgram` / `http` / `events` / `util` / `querystring` / `assert` / `test` 已实现,`crypto` / `url` / `child_process` / `zlib` / `stream/promises` / `worker_threads` 部分实现,见 [node-implemented.md](node-implemented.md)):
|
|
41
|
-
|
|
42
|
-
| 模块 | 说明 |
|
|
43
|
-
| --- | --- |
|
|
44
|
-
| `https` | TLS 版 HTTP |
|
|
45
|
-
| `readline` | 命令行读取 |
|
|
46
|
-
| `tls` / `cluster` / `vm` / `os`(部分)等 | 其余未列出的模块 |
|
|
47
|
-
|
|
48
|
-
> `crypto`(仅 `createHash`,现支持流式 API)、`url`(仅 `pathToFileURL` / `fileURLToPath`)、
|
|
49
|
-
> `child_process`(仅 `spawnSync`)、`zlib`(仅 `createGzip`)与
|
|
50
|
-
> `worker_threads`(仅 `Worker` / `isMainThread` / `workerData` / `parentPort`)目前为部分实现。
|
|
51
|
-
|
|
52
|
-
---
|
|
53
|
-
|
|
54
|
-
## 3. Node 全局对象 / 命名空间
|
|
55
|
-
|
|
56
|
-
| 未实现 | 说明 |
|
|
57
|
-
| --- | --- |
|
|
58
|
-
| `global` / `globalThis` | 无 |
|
|
59
|
-
| `__dirname` / `__filename` | 无 |
|
|
60
|
-
| `require` / `module` / `exports` | 仅限 `node_modules` 内的包(打包器会降级);用户代码需使用 ESM `import` |
|
|
61
|
-
| 未 `import` 的 `fs.readFileSync(...)` | ✗ 不支持。`fs` 不是全局对象;请先导入(`import fs from "fs"` 或 `import * as fs from "node:fs"`),之后 `fs.readFileSync(...)` 会下降为该模块的运行时符号。 |
|
|
62
|
-
|
|
63
|
-
Node 模块通过裸名称或 `node:` 前缀的 `import` 引入(`import { readFileSync } from "fs"`、`import path from "path"`、`import { platform } from "node:os"`)。具名与命名空间导入都会解析到扩展模块的运行时入口。
|
|
64
|
-
|
|
65
|
-
已支持的命名空间调用:`path.*`、`os.*`、`process.*`、`fs.*`、`fs/promises.*`(方法)、`child_process.*`、`crypto.*`、`url.*`(需先导入;`path`/`os`/`process` 也可使用全局名),以及基于分发器的 `Buffer.*`、`stream.*`、`net.*`、`dgram.*`、`http.*` 和 `process.platform` / `process.argv` 等属性。`Readable` / `Writable` / `Duplex` / `Transform` / `PassThrough` / `Buffer` 亦可用作全局构造函数。
|
|
3
|
+
本页已迁移到 [Node 扩展:未实现](./unimplemented/node.md)。Node 文档现在按模块拆分在
|
|
4
|
+
`doc/zh-CN/unimplemented/node/` 下。
|
|
66
5
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
## 4. 异步 / 事件循环模型
|
|
70
|
-
|
|
71
|
-
已实现部分:
|
|
72
|
-
|
|
73
|
-
- 核心事件循环 `runtime/xt_loop.c`(`select(2)` 反应堆),`net` / `dgram` / `http` 均构建于其上。
|
|
74
|
-
- `Promise`、`async` / `await` 已可用(见核心文档),`fs/promises` 返回 Promise。
|
|
75
|
-
- 定时器已作为全局函数提供:`setTimeout` / `clearTimeout` / `setInterval` / `clearInterval` 运行在核心反应堆上,并在仍有定时器时保持进程存活。
|
|
76
|
-
- 提供独立的 `EventEmitter`(`events` 模块,同时也是全局构造函数);流与套接字额外具备内部发射器方法(`on` / `addListener` / `once` / `off` / `removeListener` / `emit`)。
|
|
77
|
-
|
|
78
|
-
仍未实现:
|
|
79
|
-
|
|
80
|
-
- `setImmediate` / `queueMicrotask` 以及 Node 的 `Timeout` 对象(`setTimeout` 返回数字 id)。
|
|
81
|
-
- 真正的异步 I/O 调度:`fs/promises` 实质是同步操作的即时 settle 包装,不会在等待 I/O 时让出。
|
|
82
|
-
- 流与套接字的内置 `once` 等同 `on`(不具「触发一次后移除」语义);`events` 模块的 `EventEmitter` 实现了真正的 `once`。
|
|
83
|
-
- `net` 的 `connect` 为阻塞式;HTTP 响应要求 `Connection: close`,不做 keep-alive / 分块传输 / 流水线复用。
|
|
84
|
-
|
|
85
|
-
---
|
|
86
|
-
|
|
87
|
-
## 5. Bun 扩展未实现
|
|
88
|
-
|
|
89
|
-
设计文档中提到的 `Bun.file` 等 Bun API 仅作为扩展机制的设计示例,**尚未实现**:
|
|
90
|
-
|
|
91
|
-
- 无 `bun` 扩展目录、无 Bun 内置函数、无 Bun C 运行时。
|
|
92
|
-
- `src/extensions/` 下目前只有 `node` 一个平台扩展(外加核心扩展)。
|
|
93
|
-
|
|
94
|
-
---
|
|
95
|
-
|
|
96
|
-
## 6. 速查:Node 扩展未实现清单
|
|
97
|
-
|
|
98
|
-
```
|
|
99
|
-
已实现(fs):完整同步表面 —— readFileSync(含编码)、readTextFile、
|
|
100
|
-
writeFileSync、appendFileSync、existsSync、readdirSync(withFileTypes/recursive)、
|
|
101
|
-
mkdirSync、rmSync、unlinkSync、rmdirSync、renameSync、copyFileSync、cpSync、
|
|
102
|
-
realpathSync、statSync、lstatSync、statfsSync、accessSync、chmodSync、lchmodSync、
|
|
103
|
-
chownSync、lchownSync、truncateSync、utimesSync、lutimesSync、mkdtempSync、
|
|
104
|
-
linkSync、symlinkSync、readlinkSync、opendirSync(Dir)、globSync、watch、
|
|
105
|
-
watchFile、unwatchFile、constants、
|
|
106
|
-
openSync、closeSync、readSync、writeSync、readvSync、writevSync、fstatSync、
|
|
107
|
-
fsyncSync、fdatasyncSync、ftruncateSync、fchmodSync、fchownSync、futimesSync
|
|
108
|
-
已实现(fs/promises):readFile、writeFile、appendFile、mkdir、readdir、rm、unlink、
|
|
109
|
-
rmdir、rename、copyFile、cp、realpath、stat、lstat、statfs、access、
|
|
110
|
-
open(FileHandle)、chmod、lchmod、chown、lchown、truncate、utimes、
|
|
111
|
-
lutimes、link、symlink、readlink、mkdtemp、opendir、glob、watch、constants
|
|
112
|
-
已实现(其它模块):path(join/resolve/normalize/dirname/basename/extname/isAbsolute/relative)、
|
|
113
|
-
os(platform/arch/type/release/endianness/homedir/tmpdir/hostname/totalmem/freemem/cpus)、
|
|
114
|
-
process(cwd/exit/uptime/hrtime/getuid/platform/arch/pid/ppid/argv/env/version/title)、
|
|
115
|
-
buffer(from/alloc/isBuffer/byteLength/concat/compare + 实例方法)、
|
|
116
|
-
stream(Readable/Writable/Duplex/Transform/PassThrough、pipe)、
|
|
117
|
-
net(createServer/connect/isIP + Server/Socket)、
|
|
118
|
-
dgram(createSocket + bind/send/close/address)、
|
|
119
|
-
http(createServer/request/get + req/res)、
|
|
120
|
-
events(EventEmitter:on/once/off/emit/listeners/listenerCount/eventNames)、
|
|
121
|
-
util(format/inspect/isDeepStrictEqual/inherits/promisify + isX)、
|
|
122
|
-
querystring(parse/stringify/escape/unescape)、
|
|
123
|
-
crypto(createHash + 流式 API,SHA-1/SHA-256)、
|
|
124
|
-
url(仅 pathToFileURL/fileURLToPath)、
|
|
125
|
-
child_process(仅 spawnSync)、
|
|
126
|
-
zlib(仅 createGzip)、stream/promises(仅 pipeline)、
|
|
127
|
-
worker_threads(仅 Worker/isMainThread/workerData/parentPort)
|
|
128
|
-
|
|
129
|
-
未实现(fs):回调式异步文件操作(readFile/writeFile/appendFile/open/read/write/close)、
|
|
130
|
-
createReadStream/createWriteStream、真正的文件监听(watch/watchFile 对象从不触发)、
|
|
131
|
-
glob exclude/follow、cp filter、utf16le 解码、readFileSync 返回 Buffer
|
|
132
|
-
|
|
133
|
-
未实现(其它模块):https、readline、tls、cluster、vm
|
|
134
|
-
|
|
135
|
-
未实现(全局/命名空间):global/globalThis、__dirname、__filename、
|
|
136
|
-
require/module/exports、fs.readFileSync(...) 命名空间调用
|
|
137
|
-
|
|
138
|
-
未实现(异步):setImmediate / queueMicrotask、真正异步 I/O 调度、keep-alive
|
|
139
|
-
|
|
140
|
-
未实现(平台):Bun 扩展(仅设计示例)
|
|
141
|
-
```
|
|
6
|
+
> 语言 / Language:[English](../node-unimplemented.md) | **简体中文**
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
> `__dirname` / `__filename`、`Object.defineProperty` getter 形式。详见下文 4.x 与 `unimplemented.md`。
|
|
10
10
|
>
|
|
11
11
|
> 目标版本:0.4.x
|
|
12
|
-
> 关联文档:[unimplemented.md](./unimplemented.md)
|
|
12
|
+
> 关联文档:[unimplemented/modules.md](./unimplemented/modules.md)(模块系统)、[implemented/modules.md](./implemented/modules.md)
|
|
13
13
|
|
|
14
14
|
## 1. 背景与现状
|
|
15
15
|
|
|
@@ -223,7 +223,7 @@ hasModuleSyntax(entry) || entryAstContainsRequire(entry)
|
|
|
223
223
|
| **P4** | require 调用点重写 + 诊断(4.7) | 单测:node_modules 内重写为 `__load`,外部保持报错 |
|
|
224
224
|
| **P5** | ESM→CJS 互操作 default/named/namespace(4.6) | 差分测试:与 Node 输出一致(default 函数、命名导出、`__esModule`) |
|
|
225
225
|
| **P6** | 扩展模块 / 可选:`require(esm)`、JSON 模块 | 按需 |
|
|
226
|
-
| **P7** | 文档更新:implemented / unimplemented
|
|
226
|
+
| **P7** | 文档更新:implemented / unimplemented 的 modules 页面、README | 文档评审 |
|
|
227
227
|
|
|
228
228
|
每个阶段都应保持现有测试全绿;P0 单独可合入。
|
|
229
229
|
|
|
@@ -237,13 +237,13 @@ hasModuleSyntax(entry) || entryAstContainsRequire(entry)
|
|
|
237
237
|
| `src/driver/bundler/graph.ts` | 格式判定、收集 `require` 依赖、递归加载 |
|
|
238
238
|
| `src/driver/bundler/merge.ts` | CJS 工厂包装、注册/加载语句注入、require 重写、互操作、依赖表 |
|
|
239
239
|
| `src/driver/bundler/cjs.ts`(新增) | 加载器源码字符串 + 工厂/依赖表/DepsMap 的 AST 构造 helper |
|
|
240
|
-
| `src/driver/
|
|
240
|
+
| `src/driver/frontend.ts` | `isModule` 扩展(4.8),`cacheText` 覆盖新注入代码 |
|
|
241
241
|
| `src/codegen/generator/context.ts` | `reportRequireUse` 文案更新(node_modules 限定) |
|
|
242
242
|
| `tests/driver/bundler-resolve.test.ts` | 解析/格式/条件单测 |
|
|
243
243
|
| `tests/driver/bundler-cjs.test.ts`(新增) | 工厂包装与重写单测 |
|
|
244
244
|
| `tests/e2e/npm-modules.test.ts` | CJS 包 e2e + 差分 |
|
|
245
245
|
| `tests/parser/*` | P0 回归 |
|
|
246
|
-
| `doc/implemented.md`、`doc/unimplemented.md`、`doc/zh-CN/*` |
|
|
246
|
+
| `doc/implemented/modules.md`、`doc/unimplemented/modules.md`、`doc/zh-CN/*` | 模块状态更新 |
|
|
247
247
|
|
|
248
248
|
## 7. 测试计划
|
|
249
249
|
|
|
@@ -44,6 +44,12 @@ build/app.ll:382:37: error: '@.str.0' defined with type '[6 x i8]*' but expected
|
|
|
44
44
|
Windows 发布包面向 **MSVC ABI**:clang 使用 Windows SDK
|
|
45
45
|
以及 MSVC 的 C/C++ 运行库与头文件。
|
|
46
46
|
|
|
47
|
+
可选优化特性额外依赖两个工具:
|
|
48
|
+
|
|
49
|
+
- `--lto` 需要 **lld**(`-fuse-ld=lld`);上面的 LLVM 安装包已包含。
|
|
50
|
+
- `--pgo-use` 需要 **llvm-profdata** 合并 `.profraw`。驱动优先使用 clang
|
|
51
|
+
旁边的副本,可用 `xbintsc_LLVM_PROFDATA` 覆盖。
|
|
52
|
+
|
|
47
53
|
## 预编译发布包(推荐)
|
|
48
54
|
|
|
49
55
|
从 [GitHub Releases](https://github.com/zy445566/xbintsc/releases/latest) 下载对应
|
|
@@ -107,9 +113,10 @@ sudo apk add clang lld # Alpine
|
|
|
107
113
|
用 `clang --version` 验证。如果 xbintsc 用错了链接器,可用 `xbintsc_CLANG` 指定
|
|
108
114
|
clang,并通过 `xbintsc_LINKER_ARGS` 追加参数(例如 `-fuse-ld=lld`)。
|
|
109
115
|
|
|
110
|
-
## Windows —— 安装
|
|
116
|
+
## Windows —— 安装 MSVC C++ 生成工具(与 LLVM)
|
|
111
117
|
|
|
112
|
-
|
|
118
|
+
Windows 上的 xbintsc 面向 **MSVC ABI**。用 `winget` 安装 Visual Studio C++
|
|
119
|
+
生成工具和 LLVM:
|
|
113
120
|
|
|
114
121
|
```powershell
|
|
115
122
|
winget install -e --id LLVM.LLVM
|
|
@@ -117,15 +124,22 @@ winget install -e --id Microsoft.VisualStudio.2022.BuildTools `
|
|
|
117
124
|
--override "--quiet --wait --add Microsoft.VisualStudio.Workload.VCTools --includeRecommended"
|
|
118
125
|
```
|
|
119
126
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
127
|
+
Visual Studio 2022 自带的 LLVM(`VC\Tools\Llvm\x64\bin\clang.exe`,当前版本
|
|
128
|
+
19.1.5)已经够用,独立安装的 LLVM 也可以。但编译器必须以 MSVC ABI 为目标
|
|
129
|
+
(`Target: *-windows-msvc`):面向其他 Windows ABI 的 clang 无法与 MSVC
|
|
130
|
+
运行库链接,`xbintsc` 会直接给出明确错误并拒绝使用。
|
|
131
|
+
|
|
132
|
+
通常**不再需要**开发者命令提示符:`xbintsc` 会按绝对路径找到 Visual Studio
|
|
133
|
+
自带的 LLVM,而这个 clang 会自行定位 MSVC/SDK 的头文件、库与链接器。如果你的
|
|
134
|
+
安装仍需要显式导入环境,可在 **x64 Native Tools Command Prompt for VS 2022**
|
|
135
|
+
(Windows on ARM 上用 **ARM64 Native Tools**)中构建,或手动导入:
|
|
123
136
|
|
|
124
137
|
```powershell
|
|
125
138
|
& "$env:ProgramFiles\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" x64
|
|
126
139
|
```
|
|
127
140
|
|
|
128
|
-
用 `clang --version
|
|
141
|
+
用 `xbintsc doctor`(或 `clang --version`)验证;输出会列出解析到的编译器、
|
|
142
|
+
版本与目标。
|
|
129
143
|
|
|
130
144
|
## 从源码构建(仅贡献者需要)
|
|
131
145
|
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# 类与面向对象
|
|
2
|
+
|
|
3
|
+
> 属于[未实现语法与功能](../unimplemented.md) · [English](../../unimplemented/classes.md)
|
|
4
|
+
|
|
5
|
+
| 特性 | 现状 |
|
|
6
|
+
| --- | --- |
|
|
7
|
+
| `class` 声明 / 类表达式 | ✓ 已实现 |
|
|
8
|
+
| 构造函数 `constructor` | ✓ |
|
|
9
|
+
| 实例字段 / 属性声明 | ✓ |
|
|
10
|
+
| 方法 | ✓ |
|
|
11
|
+
| `static` 字段 / 方法 | ✓ |
|
|
12
|
+
| 继承 `extends` / `super` | ✓(单级正确;`super` 取 `this` 原型的原型,理论缺陷见[运行时偏差](./deviations.md)) |
|
|
13
|
+
| 原型链 / 方法查找 | ✓ |
|
|
14
|
+
| `instanceof` | ✓ |
|
|
15
|
+
| `new` / 实例化 | ✓ |
|
|
16
|
+
| `get` / `set` 访问器 | ✓ 已实现 |
|
|
17
|
+
| 参数属性 `constructor(public x: T)` | ✓ 已实现 |
|
|
18
|
+
| 私有字段 `#x` | ✓ 已实现(以字面量 `#x` 作为键存储;无访问控制强制) |
|
|
19
|
+
| `enum` / `const enum` | ✓ 已实现(正向 + 反向映射) |
|
|
20
|
+
| `private` / `protected` / `public` / `readonly` 修饰符 | ✗ 无访问控制(擦除) |
|
|
21
|
+
| `abstract` / `implements` | ✗(擦除) |
|
|
22
|
+
| 父子类 `#x` 同名 | ✗ 可能混用(同一字面量键) |
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# 运行时偏差
|
|
2
|
+
|
|
3
|
+
> 属于[未实现语法与功能](../unimplemented.md) · [English](../../unimplemented/deviations.md)
|
|
4
|
+
|
|
5
|
+
这些特性**能编译、能运行**,但结果不完全符合 ECMAScript:
|
|
6
|
+
|
|
7
|
+
| 项 | 偏差 |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| 正则按字节匹配 | 引擎按 UTF-8 字节匹配:多字节字面量仍可匹配,但 `.` 与字符类每次只消费一个字节(`\d`/`\w` 仍是 ASCII)。`exec` / `search` / 替换回调返回的偏移会转换为 UTF-16 码元 |
|
|
10
|
+
| 全局正则 `lastIndex` | `/g`、`/y` 正则的 `test` / `exec` 不推进也不读取调用方设置的 `lastIndex` |
|
|
11
|
+
| `String.normalize` | 未实现 |
|
|
12
|
+
| 内置方法一等公民 | 以未绑定方法值实现(见[函数](./functions.md));`fn.toString()` 返回占位字符串而非源码文本 |
|
|
13
|
+
| `for...in` | 枚举对象 / 数组 / 字符串的自身键;不含原型链属性 |
|
|
14
|
+
| 数组越界 / 稀疏 | 越界访问返回 `undefined`;对 `arr.length` 赋值会截断 / 扩展,但不区分稀疏空洞 |
|
|
15
|
+
| 内存管理 | 非移动标记-清扫回收器(在 `xt_alloc` 之后):显式根、子系统根提供者与保守 C 栈扫描。单线程、stop-the-world;无移动/压缩与分代 |
|
|
16
|
+
| 函数 `arity` / 调用参数个数 | 无参数个数校验;`fn.length` 报告声明的 arity,但调用不做校验 |
|
|
17
|
+
| `async` / `await` | 已在栈式协程上真实挂起;`await` 总会排入一次微任务(非 Promise 与已 settle 的 Promise 也一样),因此与 pending `.then` 回调的交错顺序符合规范。顶层 `await` 会阻塞事件循环等待,而不是让出模块主体。`fs/promises` 与 `fetch` 把阻塞工作 offload 到 4 线程池并在 reactor 上 settle。异步生成器可在 `await` 与 `yield` 处挂起,`for await...of` 每次迭代等待一步 |
|
|
18
|
+
| 异步生成器清理 | `for await...of` 提前退出时不会调用迭代器的 `return()`。异步生成器中的 `yield*` 只委托同步可迭代对象。在挂起的 `yield` 处调用 `.return()` 会直接完成而不执行 `finally`(与同步生成器相同的限制) |
|
|
19
|
+
| `super` | `super.x` / `super(...)` 取 `this` 原型的原型;单级继承正确,继承深度 > 1 时可能不准确 |
|
|
20
|
+
| `Error.stack` | 仅函数级帧:每帧为 `at 名称 (文件:行)`,行号取自函数声明(最内层帧会更新为错误构造处);没有列号,生成器 / `async` 函数体不产生帧(它们会切换栈) |
|
|
21
|
+
| 模块实时绑定 | 命名空间导入与导入绑定为快照(见[模块系统](./modules.md)) |
|
|
22
|
+
| `import.meta` | ✓ `import.meta.url` / `.dirname` / `.filename`,由可执行文件路径解析 |
|
|
23
|
+
|
|
24
|
+
> 数字格式化、宽松相等、`+` / 关系运算 `ToPrimitive`、整链可选链、`finally` 提前退出、对象键顺序等均已对齐 Node,并由差分测试覆盖,故不再列为偏差。
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# 表达式与运算符
|
|
2
|
+
|
|
3
|
+
> 属于[未实现语法与功能](../unimplemented.md) · [English](../../unimplemented/expressions.md)
|
|
4
|
+
|
|
5
|
+
## 解析但代码生成报 `UnsupportedFeature`
|
|
6
|
+
|
|
7
|
+
无——生成器已实现。
|
|
8
|
+
|
|
9
|
+
> 标记模板已实现,含 raw 字符串与 `String.raw`。生成器(`function*`、`yield`、`yield*`)
|
|
10
|
+
> 基于有栈协程实现,支持 `next`/`throw`/`return`、`for...of`、展开与委托;
|
|
11
|
+
> `async function*` 与 `for await...of` 已实现:函数体可在 `await` 与 `yield` 两处挂起,
|
|
12
|
+
> 每次 `.next()` 返回 Promise。`import.meta` 提供 `url`、`dirname`、`filename`,
|
|
13
|
+
> 由正在运行的可执行文件路径解析(见[模块系统](./modules.md))。
|
|
14
|
+
|
|
15
|
+
## 解析器不支持
|
|
16
|
+
|
|
17
|
+
目前未知有表达式级别的缺口。
|
|
18
|
+
|
|
19
|
+
## 运算符未实现
|
|
20
|
+
|
|
21
|
+
| 运算符 | 现状 | 说明 |
|
|
22
|
+
| --- | --- | --- |
|
|
23
|
+
| `new.target` | ✗ | 已解析,但以 `UnsupportedFeature` 明确拒绝(无 `new.target` 语义) |
|
|
24
|
+
| `typeof` / `void` / `in` / `delete` / `instanceof` | ✓ | 映射到运行时辅助函数(`xt_typeof`、`xt_in`、`xt_delete`、`xt_instance_of`) |
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# 函数
|
|
2
|
+
|
|
3
|
+
> 属于[未实现语法与功能](../unimplemented.md) · [English](../../unimplemented/functions.md)
|
|
4
|
+
|
|
5
|
+
| 特性 | 解析 | 语义 |
|
|
6
|
+
| --- | --- | --- |
|
|
7
|
+
| 默认参数 `function f(a = 5)` | ✓ | ✓ 已实现 |
|
|
8
|
+
| 剩余参数 `function f(...args)` | ✓ | ✓ 已实现 |
|
|
9
|
+
| 调用参数展开 `f(...args)` | ✓ | ✓ 已实现 |
|
|
10
|
+
| 解构参数 / 解构绑定 | ✓ | ✓ 已实现 |
|
|
11
|
+
| `arguments` 对象 | ✓(隐式) | ✓ 已实现(箭头函数取的是自身参数,而非外层函数的 `arguments`,与 JS 不同) |
|
|
12
|
+
| `this` 绑定 / 方法调用语义 | ✓ | ✓ 已实现(`this` 作为函数首个 ABI 参数线程化;箭头函数词法继承) |
|
|
13
|
+
| `async` / `await` / Promise | ✓ | ✓ 已实现:基于栈式协程的真实挂起;等待 pending promise 会暂停函数体并由事件循环恢复(剩余差异见偏差表) |
|
|
14
|
+
| `new.target` | ✗ | 已解析,但以 `UnsupportedFeature` 明确拒绝(无 `new.target` 语义) |
|
|
15
|
+
| 生成器 / 迭代器 / `yield` | ✓ 已实现 | `function*`、`yield`、`yield*`、`.next/.throw/.return`;`async function*`、`for await...of` 与 `Symbol.asyncIterator` 也已支持 |
|
|
16
|
+
| 闭包 `arity` | — | `xt_closure_arity` 恒为 -1,未填充 |
|
|
17
|
+
| `fn.call` / `fn.apply` / `fn.bind` | ✓ | ✓ 已实现(绑定闭包不跟踪部分参数的 `length`) |
|
|
18
|
+
| `fn.name` / `fn.length` | ✓ | ✓ 已实现(从声明 / 赋值 / 属性键推断;绑定函数为 `"bound ..."` 并调整 arity) |
|
|
19
|
+
| 内置方法一等公民(`typeof arr.map`、`const f = arr.push`、`obj.method?.()`) | ✓ | ✓ 作为**未绑定**方法值实现:读取 `arr.map` 得到函数,`arr.map?.(cb)` 与 `obj.method?.()` 会把接收者作为 `this` 绑定,脱离接收者调用(`const f = arr.map; f(cb)`)会像 JavaScript 一样抛错。方法的 `name`/`length` 也一并暴露 |
|
|
20
|
+
| 内建构造器一等公民(`const A = Array`、`new A(...)`、`typeof Map`) | ✓ | ✓ 构造器是普通函数值,带 `name`/`length`、`prototype`、静态成员(`A.isArray`)与完整的 `instanceof` 协议 |
|
|
21
|
+
| `fn.toString()` | ~ | 返回原生占位字符串(`function name() { [native code] }`),而非原始源码文本 |
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# 模块系统
|
|
2
|
+
|
|
3
|
+
> 属于[未实现语法与功能](../unimplemented.md) · [English](../../unimplemented/modules.md)
|
|
4
|
+
|
|
5
|
+
| 功能 | 现状 |
|
|
6
|
+
| --- | --- |
|
|
7
|
+
| 多文件 / 模块解析与链接 | ✓ 驱动层 AST 打包(`src/driver/modules.ts`):解析每个模块、按模块前缀重命名顶层符号、改写引用后合并为单文件重新绑定 |
|
|
8
|
+
| 具名导入导出 | ✓ `import { a, b as c }` / `export { a as b }` / `export const/let/var/function/class` |
|
|
9
|
+
| 默认导入导出 | ✓ `export default` / `import d from` |
|
|
10
|
+
| 再导出 `export { x } from` / `export * from` | ✓(`export *` 复制依赖模块的导出) |
|
|
11
|
+
| 命名空间导入 `import * as ns` | ✓ 降级为持有全部导出的合成对象字面量 |
|
|
12
|
+
| 循环依赖 | ✗ 直接报错(不做循环初始化语义) |
|
|
13
|
+
| 实时绑定(live bindings) | ✗ 命名空间对象与导入绑定是模块求值时的快照 |
|
|
14
|
+
| ESM `node_modules` 包 | ✓ 裸说明符沿目录树解析,支持 `exports` / `module` / `main`、作用域包与子路径;包源码与相对模块一样被打包 |
|
|
15
|
+
| CommonJS `require` / `module.exports` | ✓ 仅限 `node_modules` 内:打包器为每个 CommonJS 包注入合成的 `module` / `exports`,将 `require("x")` 降级为依赖的导出对象,并把外部/内置 `require` 提升为 ESM `import`。用户代码(`node_modules` 之外)的 `require()` 仍会报错并提示改用 ESM `import` |
|
|
16
|
+
|
|
17
|
+
> 扩展模块(如 `fs`)可通过裸名称或 `node:` 前缀的 `import` 引入 —— `import { readFileSync } from "fs"` / `import path from "path"` —— 并解析到运行时入口(具名、默认与命名空间形式均可)。相对模块与 `node_modules` 中的 ESM/CJS 包均在驱动层打包。
|
|
18
|
+
|
|
19
|
+
这份契约的已实现部分见[模块系统](../implemented/modules.md)。
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# 异步与事件循环模型
|
|
2
|
+
|
|
3
|
+
> 属于[Node 扩展:未实现](../node.md) · [English](../../../unimplemented/node/async.md)
|
|
4
|
+
|
|
5
|
+
已实现部分:
|
|
6
|
+
|
|
7
|
+
- 核心事件循环 `runtime/xt_loop.c`(`select(2)` 反应堆),`net` / `dgram` / `http` 均构建于其上。
|
|
8
|
+
- 异步 I/O offload `runtime/xt_async_io.c`:阻塞的文件与 HTTP 客户端工作在 4 个工作线程上执行,并在 reactor 上完成,因此 `fs/promises` 与 `fetch` 不会卡住定时器或套接字。
|
|
9
|
+
- `Promise`、`async` / `await` 已可用(见核心文档),`fs/promises` 返回从 reactor settle 的 Promise。
|
|
10
|
+
- 定时器已作为全局函数提供:`setTimeout` / `clearTimeout` / `setInterval` / `clearInterval` 运行在核心反应堆上,并在仍有定时器时保持进程存活。
|
|
11
|
+
- 提供独立的 `EventEmitter`(`events` 模块,同时也是全局构造函数);流与套接字额外具备内部发射器方法(`on` / `addListener` / `once` / `off` / `removeListener` / `emit`)。
|
|
12
|
+
|
|
13
|
+
仍未实现:
|
|
14
|
+
|
|
15
|
+
- Node 的 `Timeout` 对象(`setTimeout` 返回数字 id;`setImmediate` 与 `queueMicrotask` 已作为全局函数提供)。
|
|
16
|
+
- 文件监听:`fs.watch` / `fs/promises.watch` 返回惰性对象;没有 inotify/kqueue/ReadDirectoryChangesW 后端。
|
|
17
|
+
- `Dir.read` / `Dir.close` 立即调用回调,回调式 `fs.readFile` / `fs.writeFile` / … 仍不支持(请用 `fs/promises` 或 `*Sync` 形式)。
|
|
18
|
+
- 流与套接字的内置 `once` 等同 `on`(不具「触发一次后移除」语义);`events` 模块的 `EventEmitter` 实现了真正的 `once`。
|
|
19
|
+
- `net` 的 `connect` 仍是在套接字加入 reactor 之前执行的阻塞 `connect(2)`;HTTP 响应要求 `Connection: close`,不做 keep-alive / 分块传输 / 流水线复用。`fetch` 没有 TLS,且在 resolve 前缓冲整个响应体。
|
|
20
|
+
- offload 线程池固定为 4 个 worker;没有线程池大小选项,也不支持对排队 job 的 `AbortSignal` 取消。
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# `fs/promises` 模块的缺口
|
|
2
|
+
|
|
3
|
+
> 属于[Node 扩展:未实现](../node.md) · [English](../../../unimplemented/node/fs-promises.md)
|
|
4
|
+
|
|
5
|
+
`fs/promises` 现在把阻塞 I/O offload 到异步 I/O 线程池(已实现表面见[已实现:`fs/promises`](../../implemented/node/fs-promises.md));剩余差异主要是行为层面的:
|
|
6
|
+
|
|
7
|
+
- `FileHandle.appendFile` 行为等同 `writeFile`(按当前文件位置写入,而不是追加)。
|
|
8
|
+
- `FileHandle.readFile()` 从当前描述符偏移读取。
|
|
9
|
+
- `Dir.read` / `Dir.close`(同步与 Promise 形式)立即调用回调;`Dir.readSync` / `closeSync` 仍是同步的。
|
|
10
|
+
- `watch` resolve 为与 `fs.watch` 相同的、永不触发的 watcher;没有真正的文件监听后端。
|
|
11
|
+
- 读写是一次性整体操作;没有流式 `FileHandle` 变体,也不支持 `AbortSignal` 取消。
|
|
12
|
+
- 线程池固定为 4 个 worker;大量并发操作会排队(但仍不会阻塞事件循环)。
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# `fs` 模块
|
|
2
|
+
|
|
3
|
+
> 属于[Node 扩展:未实现](../node.md) · [English](../../../unimplemented/node/fs.md)
|
|
4
|
+
|
|
5
|
+
`fs` 实现了**同步** API 表面(文件、目录、描述符、元数据、链接、`cp`、`glob`、`Dir`、`constants`),`fs/promises` 则把每个文件/描述符操作跑在异步 I/O 线程池上(见[已实现:`fs`](../../implemented/node/fs.md)与[已实现:`fs/promises`](../../implemented/node/fs-promises.md))。仍缺少的主要是需要不同后端或回调管线的 API:
|
|
6
|
+
|
|
7
|
+
| 未实现 API | 类别 |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| `readFile` / `writeFile` / `appendFile` / `open` / `close` / `read` / `write` / `stat` / … | 回调式异步文件操作(`fs/promises` 提供 Promise 形式) |
|
|
10
|
+
| `createReadStream` / `createWriteStream` | 流式读写 |
|
|
11
|
+
| `watch` / `watchFile` | **真正的**文件监听:函数存在但返回对象从不触发(无 inotify/kqueue 后端) |
|
|
12
|
+
| `openAsBlob`、`statfs` 回调形式、`rmdir` 的 `maxRetries` / `retryDelay` | 需异步重试的杂项选项 |
|
|
13
|
+
| `glob` 的 `exclude` / `follow`、`cp` 的 `filter` | 选项回调 |
|
|
14
|
+
|
|
15
|
+
## 读取语义缺口
|
|
16
|
+
|
|
17
|
+
- `readFileSync` 支持编码选项(默认/`utf8`/`ascii`/`latin1`/`binary`/`hex`/`base64`/`base64url`),但默认**不返回 `Buffer`**:即使提供了 `Buffer`(以普通对象模拟),`readFileSync` 仍以字符串返回。要读取原始字节请显式指定。
|
|
18
|
+
- 未实现 `utf16le` / `ucs2` 解码(按文本返回字节)。
|
|
19
|
+
- `watch` / `watchFile` / `unwatchFile` 返回 API 形态的发射器对象,`.close()` / `.on()` 方法存在但**不会触发**事件。
|
|
20
|
+
- `Dir.read(cb)` / `Dir.close(cb)` 会**同步**完成(回调立即被调用);`FileHandle` 方法现在返回真正的 Promise。
|
|
21
|
+
- `mkdtempSync` 总是向前缀追加 6 个随机字符(不要求以 `XXXXXX` 结尾)。
|
|
22
|
+
- `globSync` 支持 `*`、`?`、`[...]`、`**`,但不支持 `exclude` 回调与 `follow`;`**` 不跟随符号链接(与 Node 默认一致)。
|
|
23
|
+
- `cpSync` 的符号链接处理在常见场景下与 Node 一致,但不支持 `verbatimSymlinks`。
|
|
24
|
+
- 平台差异:Windows 上 `readlinkSync` 抛 `ENOSYS`,`chmodSync` / `lchmodSync` / `chownSync` / `lchownSync` / `fchmodSync` / `fchownSync` 为空操作;`statfsSync` 在 Windows/AIX/Sun 返回全零字段;`lutimesSync` 在 macOS/Windows 退化为 `utimesSync`。
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# 全局对象与命名空间
|
|
2
|
+
|
|
3
|
+
> 属于[Node 扩展:未实现](../node.md) · [English](../../../unimplemented/node/globals.md)
|
|
4
|
+
|
|
5
|
+
| 未实现 | 说明 |
|
|
6
|
+
| --- | --- |
|
|
7
|
+
| `global` / `globalThis` | 无 |
|
|
8
|
+
| `__dirname` / `__filename` | 无 |
|
|
9
|
+
| `require` / `module` / `exports` | 仅限 `node_modules` 内的包(打包器会降级);用户代码需使用 ESM `import` |
|
|
10
|
+
| 未 `import` 的 `fs.readFileSync(...)` | ✗ 不支持。`fs` 不是全局对象;请先导入(`import fs from "fs"` 或 `import * as fs from "node:fs"`),之后 `fs.readFileSync(...)` 会下降为该模块的运行时符号。 |
|
|
11
|
+
|
|
12
|
+
Node 模块通过裸名称或 `node:` 前缀的 `import` 引入(`import { readFileSync } from "fs"`、`import path from "path"`、`import { platform } from "node:os"`)。具名与命名空间导入都会解析到扩展模块的运行时入口。
|
|
13
|
+
|
|
14
|
+
已支持的命名空间调用:`path.*`、`os.*`、`process.*`、`fs.*`、`fs/promises.*`(方法)、`child_process.*`、`crypto.*`、`url.*`(需先导入;`path`/`os`/`process` 也可使用全局名),以及基于分发器的 `Buffer.*`、`stream.*`、`net.*`、`dgram.*`、`http.*` 和 `process.platform` / `process.argv` 等属性。`Readable` / `Writable` / `Duplex` / `Transform` / `PassThrough` / `Buffer` 亦可用作全局构造函数。
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# 完全未实现的模块
|
|
2
|
+
|
|
3
|
+
> 属于[Node 扩展:未实现](../node.md) · [English](../../../unimplemented/node/modules.md)
|
|
4
|
+
|
|
5
|
+
以下 Node 内置模块没有任何对应扩展 / 内置函数(`fs` / `fs/promises` / `path` / `os` / `process` / `buffer` / `stream` / `dgram` / `http` / `events` / `util` / `querystring` / `assert` / `test` 已实现,`crypto` / `url` / `child_process` / `zlib` / `stream/promises` / `worker_threads` 部分实现,见[已实现:Node 扩展](../../implemented/node.md)):
|
|
6
|
+
|
|
7
|
+
| 模块 | 说明 |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| `https` | TLS 版 HTTP |
|
|
10
|
+
| `readline` | 命令行读取 |
|
|
11
|
+
| `tls` / `cluster` / `vm` | 其余未列出的核心模块 |
|
|
12
|
+
|
|
13
|
+
> `crypto`(仅 `createHash`,现支持流式 API)、`url`(仅 `pathToFileURL` / `fileURLToPath`)、
|
|
14
|
+
> `child_process`(仅 `spawnSync`)、`zlib`(仅 `createGzip`)与
|
|
15
|
+
> `worker_threads`(仅 `Worker` / `isMainThread` / `workerData` / `parentPort`)目前为部分实现。
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Node 扩展:未实现
|
|
2
|
+
|
|
3
|
+
> 属于[未实现语法与功能](../unimplemented.md) · [English](../../unimplemented/node.md)
|
|
4
|
+
|
|
5
|
+
Node 扩展实现了 21 个模块以及事件循环集成;已实现表面按模块记录在
|
|
6
|
+
[Node 扩展:已实现](../implemented/node.md)。本节记录缺失或与 Node 不同之处。
|
|
7
|
+
|
|
8
|
+
## 目录
|
|
9
|
+
|
|
10
|
+
- [`fs`](./node/fs.md) —— 回调式异步操作、真正的文件监听、选项回调
|
|
11
|
+
- [`fs/promises`](./node/fs-promises.md) —— `FileHandle` 追加/读取偏移、`Dir` 回调立即完成、`watch` 不触发、无取消
|
|
12
|
+
- [完全未实现的模块](./node/modules.md) —— `https`、`readline`、`tls`、`cluster`、`vm` 等
|
|
13
|
+
- [全局对象与命名空间](./node/globals.md) —— `global`、`__dirname`、`node_modules` 之外的 `require`
|
|
14
|
+
- [异步与事件循环模型](./node/async.md) —— 文件监听缺失、阻塞式 `net.connect`、无 keep-alive、固定大小线程池
|
|
15
|
+
- [Bun 扩展](./node/bun.md) —— 仅为设计示例
|
|
16
|
+
|
|
17
|
+
模块的已实现页面会链接到对应限制页;限制解除后,把条目移到
|
|
18
|
+
`../implemented/node/` 下对应页面。
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# 语句
|
|
2
|
+
|
|
3
|
+
> 属于[未实现语法与功能](../unimplemented.md) · [English](../../unimplemented/statements.md)
|
|
4
|
+
|
|
5
|
+
## 解析但代码生成报 `UnsupportedFeature`
|
|
6
|
+
|
|
7
|
+
| 语法 | 现状 | 说明 |
|
|
8
|
+
| --- | --- | --- |
|
|
9
|
+
| `namespace` / `module` 声明 | 解析 ✓,代码生成 ✗ | → "does not yet support this statement (module declaration)" |
|
|
10
|
+
|
|
11
|
+
> 标签语句(`label: statement`、`break label`、`continue label`)已实现,包括非循环语句上的标签。
|
|
12
|
+
|
|
13
|
+
## 解析器不支持(直接语法错误)
|
|
14
|
+
|
|
15
|
+
目前未知有语句级别的缺口。解析器有意保持宽松,接受绝大多数 TypeScript 语句语法;不支持的形式会在代码生成阶段报错(见上)。
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# 标准库
|
|
2
|
+
|
|
3
|
+
> 属于[未实现语法与功能](../unimplemented.md) · [English](../../unimplemented/stdlib.md)
|
|
4
|
+
|
|
5
|
+
## 已实现(概要)
|
|
6
|
+
|
|
7
|
+
- 数组:`push` `pop` `shift` `unshift` `join` `slice` `splice` `indexOf` `lastIndexOf` `includes` `concat` `reverse` `forEach` `map` `filter` `reduce` `reduceRight` `find` `findIndex` `findLast` `findLastIndex` `some` `every` `sort` `flat` `flatMap` `fill` `copyWithin` `at` `keys` `values` `entries`,以及不可变的 `toReversed` / `toSorted` / `toSpliced` / `with`
|
|
8
|
+
- 字符串:`charAt` `charCodeAt` `codePointAt` `indexOf` `lastIndexOf` `includes` `startsWith` `endsWith` `slice` `substring` `substr` `split` `match` `replace` `replaceAll` `search` `toUpperCase` `toLowerCase` `trim` `trimStart` `trimEnd` `padStart` `padEnd` `repeat` `concat` `at` `localeCompare` `valueOf`
|
|
9
|
+
- `Math`:完整函数与常量
|
|
10
|
+
- `Object.keys` / `values` / `entries` / `assign` / `getOwnPropertyNames` / `groupBy`,对象展开 `{...obj}`
|
|
11
|
+
- 全局函数:`parseInt` `parseFloat` `isNaN` `isFinite` `Number` `String` `Boolean` `encodeURI` `decodeURI` `encodeURIComponent` `decodeURIComponent`
|
|
12
|
+
- `console.log` / `info` / `warn` / `error` / `dir` / `trace` / `assert` / `count` / `group` / `table` / `time`
|
|
13
|
+
|
|
14
|
+
## 已补齐
|
|
15
|
+
|
|
16
|
+
- `JSON.parse` / `JSON.stringify`
|
|
17
|
+
- `Date`、`RegExp`(POSIX ERE 子集,支持捕获组)、`Map`、`Set`、`Promise`、`BigInt`
|
|
18
|
+
- `Array` 静态(`isArray/of/from`)、`Object` 静态、`Number` 静态、`String` 静态(`fromCharCode` / `fromCodePoint` / `raw`)
|
|
19
|
+
- 一等公民内建构造器(`const A = Array`、`new A(...)`、`A.isArray`、`x instanceof A`)与 `Object.prototype`(`hasOwnProperty`、`toString`、`valueOf`、`isPrototypeOf`、`propertyIsEnumerable`、`__proto__`),且 `Object.getPrototypeOf({}) === Object.prototype`
|
|
20
|
+
- `Error` 家族(`Error`、`TypeError`、`RangeError`、`SyntaxError`、`ReferenceError`、`EvalError`、`URIError`、`AggregateError`):支持 `new`、`instanceof`、`extends`、`String(err)` / `err.toString()` 与 `.stack`
|
|
21
|
+
|
|
22
|
+
## 仍未实现
|
|
23
|
+
|
|
24
|
+
| 类别 | 现状 |
|
|
25
|
+
| --- | --- |
|
|
26
|
+
| `Symbol` 构造器与 symbol 原始值 | ✓ `Symbol(description)`、著名符号、`Symbol.for` / `Symbol.keyFor`、symbol 属性键与 `Object.getOwnPropertySymbols` |
|
|
27
|
+
| `String.prototype.normalize` | ✗ 未实现 |
|
|
28
|
+
| `structuredClone` | ✓ 数组、对象、Map、Set、Date、RegExp 与类型化数组(保留循环引用与共享引用);函数、symbol、Promise、生成器会被拒绝 |
|
|
29
|
+
| `JSON.stringify` 选项 | ✓ 支持 `space`(数字或字符串,最多 10 个单位)、函数/数组 `replacer` 与 `toJSON` |
|
|
30
|
+
| 内置错误子类(`TypeError`、`RangeError` 等) | ✓ 一等公民构造器与原型;整个家族 `instanceof Error` 成立 |
|
|
31
|
+
| `AggregateError` 构造器 | ✓ `new AggregateError(errors, message)`;`Promise.any` 现以其作为 rejection |
|
|
32
|
+
| 迭代器协议 / `Symbol.iterator` / `for...of` 自定义可迭代 | ✓ 数组、字符串、`Map`、`Set`、生成器以及任何暴露 `[Symbol.iterator]()` 的对象均可在 `for...of` / 展开中使用 |
|
|
33
|
+
| 生成器(`function*`、`yield`、`yield*`、`next`/`throw`/`return`) | ✓ 基于有栈协程实现;支持 `for...of`、展开与委托;`async function*`、`for await...of` 与 `Symbol.asyncIterator` 也已支持 |
|
|
34
|
+
| 定时器与微任务 | ✓ 核心事件循环提供 `setTimeout` / `clearTimeout` / `setInterval` / `clearInterval` / `setImmediate` / `clearImmediate` / `queueMicrotask` 与 `performance.now`(返回数字 id,无 `Timeout` / `Immediate` 对象)。定时器 settle 的 promise 可以被 await:async 函数体在 pending promise 上挂起,定时器触发时恢复 |
|
|
35
|
+
| I/O / 进程等宿主 API | 仅通过扩展(如 Node `fs`)提供 |
|
|
36
|
+
|
|
37
|
+
## 类型化数组
|
|
38
|
+
|
|
39
|
+
已实现:`Uint8Array`、`Int8Array`、`Uint8ClampedArray`、`Uint16Array`、
|
|
40
|
+
`Int16Array`、`Uint32Array`、`Int32Array`、`Float32Array`、`Float64Array`,支持
|
|
41
|
+
`new X(n)` / `new X(数组样)`、`X.from` / `X.of`、`BYTES_PER_ELEMENT`、按类型强制的
|
|
42
|
+
元素写入,以及 `fill` / `set` / `slice` / `subarray` / `join` / `toString` /
|
|
43
|
+
`indexOf` / `lastIndexOf` / `includes` / `forEach` / `map` / `filter` / `every` /
|
|
44
|
+
`some` / `find` / `findIndex` / `reduce` / `reverse` / `sort` / `copyWithin` /
|
|
45
|
+
`at` / `keys` / `values` / `entries`。已知差异:
|
|
46
|
+
|
|
47
|
+
| 功能 | 现状 |
|
|
48
|
+
| --- | --- |
|
|
49
|
+
| `subarray` | ✓ 返回共享同一缓冲区的视图;`slice` 复制 |
|
|
50
|
+
| `keys` / `values` / `entries` | ~ 返回数组,而非迭代器对象 |
|
|
51
|
+
| `ArrayBuffer` / `DataView` / `.buffer` / `.byteOffset` 语义 | ✓ `ArrayBuffer`(`slice`、`isView`)、`DataView`(默认大端,可选 `littleEndian`)、类型化数组由缓冲区支撑并暴露 `.buffer` / `.byteOffset`;`new X(buffer, offset, length)` 创建视图 |
|
|
52
|
+
| `BigInt64Array` / `BigUint64Array` | ✗ 未实现 |
|
|
53
|
+
| `instanceof` 内建构造器 | ✓ `instanceof Array` / `Object` / `Map` / `Set` / `Date` / `RegExp` / `Promise` / `Error` 家族 / 类型化数组都能按名字识别,**也能通过一等公民构造器值判断**(`const A = Array; x instanceof A`);构造器可保存、传参、取别名、调用与 `new` |
|
|
54
|
+
| 基于 `Buffer` / `ArrayBuffer` 的类型化数组视图 | ✓ 类型化数组与 `DataView` 共享 `ArrayBuffer` 字节;基于 `Buffer` 的视图仍未实现 |
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# 工具链、平台与工程
|
|
2
|
+
|
|
3
|
+
> 属于[未实现语法与功能](../unimplemented.md) · [English](../../unimplemented/toolchain.md)
|
|
4
|
+
|
|
5
|
+
| 项 | 现状 |
|
|
6
|
+
| --- | --- |
|
|
7
|
+
| GC(垃圾回收) | ✓ `xt_alloc.c` 中的非移动标记-清扫,按存活堆阈值(`XT_GC_THRESHOLD` 可固定该阈值)或 `xt_gc_collect()` 触发;每次回收后阈值变为存活堆的 2 倍(下限 1 MiB),因此常驻内存跟随存活集而不是只增不减;`XT_GC_TRACE=1` 会为每次回收向 stderr 打印一行统计。显式根 + 根提供者 + 保守活动栈扫描。`WeakMap`/`WeakSet` 的键是 ephemeron(只有键可达时才保留值),`WeakRef` 目标不可达时会被清空;由于栈扫描是保守的,残留的栈字可能延迟清空。无压缩或后台回收 |
|
|
8
|
+
| 自举(self-hosting) | ✓ 编译器已能自编译:`xbintsc build src/cli/main.ts` 可产出可用二进制,且从第 1 代起产出的 IR 保持稳定。运行时仍为 C |
|
|
9
|
+
| 类型检查器 | ✗ 仅定义诊断码,无 checker |
|
|
10
|
+
| 完整标准库 | 部分:Math / JSON / Date / Map / Set / RegExp / `Error` / `BigInt` / `Symbol` / `structuredClone` 已实现;String.normalize 缺失 |
|
|
11
|
+
| 多文件模块打包 | 部分:相对路径 `.ts` 打包、ESM `node_modules` 包、命名空间导入、裸说明符扩展模块导入已实现;CommonJS 仅在 `node_modules` 内处理;循环依赖 / 实时绑定未实现 |
|
|
12
|
+
| 异步运行时 | ✓ `async`/`await` 在 `select(2)` reactor 上对 pending promise 挂起:定时器、TCP 套接字、offload 的文件/HTTP 工作与 promise 回调都能恢复协程。仍缺:真正的 OS 级文件监听、非阻塞 `net.connect`、`fetch` 的 TLS,以及用户可见的 worker 线程(`worker_threads` 仍用子进程) |
|
|
13
|
+
| Windows 二进制产物验证 | 构建层已适配(`.exe` 后缀、链接参数分支),并在 CI 中验证 |
|
|
14
|
+
| 精确的 ECMAScript 数值 / 字符串 / 比较语义 | 部分,见[运行时偏差](./deviations.md) |
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# 类型系统
|
|
2
|
+
|
|
3
|
+
> 属于[未实现语法与功能](../unimplemented.md) · [English](../../unimplemented/types.md)
|
|
4
|
+
|
|
5
|
+
类型语法被解析为 AST 后在绑定 / 代码生成阶段**整体擦除**,不做任何类型检查:
|
|
6
|
+
|
|
7
|
+
- 类型注解、返回类型、类型参数、类型别名、接口、泛型约束等:解析 ✓,检查 ✗。
|
|
8
|
+
- 检查器诊断码(`TypeMismatch` `NotCallable` `PropertyNotFound` `ArgumentCountMismatch`)已定义但**未使用**。
|
|
9
|
+
- `as` / `satisfies` / 非空断言 `!`:直接擦除,不做任何断言语义。
|
|
10
|
+
- 泛型:无运行时实例化,类型参数被忽略。
|
|
11
|
+
- 可选链 `?.` 的类型窄化:无(运行时短路已实现,但无类型层面的窄化)。
|