第1部
勉強会の説明
- トラビスさん 通称虎
- yuzu technologyを準備中
- 方法: 読書→発表(10分くらい,参加者が)→問題→宿題(一人でやるのも重要)→読書のループ
- 8月〜12月 (月2回開催予定) たぶん平日開催
- 本: プログラミングHaskell
- 初心者レベルの20%くらいのレベルの本
- むつかしくなくて、関数型言語の経験がない方に優しい本
8月 | 1,2,3,4章 |
9月 | 5,6,7章 |
10月 | 8,9章 |
11月 | 10,11章 |
12月 | 12,13章 |
Haskellの紹介
- 第一級関数
- 高階関数
- クロージャ
- 純粋性
- 永続データ構造 (構造を変更してもすべてのバージョンが永続)
- 再帰関数
- 白黒ではなくてグレー: 標準ライブラリとコーディング規約にはどの程度に関数型言語の特徴をつかっているか?
- 純粋関数は等式推論を利用して:
- 変換する
- 証明する
- 仕様からプログラムを導き出す
- 再帰関数には帰納法をつかえる。
- hlint
- lambdabot
- 並行・並列処理:純粋性
- 抽象化 (オブジェクト(名詞)の抽象化 関数(動詞)の抽象化)
- 欠点
- 効率性 CPUメモリをつかう 永続データ構造←→ミュータブル構造
- 状態を変更するプログラムは扱いにくくなる可能性がある
- 型変数をつかって多相的な関数をつくれる
- パターンマッチでifをかかなくてよくなる
- カリー化
- 遅延評価 (カリー化と遅延評価でHaskellがたのしくなってる)
- 無限データ構造が用意できる
- モナド(処理そのものの抽象化)
- C言語のセミコロンを制御するみたいなもんらしい
- Hoogle
- 型を入力すると標準ライブラリを検索してくれる
- nullがない
- 1965年 アントニー・ハーア が考案
- nullの使用目的
- エラー → HaskellならMaybeをつかう。JustかNothingになる。
- 特別
- 未使用引数
- Haskellはコンパイルまでに時間がかかる。
- デザインがきまっていないときだったらruby/pythonの方がはやくつくれるかも
- Haskellでつくったソフト
- silk
- semantic webのサービスをやっている
- Cryptol
- 暗号のドメイン固有言語をつかって仕様からプログラムやチップをつくる
- Yesod
- web framework
- silk
- Leave your ego at the door.
- アドバイス
- 型がちゃんとわからなかったら自動型推論をつかわないほうがよい。
- 型を宣言すると早くバグをみつけられる
- 型はドキュメンテーション
- 型がちゃんとわからなかったら自動型推論をつかわないほうがよい。
- printfデバッグ
import Debug.Trace hoge a | trace("hoge " ++ show a) False = ... hoge a = ...
- 会場: 本を読んだことがないひと半分くらい...
- この勉強会はほんとうの初心者向け
- 上級者になるにはPhDが2つ必要 ComputerScienceとMathmatics
- 会社でつかうなら中級者でok.
- real world haskellは初心者60%くらいまで。
- 虎さんは中級入口。
- 遅延評価でびっくりしたこと:unit testでコードがけされてしまったとか。
お楽しみ会
ハードウェアの論理合成にHaskellはよくつかわれているらしい。
2011-07-24 15:25
第2部
2011-07-24 15:45
環境構築:Linux
- GHCに支配されている。
- HUGSは1998年から保守されていない。
- Haskell Platform ライブラリーのパッケージ
- Hackageライブラリのレポジトリ
- Cabal管理アッケージ
- システム /usr
- ローカル /usr/local
- ホーム $HOME/.cabal/bin
- Haskell Platformにはいってないのはこっち。
- サンドボックス cabal-dev
- cabal updateはsudoをつけない。
環境構築:Mac
環境構築:Win
- MinGW+MSYSがおすすめ。Cygwinは依存が発生するので。
- Haskell-mode for Emacsは最新版を入れること(古いのはインデントがひどい)
サンプルプログラミング
- \: λに形がにている。
- 本では記号が使われているが実際の入力との対応は付録Bにある。
虎:40人くらいでグループを組んでプログラミングする予定だったが人数がふえたので、発表だけではやくおわってしまった。
2011-07-24 17:09
第3部 (LT)
CairoでほっかりGUIプログラミング
- CairoはPostscriptっぽいなにか。
(続) Haskell でWeb サーバーを実装してみました
- Functional→s/関数型/実用的/
- ライティーをまねてマイティー
- mighttpd
- 目標
- 機能
- 部品化
- 性能
- ByteStringをつかう。Stringはリストでおそい。
- user threadをつかう。
- protocol: message oriented, stream oriented
- network: event driven, thread
- IOマネージャだけがeventドリブン
- prefork: listenしてからforkするとselect 1024の壁を突破
- WAI web application interface
- httpperf
- Date.Timeが30〜40%くらいCPUを食ってた。
- システムコールでユーザスレッドがとまる。
- simle-sendfile lib
- IOマネージャは1CPUしかつかえない。
- preforkでにげた。
- ロギングがボトルネック
- hPutでappend writeするのが一番はやかった。
Cloud Haskell
- Erlang風のインターフーイスをHaskellに実装Erlang in Haskell
- ノード間でクロージャ転送
- クロージャをシリアライズできない
- 部分型が free variableの型が 等値性
- Staticという概念: 環境を含まないクロージャ 関数ポインタみたいなもん
型から項を作る
e ::= x | e e | λx.e