scala

CheerpJを使ってScala Compilerをブラウザだけで動かす

すでに数回書いたけど、またCheerpJの話です。 (ブラウザでJVM自体をエミュレートして動くやつ) 色々tweetして試行錯誤していたけど動きました、やった〜。 https://github.com/xuwei-k/cheerpj-scala https://xuwei-k.github.io/cheerpj-scala/

TwitterがScalaを採用した大昔を振り返ってScalaについて色々考えてみる

雑にtweetしたら多少反応があったというか、新しいもの書くばかりではなく歴史を振り返る方が、場合によっては面白いというかためになるというか、 そもそもプログラミングに限らず現在や未来は過去の延長線上でしかないので、歴史を振り返ることは大事です…

実際に仕事で役立っている自作のScala関連OSSツールまとめ

仕事以外でも役立ってるものも多く含んでいますが、仕事きっかけで作ったか、OSSに対して使っていても仕事でもよく使ってる自作ツールについていくつか振り返って紹介してみる記事。 振り返ってみるだけなので、自分のblogやtwitterをかなりしっかり読んでる…

Scalaわいわい勉強会でScala 3移行した話を発表した

speakerdeck.com

CheerpJを使ってScalaをWebブラウザで動かす

https://github.com/xuwei-k/scalafix-web-example/commit/6f2cc0d3e9e4d00b8f9ae9cce07602c533ca036d https://xuwei-k.github.io/scalafix-web-example/

Scala 3のgeneric numeric literalsのサンプル

公式に書いてある以上の情報はあまり書かないと思うのですが、一応のサンプルと、細かい罠や不満点があったので書いておきます。 https://docs.scala-lang.org/scala3/reference/experimental/numeric-literals.html

scala.Optionやboxingのコストと例外のコストの比較

関連tweet多過ぎるから全部貼らないんですが、まぁそれそうだな、と思って実験してみた結果。 tryは例外発生しなかったらコスト消える可能性があって、OptionやEitherやその他はtryと比較したらheapに乗る余計なオブジェクト出来るからほんの少しコストかか…

Scala 3ではPredef.valueOfよりscala.compiletime.constValueを使えるなら使おう

現状valueOfの方が無駄な処理が挟まりますね。 以下実験結果。Scalaは3.5.2

Scala 3のgivenとusingとtype classのcoherence

type classのcoherenceという観点を中心にして、Scala 3の新しい文法に関して、(Scala 2と比較して)思想やお気持ちを解説した記事をあまり見かけたことがない気がしたので、 特にすごく新規性などがある話ではないはずですが、自分なりに書いてみようと思い…

Partially-Applied TypeとScala 3.6からのSIP-47 Clause Interleaving

Scalaにおいて、一部の型引数だけを明示して部分適用し、残りの型引数は推論させたい、というパターンが稀に存在します。 普通の引数ではなく、あくまで型引数の話です。 そういう場面に遭遇しない人は別に今あまり読む必要はないです。

maven centralのpublish用groupId取得でgithubのorganization含めた任意のdomainでの自動化にも対応していた

まず、自分が知ってる限りのざっくりしたmaven centralのpublish申請方法の遷移の歴史

Scalaでのwasmの出力サイズは?source mapは?jsと比較してどちらが大きい?調べてみました!

まずはこれを読みましょう zenn.dev さて、

JDK 21とmockitoとbyte-buddyの警告とsbtとjavaagent

JDK 21以降、mockito使うとなんか怒られますが、それのsbtでの対策や解決方法を簡単に書きます

Scala 3のMatch Typeでコンパイル時ラマヌジャンで円周率求める

"コンパイル時ラマヌジャン" って言いたかっただけです、すみませんでした。 match typeで遊ぶシリーズです。 (そんなシリーズ続くのか不明) 女神が夢の中でそうしろって言ってました、たぶん。 *1 *1:これきいて、こいつ何言ってるんだ???と思った人は、…

Scala 3のmatch typeで数独solverを作った

昨日の続き xuwei-k.hatenablog.com

Scala 3のmatch typeで数独チェッカーを作った

なんかtweet流れてきたので TypeScriptの型がどれほど強力かというと、コードエディタ上で直接数独ができるほどの複雑な型を作成した方がいるほどです。このSudoku型を使用すると、TypeScriptの型チェッカーが間違いを正確に指摘してくれます。 pic.twitter.…

Scala 3からのWeak Conformanceの廃止とBoxingによるパフォーマンス劣化

タイトルで大体言いたいことを言い切っているのですが、実際問題になることは少ないとはいえ、原理上はそういう問題が起きると思います。

sbtでcompile errorの情報を値として取得する

若干sbtの内部構造依存な技を使う方法しか見つけられなかったのですが、もしもっと良い方法あったら誰か教えてください。

Scala 3とsbtでreviewdog使う方法

reviewdogというかなり有名なツールがあって、過去何度かblogにも書いたことあるし、今も普段から使っています。 github.com

MockitoのargThatとScala 3

一見かなり謎なタイミングで NullPointerException で混乱したので、かるくメモ。 以下、再現コード。

Scala 3でinline展開後のTreeをtraverseする方法

ある意味wartremoverきっかけでの話なのですが、適用範囲としてはwartremoverに限らないので、こういうタイトルになっています。 Scala 2だと

top levelのclass毎にfileを分割するscalafix

というのを作りました。

circeのsemiautoでEncoderとDecoderそれぞれ定義とCodecのみ定義でのcompile時間比較

最初に結論を書いておくと、Scala 2.13でもScala 3でも、Codec定義の方が少し速かったです。 以下、ベンチマーク用のコードや結果を雑に貼り付けていく

fthomas/refinedのScala 2 macroの更なる速度最適化

まずは以下の以前の記事を読んでおいてください xuwei-k.hatenablog.com さて、

scalafix ruleの作り方の例

https://discord.com/channels/1124331179580084406/1124334001507794994/1255004192993443910 ちょうどいい(?)ネタがあったので、これを例に作ってみます。 既にどこかに存在するのかどうか?は知りません。 (大抵、よほど複雑でなければ数分で書けるので、…

独自scalafixのruleを同じsbt project内部に置く際の設定方法

個人的に、すごい細かい使い捨て含めるとおそらくもう1000個くらいはrule書いたことあるので、おそらく現状では日本一scalafix rule書いていると思うのですが、 慣れるとそのくらい気軽に書けてすぐ役に立って便利なので、既存の他人が書いたruleを使うだけ…

特定の型の値を捨てていたら警告やエラーにするscalafixやwartremoverでのlinter

Scala標準に -Wvalue-discard などがありますが、自分が知る限り、これはすごく細かく制御できるわけではなく、全てを警告します。 $ scala -Wvalue-discard Welcome to Scala 2.13.14 (OpenJDK 64-Bit Server VM, Java 11.0.23). Type in expressions for e…

わざわざsbt-native-packager経由でdocker imageを作る唯一の大きな利点

みなさんはsbtで作ったものを、(単にライブラリとしてではなく全部まとめて)本番環境にデプロイしたりする場合、どういう形式にしてますか? 最近・・・でもないですが、このあたりの選択肢は色々あるというか、sbtやScalaに限らない話なので、 広く捉えれば…

json4sのScala 3対応やjson4sの内部アーキテクチャや歴史の簡単な解説

json4sという古代からあるScalaのjsonライブラリのメンテナンスをなぜか数年ずっとやっています。それの話をします。

テスト実行に時間がかかった順(遅かった順)で表示するsbt pluginを作った

以下のsbt plugin作った話をします。 github.com 数日前のScalaMatsuri 2024の自分の発表の中で以下のような記述がありましたが https://speakerdeck.com/xuwei_k/scalapuroziekutono-birudosu-du-gai-shan?slide=67