タグ

ブックマーク / qiita.com/hiroshi-cl (2)

  • Scala macros中級者の壁: symbolとowner - Qiita

    Scalaのマクロには、ある程度複雑なマクロを書こうとしたときに立ちはだかる壁があります。それがsymbolとownerです。この壁の厄介なところは、ほぼ確実に引っかかる罠でありながら英語も含めてドキュメントがほぼゼロという点です。これについて簡単に解説したいと思います。 Symbol Scalaのマクロにはsymbolという概念があります。12 Symbolは、変数・メソッド・クラスなどの識別子同士を区別したり、メンバ等のメタ情報へのアクセスを仲介したりするために使われます。Cの字句マクロやLispの構文マクロなどにおいては名前被り・名前空間の汚染等を防ぐこと、一言で言うとhygiene性が大きな問題となっていますが、Scalaのマクロにおいては同様の問題は起きにくくなっています。3 なぜなら、Scalaのtyper(より厳密にいうとnamer)が各定義・参照の構文木に適切なsymbol

    Scala macros中級者の壁: symbolとowner - Qiita
  • 『`?.` 演算子?それ inverse macro でできるよ?』 - Qiita

    Kotlin という JVM 言語は割と null 安全性を簡潔に書けるようにする努力をしていて、その1つに ?. 演算子があるそうです。それを inverse macro という Scala 拡張を使って実現してみました。(※これは自作の言語機構に関する宣伝記事です) ?. 演算子と難しさ ?. 演算子は null 安全性に気を使ったメソッド呼び出し演算子です。Java 系言語における普通のメソッド呼び出しの . とは異なり、null チェックをすることで NullPointerException の発生を防ぎます。具体的には、最初に null チェックをし、null だったらメソッド呼び出しをスキップして結果を null にしているようです。Scala でいうと以下のように書いたとき、+(10)がスキップされて結果が null になるということです。 では、早速 .? 演算子を Sca

    『`?.` 演算子?それ inverse macro でできるよ?』 - Qiita
  • 1