50
BPStudy #49 Pythonista による Pythonista のための Scala 紹介 2011/09/30 BPStudy #49 Scala 祭り しょうま @shomah4a Id:shomah4a

Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

  • Upload
    shoma-h

  • View
    4.329

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

Pythonista によるPythonista のための

Scala 紹介

2011/09/30 BPStudy #49 Scala 祭り

しょうま@shomah4aId:shomah4a

Page 2: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

内容

● 自己紹介● Scala ってどんな言語?● どこで使われている?● 動的型付け・静的型付け● 型推論● 関数型なにそれおいしいの?● Python と Scala● 開発環境について● その他

Page 3: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

お前、誰よ

● しょうま(@shomah4a)

● 今月頭から Java の会社● 仕事では今は Python 使ってます。と思ったらそうでもなくなった● Java とかよくわかりません

● Scala を始めたきっかけは面白そうだったから● Android 開発で Java 使いたくないってのも

● 言語遍歴● Basic -> VB -> (C ->) C++ -> Python(, Haskell, Erlang,

OCaml, Scheme) -> Scala

● Python 界隈の人

Page 4: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

Scala とはなんぞや?

Page 5: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

Scala とは

● Scala ... はオブジェクト指向言語と関数型言語の特徴を統合したマルチパラダイムのプログラミング言語である。(wikipedia)

● 最新版は 2.9.1● 静的型付けなコンパイル型言語

● コンパイル遅い…

● 省コード● Java とか冗長でめんどくs(ry

Page 6: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

Scala とは

● 標準ライブラリ● collection● JSON● Stream

● Web Framework● Lift, Play, BlueEyes, ... その他諸々

Page 7: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

Scala とは

● JVM で動く● Android の Dalvik VM でも動くよ!● Java のライブラリをそのまま使える

– でも…

● .NET CLR もサポートしているらしいけど開発止まってる…

● LL です!● REPL もあるよ!● LL Tiger にもいたよ!

Page 8: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

Scala とは

● 並行処理● Actor モデル

– Erlang の Process– Message Passing でデータをやり取りし、共有メモリを排する– Python の multiprocessing が似たようなインタフェイス

● STM (Software Transaction Memory)– 共有メモリに対するアクセス制御の方法– Haskell とか Clojure とか– PyPy でも GIL を取り除くために注目されたり

● このあたりは @cooldaemon さんが詳しい● http://d.hatena.ne.jp/cooldaemon/

Page 9: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

どんなところで使われている?

● 大体 Web 系● Twitter, Foursquare, Remember the Milk, etc...

● 国内だと GMO メディア, ドワンゴ[要出典]など● Android

● 個人的に一個作りました

Page 10: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

マスコットキャラクタ

● @scalachan

Page 11: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

Java と Scala

Page 12: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

Java と Scala

● よく言われる「JVM で動くから Java の遺産資産使えるよね」という話● Java のライブラリを使うとその部分は Java っぽくなら

ざるを得ない● Scala っぽく書くために Wrapper はほしい

● Better Java としてしか Scala を使わないのはどうなの?● C++ != Better C

Page 13: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

静的型付けと動的型付け

Page 14: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

動的型付けとは

● 変数の型が実行時に決まる● 実行時の変数の中身次第

● 大抵インタプリタ型● メリット

● 文法チェックだけでコンパイルしないで実行できる● ゆるふわ

● デメリット● 動かしてみないと型の間違いがあってもエラーが出ない

Page 15: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

静的型付け

● 変数の型がコンパイル時に決まる● 大抵コンパイル型の言語

● メリット● 型エラーは実行前に発見できる● 動的型付けより堅牢

● デメリット● 型書かないといけない● ゆるふわじゃない

Page 16: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

でも、めんどくさいんでしょう?

Page 17: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

Scala には型付けを楽にするための仕組みが沢山

Page 18: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

総称型

● Generics● クラス・関数に型パラメータを付与し、様々な型に対して同じ処理を書けるようにする

● Java からある● C++ のテンプレートのつもりで使うとハマる

– テンプレートと違って単純置換じゃない

● def add[T](left:T, right:T) = {...}

Page 19: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

型とか

● Python● Duck Typing

● 実行時に動的に属性を見る

● メソッド・属性の有無に関係なく動的に解決するので実行時にエラーが出る可能性

● Scala● Structural Subtyping

● 特定の属性を持つという型を定義可能

● http://d.hatena.ne.jp/yuroyoro/20110126/1296044588● 皿うどん● OCaml からパクッた

Page 20: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

型推論

● 変数定義時や関数定義時に、文脈から型を推測して変数や関数の型を決める仕組み● val x = 10 と書いてあれば x が Int であると推論する● Java なんかだと int x とか書かないといけない。● SomeClass x = new SomeClass(...)

– SomeClass が二回出るのって無駄じゃね?● val x = new SomeClass(...)

– すっきり– 変更するときに書き換える箇所が少ない

Page 21: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

関数型

● 関数型言語は、広い意味ではファーストクラスの関数オブジェクトを持つ言語である。また、純粋関数型言語では、全ての関数が副作用を持たない。関数型言語の多くは、カリー化、遅延評価などの機能を備えている。また、静的型付けの物の多くは型推論の機能を持つ。(wikipedia)

● 広い意味では Python も関数型の特徴がある● 関数オブジェクト● 高階関数(map, filter, reduce)● デコレータ(関数を受け取って関数を返す高階関数)

Page 22: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

Scala の関数型

● ファーストクラスの関数オブジェクト● 無名関数● カリー化● 遅延評価● パターンマッチ

● case class で拡張できる

● 末尾再帰最適化● 相互末尾再帰は未サポート

Page 23: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

それ以外

● 限定継続● Scalaの限定継続の基本と応用in高橋メソッド● by @kmizu● http://www.slideshare.net/kmizushima/scala-8345454

● コンパイラプラグイン● モテモテコンパイラプラグイン by @kiris● http://www.slideshare.net/kiris60/motemote-compiler-plugin

Page 24: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

Python と Scala

Page 25: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

ソースを見てみる

Page 26: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

例: 1〜100 をプリントする

● Scala● 0 to 100 foreach {x=> println(x)}● 0.to(100).foreach(println)

● Python● for i in xrange(101): print i● for i in range(101): print(i)

● Ruby● 0.upto(100).each {|i| puts(i)}

Page 27: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

Ruby の方が似てね?

Page 28: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

fizzbuzz.scala

0 to 100 foreach (i =>{ if (i % 3 == 0) { print("fizz") } if (i % 5 == 0) { print("buzz") } if (i % 5 != 0 && i % 3 != 0) { print(i) } println("")})

Page 29: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

fibonacci.scala

def fibonacci(n:Int): Int = if (n == 0 || n == 1) { 1 } else { fibonacci(n-1) + fibonacci(n-2) }

Page 30: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

The Zen of Python

Page 31: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

Beautiful is better than ugly.

● Python に限った話じゃない

Page 32: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

Explicit is better than implicit.

● Implicit conversion とか Implicit parameter とかある● implicit def tostring(n:Int) = n.toString● def print(x:String) = println(x)● print(10)

Page 33: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

Simple is better than complex.

● Python は書いたまま読める(意味が取りやすい)● Scala はソースが短くて意味が取りやすいけど、すべてを把握するのが困難だったりする

Page 34: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

Flat is better than nested.

● ネストした関数・部分関数・パターンマッチ結構書く● それが読みにくいというわけではない

Page 35: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

Sparse is better than dense.

● メソッドチェイン大好き● 行あたりの持つ意味が結構濃い

Page 36: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

Page 37: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

もしかして Pythonista には向かない?

Page 38: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

新しいパラダイム・作法・文化に触れられる

Page 39: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

開発環境

Page 40: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

IDE

● Eclipse● プラグインがある

● IntelliJ IDEA● 結構いいらしい

Page 41: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

Emacs

● scala-mode.el● Syntax Highlight と入力補助● よくあるメジャーモード

● Ensime かわいいよ Ensime● 補完とかできるらしい● 裏に Scala のプロセスを立ててコンパイルしている● すみませんつかってません● EmacsでつくるScala開発環境 後編(ENSIME) -

tototoshiの日記● http://d.hatena.ne.jp/tototoshi/20100927/1285595939

Page 42: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

ビルドツール

● ant● maven● sbt (simple build tool)

● あんまり simple じゃないような…?● buildout みたいなことできる● オススメ

Page 43: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

まとめ

● Python とは違った文化・毛色の言語● 動的型・静的型● インタプリタ型・コンパイル型● Explicit・Implicit

Page 44: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

本とか

Page 45: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

Scala スケーラブルプログラミング

● 通称コップ本● Odersky 先生が書いた本● 仕様とか詳しい

● K&R・プログラミング言語C++

● 第一版は2.7 なのでちょっと古い● 第二版出たばっか

● 2.8, 2.9 対応

Page 46: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

プログラミング Scala

● 信頼の O'reilly● すみませんまだよんでません

Page 47: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

Scala 実践プログラミング

● すみませんまだよんでません● 後半がマニアックらしいです● 今日サインもらえますきっと

Page 48: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

勉強会とか

● Scala 勉強会 in 渋谷● 隔週水曜日に渋谷で開催される勉強会● とってもゆる〜い● 気軽に参加できる● http://scala-users.org/shibuya/

● Scala 勉強会 in 秋葉原● 隔週水曜日に秋葉原で開催される勉強会● とってもゆる〜い● 気軽に参加できる● http://scala-users.org/shibuya/

● ゆるふわ Scala 勉強会

Page 49: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

横浜.py

● はまぱい? よこぱい?● Facebook Group

● https://www.facebook.com/groups/126168334149384/

● 初心者向けな会にしたいなあ

Page 50: Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

BPStudy #49

ご清聴ありがとうございました!