マクロとは

コードからコードへの変換を定義する関数.

強力なメタプログラミングツール.

リーダーマクロ

Reader Macros.

リーダの振る舞いに手を加えてシンタックスシュガーを変更してしまうことが可能な機能.

シンタックスマクロ

マクロTopics

Paul Grahamとマクロ

マクロを推している第一人者といえばこの人.

👨Paul Graham

💡マクロとはデザインパターンの自動化

📚プログラミングClojure p164からの要約.

各言語には, 特殊形式が存在する(コンパイラが解釈するsyntax). この特殊形式が何度も現れるパターンをカプセル化しようとするリファクタリングを邪魔する.

たとえばJavaのnewの書き方. これは同じような処理がたくさん現れるときに, コードを複雑化させる. これをJavaだと 📝デザインパターンなどで解決する.

マクロはもう少し広義なデザインパターン. マクロは何度も現れるパターンならなんであれ, その共通部分をくくりだすための間接的な層を提供する. マクロはパターンをカプセル化しながら言語を再構築する.

コードはデータであるということに慣れてしまうと, デザインパターンを自動化できるという力が手に入る.


そうするとオブジェクト指向のこころである流動性をカプセル化するという考え方も役に立つかもしれない.

💡人間コンパイラ

📔オタク野郎の復讐 - ポール・グレアムの付録より.

難しい問題を解こうとするときの選択肢.

  1. パワフルな言語を使うか
  2. パワフルな言語と等価なインタプリタを書くか
  3. 自らがパワフルな言語の人間コンパイラとなるか

3をマンパワーという.

マクロInsights

テンプレートエンジン/Atomic Designのアナロジー

Webページを作成するときに, HTMLの中に変数を仕込んでテンプレートをつくるような技術をテンプレートエンジンといいよくあるライブラリだが, このイメージにマクロは似ている.

よくあるパターンをテンプレートしてマクロにまとめておくことはWebページを部品を組み合わせることによって動的に生成することに等しい.

Railsで言えば, Viewを作る際にHTMLという言語にRubyを埋め込むようなものだ.

なるほど, Webサイトを作ろうとしたときに一つのページごとに同じようなHTMLを作り続けるのは辛いものがあり, テンプレートエンジンで圧倒的に記述量が少なくなることは納得できる.

ReactやVue開発でみられるようなAtomic Designというページを構成する部品をさらに細かく分解して管理する方法も, マクロのWeb領域における進化なのかもしれない.


🔖テンプレートエンジン 💭Reactを書くようにマクロを書きたい(2022/10/29)

References