依存ライブラリ使って一定以上大きめのsbt pluginを作る時のいい感じの方法

sbtや、sbt pluginというのは所詮ただのScalaプログラムなので、普通に依存ライブラリが使えて、普通にScalaというか任意のJVM言語で書けば、そのまま呼び出せます。

しかし、普通に書いて普通に呼び出すのは、いくつかデメリットがあり得るので、代替として最近個人的に使うように至ったパターンの紹介をします。

続きを読む

CIで警告のdiffを出すsbt pluginでscalafix対応をした

以前作った以下のsbt pluginの0.2.0リリースしました。

github.com

xuwei-k.hatenablog.com

https://github.com/xuwei-k/sbt-warning-diff/commit/00f4ec112e3d641c1ba189ec2fe86aa6e4ac23cc

続きを読む

Scalaにおける細かいclassの定義方法とインスタンス毎のサイズ

問題です。

以下のA2, B2, B3は、細かい定義方法は違うけれど、実際にはほとんど同じ定義ですが、インスタンス毎のサイズ(アロケーションされるメモリの量)、としては、どれが一番効率がいいでしょうか?どれも同じでしょうか?

この問題に完璧に答えられる自信がある人は、この先を読む必要がありません。

package example

sealed abstract class A1(val x: Int)

case class A2(y: String) extends A1(2)

// 実用的には、その他のA1やB1のsub classやobjectも
// あるかもしれないが、直接関係ないので省略

sealed abstract class B1 {
  def x: Int
}

case class B2(y: String) extends B1 {
  override def x: Int = 2
}

case class B3(y: String) extends B1 {
  override val x: Int = 2
}
続きを読む