嘿,腳本開發者們!
還記得上週我介紹的那個能編譯成 VBScript 的現代編程語言 Hulo 嗎?這周它又有了重大更新!
🚀 本週重磅更新
1. Bash 轉譯器正式上線!
是的,你沒看錯!Hulo 現在不僅支持 VBScript,還支持 Bash 了!
這意味着你可以用同一套現代語法,同時生成 Windows 和 Linux/macOS 的腳本:
// main.hl
class User {
pub name: str
pub age: num
pub fn to_str() -> str {
return "User(name: $name, age: $age)"
}
pub fn greet(other: str) {
MsgBox "Hello, $other! I'm $name."
}
}
let u = User("John", 20)
MsgBox $u.to_str();
$u.greet("Jane");
在文件所在的工作目錄執行 hulo main.hl 命令即可得到兩份轉譯後的文件(當然 Hulo 命令還支持其他功能,以及從 huloc.yaml 讀取配置,在此就不一一列舉了,可以通過 hulo -h 查看,或者查詢官方文檔)。
生成的 Bash 代碼:
#!/bin/bash
function create_user() {
local name=$1
local age=$2
declare -A user
user["name"]=$name
user["age"]=$age
echo "$(declare -p user)"
}
function user_to_str() {
eval "declare -A user=${1}"
echo "User(name: $name, age: $age)"
}
function user_greet() {
eval "declare -A user=${1}"
local other=$2
MsgBox "Hello, $other! I'm $name."
}
u=$(create_user "John" 20)
MsgBox $(user_to_str $u)
user_greet $u "Jane"
生成的 VBScript 代碼:
Class User
Public name
Public age
Public Function to_str()
to_str = "User(name: " & name & ", age: " & age & ")"
End Function
Public Function greet(other)
MsgBox("Hello, " & other & "! I'm " & name & ".")
End Function
End Class
Set u = New User
u.name = "John"
u.age = 20
MsgBox(u.to_str())
u.greet("Jane")
至此,看起來一切正常對嗎?不幸的是,在 Bash 平台上的代碼是無法正常運行的,他會因為缺少 MsgBox 而報錯,這是因為我們在 Hulo 代碼中使用的是 MsgBox 而非 echo。因此,如果你想讓他正常運行就需要將 MsgBox 更改為 echo 在進行轉譯。但是,這不就和 Hulo 的跨平台宣傳產生衝突了?hhh,原因是類似 use MsgBox = If<$platform == "vbs", MsgBox, If<$platform == "powershell", Write-Host, echo>> 的語法糖還沒有完工,造成了命令沒法轉譯的割裂感。Hulo 也不想採用硬編碼的方式強行把命令在轉譯器中做轉換,由此帶來了比較差的開發體驗。這個特性將在未來的版本實現,請給 Hulo 以時間。
Ps. Hulo 將這個特性稱之為命令體操,為了實現這個特性,Hulo吸取了 TypeScript 類型體操的所有優點,這意味着這套系統將連帶着 Omit、Pick、Exclude 等類型工具一同構成強大的命令系統。
2. 包管理工具 HLPM 來了!
hlpm 的核心功能就是分發第三方庫,由於 import 暫時不支持模塊解析,儘管 hlpm 核心功能已經開發完成,但是調用模塊的運行還是不支持的。但是,你可以用其先初始化項目,並編寫 hulo.pkg.yaml 和 huloc.yaml 文件控制項目的編譯過程。這有點類似於 package.json 和 tsconfig.json 的作用。
# 初始化新項目
hlpm init my-script
# 運行腳本
hlpm run test
# 運行文件,等價於 hulo main.hl
hlpm run main.hl
3. 交互式開發環境 Hulo-REPL
新增了 hulo-repl 命令:
- [x] 代碼補全
- [x] 主題設置
- [ ] 實時詞法分析、語法分析調試(即將上線)
- [ ] 實時轉譯(即將上線)
PS C:\hulo> hulo-repl
Hulo-REPL dev
➜ Type help for commands, exit to quit
>>> e
else Else statement
enum Enum declaration
extend Extend declaration
exit Exit the REPL
🔧 技術改進
重構了 VBScript 轉譯器
- 代碼結構更清晰,更易維護
- 修復了
echo "Hello World"字符串轉譯問題
本次更新是一次破壞性更新,v0.1.0 版本所實現的功能可能部分無法在 v0.2.0 運行。尤其是涉及到 import 的地方,模塊的設計會在接下來更近。
配置系統升級
hulo命令現在支持從工作目錄的huloc.yaml讀取配置- 更靈活的項目配置管理
🚧 下一步計劃
- Batch 轉譯支持 - 讓 Hulo 在 Windows 上更強大
- 包發佈系統 - 讓社區能分享和複用代碼
- Import 系統 - 支持第三方庫導入
- 命令體操 - 更智能的代碼生成
💭 寫在最後
項目地址:https://github.com/hulo-lang/hulo
如果你覺得這個項目有意思,歡迎在 GitHub 提 issue 或參與討論!給個 Star 支持一下,讓更多人看到這個項目。
你覺得這種"一次編寫,多平台運行"的腳本開發方式怎麼樣?有什麼建議或想法嗎?