我最近在做一个编译器/转译器项目,想要解决一些在 Windows 脚本开发中遇到的“老大难”问题。
你知道 Vbscript 最令人头疼的是什么吗? 就是那种 冗长的语法 和 有限的语言能力,一旦想实现稍微复杂一点的逻辑,就会陷入繁琐的拼接和调试地狱。
于是我开始思考 有没有可能用一种更现代、更清爽的语言来写脚本,然后自动生成 Vbscript ?
于是我做了个语言,叫做 Hulo 。
什么是 Hulo ? Hulo 是一种现代化、类型安全的编程语言,可以编译(准确说是转译)成 Vbscript 。
来看几个实际例子:
简单的消息框:
MsgBox "Hello, World!"
带类型的函数:
fn sayHello(name: str) -> void { MsgBox "Hello, $name!" } fn add(a: num, b: num) => $a + $b sayHello "Hulo"; MsgBox add(5, 3);
类和对象:
class User { pub name: str pub age: num pub fn greet(other: str) { MsgBox "Hello, $other! I'm $name." } } let u = User("John", 25) $u.greet("Jane")
控制流和用户输入:
let n = InputBox("Input a number:") if $n < 0 { MsgBox("The number is negative.") } else { MsgBox("The number is positive.") }
列表和循环:
let arr: list<num> = [1, 2, 3, 4, 5] loop $item in $arr { MsgBox $item } loop $i in [0, 1, 2] { MsgBox $i }
更多示例请前往 GitHub 上的 examples/ 查阅!
写在最后
我知道 Vbscript 生态比较老旧,但它在 Windows 自动化中仍然有着不可替代的位置。 如果你也正在用 Vbscript 做运维、脚本开发、企业级自动化,那么 Hulo 或许能为你带来一点 久违的开发愉悦感。
目前项目还在早期阶段,欢迎感兴趣的朋友提建议、提 issue 、或者一起来参与开发!
项目地址: https://github.com/hulo-lang/hulo
你觉得这种“现代语言 + 老派平台”的方式靠谱吗?
![]() | 1 xiangyuecn 88 天前 为什么不直接用 JScript |
![]() | 2 ansurfen OP @xiangyuecn Vbscript 原生可以跑在 windows 上面,不需要运行时,也可以用来编写批处理脚本。然后后面我会发布 Hulo 到 Bash 、Powershell 、Batch 的转译支持,目前在重构语法树 可能下周在增加一个新的语言。最主要的就是这些批处理脚本能直接跑不需要运行时,我对 Hulo 的定位就是写批处理脚本相关的,然后现在还在早期 相关的工具链还没开发 可以期待一下。 |
3 hj18 88 天前 很棒的想法,我支持。 |
4 TrackBack 88 天前 想法很棒,不过为什么要重新发明新语言? 在现有语言的基础上写应该会方便很多,推广也容易 当然如果只是练手项目的话倒无所谓 |
![]() | 5 dwu8555 88 天前 要安装 vb 的 ide 吗 |
![]() | 6 ansurfen OP @TrackBack 因为翻译成批处理脚本 最重要的就是命令类型比如说 git clone xxx 这种,现有的语言根本不支持这样的语法。所以一个新的语言就诞生了,命令就是最基础的数据类型。不过这块刚构思完,还没来得及实现和介绍 |
![]() | 8 geelaw 88 天前 @ansurfen #2 他的意思是 Windows 的脚本解释器除了 Vbscript 还支持 JScript ,请注意 JScript 和 Javascript 不同。 @xiangyuecn #1 的一个可能的回答是,JScript 支持的 Javascript 语法比较古早。当然,我觉得配合合适的 .d.ts 之后用 TypeScript 编译器翻译成很低版本的 ECMAScript 应该是更简单的解法。 |
![]() | 9 ansurfen OP @geelaw 哦哦 感谢解释。可能我有点标题党吧,因为一开始的目标也不是只针对 Windows , 在我的 github 仓库里面,写着是要翻译成 Bash ,Batch ,Powershell 的。然后就是命令了,现在哪怕是最现代化的批处理脚本 Powershell 也很难对市面上的命令进行有效的代码提示,甚至 ps 自己的静态分析就很鸡肋。所以 Hulo 就设计出来了,一款以 cmd 类型为基础数据类型的编程语言,不过这块还没实现,因为要实现的难点在于 命令很复杂,需要一套有效的声明系统,以及不同平台的命令需要实现跨平台封装 相比传统编程语言更加自然,为此我设计了两套还存在于 PPT 中的系统。 |
10 bigtear 88 天前 可以尝试兼容 Python 或者 Golang 的语法,前景会大很多。 不过你这个应用场景略小众,毕竟现在 Windows 都自带 PowerShell 了。 |
![]() | 11 ansurfen OP @bigtear 感谢你的建议,不过目前的计划会先把各平台的批处理脚本都对接完成,然后实现最核心的功能,命令类型,并且实现对命令的代码提示和接收参数的类型检测。虽然自带 Ps ,但是并不冲突,未来可以编写一个 Hulo 代码,翻译成 Powershell 和 Bash 脚本。让批处理脚本一次编写多端运行。不过这还需要一个命令转换系统,比如说 Write-Host 和 echo 的跨平台抽象,这块我后面会实现,已经设计出了语法糖。 |
![]() | 12 darkway 88 天前 恭喜你发明了易语言 |
![]() | 13 uqf0663 88 天前 很棒的想法,加油。 |
14 Damn 88 天前 via iPhone 49 年入国军,vbs 都要被废了。。 https://www.ithome.com/0/770/120.htm |