Cotowali多后端之谜:同一份.li代码如何同时编译为sh与PowerShell
Cotowali多后端之谜同一份.li代码如何同时编译为sh与PowerShell【免费下载链接】cotowaliA statically typed scripting language that transpile into POSIX sh项目地址: https://gitcode.com/gh_mirrors/co/cotowaliCotowali是一门静态类型化的脚本语言最迷人的地方在于同一份.li源码通过编译器参数就能分别转译成 POSIX sh、PowerShell甚至一个“双系统都能跑”的混合脚本。本文将带你揭开 Cotowali 编译器多后端架构的设计秘密并给出 7 种后端的完整使用指南。为什么脚本语言需要多后端传统上一门脚本语言只对应一种运行环境Python 跑在 CPython 上Lua 跑在 lua 解释器上。而 Cotowali 选择了另一条路——写一次到处编译Unix 环境Linux/macOS/Cygwin编译为sh、dash、bash、zshWindows 环境编译为pwshPowerShell 7混合环境ushuniversal sh输出一个 sh 和 PowerShell 都能直接执行的“多语言脚本”实验性后端himorogiCotowali 自研的即时解释器后端定义位于 cotowali/config/config.v每个后端都自带 shebang 与输出脚本扩展名如sh→.sh、pwsh→.ps1、ush→.ush这让编译产物天然可执行。一键切换后端lic编译器的-b标志Cotowali 的编译器入口是lic后端选择通过全局标志-b--backend完成默认值为sh# 默认编译为 sh lic examples/add.li # 编译为 PowerShell lic -b pwsh examples/add.li # 生成 sh PowerShell 双兼容脚本 lic -b ush examples/add.li命令行标志的解析逻辑在 cmd/cmdutil/cmdutil.v 中backend_from_str还支持powershell、universal等别名写法输入不合法的后端名会直接报错退出避免产生无法执行的产物。编译流水线AST 是唯一的分岔口同一份.li代码如何变成两种截然不同的目标脚本关键在于前端共享、后端分离的经典编译器架构见 cotowali/compiler/compiler.v词法分析cotowali/lexer/lexer.v 把源码切成 token语法分析cotawali/parser/parse.v 生成语法树AST类型检查cotawali/checker/check.v 静态校验类型保证类型错误在编译期暴露代码生成根据后端枚举选择对应的 Emitter 遍历 AST 输出脚本选择逻辑集中在 cotawali/emit/emitter.vsh/dash/bash/zsh交给 sh Emitterpwsh交给 pwsh Emitter。两套 Emitter 都是独立的完整实现各自处理变量命名、字符串转义、管道与重定向、函数定义等细节sh 后端cotawali/emit/sh/ 目录用 awk 实现浮点运算用[ ... ]测试命令表达布尔判断pwsh 后端cotawali/emit/pwsh/ 目录用Compare-Object实现数组相等比较用$_风格变量命名最神奇的 ush一份脚本双系统通吃ushuniversal sh后端是 Cotowali 最“魔法”的能力。它并不是第三套代码生成器而是把同一份.li分别编译成 sh 代码和 pwsh 代码再用精心设计的 polyglot 模板把两者拼进同一个文件逻辑见 cotawali/compiler/compiler.v 中的ush_compile_to与 cotawali/emit/ush/ush.vsh 执行到 heredoc 指令就把 PowerShell 部分当“数据”跳过PowerShell 通过一个注释技巧提前“吞掉” sh 部分两个后端各自只执行自己那一段也就是说lic -b ush fib.li生成的fib.ush文件在 Linux 的sh里能跑在 Windows 的pwsh里也能跑——真正的代码写一次两边都能用。ush后端寻找执行器时cotawali/config/config.v 的find_executable_path也会优先找sh、找不到再找pwsh与这个“双栖”设计完全呼应。实战一份.li两种产物以官方示例 examples/add.li 为例其 Cotowali 写法简洁直观变量、函数、类型注解一应俱全。分别编译后可以观察到-b sh输出 POSIX 兼容脚本函数形如name() { ... }浮点比较借助 awk-b pwsh输出.ps1脚本变量统一加$前缀数组操作映射为 PowerShell 原生算子由于类型系统在前端就已检查完毕两种后端输出行为严格一致跨平台测试成本大大降低。更多示例见 examples/ 目录fib、fizzbuzz、raytracing 一应俱全。如何选择后端场景推荐后端说明Linux/macOS 生产脚本sh默认严格 POSIX兼容性最强需要 bash 特性bash/zsh自动匹配对应解释器Windows 自动化pwsh生成.ps1享受 .NET 生态跨平台分发的单文件脚本ush一个文件双系统直接执行开发调试、追求启动速度himorogicotawali/himorogi/ 自研解释器免编译直接运行总结Cotowali 的多后端之谜本质是共享前端 可插拔 Emitter架构的胜利AST 与类型检查只执行一次sh 与 PowerShell 两套代码生成器各自独立演化而ush后端则通过 polyglot 模板把“多后端”推向极致。对于需要在 Unix 与 Windows 之间维护自动化脚本的开发者来说Cotowali 提供了一个少见的、开箱即用的静态类型化答案。【免费下载链接】cotowaliA statically typed scripting language that transpile into POSIX sh项目地址: https://gitcode.com/gh_mirrors/co/cotowali创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

基于springboot的外卖管理系统设计与实现(源码+lw+部署文档+讲解等)

基于springboot的外卖管理系统设计与实现(源码+lw+部署文档+讲解等)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/10/25 2:16:51 阅读更多 →
Chokepoint Atlas五维Lane评分法:约束、证据、共识与错配分数怎么打

Chokepoint Atlas五维Lane评分法:约束、证据、共识与错配分数怎么打

Chokepoint Atlas五维Lane评分法:约束、证据、共识与错配分数怎么打 【免费下载链接】chokepoint-atlas 项目地址: https://gitcode.com/gh_mirrors/ch/chokepoint-atlas Chokepoint Atlas(卡脖子美股战法)是一个把"AI 产业链热…

2026/11/7 3:34:47 阅读更多 →
Svelte Materialify DataTable完整指南:列排序、分页、行选择打造大数据表格

Svelte Materialify DataTable完整指南:列排序、分页、行选择打造大数据表格

Svelte Materialify DataTable完整指南:列排序、分页、行选择打造大数据表格 【免费下载链接】svelte-materialify A Material UI Design Component library for Svelte heavily inspired by vuetify. 项目地址: https://gitcode.com/gh_mirrors/sv/svelte-materi…

2026/11/10 11:57:46 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/13 5:13:25 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/13 5:13:25 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/13 5:13:25 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/12 18:22:26 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/12 18:22:25 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/13 5:13:25 阅读更多 →

日新闻

周新闻

月新闻