“我一直弄不懂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)楸撸瑸閣indows等操作系統(tǒng)最初只提供了一種語言的開發(fā)接口——
那就 C語言彪腔。
這當(dāng)然也不能懷疑微軟開發(fā)人員偷懶,而是因?yàn)椤?/p>
因?yàn)闅v史的原因进栽,C語言尾隨匯編被選為操作系統(tǒng)開發(fā)的主要語言德挣。
而在對(duì)外(提供給軟件開發(fā)人員上)接口語言選擇上,匯編不僅太復(fù)雜了快毛,而且是硬件相關(guān)的……
所以(加上種種其它原因)格嗅,歷史讓C語言成為了操作系統(tǒng)開發(fā)接口上的第一語言。
事情當(dāng)然不會(huì)僅僅是這樣……
因?yàn)槿绻麅H僅操作系統(tǒng)的支持唠帝,那C語言也稱霸不了多久……
關(guān)鍵是屯掖,既然操作系統(tǒng)不直接支持其它語言……
那其它語言就只好倒過來去支持操作系統(tǒng)——
所謂既然沒辦法讓山走向穆罕默德,但穆罕默德可以走向山襟衰。
而c++,c,pascal,java,python等等語言贴铜,雖然在走的方式上有所不同,
但都要走向操作系統(tǒng)這座山瀑晒,
既然操作系統(tǒng)這座山的近乎唯一的路是C語言——
所有開發(fā)語言就只好放下身段
都提供了對(duì)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)是眾多語言中瓦宜,對(duì)C最直接的支持者蔚万。
?Pascal
Pascal曾經(jīng)是C的競(jìng)爭(zhēng)者……
曾經(jīng)在在歐洲大陸,它的使用者甚至比C還多……
因?yàn)榱俦樱菍W(xué)院里首選的語言反璃。
它有自己的庫……比如那些數(shù)學(xué)庫,這其中原因假夺,當(dāng)然是因?yàn)椋?/p>
它同樣可以驕傲直接使用匯編語言淮蜈,以及
它覺得其實(shí)自己在效率上根本不比C差。
WINDOWS提供的函數(shù)接口形式已卷,最初就命名為PASCAL
不過……歷史沒有選擇它梧田,大概是因?yàn)椤?/p>
人類總是懶的,誰讓在用花括號(hào)的地方悼尾,pascal偏偏喜歡用begin和end呢柿扣?
當(dāng)然,這是一句玩笑話闺魏。
誰當(dāng)真誰是250——C采用的{}未状,在N多國(guó)家的鍵盤上,根本找不到析桥。
這一點(diǎn)還得倒過來說pascal有國(guó)際觀……
言歸正傳司草,歷史在發(fā)展艰垂,操作系統(tǒng)作用突然變大……
于是pascal終于還是要能調(diào)用C的函數(shù)……
用于Delphi的老人都知道,它要調(diào)用windows的某個(gè)DLL埋虹,那個(gè)方便的猜憎,VB簡(jiǎn)直要流汗——
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寫的腳本亏钩。
對(duì)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
基本上辞友,就會(huì)有一個(gè)pyXXX在神奇地那兒候著——
什么叫老牌腳本語言栅哀!
不管啥場(chǎng)子內(nèi),都有人認(rèn)識(shí)他称龙,這才尊稱“老”留拾。
?Java
好吧說到虛擬機(jī),Java當(dāng)然應(yīng)該要出場(chǎng)鲫尊。
雖然VM這個(gè)東西痴柔,60年代Pascal就在玩了……但
誰叫它出生得太早?沒遇上Internet疫向?
?(網(wǎng)絡(luò)當(dāng)然只是表象,關(guān)鍵是那用K計(jì)的內(nèi)存喝兩杯啤酒就得溢)
操作系統(tǒng)是匯編和C寫的,猜一下虛擬機(jī)會(huì)是誰寫的细卧?
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仍然沒有放棄對(duì)C的支持)
若要問Java和Windows的關(guān)系?你可以一并問:
Java和Linux/UNIX的關(guān)系焊刹? Java和Android的關(guān)系系任?
我來回答你:沒什么關(guān)系,因?yàn)樗瞧脚_(tái)無關(guān)的虐块,操作系統(tǒng)就是平臺(tái)俩滥。
原因?
因?yàn)镴ava很牛贺奠,這么多年來霜旧,只有它真正成為語言界的穆罕默德……
它逼著操作系統(tǒng)走向了它——
方法不過幾句話:
先說: “當(dāng)今操作系統(tǒng),跨平臺(tái)是主流……”
然后說: “你是一個(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.