我开发了一个编译成 VBScript 的现代编程语言 - Hulo

76 天前
 ansurfen

我最近在做一个编译器/转译器项目,想要解决一些在 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

你觉得这种“现代语言 + 老派平台”的方式靠谱吗?

1763 次点击
所在节点    分享创造
15 条回复
xiangyuecn
76 天前
为什么不直接用 JScript
ansurfen
76 天前
@xiangyuecn VBScript 原生可以跑在 windows 上面,不需要运行时,也可以用来编写批处理脚本。然后后面我会发布 Hulo 到 Bash 、Powershell 、Batch 的转译支持,目前在重构语法树 可能下周在增加一个新的语言。最主要的就是这些批处理脚本能直接跑不需要运行时,我对 Hulo 的定位就是写批处理脚本相关的,然后现在还在早期 相关的工具链还没开发 可以期待一下。
hj18
76 天前
很棒的想法,我支持。
TrackBack
76 天前
想法很棒,不过为什么要重新发明新语言?
在现有语言的基础上写应该会方便很多,推广也容易

当然如果只是练手项目的话倒无所谓
dwu8555
76 天前
要安装 vb 的 ide 吗
ansurfen
76 天前
@TrackBack 因为翻译成批处理脚本 最重要的就是命令类型比如说 git clone xxx 这种,现有的语言根本不支持这样的语法。所以一个新的语言就诞生了,命令就是最基础的数据类型。不过这块刚构思完,还没来得及实现和介绍
ansurfen
76 天前
@dwu8555 虽然两者语法看起来类似,但是只能翻译成 VBS ,不支持 VB 。VBS 能够直接跑在操作系统不需要安装任何环境,操作系统自带。
geelaw
76 天前
@ansurfen #2 他的意思是 Windows 的脚本解释器除了 VBScript 还支持 JScript ,请注意 JScript 和 JavaScript 不同。

@xiangyuecn #1 的一个可能的回答是,JScript 支持的 JavaScript 语法比较古早。当然,我觉得配合合适的 .d.ts 之后用 TypeScript 编译器翻译成很低版本的 ECMAScript 应该是更简单的解法。
ansurfen
76 天前
@geelaw 哦哦 感谢解释。可能我有点标题党吧,因为一开始的目标也不是只针对 Windows , 在我的 github 仓库里面,写着是要翻译成 Bash ,Batch ,Powershell 的。然后就是命令了,现在哪怕是最现代化的批处理脚本 Powershell 也很难对市面上的命令进行有效的代码提示,甚至 ps 自己的静态分析就很鸡肋。所以 Hulo 就设计出来了,一款以 cmd 类型为基础数据类型的编程语言,不过这块还没实现,因为要实现的难点在于 命令很复杂,需要一套有效的声明系统,以及不同平台的命令需要实现跨平台封装 相比传统编程语言更加自然,为此我设计了两套还存在于 PPT 中的系统。
bigtear
76 天前
可以尝试兼容 Python 或者 Golang 的语法,前景会大很多。
不过你这个应用场景略小众,毕竟现在 Windows 都自带 PowerShell 了。
ansurfen
76 天前
@bigtear 感谢你的建议,不过目前的计划会先把各平台的批处理脚本都对接完成,然后实现最核心的功能,命令类型,并且实现对命令的代码提示和接收参数的类型检测。虽然自带 Ps ,但是并不冲突,未来可以编写一个 Hulo 代码,翻译成 Powershell 和 Bash 脚本。让批处理脚本一次编写多端运行。不过这还需要一个命令转换系统,比如说 Write-Host 和 echo 的跨平台抽象,这块我后面会实现,已经设计出了语法糖。
darkway
76 天前
恭喜你发明了易语言
uqf0663
76 天前
很棒的想法,加油。
Damn
76 天前
49 年入国军,vbs 都要被废了。。
https://www.ithome.com/0/770/120.htm
ansurfen
76 天前
@Damn 哈哈哈,这个我之前看过。虽然要被废了,但是不可否认 Windows10 还有很大市场份额的。不过先发布 VBS 的支持是因为他的语法最接近传统的编程语言,不会像其他批处理脚本一样有各种抽象的概念(比如说 &>, $(), [[]] 等符号满天飞),要设计的地方很多,这周会发布 Hulo 到 Bash 翻译的版本,然后下下周在支持 Batch 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1144909

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX