電柱商事

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#atString#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::DEVNULLFile::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

whilerescue に関する問題の改善(#7806

procのポインタとしてマクロを呼び出した際のエラーを改善(#7757

class Foo
  macro bar
  end
end

->Foo.bar

みたいなことはできないが、エラーメッセージにとして Foo クラスに bar マクロが存在することが明示された。

名前付きタプルで引数を渡した際のエラーを修正(#7756

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

名前付き引数に NoReturn 型のチェックを追加(#7761

バインドされていないもしくは抽象型であるジェネリック型の内部処理を修正(#7781

バインドされていないジェネリック型の誤ったキャストを修正(#7793

ジェネリック型がメソッドを呼び出す際のエッジケースを処理すすため、サブクラスオブザーバを修正(#7735

抽象構造体が1つだけサブクラスを持つ場合のエッジケースを修正(#7787

アトミックキャストが with ... yield で動作するようにした(#7746

ツール

クラスやモジュールの実装箇所を検索可能になった(#7742

以前の重複した ‘def contains_target’ をリファクタ(#7739

フォーマッタ

ヒアドキュメントに続く名前付き引数の前に不要な改行がはいらないようにした(#7695

複数行にわたる引数のフォーマッティングを修正(#7745

改行と空白を伴う注釈のフォーマッティングを修正(#7744

&.[] をフォーマッティングする際のコードをリファクタ(#7699

その他

CI の改善と掃除(#7705#7852

VERSION ファイルを ./src 直下に移動(#7804