macro

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

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

Scala 3のinlineによるcompile時間増大に対処する方法

概要や結論を先に書いておくと、適切にプロファイルを取って、適切にボトルネック箇所を見つけて対処しましょう。 という話になるのですが、大まかな概要というか、結果的に使った方法を書くと sbtのTask毎の時間を記録する機能を使う Scala 3 compilerのロ…

WartremoverのScala 3対応の発表をした

Compiler Plugin難しい xuwei-k.github.io

Scala 3のmacroによる型安全かつ実行時にリフレクションにならないClose型クラス(ローンパターン)の実装

というのがおそらく作成できたけれど、もっと書き方改善可能なところあったら教えて下さい。 このくらいすでに、Scala 3でも前例が存在する気もするけど、とりあえず(あまり前例は調査はせずに)自作しました。 テスト書いてあるとおり、指定されたcloseメソ…

Scala 3でcase classのcompanionがFunctionNを継承しなくなっていて互換がないことへの対策

数日前の記事と、対になる(?)もの xuwei-k.hatenablog.com

Scala 3でマクロで特定のsealed trait, classを継承したobjectを全て取得する

というのを書いたので貼っておきます。 Listで返す版と、Tupleで返す版。 https://gist.github.com/xuwei-k/7c3f662a78fdd39ce00db43900470848 https://gist.github.com/xuwei-k/c798d8faa3f4f163be0aad150b327d07:

GuiceのTypeLiteralをScalaのmacroを使って生成する

ウォ〜〜scalaでguice使う時に injector.getInstance(Key.get(new TypeLiteral[Foo[Bar]]{}))って書くの面倒くさいにゃんよ〜〜!! 単に injector.instanceOf[Foo[Bar]]って書けて欲しい〜〜!!— にゃおきゃっと (@nyaocat) July 29, 2019

wartremoverの管理者権限とpublish権限もらった

wartremoverとは、一言でいうとScala向けのlinterです。 主な特徴としては、 コンパイラプラグインとしてもマクロとしても使えて、独自のルールをある程度簡単に追加できたり、アノテーションつけて一部のみを警告抑制できたり、警告にするかエラーにするか…

case class用のscalazのEqualとOrderのマクロ作った

だいぶ今更感ある

「Scalaに存在演算子を求めるのは間違っているだろうか」の解答例

なにやってるんだ・・・、と思いつつ見てたら、とりあえず解答を思いついてしまったので貼っておきます。Scalaに存在演算子を求めるのは間違っているだろうか

macroとdynamicを使って任意の型を簡潔に記述、生成する手法がやばい

shapelessの話をします。

shapeless.TypeClassとGHC.Generic

twitter便利ですね。作者からリプライきました

Scalaのマクロのバグ見つけた(AbstractMethodErrorやNoSuchMethodException発生する)

https://issues.scala-lang.org/browse/SI-8949 https://gist.github.com/xuwei-k/0348d85d3b80fcce1094

函数型なんたらという勉強会でshapelessの発表してきた

http://xuwei-k.github.io/slides/functional-something-shapeless/#0 https://github.com/xuwei-k/slides/blob/4dd0dfa/functional-something-shapeless/functional-something-shapeless/functional-something-shapeless.md

Scalaのマクロの基礎。評価タイミング、評価回数と、健全性

Scalaのマクロというより、一般的にマクロに共通する基本であり重要な部分です。それをScala使って説明するだけです。

Scalaのマクロ使ってコンパイル時に全部Applicaiveをインライン展開するzeroapplyというライブラリを作った

https://github.com/xuwei-k/zeroapply

ScalaのMacroの今後のロードマップ

ロードマップ発表されていたので、簡単に要約しておきますhttp://scalamacros.org/news/2014/07/16/roadmap-for-scala-macros.html

macro annotationを使って、operational monadのためのメソッドをコンパニオンオブジェクトに自動生成

できた気がするhttps://github.com/xuwei-k/twitterz/commit/b1d8201 https://github.com/xuwei-k/macro-annotation-sample/commit/47896fc1c0

argonautのmacro書いた。そしたら添削してもらった

以前書いたこれコンパイル時に、 String を lift json に変換する macro https://github.com/xuwei-k/json_macro

Scalaでコンパイル時に正規表現をチェックする「マクロかつString Interpolation」

「マクロかつString Interpolation」って何言ってるかわからないですが、つまりそういうことです(どういうことだ)。String Interpolationの中で、マクロ呼べばできるんですね。*1 このblog post *1:構文木を自分で組み立てないといけなくなって、単なるマク…

変数名自身の名前のStringを束縛するScalaのマクロ

なんかわかりづらいですが、つまり以下のコードを実行すると val foo, bar, baz = const println(foo) println(bar) println(baz) 順に foo, bar, baz が表示されます。正確にはコンパイラ内部のAPIにアクセスしてるので、単なるマクロというより、コンパイ…

Scala の macro で gensym ?

以前(といっても10ヶ月くらいまえですが) Scala の macro に gensym (ユニークな名前生成) ないのかな。とりあえず現状なさそうだな2012-02-27 03:23:09 via webと言いましたが、freshという名前のメソッドで、存在するみたい(?)です。これ見て気が付きまし…

コンパイル時に、 String を lift json に変換する macro

追記: lift-json から json4s に変えた scala-user の ML に流れてたhttps://groups.google.com/forum/?fromgroups#!topic/scala-user/IKR_4rfbPRs

var を使っている式を渡すと、コンパイルエラーにしてくれる Scala の Macro

追記: これ Scala2.10.0-M2のときに書いたので、最新では動きませんよ・・・ マクロ楽しいですね( ^ω^)あまり大きい式で試してないけどこれでいいはず。なんだかちょっと長いけれど、もっと短い書き方わかった人いたら教えて下さい(・ω・`)

Scala の Macro を使って、コンパイル時にフィボナッチ数を計算してみた

つい数日前にでた、 Scala2.10.0-M2 から、( コンパイルオプションが必要ですが) macro が入っているので、使ってみました!もう、タイトルのままで、とにかくソース見てもらえば(ryhttps://github.com/xuwei-k/compile-time-fibonacci