Crystalは、Ary Borenszweig、Juan Wajnerman、Brian Cardiff、および300人を超える貢献者によって設計および開発された汎用のオブジェクト指向プログラミング言語です。Rubyに触発されたCrystalの構文は、静的型チェックを備えたコンパイル型言語ですが、通常、変数の型やメソッドパラメーターを指定する必要はなく、C /C++に近いパフォーマンスを実現できます。その型は、高度なグローバル型推論アルゴリズムによって解決されます。
Crystal 1.5.0がリリースされました。このバージョンには、バージョン1.4.1以降に23人の寄稿者によって行われた102の変更が含まれています。主な内容は以下のとおりです。
抽象を実装するメソッドのパラメーターはDEF
、名前と一致する必要があります
ドキュメントと堅牢性を向上させるために、パラメーターを名前に明示的に関連付けることができます( ref )。
class Foo
def foo(name : Int32) : Nil
p name
end
end
Foo.new.foo name: 42
したがって、パラメータの名前をそのインターフェイスの一部として考慮する必要があります。ただし、1.5.0より前では、コンパイラは抽象メソッドの実装とその定義の間で一致するパラメータ名をチェックしていませんでした。つまり、次の例はエラーや警告なしでコンパイルされます。
abstract class FooAbstract
abstract def foo(number : Int32) : Nil
end
class Foo < FooAbstract
def foo(name : Int32) : Nil
p name
end
end
1.5.0( #11915 )以降、上記の例では警告が発生します。
6 | def foo(name : Int32) : Nil
^---
Warning: positional parameter 'name' corresponds to parameter 'number' of the overridden method FooAbstract#foo(number : Int32), which has a different name and may affect named argument passing
インスタンス変数のメソッド制限
インスタンス変数に型指定されていないメソッドパラメータの値が割り当てられると、パラメータはインスタンス変数と同じ型を共有するように制限されます。
たとえば、次のコード:
class Foo
@x : Int64
def initialize(x)
@x = x
end
end
1.4.1まで、x
ininitialize
は制限されていませんでしたが、これによりいくつかの問題が発生します。
- ユーザーが誤ったパラメーター(Foo.new'a'など)を渡した場合、パラメーター'a'でエラーをマークする代わりに、xが正しいタイプを持っていないと非難します。
- たとえば、代わりにInt32を渡すと、自動変換は実行されません。Foo.new1は失敗します。
- 生成されたドキュメントは、パラメータxのタイプのヒントを提供しません。
1.5.0以降、@ x = xのような割り当てでは、パラメーターxは@xの型を取得し、上記の3つの問題を効果的に解決します。 詳細は#12103から読むことができます 。
メソッドパラメータで許可されるアノテーション
メソッドまたはマクロのパラメーターにコメントを追加できるようになりました。例として、引数が使用されていない場合にリンターが警告するとします。
def foo(x); end # Warning: argument `x` is not used
その後、特定の状況下で警告しないようにリンターに信号を送ることができます。リンターが次の注釈を提供するとします。
annotation MaybeUnused; end
これをパラメーターに適用すると、警告が削除されます(この特定の架空のリンター):
def foo(@[MaybeUnused] x); end # OK
詳細については、 #12039をご覧ください。
タプルの定数インデクサー
const-indexedタプルまたはnamedタプルを使用する場合、タイプチェッカーはアクセスされた値の正確なタイプを正しく推測します(#12012)。
KEY = "s"
foo = {s: "String", n: 0}
# Before 1.5.0 this failed; it would assume the type of foo[key] to be (String | Int32)
puts foo[KEY].size
セキュリティを強化するFILE.TEMPFILE
#12076によると 、一時ファイルの作成では、ファイル名の文字列にヌル文字を含めることはできません。
NO_COLORコンプライアンス
コンパイラーとインタープリター は、端末での色付き出力を無効にするNO_COLOR 環境変数をサポートします。null以外の値をに設定することで有効にできますNO_COLOR
。 詳細は#11984にあります。
ネイティブWINDOWSサポートに向けた大きな一歩
Windowsでの同時実行ランタイムは、機能イベントループ(#12149 )によってサポートされています。これは、ネイティブWindowsサポートへの道の重要なチェックと交差します。また、Windows互換のものMakefile
( #11773 )があります。
追加のコンテンツは、アップデートの発表にあります:https 。