Scala IO 0.4.0のリリースノート

文字コードの指定が実は効いてなかったという愉快なバグが直っているScala IO 0.4.0ですが、APIもいろいろと変わっているようなのでリリースノートを勝手に翻訳してみました。原文のURLは以下になります。

翻訳はかなり適当です。それと実際に全ての新機能を動かして試したわけではないので間違ってるところもあるかもしれません。

  • Pathを生成するための新しいオプションが追加されました。Path("a/b/c", '/')のようにセパレータを指定してPathを生成できるようになりました。詳しくはPathとFilesystemのドキュメントを参照してください。
  • renameToに失敗したときのファイルの移動の性能を改善しました。
  • 兄弟ディレクトリを示すPathを生成するためのメソッドを追加しました。Path("a").sibling("b")はPath("b")を生成します。
  • Inputオブジェクトを処理するための新しいAPIが追加されました。
  • 元のリソースを閉じないでResourcesを生成するためのオプションが追加されました。たとえば標準入力を変換したい場合などに利用できます。System.in.asUnmanagedInputはSystem.inからInputオブジェクトを生成します。
  • Processorの非同期APIを追加しました。
  • 実験的にLongTraversableの非同期APIを追加しました。
  • それぞれのリソースにリソースパラメータの設定を行うことができるよう、コンテキストオブジェクトを追加しました。現在はすべての接続に共通のいくつかのパラメータだけを持っています。
    • エラーハンドラでリソースへのアクセス中に発生した例外に対して独自のエラー処理を行うことができます。デフォルトでは原因例外のリストを含むScalaIOExceptionをスローします。
    • CloseActionsがコンテキストオブジェクトに移動されました。
    • 文字やバイトバッファのサイズを制御するメソッド
    • デバッグ時にわかりやすいよう、リソースごとに任意の名前を付けることができます。
  • openOutput、openSeekableなどがプロセッサで置き換えられ、読み込みと書き込みが同じ方法で行えるようになりました。

以前:

output.openOutput{out =>
    out.write(3)
    out.write("hi")
}

現在:

for {
    outp <- output.outputProcessor
    out = outp.asOutput
} {
    out.write(3)
    out.write(4)
}

もしくはout.writeメソッドはプロセッサを返すので、以下のようにfor内に処理を閉じることもできます。

for {
    out <- output.outputProcessor
    _ <- out.write(3)
    _ <- out.write(4)
} ()

非同期APIの追加が目立ちますが、この他にも文字列やjava.io.FileからPathへの暗黙的型変換のやり方が変わっていたりとか、細かい部分もあちこち変わっているみたいです。