Ⅰ 反編譯就真的那麼難
C#的程序很好反編譯,基本能還原成原代碼,
Ⅱ 開發一個 C++ 編譯器的難度有多大,難點又在哪裡
C++的前端是出了名的復雜度和可靠性要求並駕齊驅的軟體。
(這兩點都比它高一個數量級的大概就只有OS了)
對於這種系統,唯一的辦法就是燒錢。
燒錢的作用主要包括:
1.留人;
2.填坑;
3.買買買。
先說留人:復雜度一般是「細節」的代名詞。現實中的編譯器大多數以遞歸下降為主,自底向上的歸納推導為輔。這兩樣在教科書上也就是幾頁紙的事情。但是現實總是很殘酷的,人們總想讓語言更加「易用」,這就意味著各種上下文相關的情況都會出現。
對於C++來說,你要判斷一個符號是類型或者變數(比如這個符號被用在模板參數中),要看前面的聲明/定義。這就是一個上下文相關的推導。然後你就會寫大量的if else switch case之類的代碼來解決各種各樣的可能分支。寫它的人當然知道它是做什麼的,但是如果這個人離職了,新來一個人,就呆掉了,這寫的都是什麼煞筆玩意兒。因為它不知道現實中怎樣的需求會導致奇形怪狀的邏輯。所以人員的穩定,對於這種長周期迭代、邏輯復雜的項目是很重要的。但是人的水平要求高嗎?不算高也不算低。總結來說就是:有邏輯,知好歹。技術什麼都可以培養,但是態度和基本智商是比較難培養起來的。
至於怎麼保證人員穩定?很簡單:加薪。
再說填坑:編譯器是對正確性要求很高的基礎軟體。這里的正確性既包括產生的代碼的正確性,也包括編譯器自身對於各種問題的容忍度和足夠豐富的錯誤提示。容錯和錯誤提示本身也是代碼,也有很大的出錯幾率。所以這些軟體,bug少不了。但是作為基礎軟體,你又不能隨便就2+3搞成了2*3,這樣還怎麼讓別人相信愛情。所以要燒很多錢來養一幫debugger。
再說買買買:古人日:我們不用很麻煩很辛苦也可以成佛。既然這么費神我們自己做干什麼,不如買別人的吧。於是MS就乾脆不自己做了,直接去EDG整了個前端,這樣就可以少了不少人年。這就是傳統土豪和水果這種新暴發戶想的不一樣的地方。
傳統土豪想的是:我們有這么多錢為什麼還要自己解決問題呢?買買買!
水果新貴則是:啊呀,不小心有了這么多錢,我們要不要給自己製造點問題好把這些錢花出去?
Ⅲ 反編譯為什麼很困難A翻譯成B,再把B翻譯成A不是很容易,
編譯相當於:
把一頭牛分解成分子形式。
反編譯相當於:
把分子組合成牛。
編譯基本上不可逆。
翻譯的過程:
把牛翻譯成牛的另一種等價形式。
這與編譯有本質的區別。
Ⅳ 為什麼安裝個VC++6.0編譯器這么難
初學C++還是不要用VC6.0了。這個編譯器除了速度快一些,不標准、BUG多,一無是處。
推薦Dev-C++,一個小巧、標准、免費的C++開發環境,有中文版,各個軟體站都有下。
Ⅳ 編譯原理的難點
1.錯誤認識: 很多人以為編譯原理只能應用在寫程序語言的編譯器上,覺得用處不大,學習興趣不高.而且可能覺得寫編譯器就必須完全手工來寫.
2.自動機理論: 象NFA,DFA之類,比較抽象,要費些腦子,特別如果學離散數學時沒有學自動機理論的話,更是需要多花點時間.
3.集合論的推演: 主要是一些閉包運算之類,數學基礎不好的話,學起來也會感到吃力.
4.LR文法: 主要是又引入了自動機
Ⅵ 為什麼C++編譯比C語言編譯慢很多
C++特性比C多,例如面向對象,語法比C復雜,例如重載,默認參數等,此外標准庫也比C庫強大,當然對編譯器的要求也就更高。C++編譯器相對於C編譯器要做的事情多很多,所以編譯起來相對較慢啦。
Ⅶ 為什麼編譯原理如此難於理解
找一下視頻教程看有助於理解不
Ⅷ 中文編程的難點在哪裡為什麼不經過多次編譯,把中文編譯成計算機可以識別的語言
用來做小程序還可以。對於強大到包羅成象,無所不能的VC++來說,並不是說中文編程在邏輯上無法實現,而是單單製作這樣一款編程工具沒有十幾年的時間都難以完成。
即便是有這樣一款工具,在編程時,也必然摻雜著大量的C++語言。換句話說,學習的時候不僅要學中文的,還必須知道它在編譯成英文時是什麼樣子,否則很難判定出錯的原因。
這就是為什麼我們在學習一些專業的知識時,為什麼看了中文的資料,還必須去尋找外文的原稿一樣
Ⅸ 編譯原理難嗎
編譯原理我覺得不是最難的,或者是讀得很淺所以不覺得難。在計算機基礎課中最難的我覺得是操作系統,很難很重要,但是很少人會去重視,基本都是草草的上課草草的學了,不得精髓;次之演算法也很難,不止是理論,實際用用也難。
國內985本科編譯能教的大約是半本龍書組成的前端加一個基本的後端,不難。但是實踐的工作量大。認真做一個編譯器至少兩三萬行C++的工作量,只有半個學期的時間,壓力很大。當然,compiler的可玩性不錯,不那麼枯燥。
Ⅹ 中文編程的難點在哪裡為什麼不經過多次編譯,把中文編譯成計算機可以識別的語言
難到不難,只是沒有必要。作為一個工作幾年的IT民工,我可以告訴你,有簡單的英文,你敲代碼的速度要快的多。而且要看英文文檔的,就語言這點英文簡直。。。甚至basic中的begin end我都閑麻煩,大括弧多省事。