私はポール・グラハムの「百年言語」の記事を読んでいました。
http://www.paulgraham.com/hundred.html
そこで彼は、静的型付けが「真のマクロを排除する」と主張しています。
たとえば、静的型付けは真のマクロを排除しているように見えるという事実にもかかわらず、型は無尽蔵の研究論文の源であるように思われます。
これはどのように本当ですか?書類はどこにありますか?Google で検索してみましたが、成功しませんでした。
私はポール・グラハムの「百年言語」の記事を読んでいました。
http://www.paulgraham.com/hundred.html
そこで彼は、静的型付けが「真のマクロを排除する」と主張しています。
たとえば、静的型付けは真のマクロを排除しているように見えるという事実にもかかわらず、型は無尽蔵の研究論文の源であるように思われます。
これはどのように本当ですか?書類はどこにありますか?Google で検索してみましたが、成功しませんでした。
静的型付けはマクロを排除しません。たとえば、静的型付けされたBoo言語にはマクロがあります。Nemerleもそうです。
ただし、それはGrahamが「真の」マクロによって何を意味するかによって異なります。たぶん、BooとNemerleのマクロは彼の基準では「偽」です。
「静的型付けは真のマクロを排除しているようです」これはどのように真ですか?
「真のマクロ」の定義がなければ、それは無意味な主張ですが、Paul Grahamがそれを書く前に、OCamlには静的型付けと(AST書き換え)マクロの両方がありました。彼は自分でそれを簡単に発見できたかもしれませんが、明らかにそうではありませんでした。静的型付けがマクロを排除すると信じる論理的な理由すらわかりません。
論文はどこにありますか?
何も知りません。Lispスタイルのマクロは最近流行りません。
Paul Grahamは、Yahooが購入してその後書き直したLispでショッピングカートを書いた哲学専攻であることに注意してください。彼は金を打ち、若くして引退し、そしてこのようなものを書くのに何年も費やしました。
静的型付けがマクロを排除するというのは本当ではありませんが、マクロ システムは、多くの人になじみのある非衛生的なテキスト置換マクロよりも複雑にする必要があることを意味します。グラハムがここで何を得ようとしているのか、または「真の」マクロとは何を意味しているのか、正確にはわかりません。
静的に型付けされたコンテキストでの衛生的なマクロについては、このペーパーを参照してください。
(ちなみに、マクロを持たない言語は使用する価値がないということにも同意しません。ファーストクラスの関数をより洗練された最新の型システムと組み合わせることで、マクロを使用することで生じる問題のほとんどをエレガントに解決できると思います。伝統的に狙われてきました。)
システムが型を推測しない静的型付けは、マクロの出力が非常に制限的な意味で型安全なままでなければならないため、真の汎用マクロを妨げます。