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

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

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

続きを読む

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
}
続きを読む

Scala 3.4から新たに警告やエラーになる予定の記法を雑にまとめ

qiita.com

これは Scala Advent Calendar 2023 の16日目です。

(あとから見たらこの日付が抜けていたので、あとから登録して埋めました)

これ書いている2023年12月現在、(RCなどの安定版以外も含めると) 3.4.0-RC1が最新で、3.4.0のfinalは出ていませんが、3.4.0から色々と変更点があるみたいなので、3.4.0-RC1時点の情報をざっくりまとめます。

あくまで自分が遭遇した、あるいはざっくりリリースノート見て書き出しただけなので、他にも大量にありそうですが、ひとまずこの程度にしておきます。

https://github.com/lampepfl/dotty/releases/tag/3.4.0-RC1

続きを読む

sbtのevictedタスクの結果をsub projectごとにファイルに書き出す

そもそも任意のTaskのoutputをファイルに書き出すようなplugin作ればいいだけの可能性もあるが

(例。メンテされてない?) https://github.com/cb372/sbt-write-output-to-file

とりあえず深いことは考えずに、雑にevictedに限定して書き出す場合の方法。

続きを読む

TeaVMのsbt pluginを作った 〜 酢豚とお茶の出合い 〜 ScalaからWebAssemblyへの変換

Twitterでは多少Tweetしてたのですが、やっとある程度形になったので、リリースしました。 以下、簡単な説明や、関連する余談など書いておきます

https://github.com/sbt-teavm/sbt-teavm

続きを読む

自分のGitHubのrepositoryで行っている設定

GitHubのヘビーユーザーだと一部は当たり前だったり、細かい部分は個性や好みが出たり、GitHubは割と頻繁に細かい新機能が追加されるので意外と知られていないものがあったり、などなどあると思いますが、現状の自分がよく行っている設定を、何かの参考になればと思って雑多に列挙しておきます。

続きを読む