CHANGELOG v0.32.0
2019/12/11
[原文]
言語使用
真偽値として評価した際の否定を通常のメソッドと同様に expr.!
と書けるようになった(#8445)
マクロ
マクロ内である型のクラスリスト一覧を取得する TypeNode#class_vars
を追加(#8405)
あるモジュールを直接 include している型の一覧を取得する TypeNode#includers
を追加(#8133)
ArrayLiteral#map_with_index
と TupleLiteral#map_with_index
を追加(#8049)
ArrayLiteral#reduce
にドキュメントを追加(#8379)
StringLiteral#camelcase
に 名前付き引数 lower:
を追加(#8429)
標準ライブラリ
[破壊的変更] 標準ライブラリから Readline
を取り除きいた。今後は crystal-lang/crystal-readline から shard として利用可能(#8364)
Number#clamp
を Comparable#clamp
へ変更(#8522)
引数なしで abort
が呼べるようになった(#8214)
getter に絡んで Nil 制約に引っかかった際のエラーメッセージを改善(#8200、#8296)
Enum.valid?
を追加(#5716)
環境変数が TERM=dumb
である場合に、出力メッセージの色付けをしないように(#8271)
ドキュメントの改善(#7656、#8337、#8446)
仮メソッドについてのドキュメントを追加(#8327、#8491)
Object
型に定義されている !
、as
、as?
、is_a?
、nil?
、responds_to?
はコンパイラによって実装されていてオーバーライドできない、ということが明記されるようになった。
コードの掃除(#8270、#8368、#8404)
数値
型の最小値 に対して %
や Int#remainder
を -1
引数に実行した場合の処理を修正(#8321)
Int#gcd
のレエアケース対応と性能改善(#7996、#8419)
整数値の指定された範囲のビットにアクセするための Int#bits
を追加(#8165)
Number#round
の引数に UInt
を許可(#8361)
テキスト
[破壊的変更] 文字列リテラルの式展開を String.interpolation
メソッドを呼ぶ方式に変更(#8400)
String.interpolation
メソッドの実装を最適化することで、コンパイラを変更することなく式展開のパフォーマンス工場が図れる。
[破壊的変更] String#codepoint_at
を廃止。 今後はchar_at(index).ord
を使用(#8475)
musl iconv に絡んでエンコーディング周りの spec を修正(#8525)
String#presence
を追加(#8345、#8508)
文字列が空だったら nil
を返し、そうでなければ自分自身を返すメソッド。
String#center
を追加(#8557)
#rjust
(右寄せ)や ljust
(左寄せ)と同じように中央寄せした文字列を返す。
[性能改善] ASCII文字しか含まない場合の String#to_utf16
をリファクタ(#8526)
Levenshtein
モジュールにドキュメントを追加#8386)
文字列同士の類似度(レーベンシュタイン距離)を計算できる。
Regex::Options
にドキュメントを追加(#8448)
コレクション
[破壊的変更] Enumerable#grep
を廃止。今後は Enumerable#select
を使用。(#8452)
比較不能な要素を含む場合の Enumerable#minmax
、#min
、#max
の挙動を修正(#8490)
そうした場合に ArgumentError
が発生するようになった。
Hash#rehash
の挙動を修正(#8450)
Array
の範囲へ代入する際、代入先にインデックス範囲外が指定された際の挙動を修正(#8347)
代入先の範囲の先頭インデックスが配列のサイズと同じ場合を許容するように変更。
a = [0,1,2]
# a[3] は存在しないが指定可能
a[3..] = [3,4,5]
a #=> [0, 1, 2, 3, 4, 5]
String#[]?
と Array#[]?
に終端のない範囲オブジェクト(3..
とか)を指定可能に(#8567)
Hash#compare_by_identity
と Set#compare_by_identity
を追加(#8451)
キーや値の比較に #object_id
を使用するようになる。
ブロック引数をタプルで渡す Enumerable#each_cons_pair
と Iterator#cons_pair
を追加(#8332)
タプルで渡されるため、ブロック引数を個別の変数で受けられる。(2要素ずつ取り出す場合だけ)
すべての map_with_index
メソッドに offset
引数を追加(#8264)
[性能改善] Tuple#to_a
を最適化(#8265)
Hash.merge!(other : Hash, &)
にドキュメントを追加(#8380)
Hash.select
にドキュメントを追加(#8391)
Enumerable.reduce
にドキュメントとテストケースを追加(#8378)
直列化
[破壊的変更] XML::Reader#expand
が展開できない場合に例外を出すようになり、これまでと同様の動作をする XML::Reader#expand?
を導入(#8186)
JSON.mapping
と YAML.mapping
で Array
や Hash
が値の変換に使用するコンバータを指定できるようになった(#8156)
プロパティ値から型を選択するための use_json_discriminator
と use_yaml_discriminator
を追加(#8406)
Object.from_json
と Object.from_yaml
から返り血の型制約 self
を除去(#8489)
ファイル
[破壊的変更] File.expand_path
と Path#expand
が標準ではホームディレクトリ(~
)を展開しなくなり、必要であれば引数で明示する方式に変更された(#7903)
Path
の #dirname
、#each_part
、#each_parent
に関するバグを修正(#8415)
GZip::Reader
と GZip::Writer
が大きなデータサイズを扱えるよう修正(#8421)
File::Info#same_file?
が 64bit inode 番号を使用するよう修正(#8355)
ネットワーク
Content-Type
ヘッダが空の時に、HTTP::Response#mime_type
が nil
を返すよう修正(#8464)
SSL サーバが一方的に接続を終了した場合に対応できるよう修正(#8481)
HTTP::Client#write_timeout
を追加(#8507)
.js
の MIME タイプを text/javascript
に変更し、image/webp
を追加(#8342)
Websocket プロトコルの GUID 文字列をリファクタ(#8339)
暗号化
[破壊的変更] OpenSSL::DigestBase#base64digest
が Base64.strict_encode
を使用して改行を含まない結果を返すように変更(#8215)
並列/並行処理
Channel#send
で送信に成功したにもかかわらず例外が発生することがあったのを修正(#8284)
Channel#close
をスレッドセーフ化(#8249)
receive?
が既に閉じられたチャンネルに対して使用された際の select
の挙動を修正(#8304)
高速な Mutex
実装とポリシーチェックの追加(#8295、#8563)
[性能改善] Channel
内部実装のリファクタと最適化(#8322、#8497)
Channel#send
と Channel#close
にドキュメントを追加(#8356)
Thread#gc_thread_handler
を Windows 対応(#8519)
システム
マルチスレッドモードでシグナルハンドラようのパイプを閉じないよう変更(#8465)
OpenBSDのスレッド初期化処理を修正(#8293)
Win32 向けにファイバを実装(#7995、#8513)
実行時
-Dgc_none -Dpreview_mt
使用時のファイバ初期化処理を修正(#8280)
GC のプロファイリングステータスとワーニングバインディングを追加(#8281)
callstack_spec
をリファクタ(#8308、#8395)
スペック
--fail-fast
の挙動を修正(#8453)
before
, after
、around
フックを追加(#8302)
should_not be_nil
などの返り値の型制約を追加(#8412)
--order random|<seed-value>
を指定することでスペックの評価順をランダム化できるようになった(#8310)
Spec
フィルタの spec を追加(#8242)
spec にタグ付できるようになった(#8068)
タグを指定して特定の spec だけを実行することが可能。
コンパイラ
musl の libc 検索を修正(Alpine 3.10 のバグ対応)(#8330)
マクロ内でのプラグマ処理を修正(#8256)
‘alias Foo?’ でパーサがクラッシュするのを修正(#8282)
とじ括弧の前に改行があるとパーサエラーが発生していたのを修正(#8320)
ジェネリック型のサブタイプが特定の状況で no target defs
エラーを引き起こすのを修正(#8417)
マクロが認識可能なローカル変数のクリーンアップを修正(#8529)
LLVM 9 サポートを追加(#8358)
コンパイラに --mcmodel
オプションを追加(#8363)
ユニオン型で instance_sizeof
を使用不可に(#8399)
ヘルプ内で crystal <command> --help
に言及(#3628)
ファイル名をスペルミスした際のエラ〜メッセージを改善(#8500)
ローカルでコンパイルされた Crystal のフルパスを表示するように(#8486)
コード整理(#8460)
言語仕様
ユニオン型の alias が使用された際のメソッド検索優先度を修正(#8258)
仮想型のアクセス修飾子の挙動を修正(#8562)
sizeof(Bool)
の挙動を修正(#8273)
これまで 0
が返されていたものが 1
を返すようになった。