Skip to main content
QUICK REVIEW

[論文レビュー] Mixing the Objective Caml and C# Programming Models in the .Net Framework

Emmanuel Chailloux, Grégoire Henry|arXiv (Cornell University)|May 10, 2007
Logic, programming, and type systems参考文献 3被引用数 3
ひとこと要約

本論文では、共通のIDL(インタフェース定義言語)を定義することで、.NET Framework 上でObjective CamlとC#の間でシームレスな相互運用を可能にするコード生成ツール、O’Jacaré.netを提示する。このIDLは、Camlの関数型オブジェクトモデルとC#のクラスベースモデルの間の意味的・型的差異を埋めるためにラッパークラスを生成し、クロス言語の遅延バインディング、型安全な通信、および両言語間でのライブラリ相互アクセスを可能にするとともに、両言語における静的型付けを維持する。

ABSTRACT

We present a new code generator, called O'Jacare.net, to inter-operate between C# and Objective Caml through their object models. O'Jacare.net defines a basic IDL (Interface Definition Language) that describes classes and interfaces in order to communicate between Objective Caml and C#. O'Jacare.net generates all needed wrapper classes and takes advantage of static type checking in both worlds. Although the IDL intersects these two object models, O'Jacare.net allows to combine features from both.

研究の動機と目的

  • CamlのオブジェクトモデルとC#のクラスベースモデルの根本的な相違にもかかわらず、.NET Framework 上でObjective CamlとC#の間でシームレスな相互運用を実現すること。
  • Camlの静的型安全性と完全な型推論を維持しつつ、C#のライブラリやランタイム機能へのアクセスを可能にすること。
  • Camlコンパイラやランタイムを変更せずに、C#コードがCamlオブジェクトを呼び出し、逆にCamlコードがC#オブジェクトを呼び出せるようにすること。
  • Camlのオープンで多態性のあるオブジェクトシステムと、C#の名前ベースの静的型付けのクラスベースモデルを統合的に、型安全に統合する方法を提示すること。
  • .NETエコシステム内での関数型と命令型プログラミングモデルの統合を現実的かつ拡張可能に実現するソリューションを提供すること。

提案手法

  • Objective CamlとC#の間で相互運用可能なクラスやインタフェースを記述するための最小限で共通のIDL(インタフェース定義言語)を設計すること。
  • IDLから自動的にラッパークラスを生成し、Camlのオープンで多態性のあるオブジェクト型と、C#の名前ベースのクラス型の間を仲介すること。
  • 両方向に遅延バインディングを用いてメソッドディスpatchを実現し、言語境界を越えた動的メソッド解決を可能にすること。
  • 共通のルート型(top)から具体的なC#継承型へのダウンキャストを安全に行うために、Camlに型キャスト関数を実装すること。
  • .NETの共通型システム(CTS)と共通言語ランタイム(CLR)を活用し、実行時における型安全性と相互運用性を保証すること。
  • 元々Java用に設計されたO'Jacaréフレームワークを拡張し、C#と. NETをサポートするように変更し、OCamILのマネージドコードモデルに適応すること。

実験結果

リサーチクエスチョン

  • RQ1根本的に異なるオブジェクトモデル(Camlのオープンで多態性のあるオブジェクトと、C#の名前ベースのクラスベースのオブジェクト)を持つ2つのプログラミング言語が、.NETプラットフォーム上で安全かつ効率的に相互運用できるか。
  • RQ2Camlの型推論とC#の静的型付けの両方を言語境界を越えて統合する際、どの程度まで静的型安全性を維持できるか。
  • RQ3相互依存関係(CamlとC#のコンponentが互いに依存する)を表現できる共通のIDLを設計できるか。特に、相互再帰や型循環を回避できるか。
  • RQ4コンポーネントが互いに依存する(例:相互再帰)場合、現在の相互運用パターンにどのような制限があるか。それらの制限をどのように克服できるか。
  • RQ5デリゲート、ジェネリクス、イベント処理といった高度な. NET機能を、型安全性を損なわずに相互運用レイヤーを通じて公開できるか。

主な発見

  • O’Jacaré.netは、共通のIDLと自動ラッパー生成を用いて、Objective CamlとC#の間で双方向の相互運用を成功裏に実現した。
  • 本システムは両言語で静的型チェックを維持しており、言語境界を越えて型安全性を保証している。
  • 両方向に遅延バインディングがサポートされており、CamlとC#オブジェクト間の動的メソッドディスpatchが可能である。
  • 共通のルート型(top)から具体的なC#継承型へのダウンキャストは、型不一致の場合は例外を送出する安全な型キャスト関数によって実装されている。
  • レイトレーシングのケーススタディにより、エンドツーエンドの相互運用が実証された:CamlベースのレンダリングエンジンはC#のGUIによって制御可能であり、ピクセルレンダリングコールバックも境界を越えて正常に動作した。
  • 主な制限として、相互再帰的なコンポーネント(例:C#のDisplayクラスがCamlのRenderクラスを必要とし、逆にCamlのRenderクラスがC#のDisplayクラスを必要とする)では、元の型とラッパー型の間に継承関係がないため、現在のIDLモデルでは型エラーを発生させずに相互依存関係を表現できないことが判明した。

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

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

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

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