V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
ansurfen
V2EX  ›  程序员

Hulo 语言架构:从源代码到目标代码的完整流程

  •  
  •   ansurfen · 5 天前 · 1027 次点击

    最近这一段时间忙着工作和开发Hulo编程语言,满打满算已经过了三个月多了。心血来潮,想梳理下 Hulo 编程语言的开发流程,也顺带以个人的视角解读下编程语言是如何从零开始诞生的。希望通过这篇文章,能够为对编程语言实现感兴趣的开发者提供一个实践性的参考,同时也记录下这段充满挑战和收获的开发历程。

    架构

    Hulo 语言的定位是批处理脚本的编译器,最终经过编译后的目标语言是 Bash 、Batch 、VBS 、PowerShell 等脚本语言。为了统一抽象这些不同的目标语言,Hulo 不仅仅包含解析器和转译器,还为此设计了完整的编译工具链:

    核心组件

    • 解析器 (Parser): 将源代码转换为抽象语法树(AST)
    • 模块管理 (Module Manager): 处理依赖关系和符号解析
    • 解释器 (Interpreter): 支持元编程和编译时计算
    • 调试器 (Debugger): 配合解释器进行调试和错误诊断
    • 优化器 (Optimizer): 负责代码剪枝和性能优化
    • 转译器 (Transpiler): 将 AST 转换为目标语言代码
    • Unsafe 模板引擎: 在转译过程中支持嵌入原生代码
    • 链接器 (Linker): 负责将原生代码块链接到一起

    编译流程

    从上面的专有名词上看,Hulo 好像该有的都有。但是,大部分组件都还在开发中,只是局部实现并通过了单元测试嘿嘿。不过,这并不影响本次科普的开展。

    至此,Hulo 的完整编译流程大概是这样的:

    源代码 → 解析器 → 模块管理 → 解释器(调试器) → 优化器 → 转译器(携带着 unsafe 模板引擎) → 链接器 → 目标语言代码

    编译概念

    这个完整的过程,Hulo 将其称之为编译。整个生命周期都是由编译器(compiler)控制的,编译也就是从一个语法转换成另一个语法的过程,比如说 C 语言编译成汇编,Hulo 语言编译成批处理脚本。

    与传统编译器的对比

    传统编译器 Hulo 编译器
    C → 汇编 Hulo → Bash/Batch/VBS/PowerShell
    机器码执行 脚本解释执行
    多平台汇编 多脚本语言

    这种设计使得 Hulo 能够为不同的脚本环境生成相应的代码,同时保持了统一的开发体验。

    源代码

    源代码是编程语言实现的基础,每个开发者都熟悉这个概念:编写代码需要创建文件并在其中编写逻辑。源代码主要包含两个部分:文件的扩展名和文件的内容(语法部分)。

    语法

    语法可以说是一个编程语言区别于其他编程语言的重要标志。每种语言都有其独特的语法特性,这些特性在很大程度上决定了语言的风格和用途。例如:

    • Golang: 管道运算符<-changodefer关键字等,这些特性与其他语言相比有很强的辨识度
    • C 语言: 宏定义满天飞,预处理器功能强大
    • TypeScript: 类型体操,复杂的类型系统
    • Rust: 所有权系统、生命周期标注
    • Python: 缩进语法、列表推导式

    这些语法特性不仅影响代码的编写风格,也在很大程度上决定了标准库的设计和实现方式。当然,也不排除各种语法大杂烩的语言,比如说 Hulo 就位列其中 :)

    文件名

    和普通的文本文件类似,代码本身也是一种结构化的文本格式。文件的扩展名可以自由选择,在这里 Hulo 语言选择了.hl作为扩展名。建议在选择扩展名时要与市面上现有的语言区分开来,避免同名扩展名可能导致的编译冲突。尽管文件内容的存储与扩展名无关,但在解析过程中,编译器通常会根据扩展名来确定文件类型和处理方式,因此选择合适的扩展名有助于避免潜在的编译问题。

    3 条回复    2025-08-09 16:59:36 +08:00
    ansurfen
        1
    ansurfen  
    OP
       5 天前
    由于推流,后续的章节 2-3 天一更
    putaozhenhaochi
        2
    putaozhenhaochi  
       5 天前 via Android
    PowerShell 已经跨平台了吧。Hulo 意义在哪
    ansurfen
        3
    ansurfen  
    OP
       5 天前
    @putaozhenhaochi
    既然 Windows 都自带 PowerShell 了,为什么还需要 Hulo ?
    虽然自带 PowerShell ,但 Hulo 并不冲突。未来可以编写一个 Hulo 代码,翻译成 PowerShell 和 Bash 脚本,让批处理脚本一次编写多端运行。这还需要一个命令转换系统,比如 Write-Host 和 echo 的跨平台抽象。
    很少人在 linux 上使用 powershell ,而是使用 bash ,而 hulo 的意义就是作为批处理脚本的 IR 语言。而且 linux 上的 powershell 需要自己安装,不是捆绑在内核中的
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3750 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 05:17 · PVG 13:17 · LAX 22:17 · JFK 01:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.