@felixmulder

DOTTY

AND THE NEW SCALA DEVELOPER EXPERIENCE

Felix Mulder


Dotty と新しい Scala 開発エクスペリエンス

Slides: felixmulder.com

ABOUT ME


  • 2.12 の Scaladoc を作りました
  • LAMP EPFLの研究員
  • Dottyコンパイラエンジニア
</bragging>

A LANGUAGE IS ONLY AS

GOOD AS ITS TOOLING


プログラミング言語はツール環境が命

ROUGH EDGES


こなれてない所
trait Super {
  def x: String
  println(s"initialized with: $x")
}

class Tester extends Super {
  val x = "hello!"
}
"initialized with: null"

DON'T WORRY SCALA, I STILL LOVE YOU

WE CAN WORK AROUND THIS


心配しないで、Scala、僕はまだあなたを愛している

Newbie "Solutions"

  • Compromised Immutability
  • Lazification hell
  • Refactor, maybe dump the trait

素人の「解決」方法

  • 不変性を損なう
  • 遅延評価地獄
  • コードをリファクタリングし、traitを削除

「ごめん、やっぱいまのナシ!」

TYPE INFERENCE


型推論

TYPE INFERENCE

def ap1[A,B](a: A, f: A => B): B = f(a)

ap1(1, x => x * 2) // error: missing parameter type

TYPE INFERENCE

def ap2[A,B](a: A)(f: A => B): B = f(a)

ap2(1)(x => x * 2) // 2
class Foo { def bar: Int = ??? }
val foo = new Foo
// ...
foo.barr

AWESOME ERROR MESSAGES


すばらしいエラーメッセージ

SLOW COMPILE TIMES


長いコンパイル時間

Compilers crash course

  • Tokenize Source
  • Build Trees (AST)
  • Typecheck
  • Simplify
  • Bytecode!

  • ソースのトークン化
  • 抽象構文木の構築
  • 型検査
  • 簡略化
  • バイトコード!

Compiler Phases

Phase 1
Phase 2
Phase 3

FUSED PHASES

Phase 1
Phase 2
Phase 3

SCALADOC

"Documentation cannot - and so need not - say everything. Its purpose is to help the next programmer build an accurate theory about the system." - Peter Naur

LANGUAGE SERVER


プログラミング言語サーバー

TASTY

  • Pickling format
  • Typed Trees
  • Efficiently stored in bytecode
  • Interop between binary incompatible compilers

  • 抽象構文木のシリアライズ形式
  • 型付き抽象構文木
  • 効率的にバイトコードに格納
  • バイナリ互換性のないコンパイラ間の相互運用性を提供する

Developer Usability

Get involved today!


開発者の使い勝手を向上するために

皆さんも Dotty プロジェクトに参加してください!

Thank you!


どうもありがとうございました!