これからの「言語」の話をしよう ―― 未来を生きるためのツール
Upcoming SlideShare
Loading in...5
×
 

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

on

  • 2,518 views

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

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

Statistics

Views

Total Views
2,518
Views on SlideShare
2,515
Embed Views
3

Actions

Likes
5
Downloads
16
Comments
0

2 Embeds 3

http://d.hatena.ne.jp 2
http://twitter.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

  • これからの「言語」の話をしよう ― 未来を生きるためのツール ― 小泉 将久 F# User Group - Japan
  • 自己紹介• 小泉 将久 (Nobuhisa Koizumi)• F# User Group - Japan 代表• @nobuhisa_k• id:Nobuhisa (はてな)• セキュリティキャンプ2005 #osc11do #fsharp
  • 関数型言語に興味のある人!
  • パラダイム
  • パラダイムって何だろう 問題点・・・?手続き型プログラミング と関数型プログラミング
  • 手続き型の悪いところ?• 抽象度が低い?• バグが発生しやすい?• 並列計算に不向き?• \ 美しくない!/
  • 抽象度が低い? 人間のための 関数型 パラダイムコンピュータ寄りの パラダイム 手続き型
  • 関数型プログラミングとは• 機能(関数)を中心に考える 関数は値である(第一級) 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 Form – FSharpChart
  • F#の美しさ
  • 判別共用体 & パターソマッチtype Animal = Dog | Cat | Rabbit | Birdlet speak = function | Dog -> "わんわん!" | Cat -> "にゃーにゃー" | Rabbit -> "..." | Bird -> "ぴーちくぱーちく"
  • 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 "ぴーちくぱーちく"; }}
  • 部分適用 & 関数合成 (&型推論)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){ 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);}
  • 測定単位[<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, 2); (2, 4); (3, 8); (4, 16); (5, 32); (6, 64); (7, 128); (8, 256); (9, 512); (10, 1024)]
  • 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));}
  • モナド (コンピューテーション式)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フォーラム : Visual F#
  • F#の街さっぽろ
  • なまらF#しようよ!
  • Q&A• なんでもどうぞ!• 展示会場にF#のブースもあります!
  • λ おしまい 小泉 将久 @nobuhisa_k