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
。