作者reader (讀者)
看板CSSE
標題Re: [討論] 編譯問題
時間Tue Feb 22 03:32:43 2005
※ 引述《Eventis (何逸凡)》之銘言:
: ※ 引述《reader (讀者)》之銘言:
: : 這大概是最白爛的做法了。但很多情況是得在執行時期處理的。
: @.@
: 沒想到真的得在執行期來做這個東西Orz.....
: 我腦子裡只晃了晃這個怪物,就自動略掉了.
: 真的在runtime才能處理的東西,
: 除非語言中具備有特殊的提示或寫法,
: 否擇語法結構/語意上對於實作所能提供的改善幾乎沒有.
: 能採取的最佳化策略,在原有的語言上也是可以做,
: 那定義這樣的語言能帶來額外的優勢嗎?
我們並不是隨時都需要效能的,很多時候還需要別的軟體品質和特性。
例如生產力、延展性、學習成本等等。
現在的狀況是,我們常常用很多種語言去完成一件事,但如果它們能
整合在一起,效能的最佳化由系統協助完成,那麼語言的壁壘就能夠
減少許多。
比如說,當我們使用 script 寫作時,有多少部分一定要用解譯程式
才能處理? 其實不多吧,寫完之後如果要提昇效能,是不是一定得要
換一種語言重寫? 而以前在寫 C++ 時,會不會有時候覺得某些地方
使用其他語言更為方便?
如果它們是單一語言,就不會有這個問題了,而能夠自然地結合起來。
需要 first-order function 時,往往是需要極大彈性之時,用其他
方法來做,反而會變得更複雜,效能的提昇卻很有限,不如就專注在
程式結構的完善上。
不要說這東西沒有用,那東西沒有效率,一些特性加起來就是不一樣。
就程式語言理論而言,沒有 first-order function, 沒有 delegation,
沒有 meta-class, 沒有 actor, 一些重要特性 C++ 全都沒有,其實
是很不完整的程式語言,這將造成在軟體彈性上過度依靠動態繼承,
程式設計上會產生很大的累贅。
而且其實啊,我的原始設計是沒有 keyword 的, C-style 的程式語言
是用基礎語言模擬出來的產物,例如 if...else, for, while 等等,
在最底層都是可以用 first-order function 做出來的。那才是其中
最為精巧的部分。
: : 這這... 我從來沒覺得 rpc 或 web service 強大或好用過...
: : 五年前申請一半的專利就是網路軟體元件自動耦合連結了... 而在
: 對不起 ,是我太亂來了 <(_._)>....
: 我想到那是什麼東西了....>.<
: : 十年前,我的天才學弟去留學前的臨別筆記,也就提到了,到現在
: : 我想做的東西,只怕還沒超過他當年的規劃和想像太多。
: : 基本上,只要有一個最基本的支援平台,這一點也不困難。
: 介面整合,module coupling的問題,也不難處理嗎?
: (這個部份只有聽老師有如介紹夢想般的帶過去一下下
: 程式內的模組都透過網路堆砌完成的樣子@@)
這沒有想像中的難,關鍵只是在效能和彈性的取捨上。
比較極端的,有把元件都視作黑盒子,用功能網絡來決定的,簡直就是
超大類神經網路,也有全然層級式,和繼承結構沒兩樣的死硬做法。
不過就現實來說,透過名稱、架構、語境的耦合,加上一些認證、信任、
信用體系,其實在單一系統之內就夠用了,太純粹的結構,都會很麻煩,
單一演算法總是很難處理好所有狀況,多重決定的雞尾酒式解法,將會是
很容易達到效益的較佳做法。
實作和理論之間往往是有斷裂的,一個科技創新者,就是要在其中找到
機會。
: : 完全內建和外加是不一樣的。這要做過才知道,如果系統中的物件都
: : 能自主動作,程式設計的概念都會不一樣了。
: 我完全贊同這一段.
: : 而當這些物件可以遊走於不同機器時,在程式設計上卻會是一模一樣,
: : 當物件能夠自行昇級改版,我們還是可以使用同樣的程式碼持續性地
: : 運作時,那麼它的威力就更會顯現出來。
: @@;;;;
: 等等.....
: C++的object code不是有平台相依性@@
: 怎麼確保portability@@?
: 每port一次就從頭compile一次@@?
native code 一般是不能直接傳遞的,它得經由原始碼轉化為 op-code
或是以 script 形式才能傳遞,要不要再編譯,那是另一回事了。
簡單來說,程式語言層次只提供執行 op-code, script 和 macro 的能力,
而這些都是 portable 的,這樣就夠了。
只要 code, script, macro 都完全相容,其中要怎麼轉換怎麼處理,就是
軟體工程師的創造力的發揮空間了。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.222.173.26
1F:推 Eventis:op code換一個ISA的時候呢? 61.62.49.43 02/22
2F:→ Eventis:ex. x86->arm ?......即使是用rtl result傳遞 61.62.49.43 02/22
3F:→ Eventis:還是得做點dirty work@@? 61.62.49.43 02/22
4F:推 billyeh:以 JVM code 或 .Net CLR code 就很方便 140.113.23.102 02/22
5F:推 Eventis:那也要先建置JVM或是.Net環境啊@@;;;; 140.116.49.70 02/22