看板 Soft_Job 關於我們 聯絡資訊
※ 引述《leolarrel (真.粽子無雙)》之銘言: : 身為一個很多語言我都有在用的人,想反駁一下 這話很引戰。其實我剛好也是很多語言都在用的人耶 只是結果是我比較愛用 C++。我想表達的是我的想法,我完全尊重其他人的選擇 你看完我的文章覺得我有講錯了,那你可以指正。不過我看起來你不是在指正我的內容 而是在質疑我的選擇 : 想到精確的控制資源取得與釋放,C做得到,而且做的比C++更加的透明,不黑箱,如果使用 : C++依樣要"嚴格的紀律",那我為何不選擇黑箱作業比較小的C? : 另外,如果在意gc,那麼c/c++ 直接被推到推薦名單的最後面去,因為他們還要掛lib才做 : 得到,應該首選現在較為先進的語言 C 的紀律是什麼?是 goto?是 macro?什麼樣的方法可以讓你再離開 scope 的時候記得釋放資源?複製貼上? 這只是增加錯誤率而已,讓編譯器幫你做吧 你可以獲得幾乎一樣的效能,同時降低錯誤率 : C/java一樣做得很好,C++在這部分不算特別突出,所以這理由很弱. 在我看來很突出啊,如果你是跟 c 比。c 很常把 ptr cast 成不同的東西 當然,你要是明白這個 ptr 的 layout 是不會有事,對吧?如果弄錯了怎麼辦呢? compiler 會不讓你編?不會喔。會 crash?運氣好的話會。那不然呢?我不知道啊 要 match 型別呢?可以啊,就在函數後面加幾個字讓不同的型別有不同的叫法 增加 overhead?不會,因為 c++ 在編譯完後也是一樣 只是一句老話,讓編譯器幫你做的事情,你幹嘛自己做? : : 用 template 基本上就是用空間換速度,當然空間大到一定的程度也會影響到速度, : : 所以用的時候必須有點 sense 到底這樣下去會發生什麼事情。亂用 object code 就會 : : 變大。compile time 可以幫你做好 template 計算,你可以準備特化樣板讓 compiler : : 去用,只要設定得當你可以透過一個很 general 的樣板生出針對不同型別具有特殊 : : 意義的 code。 : 用泛型跟樣版就像你說的,要"有點sense",不能亂用.現代的直譯式語言方便多了,沒必要 : 為了泛型跟樣版而選擇C++ Java 的 generic 我真的不懂,如果這篇文章能夠釣出高手來解釋也算是很好了 方便是什麼?方便是用效率換的嗎?如果要換的話你可以決定怎麼換嗎? C++ 可以讓你做這個決定。 : 簡而言之,"某某功能很好懂,前提是你要qqqqqq然後注意ooooo,什麼時候可以aaaaaa, : 讓pppp怎麼樣可以llllll",恩,真的很好理解 @@ : 那我用C的 function pointer 不就好了,更透明,更不黑箱,也不用管compiler為了搞 : 繼承跟虛擬會怎麼樣去"建構"vtable 我覺得 c++ 不黑箱啊。對呀,你用 c 的 func ptr 很好,只要你喜歡用一個放滿 func ptr 的 struct,你也可以有 vtable。如此一來,你不只要懂,還要自己寫 真的有比較好嗎?我是比較懶啦。compiler 幫你做的事情為什麼你要自己做? : C做的更好,因為C compiler 根本不太會幫你做啥事,另說到compile time 做完很多 : 的事情,他的執行速度快的事情,現在直譯式語言都可以build成machine code,C++ : 在這個方面在現在動輒1.6G起跳的CPU 根本沒啥優勢,唯一能說嘴的只有編譯時期檢 : 查型別錯誤 Compiler 做的事情太少就是我對 c 最不習慣的地方。還有速度不是你說沒關就沒關的 很多時候速度是有差的。case-by-case,你的桌面系統要是用直譯器跑你會吐血。 我不只是說 wm,整個桌面系統喔! 即使 Java 可以 AOT,他依然沒有辦法像 C++ 的方式控制 compiler,他本來就是設計 給 vm 跑得。我不想對於 java 的速度做爭吵,hotspot 在某些狀況的確可以打敗 c++,這是動態編譯的好處,壞處是如何編譯你沒有辦法再寫程式當下就知道。如果你 喜歡,你可以用。 : : 所以我會說 c++ 是個很難的語言,因為你要很清楚你的每一步踩在什麼上面,但是他就 : : 像寶庫一樣你可以一直挖。而且我相信用到極端的狀況 py 和 java 不會簡單到哪去, : : 只是學習曲線和信仰問題。 : 你要用C++繼續開發你的程式我是沒有什麼意見,不過你自己也說C++是一個這麼難的語言 : 那麼學習一個那麼難的工具,結果這個工具的效用跟其他工具比起來差不了多少.... : 那為何要去學習難的那一個??有被虐狂嗎?? 我希望我講的東西貼近我認知的事實,天下沒有白吃的午餐。 在我看來 c++ 就是一個好寫的 c。儘管我覺得他對於編譯器的控制強過於 c。 只要你寫的好,你可以用類似更高階的語言的方式,寫出跟 c 有得拼的速度。 這整個的 tradeoff 在我看來很好。但我必須說,隱藏在 stl 或編譯器後面的 東西不是你沒看到就可以不管的。 但我也完全尊重你喜歡其他語言,或是你不管什麼原因就是不喜歡 C++ 那是你的選擇,如果大家選擇都一樣那現在就沒有這麼多趣味了。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 39.8.129.147 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1423636047.A.519.html
leolarrel: 我的確是在質疑你的選擇,你沒看錯.因為你提出的理由都 02/11 14:30
leolarrel: 很主觀,而很多理由實際上其他更高階直譯器都做的更好 02/11 14:31
noonOut: 還好我的選擇不需要對你負責 就算我們的背景一模一樣 02/11 14:32
noonOut: 選擇也有不同 02/11 14:32
leolarrel: 所以上篇文尾有說你要用什麼語言繼續寫程式我沒有意見 02/11 14:34
CaptainH: C 模擬繼承只能像 GTK 那樣弄出個超複雜的東東 02/11 14:36
CaptainH: 然後也沒比較簡單 也沒比較快啊 02/11 14:36
leolarrel: 如果不是寫embedded,就別用C了吧,一推直譯語言的OO都 02/11 14:39
leolarrel: 比C++簡單多了 02/11 14:39
snaketsai: GTK is a freaking mess... 02/11 14:39
leolarrel: 另我認為gtk是個不好用的東西 02/11 14:40
zb26: jvm也在進化中...也許有一天CPU內建jvm micro code也不意外 02/11 14:42
zb26: C++被顯得落後的原因是JAVA進步太快了 02/11 14:42
leolarrel: zb26,曾經有公司有做這樣的計畫 02/11 14:43
zb26: c++曾經吸引一堆菁英高手使用它改進它,但今日同樣的動能在 02/11 14:43
zb26: Java 02/11 14:44
zb26: 我的專長剛好包含java/c,跟一點硬體(會寫點rtl但很弱) 02/11 14:44
zb26: java的潛力很大,如果有商業化CPU支援jvm...會逆天 02/11 14:44
zb26: leolarrel>我只知道有但不知道失敗原因,因為sun不玩了? 02/11 14:45
leolarrel: C++就是卡在中間,要低階沒C低階,要高階沒有p*語言高階 02/11 14:46
leolarrel: 好像要你命3千,是沒錯拉,什麼都有拉 02/11 14:48
Lordaeron: @zb26 http://en.wikipedia.org/wiki/Java_processor 02/11 14:52
Lordaeron: 十五年前就該逆天了? 02/11 14:52
leolarrel: 年輕時也覺得C++超威,瘋狂研究,老了發現用python幾行 02/11 14:55
leolarrel: 就搞定的事情 02/11 14:55
zb26: java processor在SUN歸天之後就沒戲了,現在觀察重點在看 02/11 14:59
zb26: arm/x86陣營何時來個jvm micro-code 02/11 14:59
zb26: 然後一堆高手也在想法突破jvm的瓶頸,尤其gc這塊 02/11 15:00
zb26: 實務上,大家用jni直接調用逆天的c就搞定了 02/11 15:00
leolarrel: jni直接調用逆天的c ->聽起來像步槍搭配刺刀 02/11 15:10
noonOut: 結果下面推文討論的都是意識形態,不如開另一個標題 02/11 15:19
noonOut: 戰語言? 02/11 15:19
noonOut: 戰語言我就不參加了 我只是想表達我覺得得好而已 02/11 15:20
leolarrel: 你一開始是要"幫C++說說話",現在是"只是想表達我覺得好 02/11 15:52
Lordaeron: wiki中不是也有ARM 版本的嗎? SUN 被吃也是近幾年的事 02/11 15:53
leolarrel: ".其實不要怕戰語言,捍衛自己認為對的事情是很正當的 02/11 15:54
BlazarArc: 推推 我也認為C++要學比較久,但是用起來比C好用多了 02/11 15:57
BlazarArc: 寫純C code有夠痛苦 02/11 15:57
noonOut: 我不怕啊 只是覺得戰意識形態浪費時間 事實上你的回應讓 02/11 16:02
noonOut: 我有點心灰 就這樣吧 02/11 16:02
zb26: 如果你已經是C++高手,轉用java或其他OO一點問題沒有 02/11 16:43
zb26: 所以不用心灰 02/11 16:43
zb26: 只是你可以多關注一下java vs c++的發展,在我看c++是越來越 02/11 16:44
zb26: 被限縮應用領域...如果你有看到c++很蓬勃的領域也歡迎分享 02/11 16:44
zb26: 自己更新一下,能夠支援java byte code的技術:Jazelle 02/11 16:58
noonOut: 我是對於這樣的討論很心灰。c++ 發展的領域喔?java runt 02/11 17:05
noonOut: ime 算嗎? 02/11 17:05
noonOut: zb26 也分享一下你為什麼喜歡 java 吧? 02/11 17:07
zb26: 其實我只喜歡C XD Java是已經看到太多big date類的專案 02/11 17:08
zb26: 開頭就用java (而不是c++或其他) 02/11 17:08
zb26: big data 手殘 02/11 17:09
zb26: java用OS模擬器等級來處理語言問題,try-catch/exception 02/11 17:10
zb26: 實在太好用..GC太好用(也被罵很慘) 02/11 17:10
zb26: 還有JAVA的lib多品質又好。很容易快速組出一個系統程式來 02/11 17:12
zb26: 我會認為JAVA的LIB品質好是因為這個語言能被誤用的特性少 02/11 17:12
zb26: 但是講到語言特性很多高手就會反駁說他用就不用XD這就不說了 02/11 17:12
zb26: 不會 02/11 17:13
noonOut: 我本來也寫 C,直到我覺得明明編譯器可以做的事情我卻一 02/11 17:47
noonOut: 直重做,很崩潰。還有一些明明 RAII 可以處理掉的事 02/11 17:47
noonOut: 或是 macro 用一堆 只為了一點點小不同 02/11 17:48
noonOut: py 要寫的精練很難,但是很漂亮 只是我目前沒打算用 02/11 17:49
noonOut: java 大概會是我的下一步 因為我也很愛 jvm 其實 02/11 17:50
noonOut: 沒有特別的目的要學語言不容易 但我覺得 java 應該會很 02/11 17:51
noonOut: 有的玩 02/11 17:52
noonOut: 以前一度和 java 很熟,後來就不熟了 02/11 17:53
noonOut: 以前不喜歡還有個原因,就是沒有純 open 的 implementati 02/11 17:55
noonOut: java 早期是 apache 的主場,所以 lib 都不錯,像你說的 02/11 17:56
noonOut: C++ 是 11 出了以後重新愛上 黑暗年代真的讓人不想摸 02/11 17:59
zb26: 如果你是用強形態語言工作的,又是OO類不是底層語言類 02/11 18:22
zb26: 早或晚你都會遇到java的。JAVA捐出來公領域之後變得很活躍 02/11 18:22
zb26: 我可以這麼定義,雲等級的系統程式語言:java 02/11 18:26
zb26: 單機等級的系統程式語言:C 02/11 18:26