ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

为什么这个小而美的bog语言值得关注:Zig打造的可嵌入脚本语言完整概览

为什么这个小而美的bog语言值得关注:Zig打造的可嵌入脚本语言完整概览 为什么这个小而美的bog语言值得关注Zig打造的可嵌入脚本语言完整概览【免费下载链接】bogToy language for experimentation and fun.项目地址: https://gitcode.com/gh_mirrors/bo/bogbog 是一款用 Zig 打造的小型、强类型、可嵌入脚本语言专为实验与趣味experimentation and fun而生。它把 async/await、match 模式匹配、解构赋值等现代语法装进一个极小的字节码虚拟机还能像组件一样嵌入你的 Zig 或 C 应用中。这篇文章带你快速、完整地了解这个小而美的语言。30秒认识bog它到底是什么bog 的定位非常清晰Small, strongly typed, embeddable小而强类型、可嵌入。你可以把它理解为一个能塞进别的应用里的迷你脚本引擎维度说明实现语言Zig全栈词法、语法、编译、虚拟机执行方式编译为字节码由虚拟机执行文件扩展名.bog内置标准库std.io、std.fs、std.json、std.math、std.map等嵌入方式Zig API C APIbog.h 头文件交互模式自带 REPL 交互式解释器它不追求替代 Python 或 Lua而是适合三类人学做语言的人、需要脚本层的应用开发者、以及喜欢玩语言设计的人。快速上手5分钟跑通第一个bog程序bog 目前处于 0.0.1 的早期阶段从源码构建是体验它的主要方式。步骤只有 4 步下载 Zigmaster 版本并配置好环境克隆仓库git clone https://gitcode.com/gh_mirrors/bo/bog进入目录执行zig build运行./zig-cache/bin/bog 你的脚本.bog不带参数则进入 REPL。第一个 Hello World 只有 3 行已经能看到它的语法风格let {print} import std.io let world world print(fhello {world}!)注意两点let {print} import std.io是解构导入f...是格式化字符串——这两个小细节就体现了 bog 语法的现代感。语言特性小语法大味道bog 的语法定义在 grammar 中整套文法不长但覆盖了现代脚本语言的核心能力。类型系统与解构赋值内置类型包括int、num、bool、str、tuple、map、list、error、range等还支持as强制类型转换如input(n: ) as num。函数参数可以直接解构let add fn ((a, b)) a b # 一次调用完成解包 return add((1, 2)) # 3原生 async/await协程零依赖bog 把并发原语做进了语法层async、await以及更底层的suspend/resume挂起与恢复协程。这意味着写异步逻辑不需要任何第三方库README 里的示例可以直观看到多个协程交错执行的输出顺序非常适合做语言特性实验。match 模式匹配 try/catch 错误处理bog 用match替代冗长的 if-else 链用try/catch处理错误错误本身是一等类型match op * print(val1 * val2) print(val1 val2) _ print(funknown op: {op})计算器、命令行参数、循环for let c in hellö wörld甚至能逐字符遍历 UTF-8 字符串等常见场景README 中都有完整示例可以直接参考。可嵌入是bog的核心卖点如何嵌入你的应用对大多数应用来说可嵌入才是 bog 区别于其他玩具语言的关键。从 Zig 侧嵌入在 Zig 项目里引入 bog 后初始化虚拟机、注入标准库、执行脚本、从宿主调用 bog 函数整条链路都通过 Vm.zig 暴露的 API 完成。官方示例 zig_from_bog.zig 演示了最完整的用法var vm bog.Vm.init(allocator, .{}); try vm.addPackage(my_lib, my_lib); // 把 Zig 函数暴露给 bog const res vm.run(source) catch ...; // 执行脚本 const bog_integer try res.bogToZig(i64, vm); // 取回结果从 C 侧嵌入bog 提供了 C ABI 层头文件 bog.h 声明了bog_Vm_init、bog_Vm_addStd等接口由 lib.zig 统一导出示例 bog_from_c.c 展示了纯 C 程序如何加载并运行.bog脚本。构建时还可用NO_ADD_STD选项裁剪标准库以减小二进制体积非常贴心。双向调用闭环宿主 → bogvm.run执行脚本、vm.call调用 bog 函数bog → 宿主addPackage注册宿主函数脚本内用import my_lib即可调用。这种双向能力让它完全可以作为应用配置的脚本层C/Zig 写核心逻辑bog 写可热更的业务规则。架构一览从源码到字节码的完整链路bog 的实现结构清晰读源码是个好入口整条编译链路是tokenizer.zig词法分析→parser.zig生成抽象语法树 Tree.zig→Compiler.zig编译为字节码 Bytecode.zig→Vm.zig虚拟机执行支撑模块包括Gc.zig按页管理的垃圾回收器render.zig带行号上下文的错误渲染基于 linenoize 库位于 linenoize/repl.zig交互式 REPLtests/行为、错误处理、格式化字符串三套测试behavior / error / fmt。对想造一个语言的新手来说这是一份麻雀虽小、五脏俱全的参考实现——词法、语法、编译、执行、GC、REPL、错误报告一个都不缺。谁应该关注bog一份场景清单应用开发者需要在 Zig/C 应用中加一个轻量、可嵌入的脚本层语言学习者想读懂一套完整但小巧的解释器实现语言设计爱好者async/await、suspend/resume、协程调度等实验性特性正在这里落地Zig 生态探索者一个纯 Zig、无外部依赖除 linenoize的完整项目。写在最后bog 目前还是 0.0.1 的早期版本作者自称它是实验与趣味的玩具语言——但小而美正是它的价值几百行就能看懂的语法、一套完整的字节码虚拟机、C/Zig 双端嵌入能力以及原生协程等前沿特性。如果你正好在学 Zig、想研究解释器原理或者你的应用缺一个趁手的脚本引擎不妨花 10 分钟把 bog 跑起来。本文基于项目仓库 gh_mirrors/bo/bog 的 README、grammar 语法文件与源码结构整理【免费下载链接】bogToy language for experimentation and fun.项目地址: https://gitcode.com/gh_mirrors/bo/bog创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表