Magnolia Tech

いつもコードのことばかり考えている人のために。

scala 2.13から導入されるArraySeq.unsafeWrapArrayは何が'unsafe'なのか?

blog.magnolia.tech

先日のエントリで、ArraySeq.unsafeWrapArrayを取り上げましたが、そもそも何が'unsafe'なの?immutableなデータ構造にラップするので、safeなのでは?と疑問に思ったところ、いつものごとくKenji Yoshida(@xuwei_k)さんに教えて頂きました。

なるほどーいくらラップしても元のArrayがmutableであることには変わりないので、そこは理解して使えよ!ってことのようです。その注意喚起の意味でのunsafeですね。

ちなみにArraySeq.unsafeArrayのscaladocにはそれなりのメソッドの危険性が書かれています。

abstract defunsafeArray: Array[_] The wrapped mutable Array that backs this ArraySeq. Any changes to this array will break the expected immutability. Its element type does not have to be equal to the element type of this ArraySeq. A primitive ArraySeq can be backed by an array of boxed values and a reference ArraySeq can be backed by an array of a supertype or subtype of the element type.

しかしどちらかというと、ArraySeq.unsafeWrapArrayのscaladocに書いて欲しいところですね。

というわけでアドバイスを頂いたこともあり、初めてのScala本体へのPRを書きました。

github.com

レビューは通っているので、Scala 2.13.1あたりには取り込まれるのではないでしょうか。

1行の、ドキュメント追加とはいえ、マージされると嬉しいなぁ。