Yahoo奇摩知識+將於 2021 年 5 月 4 日 (美國東部時間) 終止服務。自 2021 年 4 月 20 日 (美國東部時間) 起,Yahoo奇摩知識+服務將會轉為唯讀模式。其他Yahoo奇摩產品與服務或您的Yahoo奇摩帳號都不會受影響。如需關於Yahoo奇摩知識+ 停止服務以及下載您個人資料的資訊,請參閱說明網頁。

?
Lv 4
? 發問時間: 電腦與網際網路程式設計 · 7 年前

高階程式語言是怎麼被開發出來的?例如:C語言

小弟我目前在自學C語言,算是初學者

看書看到一半就有個疑問就是程式語言是怎麼被發明/開發出來的?

我知道高階程式語言是透過編譯器或直譯器轉成機械語言給電腦執行

所以來每台電腦都有C的編譯器囉,不然電腦怎麼執行C寫出來的作業系統?

因為這樣所以還滿好奇,如此的高階語言到底是怎麼被開發出來的

問題2需要開發高階的程式語言需要怎麼樣的條件?相關知識?能力? 請簡答就好,因為很好奇罷了

注意:我不是問C的歷史

已更新項目:

剛剛看了意見,阿明說作業系統不需要裝編譯器就能動作了

這又是怎麼回事呢?難道作業系統不是C語言寫的?

6 個解答

評分
  • ?
    Lv 5
    7 年前
    最佳解答

    電腦基本上只認識二進位碼,也就是0101之類的東西,這個現在小學生都知道。古時候的電腦程式是靠著直接輸入這些二進位碼資料來執行,技術人員需要面對一臺大機器,然後更改許多開關的狀態(那時候的程式真的是常人無法看懂的),後來雖然有終端機出現但狀況差不了多少。而這種二進位碼,我們現在稱為「CPU指令集」。

    由於0110的東西實在太難以理解,於是有人想出何不用幾個簡單的英文單字來對應這些碼?建立一組二進位碼與某個單字的對照表後,我們就可以用單字(英文)來寫程式,再寫另一個軟體用來在執行前將這些字詞按照對應表轉換成二進位碼,然後執行。這是程式歷史上重大的一步。至此,程式不需要科學家來寫,工程師也可以寫程式了!也從此開始,程式需要經過「編譯」後才能餵給電腦執行。而這種程式碼在當時就叫做「助憶碼」,現在叫做組合語言。

    電腦硬體約在二次大戰時期開始快速發展(1940~),到剛剛說的階段才不到十年,基本上是百家爭鳴、各憑本事。CPU各作各的,各有不同的指令集(相較於我們現在主流的只有幾種CPU架構比起來,當時又更亂了),至於什麼單字對應到什麼指令碼也是大家發揮想像。於是我為A電腦寫的程式到B電腦上要用B電腦的方式重寫一次,這個狀況到現在還是一樣(指組合語言而言)。

    回到那個關鍵的「對應表」上面,如果我們能做出一個統一的表,並且再拉高一個層次會如何?比方說要把一個數加上另一個數,在A電腦上要執行某兩個指令、B電腦上要執行另外三個指令,那我就規定X+Y這個寫法在所有的電腦上最後都要做出把他們加起來的結果,至於中間如何翻譯就大家自己想辦法吧!只要各家做電腦的願意按照我定的標準製做各自的編譯器,那麼就會有兩個好處:1.從此工程師寫的程式碼拿到別臺電腦不用重寫,只要用那臺電腦的編譯器重新編譯就行了。2.從此工程師不需要管太多電腦的執行細節,可以把心力放在解決數學問題上。剛剛說的東西就是所謂的高階程式語言在做的事,IBM的一位工程師JohnWarner Backus有感到工程運算發展的困難而開始想做一個通用的數學轉換器,於是1957年第一個高階程式語言FORTRAN出現在世界上。此後各家電腦廠在推出一套新電腦的時候幾乎都會同時開發一套為這臺電腦設計的FORTRAN編譯器。

    其實程式寫完編譯成二進位碼後,程式碼就不是必須的了,電腦只要有二進位碼就可以執行。至於程式碼是翻譯前用來給人看懂的東西,只要開發著有就好了。於是開發者需要寫程式也需要編譯器,最後的二進位檔直接發給別人就可以,別人並不需要編譯器也不需要程式碼,這是當前軟體程式發行散佈的成用模式。但是在那個年代不流行這一套,流傳的東西仍是以程式碼為主,有幾個原因:首先是當時的電腦主要用在科學計算上,更注重計算方法的研究而不是販售軟體,畢竟全世界也沒幾臺電腦。第二是當時的電腦硬體仍然在發育階段,還沒有一個廣為流傳單一硬體架構,作業系統的概念也還在萌芽,基本上每一臺電腦都有自己的系統架構,也有自己的編譯器,程式碼在每臺電腦上都要重新編譯。因此程式碼才是真正能夠流通的東西而不是二進位檔,也因此當時每臺電腦上都有各自的編譯器,雖然在當代來看這些都不是終端用戶所必須的。

    至於作業系統他本身也是一個程式,編譯完成後就是一堆二進位碼。作業系統的出現是為了因應越來越強大的電腦資源,為了資源上的統一統籌分配管理而存在。由於作業系統本身需佔用不少資源,當時的人還曾經爭論作業系統有沒有意義?是不是必須?把大量寶貴的電腦資源給作業系統佔用而不是用來做實質的計算是否值得?當然,我們不能以現在的眼光去批判當時的人的主張。

    再回來提一下C語言,當時AT&TBell 實驗室的DennisMacAlistair Ritchie為了要開發新的作業系統UNIX,卻嫌棄當時眾多高階程式語言都不符合需求,於是以B語言為藍本開發出影響電腦產業至劇的C語言(時代的偉人就是不一樣),然後用C語言重寫UNIX。至於如何開發一個高階程式語言?其實語言本身重點就只有那個「轉換規則」而已,你我甚至可以自己定一個獨一無二的規則(也就是所謂的語言標準),出一張嘴空口白話都沒關係。各編譯器廠商再依這標準實做各個系統上可用的編譯器。以C語言為例,那個轉換標準就是由國際標準組織所規定的,而且還與時俱進在更新中的C89、C99、C11這些東西。被實做的編譯器就是像BorlandC++、GCC、VisualC++ 這些東西。

    雖然說每個人都可以自己出一個新的語言標準,但是這個語言如果要能夠被使用流傳的話會面臨一些實際的問題:1.定的標準是一回事,按這標準實做的編譯器能不能被做出來又是另一回事,比方說很早以前人們就對基於自然語言的程式語言遐想很久了...

    2014-01-08 00:05:56 補充:

    2. 新的語言能否比舊的更好?或特別擅長當今已存語言所做不到或難以實現的領域?不然人家為什麼要放棄已經熟悉的語言去學這個?FORTRAN存活是因為他沒有敵人,C語言存活因為他比B更好,Java存活是因容易的寫作加容易的跨平臺,Bash能不被C++ 打敗是因為他們根本是兩個世界的東西...

    2014-01-08 00:06:05 補充:

    3. 有時候一個程式語言能不能存活和商業利益與策略考量有關,而與他本身的是否優異沒有太多的關聯,比方說「號稱」可以跨平臺的 C# 自始至終除了微軟沒有別的公司在開發他的編譯器和虛擬機、除了Windows外也沒有別的系統給他支持、後面又要和Java廝殺,但是在微軟的強力支持和推動下,他活下來了。

    2014-01-08 00:06:12 補充:

    不知這樣有沒有回答到你的問題?特別是關於如何開發新的程式語言這部份我自覺沒有寫的很好。

    如果有什麼不妥的地方還請大家更正、補充,謝謝。

    2014-01-08 16:11:32 補充:

    Q:作業系統不需要裝編譯器就能動作了這又是怎麼回事呢?

    A:啊就只要有二進位碼就可以了啊?

    Q:難道作業系統不是C語言寫的?

    A:害我昨天為了你寫到三更半夜,早知道你不會看的話我就不要寫了。

    參考資料: Google,人月神話
  • 6 年前

    seo軟體,行銷軟體,發商品文賺獎金的軟體,請看看blogseo, http://urx.nu/4X33

  • 匿名使用者
    7 年前

    →電腦筆電維修~電腦重灌~電腦組裝~重灌win7~xp重灌~

    →電腦中毒~電腦無法開機~電腦變慢~

    →筆電win8改win7~MAC改win7 or 雙系統

    ◎◎◎各式各樣電腦問題,問他們就對了◎◎◎

    →他們會很快解決你的問題 也可以免費諮詢喔!

    →北市可以到府收送喔!評價很高

    收費便宜●技術超好●修不好不收費

  • ?
    Lv 4
    7 年前

    Q:難道作業系統不是C語言寫的?

    A:害我昨天為了你寫到三更半夜,早知道你不會看的話我就不要寫了。

    我當然有看阿,我發問就是要求答案

    意見也有看所以才會作補充發問

    對不起是我問的方法不對

  • 阿明
    Lv 5
    7 年前

    早期沒高階語言年代,用組合語言指令,也就是幾個英文字母代碼對應一機械碼的指令,用組合語言寫程式也不是完全一個一個組合指令的慢慢寫,而是用很多組合語言指令組成一巨集指令或是副程式,然後用類似高階語言的巨集指令或是呼叫副程式寫程式,低階組合語言的組譯器,你可以定義C語言巨集指令,讓它變成類似C語言的編譯器,讓組合語言的組譯器變成像C語言,只差編譯器除錯功能不完整,這就是高階語言前身,作業系統不需要裝編譯器就能動作

    2014-01-08 20:24:14 補充:

    任何不同作業系統、不同cpu、網頁、手機,平板電腦….. 裝了Java 直譯器,就能執行Java 應用程式,Java是一種跨平台虛擬機器,透過Java直譯器的虛擬機器,把不同平台作業系統,或cpu的機器碼用JAVA虛擬機械碼把指令統一,不管那一種cpu或作業系統只要Java 直譯器,就能執行Java 應用程式。

    其他語言的程式寫好編譯後,直接產生那一顆cpu機械碼,不需要直譯器或 編譯器能執行,這種方式不能跨平台、但執行速度快、不需直譯器做翻譯機械指令動作

  • ?
    Lv 5
    7 年前

    >需要開發高階的程式語言需要怎麼樣的條件

    有興趣的話去修 compiler-compiler

還有問題?馬上發問,尋求解答。