ぱわわっぷOCaml

2,102 views

Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

ぱわわっぷOCaml

  1. 1. 2011年9月17日<br />有限会社ITプランニング<br />小笠原 啓<br />ぱわわっぷOCaml<br />
  2. 2. 概要Agenda<br />バージョンアップ履歴<br />ぱわわっぷ3本柱<br />OCaml周辺の新しい動き<br />まとめ<br />
  3. 3. 近年のバージョンアップ履歴History of version up<br /><ul><li>局所的Open
  4. 4. 局所的抽象型
  5. 5. 明示的な多相型注記
  6. 6. 第一級モジュール
  7. 7. シグネチャの取得
  8. 8. シグネチャの破壊的代入
  9. 9. GADTs
  10. 10. 第一級モジュールの型推論</li></ul>2011/07/04<br />2010/01/20<br />2010/08/02<br />?<br />Version<br />3.11.2<br />Version<br />3.12.0<br />Version<br />3.12.1<br />Version<br />3.13.0?<br />
  11. 11. 第一級モジュールFirst Class module<br />モジュールを変数に束縛して、関数の引数に与えたり、関数の戻り値としたり、バリアントのパラメーターとする事ができるようになった。<br />モジュールから<br />値へ変換<br />let m = (moduleM : S)<br />値から<br />モジュールを復元<br />moduleM = (val m : S)<br />
  12. 12. 型安全なプラグインtype safe plugin<br />抽象型を持ったモジュールをリストに複数持って切り替える事ができる。これはレコードの型変数では不可能な記述。<br />moduletypePLUGIN= sig<br />typet<br />valstate : t<br />valstart : t -> unit<br />valstop : unit -> t<br />end<br />letplugins = <br />ref ([] : (string * (modulePLUGIN)) list)<br />プラグイン毎に<br />型が異なる<br />
  13. 13. シグネチャの取得signature of a module<br />モジュールの実体からシグネチャーを生成できるようになった。<br />既存ライブラリの拡張に便利。<br />シグネチャの取得<br />moduleMyList : sig<br />includemodule type of List<br />valremove : ’a -> ’a list -> ’a list<br />end= struct<br /> include List<br /> let rec remove a = ...<br />end<br />
  14. 14. シグネチャの合成問題a problem of composing signature<br />module type Printable=sig<br />typet<br />valprint : t -> unit<br />end<br />module type Comparable = sig<br />typet<br />valcompare : t -> t -> int<br />end<br />module type PrintableComparable=sig<br />includePrintable<br />includeComparable with type t = t<br />end<br />二つのシグネチャーを合成したい<br />Multiple definition of the type name t.<br />
  15. 15. 解決:シグネチャの破壊的代入destructive substitution<br />module type Printable=sig<br />typet<br />valprint : t -> unit<br />end<br />module type Comparable = sig<br />typet<br />valcompare : t -> t -> int<br />end<br />module type PrintableComparable=sig<br />includePrintable<br />includeComparable with type t := t<br />end<br />二つのシグネチャーを合成したい<br />Composable.tを削除<br />
  16. 16. 一般化代数的データ型Generalized Algebraic datatypes<br />1.<br />type‘a t =<br /> | Int:int -> int t<br /> | Map:‘b t * (‘b -> ‘a) -> ‘a t<br />2.<br />全称の型パラメータに対する制約をバリアント毎に与えられる。<br />戻り型に表れない全称型(存在型)も許される。<br />コンビネーターやEDSLの定義に便利。<br />例えば型付きSQLやイベントコンビネーターなど。<br />
  17. 17. OCaml周辺での新しい動き<br />
  18. 18. 正式名称の変更(2011年7月)change the official name<br />Objective Caml<br />OCaml<br />
  19. 19. 新しい企業の誕生(2011年初め頃)OcamlPRO<br />http://www.ocamlpro.com/<br /><ul><li>最新バージョンのWindows 7バイナリの配布
  20. 20. チートシートの作成・配布
  21. 21. 32bit longval, packing functors, inline-moreなどコンパイラへの貢献</li></li></ul><li>ocsigenのサイトがリニューアル(2011年9月)The new web site<br /><ul><li>元々はOcsigenという研究プロジェクト。
  22. 22. 現在はIRILLの一部。</li></ul> 主なプロジェクト<br /> ・OcsigenServer<br /> ・Eliom Framework<br /> ・lwt<br /> ・js_of_ocaml<br />http://ocsigen.org/<br />
  23. 23.
  24. 24. まとめconculusion<br />第一級モジュール、シグネチャーの合成、GADTsにより、飛躍的に強力な抽象化・型チェックが可能に。<br />正式名称がObjective CamlからOCamlに。<br />実践に即したツールやライブラリの充実に期待。<br />OCamlは絶賛ぱわわっぷ中!<br />
  25. 25. ご清聴ありがとうございました。<br />

×