by shigemk2

当面は技術的なことしか書かない

I love Scala #渋谷JVM

twitter.com

Scalaのはなし。

はじめての関数型言語

  • Common Lisp(Lispを関数型言語と呼ぶのかはおいておく)
  • Beating the Averages

ハッカーと画家 コンピュータ時代の創造者たち

ハッカーと画家 コンピュータ時代の創造者たち

  • Lispを使っていたから素早く開発できた
  • 素早さこそが競合に対する最大の武器だった

d.hatena.ne.jp

Lispを学んで得たもの

  • 関数型言語の基本的な考え方
  • マクロすごい
  • (((((((()))))))) 括弧のお化け

→Lispをやってもお金持ちに慣れなそうなことに気付き始める

2006 Haskellがちょっと流行る

きっかけはMonadius

Monadius - a scientist's toy box

  • 純粋関数型言語
  • モナド
  • コンパイルが通ればバグはない(と言われるが、そんなことはない)
  • でも仕事で使うのはちょっと厳しそうだ

2010 Clojureと出会う

  • 2007くらいには出ていたのに、Clojureはマークしていなかった

プログラミングClojure 第2版

プログラミングClojure 第2版

  • JVM上で動くLisp!!ついにLispの時代がきた
  • Lispなのに左から右へ書ける(Javaと同じ)
  • Lispの時代がきた、と思ったら来なかった

2011 Scalaと出会う

オブジェクト指向+関数型

  • 動的型付け言語の簡潔さと静的型付け言語の安全さを両立
  • 手続き型の書き方も出来、敷居が低い(モナドのことは知らなくていい)
  • JVM上で動作し、Javaと高い相互運用性を備える
  • Haskellはきびしい
  • Scalaは学術的な言語ではなく実用的な言語
  • プログラマが普通に使える言語(そういうポリシーをいろいろ感じる)

Haskell vs Scala

  • Scalaは継承とか出来てオブジェクト指向ぽくて読みやすい
  • 関数型にこだわりすぎない
  • 手続き型でも書ける
  • 必要であれば自由に状態や副作用を持てる
  • メソッドの外側からみて参照透過であれば、メソッド内では状態を持ってもよい
  • Scala使いにもいろいろ属性があって、better Java的な使い方をしている人もいればより関数型的な使いかたをする人もいる(聖戦)
  • でもまあおだすきー先生の思想から、バランスの取れた書き方が出来る
  • 一つの式に詰め込み過ぎない(Haskellとかは、やろうと思えば数行に渡るプログラムを1行にまとめることが出来る)
  • Scalaは分かりやすい名前をつけて意味的にどうにかすることが出来る

http://www.paraiso-lang.org/ikmsm/images/c80-cover.jpg

hascalator

サンフランシスコのScalaDaysで言及されたことば

  • IOや例外といった副作用のよりよい扱い方はないか
  • モナドは素晴らしいけどよりScalaらしい方法はないか
  • Scalaの一番よいところはバランス感覚
  • JVM言語なのでJavaの資産も活かせるのがメリット(better Javaなのでお客に説明しやすい。Haskellとかだと結構説明が難しいことがある)

  • これなら仕事に使えるかも知れない

当時の背景(2011-2012)

  • 少人数のチームで生産性を高めることで利益率を向上させることを追求
  • Seasar2 Apache Click S2JDBCなどのフレームワークとアジャイル開発プロセスを採用
  • でもJavaでは限界
  • 次どうしようってはまっていた時期

Scala実戦投入

  • 社内のテストツールをLiftやScalatraで作ってみる
  • 実践的な書籍がないので本を書いた

代表作

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

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

  • 作者: Martin Odersky,Lex Spoon,Bill Venners,羽生田栄一,水島宏太,長尾高弘
  • 出版社/メーカー: インプレスジャパン
  • 発売日: 2011/09/27
  • メディア: 単行本(ソフトカバー)
  • 購入: 12人 クリック: 235回
  • この商品を含むブログ (45件) を見る

本を書いた

Scala逆引きレシピ (PROGRAMMER’S RECiPE)

Scala逆引きレシピ (PROGRAMMER’S RECiPE)

  • Seasar2の開発が止まっていたので、Play2をやってみる

つらいことも多い

  • コンパイルが猛烈に遅い(あまりに有名なやつ)
  • IDEが猛烈に重い(Eclipseのプラグイン ScalaIDE)
  • Play2が猛烈にバグっている(2からScalaで書きなおされていて、1では出来たことが2では出来ないみたいなことがあって自分で作らないといけない)
  • sbt(名前と違って全然シンプルじゃないので名前が変わった)
  • 突然シャットダウンでビルドできないからセントラルにデプロイ
  • いろいろな混乱があった(政治的な問題でTomcatの上から動かさないといけない)
  • でもJavaに失われていた熱気があった
  • マクロもある

Macros - def マクロ - Scala Documentation

2013 GitBucket開発開始

  • Scalaで開発されたOSSのGitHubクローン

github.com

  • ScalatraやSlickなどに加えて、趣味で作っていたのでJGit Apache MINA Jetty H2など既存のJava技術を活用
  • コンパクトなコードで、少人数で開発を継続
  • インフラよりの実装がJavaで多いのはよいこと

2014 Scalaで大規模開発

  • Scalaの状況として、Play2も安定してきたし、その他のフレームワークやツール、ライブラリも揃ってきた
  • IntelliJ IDEAが無償で使えるようになった
  • 非同期処理分散処理が注目されはじめた

これからのScala

  • コンパイル速度
  • バイナリ互換性(Javaだとバージョンが上がってもコンパイルしたものが使える異常なやつだけど、Scalaだとバージョンアップするとバイナリ互換性が保証されない。ソースコードの互換性は保証されるが)
  • 解決するために新しいコンパイラを開発している(おだすきー先生がプライベートで)
  • TASTYで中間ファイルを作り、バイトコードやJSを生成する(Scala.jsとかもあつい)
  • でもこういうことすると余計にコンパイルが遅くなりそうな気がするので実用化されるかどうかは不明。6月7月あたりでアムステルダムでScalaDaysがあるのでそこでアルファリリースがあるのかしら
  • 言語仕様の整理
  • 行けてない昨日やシンタックスを廃止したり別機能で代替したり
  • よりシンプルな記述が可能になるような機能やシンタックスシュガーとか(UnionTypeとか)
  • 実行環境

今後の方向性

  • 関数型へシフトしていくわけではない
  • オブジェクト指向と関数型の融合
  • 強力な静的型付
  • Scalaの特徴を活かしたよりいsンプルで直感的な記述