タグ

型推論に関するohnishiakiraのブックマーク (6)

  • JavaScript による型推論器の実装 - takuto_hの日記

    型推論に興味はあるけど、抽象的な説明が多く難しそうだと思っている方々。基礎的なことを押さえておけば、型推論器は簡単に実装できます。 ここでは、私が JavaScript で書いた型推論器を例に、型推論の基的なアルゴリズムの一例を具体的に説明していきます。解説対象は、ibis-js-1.0.0です。 型推論の可視化ツールを使いながら読むとよりわかりやすいかもしれません。 目次 型変数と単一化 多相型 let と let rec バリアント型

    JavaScript による型推論器の実装 - takuto_hの日記
  • Ruby プログラムの型推論 - 松本宗太郎

    rubykaigi2008マイリスト mylist/7223285

    Ruby プログラムの型推論 - 松本宗太郎
  • http://www.score.cs.tsukuba.ac.jp/~soutaro/seminer/resume2005.pdf

    スクリプト言語 Ruby の型推論 システム情報工学研究科 1 年 200520996 松 宗太郎 指導教員 井田 哲雄 2005 年 12 月 1 日 1 はじめに RubyPythonPerl に代表されるスクリプト言語は 柔軟性を特徴とし,簡単なプログラムを短期間で作成する ために広く利用されてきた.近代的なスクリプト言語であ る RubyPython は,高度なオブジェクト指向プログラ ミングをサポートし,複雑で大規模なプログラムを作成す ることも可能となっている.しかし,スクリプト言語に型 検査などのプログラムを実行前に解析し誤りを検出する機 能が提供されていることは少なく,テストによってしかプ ログラムの誤りは検出できない. 研究では,プログラムの誤りを実行前に検出するため の方法として型検査に注目した.Java などの言語では型 の整合性がコンパイル時に検

  • 型検査と型推論

    和彦 @kazu_yamamoto 適切な説明は「Haskell では型を簡潔に書けるので、トップレベルの関数には書きましょう。ローカル関数は、(型推論があるので)型は書かなくてもいいでしょう。」でしょうね。 2011-05-02 18:26:33 山和彦 @kazu_yamamoto 「動的型付けだと、型を書かなくてもよく、コードがすっきりするので、バグは入り込みにくい」という主張には、型を書くのは面倒だという思い込みがあるんですね。 2011-05-02 18:27:54

    型検査と型推論
  • ヒューリスティックな型推論 - Functional Emacser

    もはや型推論と呼べないことは承知ですが、あえてメモしておきます。主に補完目的の話です。 Rubyなどの動的言語ではevalやsendを使うことで、簡単に型推論できない状況を作り出すことができます。そのような状況では当然、精度の良い補完を提供できません。そういう場合の解決策として、変数名やメソッド名から適切な型をヒューリスティックに推測してくれると良いかもしれません。 例えば、以下のようになります。 fileという名前はStringかFileのオブジェクトだろう gsubというメソッドが呼ばれているオブジェクトはStringだろう mapというメソッドが呼ばれているオブジェクトはEnumerableをincludeしたクラスだろう <<というメソッドが呼ばれているオブジェクトはArrayとかIOだろう こんな機能が入るのはかなり先だと思いますが、実際に実行するタイプの補完プログラムには負けな

    ヒューリスティックな型推論 - Functional Emacser
  • Rubyコード補完進捗報告1 - Functional Emacser

    ここ二週間ほど、集中して取り組んだおかげで、一応それっぽく動くようになりました。問題は山積みで実用などは遥か遠い未来の話ですが、ちょっと嬉しかったので報告です。次のスクリーンショットを見てください。 なんの変哲のない補完に見えますが、よく見ると補完候補としてFixnum#succとString#gsubが含まれているのが分かります。これの意味するところは、ローカル変数aへのFixnumオブジェクトとStringオブジェクトの代入が正しく検知され型推論されているということです。 分かりやすさのために、あえてこんな単純な例を出していますが、前のエントリにあるようなケースも現状ですでに対応できています。 def foo(n) n. # <= succ, gsubが候補として出てくる end foo(1) foo('Hello') 一応プロジェクトのURLを貼っておきます。 http://code

    Rubyコード補完進捗報告1 - Functional Emacser
  • 1