自作scalafix ruleの説明その3

以下の続き。 前回書いてから、かなり増えて、もう少しで100個超えそう。 xuwei-k.hatenablog.com xuwei-k.hatenablog.com

scala.collection.concurrent.TrieMapが最低限消費するメモリ量はいくつか

scalametaのbug調査のついでのメモ。 github.com https://github.com/xuwei-k/scalameta-memory-issue-3650/commit/765dccba2154d1bf90d9c8281ec3e2b7aaa5fa04 30万行のScalaコードをscalametaでparseすると、そこには11億個のTrieMapが〜〜〜https://t.co/T…

IntelliJ IDEA上でTerminalからsbt立ち上げてerrorやwarn出た時にclickで飛べるようにする

IDEAのterminal(sbt pluginではない)、からsbtを起動してcompileなどすると、errorやwarning出た場合にそのpathがclick可能で、そうすると該当のsource codeに飛べて便利だったのだけど、いつの間にか不可能になってるんだけど、これどこかに設定あるのか、v…

Scala 3でAtomicIntegerFieldUpdater使うsample

Scala 2は無理だが3では @static が実装されてるので、Scala 3なら動く。それはそう

fthomas/refinedのScala 2 macroの独自typeの場合compile速度爆発問題

以下のライブラリの話をします。 github.com このライブラリの基本的な紹介はしません。ググるとか、流行のAIに聞く、などして調べてください。

JDK 21のswitch式でpattern matchが遅かった件の2024年2月時点の続報

4ヶ月くらい前の以下のblogの続報です xuwei-k.hatenablog.com

Scala 2.12と3でSIP-23 Literal-based singleton typesの互換を頑張るいくつかの方法

もう9年以上前に以下のようなものを書きましたが、それに関連する話。 xuwei-k.hatenablog.com

依存ライブラリ使って一定以上大きめの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は、細かい定義方法は違うけれど、実際にはほとんど同じ定義ですが、インスタンス毎のサイズ(アロケーションされるメモリの量)、としては、どれが一番効率がいいでしょうか?どれも同じでしょうか? この問題に完璧に答えられる…

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

qiita.com これは Scala Advent Calendar 2023 の16日目です。 (あとから見たらこの日付が抜けていたので、あとから登録して埋めました) これ書いている2023年12月現在、(RCなどの安定版以外も含めると) 3.4.0-RC1が最新で、3.4.0のfinalは出ていませんが、3…

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

sbt

そもそも任意の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の今後の予定

すごく重要な予定が色々と決まりつつあるので、独断で勝手に?雑に?選んで紹介しておきます。 単なる翻訳というよりは、自分の感想や主観みたいなものが入ってます。 詳細な原文を知りたい人は、以下のあたりを読んでください https://github.com/playframe…

Eitherをmapするとの愚直にmatchするのはどちらか速い?調べてみました!

どの程度計測方法が正しいのか謎ですが、1〜2%程度matchの方が速い結果が出ました!!!

JDK 21のswitch式でpattern match書いたら10倍以上遅い件

switch式の結果javapしたらhttps://t.co/xMc0YEYsrgjava.lang.runtime.SwitchBootstrapsとtableswitchが使われることに気がついたが、これ巨大なswitch式をJDK 21以降で書いた場合、同等の巨大なmatch式をScalaで書くよりも速度が速い可能性があるのでは??…

JDK 21でswitch式でjava.lang.MatchExceptionを発生させるサンプル

めでたくJDK 21がリリースされたので多少試していたわけですが、switch式に色々と網羅性検査が入ったわけで、Scalaと比較してどうなるか?を試したメモ。

Cats EffectとVirtual Threads

ScalaMatsuri 2023のdiscordの会話を雑に勝手に転載しておくだけのblog。 一番高度というか面白い話でメモしておきたかったので。

Scalaにおける末尾再帰最適化とパフォーマンス

知ってる人は知っている?話で、全く新しい話ではないんですが、以下のtweetの簡単な実例含んだ解説

Scalaでoverrideした際の共変戻り値型と型推論

ScalaでもJavaでも、overrideする際に、sub typeでoverrideすることが可能です。 (すごく古い1.4以前のJavaでは不可能だったはずだが) Javaの仕様書で英語だと covariant return type というはず?の機能です。

CI通ったらGitHub Actionsで自動でpull reqをdraftからready for reviewにする

以下例 on: pull_request: jobs: 他のjob1: # 内容省略 他のjob2: # 内容省略 適当なjob名: timeout-minutes: 3 runs-on: ubuntu-latest needs: - 他のjob1 - 他のjob2 # ここに必要なjobを全部列挙。複数のyaml全部checkしたい場合はもっと工夫が必要 if: g…

GitHub Actionsで過去に失敗したflakyなtest一覧を雑に集計する

というのを作ったのですが、もっといい方法ないんですかね?

Scalaでcase classのconstructorをprivateにしたときのcompanionのapplyの可視性問題と対策

以下のコードがエラーになるかどうか?という話 case class A private(x: Int) object B { def f = A(2) } まずオプションの有無とScala versionによってややこしい。以下が一覧

ScalaMatsuri 2023でscalafixなどの発表した

https://xuwei-k.github.io/slides/matsuri-2023/#1 speakerdeck.com blogやtwitterで大体書いてるようなことをまとめただけなので、特に追記することはないかなぁ。

wartremoverのsbt pluginにscalafixのようなinput task追加した

「scalafixのような」とは build.sbt を編集しなくても、input taskで実行するruleを任意の数、動的に指定可能 ローカルのfileのpathや、urlも指定可能 動的に .scala fileをcompileして、それを実行してくれる url指定したらそれをダウンロードしてくる url…

Scala 3で独自にunion typeのleast upper boundを計算する仕組みを作った

Scala 3では、以下のように | というunion type?or type?という新しい仕様が追加されました。 (仕様というか、少なくとも以下の公式ドキュメントではunionと呼んでるが、Scala 3のquoteのAPI内部ではOrTypeでややこしい) https://docs.scala-lang.org/scal…

sbtかつGitHub Actionsでログの表示をいい感じにするplugin

他人が作ったものを紹介するだけの記事。 以下のtweetで大体は言い尽くしてあるのですが、これはとても良さがあるので、あえて、ほぼtweet貼り付けるだけの記事書いておくことにしました。 github.com warn

未使用なprotobufのmessageなどを検知するsbt pluginを作った

github.com run sbt unusedProtoWarn