Crystal 1.3.0 釋出,語法類似 Ruby 的編譯型程式語言

2022-01-08 09:00:19

Crystal 是一種通用的、物件導向的程式語言,由 Ary Borenszweig、Juan Wajnerman、Brian Cardiff 和 300 多名貢獻者設計開發。Crystal 的語法受到 Ruby 語言的啟發,屬於編譯語言,具有靜態型別檢查功能,但一般不需要指定變數或方法引數的型別,可實現接近 C/C++ 的效能。它的型別由一個先進的全域性型別推理演演算法來解決。

最新發布的版本包含錯誤修復和功能改進,涉及到編譯器、程式碼生成、偵錯程式、解析器、語意、語法、標準庫、加密、網路、執行時和語法宏等方面,。

部分亮點

系統呼叫(SYSCALLS)

新增了一個實驗性 API 來建立原生系統呼叫 ()。目前僅支援 Linux。這是支援 Linuxio_uring介面以提高 IO 效能的第一步。

如需定義系統呼叫,請開啟一個模組並使用宏。如以下範例所示,需要傳入系統呼叫名稱、返回型別及其引數。

require "syscall"

module MySyscalls
  Syscall.def_syscall write, Int32, fd : Int32, buf : UInt8*, count : LibC::SizeT
end

data = "Hello!\n"
MySyscalls.write(1, data.to_unsafe, LibC::SizeT.new(data.size))

支援 128 位字面量

通過改進解析器,現在可以理解完整範圍內的數位文字或 128 位整數 ()。到目前為止,僅在 64 位值的範圍內支援 128 位文字。

1_i128                                       # Works in 1.2.2 and 1.3.0
170141183460469231731687303715884105727_i128 # Fails in 1.2.2, works in 1.3.0
1_.1   # Error: unexpected '_' in number
-0u64  # Error: Invalid negative value -0 for UInt64
-0_u64 # Error: Invalid negative value -0 for UInt64
1__2   # Error: consecutive underscores in numbers aren't allowed
0x_2   # Error: unexpected '_' in number
0_12   # Error: octal constants should be prefixed with 0o
0e40   # => 0.0
0x     # Error: numeric literal without digits

展開閱讀全文