Skip to main content
QUICK REVIEW

[論文レビュー] Efficient Gradual Typing

Andre Kuhlenschmidt, Deyaaeldeen Almahallawi|arXiv (Cornell University)|Feb 18, 2018
Parallel Computing and Optimization Techniques参考文献 37被引用数 6
ひとこと要約

本稿では、空間効率の良いコercionと単調な参照を用いることで高いパフォーマンスを達成する、段階的型付けのための事前コンパイル(ahead-of-time)コンパイラGriftを提示する。静的型付けコードではOCamlと同等のパフォーマンスを達成し、部分的型付けのベンチマークではRacketを上回り(0.42×から2.36×)、顕著なオーバーヘッドなしに深刻な遅延を解消した。これは、注意深く低レベルで実装された場合、効率的な段階的型付けが実現可能であることを示している。

ABSTRACT

Gradual typing combines static and dynamic typing in the same program. One would hope that the performance in a gradually typed language would range between that of a dynamically typed language and a statically typed language. Existing implementations of gradually typed languages have not achieved this goal due to overheads associated with runtime casts. Takikawa et al. (2016) report up to 100$ imes$ slowdowns for partially typed programs. In this paper we present a compiler, named Grift, for evaluating implementation techniques for gradual typing. We take a straightforward but surprisingly unexplored implementation approach for gradual typing, that is, ahead-of-time compilation to native assembly code with carefully chosen runtime representations and space-efficient coercions. Our experiments show that this approach achieves performance on par with OCaml on statically typed programs and performance between that of Gambit and Racket on untyped programs. On partially typed code, the geometric mean ranges from 0.42$ imes$ to 2.36$ imes$ that of (untyped) Racket across the benchmarks. We implement casts using the coercions of Siek, Thiemann, and Wadler (2015). This technique eliminates all catastrophic slowdowns without introducing significant overhead. Across the benchmarks, coercions range from 15% slower (fft) to almost 2$ imes$ faster (matmult) than regular casts. We also implement the monotonic references of Siek et al. (2015). Monotonic references eliminate all overhead in statically typed code, and for partially typed code, they are faster than proxied references, sometimes up to 1.48$ imes$.

研究の動機と目的

  • 動的型付けと静的型付けのプログラム間のパフォーマンス格差を段階的型付け言語で解消すること。
  • 従来の段階的型付けの実装で報告された100倍の遅延を解消すること。
  • 型安全性と相互運用性を保ちながら、効率的なランタイム機構(コercionと単調な参照)を実装すること。
  • 事前コンパイルによりネイティブアセンブリに変換することで、段階的型付けにおける高いパフォーマンスが達成可能であることを示すこと。
  • 静的、動的、および混合型プログラムにおける実世界のベンチマークにおいて、コercionと単調な参照の影響を評価すること。

提案手法

  • 段階的型付けプログラムを事前コンパイルによりネイティブアセンブリコードに変換する。
  • Siek, Thiemann, and Wadler (2015) が提唱した空間効率の良いコercionを用い、ランタイムコストを最小限に抑えた型キャストを実装する。
  • 静的型付けコード領域におけるランタイムオーバーヘッドを排除するために、単調な参照を導入する。
  • メモリと実行コストを低減するため、慎重に選ばれたランタイム表現を用いる。
  • 型安全性かつ効率的な方法で、コercionと単調な参照の両方をサポートする意味論を実装する。
  • GriftをOCaml、Gambit、Racketと比較して、ベンチマークスイートを通じてパフォーマンスを評価する。

実験結果

リサーチクエスチョン

  • RQ1段階的型付けのための事前コンパイルが、OCamlのような静的型付け言語と同等のパフォーマンスを達成できるか。
  • RQ2空間効率の良いコercionは、部分的型付けプログラムにおける深刻な遅延を解消するが、顕著なオーバーヘッドを伴わないか。
  • RQ3単調な参照は、静的型付けコード領域におけるランタイムオーバーヘッドを排除しつつ、型安全性を保つことができるか。
  • RQ4これらの技術を用いて実装された段階的型付け言語のパフォーマンスは、既存の動的型付け言語および静的型付け言語のランタイムと比較してどの程度か。
  • RQ5コercionと単調な参照は、多様なベンチマークにおいてどの程度パフォーマンスを向上させるか。

主な発見

  • 静的型付けプログラムでは、GriftはOCamlと同等のパフォーマンスを達成しており、段階的型付けに起因する測定可能なオーバーヘッドがないことを示している。
  • 動的型付けプログラムでは、GriftのパフォーマンスはGambitとRacketの間の水準にあり、既存の動的型付け言語ランタイムと競合可能であることを示している。
  • 部分的型付けベンチマークでは、Griftの幾何平均パフォーマンスはRacketの0.42×から2.36×の範囲にあり、効率性と耐障害性の両方を示している。
  • コercionは従来のキャストと比較してパフォーマンスオーバーヘッドを低減しており、fftベンチマークでは通常のキャストより15%遅いが、matmultでは最大2倍速い。
  • 単調な参照は静的型付けコード領域におけるすべてのランタイムオーバーヘッドを排除し、部分的型付けコードではプロキシ参照よりも最大1.48倍速い。
  • コercionと単調な参照の組み合わせにより、従来100倍もの遅延が報告された深刻な遅延が解消され、顕著なパフォーマンスペナルティを伴わずに実現された。

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

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

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

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