V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
ansurfen
V2EX  ›  分享创造

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

  •  
  •   ansurfen · 2025 年 7 月 13 日 · 1977 次点击
    这是一个创建于 185 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    15 条回复    2025-07-14 09:16:45 +08:00
    xiangyuecn
        1
    xiangyuecn  
       2025 年 7 月 13 日
    为什么不直接用 JScript
    ansurfen
        2
    ansurfen  
    OP
       2025 年 7 月 13 日
    @xiangyuecn VBScript 原生可以跑在 windows 上面,不需要运行时,也可以用来编写批处理脚本。然后后面我会发布 Hulo 到 Bash 、Powershell 、Batch 的转译支持,目前在重构语法树 可能下周在增加一个新的语言。最主要的就是这些批处理脚本能直接跑不需要运行时,我对 Hulo 的定位就是写批处理脚本相关的,然后现在还在早期 相关的工具链还没开发 可以期待一下。
    hj18
        3
    hj18  
       2025 年 7 月 13 日
    很棒的想法,我支持。
    TrackBack
        4
    TrackBack  
       2025 年 7 月 13 日
    想法很棒,不过为什么要重新发明新语言?
    在现有语言的基础上写应该会方便很多,推广也容易

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

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