※ 引述《sealoe@kkcity.com.tw》之銘言:
> 關於你說C++可以做的 C不能做
> 這點 我倒是有些疑問
因為不清楚你引的是哪段,
所以不太清楚你的疑問在哪。
不過最近這幾篇應該沒有提到「C 不能做」,
而是提到「人用 C 做容易會有很多疏失」。
> 再相當多的平台上或是比較早期的 C++不過是C(或PASCAL)的前導程式
> 換句話就是其行為是
> 編譯 編譯
> C++------->C------>ASM
目前我看過較新的 compiler 都是 C++ 直接轉 tree,
接著轉成內部表示的中間碼,然後轉成 asm。
轉成 C 只是比較初期的作法,
這樣轉出來的效果並不會很好。
> 這樣C++能做 C就應該一定能做吧
> 祇是寫程式的人技巧問題而已吧
這倒未必,你可能忽略了人類的時間、體力、細心程度和耐力是有限的,
以至於不容易用 C 做出跟 C++ 一樣好的東西,
因為 C++ 多了 template 這種 code generator,
語言機制本身就具備了操縱型別的機制,
它比起 C 來說更能去操 compiler,
將大量的 code 由 compiler 內部去產生出來。
同時由於 C++ 是施行嚴格型別檢查的語言,
compiler 能在編譯期 100% 確定的事情大幅增加,
因此編譯出來的目的碼有時效能上會比 C 還要好。
在一個型別檢查很寬鬆的語言,
compiler 在編譯期會有較多的事情無法確定,
而 compiler 這種東西必須 100% 正確的產生目的碼,
因此 compiler 只要認為有 0.0000001% 甚至更細小的不確定,
它的最佳化機制就會被壓抑下來。
很多人有高階語言最早是由更低階語言實作,
因此用低階語言寫出來的東西一定比較廣泛的想法,
事實上這是一個非常大的謬誤。
光拿 C 跟 ASM 來說好了,
假設某個 VLIW 架構的硬體一個 cycle 最多可以 issue 10 道指令,
但是這 10 道指令之間彼此不能有任何相依性和資源衝突,
同時也不能和前後 N 道指令(取決於管線級數)有任何資料相依和資源衝突性,
你叫人類去寫 ASM 把所有狀態排列出來找最佳情形,
讓每個 cycle 能 issue 最多的指令數量根本是不可能的,
這種東西在較先進的 compiler 都會交給 DFA 解決,
而且光是靜態排列出來的狀態隨便就有上萬個。
如果能保證人類下棋永遠能下贏電腦這件事,
或許還有一點希望也說不定。
很多事情已經不純粹是技巧的問題而已,
人類是有人性的,
會因為像是焦慮、急躁、疲勞、病痛、氣候等等生理、心理、環境因素而犯錯,
對於大量計算和重複性工作這種事情能交給電腦就交給電腦,
這應該是基本常識,但很多人喜歡想不開,
讓一些外行人還以為六根清淨的和尚比較適合寫程式。
C++ template 做 code generation 的能力姑且不談,
光以今天早上回應給 gsj 的這兩篇文章中,
你應該就能明顯感覺到 C++ 的語言機制,
能讓人類能更及早地迴避一些錯誤,
而且提升了語言的自我描述性質,
可以省下很多註解,
因為至少呼叫 function 的人會先去對 type,
就算還是不小心對錯,
也有 compiler 幫人類擋下來。
可能國內比較少人寫程式給別人用,
不太能感受自己寫的 library 放出去給人用,
或是寫好一個 application 放出去給人改以後,
就會有一堆死大人跟夭壽小孩不看文件和註解就跟你亂 call ,
結果本來程式不會當掉被他們亂改就當了,
於是跑來找你要你解釋的心情...
如果是在 teamwork 這個情況就更嚴重,
到最後還會看到有人強姦你的程式碼,
一句話都沒問你就大大方方自以為比較厲害的 commit 到 CVS 上...
C++ 做得到 C 做不到的不單純是在機器上,
還有很多值得關切的地方是在人身上。
以台灣的業界來說,通常狀況是反過來的,
大家都被趨勢所迫在當那個死大人或夭壽小孩,
所以可能感觸不深...
這點真的蠻悲哀的就是。
--
Name: Tseng, Ling-hua E-mail Address: uranus@it.muds.net
School: National Chung Cheng University
Department: Computer Science and Information Engineering
Researching: Porting GCC and Implementing VLIW instruction scheduler in GCC
Homepage: https://it.muds.net/~uranus
--
╔═══╗ ┼────────────────────────╮
║狂狷 ║ │* Origin:[ 狂 狷 年 少 ] whshs.cs.nccu.edu.tw ╰─╮
║ 年少║ ┼╮ < IP:140.119.164.16 > ╰─╮
╚╦═╦╝ ╰ * From:218-171-143-156.dynamic.hinet.net
─╨─╨─ KGBBS ─ ◎ 遨翔"BBS"的狂狷不馴;屬於年少的輕狂色彩 ◎
--
* Modify: tinlans 05/08/13 11:04:26 <218-171-143-156.dynamic.hinet.net>