トップ «前の日記(2007-09-27) 最新 次の日記(2007-10-01)» 編集

Route 477



2007-09-30

[prog] Scala - 機能のためには文法を自重しない言語

昨日のRuby勉強会でkeisukenさんによるScalaの発表があった…んだけど僕は遅刻して見られなかったので(ごめんなさい)、 今日電車の中で配布資料を読んでたんだけど、、、こんなにカオスな言語だとは知らなかったw

とりあえず、機能追加のためには文法の拡張を厭わないということは分かった。ある意味格好いい。

以下キーワード:

  • JVMや.NET上で動く
  • 静的型、型推論あり
  • varで変数宣言
  • valで再代入できない変数宣言 (関数型言語におけるletみたいに使える)
  • 無名関数は (i) => print(i + "") とか
  • for(i <- 0 until 10){} とか、 (0 until 10).foreach() とか
  • メソッド定義はdef
  • Generics (型名がArray[String] とか)
  • Structural Subtyping (継承してなくても、同じシグネチャのメソッドがあれば多態できる)
    • 型名が Array[{def name: String}] とか
  • 暗黙の型変換をユーザが定義可能
  • XMLがリテラルとして書ける (val html = <html>(中略)</html> とか)
  • パーサコンビネータが付いてくる (文法組み込みなのかな?)
  • Actor (並行処理、切り替えは自分で指定、Ruby1.9のFiberに近い?)
  • Lift (Railsに影響を受けたWebフレームワークらしい)
    • User.find(By(User.email, "foo@bar.com"))
    • Railsと行数は同じくらいだけど、型安全だからテストが少なくて済むよ!
    • まだ 'early alpha' らしい

気になった方は西本さんの発表資料をどうぞ。 あとはScala@どう書く?orgとかみずしまさんの発表@LL Spiritとか。

Scalaの楽しみ方:

  • 型推論ありのRuby風言語として。
  • Javaや.NETの機能が使える関数型(風?)のLLとして。
  • 最先端機能の実験場として。