Crystal 1.8.0 がリリースされました。Ruby に似た構文を持つコンパイル済みプログラミング言語です。

Crystal は、Ary Borenszweig、Juan Wajnerman、Brian Cardiff、および 300 人を超える貢献者によって設計および開発された、汎用のオブジェクト指向プログラミング言語です。Ruby に着想を得た Crystal の構文は、静的な型チェックを備えたコンパイル済み言語ですが、通常は変数やメソッド パラメーターの型を指定する必要がなく、C/C++ に近いパフォーマンスを実現できます。その型は、高度なグローバル型推論アルゴリズムによって解決されます。

 Crystal 1.8.0 がリリースされました。このバージョンのいくつかの変更点:

正規表現: PCRE2

このリリースでの破壊的で必要な変更は、PCRE2 が正規表現のデフォルト エンジンになることです ( #12978 )。PCRE2 のサポートは 1.7 で追加され、1.7.3 で安定化されました。デフォルトで安全に使用できると考えています。コンパイル時に PCRE2 が利用できない場合、またはコンパイラ フラグ -Duse_pcre を介して、自動的に PCRE にフォールバックすることは可能です。

1.8 以降、Crystal コンパイラは、一貫性を確保するために PCRE2 でビルドする必要があります。

PCRE2 への移行を容易にする手段として、 両方のエンジン バージョンで動作するより多くの名前付きメンバーが取得されました。追加の値に対応するために、enum の基本型が( #13223 )から変更されましたRegex::Options  Int32  UInt64   

 さらに、一致アクションに固有のオプションを保持するために新しい列挙型が追加され、現在はエイリアス化されています( #13248 )。マッチング メソッドのオーバーロードは非推奨ですRegex::MatchOptions  Regex::Options  Regex::CompileOptions    Regex::Options 

正規表現: 無効な UTF

アップグレードとは関係ありませんが、このリリースには両方のエンジン バージョンに影響するバグ修正が含まれています。Crystal の String クラスは有効な UTF-8 であることを意図していますが、強制されておらず、無効な UTF-8 を含めることはまったく問題ありません。文字列が PCRE または PCRE2 に渡される場合、その内容が有効であることを確認する必要があります。

これを事前に行わないと、ライブラリがクラッシュする可能性があります。現在 、すべての一致メソッドは文字列を検証し、無効な UTF-8 が含まれている場合は例外を発生させます。文字列が有効な UTF-8 であることがわかっている場合は、検証をスキップてパフォーマンスを向上させます。Regex.new  Regex::CompileOptions::NO_CHECK_UTF  Regex::MatchOptions::NO_CHECK_UTF 

言語

このリリースでは、LLVM 15 ( #13173 ) のサポートが追加されました。これには、不透明なポインターの LLVM への移行が含まれます。これにより、コンパイル速度が大幅に向上することが示されています。

  • コンパイルのパフォーマンスを向上させるために、Crystal を LLVM 15 でビルドすることをお勧めします。
  • このリリースでは、古い LLVM バージョンのサポートが廃止されました。Crystal には LLVM 8 以降が必要になりました (  #12906  )。
  • LLVM 16 のサポートは開発中です (  #13181  )。

プラットフォームのサポート

このリリースは Android をサポートし、Windows で大幅な改善を行いました

AArch64 アンドロイド

  • Bionic C ランタイムを使用して Android をターゲットにできるようになりました ( )。これを機能させる方法の詳細については、関連する PR ( #13065 ) を参照してください。aarch64-linux-android   

 

ウィンドウズ 

  • Windows の stdlib 機能を完全にカバーする方向に進んでいます。
  •  このリリースには、シンボリックリンクに関連するいくつかの改善が含まれています( #13141   #13195 ) 
  • このリリースでは、 Windows シグナルの 完全なスタブも追加されています( #13131 )。 
  • Windows 7 バージョンをサポートするためのパッチが承認されました (  #11505  )。

信号

Unix システムでは、プロセス間通信 (プロセスの終了や割り込みへの応答など) はシグナルに基づいており、 Signal Crystal の API がこれに使用されます。異なるメカニズムを使用するオペレーティング システム (Windows など) をサポートするには、実装から意図を抽象化する移植可能な API を使用する必要があります。

  • Process.on_interrupt 割り込みの処理:  SIGINT (Unix) または ( Windows) ( #13034 )。Ctrl+C  Ctrl+Break   
  • Process#terminate パラメータを取得しました graceful Unix では SIGTERM との SIGKILL どちらかを選択しますが、Windows では効果がなく、とにかく そのように動作します( #13070 )   taskkill /f 
  • Process::Status#exit_reason  移植可能な方法でプログラムの終了ステータスに関する情報を提供します ( # 13052 )Process::ExitReason   

 標準ライブラリ

  •  #13242#13249で間違った型 (たとえば の代わりに)を使用していたLibC いくつかの関数定義 を修正しました。これは、ターゲットで大量のネットワーク パケットを送信するエラーに影響します。    Int  SizeT  *-linux-gnu 

http

  • HTTP::StaticFileHandler プル リクエストがサポートされるようになりました Range (  #12886  )。

 

仕様

  • spec  pretty_inspect 結果は(  #11635 )を使用してフォーマットされ 、スペック ランナーは オプション ( #12932 ) をサポートします。--color   

列挙型

  • Enum#includes? すべてのビットを設定する必要があります (  #13229  )。
  • Enum.[] は新しい便利なコンストラクターで、特にフラグ列挙型に役立ちます。 現在非推奨になっている( #12900 )を置き換えます( #13004 )を使用した簡潔な構文。Enum.flags    Enum#inspect  Enum.[]   

範囲

ジェネリック パラメーター Nil が,  ,の場合コンパイル時のエラーはなくなります。たとえば、コンパイルの失敗ではなく、実行時に発生するようになりました ( #13278 )。Range#size  #each  #sample  (..4).each { }   

 

インデックス可能

Indexable  の実装は安定している必要があります。つまり、明示的に変更しない限り動作を変更しないでください( #13061 )。 

 

アップデートのお知らせ:https ://crystal-lang.org/2023/04/14/1.8.0-released/

おすすめ

転載: www.oschina.net/news/237022/crystal-1-8-0-released
おすすめ