编程语言语言运行时编译器【免费下载链接】wrenThe Wren Programming Language. Wren is a small, fast, class-based concurrent scripting language.项目地址https://gitcode.com/gh_mirrors/wr/wren点击查看免费下载本文以 Wren 官方开发博客《0.2.0 and beyond》doc/site/blog/1-0.2.0-and-beyond.markdown为主体结合当前仓库的 CHANGELOG、RFC 文档、导入语法设计笔记与 VM 源码系统回顾 Wren 0.2.0 发布前后的项目整理工作、0.2.0 引入的语言与 C API 变化以及 0.3.0 的 VM/CLI 分离路线并对照仓库现状验证这些计划的实际落地情况。这篇博客发布于 2019 年 9 月 30 日是 Wren 新维护者接手后的第二篇开发日志第一篇见 0-hello-wren.markdown。它的价值在于既是一份 0.2.0 的发布说明也是一份面向 0.3.0 的路线图宣言——其中关于相对导入与逻辑导入的区分、VM 与 CLI 职责分离、跨平台构建一致性、Web 构建与预编译二进制发布的目标在今天仓库的结构中都有迹可循。读完本文你将理解 Wren 项目在 0.1.0 之后是如何组织版本、治理 issue、设计模块导入机制以及 VM/CLI 分离为何成为当时的第一优先级。一、0.2.0 的发布目标与达成情况博客开篇先回顾了上一篇博客0-hello-wren.markdown中立下的四个短期目标并逐一划掉清理 backlog整理 issue 与 PR在视觉和结构上整理官方网站确保所有文档与当前开发状态同步以 0.1.0 以来的变更清单为基础打上 0.2.0 标签。从仓库现状看这四个目标都留下了可验证的痕迹CHANGELOG 中专门记录了 0.2.0 的完整变更条目CHANGELOG.md文档站点被重组为 classes、control-flow、functions、embedding、modules 等主题页doc/site 目录而 0.2.0 的版本标签也如期落地。博客强调了一个重要观点0.2.0 的意义首先是一个 checkpoint检查点。在继续迭代语言本身之前团队希望有一个可以回溯的稳定基线这正是 0.2.0 的主要定位。据博客统计0.2.0 汇聚了290 个 commit、41 位贡献者的努力——这个数字与 CHANGELOG.md 中around 290 commits的记录一致。二、Backlog 整理issue 关闭 ≠ 任务终结博客用不小的篇幅讲述了 issue 治理方法论这既是项目运营经验也直接影响后续版本的节奏经过一段时间后仓库中的 issue 状态往往混杂有过时的、无关的、需要正式回复的、属于远期设想的还有一部分属于 Wren CLI 的。团队的做法是持续归并consolidating。结果70 个 issue 被关闭或解决其中约21 个被标记为未来考虑23 个迁移到了 Wren CLI 仓库。博客提出两个关键理念关闭 issue 只是分类手段不代表事情终结。一个 issue 被关闭可能只是因为它暂时不属于活跃范围。label 是 open/closed 之外的第二层分类工具。例如远期任务、想法或目标会被标记为future方便日后重新打开。对读者的实用启示是如果你向 Wren 提交了 issue 且它被关闭不必灰心——讨论依然被鼓励想法、提案和输入依然必要即使所依附的 issue 已标记为 closed。这一治理思路保证了活跃 issue 列表在短期内的相关性。三、0.2.0 的语言与 API 变化从 CHANGELOG 到源码验证0.2.0 横跨了相当长的时间段用户可见的变化主要记录在 CHANGELOG.md其中最值得注意的是相对导入relative imports成为一项轻微破坏性变更它为模块机制的一致性铺路。3.1 智能导入相对导入与逻辑导入的区分0.2.0 最核心的语言变化是让import更聪明区分相对导入与逻辑导入。这一设计的完整动机与方案记录在仓库的 RFC 文档 0001-smarter-imports.md 中其要点如下相对导入沿用引号字符串语法import ast/expr表示相对于包含该 import 语句的模块所在目录解析文件ast/expr.wren也支持import ../../other/stuff向父目录回溯。逻辑导入使用不带引号的标识符import random、import wrenalyzer/ast/expr第一个标识符是逻辑包名后续部分是包内路径内置模块如random、meta由 VM 直接提供。之所以必须区分两者是因为如果全部采用先查相对路径、再查包目录、再查内置模块的混合语义短小的相对导入名如utils极易与逻辑导入名冲突且读者无法仅凭代码判断导入来自本程序还是外部包。在语法选型阶段团队还整理了一份详细的候选方案对比笔记doc/notes/import syntax.md涵盖 modifier、不同关键字use/include/require、字符串内前缀Node 风格./、URI schemepackage:等多种思路并记录了各自的取舍理由——例如 Node 风格虽最简洁但有魔法感use关键字语义更近URI scheme 对逻辑导入过于冗长。从当前 VM 源码看这一设计已完整落地。导入解析的关键实现在 src/vm/wren_vm.c当宿主提供了resolveModuleFn回调时VM 会把**导入者模块名importer与导入字符串name**交给宿主做规范化canonicalization宿主返回统一后的模块名VM 再据此判断模块是否已加载。对应的 C API 声明位于 src/include/wren.h// Gives the host a chance to canonicalize the imported module name, // potentially taking into account the (previously resolved) name of the module // that contains the import. Typically, this is used to implement relative // imports. typedef const char* (*WrenResolveModuleFn)(WrenVM* vm, const char* importer, const char* name);这正是 RFC 中导入成为三阶段过程的落地先由宿主解析出规范名 → VM 查重命中则复用避免重复静态状态等副作用→ 未命中再请求宿主提供源码。RFC 还描述了 CLI 侧的查找策略从主脚本所在目录向上寻找wren_modules目录并在其中定位逻辑导入——这套策略在 0.2.0 之后的 CLI 仓库中继续演进。3.2 标准库与其他语言特性CHANGELOG 记录的 0.2.0 其余语言/VM 变化包括Fiber现在可以从第一次call/transfer中接收值新增String.trim/trimEnd/trimStart、String.split、String.replace、String.fromByte、String.indexOf(needle, startIndex)新增Sequence.take与Sequence.skip新增List.filled(count, value)新增Num.pow、Num.log、Num.round、Num.largest、Num.smallest新增Map迭代MapEntry。这些方法在今天的 test/core 测试目录中均有对应用例如string/split.wren、sequence/take.wren、list/filled.wren、map/map_entry等可以按主题逐一对照验证。3.3 C API 变化0.2.0 对嵌入式 API 也有一批增强CHANGELOG.md新增 wren.hpp便于 C 宿主使用WrenVM增加void*用户数据允许没有模块加载器的宿主仍可加载可选模块meta、random等新增wrenAbortFiber。加上前述WrenResolveModuleFn回调0.2.0 实际上为嵌入场景确立了一套VM 保持最小、策略交给宿主的 API 格局这正是下一节 VM/CLI 分离路线的前奏。四、0.3.0 目标VM 与 CLI 分离博客明确写道0.3.0 的首要目标是将 VM 与 CLI 分离。当时该迁移已经开始CLI 相关代码迁往独立的 wren-cli 仓库重构工作在wren-cli-refactor分支上进行。博客给出的 0.3.0 目标清单简洁形式是VM / CLI 分离把解释器核心与命令行工具解耦明确项目结构构建一致性与可靠性尤其是 Windows 平台存在多处痛点需要一并解决面向文档的 Web 构建emscripten增加一个 emscripten 构建目标让 Wren 示例可以在官网与文档中直接运行预编译发布提供开箱即用的可执行文件。对照当前仓库这些目标大多留下了具体实现构建一致性仓库采用 premake 生成各平台工程文件projects/premake/premake5.lua并配套 util/generate_projects.py 脚本projects 下同时维护了 make、make.bsd、make.mac、vs2017、vs2019、xcode 多套工程。Web 构建try 目录正是面向浏览器/文档的构建入口含make.emscripten工程最终对应文档站点的 doc/site/try/index.markdown 在线运行页。CLI 分离CHANGELOG 的 0.3.0 条目CHANGELOG.md确认CLI moved to own repo并补充了其他落地细节所有 Python 脚本升级到 Python 3 且跨平台可用、测试运行器与 VM 测试统一、文档清理并新增在线 Try 页、修复 amalgamated 生成脚本等。预编译发布从 0.3.0 起提供预构建二进制这改变了此前想拿个可执行文件直接试试语言都做不到的局面。五、Beyond 0.3.0复合赋值与后续方向博客对 0.4.0 没有具体计划但透露了已在实验的特性复合赋值运算符如当时对应 PR #701。一个值得注意的对照从当前仓库的编译器源码看src/vm/wren_compiler.c 附近的运算符定义表仍以一元/二元运算符与单一等号赋值为主并未出现/-等复合赋值的专属 token而 CHANGELOG 的 0.4.0 条目中也没有列入复合赋值。可以推断这一想法在后续版本中并未按原样落地或者以其他形式继续演进——这正体现了博客中Wren 会变化但不会变成别的东西的基调新特性的取舍始终以保持小型、简单、可学、可 hack为前提。六、从这篇博客回看今天的仓库这篇发布于 2019 年的路线图文章在今天看来是一份相当准确的预言VM 与 CLI 分离、跨平台构建一致性、Web 内嵌运行示例、预编译发布全部在 0.3.0 兑现而 0.4.0 则带来了continue、as导入重命名、Fiber.try、List 排序/交换、Num.tau等一批新特性见 CHANGELOG.md。对于想深入了解 Wren 的读者建议按以下路径继续阅读 doc/rfc/0001-smarter-imports.md 理解模块导入的完整设计动机与迁移方案阅读 doc/notes/import syntax.md 了解语法选型的多方案权衡对照 src/vm/wren_vm.c 与 src/include/wren.h 验证 VM 与宿主之间的模块解析、加载接口在 test/core 与 test/language 中查找对应特性的测试用例确认各 API 的实际行为边界。总而言之这篇博客既是 Wren 0.2.0 的发布注脚也是项目进入维护者交接、社区协作、工程化建设新阶段的分水岭它以一次彻底的问题清单整理重新校准了社区协作方式以智能导入为 0.2.0 定下了语言层面的基调再以 VM/CLI 分离为 0.3.0 划定了清晰的工程边界——这三件事共同定义了 Wren 从 0.1.0 走向成熟的最关键一段路程。赞分享编程语言语言运行时编译器【免费下载链接】wrenThe Wren Programming Language. Wren is a small, fast, class-based concurrent scripting language.项目地址https://gitcode.com/gh_mirrors/wr/wren点击查看免费下载相关推荐Windows 11优化终极指南用Win11Debloat一键提升系统性能51%Windows 11优化终极指南用Win11Debloat一键提升系统性能51% Win11Debloat是一款专为Windows 10和11设计的轻量级Po桌面应用CLIN_m3u8DL-RE 上手教程3 条命令编译1 条命令完成首次 M3U8 下载N_m3u8DL RE 上手教程3 条命令编译1 条命令完成首次 M3U8 下载 N_m3u8DL RE 是一款 C 编写的跨平台流媒体下载工具能把 M3CLI音视频RxPermissions框架演进关键版本与里程碑回顾RxPermissions框架演进关键版本与里程碑回顾 引言Android权限管理的RxJava革命 你是否还在为Android运行时权限Runtime移动开发原生移动上一篇ENS协议核心解析一文读懂ens-contracts如何构建去中心化域名系统下一篇OpenCore Legacy Patcher让旧Mac重获新生的系统升级指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?