読者です 読者をやめる 読者になる 読者になる

プリティプリントという語の幅について ――主としてジャーゴンファイルを参考に

ジャーゴンファイルの「prettyprint」には、語義1としてこうある。

To generate ‘pretty’ human-readable output from a hairy internal representation; esp. used for the process of grinding (sense 1) program code, and most esp. for LISP code.

http://www.catb.org/esr/jargon/html/P/prettyprint.html

プログラムコード、特にLispのコードをそうすることに対して使う、と最後にある通り、Lisp文化圏の用語という感じがある。しかしここで前半の「hairy internal representation」という表現にも注意したい。一般にLisp(S式)以外のソースコードは "internal representation" ではないし、"hairy"(ひどく込み入った、といったような意)でもない。
つまり、Go言語のgofmtのような、ソースコードの適切なスペーシング・改行入れ・インデント付けというような手続きだけではなく、もっとややこしい一般のデータ構造を「プリティに」可視化するといったような意味を含んでいる。ruby添付のprettyprintライブラリや、関数プログラミングの楽しみの第11章のプリティプリンタはこちらの方である。
続いて、ジャーゴンファイルではgrindingがリンクになっているので、そのリンク先のgrindの語義1も見てみよう。

[MIT and Berkeley; now rare]To prettify hardcopy of code, especially LISP code, by reindenting lines, printing keywords and comments in distinct fonts (if available), etc. This usage was associated with the MacLISP community and is now rare; prettyprint was and is the generic term for such operations.

http://www.catb.org/esr/jargon/html/G/grind.html

「今では稀で、普通はprettyprintが一般的な用語となった」とあるから、こちらの方が方言ということに今ではなっている、という感じだろう。ここのMacLISPはApple社のMacintoshLispではなく、MITのProject MACLispであるから、冒頭の「MIT and Berkeley」とも繋がっている。MITは東海岸バークレーは西海岸だから、地域的な分布では無さそうである(和田先生だったと思うが、どこかで、「グラインドというのはプリティプリントの意のMIT方言で」とおっしゃったのを聞いた記憶がある)。
ここで挙げられている "grind" の特徴をみてみよう。まず「prettify hardcopy of code」、コードのハードコピーを良さげにすると、ハードコピーという明示がある。古い語という点も含めて考えると、ソースコードを快適に読むには紙に印刷する、という時代ということになるであろう(今や、電子的に読むほうが利便性の点で快適である)。特にLispのコードを、という点はprettyprintと変わらない。続いて「keywords and comments in distinct fonts (if available)」フォントがあるならキーワードとコメントを別のフォントで、とある。これもまた現代の電子的なブラウズでは色付けに変わってしまった慣習で、ボールドというか太字にする以外はフォントは変えないのが普通となっているが、昔はイタリック等の書体を使って「華麗に」プログラムを印刷する慣習があった。
この慣習はいつごろ変わったものかわからないが(というより、徐々に変わったものである)、ASCIIの浸透により表示される字と印刷される字が同じという環境が当たり前になったとか、本に載せるソースコードで華麗なフォントが使われているのは読者がそれを入力する際に不親切であるとか(近年だと日本で刊行されたHaskellの本でそういう話があったことがあった)、理由としてはいろいろあるだろう。私の印象では、似た構文の言語としては、Algolのコードは多種のフォントで(Algolは仕様で2種の表現法を定義していた、ということもあろうが)、Pascalはいわゆるteletype textだけで等幅ベタ組みされる、という感じがある(例外も多いが)。
さて、FreeBSDにはvgrindというコマンドがある。前述のようにバークレー方言ということからもBSDにあるのは自然と言える。マニュアルのHISTORYの節には「The vgrind command appeared in 3.0BSD.」とあるから、そこそこの伝統と言えよう。このコマンドを次のように使って生成したハードコピーは、

$ vgrind -p groff hello.c > hello.ps

次のようになる。

古い文献を見ると、キーワードないしは予約語をイタリックにしている場合もあり(言語にもよるが)、そうすると現代の印刷物との違和感はもっと大きくなる。