Fortressにおける「Lispのマクロ」?
Sunの "To Do for Fortran What Java Did for C" な言語Fortressについては,きなば師によるGuy Steeleの講演のサマリーが(さすが!)分かりやすい.
- http://www.kmonos.net/wlog/60.html#_0219060428 Derive Your Dreams > 02:19 06/04/28
- http://research.sun.com/projects/plrg/ Sun Microsystems Laboratories > Programming Language Research
さてそのFortressには,Lispのマクロにも似た構文のユーザ定義のための機能があるとUTMCの先輩に教えていただいた.
For example, we could define parseSQL so that a use site such as:
sql SELECT spectral_class FROM stars endwould be expanded into the following Fortress SyntaxTree:
Call(Empty, List(VarRef(Identifier(“SqlQuery”)), Call(Empty, List(VarRef(Identifier(“Select”)), String(“spectral_class”))), Call(Empty, List(VarRef(Identifier(“From”)), String(“stars”)))))
うーむ,興味深い.そもそも第36章が "Support for Domain-Specific Languages" となっているのだ.
SQLを「取り込む」動きはC# 3.0のLINQが代表格だが,Fortressは同等の機能を言語組み込みとしてでなくライブラリとして実現できるということだろうか.すると夢が広がる: SQLのみならずXQuery風の何かを直書きとか,そこまでいかなくても(様々な方言があるらしい)SQLのうち,最初は用意されてなかったけど使い慣れてる機能を導入するとか... いや,きちんと読んでないからそういうことができるのかは知らんよ?