理論上,能否直接用彙編語言寫出今天所有的計算機程序?


理論上,只是個工作量問題。不過量變可以引發質變。一個人能夠集中精力高效解決邏輯問題的年華畢竟有限,而編程的問題大多數是無法嚴格形式化的問題,也沒辦法做到輩輩相傳愚公移山。另外,如果沒有很快的出現低級應用,也不會出現面向高級應用的市場,沒有市場驅動也養不起那麼多程序員。

說個不太合適的笑話,這就像一台可以預測明天天氣的計算機,但是要計算兩天才能出結果。


用抽象思維來簡化解決問題的方式,是人類思維固有的特性,高級語言不是被發明出來的,而是人類思維在解決編寫計算機程序這個問題上自然的發展。

一個程序員,不管用什麼語言開發,最初都是一行一行寫程序,有了一定經驗就會一塊一塊寫程序,不管是用CP大法還是定義宏,總之操作程序的單位逐漸變大,即使不換語言,有多年經驗的程序員也可以高效率地構造出大型程序,因為他的操作單元大小可以是幾千行甚至幾萬行,通過組合這些單元,就能完成百萬行規模的大型系統。

這些操作單元會逐漸固定下來,最後只需要一行代碼就可以引用。這時候,把這些固定下來的引用代碼每一行起一個容易記憶的代號,如果想要創造新的語言,就把這些代號當作新的語言中的指令,如果不想,就讓它們成為舊的語言中的語法糖。因為創造新的語言更容易讓個人的虛榮心得到滿足,所以很多程序員會選擇前者,於是各種高級語言自然就出現了。

使用高級語言符合人類懶惰的天性,學習低級語言的人越來越少,幾代人之後,最初的低級語言逐漸被人忘記,於是產生了一種假象,好像程序只能用高級語言編寫,最初的低級語言不能完成這些工作。

最初從低級語言創造出高級語言的程序員可能已經不在了,即使還活著年紀也很老了,無法表演如何用低級語言來構造大系統。他所用的技巧的原理寫在書里,但是細節已經被時間抹去,除非有人肯去重複這個摸索的過程,否則無法再現他當年所做的那些事。


不能,因為


其實每次你編譯的時候都是把你的代碼發往印度,然後印度人民把你的代碼重寫成二進位程序


這和手寫視頻有異曲同工之妙


從理論上來說,如果兩種語言都是圖靈完備的,那麼它們就是等價的,也就是說,用其中一種語言編寫的程序,就能被轉換為用另一種語言去寫。事實上,目前所有程序(馮諾依曼體系下)都是被轉化為機器指令來執行的,而大部分情況下機器指令與彙編指令可以認為是一對一關係。從這個層面來看,用彙編語言寫出今天所有的計算機程序,回答「能」貌似沒有問題。

但是你自己如果真的想單純用彙編去構建一個大型軟體,你會發現簡直無從下手,我臆測題主也是因為有這個感覺才提出這個問題的。那麼感覺無從下手的原因是什麼呢?我贊同這個回答:理論上,能否直接用彙編語言寫出今天所有的計算機程序? - 匿名用戶的回答,這就像你要把從造第一個輪子開始到造出一輛汽車的整個文明發展過程純手工復現一遍,顯然是不可能的。


不能,這跟人類能否直接用徒手從原始文明重現現代文明一樣, 肯定是簡單-複雜,用機器製造更複雜精度更高的機器,而不是一個個徒手造輪子,否則窮其萬年也完不成。


當然可以!

只是,在寫的過程中,程序員會因為 彙編 的開發繁瑣、低效,而自動創建出 高級語言,再用它們進行編寫了。。。。

程序員是最無法容忍 機械重複 的


可以啊,用編譯器直接翻譯,其實也沒啥工作量。


理論上就不可能,軟體工程的複雜度並不是一個線性增長的模型。


我傾向於認為不可以,不能嚴謹證明,不過大體思路是這樣:

每一個行為都增加系統內的熵,每一個運作的系統只能承受固定的熵。讓系統運作起來的動作越多那麼混亂度飽和前系統運作起來的概率就越低。彙編實現大軟體要求的動作數實在太高了。


理論上能,然而時間上不允許。


猴子足夠多的情況下…


理論上當然可以啦,因為所有的程序語言: 彙編 、c、c++、java、php、js等等等 我們生活中經常會用到一些成型軟體開發所使用的語言,最後都是通過一層層代碼解釋器解釋成 CPU中的1和0,再直觀點就是cpu中幾十億晶體管中的 開和關,這些開關通過互相嵌套邏輯組合可以抽象實現布爾代數 與門、非門、與非門、或非門等等,到最後通過布爾代數層層嵌套一步一步來實現你在一台裝好操作系統的電子計算機上想要的一切操作後所實現的效果...... 大體原理上就是這樣... 只要你有足夠的精力和相關知識儲備你也可以自己在機器碼也就是一堆1和0的基礎上自己開發語言來間接實現控制計算機計算,其實計算機語言說白了很簡單很簡單,最後你可以這樣理解

所有的計算機程序語言的工作原理;就是通過一些貼近人類交流的文欄位來間接實現cpu中晶體管中的開和關兩種狀態,通過幾十億晶體管的開和關來實現你從顯示器上所想要看到的顯示結果...從邏輯上通俗直白點講就是這麼簡單...

當然 ,這只是局限於理論上,實際操作過程中 計算機是只認識一堆1和0的,如果你用一堆1和0來控制另一堆1和0;再一步步間接實現你想要的計算結果...想想這工作量有多麼恐怖...所以在計算機的發展史上很多人意識到了這點,程序語言也就一步步迎刃而生了。。。。。


不可以,不過你可以用VHDL(滑稽)


問題已經是基於「理論上」了,看到有些答案,真為你們的智商捉雞啊


可以。把程序和解釋器反彙編。把腳本當作數據。


高級語言-&>彙編語言-&>機器語言

理論上,機器只能識別最後一個。我們寫的高級語言會被翻譯成彙編語言,再被翻譯成機器語言,所以,理論上,高級語言能做到的事,用機器語言也能做到,甚至於更靈活!但是,簡單的一小段高級語言代碼,可能就意味著成千上萬行的彙編,更不要說是操作系統這種東西了。所以,能夠實現也只是在理論上。



不能,等到寫完今天的所有的程序後,已經十年後了


推薦閱讀:

國外計算機最好的大學有哪些?
原碼、反碼、補碼的產生、應用以及優缺點有哪些?
舊電腦如何處理才能資源最大限度利用?
晶圓為什麼是圓的?

TAG:軟體 | 編程 | 計算機 | 彙編語言 |