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は割と頻繁に細かい新機能が追加されるので意外と知られていないものがあったり、などなどあると思いますが、現状の自分がよく行っている設定を、何かの参考になればと思って雑多に列挙しておきます。

続きを読む

Scala 3かつplayframework 3かつpekkoで動かすサンプル

数ヶ月前に、playframeworkのScala 3対応版リリース記念にplay 2.9のマイルストーンでNetty backendで同じものを書いたのですが、 昨日書いたように予定通りplayframework 3.0のpekko対応の準備としてマイルストーン( 3.0.0-M1 )がリリースされたので、同じようなものを貼っておきます。

これで

続きを読む

2023年10月時点のplayframeworkの今後の予定

すごく重要な予定が色々と決まりつつあるので、独断で勝手に?雑に?選んで紹介しておきます。 単なる翻訳というよりは、自分の感想や主観みたいなものが入ってます。

詳細な原文を知りたい人は、以下のあたりを読んでください

続きを読む