Crystal プログラミング言語 1.5 のリリース

Crystal 1.5 プログラミング言語のリリースが公開されました。この言語の開発者は、Ruby 言語での開発の利便性と、C 言語の高いアプリケーション パフォーマンス特性を組み合わせようとしています。 Crystal の構文は Ruby に似ていますが、完全な互換性はありませんが、一部の Ruby プログラムは変更せずに実行できます。 コンパイラ コードは Crystal で記述され、Apache 2.0 ライセンスに基づいて配布されます。

この言語は静的型チェックを使用しており、コード内で変数やメソッド引数の型を明示的に指定する必要なく実装されています。 Crystal プログラムは実行可能ファイルにコンパイルされ、コンパイル時にマクロが評価され、コードが生成されます。 Crystal プログラムでは、C で記述されたバインディングを接続できます。 コード実行の並列化は、「spawn」キーワードを使用して実行されます。これにより、メインスレッドをブロックせずに、ファイバーと呼ばれる軽量スレッドの形式でバックグラウンド タスクを非同期モードで実行できます。

標準ライブラリは、CSV、YAML、JSON を処理するツール、HTTP サーバーを作成するためのコンポーネント、WebSocket サポートなどの共通関数の大規模なセットを提供します。 開発プロセス中は、Crystal 言語でコードを対話的に実行するための Web インターフェイス (デフォルトでは localhost:8080) を生成する「crystal play」コマンドを使用すると便利です。

主な変更点:

  • コンパイラは、抽象メソッドの実装とその定義における引数名の対応関係のチェックを追加しました。 名前の不一致がある場合、警告が発行されます。 abstract class FooAbstract abstract def foo(number : Int32) : Nil end class Foo < FooAbstract def foo(name : Int32) : Nil p name end end 6 | def foo(name : Int32) : Nil ^— 警告: 位置パラメータ 'name' は、オーバーライドされたメソッド FooAbstract#foo(number : Int32) のパラメータ 'number' に対応します。このパラメータは名前が異なるため、名前付き引数の受け渡しに影響を与える可能性があります。
  • 型なしメソッドの引数を変数の値に代入する場合、引数はその変数の型に制限されるようになりました。 class Foo @x : Int64 defInitialize(x) @x = x # パラメータ x は型指定されます @x end end
  • メソッドまたはマクロのパラメータに注釈を追加できます。 def foo(@[MaybeUnused] x); 終了 # OK
  • タプル内のインデックスおよび名前として定数を使用するためのサポートが追加されました。 KEY = "s" foo = {s: "String", n: 0} puts foo[KEY].size
  • ファイルとディレクトリを削除するための新しい File#delete? メソッドが File API に追加されました。 および Dir#delete? は、ファイルまたはディレクトリが見つからない場合に false を返します。
  • File.tempfile メソッドの保護が強化され、ファイル名を形成する行に null 文字が許可されなくなりました。
  • 環境変数 NO_COLOR を追加しました。これにより、コンパイラおよびインタープリタ出力での色の強調表示が無効になります。
  • インタプリタモードでの作業が大幅に改善されました。

出所: オープンネット.ru

コメントを追加します