これからの「言語」の話をしよう ― 未来を生きるためのツール ―                   小泉 将久       F# User Group - Japan
自己紹介• 小泉 将久 (Nobuhisa Koizumi)• F# User Group - Japan 代表•   @nobuhisa_k• id:Nobuhisa (はてな)• セキュリティキャンプ2005          #osc11...
関数型言語に興味のある人!
パラダイム
パラダイムって何だろう         問題点・・・?手続き型プログラミング     と関数型プログラミング
手続き型の悪いところ?• 抽象度が低い?• バグが発生しやすい?• 並列計算に不向き?• \ 美しくない!/
抽象度が低い?              人間のための      関数型      パラダイムコンピュータ寄りの  パラダイム     手続き型
関数型プログラミングとは• 機能(関数)を中心に考える  関数は値である(第一級) 10• 関数は値           func                  “hello”• 副作用はちょっとだけ ♥
関数型プログラミングとは        E    AC              D    B関数合成        高階関数
関数型プログラミングとはバグ     • 変数束縛         let a = 1024並列     束縛したら変更できない          変更できない 慣れると、こっちのほうが プログラミングしやすい!
F#
Open Source !!
あらゆる言語を研究した    最先端の   関数型言語
F#• Microsoft Research(2005~)• マルチパラダイム    関数型(非純粋)    手続き型    オブジェクト指向    言語指向
OCaml
Haskell
Python
F#の守備範囲
F#の守備範囲• Webアプリケーションも書ける例)http://fssnip.net/
F#の守備範囲• 3Dだって扱える(DirectX, WPF) 例)F# 3DVisualization
F#の守備範囲• Xboxのゲームも作れる 例)The Path of Go
F#の守備範囲• もちろん業務アプリも!
F#の守備範囲• その他 – スマートフォンのアプリケーション – バッチ処理、スクリプティング     • スクリプト言語としてのF# - .fsx は強力だった! – 並列計算が得意• Demonstration ! –   Windows...
F#の美しさ
判別共用体                      & パターソマッチtype Animal = Dog | Cat | Rabbit | Birdlet speak = function    | Dog    -> "わんわん!"    ...
public abstract class Animal{       public abstract string   Speak();}public class Dog : Animal{       public override str...
部分適用                   & 関数合成                      (&型推論)let compute = (+) 1 >> (*) 10
private Func<T, U> Compose<T, U>(Func<U, U> f, Func<T, U> g){       return (x => f(g(x)));}private int F(int x, int y){   ...
測定単位[<Measure>] type km[<Measure>] type hlet time = 8<h>let speed = 156<km/h>
リスト内包表記                            (シーケンス式)[ for x in 0..10 -> (x, pown 2 x) ]val it   : (int * int) list =  [(0,   1); (1...
public IEnumerable<Tuple<int, int>> Pain(){        return from x in Enumerable.Range(0, 11)                select new Tupl...
モナド         (コンピューテーション式)maybe { let! x = Some 7        let! y = Some 3        return x + y }
並列計算
並列化の困難例えば・・・         素敵な    読 : 問題なし         ファイル   書 : 問題あり
関数型と並列値が変更できない (immutable)Read Only !並列化が容易!(何も意識する必要がない)
F#なら朝メシ前!• 標準ライブラリが  並列計算を強力にサポート!• Demonstration !  画像処理を並列化しよう –画像処理を並列化しよう
おすすめ書籍
コミュニティ• F# User Group - Japan  http://tinyurl.com/fsugjp  – メーリングリスト  – Lingr  – Wiki  – twitter : #fsharp, #fsugjp• MSDNフ...
F#の街さっぽろ
なまらF#しようよ!
Q&A• なんでもどうぞ!• 展示会場にF#のブースもあります!
λ    おしまい              小泉 将久           @nobuhisa_k
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
Upcoming SlideShare
Loading in …5
×

これからの「言語」の話をしよう ―― 未来を生きるためのツール

2,701 views

Published on

オープンソースカンファレンス2011 Hokkaidoで使用した発表資料です。F#の紹介です。

Published in: Technology

これからの「言語」の話をしよう ―― 未来を生きるためのツール

  1. 1. これからの「言語」の話をしよう ― 未来を生きるためのツール ― 小泉 将久 F# User Group - Japan
  2. 2. 自己紹介• 小泉 将久 (Nobuhisa Koizumi)• F# User Group - Japan 代表• @nobuhisa_k• id:Nobuhisa (はてな)• セキュリティキャンプ2005 #osc11do #fsharp
  3. 3. 関数型言語に興味のある人!
  4. 4. パラダイム
  5. 5. パラダイムって何だろう 問題点・・・?手続き型プログラミング と関数型プログラミング
  6. 6. 手続き型の悪いところ?• 抽象度が低い?• バグが発生しやすい?• 並列計算に不向き?• \ 美しくない!/
  7. 7. 抽象度が低い? 人間のための 関数型 パラダイムコンピュータ寄りの パラダイム 手続き型
  8. 8. 関数型プログラミングとは• 機能(関数)を中心に考える 関数は値である(第一級) 10• 関数は値 func “hello”• 副作用はちょっとだけ ♥
  9. 9. 関数型プログラミングとは E AC D B関数合成 高階関数
  10. 10. 関数型プログラミングとはバグ • 変数束縛 let a = 1024並列 束縛したら変更できない 変更できない 慣れると、こっちのほうが プログラミングしやすい!
  11. 11. F#
  12. 12. Open Source !!
  13. 13. あらゆる言語を研究した 最先端の 関数型言語
  14. 14. F#• Microsoft Research(2005~)• マルチパラダイム 関数型(非純粋) 手続き型 オブジェクト指向 言語指向
  15. 15. OCaml
  16. 16. Haskell
  17. 17. Python
  18. 18. F#の守備範囲
  19. 19. F#の守備範囲• Webアプリケーションも書ける例)http://fssnip.net/
  20. 20. F#の守備範囲• 3Dだって扱える(DirectX, WPF) 例)F# 3DVisualization
  21. 21. F#の守備範囲• Xboxのゲームも作れる 例)The Path of Go
  22. 22. F#の守備範囲• もちろん業務アプリも!
  23. 23. F#の守備範囲• その他 – スマートフォンのアプリケーション – バッチ処理、スクリプティング • スクリプト言語としてのF# - .fsx は強力だった! – 並列計算が得意• Demonstration ! – Windows Form – FSharpChart
  24. 24. F#の美しさ
  25. 25. 判別共用体 & パターソマッチtype Animal = Dog | Cat | Rabbit | Birdlet speak = function | Dog -> "わんわん!" | Cat -> "にゃーにゃー" | Rabbit -> "..." | Bird -> "ぴーちくぱーちく"
  26. 26. public abstract class Animal{ public abstract string Speak();}public class Dog : Animal{ public override string Speak() { return "わんわん!"; }}public class Cat : Animal{ public override string Speak() { return "にゃーにゃー"; }}public class Rabbit : Animal{ public override string Speak() { return "..."; }}public class Bird : Animal{ public override string Speak() { return "ぴーちくぱーちく"; }}
  27. 27. 部分適用 & 関数合成 (&型推論)let compute = (+) 1 >> (*) 10
  28. 28. private Func<T, U> Compose<T, U>(Func<U, U> f, Func<T, U> g){ return (x => f(g(x)));}private int F(int x, int y){ return x * y;}private int G(int x, int y){ return x + y;}public int Compute(int arg){ return this.Compose( (int x) => F(10, x), (int x) => G(1, x))(arg);}
  29. 29. 測定単位[<Measure>] type km[<Measure>] type hlet time = 8<h>let speed = 156<km/h>
  30. 30. リスト内包表記 (シーケンス式)[ for x in 0..10 -> (x, pown 2 x) ]val it : (int * int) list = [(0, 1); (1, 2); (2, 4); (3, 8); (4, 16); (5, 32); (6, 64); (7, 128); (8, 256); (9, 512); (10, 1024)]
  31. 31. public IEnumerable<Tuple<int, int>> Pain(){ return from x in Enumerable.Range(0, 11) select new Tuple<int, int>(x, (int)System.Math.Pow(2, x));}
  32. 32. モナド (コンピューテーション式)maybe { let! x = Some 7 let! y = Some 3 return x + y }
  33. 33. 並列計算
  34. 34. 並列化の困難例えば・・・ 素敵な 読 : 問題なし ファイル 書 : 問題あり
  35. 35. 関数型と並列値が変更できない (immutable)Read Only !並列化が容易!(何も意識する必要がない)
  36. 36. F#なら朝メシ前!• 標準ライブラリが 並列計算を強力にサポート!• Demonstration ! 画像処理を並列化しよう –画像処理を並列化しよう
  37. 37. おすすめ書籍
  38. 38. コミュニティ• F# User Group - Japan http://tinyurl.com/fsugjp – メーリングリスト – Lingr – Wiki – twitter : #fsharp, #fsugjp• MSDNフォーラム : Visual F#
  39. 39. F#の街さっぽろ
  40. 40. なまらF#しようよ!
  41. 41. Q&A• なんでもどうぞ!• 展示会場にF#のブースもあります!
  42. 42. λ おしまい 小泉 将久 @nobuhisa_k

×