scriptc预编译运行时包设计解析:只用多少就链接多少的链接计划
scriptc预编译运行时包设计解析只用多少就链接多少的链接计划【免费下载链接】scriptcTypeScript-to-Native Compiler项目地址: https://gitcode.com/GitHub_Trending/sc/scriptcscriptc 是一个 TypeScript 到原生可执行文件的编译器TypeScript-to-Native Compiler把 TS/JS 编译成类型化 IR、可读 C、LLVM IR 乃至本地可执行文件且运行产物完全不需要 Node.js 环境。它的「预编译运行时包」runtime pack正是支撑这一点的核心设计运行时 C 代码被预先编译成对象文件链接阶段只挑你真正用到的那部分参与链接——本文带你完整拆解这套「只用多少就链接多少」的链接计划link plan是如何实现的。为什么要用预编译运行时包传统做法是每次构建都现场编译几十份运行时 C 源文件见 packages/runtime/src/包含scr_string.c、scr_array.c、scr_async.c等 60 多个文件既慢又要求用户机器上装有完整 C 工具链。scriptc 换了一个思路平台包预编译每个平台macOS、Linux、Windows、WASI 等对应一个scriptc/runtime-platform包安装 scriptc 时按需拉取运行时对象已经编译好clang 只做链接驱动在 macOS 15 arm64 上普通 LLVM 层可执行文件构建使用打包助手 预编译运行时包clang 只充当平台链接器驱动不再编译任何程序或运行时 C 代码用户零成本不需要 C 编译器、归档工具或 SDK 即可完成构建。打个比方传统方式像每次点餐都从种菜开始而预编译运行时包像中央厨房——菜已备好后厨只需按你的订单取用。️运行时单元矩阵谓词驱动的按需选择整套机制的菜单定义在 runtime-pack-matrix.mjs 中分为两类类别说明示例基础单元所有可执行文件都链接scr_number.c、scr_string.c、scr_async.c等 24 个可选单元每个单元绑定一个谓词predicate命中才链接scr_regex.c需要regexscr_net.c需要netEffective谓词是布尔逻辑表达式支持三种写法[scr_assert.c, any(assert, regex, symbol)], // 任一命中即可 [scr_zlib_island.c, all(zlib, dynamic)], // 必须全部命中 [scr_stream.c, stream], // 单一特性开关编译器在分析你的程序后会得到一组NativeLinkFeatures特性开关定义于 native-link-info.ts例如regex、http、tls、dynamic等。有意思的是特性之间还会自动推导你用了fetch那么net、http、tls、zlib都会被视为有效TLS 和压缩栈随之自动进入链接清单见 runtime-pack.ts 的effectiveRuntimeFeatures。每个单元还有多个变体variant同一份源文件可以按宏组合编译出不同版本如SCR_DYNAMIC选择时按条件最精确者优先排序取用。此外还有四个厂商归档quickjs、libregexp、zlib、mbedtls同样受谓词控制——只有嵌入 quickjs 动态执行--dynamic时才会带上 quickjs 归档。链接计划是数据不是命令行真正产出链接清单的是 link-plan.ts。文件开头有一段值得记住的设计宣言计划是数据而非编译器驱动命令行。运行时包选择决定哪些对象存在目标规格决定驱动参数本模块决定程序、FFI 输入、运行时对象/归档与系统库按什么顺序交给平台链接器。最终输入的排列顺序是刻意设计的link-plan.ts程序对象 → FFI 库 → 运行时对象 → 运行时归档 → 系统库这个顺序保证了 FFI 归档必须跟随程序对象之后、运行时归档之前——静态链接器按输入顺序解析未定义符号顺序错了引用就会悄悄丢。计划对象NativeLinkPlan还携带了目标架构、优化级别release用-O2、dev用-O0、依赖快照等完整元数据让链接过程可复现、可审计。段消除真正只用多少就链接多少选对了文件只是第一步链接器层面的段消除才是最后一道瘦身工序。scriptc 在 native-toolchain.ts 中按平台提供了对应配方macOSMach-O链接时加-Wl,-dead_stripLinuxELF编译加-ffunction-sections -fdata-sections链接加-Wl,--gc-sectionsWindowsCOFF同样的段隔离 GC 组合即使某个运行时单元因谓词命中整体参与了链接其中没被引用的函数和数据段也会在最末端被垃圾回收掉。两层机制叠加最终可执行文件里只留下你的程序真正触达的代码。完整性校验一份不可篡改的清单预编译包意味着你信任第三方编译的产物scriptc 用 runtime-pack.ts 中的严格校验来兜底版本精确匹配运行时包版本必须与编译器版本一致目标三元组、架构、对象格式、最低 OS 版本逐项比对SHA-256 大小双重校验每个对象文件都有哈希指纹读取后逐一验证防止篡改或缺损ABI 标记运行时对象带有scr_runtime_abi版本标记跨版本混搭会被拒绝依赖快照选择过程中对包内文件做lstat快照设备号、inode、时间戳链接前复查——如果包在选择和链接之间被换掉直接报错中止。动手验证导出你的链接配方用--printnative-link-info可以只生成程序对象并打印一份带版本号的 JSON 链接配方不会真正执行链接里面包含目标信息、入口符号main、未定义的scr_运行时符号前缀、精确的运行时源包、系统库与 FFI 输入。完整的外部链接示例见 examples/native-object/包含 C 驱动与 Apple 链接器的直接构建方式。小结设计点解决的问题平台化预编译包免 C 工具链、构建提速谓词化单元矩阵特性开关决定链接哪些模块有序链接计划符号解析正确、过程可复现段消除配方二进制最终瘦身哈希 ABI 版本校验供应链安全scriptc 的运行时包设计展示了编译器工程的一个好范式把链接什么、以什么顺序、在什么校验下全部显式化为版本化数据既让新用户零配置上手也让高级用户能拿着 JSON 配方去外部链接器里自由发挥。官方文档与 CLI 参考可从 README.md 的 Documentation 章节入口找到运行时 C 源码全景packages/runtime/src/链接计划实现packages/compiler/src/backend/link-plan.ts【免费下载链接】scriptcTypeScript-to-Native Compiler项目地址: https://gitcode.com/GitHub_Trending/sc/scriptc创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

如何让AI说人话:claudish-to-english——Claude Code大白话改写插件完整入门指南

如何让AI说人话:claudish-to-english——Claude Code大白话改写插件完整入门指南

如何让AI说人话:claudish-to-english——Claude Code大白话改写插件完整入门指南 【免费下载链接】claudish-to-english 项目地址: https://gitcode.com/gh_mirrors/cl/claudish-to-english claudish-to-english 是一个免费的 Claude Code 插件,…

2026/10/1 2:01:46 阅读更多 →
Harness Engineering操作手册:improve-harness与repository-review两大Playbook详解

Harness Engineering操作手册:improve-harness与repository-review两大Playbook详解

Harness Engineering操作手册:improve-harness与repository-review两大Playbook详解 【免费下载链接】harness-engineering 🐎 Ryan Lopopolo’s anthology, field guide, and agent context bundle for harness engineering 项目地址: https://gitcod…

2026/10/1 2:01:46 阅读更多 →
awesome-neovim 维护者实战指南:PR 审核流程、合规自动化与 Colorscheme 标签体系

awesome-neovim 维护者实战指南:PR 审核流程、合规自动化与 Colorscheme 标签体系

文档知识库开发工具 【免费下载链接】awesome-neovim Collections of awesome neovim plugins. 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-neovim 点击查看 免费下载 本文档基于 awesome-neovim 仓库根目录的 MAINTAINERS.md 维护者指南编写&…

2026/10/1 2:01:46 阅读更多 →

最新新闻

CCF GESP C++三级 学习笔记

CCF GESP C++三级 学习笔记

官网大纲数据编码(原码、反码、补码)进制转换(二进制、八进制、十进制、十六进制)位运算算法的概念与描述(自然语言描述、流程图描述、伪代 码描述)C一维数组基本应用字符串及其函数算法:枚举法…

2026/10/1 2:32:59 阅读更多 →
具身智能协同演化动力学(35):递归改进引擎对误差传播的阻断与全局收敛

具身智能协同演化动力学(35):递归改进引擎对误差传播的阻断与全局收敛

前沿技术探索:TVA智能体(简称TVA)TVA智能体(亦称“AI智能体视觉”)是依托Transformer架构与“因式智能体”理论构建的新型工业视觉系统,也是当前最具代表性的具身视觉技术之一。它有机融合深度强化学习&…

2026/10/1 2:32:59 阅读更多 →
Excel乱序数据匹配:四套实战方案解决行数不等、重复歧义问题

Excel乱序数据匹配:四套实战方案解决行数不等、重复歧义问题

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 2:32:59 阅读更多 →
AgentScope智能体操作系统:可编排、可监控、可运维的AI团队底座

AgentScope智能体操作系统:可编排、可监控、可运维的AI团队底座

1. 这不是又一个LLM框架,而是一套“能自己开会、自己拆任务、自己追进度”的智能体操作系统AgentScope——这个名字最近在技术圈里出现的频率,已经快赶上当年Docker刚火起来时大家聊容器的劲头了。但和Docker不同,它不解决“怎么装软件”&…

2026/10/1 2:32:59 阅读更多 →
RAG落地最后一公里:分块、召回、重排的6个实战结论

RAG落地最后一公里:分块、召回、重排的6个实战结论

1. 为什么 RAG 落地总在“最后一公里”翻车做过 RAG 项目的人大概都有过这种体验:Demo 阶段效果惊艳,一上真实业务数据就原形毕露——要么答非所问,要么关键信息死活检索不出来,要么检索出来一堆似是而非的片段把大模型带偏。我前…

2026/10/1 2:32:59 阅读更多 →
Linux磁盘100%真相:deleted文件与进程句柄释放

Linux磁盘100%真相:deleted文件与进程句柄释放

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 2:31:59 阅读更多 →

日新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/30 18:13:06 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →