Hisashi Morita ([info]hisashim) wrote,
@ 2006-03-13 23:10:00
Previous Entry  Add to memories!  Tell a Friend!  Next Entry
[Rant][TeX][Publishing] ccache and distcc applicable to TeX?
ccache and distcc applicable to TeX?
------------------------------------

素人考えで、LaTeX文書からDVIファイルをビルドする作業を高速化するのに、キャッシュによってコンパイルを高速化するccacheや、分散コンパイルを可能にするdistccを使えないかと思って、少し調べてみた。今手元で編集している原稿の場合は、.texファイル1つごとにダミーのヘッダとフッタを付けてコンパイルできるようになっているけれど、より汎用の方法があれば知っておきたいのが人情。

http://ccache.samba.org/
http://distcc.samba.org/

でも結果はどうやら残念ながら無理そう。理由としては、そういったユーティリティが事実上C/C++以外には対応していないというのが一番大きいけれど、そもそも性質上無理がありそう。

仮説:そういうユーティリティは、コンパイル対象が細かくモジュール化されていて、複数の段階を経て中間ファイルを作りながら処理を進める仕組みになっていることを前提として動作する。そのモジュールの単位でしかキャッシュや分散を効かせることができない。だから、一枚岩として中間ファイルを作らずにコンパイルするのが基本である(と思われる)TeXでは、結局全部をコンパイルし直すことになる。makeの並列実行もたぶん意味がない。

texが出力するDVIファイルというのは、プログラムでいうリンク可能なオブジェクトファイルのようなものなのかと思ったら、違うらしい。じゃあその前段階にリンク可能なオブジェクトがあるのかと思ったら、そういうものもないらしい。(la)texも情報を集めて一時ファイルを作ったりはするけれども、それはあくまで参照用の情報であり、文書自体ではないらしい。

ちょっと原稿を直して、直した部分だけを確認したいのに、わざわざでっかいDVIファイルを作るのは無駄が大きい。C言語のプログラムが.c, .asm, .oとコンパイルされていくように、(La)TeX文書も.texと.dviの間に再配置可能な形式があって外からアクセスできたらいいのになあ。リフローしても変わらない要素はなるべく先に確定させてしまって、ノンブルや参照や目次索引など他に影響するところだけリンカが後で処理するようにすれば、無駄を省いて効率良く仕事ができると思うんだけどな。甘い?

TeXの場合、ノンブルや目次索引など、影響を局所化しにくいものが多いから無理なんだろうか。でもプログラムでも、参照テーブルを作ったり参照先アドレスを書き換えたりと、同じようなことをリンク時にやっていそうな気がする。単に需要と動機の問題? 時間がかかるといってもせいぜい数分で終わるから、大規模プロジェクトのビルドなんかに比べれば誤差みたいなもんだけど、内容の割には、そして集中を削ぐ程度には長い。

---- 2006-03-2x 追記

これに関連して、問題点をもうひとつ思い出したのでメモしておく。

TeXでは変更の影響を局所化しにくい。例えば、Xページを直したらYページにも影響が出たが、それに気づかないで後で青くなるというケースがある。ソースを変更した箇所はいいとして、ソースを変更していない箇所が前回のコンパイル結果と同じになっているかを確かめる手段が欲しい。

以前試しに、新旧のPDFをGhostscriptでページごとのラスタイメージに変換してImageMagickで比較するという、なんちゃって検版スクリプトを書いたことがある。でもGhostscriptで解釈できないページがあるとそこで止まってしまってダメだった。筋の悪いPDFは意外に多いらしい。あと測定のミスかもしれないけど、同じ入力から毎回少し違う出力が出てきて困った(見た目は同じだが、XORすると数ピクセルだけずれている)。余裕がなくてそれ以上踏み込まなかったけれど、そのあたりを解決すれば実用になるかもしれない。

----

そういえば、RIPでラスタライズした出力ファイルを見せてもらえないか印刷所の人にお願いしていたことを思い出した。後工程には前ほど興味がないけれど、できる勉強はしておきたい。

---- 2006-04 追記

やっぱりだめっぽいという意見を発見。そうですか。

http://www.banana-fish.com/~piro/20060326.html#p02

もしも万が一仕様を変えて書き直されることがあるなら、もっとプログラミング言語としてまともになるといいなあ。TeX派生の新しい実装はいろいろあるみたいだけど、ユーザビリティや人的リソースを気にしている人はそっち界隈には見当たらないという印象。

(ところで、TeXをアセンブリに見たてて、TeXとは全く文法が異なる「高級言語」を作ることはできないだろうか。LaTeXのようにTeXをそのまま延長線上に拡張するのではなく、アセンブリに対するCやひいてはLispのような高級言語を作れないかという話。最終的にPSやPDFを出力してくれれば別にTeXに基づいている必要はないけれども、TeXの他に対する強みはひとえに組版のノウハウが詰め込まれているところにあって、あれを利用せずにあれを超えるのは結構な手間暇がかかると思うので。でも、吐くのが機械語じゃないからいつまでたっても自身を記述できなくて、無理かな?)



(Post a new comment)

>もっとプログラミング言語としてまともになるといいなあ
(Anonymous)
2006-05-15 02:17 pm UTC (link)
「やっぱりだめっぽいという意見」を書いたもんです。
PythonからTeXを呼び出せるようにしてみたり (http://www.pytex.org/ )、
マクロ中に他の言語を埋め込めるようにしてみたり(http://www.luatex.org/ )、
TeXのアルゴリズムをSchemeから扱えるようにしてみたり(http://www.texmacs.org/ )、
色々あるはあるみたいなんですが、いまいち盛り上がってないっぽいところを見ると、
それほどニーズがないんですかね。PyTeXのサイトでも引用されている通り、
Knuth先生自身もべつにアレがいいとは思ってないらしいんですが。

(Reply to this) (Thread)

Re: >もっとプログラミング言語としてまともになるといいなあ
[info]hisashim
2006-05-16 04:59 pm UTC (link)
いろいろ教えてくださってありがとうございます。PyTeX(QaTeX)とLuaTeXは知りませんでした。まだ日本語が通りそうにない感じですけど、後でよくみてみます。
# PyTeXがやっている、texをdaemonとして動かすというのは高速化に効きそう。ptexでできないかな?

ページ媒体(紙)へ出力するソフトウェアが盛り上がらない理由は、

* 個々のユーザのニーズは強くても、数が少なくお金もない(紙媒体の世界では読む人に比べて書く人が少なく、出版はビジネスとして規模が小さいため)
* 組版の仕組みは割と面倒でプログラムしにくい
* TeXという(デザインはともかく)動くものが存在するので、リソースがそちらに流れ

というあたりかなと思っています。もしも、労力に見合った十分な名声やお金が得られるなら、開発者が引き付けられて、改善されるかもしれませんね。それまでは困っている人自身がなんとかするしかなさそうです。

(Reply to this) (Parent)


Create an Account
Forgot your login or password?
Login w/ OpenID
English • Español • Deutsch • Русский…