Skip to main content
QUICK REVIEW

[論文レビュー] Channels as Objects in Concurrent Object-Oriented Programming

Joana Campos, Vasco T. Vasconcelos|Oct 19, 2011
Logic, programming, and type systems参考文献 23被引用数 5
ひとこと要約

この論文は、使用型を通じて使用プロトコルを強制するクラスベースの並行的オブジェクト指向言語Moolを提案する。メソッド呼び出しを唯一の通信プリミティブとして扱い、線形オブジェクトと共有オブジェクトを統一したカテゴリにまとめ、線形オブジェクトが共有オブジェクトに進化できるようにする。'lin'および'un'修飾子を用いた型システムにより、メソッド呼び出しの順序とエイリアス制約を静的に検証し、スレッドセーフティとプロトコル準拠を保証する。

ABSTRACT

There is often a sort of a protocol associated to each class, stating when and how certain methods should be called. Given that this protocol is, if at all, described in the documentation accompanying the class, current mainstream object-oriented languages cannot provide for the verification of client code adherence against the sought class behaviour. We have defined a class-based concurrent object-oriented language that formalises such protocols in the form of usage types. Usage types are attached to class definitions, allowing for the specification of (1) the available methods, (2) the tests clients must perform on the result of methods, and (3) the object status - linear or shared - all of which depend on the object's state. Our work extends the recent approach on modular session types by eliminating channel operations, and defining the method call as the single communication primitive in both sequential and concurrent settings. In contrast to previous works, we define a single category for objects, instead of distinct categories for linear and for shared objects, and let linear objects evolve into shared ones. We introduce a standard sync qualifier to prevent thread interference in certain operations on shared objects. We formalise the language syntax, the operational semantics, and a type system that enforces by static typing that methods are called only when available, and by a single client if so specified in the usage type. We illustrate the language via a complete example.

研究の動機と目的

  • 主流のOOP言語において、オブジェクト使用プロトコルの静的検証が欠如している問題に対処すること。この制約は、形式的でない形での文書化にとどまっている。
  • チャネルプリミティブへの依存を排除し、順序実行および並行実行の両設定において、メソッド呼び出しを唯一の通信メカニズムとして扱うこと。
  • 線形オブジェクトと共有オブジェクトのカテゴリを統一型システムの下に統合し、線形オブジェクトが共有オブジェクトに進化できるようにしつつ、エイリアス制御を強制すること。
  • Javaのsynchronizedメソッドに類似した標準の'sync'修飾子を用いて、共有オブジェクトにおけるスレッド干渉を防止すること。
  • 使用型をクラスにアタッチすることで、使用プロトコルをモジュラーに指定可能とし、動的メソッドセットの変更や非一様オブジェクトをサポートすること。

提案手法

  • Mool言語は、Javaに類似したクラスベースOOPを基盤とした構文と操作的意味論を備え、スレッド生成とメソッド呼び出しをサポートする。
  • 使用型はクラスにアタッチされ、利用可能なメソッド、必要な結果テスト、オブジェクト状態(線形または共有)を指定する。これらはすべてオブジェクト状態に依存する。
  • 型システムは、メソッドが利用可能である場合にのみ呼び出されるよう強制し、クライアントが線形オブジェクトの制約を尊重することを保証する。'lin'および'un'修飾子を用いてエイリアス制御を実現する。
  • オブジェクトに対して単一のカテゴリを用い、線形オブジェクトは共有状態に遷移可能だが、逆は不可であり、参照カウントの追跡を回避する。
  • 共有オブジェクト上のメソッドに'sync'修飾子を適用することで、アクセスをシリアライズし、スレッド干渉を防止し、スレッドセーフティを確保する。
  • チャネル操作をメソッド呼び出しに置き換えることで、モジュラーなセッション型を拡張し、順序実行コードと並行実行コードの両方で一貫した通信モデルを実現する。

実験結果

リサーチクエスチョン

  • RQ1並行的オブジェクト指向言語において、オブジェクト使用プロトコルを形式的に規定し、静的に強制することはどのように可能か?
  • RQ2状態依存のメソッド利用可能性をサポートしつつ、線形オブジェクトと共有オブジェクトを統一型システムでモデル化する方法は何か?
  • RQ3チャネルプリミティブを排除し、メソッド呼び出しを唯一の通信プリミティブとして用いることで、型安全性とモジュラリティにどのような影響を与えるか?
  • RQ4ランタイムエラーを防ぎつつ、線形オブジェクトから共有オブジェクトへの安全な進化を可能にするエイリアス制約の管理方法は何か?
  • RQ5チャネルベースのセッション型に依存せずに、共有オブジェクトにおけるスレッド干渉をどのように防止できるか?

主な発見

  • 提案された型システムは、メソッド呼び出しが指定されたプロトコルに従うことを静的に検証し、誤ったメソッド順序によるランタイムエラーを防止する。
  • 言語は線形オブジェクトが共有オブジェクトに進化できることをサポートし、統一型システム内での柔軟なオブジェクトライフサイクル管理を可能にする。
  • メソッド呼び出しを唯一の通信プリミティブとして用いることで、順序実行と並行実行の両方において一貫したモデルを実現する。
  • スレッド干渉を防止する'sync'修飾子は、Javaのsynchronizedメソッドと同様に、共有オブジェクトに対する安全な並行アクセスを保証する。
  • 使用型を用いた使用プロトコルのモジュラー仕様が可能となり、コードの保守性と正しさが向上する。
  • システムはチェックド例外やエラーリカバリメカニズムをサポートしないが、既存の型状態またはデフォルト状態拡張を用いて追加可能である。

より良い研究を、今すぐ始めましょう

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。