返回资讯中心
外部精选
软件工程
#开发者实时流

geatsc 发布:将 TypeScript 提前编译为 C++ 以用于嵌入式开发

来源标题:TypeScript to C++ compiler for embedded work

geatsc 能把 TypeScript 提前编译成 C++,生成的代码不包含 JavaScript 引擎或解释器,可由 C++ 工具链构建为目标平台的原生二进制,覆盖 ESP32/RP2350 固件、桌面、移动和 Xbox 等。它利用 TypeScript 的类型信息把类、数字和容器映射为原生 C++ 表示,使同一份 TypeScript 能运行在微控制器上,并让编译后的服务端内存占用远低于 Node。

Hacker News 最新arbayi2026/11/15 · 今天11 分钟阅读

以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

geatsc 将 TypeScript 提前编译为 C++。输出不包含任何 JavaScript 引擎或解释器。C++ 工具链将其构建为目标平台的原生二进制文件:ESP32 或 RP2350 固件、macOS、iOS、Linux 或 Windows 应用、Xbox 游戏,或服务器可执行文件。

输入是普通的 TypeScript 程序,由 TypeScript 编译器进行类型检查。geatsc 利用这些类型来选择原生 C++ 表示:类变成结构体,数字变成原生数值类型,typed array、map 和 record 变成类型化容器。正是这一点让同一份 TypeScript 能够运行在微控制器上,也让编译后的服务器只需 Node 下同样代码所需内存的一小部分。

geatsc 是 GeaStack 的编译器,后者是一个用 TypeScript 和 JSX 编写应用、并让它们在嵌入式板卡、桌面、移动端和主机上原生运行的框架。其他仓库作为插件接入它:Gea 和 Apple 插件是对等依赖。其他插件通过 --plugin 加载;参见 docs/CLI-PLUGINS.md。

docs/ARCHITECTURE.md 描述了流水线、分层和约束。CLAUDE.md 包含代码规范。

identity/ 规范 ID semantics/ 目标无关的前端:区域、结构类型、操作、边、覆盖率 representation/ 物理载体、密封计划、故障关闭守卫 conversion/ 封闭的动态转换能力代数 preflight/ 全流水线能力普查与证书 ir/ 类型化 IR:经过验证的操作与 SSA 值 targets/cpp/ C++ 发射;仅消费类型化 IR diagnostics/ 权威组件扫描、确定性排序

semantics/ 是前端/后端的边界。它之后的任何内容都不得导入 typescript 或接触 TypeScript AST。

不得有源码形态的权威。任何决策都不得依赖于文件名、路径、源码偏移量、与字面量比较的 .pos/.end/getStart()、源码文本、声明或局部拼写、语句布局,或生成的 C++ 文本。身份是检查器符号/声明、密封的语义 ID,或带版本号的协议身份。

不得装箱。具有静态类型的值永远不会获得动态载体。Representation.dynamic 仅允许用于 src/representation/model.ts 中声明的四个 DynamicReason 值。

故障关闭。当守卫触发时,缺陷在上游。不要放宽守卫、不要降级未解析项,也不要为缺失的事实替换默认值。unresolved 是格底,不是答案。

架构门禁 scripts/architecture.mjs 检查 src/**/*.ts 中的以下问题:

node dist/cli.js test/fixtures/spread.ts 运行完整流水线并打印每一条诊断信息。当未铸造能力证书时以非零状态退出。--preflight 以规范 NDJSON 打印义务普查。

node dist/cli.js coverage app/index.ts --plugin ../node-compat/plugin/v2.mjs 每条语句打印一行,包含代码、状态和一行原因,随后是摘要和按代码统计的计数。装箱载体也作为行报告。仅当证书已铸造且降级或发射期间没有任何内容被拒绝时,才以 0 退出。

末尾数字索引 src/cli-coverage.ts 中的固定表,因此改写消息不会改变其代码。x999 表示该表没有对应行。

选项:--project/--no-project、--plugin、--plugin-option、--json(行和摘要作为一个对象)、--no-derived(仅根)、--no-boxed(仅拒绝项)。

node scripts/probe-carriers.mjs test/fixtures/language.ts 打印每个声明所选择的载体和 C++ 拼写,并统计未解析和装箱的载体。

node dist/cli.js compile app/index.ts --out-dir build/generated gea 构建流水线运行此命令(build-gea-vite-geatsc.mjs 通过 --geatsc-bin 传入它)。它写入 --out-dir:

compile-module-graph <gea-module-graph.json> --entry <file> 从 vite 的模块图而不是磁盘上的文件执行相同操作。应用构建使用此形式。它接受相同的选项。

Script Purpose

architecture 运行架构门禁

typecheck tsc -p tsconfig.json --noEmit

build 先运行架构门禁,然后编译到 dist/

format prettier --write .

format:check prettier --check .

check 架构门禁、类型检查和格式检查

License 编译器及其链接到生成程序中的运行时采用 Apache-2.0(参见 LICENSE)。你用 geatsc 编译的程序属于你自己;其许可证仅取决于它们链接的内容。GeaStack 框架以及桌面、移动端和 Web 目标同样采用 Apache-2.0。嵌入式板卡支持(targets、license。商业条款请联系 contact@geastack.com。

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →