型検査アルゴリズム


19

型チェックアルゴリズムに関する個人の書誌研究を始めていますが、いくつかのヒントが必要です。最も一般的に使用されるタイプチェックアルゴリズム、戦略、および一般的な手法は何ですか?

特に、C ++、Java 5 +、Scalaなどの広く知られている強力な静的型付け言語で実装された複雑な型チェックアルゴリズムに興味があります。IE、基礎となる言語(Java 1.4以下など)の非常に単純なタイピングのために非常に単純ではないタイプチェックアルゴリズム。

私は、X、Y、またはZの特定の言語自体には興味がありません。ターゲット言語に関係なく、型チェックアルゴリズムに興味があります。「聞いたことのない言語Lで強く型付けされており、型付けが複雑な言語には、アルゴリズムZを使用してXとYをチェックすることでA、B、Cを実行する型チェックアルゴリズムがあります」または「 Scalaで使用されるストラテジーXとY、およびC#で使用されるAのバリアントZは、R、S、Tの機能がそのように機能するためクールです」と答えがあります。


3
この質問を編集して、特定の言語の型チェックについて質問する必要があるかもしれません。一般的に、SEでは、リスト形式の自由回答形式の質問は推奨されていません(ただし、この特定のサイトにはまだポリシーがありません)。また、<type-system-elitist> Javaの型システムは複雑ではありません</ type-system-elitist>。
sepp2k

3
おそらく、質問はより具体的に言い換えることができるかもしれませんが、私はそれが閉じられるべきではないと思います。
デイブクラーク

1
@ sepp2k:それが少し広いことは知っていますが、答えの有用性を制限したくないので、この方法で終了しました。ところで、「<type-system-elitist> Javaの型システムは複雑ではありません</ type-system-elitist>」で言いたいことは理解できませんでした。実際、Javaの1.4以下の型システムは単純でしたが、Java 5のジェネリックははるかに複雑になりました。
ビクターStafusa

2
特定の言語を1つ要求するだけで、このサイトには不適切な質問になります(imho)。質問は、一般的なテクニックを尋ねるかもしれません。
ラファエル

1
@Victor基本的なツールは属性文法です。あなたは彼らと一緒に想像できるすべての邪悪なことをすることができないかもしれませんが、彼らは良い出発点です。
ラファエル

回答:


13

ほとんどの研究では、本格的なプログラミング言語のタイプチェックアルゴリズムは実際には公開されていません。DrossopoulouとEisenbach for JavaNipkov et alのC ++に関する研究など、完全なプログラミング言語の型システムの大部分の形式化がいくつかあります。ただし、多くの場合、言語のコア部分(Featherweight Javaがその一例です)またはscalaのローカル型推論アプローチなどの言語のコア概念のタイプシステムのみが見つかります。

POPLやICFPなどの会議では、特定の種類のタイプシステム用の多くのタイプチェックアルゴリズムと、双方向および三方向のタイプチェックなどの新しいアプローチがあります。

より一般的には、Damas-Milnerアルゴリズム、ローカル型推論、双方向および三方向型チェックについて知って、そこから拡張する必要があります。論文の参考文献を参照し、Google奨学生を使用してこれらの論文を引用し、構築します説明されているアプローチ。また、上記で提案したように、POPL、ICPF、ESOP、さらにはECOOPやOOPSLAなどの会議にも、あなたのクエストに関連する論文があります。


Scalaの型システムであるAfaikは研究プロジェクトで開発されたため、公開されています。コンパイラもオープンソースです。ただし、どちらも検討していません。
ラファエル

推論する必要はありません。私が知っている Scalaの型システム上の論文があること。この主張は、検索することで簡単に確認できます。また、コンパイラのソースコードは、アルゴリズムに関する十分な出版物としてカウントします(ソースに含まれている場合はそうしますが、チェックしませんでした)。私の最初の声明は曖昧で真実でしたが、あなたの反応は不当なようです。
ラファエル

2

基本的なツールは属性文法です。あなたは彼らと一緒に想像できるすべての邪悪なことをすることができないかもしれませんが、彼らは良い出発点です。

基本的に、プログラムの抽象構文ツリーをトップダウンおよび/またはボトムアップで調べて、情報を渡すことができます。したがって、たとえば、グローバルスコープタイプ情報(クラスとそのメンバーなど)を下方向に渡し、式のタイプを再帰的に、つまりボトムアップで決定し、結果のタイプを上方向に渡すことができます。

スライド(5章)の説明と例をご覧ください


誰かがより良いリファレンスを持っていますか?私は...私はこれらの日のDragonbookまたはウィルヘルム/マウラー1を購入する必要があると思います
ラファエル

1
JastAddツールは、参照属性の文法に基づいた優れた最新のコンパイラコンパイラシステムです。多くのプロジェクトで使用しました。
デイブクラーク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.