ansurfen 最近的时间轴更新
ansurfen

ansurfen

尽你所能,敬你所不能
🏢  编程爱好者 / 全栈开发
V2EX 第 641414 号会员,加入于 2023-08-01 21:56:56 +08:00
ansurfen 最近回复了
36 天前
回复了 ansurfen 创建的主题 程序员 Hulo 编程语言开发 —— 解释器
@gullitintanni 虽然发这个帖子有一定的推广存在,但是如果把每篇文章串联起来,你会对“一个编程语言是如何开发的?”有比较清晰的认识,也算是一种教程/科普性质的文章。每次文章出现的 Hulo 和标题代的 Hulo 其实可有可无,换成其他语言也是同理,主要是为了浏览器 SEO , 因为这类项目的关注度和推广难度真的很难做起来。
36 天前
回复了 ansurfen 创建的主题 程序员 Hulo 编程语言开发 —— 解释器
@vfs 是的,蛋疼就蛋疼在这里,所以 hulo 需要一堆语法糖去实现这个过程,让用户写起来不需要关注平台的封装,Hulo 会将所有复杂性留在标准库里面,而且也不做编译器内的硬编码,所有的转换都在 .hl 文件里面实现
36 天前
回复了 ansurfen 创建的主题 程序员 Hulo 编程语言开发 —— 解释器
@vfs 其实最直接的理由就是,著名是开源项目 Kubernetes 中 bash 2.4 % + powershell 0.2% > python 0.0% 而 Hulo 存在的意义就是要让 2.6% 变成 Hulo 。不过这可能是目前的幻想 hhhh
36 天前
回复了 ansurfen 创建的主题 程序员 Hulo 编程语言开发 —— 解释器
@w568w 感谢支持。除了 V2EX 我在 b 站的时候宣传评论区也存在诸多不解。大部分人的第一印象就是 为什么不直接用 python 、js 等脚本语言写什么批处理,就存在这种刻板印象。不过也还好,质疑的声音越多,我就可以试着表达我的想法和告诉他们为什么需要 Hulo 这样的语言,也能带来更多的曝光度。要开发一个跨平台的批处理编译时真的,复杂度太大了。目标语言的语法一坨又一坨 要统一他们只有各种的语法糖(运算符重载、操作 ast 、comptime 条件编译...)。有时候 bash 用户可能没有 bc 要用 awk ,有时候可能只想用 (( )) ,batch 的延迟展开 这些操作 真的蛋疼
36 天前
回复了 ansurfen 创建的主题 程序员 Hulo 编程语言开发 —— 解释器
@llsquaer Hulo 现在的定位是批处理脚本的编译时,因为 Hulo 的完成度不是很高,对外宣传的还是比较保守。Hulo 现在能够基础的解释,未来还会为对接上 LLVM ,设计出自己的字节码。至于为什么这么做?因为很多项目都是 bash 、powershell 写的,可以实现一个提升器(lifter) 或者说是 反编译器,将这些语法向 hulo 转换,而 hulo 就能成为这些语言的 IR ,那他能够打包成其他语言,甚至提供 runtime 、native 机制。最终成为批处理脚本的 LLVM
36 天前
回复了 ansurfen 创建的主题 程序员 Hulo 编程语言开发 —— 解释器
@spritecn 每个语法的设计都有考量的,整体上语法是师从 typescript + rust 的。1. 在接口的定义和实现上抄了 rust 的 impl, 分离具体的实现类和接口之间的耦合,这样可以在任何位置实现,比如说 impl findstr for grep, impl grep for findstr ,不同平台命令可以相互实现。2. comptime 这个语法糖他是一个表达式,可以塞在任何地方,所以他和传统的宏还不太一样,他可以耍无赖的放在函数的参数里面,比如说 echo ( true, comptime { ... }) 至于这要做有什么用,就是后面 hulo 会开发的,hulo 的 comptime 可以操作 ast ,但是不同于传统的编程语言 只能操作包裹的子类节点,hulo 的 comptime 能够直接操作父类,也就是说 经过 comptime { ... } 的执行,外层的 echo 可能被替换成 Write-host ,之所以会这样设计 也是为了跨平台的考量。如果是 go, python 的语法糖压根达不到这样的水平。3. hulo 的命令是基础类型,可以对命令进行组合相互实现,例如 use grep = find & findstr 这样的,有点类似 ts 的类型体操,但是 hulo 的机制更加复杂,因为命令有不同的 options 还需要更细粒度的组合,因此 hulo 还参考了 css 的选择器,支持对命令进行更精细化的提取。总的来说,Hulo 的这些语法糖就是为了统一这些平台的语言设计的。
@xgdgsc 这差的很多吧,Hulo 的目标是编译成 Bash 、Powershell 、VBS 、Batch 统一批处理脚本,作为批处理脚本的中间语言,你可以理解成批处理脚本的 LLVM ,然后在写一个提升器,将 Bash 转化成 Hulo ,就可以实现 Hulo 到其他批处理脚本的转换
@xuanwu Hulo 使用 ANTLR4 生成语法树 https://github.com/hulo-lang/hulo/blob/main/syntax/hulo/parser/grammar/huloParser.g4
使用 ANTLR4 有很高的容错性,一旦语法树解析错误也能继续递归, 这种机制使其在处理不完整或有误的输入时仍能保持一定的解析能力(例如 IDE 中的实时语法检查)
@vfs 因为 bash powershell batch vbs 直接与操作系统捆绑着,他们自带 runtime ,其他语言如 python 、js 都需要安装运行时。而且 bash 在 linux 上面的地位有目共睹,大部分的批处理基本上都用 bash 实现。
@putaozhenhaochi
既然 Windows 都自带 PowerShell 了,为什么还需要 Hulo ?
虽然自带 PowerShell ,但 Hulo 并不冲突。未来可以编写一个 Hulo 代码,翻译成 PowerShell 和 Bash 脚本,让批处理脚本一次编写多端运行。这还需要一个命令转换系统,比如 Write-Host 和 echo 的跨平台抽象。
很少人在 linux 上使用 powershell ,而是使用 bash ,而 hulo 的意义就是作为批处理脚本的 IR 语言。而且 linux 上的 powershell 需要自己安装,不是捆绑在内核中的
关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5551 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 19ms · UTC 03:08 · PVG 11:08 · LAX 20:08 · JFK 23:08
Developed with CodeLauncher
♥ Do have faith in what you're doing.