Scala 2.12.0がリリースされましたね。

↑のページにこんな記述がありましたね。

Scala and Java 8 interop is also improved for functional code, as methods that take functions can easily be called in both directions using lambda syntax. The FunctionN classes in Scala’s standard library are now Single Abstract Method (SAM) types, and all SAM types are treated uniformly – from type checking through code generation. No class file is generated for a lambda; invokedynamic is used instead.

雑訳

ScalaとJavaの相互運用が関数的なコードのために改善されています。ラムダ構文を使うことで、関数を引数にとるメソッドを双方向で簡単に呼び出すことができます。Scalaの標準ライブラリのFuncionNクラスはSingle Abstract Method(SAM)タイプであり、型チェックからコードの生成まで、すべてのSAMタイプが一律に扱われます。ラムダのためにクラスファイルが生成されることはなく、代わりにinvokedynamicが使われます。

どゆこと?


Java8では、ラムダ式を使うことで

Runnable task = new Runnable(){

    @Override
    public void run(){
        System.out.println("Task is running");
    }
};

なコードを、

Runnable task = () -> { System.out.println("Task is running"); };

とスッキリ書ける訳で、Scalaも2.12でSAMの対応が改善されて、

val task:Runnable = () => println("Task is running")

とスッキリ書けるようになったんですね

やったね、という雑な理解