DOTTY
AND THE NEW SCALA DEVELOPER EXPERIENCE
Felix Mulder
Dotty と新しい Scala 開発エクスペリエンス
ABOUT ME
- 2.12 の Scaladoc を作りました
- LAMP EPFLの研究員
- Dottyコンパイラエンジニア
</bragging>
A LANGUAGE IS ONLY AS
プログラミング言語はツール環境が命
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
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!
- ソースのトークン化
- 抽象構文木の構築
- 型検査
- 簡略化
- バイトコード!
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!
どうもありがとうございました!