【Ruby3.x】Ractor::MovedObject::!()メソッドの使い方
!メソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
!メソッドは、Ractor::MovedObjectの状態に関する何らかの操作を実行するメソッドです。
Ractor::MovedObjectは、Ruby 3で導入された並行処理モデルであるRactorにおいて、オブジェクトが異なるRactor間で移動した際に、元のRactor側に残される特殊なオブジェクトを表します。Ractorは、各Ractorが独立したメモリ空間を持つことで、データ競合のリスクを減らし、安全な並行処理を実現することを目指しています。そのため、あるRactorが所有するオブジェクトを別のRactorへ送ると、元のRactorからはそのオブジェクトへの直接アクセスが禁止され、代わりにRactor::MovedObjectという「移動済み」を示すオブジェクトが残されます。この移動済みオブジェクトにアクセスしようとすると、Ractor::MovedObjectErrorが発生し、Ractorの安全性保証が保たれます。
この「!」というメソッド名自体は、Rubyの慣習において、通常は論理値を反転させる演算子として用いられたり、メソッド名に付加されることでレシーバ自身を破壊的に変更するメソッドを示すことがあります。Ractor::MovedObjectクラスに定義された「!」メソッドは、Ractor::MovedObjectが持つ「オブジェクトが移動済みである」という特殊な状態に対して、何らかの確認やその状態に基づいた内部的な処理を実行するものと考えられます。具体的には、移動済みオブジェクトの真偽値を反転させる、あるいはその状態に関する特定の条件を満たさない場合に例外を発生させるなど、Ractorの安全性とオブジェクトのライフサイクル管理に関わる機能を持つことが想定されます。
構文(syntax)
1moved_object.!
引数(parameters)
*rest
- *rest: 転送するオブジェクトのリスト
戻り値(return)
戻り値なし
戻り値はありません