Haskell study meeting #01

1,775 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,775
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Haskell study meeting #01

    1. 1. Why Haskell?2012/05/15@Shimojo Lab.
    2. 2. Agenda1.About me2.Why Haskell3.What is Haskell4.Let’s start Haskell
    3. 3. About me
    4. 4. About me• 髙橋 慧智• プログラミング• 写真• Apple
    5. 5. MAROON 5
    6. 6. COLDPLAY
    7. 7. House Music
    8. 8. Apple!
    9. 9. Life with programming BASIC 中1∼ HSP 中2∼ C 中3∼ C++ 高2∼ Haskell 高3∼ C# 大学1∼
    10. 10. Why Haskell
    11. 11. Boilerplate code in C#1 List<int> a = new List<int> {1, 2, 3, 4, 5};2 List<int> b = new List<int>();34 for (int i = 0; i < a.Length; i++) {5 if (a[i] % 2 == 0) {6 b.Add(a[i]);7 }8 }
    12. 12. That’s all1 foldl (*) 1 [1..10]
    13. 13. Real mess• ヌルポ • 例外処理• デッドロック • スレッド間通信• ロックし忘れ • メモリリーク• キャスト • 初期化忘れ• 冗長な文法 • etc.
    14. 14. In Haskell1 a = [1, 2, 3, 4, 5]2 b = filter even a
    15. 15. Quick Sort1 qsort [] = []2 qsort (x:xs) = qsort smaller ++ [x] ++ qsort bigger3 where smaller = filter (<x) xs4 bigger = filter (>=x) xs
    16. 16. Let’s talk about the future • マルチコア • OpenCL • メニーコア • MapReduce • マルチプロセッサ • Hadoop • GPGPU • BigTable • クラウド • etc.
    17. 17. 6 Corehttp://news.kakaku.com/prdnews/cd=pc/ctcd=0510/id=14313/
    18. 18. 10 Corehttp://www.mdn.co.jp/di/newstopics/17719/
    19. 19. http://www.apple.com/macpro/
    20. 20. 100 Corehttp://www.tilera.com/products/processors/TILE-Gx_Family
    21. 21. “It changes the way youthink about programming” http://scienceblogs.com/goodmath/2006/11/why_haskell.php
    22. 22. What is Haskell
    23. 23. Functional Programming Language
    24. 24. FunctionalProgramming Language• 関数がファーストクラスオブジェクト• 関数は値• 関数を変数に代入できる• 関数の関数の引数に渡せる• 関数の返り値として関数を返せる• 関数を返す関数を返す関数を返す関数?
    25. 25. What are the benefits?• 高度な抽象化• モジュール性の向上
    26. 26. Other FunctionalProgramming Languages LISP 関数型言語の父 Scala Twitterの実装言語 Erlang 強力な並列処理 F# .NETで動く
    27. 27. Again, why Haskell• 参照透明性• 静的な型付け/型推論• 遅延評価• 代数的データ型/型クラス/モナドetc.
    28. 28. Referentially Transparent• 参照透明でないものとは?• 入出力• グローバル変数• 変数への読み書き全般• 乱数etc.
    29. 29. What are the benefits?• 読みやすい/デバッグしやすい• メモ化(memoization)• 自動並列化
    30. 30. Lazy evaluation• 値が必要になるまで計算しない• 計算量の最適化• 探索などを自然に記述できる
    31. 31.
    32. 32. Example1 fib = unfoldr ((x, y) -> Just (x + y, (y, x + y))) (0, 1)2 take 100 fib
    33. 33. Statically Typed• float x = 1 / 2• Cのvoid*• Java/C#のobject• Haskellでキャストはできません
    34. 34. Type Inference• 変数• 関数の引数• 関数の返り値• これらを全て関数のシグネチャやリテ ラルの型から導く
    35. 35. Boilerplate code in C#1 List<int> a = new List<int> {1, 2, 3, 4, 5};2 List<int> b = new List<int>();34 for (int i = 0; i < a.Length; i++) {5 if (a[i] % 2 == 0) {6 b.Add(a[i]);7 }8 }
    36. 36. The benefits• これらが私たちにもたらしてくれるも のとは• コンパイルが通れば8割方バグはない• デバッグ/メンテナンスが簡単• 簡潔かつ自然なコーディング• テストデータの自動生成etc.
    37. 37. Summary• メニーコア時代に生き残るために• 安全にコーディングするために• 楽しくコーディングするために• 美しくコーディングするために
    38. 38. Let’s start Haskell!
    39. 39. Thank you for listening.
    40. 40. How to start http://hackage.haskell.org/platform/
    41. 41. Learning materials• ふつうのHaskellプログラミング• プログラミングHaskell• すごいHaskellたのしく学ぼう!• Real World Haskell

    ×