作者reader (讀者)
看板CSSE
標題Re: [討論] 編譯問題
時間Tue Feb 22 00:24:40 2005
※ 引述《Eventis (何逸凡)》之銘言:
: ※ 引述《reader (讀者)》之銘言:
: : 執行是 A::f() 才合乎 first-order function, 這正是它奧妙的地方。
: : 如果只是 function pointer 就簡單太多了。
: : 傳統的編譯程式是做不到的。你可以想像它是「執行時期的巨集函數」。
: : 有這個東西,就不需要醜陋的 iterator 了。用 iterator 不見得一定
: : 比較快,但是程式碼變醜太多了。
: 那不就是等於到linking的時候才能判斷在命名空間是否定義過@@?
: 又,如果宣告不是又多又長的話,
: 也許用hash function的負擔反而比較重?
如果是 32/64 bits hash function, 負擔應該就不會比較重,
例如著名的 FNV, 也不過就是乘法和 XOR, 此後就能大大減少
名稱比對的需求。
而如果在連結期間就能確定的話,那已是比較靜態的狀況了,
其實只比 template 複雜一點。當然那是萬一程式語言流行時
別人要傷腦筋的事情,一開始當然是用沒效率的方式,例如:
void f() = { printf("%d", i); }
void loop(int n, void f()) {
for(int i = 0; i < n; i++) f();
}
loop(100, f);
=>
typedef void F(vars&);
void f(vars& t) { printf("%d", t["i"]); }
void loop(int n, F f) {
vars t;
for(t["i"] = 0; t["i"] < n; t["i"]++) f(t);
}
loop(100, f);
這大概是最白爛的做法了。但很多情況是得在執行時期處理的。
: : 現在 C++ 不過是把巨集語言合併到程式語言當中 (template),一堆人
: : 就在那邊大呼小叫說是什麼革命性發展的,弄個什麼泛型化程式設計就
: : 覺得世界被改變了,實在是眼光太過短淺。那叫「本來就應該這樣」。
: 說到這個,java終於有template了.
: 可喜可賀可喜可賀...........(好像不重要,裝傻中....XD)
就現在 Java 程式的主流寫法而言,恐怕還得等好一陣子才能漸漸
流行吧。
嗯,我不知道,基本上我只拿 Java 做點小東西小案子。
: : 有太多東西該做了,例如內建的網路功能,使這樣的程式語言將可以在
: : 網路上互通,程式碼可以在機器之間移動複製和定址,分散式運算可以
: (比rpc或web service更powerful的功能?
: @@.....這個很難以想像>.<)
這這... 我從來沒覺得 rpc 或 web service 強大或好用過...
五年前申請一半的專利就是網路軟體元件自動耦合連結了... 而在
十年前,我的天才學弟去留學前的臨別筆記,也就提到了,到現在
我想做的東西,只怕還沒超過他當年的規劃和想像太多。
基本上,只要有一個最基本的支援平台,這一點也不困難。
正如同我們需要 graphics platform 於是有了視窗系統,有一個
network platform, 也完全是理所當然的。
而要做 GUI 不可避免地需要 OOPL, 要做網路平台,自然也會需要
可以有效承載新觀念的程式語言。
這東西我不做別人也會做,只是看哪個組織有力量也有想法而已。
就像世界上不可能只有一個 Alan Kay 想做 GUI 一樣,就看是誰
有那個機會了。
: : 完全平順自然地達成。至於多執行緒更是最最基本的。這樣才起碼像是
: : 一個二十一世紀的程式語言。
: 雖然C++語言本身與基本函式庫沒有提供,
: 可是這些功能或技術要做到,在一般的情況下並沒有太大的問題.
: (或者是發展的人覺得寫不出更好的0.0?)
完全內建和外加是不一樣的。這要做過才知道,如果系統中的物件都
能自主動作,程式設計的概念都會不一樣了。
而當這些物件可以遊走於不同機器時,在程式設計上卻會是一模一樣,
當物件能夠自行昇級改版,我們還是可以使用同樣的程式碼持續性地
運作時,那麼它的威力就更會顯現出來。
這才是物件導向理論的原本想像,今天大家所認知的物件導向其實是
縮水版...
內建 multi-threading 機制,而且是有效地內建,我個人認為是新的
程式語言最需要的基礎設計,好用不好用,影響很大的。
不過 C++ 這種靜態系統的成功,也證明了只能使用 interpreter 的
高階程式語言,能夠應用的範圍有限、效能不足,是不能擔當大任的。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.222.173.26