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)
名前付きタプルで可変長引数を受け渡した場合に、名前付きタプルの中に渡した先に引数定義が存在しない要素があった時のエラーメッセージ。