Scala Days 2017 Copenhagen 1日目
Scala Days 2017 Copenhagenの1日目に参加してきました。
初日はScalaの作者であるMartin Odersky先生による「What’s different in Dotty?」というキーノートです。
小田好先生! pic.twitter.com/bNDuV7Md7J
— 🕳️ (@todokr) 2017年5月31日
小田好先生にScala Contributor Tシャツが授与されるなどしていた
— 🕳️ (@todokr) 2017年5月31日
「Scalaを書き始めて何年ですか?」小田好先生「15年です。」
— 🕳️ (@todokr) 2017年5月31日
Dotty?
DottyはScalaの新しいコンパイラであるdotc、REPLのdoti、ドキュメントツールのdotdなどからなるツール群です。
ちなみにREPLであるdotiは書いたそばからシンタックスハイライトされるようです。シンタックス的に間違ったところも親切に知らせてくれるので大変わかりやすいですね。
個人的にはIDE Integrationに惹かれました。IDEは自動補完やコードジャンプのためにコードの解析情報を必要とします。通常はIDEが自力でソースコードから解析しますが、"Language Server"がオンザフライでコードをコンパイルし、解析情報をクライアントであるIDE側に提供する方法があるようです。そのためのプロトコルがMicrosoftのLanguage Server Protocolです。
DottyはこのLanguage Server Protocolを実装しているため、VS CodeやEclipse、EmacsといったエディタでもIDE並の支援が受けられるようです。
Why Dotty?
“Scalastic Principle"は「型と関数とオブジェクトの調和」であり、「Implicitsによる簡潔さとパワーとユーザビリティの共存」と説明されていました。
そのためDottyでは周辺的なものを削ぎ落とし、コアとなる部分を磨くことでScalaのエッセンスを引き出していくとのことです。
余談ですが、「シンプルとはイージーのことではない」と述べていたのも印象に残りました。Clojureの作者であるRich Hickeyの主張とまさに重なるものです。
Scala is simple, but that doesn't mean its easy. Definitely explicit implicit wisdom of the day at #scaladays 😊 #Scala pic.twitter.com/CGlczzfAEf
— Oto Brglez (@otobrglez) 2017年5月31日
Changes in Dotty
型
健全ではないexistential typesやprojection typesなどが廃止となりました。
またcompound type(T with U
)はunion type(T | U
)やintersection type(T & U
)によってリプレイスされるとのことです。これらによって型階層での不明瞭さがなくなり、よりシンプルになるようです。
projection type(X # Y)や構造的部分型で実現されていたことは、新しく追加されたtype lambda([X] => T
)なるもので置き換えるらしいのですが、このあたりちょっと理解が及びませんでした…
Enum
JavaのようにシンプルなEnum構文が追加されます。
いままでは下記のようにsealedとcaseを使って代数的データ型としてEnumを表現していたものが、
sealed trait Color case object Red extends Color case object Blue extends Color case object Green extends Color
Dottyでは下記のように表現できます。
enum Color {
case Red, Blue, Green
}
よりEnumとしての意図が明確になってうれしいですね。
Trait
Scalaパズルにも出てきたEarly Definitionが廃止になります。
またclassと同じようにパラメータが渡せるようになるみたいです。
trait Hoge(x: Int) {
...
}
うれしいシーンがパッと思いつかないので、もうちょっと情報収集してみます。
Implicits
今までのImplicitsはimplicit conversionの"too many puzzlers"さとimplicit parameter"too much repetition"さが問題だったとのことです。
“too many puzzlers"に対してはimplicit conversionのルールが厳しくなったようです。暗黙的な変換を表現するためにImplicitConverterという新しいクラスが導入されました。
“too much repetition"に対してはImplicitFunctionTypeという型が導入されるようです。これによりimplicit parameterを引き回すためのボイラープレート的記述をなくすことができるようでした。
1日を終えて
小田好先生のキーノート終わった。Dottyでは型システムなどから複雑になっているものを取り除き、よりパワフルで親しみやすい言語になるように、みたいな感じだった
— 🕳️ (@todokr) 2017年5月31日
キーノート後のウェルカムパーティでは47DegreesのCTOであるMartínezさんとScala Exercisesについて話したり、
Lightbend社のシニアソリューションアーキテクトの方からScala初学者向けの教材を教えていただいたりと、とても充実した時間になりました。
明日のセッションも楽しみたいと思います!