精華區beta Programming 關於我們 聯絡資訊
※ 引述《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>