動態

詳情 返回 返回

耗時一週,我的編程語言 Hulo 新增 Bash 轉譯和包管理工具 - 動態 詳情

嘿,腳本開發者們!

還記得上週我介紹的那個能編譯成 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.yamlhuloc.yaml 文件控制項目的編譯過程。這有點類似於 package.jsontsconfig.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 讀取配置
  • 更靈活的項目配置管理

🚧 下一步計劃

  1. Batch 轉譯支持 - 讓 Hulo 在 Windows 上更強大
  2. 包發佈系統 - 讓社區能分享和複用代碼
  3. Import 系統 - 支持第三方庫導入
  4. 命令體操 - 更智能的代碼生成

💭 寫在最後

項目地址:https://github.com/hulo-lang/hulo

如果你覺得這個項目有意思,歡迎在 GitHub 提 issue 或參與討論!給個 Star 支持一下,讓更多人看到這個項目。

你覺得這種"一次編寫,多平台運行"的腳本開發方式怎麼樣?有什麼建議或想法嗎?

user avatar gushiio 頭像 huizhudev 頭像 nocobase 頭像 josie_68d213f999ae8 頭像 crossoverjie 頭像 kubeexplorer 頭像 yuzhoustayhungry 頭像 kukudejiqimao_bns3pe 頭像 meiyoufujideyidongdianyuan 頭像 openbuild 頭像 data_ai 頭像 openbayescom 頭像
點贊 38 用戶, 點贊了這篇動態!
點贊

Add a new 評論

Some HTML is okay.