2009年08月20日 18:00 [Edit]

理想の言語? - 書評 - Scalaスケーラブルプログラミング

インプレス石橋様より献本御礼。

素晴らしい言語の、素晴らしい入門本。

何が素晴らしいかというと、言語の思想が、頭ではなく体で覚えられるようになっていること。これなら言語オタクでなくとも、いや言語オタクでない方が、無名関数やActorの素晴らしさがよくわかる。

それだけに、結構残念である。

Scalaが、Java上の言語であることに。


本書「Scalaスケーラブルプログラミング」の原題は、「Programming in Scala: A Comprehensive Step-by-step Guide」。この Step-by-step というところが重要で、Scalaという言語の機能を、どういう時にどう使うかがコードを追うだけでわかるようになっている。

目次 - Impress Japan: Scalaスケーラブルプログラミング[コンセプト&コーディング]より
第01章 スケーラブルな言語 A Scalable Language
第02章 Scalaプログラミングの第一歩 First Steps in Scala
第03章 Scalaプログラミングの次の一歩 Next Steps in Scala
第04章 クラスとオブジェクト Classes and Objects
第05章 基本型と演算子 Basic Types and Operations
第06章 関数型スタイルのオブジェクト Functional Objects
第07章 組み込みの制御構造 Built-in Control Structures
第08章 関数とクロージャー Functions and Closures
第09章 制御の抽象化 Control Abstraction
第10章 合成と継承 Composition and Inheritance
第11章 Scalaの階層構造 Scala's Hierarchy
第12章 トレイト Traits
第13章 パッケージとインポート Packages and Imports
第14章 表明と単体テスト Assertions and Unit Testing
第15章 ケースクラスとパターンマッチ Case Classes and Pattern Matching
第16章 リストの操作 Working with Lists
第17章 コレクション Collections
第18章 ステートフルオブジェクト Stateful Objects
第19章 型のパラメーター化 Type Parameterization
第20章 抽象メンバー Abstract Members
第21章 暗黙の型変換とパラメーター Implicit Conversions and Parameters
第22章 リストの実装 Implementing Lists
第23章 for式の再説 For Expressions Revisited
第24章 抽出子 Extractors
第25章 アノテーション Annotations
第26章 XMLの操作 Working with XML
第27章 オブジェクトを使ったモジュラープログラミング Modular Programming Using Objects
第28章 オブジェクトの等価性 Object Equality
第29章 ScalaとJavaの結合 Combining Scala and Java
第30章 アクターと並行プログラミング Actors and Concurrency
第31章 パーサー・コンビネーター Combinator Parsing
第32章 GUIプログラミング GUI Programming
第33章 SCellsスプレッドシート The SCells Spreadsheet
付録A Scalaスクリプトをシェルスクリプトとして実行する方法[UNIX&Windows]
参考文献
用語集
索引
監修者あとがき

こういうのもなんだが、Scalaは「現役プログラマーにとっての理想言語」に近い。「現役プログラマーにとっての理想言語」とは一体どのようなものだろうか。こんな感じではないか。

  • インタプリタ言語かつコンパイラ言語

    Scalaでは

    println("Hello, " + (if (args.length > 0) args(0) else "world"))
    

    と書いてscala hello.scalaと実行することも出来るし、Javaのように

    object Hello {
      def main(args:Array[String]) = 
        println("Hello, " + (if (args.length > 0) args(0) else "world"))
    }
    

    と書いてscalac Hello.scala && scala Helloと実行することも出来る。

  • 静的でも「型」苦しくない

    型推論はすばらしい。

  • オブジェクト指向かつ関数指向

    本書を読めば Scala がその双方であることがわかるが、上の Hello, world! のサンプルだけ見ても、ifが値を持っていることが見てとれる。

  • 「これまでの言語」からそれほど違和感なくはじめられること

    実は私が Scala を好評価する最大の理由が、これ。「Algolの子孫」言語を習得している人なら、違和感なく本書の例題を追って行ける。Haskell や Lisp だとこうは行かない。

そんなわけで、現存の言語では最も美人な Scala なのだが、Scala の最大の特長である「Java上で動く」というのは、最大の欠点でもある。「Javaの膨大な資産にアクセスできる」というのは「Javaにアクセスできない資産にはアクセスしがたい」ということであり、そしてそういった資産は実は少なくない。最もそれを強く感じるのは、Scalaをスクリプトとして使ったときだろう。

たとえば、上の Hello, World! のサンプルは、今時のパソコンでも実行に一秒を要する。Java VMを立ち上げ、Scala環境を初期化するのにそれだけかかるのだ。Perl 6 (rakudo)より重い><。コンパイルした場合でも、0.27秒。ワンライナーを書くのにも最適な Scala なのに、いざ使うとなるとこの「よっこらセックス」感が邪魔をする。llevalでもサポートしたかったのだが、起動するだけでタイムアウトしてしまうので断念せざるを得なかった。

これはどちらかというと、ScalaではなくJVMの問題ではあるのだけど、この「よっこらセックス」がなければJavaももっと普及していたのではないか。アプレットを書くための言語として出発したJavaが、サーブレットを書くための言語に留まってしまった一番の理由がこれだ。Scalaはその意味で、Javaの負の部分も負っている。

Native Scala って誰か作らないのかなあ....まぢで。

いずれにせよ、 Scala は振り向かずにいるにはあまりに美人だ。Javaが嫌いな人も(以外かも知れないが私はJava嫌いではない。せっかちなだけなのだ)、Scala とデートするためだけに Java 環境を用意してもいい。そしてひたすら Scala を使うのだ。そして Java は Perl/Python/Ruby にとっても C のように使うだけに留めるのだ。それだけでかなり幸せになれるのではないか。

Dan the Lingaphilia


この記事へのトラックバックURL

この記事へのトラックバック
「プログラム言語オタク≒文弱」のオチに、文学はエンターテイメントとしてのみうんぬんを書いたついでに、 「Scala は振り向かずにいるにはあまりに美人だ」とKogaiDan氏が書く前から思っていた小ネタ(?)を。 ※以下、あくまでプログラミング・ネタ。 京アニ・ファンかつ非...
[ネタ] SOS Dan on JVM【Weblog towards a Word-Progress】at 2009年11月03日 22:42
「プログラム言語オタク≒文弱」のオチに、文学はエンターテイメントとしてのみうんぬんを書いたついでに、 「Scala は振り向かずにいるにはあまりに美人だ」とKogaiDan氏が書く前から思っていた小ネタ(?)を。 ※以下、あくまでプログラミング・ネタ。 京アニ・ファンかつ非...
[ネタ] SOS Dan on JVM【Weblog towards a Word-Progress】at 2009年11月03日 22:42
ReviewMarket.NETではScalaスケーラブルプログラミング[コンセプト
ReviewMarket.NET:Scalaスケーラブルプログラミング[コンセプト【ReviewMarket.NET:良質なレビューを提供するサイト】at 2009年09月10日 00:41
ちょうど原書を読んでいるところへ、レビューエントリが。 404 Blog Not Found:理想の言語? - 書評 - Scalaスケーラブルプログラミング そんなわけで、現存の言語では最も美人な Scala なのだが、Scala の最大の特長である「Java上で動く」というのは、最大の欠点でもある。
[scala]ScalaはJavaの負の部分を負っているか?【ドグマを探しに】at 2009年08月22日 12:51
  8月21日発売の『Scalaスケーラブルプログラミング』、 嬉しい...
小飼さんも絶賛!Scalaスケーラブルプログラミング【Reader's Forum】at 2009年08月21日 11:55
この記事へのコメント
プログラミング言語は民族と違ってユニークじゃないので人口って測りにくそう

ところで
s/とっても C のように/とっての C のように/
かな?
Posted by 晃 at 2009年08月22日 11:19
日本の各プログラミング言語ごとの人口って、どのくらいなんでしょうか?
言語は人口がなくては駄目
目的ごとに、集会して目的を達成するための戦略を練るような会話をしないと、概念が普及しない。
会話と概念の普及をさせるために、絶えず目的を作り出してくれる仕掛けが必要なんじゃないでしょうか?
Posted by PK at 2009年08月21日 23:31
本日発売なのに池袋のジュンク堂では先週の日曜から並んでいたという罠。しかも初回入荷分はあっという間に売れてしまった様子。

まだ100ページくらいしか読んでないですが、☆5つに値する本だと思いますね。
なんでScalaではこんな書き方をするんだろうと思っていた部分にことごとく納得のいく説明が書いてありました。

設計者自身が書いた本は難解という先入観が個人的にはあったのですが、この本は非常にわかりやすいです。
Posted by おおかゆか at 2009年08月21日 11:07
これを読んでJavaが嫌い(苦手)な僕も始めてみようと思いました。
ありがとうございます。
Posted by 静的型付が苦手な人 at 2009年08月21日 09:46
弾さんが s/以外/意外/ というタイポをされるのは故意なのでしょうか。
Posted by nippondanji at 2009年08月21日 09:09
>たちあがりの遅さでは、Vistaの右に出る物はないでしょう。
SCSI機器を限界まで繋げたPC-98をなめんなよ!
Posted by カリガリ博士 at 2009年08月21日 03:00
話の流れを嫁
Posted by ひまじん at 2009年08月20日 22:59
その議論は10年ほど遅れてますね。
たちあがりの遅さでは、Vistaの右に出る物はないでしょう。
Posted by Java屋 at 2009年08月20日 22:19
> 判りやすいんでしょうか。
下ネタほどではないらしいです。
Scalaに抱かれてごらんと...

> 何が素晴らしいかというと、言語の思想が、頭ではなく体で覚えられるようになっていること。これなら言語オタクでなくとも、いや言語オタクでない方が、無名関数やActorの素晴らしさがよくわかる。

Posted by edry(えどりぃ) at 2009年08月20日 21:57
えんやら.Netでも動かなかったっけ。
Posted by himorogi at 2009年08月20日 21:47
「よっこらセックス」は笑いました。

ところで、Scala自身というよりも、本書の内容はいかがですか?
判りやすいんでしょうか。

Posted by chibakick at 2009年08月20日 18:56