OCaml Meeting 2010 in Nagoya
8/28 に、OCaml Meeting 2010 in Nagoya に行ってきました。
朝早く起きて名古屋大学へ。
暑い・・・
λterm ::= | x | λterm λterm | fun x -> λterm 追加で | 定数・リスト | バリアント・ペア | let, match, if さらに | 代入可能な変数・ループ・モジュール | 多相バリアント・オブジェクト さらに最新版(3.12)からモジュールが第一級に OCamlどこいってしまうんや
- F# の流技 / Fluent Feature in F#
- OCaml △!
- → F# △! → F# |>
- パイプライン演算子 |>
- let (|>) x f = f x
- F# は inline 関数が書ける (コンパイル時に展開)
- |> は inline
- オブジェクト指向的
- x.F().G().H()
- x |> f |> g |> h
- F#「OCamlと違うんです」
- + 演算子とか
- 関数オーバーロード
- 型推論と相性悪い
- 関数オーバーロード
- + 演算子とか
- F# の対話環境は fsi
- 画面出力 System.Console.WriteLine
- オーバーロードされている
- F#「.NETですから」
- OCaml と比べると 型推論 (´・ω・`)ショボーン
- F# ではよく型を明示する
- |> 使うと型も流してくれるので型明記を少なくできる
- 単位付きの計算ができる
- コンピューテーション式
- F# 版 モナド!?
- OCaml △!
- OCaml 3.12における第一級モジュールと合成可能なシグネチャについて / First-class modules and composable signatures in OCaml 3.12
- モジュールの役割
- プログラム・名前空間の構造化
- インタフェースによる仕様記述・部品化
- 抽象型・プライベート型による隠蔽
- ファンクタによる抽象化
- モジュールがコア言語より優れている点
- 型構成子に対する多相性がある
- 正確な多相型要求
- 存在型(抽象型)の定義
- 3.12の新機能
- 第一級モジュール
- モジュールを通常の値のように受け渡しできる
- モジュールを受け取る関数とか作れる
- パラメータによって、使うモジュールを選択したりできる
- クラスをモジュールに入れて、中のクラスを動的継承によって変更したりできる
- 型の等式を表現できる (GADTs)
- 完全に型付けされている
- 安全!
- 理論的には新しくない (10年前に出てる)
- ファンクターとの干渉で安全でなかった
- モジュールを通常の値のように受け渡しできる
- 第一級モジュールの制限
- ファンクターの中では第一級モジュールを開くことは出来ない
- 型の pack, unpack を全て書かなければならない
- 多相メソッドと同じ機構を使って、多くの型注記が省ける
- シグネチャ言語
- 破壊的代入の制限
- 代入をかけれるのは一番上レベルの型とモジュールのみ
- パス (定義されているもの) しか代入できない
- 型のパラメータ数。順番は変えられない
- 削除によって、構文的にスコープが有効でないシグネチャになったりする
- モジュールの役割
- デザインレシピ、モジュール、抽象データ型 / Design Recipe, module, and abstract data type
- デザインレシピ
- データ定義を行う
- 目的を考え、ヘッダを作る
- 例を作り、それをテストプログラムにする
- テンプレートを作る
- 本体を書く
- テストする
- → 例 (テスト) が先!TDD!
- デザインレシピ
プログラミングの基礎 (Computer Science Library)
- 作者: 浅井健一
- 出版社/メーカー: サイエンス社
- 発売日: 2007/03
- メディア: 単行本
- 購入: 17人 クリック: 404回
- この商品を含むブログ (98件) を見る
- Spot Your White Caml -- How to Make Yourself Happy in OCaml Projects
- コードの成長が早くて、初めからいて少しずつ進化していくなら対応できるが、十分成長したコードをいきなり見ると辛い
- どうやって OCaml のコードを読むか
- まず、mli ファイル (インタフェース) を読む
- ml ファイル (実装) は飛ばす
- よい mli ファイルを書く
- 実装の詳細は隠蔽する
- どう使うか示す
- 良い・短いコメントを付ける
- 型で表す
- ocamlc -i から始めると良い
- 良くない mli ファイルは読まない
- 良い質問
- 何が書かれているか・どこにあるか は無駄
- 何故 を聞くと良い
- 時間の80%は検索に使うので、検索に使う時間を減らす
- → 検索時間が半分になれば、3倍生産的になれる
- 以下のような先輩の助言は無視
- Grepで何とかなるよ
- 手動検索も学習だ
- すぐ慣れるよ
- コンパイラに関連した解析ツールを使う
- 型推論は便利だけど、コード中でこの変数の型なんだっけ?ってなりやすい
- 変数の型を調べてくれるエディタ拡張がある
- 型推論は便利だけど、コード中でこの変数の型なんだっけ?ってなりやすい
- ocamlspotter
- 便利
- 新しい
- 次は Haskell
- OCaml でプログラミングコンテスト / Programming Contest in OCaml
- プログラミングコンテスト
- 時間短い
- バグ入れたら地峡な時間は浪費されてとても不利
- バグ入れにくい言語がいい
- バグ入れたら地峡な時間は浪費されてとても不利
- 仕様変更に強い
- 実行速度
- 時間短い
- Sys.command でコマンド叩ける
- 素の OCaml はライブラリが少ない
- 絵描くの辛い
- ライブラリがあれば OCaml 有利
- 型、無名関数、実行速度
- プログラミングコンテスト
- Lightning Sessions
- FFTW/genfft誰得ハッキングガイド / The Hitchhacker's Guide to the FFTW/genfft
- OCaml版Hoogle、OCamlAPISearchの紹介
- Hoogle
- OCaml API search
- http://search.ocaml.jp/
- OCamlBrowser の関数検索モジュールを利用
- どーOCaml
- http://ocaml.jp/cgi/docaml/docaml.cgi
- fizzbuzz
- when で分岐出来るが、タプルでmatchするといい感じ
- メールアドレスフィルタ
- メールアドレスをファイル名と見て、Filename.check_suffix で判定
- String.is_suffix で判定 (Core ライブラリが必要)
- ファイルコピー
- Maybeモナドを作って、失敗しうる処理を連結
- モジュール内にモジュールを作る
- SQL文生成
- エスケープを Str.global_replace で行う
- プリペアドステートメントは PGOCaml ってのがある
- どーOCamlはOCamlで作られている
- ゴルフ用楽打モジュール
- Golfコンテスト結果発表と表彰
- Sort by Length for OCaml Golf Competition
- 自分にはよく分からない世界が・・・
- 読めん・・・
- この辺は @fusigichang とか好きそう
- もの
- 念願のグリーンバンドを手に入れた
- OCaml Tシャツ 買った!