“我一直弄不懂windows程序是什么?也不知道c++與windows程序有什么關(guān)系,哪位高手知道,能不能告訴我一下,謝謝……”
反正天黑,我就胡扯一通,才發(fā)現(xiàn)完全答非所問。寫到這里來。
--------------------------------------------------
Windows 是一個(gè)操作系統(tǒng)……
操作系統(tǒng)必須支持他人(軟件開發(fā)人員)在它上面開發(fā)出新程序……
開發(fā)程序,自然要有開發(fā)語言的選擇,c? c++? pascal? BASIC? C#? java?Python??
這些語言在這個(gè)層面上,并不是平等的……
因?yàn)?,為windows等操作系統(tǒng)最初只提供了一種語言的開發(fā)接口——
那就 C語言。
這當(dāng)然也不能懷疑微軟開發(fā)人員偷懶,而是因?yàn)椤?/p>
因?yàn)闅v史的原因,C語言尾隨匯編被選為操作系統(tǒng)開發(fā)的主要語言。
而在對外(提供給軟件開發(fā)人員上)接口語言選擇上,匯編不僅太復(fù)雜了,而且是硬件相關(guān)的……
所以(加上種種其它原因),歷史讓C語言成為了操作系統(tǒng)開發(fā)接口上的第一語言。
事情當(dāng)然不會僅僅是這樣……
因?yàn)槿绻麅H僅操作系統(tǒng)的支持,那C語言也稱霸不了多久……
關(guān)鍵是,既然操作系統(tǒng)不直接支持其它語言……
那其它語言就只好倒過來去支持操作系統(tǒng)——
所謂既然沒辦法讓山走向穆罕默德,但穆罕默德可以走向山。
而c++,c,pascal,java,python等等語言,雖然在走的方式上有所不同,
但都要走向操作系統(tǒng)這座山,
既然操作系統(tǒng)這座山的近乎唯一的路是C語言——
所有開發(fā)語言就只好放下身段
都提供了對C的支持(編譯的或者鏈接的)。
關(guān)于C就這樣了:
?操作系統(tǒng)是天子
其它語言是諸侯
那句曹孟德說的話,我就不說了。
C的江山就是這樣打下的。
八仙過海,各顯神通……
現(xiàn)在來說說它們各用各的什么招數(shù)走入C的內(nèi)心……
C++
既然你問的C++,那我就先說它,并且說得正經(jīng)一點(diǎn)——
c++,噢,它是走得最近的,基本在語言,語法上都完全兼容C。
當(dāng)初世上最早的C++編譯器,不過是把C++語言直接翻譯成C語言,
然后再調(diào)用C語言的編譯器……
如果那時(shí)候有馬甲這個(gè)詞——
Cer 一定要嘲笑Cpper了,說它們是馬甲,是山寨,是……
但隨著名稱為“C with class”到"C++"的變換……
這一切都是過去式了,C++終于有了真正的編譯器,
可以直接將C++搞成匯編,不再需要通過C的中轉(zhuǎn)。
當(dāng)然了,C++也可以直接使用匯編 。
而語言的兼容,以及庫的兼容依然不變。
雖然后面二者慢慢的也有一些各走各的路了,但——
C++永遠(yuǎn)是眾多語言中,對C最直接的支持者。
?Pascal
Pascal曾經(jīng)是C的競爭者……
曾經(jīng)在在歐洲大陸,它的使用者甚至比C還多……
因?yàn)?,它是學(xué)院里首選的語言。
它有自己的庫……比如那些數(shù)學(xué)庫,這其中原因,當(dāng)然是因?yàn)椋?/p>
它同樣可以驕傲直接使用匯編語言,以及
它覺得其實(shí)自己在效率上根本不比C差。
WINDOWS提供的函數(shù)接口形式,最初就命名為PASCAL
不過……歷史沒有選擇它,大概是因?yàn)椤?/p>
人類總是懶的,誰讓在用花括號的地方,pascal偏偏喜歡用begin和end呢?
當(dāng)然,這是一句玩笑話。
誰當(dāng)真誰是250——C采用的{},在N多國家的鍵盤上,根本找不到。
這一點(diǎn)還得倒過來說pascal有國際觀……
言歸正傳,歷史在發(fā)展,操作系統(tǒng)作用突然變大……
于是pascal終于還是要能調(diào)用C的函數(shù)……
用于Delphi的老人都知道,它要調(diào)用windows的某個(gè)DLL,那個(gè)方便的,VB簡直要流汗——
MS自家的VB,在這點(diǎn)上竟然比不過別人家的delphi……
也沒有什么神奇的,不過是borland的程序員兄弟們比較勤快,
早早的將一大堆的Windows C形式的接口,翻譯成了Pascal的。
停,關(guān)于pascal,我說太多了。
還是要補(bǔ)充一句,操作系統(tǒng)已經(jīng)在又一次變得不重要了……
?Python
我要跳過java,先說說可愛的python.
啊,它當(dāng)然可以有 Java的實(shí)現(xiàn),也可以有.NET的實(shí)現(xiàn)。
因?yàn)樗陌l(fā)明者說:實(shí)現(xiàn)了python的語言,及它的必須運(yùn)行時(shí)庫,那就是一門python。
(原話是怎么說的?要不怕被某奇怪的事實(shí)給傷到我的心,可以去官方查一查)
但CPython必然是Python中的Python。
它和C語言可以雙向互調(diào)——
它可以非常方便地調(diào)C寫的模塊
C也可以嵌一個(gè)它的解釋器,有肚子里運(yùn)行Python寫的腳本。
對C++也有很好的支持,包括數(shù)據(jù)結(jié)構(gòu)……推薦一下boost.python。
Pythoner已經(jīng)不認(rèn)為Python只是一個(gè)解釋器,他們說:
Python其實(shí)已經(jīng)是一個(gè)虛擬機(jī)。
其實(shí)這根本是侮辱Python.
Python真正強(qiáng)大的地方在于:有C/C++的XXX
基本上,就會有一個(gè)pyXXX在神奇地那兒候著——
什么叫老牌腳本語言!
不管啥場子內(nèi),都有人認(rèn)識他,這才尊稱“老”。
?Java
好吧說到虛擬機(jī),Java當(dāng)然應(yīng)該要出場。
雖然VM這個(gè)東西,60年代Pascal就在玩了……但
誰叫它出生得太早?沒遇上Internet?
?(網(wǎng)絡(luò)當(dāng)然只是表象,關(guān)鍵是那用K計(jì)的內(nèi)存喝兩杯啤酒就得溢)
操作系統(tǒng)是匯編和C寫的,猜一下虛擬機(jī)會是誰寫的?
Java.exe 是操作系統(tǒng)萬千進(jìn)程中的的一個(gè)進(jìn)程……
而所有java寫成的class
都活在是java.exe這個(gè)進(jìn)程從OS里分來的內(nèi)存里……
其中某個(gè)帶有靜態(tài)的,名叫main的函數(shù)的類,是某個(gè)java程序的最外面的那個(gè)門。
進(jìn)了這個(gè)門,那叫一個(gè)大同世界……
再也沒有人世間鬧人的差距……就差連貧富分化也解決了。
偶爾Javaer也覺得不爽,于是在那個(gè)門口,伸出了一只腳。
腳上一只鞋,牌子 JNI。(結(jié)論:Java仍然沒有放棄對C的支持)
若要問Java和Windows的關(guān)系?你可以一并問:
Java和Linux/UNIX的關(guān)系? Java和Android的關(guān)系?
我來回答你:沒什么關(guān)系,因?yàn)樗瞧脚_無關(guān)的,操作系統(tǒng)就是平臺。
原因?
因?yàn)镴ava很牛,這么多年來,只有它真正成為語言界的穆罕默德……
它逼著操作系統(tǒng)走向了它——
方法不過幾句話:
先說: “當(dāng)今操作系統(tǒng),跨平臺是主流……”
然后說: “你是一個(gè)操作系統(tǒng)?”
關(guān)鍵一問:“可是你居然不支持java語言?”
結(jié)論:“那你還是一個(gè)正常的操作系統(tǒng)嗎?”。
大多數(shù)男人在一句“那你還是一個(gè)正常的男人嗎?"
就生氣地脫下褲子證明一下……
但也有不吃這一套的,像微軟,反正已經(jīng)是微軟,
脫了也還是微軟。
沒辦法,曾經(jīng)的“日”公司,只好自己替它寫一個(gè)。
用什么寫? C和C++啊。
還有其它的每個(gè)操作系統(tǒng)的廠商,也一樣。
操著C寫一個(gè)JVM實(shí)現(xiàn)了Java搶走了c++的曾經(jīng)的大塊地盤。
C# 和 .NET
那一天一定是特別的一天……
Windows的開發(fā)人員學(xué)著上帝說:
操作系統(tǒng)要有支持多種語言的API!
于是有了COM形工的編程接口。
它果真支持C——當(dāng)然,沒有它也支持C。
它還支持C++,還是面向?qū)ο蟮模?dāng)然用起來那是怪怪的。
還愿意支持其它語言,不過數(shù)來數(shù)去,
也就Borland亦敵亦友跟著他玩啊啊……
生氣,直接從borland挖走它們的靈魂人物:Anders Hejlsberg
于是一切有了很大的改觀:
先是終于borland也沒法陪他玩了——因?yàn)?/p>
Borland沒有了Ander Hejlberg,拖再久也終要在語言這條路上玩完。
而跑到微軟的Ander Hejlberg也沒閑著
先是搞了java比sun還要快,雷得SUN公司里焦外嫩……
硬是不允許這世上有MS自己寫的JVM。
后來sun也……落幕。
突然的悲哀啊,這段就不寫了……
還好有g(shù)ooooooogle,還有它們的go.