Scalaスケーラブルプログラミング[コンセプト&コーディング] (Programming in Scala)
- インプレス (2009年8月21日発売)
- Amazon.co.jp ・本 (624ページ)
- / ISBN・EAN: 9784844327455
作品紹介・あらすじ
Scalaは、1行コードから大規模プログラムまで書けるスケーラブルな言語。オブジェクト指向と関数型をバランスよく融合し、Javaをベースに、C#、Smalltalk、ML、OCamlなどの特徴を取り込んでいる。並行処理やパーサー・コンビネーターなど標準ライブラリーも豊富に備える。本書では、Scala言語デザイナー自らが、Scalaの考え方と使い方をステップ・バイ・ステップで解説。オブジェクト指向と関数型、両方の側面をていねいに説明。関数型というパラダイムを学びながら、オブジェクト指向の理解も深められる。次世代言語の標準指標を理解したい人のための、必読の書。
感想・レビュー・書評
-
言語設計者によるScala言語について思想と仕様を語った本。言語フリークなひらりんが好きなタイプの本。読んでて楽しい。
Scalaを詳しく知ることができる反面、実際に何らかのソフトを作るための内容は不足な部分あるかもしれない。それは、もう1つのScalaプログラミング入門を読むと良い。詳細をみるコメント0件をすべて表示 -
関数型のプログラミング言語はLispしか知らなかったから、Scalaに興味があったから、この本を買いました。
最初のところしか読んでません。 -
勉強会で利用中。
面白い言語です。 -
1章から33章かけて、scalaの式や構文について詳しく解説していて
javaからscalaを始めて、なんとなくコードが書けちゃってる人は
一度目を通すといいかもしれない。
ただ、全体的に退屈なので、
一気読みには向かないかも
手元に置いておきたい一冊。 -
C言語からJavaへ移ったときと同じくらいの、何て言うかパラダイムシフト感?
これまでオブジェクト指向言語で不便だと思っていたことをほとんど解消してくれる&関数型という未知の領域への橋渡しをしてくれる。
あとはIDEさえJava並みになってくれれば完全移行するのだが…
言語設計者が書いた本だが、Java本でいうと『プログラミング言語Java』ではなく『Javaチュートリアル』くらいの位置付け
通称コップ本、翻訳の質が高い、対応バージョンはScala 2.7
原書はネットで公開されている http://www.artima.com/pins1ed/ -
Scalaスケーラブルプログラミングを読み終わりました。
最近プログラミング言語とての注目されているScalaですが、Java言語上に構築されているため、Javaの発展言語なのかなと思っていましたが、本を読んで、すぐ勘違いにきがつきました。
関数型の考え方を基本において、オブジェクト指向の融合しているという特徴もあり、個人的にはすごく好みな言語です。
とはいえ、手続き型言語Loveな人にはデータ変更できないデータ型って何よと違和感をかじるかもしれません。
気になる特徴を書くと、こんな感じでしょうか。
(1) 変更不可 (Immutable) なデータ型を容易に作成/利用できる文法サポート(Syntax Sugar)をしているというところに、Scalaのスケーラビリィの一つの主張があります。
マルチスレッドのプログラムを書いていると、書き換え可能なデータ型(Mutable)だと、排他処理などを書かないといけないため、結構、面倒なのです。
とはいえ、Immutableなデータ型は書き換えの多いデータを処理するばあい、効率が悪くなりますし、マルチスレッド間で共有されるメモリが限定できることが多いシステムでは、ロックが限定できるため、Immutableなデータを基本とすると、まず実行速度が低下するため、嫌がる人が多いです。
Scalaの場合、ImmutableとMutableと両方使えるのと、ImmutableなデータをMutableのように記述できる文法があるのが良いところです。
ただ、Immtableといっても、純粋な Immutable ではなく、JavaのFinalでオブジェクトのリファレンスが変更できないというものです。
そのため、参照先がMutableなデータだとデータの値自体は変わってしまうようです。
# このあたりは、処理系を使ってないため、まだ調査が必要です。
(2) Java/C#系の静的なデータ型をもつオブジェクト指向言語である。
Java/C#系のオブジェクト指向言語なので、既存のユーザは取っかかり易いというのはああります。
特に静的な型システムが Love な人には向いています。
大規模開発で静的な型システムがあると、参照関係の解析などをツールがサポートでしてくれるので、嬉しいのですよね。
ただGenericsによるオブジェクト指向の型システムは難しいです。
クラスを継承したときの共変性や反変性を考えると唸ってしまいます。
あとは、Mixin による実装の継承ができるのも嬉しいです。
ただ、このあたりは interface や構造での型一致、aspect指向なども関連してきますので、まだスマートな提案がでてくるのかなと思っています。
(3) 関数型言語の特徴を持つ
Scalaは手続き型オブジェクト指向言語を基本としていますが、関数型言語の特性、関数合成、高階関数、ラムダ式(クロージャーのほうが通りが良いかも)をサポートしています。
型システムがあるため、ちょっと面倒なのと、マクロが無いため、Lisperにとっては、ちょっと不満かもしれませんが、通常の関数型言語のプログラミングを、そのまま書けるというのは素晴らしいです。
さらに限定されているとはいえ、末尾再帰がサポートされているのもGoodです。
Javaではメソッドを再帰で実行すると、そのたびにスタックを消費するため、スタックオーバーフローするので、再帰でプログラムを書くのは実用的では無いのです。
なぜスタックを使うのかなど理屈はわかるのですが、Javaでいけてない仕様の一つが解消されているのは嬉しいところです。
(4) Actorによる通信サポート
Scalaのスケーラブリティのサポートに、Actorによる通信サポートがあります。
Erlangで有名になりましたが、結構、古典的な通信方式です。
ただ、この方式は、どんなメッセージでも送るので、あとは受け手で解釈してちゃんと処理してねってことなので、低レベルなメッセージ処理を明示的に書かないといけないですし、静的な型システムの恩恵も受けることができないなど、イマイチです。
まぁ、「できる」って程度で、他のScalaの特徴と比較すると、かなり見劣りする解答です。
この本には他にもオブジェクトの同一性など色々な議論を扱っていて、趣味でプログラム言語を作る、私としては、また新しい言語を設計しようかという気になるぐらい面白かったです。
ただ厚いのと、あくまで言語処理系の本なので根性入れて読んでください!