作者reader (讀者)
看板CSSE
標題[討論] 編譯問題
時間Mon Feb 21 09:38:02 2005
其實我一直想發展一個程式語言,源頭可上溯自 14 年前的類似
HTML+XML+PHP 的設計,但後來因為接案子,就搞起 GUI 和 OO
了。
後來常常覺得這又是一次與歷史錯身而過,不過就算當時想做,
大概也是做不出來的,或只能做出一個很醜陋的東西,歷史總是
有著它的規律的。何況從十八歲以來,我從來沒有安定的收入,
再多的想法,總是要受限於軟體專案或事業經營的問題,沒錢就
接案,有錢就創業,失敗又再來,這樣要做出什麼東西,也真是
天方夜譚。
到了四年前,又提出過一次簡化版的規劃,某企業還滿支持的,
給了我一個在中國的軟體團隊支援,可是溝通不良,兩岸的編程
觀念和很多東西都差異很大,最後又失敗了一次,當然,也是跟
我當時還是以經營企業為主有很大關係,那年頭有技術的人總是
被期望著做創業家的,何況那也的確算是我的本行,從十六歲就
開始準備的事情。
這幾天手上的案子大多了結或接近結束,不知道為什麼,又開始
想起這個程式語言的想法。傳言中,一個黑客有所謂的四不朽:
作業系統、程式語言、圖形使用者介面和電腦病毒。當然,能夠
做好其中兩項就算是偉大的黑客了 ─ 我大概是對此有點中毒了。
想了一想,現在實在是沒有做不出來的道理,古代要搞 symbol
table 還算是個技術,但現在隨便做都有,如果不拚效能的話,
並沒有什麼不好做的。
不過,技術上還是有一些麻煩的地方,例如我現在想做的東西,
有四個層級混在一起: macro layer, script layer, op-code
layer, native-code layer. 另外有 cross language 的特性,
也不是容易的東西。
直接寫執行檔編譯程式大概沒辦法,不過寫 compile to C++ 的
編譯程式則應該可以。
但是,我卻發現要處理 first-order function 還真是不容易,
想像中它可以編譯為 op-code 再執行,但是命名空間的衝突,
卻顯然不是那麼容易處理,如果用字串來找尋函數和變數,那樣
效率就跟 script 相差無幾了,但要怎樣才能不用,這就有一點
讓人感到頭腦發昏了。
用 C++-like 表示法來看就可以知道了:
struct A {
void f() { ... }
void g(void t()) { t(); }
};
void f() { ... }
void g(void t()) { t(); }
void main() {
A a;
void b() = { f(); }
g(b); // 執行 f()
a.g(b); // 執行 A::f() 還是 f() ??
}
也就是說,恐怕免不了要製作一套很麻煩的機制,才能有效處理
這樣的問題。
如果像上例,預先知道 b() 的內容,當然還簡單一些,但是還得
考慮到 script 的狀況呢。唉唉。
或者還有什麼好的辦法嗎?
--
※ 編輯: reader 來自: 61.222.173.26 (02/21 10:19)
1F:推 Eventis:執行的應該是f()吧@@ 61.62.49.43 02/21
2F:→ Eventis:不是已經將function pointor傳進去了嗎@@? 61.62.49.43 02/21