CHANGELOG v0.29.0
2019/06/05
[原文]
標準ライブラリ
複数箇所のコード使用例を修正(#7718)
マクロ
record マクロが継承をサポート(#7811)
別の抽象構造体(abstract struct)を継承した構造体を record マクロで生成可能になった。
マクロの出力からクォートを削除(#7734)
数値
(性能改善) 負の数値に対する String#to_u メソッドの挙動を最適化。(#7446)
先頭が - だった時点で早期にギブアップすることで10倍高速化されたっぽい。
テキスト
(破壊的変更) String#at メソッドが廃止予定になり、String#char_at メソッドの使用を推(#7633)
String#at と String#char_at の機能が重複していたので String#char_at に集約。
(破壊的変更) String#to_i メソッドは先頭に 0o がある場合のみ8進数として解釈するようになった(#7691)
これまでは数字だけの文字列が 0 で始まる場合に8進数として解釈されていたが、今後は10進数として解釈されるようになる。
(破壊的変更) String#to_i メソッドの引数のいくつかを Bool 型のみ受け取るように制限(#7436)
true もしくは false を受け取る前提の引数に型制約が書かれていなかったのを追加。
String#camelcase メソッドに downcase オプションを追加(#7717)
String#camelcase メソッドを downcase: true 付きで呼び出すと、先頭文字が小文字になる。
ユニコード12.0.0に対応(#7721)
小文字の ゐ とか ゑ とかが使えるようになった。令和対応の 12.1.0 はまだな模様。
Unicode モジュールが API ドキュメントに表示されないよう修正(#7720)
コレクション
(破壊的変更) Slice#pointer を削除(#7581)
Slice 型の先頭ポインタが必要な場合は Slice#to_unsafe が使用可能。
Slice 型に #sort メソッドを追加(#7597)
Slice 型に #[]? メソッドを追加(#7701)
Slice#[] メソッドのドキュメントを改善(#7780)
直列化
YAML で数値に見えるスカラ値を String 型にマッピングできるようになった(#7809)
a: 123 のような項目を String 型のプロパティにマッピングしようとした際、YAMLの基本的なスキーマ的には数値(文字列だったらクォートで括るべき)であるため、型不一致のエラーが出ていたが、マッピング先が文字列ならとりあえず文字列("123")として扱ってくれるようになった。
時刻
RFC 3339 フォーマットにオフセット秒数を含まないよう修正(#7492)
ファイル
(破壊的変更) File::DEVNULL を File::NULL に名称変更(#7778)
Path#expand メソッドで先頭がチルダ(~)で始まるファイル名の扱いを修正(#7768)
Fix Dir.glob(match_hidden: false) メソッドが隠しファイルを正しく隠せていなかったのを修正(#7774)
ネットワーク
(破壊的変更) IO.copy メソッドが UInt64 型の値を返すようになった(#7660)
原文だと IO#copy となっているが、インスタンスメソッドではなくクラスメソッド(IO.copy)が対象。
なぜネットワーク(Networking)に入っているのか少々疑問。
UDP マルチキャストをサポート(#7423)
openssl.cr 内で漏れていた require ファイルを追加(#7803)
IO::MultiWriter#flush メソッドを追加(#7765)
OpenSSL::SSL::Socket 型に #cipher メソッドと #tls_version メソッドを追加(#7445)
URI#normalize メソッドの挙動を改善(#7635)
URI 型のいくつかのメソッドについてドキュメントを改善(#7796)
Last-Modified ヘッダ用の StaticFileHandler のテスト内容を整理 (#7640)
CompressHandler が圧縮データを展開する際のテスト内容を整理(#7819)
暗号化
(破壊的変更) Crypto::Bcrypt::Password#== メソッドを #verify へ名称変更(#7790)
並行処理
Channel 型のAPIドキュメントを追加(#7673)
コンパイラ
(破壊的変更) require 時の相対パスの解決方法を修正(#7758)
(破壊的変更) 代入式の左辺が ‘!’ や ‘?’ で終わることを禁止(#7582)
x? = 1 とかは使えなくなる。
コンパイラのテストに祭して個別のコンパイラフラグを指定できるようになった(#7837)
コンパイラ自身の開発をする人以外には関係なさげ。
ジェネリック型の拡張について修正(#7812)
ユニオン型内の型を仮想型にせず、実際の型の情報を保持するようにした(#7815)
T 型のではなく T+ 型になってしまうと、T 型を継承した型が行ったオーバーロードなどの影響を受けてコンパイルエラーになってしまう場合があった。
ネイキッドファンクション(?)にはデバッグ用メタデータを生成しないようにした(#7775)
initialize メソッドや名前付き引数を持ったメソッドが、廃止予定であることを検知できるようにした(#7724)
@[Deprecated] フラグが拾えていなかった模様。
AST ノード位置の追跡方法を修正(#7827)
offsetof をマクロと一緒に使えないよう修正(#7703)
call &.@ivar をパースできるよう修正(#7754)
名前付き可変長引数(**options)やブロック(&block)を持つ場合の Def#to_s メソッドの挙動を修正(#7854)
pointerof 内の式のエラーチェックを強化(#7755)
いくつかのエラーメッセージを修正(#7833)
pointerof(self) のパーサエラーの表現を修正(#7542)
typo の修正(#7828)
言語仕様
(破壊的変更) モジュールが絡んだ場合の new/initialize メソッドの検索順を修正(#7818)
(破壊的変更) 抽象構造体やモジュールの sizeof を事前計算しないよう変更(#7801)
インスタンス変数をマクロの呼び出しで初期化可能になった(#7750)
メソッド検索において、T.class 型の制約が Class 型による制約より優先されるようになった(#7759)
標準の以外の型を値として持つ enum が有効になった(#7776)
以前から使えはしたものの、今回 enum メンバーの値のオーバーフローチェックなどが正常に働くようになったっぽい。
マクロ内で宣言されたプライベートメソッドを、適切にスコープ管理できるようになった(#7733)
プライベートなのに外から呼び出せちゃってた模様。
if 文で && が使用される場合の変数の型フローを強化(#7785)
if 文での NoReturn の取り扱いを強化(#7792)
while と rescue に関する問題の改善(#7806)
procのポインタとしてマクロを呼び出した際のエラーを改善(#7757)
class Foo
macro bar
end
end
->Foo.bar
みたいなことはできないが、エラーメッセージにとして Foo クラスに bar マクロが存在することが明示された。
名前付きタプルで引数を渡した際のエラーを修正(#7756)
名前付きタプルで可変長引数を受け渡した場合に、名前付きタプルの中に渡した先に引数定義が存在しない要素があった時のエラーメッセージ。
電柱商事