nashcft's blog

時々何か書く。

JJUG CCC 2016 Fall memo

 最後の枠のセッションしかメモ取ってなかったのでそれだけ

Featherweight Java の漸進的型付けと Groovy の紹介

by kyon_mm

単語の整理

  • Featherweight Java
    • Java言語のコアとなりそうな部分を抜き出して形式化したもの (型付け規則、操作的意味論)
    • merit: 机上で言語拡張の実験をしやすくなる
    • Generics非対応
      • 対応したFeatherweight Generic Java (FGJ)
      • OderskyによるGenericsの貢献 -> Scala
  • 漸進的型付け
    • 静的型付き、動的型付きのいいところを両立させるための仕組み
    • プログラマがそれぞれを行う箇所を選択できる
    • 書きながら動的な部分を徐々に静的に移行させられる
  • Groovy

論文の概要

  • 漸進的型付けを導入したFJをFJ?(FJ^?)と定義
  • FJ? -> FJrefl(リフレクションを加えた体系)
  • ?型: wildcard
    • 動的に検査される
  • 実行時の?型: リフレクションを用いる、コンパイルが通っても実行時エラーになることもある

Groovy

  • 漸進的型付け
    • 基本的に動的型検査、コンストラクタにannotationをつけて静的型検査を指定する
    • FJ?における?型はGroovyでは変数
    • FJ?: ?型のオブジェクトに大してFJreflでなんちゃら
    • GroovyではMOP (Meta Object Protocol)の仕組みを持ってる
  • @CompileStatic, @TypeCheck
    • @TypeChekは静的型検査するだけ
    • @CompileStaticは動的型検査が行われないようにする (ドキュメントなどでは "bypassing Groovy meta object protocol" などと書かれている)