小而美幾個(gè)項(xiàng)目:troff實(shí)現(xiàn),C編譯器……
作為一個(gè)挖坑不填,拖更多年甚至快失蹤了的TeX開發(fā)者,我也并不是只看TeX相關(guān)的項(xiàng)目。
我也研究過troff,這個(gè)項(xiàng)目是很有意思的。這軟件出現(xiàn)在1971年。Knuth在思考自己要用的排版軟件的時(shí)候,是思考過troff的。
從1971年開始,有相當(dāng)數(shù)量的技術(shù)書其實(shí)是通過troff來排版的。感興趣的朋友們可以通過七八九十年代的版權(quán)頁來判別。
現(xiàn)在troff的使用,還是有。但是普通用戶就很少了。不過這東西的好處是模塊化?;旧弦粋€(gè)功能,就是一個(gè)程序來控制,比如有畫數(shù)學(xué)公式的,畫流程圖的,畫化學(xué)式的。(這里我有一個(gè)關(guān)于Markdown的天坑想法,這里裝不下,就不寫了)
今天要介紹的是Ali Gholami Rudi的幾個(gè)項(xiàng)目。這人是伊朗的一個(gè)大學(xué)——Babol Noshirvani University of Technology——的一個(gè)Assistant Professor。他在Github上放了一些自己寫的項(xiàng)目。
他寫的幾個(gè)troff相關(guān)的項(xiàng)目,分別是:neatroff(troff實(shí)現(xiàn)的本體部分),neateqn(數(shù)學(xué)公式排版部分),neatpost(postscript代碼生成部分),neatmkfn(字體數(shù)據(jù)生成部分)。
這個(gè)troff和gnu troff的區(qū)別,就兩點(diǎn),一是小,二是支持OpenType。當(dāng)然了,它對(duì)于OTF的支持,路徑可能比較復(fù)雜,甚至不一定比在TeX里面用OTF簡(jiǎn)單。支持OTF的另一個(gè)troff引擎,是heirloom troff,不過這軟件屬于多年未更新,且因?yàn)樵S可證的問題,在很多Linux發(fā)行版里面都找不到。
再說neatroff的小。這種級(jí)別的項(xiàng)目,真能寫得得心應(yīng)手,一是要熟悉算法和數(shù)據(jù)結(jié)構(gòu),另外就是極度熟悉C語言。這樣寫出來的東西,總有一股小而美的味道。但是這種“小而美”確實(shí)還是很難的,就如Fabrice Bellard寫tcc和qemacs,是沒有什么心結(jié)的,寫的很痛快,但是不熟悉算法和語言的人看起來就會(huì)有一些痛苦了。
Ali Gholami Rudi寫的另外的幾個(gè)有趣的項(xiàng)目,是關(guān)于C編譯器的,即neatcc(編譯器),neatld(連接器),neatlibc(libc標(biāo)準(zhǔn)庫)。編譯器這東西,雖然本質(zhì)上,就是從一種文本轉(zhuǎn)換為另一種文本(哪怕是二進(jìn)制的),但是在沒有引導(dǎo)的情況下,一般人是很難上手的。這幾個(gè)項(xiàng)目看起來是很有意思的。
關(guān)于C編譯器設(shè)計(jì)的書,其實(shí)不少,比如Allen Holub的Compiler Design in C,比如Dave Hanson和Chris Fraser的A Retargetable C Compiler: Design and Implementation,比如James E. Hendrix的A Small C Compiler。
當(dāng)然,讀了多少書,不如寫多少的代碼。