人生中的很可能的最后一次期末考就到了,復(fù)習(xí)之余不免忙里偷閑,想想程序的那些破事。
相對(duì)于去年來(lái)說(shuō),今年做的事情比較少。06年做了一個(gè)軟件渲染器和一個(gè)強(qiáng)類型的腳本引擎和一個(gè)基于OpenGL的GUI,07年沖做了一個(gè)基于OpenGL的GUI,一個(gè)正則表達(dá)式和動(dòng)態(tài)的上下文無(wú)關(guān)文法分析器(并在年內(nèi)重寫(xiě)了一次),還有一個(gè)基于閉包的無(wú)類型腳本引擎。今年做的是一些修修補(bǔ)補(bǔ)的工作,首先為最新的腳本引擎提供了基于閉包實(shí)現(xiàn)的class和namespace、重寫(xiě)了內(nèi)核并加上了multi-method和operator overloading,為正則表達(dá)式引擎重寫(xiě)了一個(gè)新的幾乎提高了9倍速度的分析器(于是寫(xiě)了一篇招口水的文章)。自從Borland的沒(méi)落導(dǎo)致我狠一狠心從Delphi過(guò)渡到C++之后,一直到現(xiàn)在我都在維護(hù)一個(gè)我自己個(gè)人使用的“非標(biāo)準(zhǔn)模板庫(kù)”。STL啊Boost啊什么的就不用了,函數(shù)的名字比較鳥(niǎo)。
大三也快完了,學(xué)院要求我們自己張羅實(shí)習(xí)的事情,班主任推薦我去微軟,后來(lái)花了點(diǎn)時(shí)間準(zhǔn)備了一下。不過(guò)不幸的是最后發(fā)現(xiàn)準(zhǔn)備是沒(méi)有用的,面試官總會(huì)在意外的時(shí)間問(wèn)你意外地問(wèn)題。兩次電話面試一次HalfLife玩得正爽,第二次看片看得正爽。后來(lái)獲得了飛去上海(Microsoft STB,工程院分院)面試的資格,被一個(gè)老外暗示了一下導(dǎo)致一道題目答不出來(lái)。回來(lái)見(jiàn)到WP同學(xué),他說(shuō):“去大公司面試總是要郁悶的。”所幸終于還是拿到了實(shí)習(xí)的Offer,遂簽。班里另外一名也做了一個(gè)正則表達(dá)式引擎的同學(xué)則到了MSRA的STC實(shí)習(xí)。
勞動(dòng)節(jié)某瓶去了福建見(jiàn)網(wǎng)友,我就讓那個(gè)也是我的網(wǎng)友的某阿姨捎了本日語(yǔ)教材給我,每日一課一點(diǎn)一點(diǎn)讀。算是接觸點(diǎn)兒新鮮事物,也好消磨一下時(shí)間。不過(guò)我還是準(zhǔn)備要花點(diǎn)心思去學(xué)好的,也給自己制定了一個(gè)non-deterministic的長(zhǎng)期計(jì)劃。打算在實(shí)習(xí)的時(shí)候,晚上看書(shū)寫(xiě)程序之余閱讀點(diǎn)兒日語(yǔ)材料玩點(diǎn)兒AVG算練練聽(tīng)力。
今天重新翻開(kāi)了以前的代碼,回想起寒假曾經(jīng)信誓旦旦想封裝Windows Common Control 6.0的事情。框架和GDI都做完了,空間封了一個(gè)BUTTON class,其他的還沒(méi)。無(wú)奈微軟寫(xiě)的這Common Control 6.0在XP底下有個(gè)難看到無(wú)法忽略的bug,所以還是算了。Vista想必應(yīng)該沒(méi)有了罷,等以后有空再弄吧。不過(guò)今天還是為這套褲的GDI部分加上了保存bmp以及讀寫(xiě)emf的功能,然后瞄到了桌子上以前非常喜愛(ài)的一些圖形學(xué)的書(shū)。
我也奇怪,圖形學(xué)看了十幾本書(shū)沒(méi)什么建樹(shù),編譯器和虛擬機(jī)只有一本編譯原理和一些零散的論文看倒是把一個(gè)完整的無(wú)類型動(dòng)態(tài)語(yǔ)言腳本引擎給弄出來(lái)了。語(yǔ)法上自己的一些想法實(shí)現(xiàn)以后,有一次看了python和ruby的資料發(fā)現(xiàn)很多東西都是異曲同工,也好不算偏門(mén)。功能都有了,C++和.NET的兩個(gè)接口也做了,就剩下補(bǔ)充一下腳本的預(yù)定義庫(kù)了。不過(guò)這個(gè)也得慢慢來(lái),至少比做那個(gè)純粹是消磨時(shí)間的“封裝Common Control 6.0”來(lái)得有意義。
今天在MSDN上終于找到了以前就很想找到的函數(shù)了,可以提取一個(gè)字符串的貝塞爾曲線邊框。這樣一來(lái)該有的輸入數(shù)據(jù)都有了。目前有一個(gè)想法,借助GDI的這個(gè)提取文字邊框和加載BMP的功能,自己從一個(gè)DIB緩沖區(qū)上重新實(shí)現(xiàn)一套比較好一點(diǎn)的2D繪圖庫(kù),至少要實(shí)現(xiàn)GDI+那些用得上的功能,然后做點(diǎn)兒它沒(méi)有的。GDI+那個(gè)可憐的版本問(wèn)題導(dǎo)致每每需要自己寫(xiě)manifest,GDI又太弱,反正時(shí)間還多,就這么辦吧,不用GDI了全部重頭寫(xiě),除了獲得文字邊框這個(gè)沒(méi)辦法一定要用API,自己讀ttf文件還是麻煩了一點(diǎn)的。自從軟件渲染器做完之后,也快兩年了。重新動(dòng)一下,有助于減少審美疲勞,也算是把未了的心愿給完成了。于是接下來(lái)就會(huì)有一堆問(wèn)題了。如何根據(jù)幾何畫(huà)刷把曲線轉(zhuǎn)換成封閉的多邊形,這個(gè)一做好,什么都好了。填充倒是以前早就做了,于是連文字都可以自己來(lái)渲染了。自己掃描曲線真是美啊。
做好了這個(gè)圖形庫(kù)以后就可以把繪圖設(shè)備抽象掉,然后再上面構(gòu)造一個(gè)類似Flash那種結(jié)構(gòu)的新型GUI了,用于對(duì)付一些比較特別的應(yīng)用程序了。然后想個(gè)辦法把這套GUI封進(jìn)Vczh Free Script之后,這個(gè)腳本推廣起來(lái)也就容易了。已經(jīng)有一位網(wǎng)友用我這套腳本引擎代替PHP開(kāi)發(fā)了一個(gè)網(wǎng)站,不過(guò)似乎沒(méi)做好,我也沒(méi)看到結(jié)果。果然語(yǔ)言還是需要庫(kù)的。
于是,找到了接下來(lái)要寫(xiě)的程序。從0開(kāi)始構(gòu)筑2D圖形庫(kù),很多東西都需要這個(gè)玩意兒。
posted on 2008-06-09 10:16
陳梓瀚(vczh) 閱讀(1537)
評(píng)論(5) 編輯 收藏 引用 所屬分類:
其他