Candy, Vitamin or Painkiller

He's half man and half machine rides the metal monster

Scala Days 2017 Copenhagen 1日目

Scala Days 2017 Copenhagenの1日目に参加してきました。 f:id:todokr:20170601042032j:plain

初日はScalaの作者であるMartin Odersky先生による「What’s different in Dotty?」というキーノートです。

Dotty?

DottyはScalaの新しいコンパイラであるdotc、REPLのdoti、ドキュメントツールのdotdなどからなるツール群です。
ちなみにREPLであるdotiは書いたそばからシンタックスハイライトされるようです。シンタックス的に間違ったところも親切に知らせてくれるので大変わかりやすいですね。

f:id:todokr:20170601061805p:plain

個人的にはIDE Integrationに惹かれました。IDEは自動補完やコードジャンプのためにコードの解析情報を必要とします。通常はIDEが自力でソースコードから解析しますが、"Language Server"がオンザフライでコードをコンパイルし、解析情報をクライアントであるIDE側に提供する方法があるようです。そのためのプロトコルMicrosoftLanguage Server Protocolです。
DottyはこのLanguage Server Protocolを実装しているため、VS CodeやEclipseEmacsといったエディタでもIDE並の支援が受けられるようです。

Why Dotty?

f:id:todokr:20170601045450j:plain

“Scalastic Principle"は「型と関数とオブジェクトの調和」であり、「Implicitsによる簡潔さとパワーとユーザビリティの共存」と説明されていました。
そのためDottyでは周辺的なものを削ぎ落とし、コアとなる部分を磨くことでScalaのエッセンスを引き出していくとのことです。

余談ですが、「シンプルとはイージーのことではない」と述べていたのも印象に残りました。Clojureの作者であるRich Hickeyの主張とまさに重なるものです。

Changes in Dotty

f:id:todokr:20170601052008j:plain

健全ではない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

f:id:todokr:20170601055629j:plain

今までのImplicitsはimplicit conversionの"too many puzzlers"さとimplicit parameter"too much repetition"さが問題だったとのことです。

“too many puzzlers"に対してはimplicit conversionのルールが厳しくなったようです。暗黙的な変換を表現するためにImplicitConverterという新しいクラスが導入されました。

“too much repetition"に対してはImplicitFunctionTypeという型が導入されるようです。これによりimplicit parameterを引き回すためのボイラープレート的記述をなくすことができるようでした。

1日を終えて

キーノート後のウェルカムパーティでは47DegreesのCTOであるMartínezさんとScala Exercisesについて話したり、
Lightbend社のシニアソリューションアーキテクトの方からScala初学者向けの教材を教えていただいたりと、とても充実した時間になりました。

明日のセッションも楽しみたいと思います!