ライブラリを使わずにScalaプログラム内部でclasspathなどを丸ごと引き継いで別のJVMを立ち上げるサンプル

そもそもがかなりレアケースなのですが、一応、稀にありえるシチュエーションとしては

  • 特別な(微妙な)コードをテストしたい
    • scala.sys.exit 自体を至る所で呼び出していて、本来それ自体を改善したいが、一旦それをそのままテストしたい
    • mainスレッドが終わった後に、デーモンではないスレッドが残らないか?みたいな、JVM丸ごと変えないと実質テストが難しいもの
    • objectの内部などで java.lang.System.getProperty 的なグローバルに依存した(初期化の)処理を実行してしまっていて、そこのコード変えないとうまくテストができない(が、コードをすぐに変えられない)
    • shutdown hook的な処理自体のテストを本物に近い形で行いたい
  • 普通にプログラムを書くと依存ライブラリが衝突して困ってるが、ClassLoader使うテクニックもやりたくないのでJVMのプロセスを丸ごとforkして処理を実行したほうが(効率は微妙だが)わかりやすい

などです。タイトルにも書いた細かいポイントとして

続きを読む

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

scalametaのbug調査のついでのメモ。

github.com

https://github.com/xuwei-k/scalameta-memory-issue-3650/commit/765dccba2154d1bf90d9c8281ec3e2b7aaa5fa04

続きを読む

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

記憶違いなのか、IDEAのversionか設定で変わって出来なくなったのか、本当に謎なんですが、大量の警告やエラー直す場合に、これの有無でけっこう生産性が変わるので。

続きを読む

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

以下のライブラリの話をします。

github.com

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

続きを読む