OCamlMeeting in Nagoya にいってきた

やってみようOCaml

F# の流儀

  • (|>) is an important operator in the F# 'culture'.
  • インラインなところがおもしろいらしい

資料

OCaml 3.12 における第一級モジュールと合成可能なシグネチャについて

第一級モジュール

  • module type ?
  • 理論的には新しくない(10年前)
  • 使うとこ
    • 実行時に実装を選ぶ
    • 型安全なプラグイン
    • クラスの動的生成・継承
    • 型の実行時表現とGADTs
      • 型の等式を表現できる
  • 制限
    • ファンクタの中では第一級モジュールを開くことはできない
    • 型とpack・unpack を全て書かなければならない

合成可能なシグネチャ

  • シグネチャをモジュールに変換する
  • モジュールのシグネチャを取得する
  • シグネチャの破壊的代入でいろいろできる
  • 制限
    • 代入をかけられるのは一番上のレベルの型とモジュールのみ
    • パス(定義済みのもの)しか代入できない
    • 型パラメータの数・順序は変えられない
    • 削除によって,構文的にスコープが有効でないシグネチャにできる

まとめ

  • モジュールとコア言語が強化された
  • 今まで不可能または冗長だったパターンが可能になった

Golf しかやったことのない人にはレベルが高過ぎでしたけど,
概念としてはちょっとわかった気がした〜.

なんかおもろいような気がするんだけど自分の勉強不足ですね.
この辺いろいろ他でも使える概念なんかなー.

デザインレシピ,モジュール,抽象データ型

  • 標準的なアプローチ |> SICP
  • Matthias Felleisen "From POPL to the classroom and back." - Principles of Programming Languages, Portland, Oregon(2002).
    • How to Design Programs - M. Felleisen.
  • プログラミングをするときには,そもそも何を考えなくてはならないか
  • そもそも,普通の人はどうやって書いているのか
    • 今日習った for 文をとりあえず書く
  • デザインレシピ - 宣言的プログラミング?
  • プログラミングを書くのは最後から二番目だ
    • テスト(入出力関係)を先に書く
  • ライブコーディング(ins_sort)
(* 目的:リストを受け取ったら,それを昇順に並べて返す *) (*2 - 目的を書く *)
(* ins_sort : 'a list -> 'a list *) (*3 - 型を書こう.型推論は意図とは違っているかもしれない *)
<del>let ins_sort (*1 - 名前を決める *)</del>
<del>let ins_sort lst = [] (*4 - ヘッダ(シグネチャを書く)*)</del>

<del>(*

ins_sort [] = []
ins_sort [2; 1] = [1; 2]
ins_sort [3; 6; 2; 1; 5] = [1; 2; 3; 5; 6]
*) (*5 例を書く - テストを書く*)</del>

(* テスト *)
let test1 = ins_sort [] = []
let test2 = ins_sort [2; 1] = [1; 2]
let test3 = ins_sort [3; 6; 2; 1; 5] = [1; 2; 3; 5; 6]
(*6 テストに変換する - assert を入れる*)

let ins_sort lst = match lst with
    [] -> []
  | first :: rest -> [] (*6 テンプレートを書く*)

insert (ins_sort rest) first (*7 目的からそのように書く - サブ問題に落とす*)
let insert lst elm = []

Spot Your White Caml

  • Typical Day 1: Welcome!
    • 酒とかただで呑ませてくれたり
    • 素晴らしい - ぼくもそう思いました(過去形)
  • Typical Day 2: Real Job Starts
    • 量がハンパねぇ
  • Typical Day 100 - 試用期間終了
    • ついてけん
    • 超えられない壁
    • Learning vs Code Growth - 指数っぽい
    • アキレス
  • Improve Your Learning Curve
  • Read .mli First - コードを読むスピードが速くなる
    • Read interfaces (=.mli) first
    • Skip implementation (=.ml)
  • Write Good .mli
    • Let TYPES tell details of functions
    • ocamlc -i gives a good start point
  • Do NOT Ask Silly Questions
  • Then Ask WHY, which the Code does NOT tell
  • コードを読むテクニック
  • Manual Search is pain but also Educational
  • Use the Compiler Directed Tools.
    • ocamlc -annot -> .annot ファイル生成
    • cmigrep -v 'iter' -I . '*.*'
    • OCaml API Search とか
  • ocamlspot : - やはりコンパイラ
  • You need the Patch
  • Patched compiler may be Buggy
  • Same story begins.

資料

OCamlプログラミングコンテスト

  • 読みで maya
  • ドメインはネタやった
  • Programming Contest with OCaml
  • 書くのが楽
  • 高速
  • 仕様変更に強い
  • ICFP-PC
    • the programming tool of choice for descriminating hackers
  • どうやって戦う?
    • Qualification Round
      • 問題を難読化して,スキルの低い人を遠ざける
      • D … ざわ … ざわ …
  • OCaml で困った事例集
    • TCP 通信 - C が使えればなんとかなる(かも)
    • 手軽に絵が出せない…
    • ライブラリが足らんのです
  • コンテスト楽しいのでみんな出るといいですよ

Lightening Sessions

Golf
  • Golf 用モジュールの解説
  • map l f にしてあるのは,括弧がケズれるから
  • pid が得られると,4桁の値が欲しいときとかに使える

Golf コンテスト結果発表と表彰

  • なんかすごいということはわかります
  • golf すげー.1 byte の差が怖いです