Crystal 1.16程式語言已經發布,其開發人員試圖將Ruby語言的開發便利性與C語言的高應用效能特性結合。 Crystal 的語法接近但不完全相容於 Ruby,儘管某些 Ruby 程式無需修改即可運行。 編譯器程式碼是用 Crystal 編寫的,並根據 Apache 2.0 授權分發。
該語言使用靜態類型檢查,無需在程式碼中明確指定變數和方法參數的類型即可實現。 Crystal 程式被編譯成可執行文件,並在編譯時評估巨集並產生程式碼。在 Crystal 程式中,可以連接用 C 編寫的綁定。使用“spawn”關鍵字可以並行化程式碼執行,這允許您以非同步模式運行後台任務,而不會阻塞主線程,以稱為纖程的輕量級線程的形式。
標準庫提供了一組典型功能,包括處理 CSV、YAML 和 JSON 的工具、建立 HTTP 伺服器的元件以及 WebSocket 支援。在開發過程中,可以使用「crystal play」指令,該指令會產生一個Web介面(預設為localhost:8080)用於互動式執行Crystal程式碼。
主要變化:
- 增加了在單獨的執行上下文(執行上下文)中運行輕量級線程(纖程)的實驗性支持,這允許更有效地並行執行任務 - 在一個上下文中阻塞線程不會導致在另一個上下文中停止執行。 mt_context = Fiber::ExecutionContext::MultiThreaded.new("worker-threads", 4) 10.times do mt_context.spawn do do_something end end gtk = Fiber::ExecutionContext::Iitsolated。
- Slice.literal 方法現在提供切片中包含的元素類型的輸出,並增加了在解釋器中工作的支援。
- sizeof 和 alignof 巨集提供有關穩定類型的信息。
- 標準庫中新增了新方法:Indexable#find、#find!、EventLoop#wait_readable 和 #wait_writable。
- 編譯器具有“-o”選項的長版本,“--output”,並且已經實現了指定目錄而不是檔案的功能(將根據帶有程式碼的檔案名稱來選擇檔案名稱)。
- 文檔生成器現在能夠在文檔中包含私有和受保護的對象,以及庫綁定(lib、fun、union、cstruct、external、type)中的對象。
- 在「File.match?」方法實現了一種新的檔案路徑匹配演算法,消除了一些問題和限制。例如,字元轉義(“\\t”掩碼與“\t”匹配,但不與“t”字元匹配)、路徑拆分(“a**”遮罩與“ab”匹配,但不與“ab/c”匹配,而“**/a”遮罩與“a”相符)、巢狀模式(“{[}]}”遮罩可以與您一起處理)和範圍(“{”}”)和範圍(“{[}]}"
- 後綴「?」在定義(defs)、巨集和區塊中的參數名稱中已被棄用。和 」!」。
- 在 Enumerable#sum 和 #product 方法中,如果元素類型是聯合,則已刪除傳回類型的自動確定。當呼叫這些方法時,現在需要明確指定類型,例如,不要寫“[1, 10000000000_u64].sum”,而應該寫“[1, 10000000000_u64].sum(0_u64)”。
- HTTP::Request 確保 URL 各部分的正確解析。
- 增加了對 LLVM 20 編譯器套件的支援。
- 對 LLVM::ABI 和 LLVM::TargetMachine#abi 的呼叫已被棄用。
來源: opennet.ru
