編譯器用什麼語言寫的好
第一個C語言編譯器應該是用匯編寫的,但是第一個成熟的C語言編譯器應該是由匯編和C語言共同寫的。
編譯原理講到了「自舉編譯器」。大意就是先用底層語言(應該是匯編)寫一個能運行,但效率極低的C語言編譯器(底層語言不好優化),有了C語言的編譯器以後,就可以用C語言好好寫一個編譯器了,用之前那個運行沒問題,但效率低得編譯器編譯一下,就得到了可以使用的編譯器了。
② 編譯器一般由哪種語言開發
其實我在想為什麼匯編語言生成一個簡單的編譯器後,可以用新生成的編譯器再次生成編譯器,例如,C語言開發C的編譯器呢?
這是一個遞歸的思想,舉個例子一看就明白了
用一個大的模具可以生成一個A模具,A模具可以做出來B模具,依次往下推,最終這個小模具可以做出來小盒子用來裝東西。
第一個大模具肯定是手工做出來的第一個模具,但是有了這個大模具後,後面就可以用他自動的生成更多的模具,後面的各種模具加起來又可以造出來更精緻的模具,
所以,自動第一個大模具造出來模具的時候,大模具就可以被拋棄了。
我們都知道編譯程序通常分為下面五個階段:
1)詞法分析
2)語法分析
3)語義分析與中間代碼產生
4)優化
5)目標代碼生成
當然最難的一點就是目標代碼的生成,這一階段實現了最終的翻譯,就是真正把原碼翻譯成可以被CPU直接計算的機器碼(NativeCode)。
③ 為什麼c語言的編譯器可以用c語言來寫
所謂C語言編譯器,就是把編程得到的文件,比如.c,.h的文件,進行讀取,並對內容進行分析,按照C語言的規則,將其轉換成系統可以執行的二進制文件。
其本質在於對文件的讀入,分析,及處理。這些操作,C語言都是可以實現的。
所以用C語言來做C語言的編譯器是完全可行的。
但是,歷史上的第一個C語言編譯器,肯定不是C語言寫的,因為在沒有編譯器時,無法把C語言轉換成可執行文件。
只要有了第一版其它語言的編譯器,就可以用C語言寫編譯器了。
事實上,目前大多數的C語言編譯器,都是用C語言寫的。
④ C語言的編譯器是用什麼語言寫的
C語言的原型ALGOL 60語言。(也稱為A語言)
1963年,劍橋大學將ALGOL 60語言發展成為CPL(Combined Programming Language)語言。
1967年,劍橋大學的Matin Richards 對CPL語言進行了簡化,於是產生了BCPL語言。
1970年,美國貝爾實驗室的Ken Thompson將BCPL進行了修改,並為它起了一個有趣的名字「B語言」。意思是將CPL語言煮干,提煉出它的精華。並且他用B語言寫了第一個UNIX操作系統。
而在1973年,B語言也給人「煮」了一下,美國貝爾實驗室的D.M.RITCHIE在B語言的基礎上最終設計出了一種新的語言,他取了BCPL的第二個字母作為這種語言的名字,這就是C語言。
看到了不 最早的C編譯器當然是B語言寫的了
⑤ 一些著名的軟體都用什麼語言編寫
一、操作系統:
Microsoft Windows : 匯編 -> C -> C++
備註:曾經在智能手機的操作系統(Windows Mobile)考慮摻點C#寫的程序,比如軟鍵盤,結果因為寫出來的程序太慢,實在無法和別的模塊合並,最終又回到C++重寫。
相信很多朋友都知道Windows Vista,這個系統開發早期比爾蓋茨想全部用C#寫,但是最終因為執行慢而放棄,結果之前無數軟體工程師日夜勞作成果一夜之間被宣告作廢。
Linux :C
Apple MacOS : 主要為C,部分為C++。 備註: 之前用的語言比較雜,最早是匯編和Pascal。
Sun Solaris : C
HP-UX : C
Symbian OS : 匯編,主要為C++。 (諾基亞手機)
Google Android :2008 年推出: C語言(有傳言說是用java開發的操作系統,但最近剛推出原生的C語言SDK)
RIM BlackBerry OS 4.x : 黑莓 C++
Microsoft Windows UI : C++
Apple MacOS UI (Aqua) : C++
Gnome (Linux圖形界面之一,大腳): C和C++, 主要是C。
KDE (Linux圖形界面) ,C++。
Google Desktop Search : C++
Microsoft Windows Desktop Search : C++
Beagle (Linux/Windows/UNIX 下): C# (基於開源的 .net : Mono)
Microsoft Office : 在 匯編 -> C -> 穩定在C++
Sun Open Office : 部分JAVA(對外介面),主要為C++ (開源,可下載其源代碼)
Corel Office/WordPerfect Office : 1996年嘗試過Java,次年被拋棄,重新回到C/C++
Adobe Systems Acrobat Reader/Distiller : C++
Oracle : 匯編、C、C++、Java。主要為C++。
MySQL : C++
IBM DB2 : 匯編、C、C++,主要為C。
Microsoft SQL Server : 匯編 -> C->C++
IBM Informix : 匯編、C、C++,主要為C。
SAP DB/MaxDB : C++
Microsoft Internet Explorer : C++
Mozilla Firefox : C++
Netscape Navigator : The code of Netscape browser was written in C, and Netscape engineers, all bought to Java (see M. Cusumano book and article) redeveloped the browser using Java. It was too slow and abandoned. Mozilla, the next version, was later developed using C++.
Safari : (2003年1月發布)C++
Google Chrome : (2008的發布)C++
Sun HotJava : Java (死於1999年)
Opera : C++ (手機上佔用率比較大)
Opera Mini : Opera Mini (2007) has a very funny architecture, and is indeed using both C++ and Java. The browser is split in two parts, an ultra thin (less than 100Kb) "viewer" client part and a server side responsible of rendering. The first uses Java and receives the page under the OBML format, the latter reuses classical Opera (C++) rendering engine plus Opera's Small Screen Rendering, on the server. This allows Opera to penetrate various J2ME-enabled portable devices, such as phones, while preserving excellent response time. This comes obviously with a few sacrifices, for instance on JavaScript execution.
Mosaic : 鼻祖(已死) C 語言
Microsoft Outlook : C++
IBM Lotus Notes : Java
Foxmail : Delphi
Microsoft Visual Studio : C++
Eclipse : Java (其圖形界面SWT基於C/C++)
Code::Blocks : C++
易語言: C++
火山中文: C++
火山移動: C++
Microsoft .Net CLR (.NET的虛擬機): C++
Java Virtual Machine (JVM) : Java 虛擬機:C++
SAP mySAP ERP : C,後主要為「ABAP/4」語言
Oracle Peoplesoft : C++ -> Java
Oracle E-Business Suite : Java
Business Objects : C++
Adobe Photoshop : C++
The GIMP : C
Google : 匯編 與 C++,主要為C++
eBay : 2002年為C++,後主要遷至Java
facebook : C++ 和 php
This line is only about facebook, not its plugins. Plugins can be developed in many different technologies, thanks to facebook's ORB/application server, Thrift. Thrift contains a compiler coded in C++. facebook people write about Thrift: "The multi-language code generation is well suited for search because it allows for application development in an efficient server side language (C++) and allows the Facebook PHP-based web application to make calls to the search service using Thrift PHP libraries." Aside the use of C++, facebook has adopted a LAMP architecture.
阿里巴巴和淘寶: php->C++/Java(主要用)
匯編、C、C++
星際爭霸、魔獸爭霸、CS、帝國時代、跑跑卡丁車、傳奇、魔獸世界.... 數不勝數了,自己數吧
都是用C++開發的,C++語言靠近系統地稱,執行速度最快。比如你的兩個朋友與你分別玩用VB、Java、與C++編寫的「跑跑卡丁車」,你玩C++編寫的 游戲 已經跑玩結束了,發現你的兩個朋友還沒開始跑呢,那是相當的卡啊,
Microsoft Visual C++ 編譯器: C++
Microsoft Visual Basic 解釋、編譯器: C++
Microsoft Visual C# : 編譯器: C++
gcc (GNU C compiler) : C
javac (Sun Java compiler) : Java
Perl : C++
PHP : C
Microsoft DirectX : C++
OpenGL : C
OGRE 3D : C++
Apache : C和C++,主要為C
Microsoft IIS : C++
Tomcat: Java
Jboss: Java
Microsoft Exchange Server : C->C++
Postfix : C
hMailServer : C++
Apache James : Java
Nero Burning ROM : C++
K3B : C++
Nullsoft Winamp : C++
Microsoft Windows Media Player : C++
Microsoft Windows Media Player : C++
eMule : C++
μtorrent : C++
Azureus : Java (圖形界面使用基於C/C++的SWT,類Eclipse)
TomTom : C++
Hertz NeverLost : C++
Garmin : C++
Motorola VIAMOTO : 2007年6月,停止服務。 Java。
Microsoft DirectX : C++(相信玩 游戲 的同學都知道這個,現在最高版本是DX11)
OpenGL : C
OGRE 3D : C++
Apache: C
Nginx: C
IIS: C
OpenStack: python
綜述
著名的軟體一般是系統軟體,軟體一般都分為系統軟體和應用軟體。開發軟體分為一次開發和二次開發,比如開發操作系統(系統軟體),就是一次開發;在操作基礎上進行應用軟體的開發,比如開發 游戲 ,就是二次開發。
一次開發的系統軟體,要直接調用硬體資源,必須使用簡單、直接的底層語言和中層語言,比如匯編和C語言;二次開發應用軟體等,因為應用軟體的類別比較多的,針對的情況比較復雜和具體,因此可以選擇的語言很多,比如,大數據人工智慧方面的有Python;安卓手機APP就是Java等等。
這里還有一個誤區,其實語言不重要,每種語言都差不多,重要的是開發環境和編程思想。要學習編程開發,學的不是語言,而是對於開發環境工具的使用和編程思維的錘煉。很多著名的軟體都是用C等底層語言編寫的,但是也可以用其他語言編寫,不過很少學C了,其中有商業的原因。(後面會解釋)
集成開發環境軟體計算機語言是不可以單獨拿出來說的,比如我們說C語言,指的是C語言編譯器,而Python語言,指的是Python解釋器。而編譯器和解釋器卻都是用C語言編寫,是不是很意外,所以著名的軟體一般都是系統軟體,使用的是C語言,一個語言就要初中水平就可以學會了,但必須了解IDE開發環境。
要使用計算機語言,就必須安裝編譯器,或者是解釋器,程序員是在TXT文本上編寫語言的,用編譯器可以一次性編譯為可執行文件exe,用解釋器則可以逐條翻譯成機器語言並逐條執行。編譯器速度快,解釋器可以跨系統,到了別的系統,不需要程序員改寫程序,換一個解釋器就行了。
IDE集成開發環境具備圖形操作界面、編譯器、調制器、控制台,是非常重要的開發工具的,只會一個計算機的語言語法,卻不會使用IDE,基本上是沒用的!
編程思想很多著名的軟體都是使用C等底層語言編寫的,而且所用的都是編譯器。當然還有另外一個原因,就是編程思想,C語言是面向過程,Python是面向對象。很明顯,一次開發的系統軟體肯定是面向過程的,而面向具體使用場景的應用軟體肯定是面向對象的。
高手可以自由使用編程思想、程序編寫時,交替使用各種語言、切換解釋器或者編譯器,達到隱藏核心代碼目的;又或者軟體的核心模塊採用C等底層代碼,保證軟體的運行速度。畢竟開發時都是模塊化的,不同模塊使用不同的方法都是可以的!
所以很多著名的軟體,往往是混合著各種語言,核心部分是C,其他部分則根據不同的情況選用不同語言,之所以會這樣做,是因為使用C開發軟體要耗費大量的時間太。摩爾定律推動硬體發展,軟體開發也受到影響,一個軟體晚幾天推出市場,效果完全不同,所以程序員經常加班趕工,速度才是最重要的。
總結如上所述,著名的軟體是使用C等底層語言、編譯器語言、面向過程的語言編寫的,更多的是在一個軟體的核心部分使用C等底層語言、編譯器語言、面向過程的語言,其他則見機行事。
現在主流的語言是java、python和go