scala3
Scala 3.6.2が出た!やったー! github.com Scala 3.6.2は、Scala 3.6系の最初の正式なリリースで、数多くの機能が追加された。この記事ではそのうち主要な機能を紹介する。また、正確さよりも分かりやすさを優先してザックリ書いているところがあるので、そ…
突然だがこのScala 3のコードはコンパイルするだろうか。先に正解を言っておくと「コンパイルする」(Scala 3.5.0)。 class Foo: val x = y val y = 42 では、このFooに向けて以下の呼び出しを行うとどうなるだろう? Foo().x 驚くなかれ、この式は0に評価さ…
Scala 3にはsummonという関数がある。普段はあまり使うことがないが、知っておくとusingまわりのデバッグにも使えるとても便利なやつだ。この記事ではsummonの便利な利用法を紹介する。 docs.scala-lang.org 型の一致を確認する summonの典型的なユースケー…
Tagged Type というテクニックがある(TypeScript界隈などではBranded Typeと呼ばれているようだ)。実行時の型としては同じだが、型システム上はこれを区別して別物として扱い、混同できなくする仕組みを作るためのものだ。 AIくん!サムネイラスト作って!…
未使用のimportや値を検査するコンパイラオプションとMetalsやScalafixとの関係について調べたメモです。コンパイラまわりの実装を追いきれていない可能性があるため、間違っていたらご指摘いただけると嬉しいです。 かつてScala 2系ではunused importなどの…
先日(といっても結構前のことだが)、Scala 3のLTSサポートバージョンである3.3.0がリリースされた。Scala 3の開発が円熟してきているようで嬉しい。これからも元気でいてね。今回はScala 3をAWS LambdaのContainer imageを使って動作させる手法についてお…
ScalaをネイティブコンパイルしてJVM無しで実行ファイルとして動かせるようにする仕組みであるScala Nativeが、いつのまにかシングルバイナリを出力できるようになっていた。これにより、Goと同じように1つのバイナリさえコピーすればScalaを動かせる環境が…
Scala 3には大きな構文上の変更、例えばimplicitまわりが整理されてgivenなどに変化したりしている一方で、細やかな機微にわたる変更も含まれている。今回説明するimport構文上のワイルドカード記号の変更もその一部。 Scala 2では、あるパッケージに属する…
先日、Scala CLI v1.0.0がついにリリースされた。これまではv0系列だったので、満を持しての正式版リリースだ。おめでとう! github.com いちおう説明しておくとScala CLIは総合的なScalaのコマンドラインツールで、以下のようなことができる: Uber JAR(単体…
そういえばScalaをAWS Lambdaで実行するのどうするんだっけ、と思った。実はScalaをLambdaで動かしたことは無い気がするので調べておいた。今回はJava 17を前提に動作させる。 tl;dr AWS LambdaのJavaランタイム sbt-assembly sbt-assemblyへの依存性の宣言 …
Scala3チャレンジをする記事の二本目。 前回はこちら。 blog.3qe.us ソースコードは以下に置いてある。 github.com github.com Union Types Eitherとの違い Discriminated Union Typesもどき Intersection Types まとめ MathJax v3以降ではbussproofs.styが…
ちびちびScala3に生えた新機能の実際に使ってみるチャレンジをやっている。いつの日かチームに導入できたら嬉しいね、とか、自分で使いこなせるようになると嬉しいね、というモチベーションである。 今日はOptional Bracesについて勉強した。ソースコードは…