# mruby 2.1.2
mruby 2.1 シリーズの安定版 [mruby 2.1.2](https://github.com/mruby/mruby/releases/tag/2.1.2) をリリースします。
---
# 新機能
## 言語コア
- `def foo(...)`という形式で引数をフォワードすることができる `Arguments Forwarding` がサポートされました。
## mruby VM と バイトコード
- レジスタに16bit整数をロードする命令 `OP_LOADI16` が追加されました。
- mrubyバイナリからエンディアンの情報が削除されました。
- mrubyバイナリのバージョンが `0006` から `0007` に変更されました。
## mruby開発者向け機能
- 新しくいくつかのC APIが追加されました。
- `mrb_float_to_cstr()` - FloatをCの文字列に変換します。
- `mrb_singleton_class_ptr()` - Singletonクラスのポインタを取得します。 [#4973](https://github.com/mruby/mruby/pull/4973)
- `mrb_utf8len()` - UTF-8文字列のサイズを取得します。 [#4712](https://github.com/mruby/mruby/pull/4712)
- `mrb_utf8_strlen()` - UTF-8文字列の文字長を取得します。 [#4712](https://github.com/mruby/mruby/pull/4712)
- `mrb_get_arg1()` - 単一の引数を取得します。
---
# 更新機能
## コアライブラリ
- mruby VMにデフォルトで含まれるライブラリに以下が追加されました。
- `mruby-eval`
- `mruby-complex`
- `mruby-rational`
- `mruby-pack`、`mruby-sprintf` が `MRB_DISABLE_STDIO` オプションに対応しました。 [#4954](https://github.com/mruby/mruby/pull/4954)
- macOS環境で `IO#pread`、`IO#pwrite` が利用可能になりました。
- `mruby-eval` で引数なしで変数名と同じ名前のメソッドが呼び出せるように改善されました。
- `IO#readchar` でUTF-8文字をサポートしました。
## ツール
- mrubyコンパイラ `mrbc` の `-e` / `-E` オプションが廃止されました。
## mruby開発者向け機能
- `mrb_float_to_str()` が幅指定に対応しました。
- `mrb_equal()` が整数と浮動小数点数の組み合わせに対応しました。
## ビルドの改善
- GNU Bisonがなくてもmrubyがビルドできるようになりました。 ([a3ec6ede](https://github.com/mruby/mruby/commit/a3ec6ede))
- GitHub Actionsに対応しました。 [#4903](https://github.com/mruby/mruby/pull/4903)
リポジトリ更新時に以下のプラットフォームのCIが実行されます。
- Ubuntu 16.04
- Ubuntu 18.04 (gcc)
- Ubuntu 18.04 (clang)
- macOS
- Windows (MinGW)
- Windows (Cygwin)
- Windows (MSVC)
---
# 互換性を損なう変更
- `IO#readchar` は、UTF-8文字の途中でEOFに到達した場合に `EOFError` ではなくUTF-8文字の断片を返します。 ([86271572]((https://github.com/mruby/mruby/commit/86271572)))
この挙動はCRubyと異なりますが、ASCIIとUTF-8のみをサポートするmrubyの仕様です。
- `mrb_run()`がC APIから削除されました。
---
# 主なバグ修正
- セグメンテーション違反が発生
- `mrb_io_s_select` [#4966](https://github.com/mruby/mruby/issues/4966)
- `mrb_vm_exec` [#4973](https://github.com/mruby/mruby/issues/4973)
- `Hash` が重複キーを持つ場合に、いくつかの `Hash` メソッドで `values` が矛盾する [181f7b97](https://github.com/mruby/mruby/commit/181f7b97)
- 独立したブロックのローカル変数を取得する [#5014](https://github.com/mruby/mruby/issues/5014)
- メモリ不足時にいくつかの場所でメモリリークが発生する ([f1523d24](https://github.com/mruby/mruby/commit/f1523d24))
- mrubyインタプリタでバッファオーバーフローが発生 [#5042](https://github.com/mruby/mruby/issues/5042)
- ハッシュコード計算にタイプタグが使用されていない [#5049](https://github.com/mruby/mruby/issues/5049)
mruby 2.1.1以降、99ファイルに対して184件のコミットを行い、14,883行の追加、1,653行の削除を行いました。
詳細な更新情報は[コミットログ](https://github.com/mruby/mruby/compare/2.1.1...2.1.2-rc2)を参照して下さい。
`mruby 2.1.2` のリリースにあたり、バグ修正や改善に取り組んだコントリビュータの皆様に感謝を申し上げます。