我最近在做一个编译器/转译器项目,想要解决一些在 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 58 天前
为什么不直接用 JScript
|
![]() |
2
ansurfen OP @xiangyuecn VBScript 原生可以跑在 windows 上面,不需要运行时,也可以用来编写批处理脚本。然后后面我会发布 Hulo 到 Bash 、Powershell 、Batch 的转译支持,目前在重构语法树 可能下周在增加一个新的语言。最主要的就是这些批处理脚本能直接跑不需要运行时,我对 Hulo 的定位就是写批处理脚本相关的,然后现在还在早期 相关的工具链还没开发 可以期待一下。
|
3
hj18 58 天前
很棒的想法,我支持。
|
4
TrackBack 58 天前
想法很棒,不过为什么要重新发明新语言?
在现有语言的基础上写应该会方便很多,推广也容易 当然如果只是练手项目的话倒无所谓 |
![]() |
5
dwu8555 58 天前
要安装 vb 的 ide 吗
|
![]() |
6
ansurfen OP @TrackBack 因为翻译成批处理脚本 最重要的就是命令类型比如说 git clone xxx 这种,现有的语言根本不支持这样的语法。所以一个新的语言就诞生了,命令就是最基础的数据类型。不过这块刚构思完,还没来得及实现和介绍
|
![]() |
8
geelaw 58 天前
@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 58 天前
可以尝试兼容 Python 或者 Golang 的语法,前景会大很多。
不过你这个应用场景略小众,毕竟现在 Windows 都自带 PowerShell 了。 |
![]() |
11
ansurfen OP @bigtear 感谢你的建议,不过目前的计划会先把各平台的批处理脚本都对接完成,然后实现最核心的功能,命令类型,并且实现对命令的代码提示和接收参数的类型检测。虽然自带 Ps ,但是并不冲突,未来可以编写一个 Hulo 代码,翻译成 Powershell 和 Bash 脚本。让批处理脚本一次编写多端运行。不过这还需要一个命令转换系统,比如说 Write-Host 和 echo 的跨平台抽象,这块我后面会实现,已经设计出了语法糖。
|
![]() |
12
darkway 57 天前
恭喜你发明了易语言
|
![]() |
13
uqf0663 57 天前
很棒的想法,加油。
|
14
Damn 57 天前 via iPhone
49 年入国军,vbs 都要被废了。。
https://www.ithome.com/0/770/120.htm |