これらの課題のうち、一部ツールの電子化を行うほ …- 259 - これらの課題のうち、一部ツールの電子化を行うほか、プロセス4と5を一つにまと
これからの「言語」の話をしよう ―― 未来を生きるためのツール
-
Upload
nobuhisa-koizumi -
Category
Technology
-
view
2.281 -
download
1
description
Transcript of これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう
小泉将久F# User Group - Japan
―未来を生きるためのツール―
自己紹介
• 小泉将久 (Nobuhisa Koizumi)
• F# User Group - Japan 代表
• @nobuhisa_k
• id:Nobuhisa (はてな)
• セキュリティキャンプ2005
#osc11do #fsharp
関数型言語に興味のある人!
パラダイムパラダイムパラダイムパラダイム
パラダイムって何だろう
手続き型プログラミング
と
関数型プログラミング
問題点・・・?
手続き型の悪いところ?
• 抽象度が低い?
• バグが発生しやすい?
• 並列計算に不向き?
• \美しくない!/
抽象度が低い?
手続き型
関数型人間のためのパラダイム
コンピュータ寄りのパラダイム
関数型プログラミングとは
• 機能(関数)を中心に考える
• 関数は値関数は値関数は値関数は値である(第一級)
• 副作用はちょっとだけ♥
func
10
“hello”
関数型プログラミングとは
C
E
D
A
B
関数合成関数合成関数合成関数合成 高階関数高階関数高階関数高階関数
関数型プログラミングとは
• 変数束縛
束縛したら変更できない変更できない変更できない変更できない
let a = 1024
慣れると、こっちのほうがプログラミングしやすい!
バグバグ
並列並列
F#F#F#F#
Open Source !!Open Source !!
あらゆる言語を研究した最先端の関数型言語
F#
• Microsoft Research(2005~)
• マルチパラダイム�関数型(非純粋)
�手続き型
�オブジェクト指向
�言語指向
OCaml
Haskell
PythonPython
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 | Bird
let 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 h
let 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 7let! y = Some 3return 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#の街の街
さっぽろさっぽろ
なまらなまらF#F#しようよ!しようよ!
Q & AQ & AQ & AQ & A
• なんでもどうぞ!• 展示会場にF#のブースもあります!
おしまい
小泉将久
@nobuhisa_k
λλλλ