操作系统和语言的关系(转载)
文章出处:http://student.csdn.net/space.php?uid=112600&do=blog&id=35462
有人问:
c++与windows程序设计关系
“我一直弄不懂windows程序是什么?也不知道c++与windows程序有什么关系,哪位高手知道,能不能告诉我一下,谢谢……”
反正天黑,我就胡扯一通,才发现完全答非所问。写到这里来。
--------------------------------------------------
Windows 是一个操作系统……
操作系统必须支持他人(软件开发人员)在它上面开发出新程序……
开发程序,自然要有开发语言的选择,c? c++? pascal? BASIC? C#? java?Python?
这些语言在这个层面上,并不是平等的……
因为,为windows等操作系统最初只提供了一种语言的开发接口——
那就 C语言。
这当然也不能怀疑微软开发人员偷懒,而是因为……
因为历史的原因,C语言尾随汇编被选为操作系统开发的主要语言。
而在对外(提供给软件开发人员上)接口语言选择上,汇编不仅太复杂了,而且是硬件相关的……
所以(加上种种其它原因),历史让C语言成为了操作系统开发接口上的第一语言。
事情当然不会仅仅是这样……
因为如果仅仅操作系统的支持,那C语言也称霸不了多久……
关键是,既然操作系统不直接支持其它语言……
那其它语言就只好倒过来去支持操作系统——
所谓既然没办法让山走向穆罕默德,但穆罕默德可以走向山。
而c++,c,pascal,java,python等等语言,虽然在走的方式上有所不同,
但都要走向操作系统这座山,
既然操作系统这座山的近乎唯一的路是C语言——
所有开发语言就只好放下身段
都提供了对C的支持(编译的或者链接的)。
关于C就这样了:
操作系统是天子
其它语言是诸侯
那句曹孟德说的话,我就不说了。
C的江山就是这样打下的。
八仙过海,各显神通……
现在来说说它们各用各的什么招数走入C的内心……
C++
既然你问的C++,那我就先说它,并且说得正经一点——
c++,噢,它是走得最近的,基本在语言,语法上都完全兼容C。
当初世上最早的C++编译器,不过是把C++语言直接翻译成C语言,
然后再调用C语言的编译器……
如果那时候有马甲这个词——
Cer 一定要嘲笑Cpper了,说它们是马甲,是山寨,是……
但随着名称为“C with class”到"C++"的变换……
这一切都是过去式了,C++终于有了真正的编译器,
可以直接将C++搞成汇编,不再需要通过C的中转。
当然了,C++也可以直接使用汇编 。
而语言的兼容,以及库的兼容依然不变。
虽然后面二者慢慢的也有一些各走各的路了,但——
C++永远是众多语言中,对C最直接的支持者。
Pascal
Pascal曾经是C的竞争者……
曾经在在欧洲大陆,它的使用者甚至比C还多……
因为,它是学院里首选的语言。
它有自己的库……比如那些数学库,这其中原因,当然是因为:
它同样可以骄傲直接使用汇编语言,以及
它觉得其实自己在效率上根本不比C差。
WINDOWS提供的函数接口形式,最初就命名为PASCAL
不过……历史没有选择它,大概是因为……
人类总是懒的,谁让在用花括号的地方,pascal偏偏喜欢用begin和end呢?
当然,这是一句玩笑话。
谁当真谁是250——C采用的{},在N多国家的键盘上,根本找不到。
这一点还得倒过来说pascal有国际观……
言归正传,历史在发展,操作系统作用突然变大……
于是pascal终于还是要能调用C的函数……
用于Delphi的老人都知道,它要调用windows的某个DLL,那个方便的,VB简直要流汗——
MS自家的VB,在这点上竟然比不过别人家的delphi……
也没有什么神奇的,不过是borland的程序员兄弟们比较勤快,
早早的将一大堆的Windows C形式的接口,翻译成了Pascal的。
停,关于pascal,我说太多了。
还是要补充一句,操作系统已经在又一次变得不重要了……
Python
我要跳过java,先说说可爱的python.
啊,它当然可以有 Java的实现,也可以有.NET的实现。
因为它的发明者说:实现了python的语言,及它的必须运行时库,那就是一门python。
(原话是怎么说的?要不怕被某奇怪的事实给伤到我的心,可以去官方查一查)
但CPython必然是Python中的Python。
它和C语言可以双向互调——
它可以非常方便地调C写的模块
C也可以嵌一个它的解释器,有肚子里运行Python写的脚本。
对C++也有很好的支持,包括数据结构……推荐一下boost.python。
Pythoner已经不认为Python只是一个解释器,他们说:
Python其实已经是一个虚拟机。
其实这根本是侮辱Python.
Python真正强大的地方在于:有C/C++的XXX
基本上,就会有一个pyXXX在神奇地那儿候着——
什么叫老牌脚本语言!
不管啥场子内,都有人认识他,这才尊称“老”。
Java
好吧说到虚拟机,Java当然应该要出场。
虽然VM这个东西,60年代Pascal就在玩了……但
谁叫它出生得太早?没遇上Internet?
(网络当然只是表象,关键是那用K计的内存喝两杯啤酒就得溢)
操作系统是汇编和C写的,猜一下虚拟机会是谁写的?
Java.exe 是操作系统万千进程中的的一个进程……
而所有java写成的class
都活在是java.exe这个进程从OS里分来的内存里……
其中某个带有静态的,名叫main的函数的类,是某个java程序的最外面的那个门。
进了这个门,那叫一个大同世界……
再也没有人世间闹人的差距……就差连贫富分化也解决了。
偶尔Javaer也觉得不爽,于是在那个门口,伸出了一只脚。
脚上一只鞋,牌子 JNI。(结论:Java仍然没有放弃对C的支持)
若要问Java和Windows的关系?你可以一并问:
Java和Linux/UNIX的关系? Java和Android的关系?
我来回答你:没什么关系,因为它是平台无关的,操作系统就是平台。
原因?
因为Java很牛,这么多年来,只有它真正成为语言界的穆罕默德……
它逼着操作系统走向了它——
方法不过几句话:
先说: “当今操作系统,跨平台是主流……”
然后说: “你是一个操作系统?”
关键一问:“可是你居然不支持java语言?”
结论:“那你还是一个正常的操作系统吗?”。
大多数男人在一句“那你还是一个正常的男人吗?"
就生气地脱下裤子证明一下……
但也有不吃这一套的,像微软,反正已经是微软,
脱了也还是微软。
没办法,曾经的“日”公司,只好自己替它写一个。
用什么写? C和C++啊。
还有其它的每个操作系统的厂商,也一样。
操着C写一个JVM实现了Java抢走了c++的曾经的大块地盘。
C# 和 .NET
那一天一定是特别的一天……
Windows的开发人员学着上帝说:
操作系统要有支持多种语言的API!
于是有了COM形工的编程接口。
它果真支持C——当然,没有它也支持C。
它还支持C++,还是面向对象的,当然用起来那是怪怪的。
还愿意支持其它语言,不过数来数去,
也就Borland亦敌亦友跟着他玩啊啊……
生气,直接从borland挖走它们的灵魂人物:Anders Hejlsberg
于是一切有了很大的改观:
先是终于borland也没法陪他玩了——因为
Borland没有了Ander Hejlberg,拖再久也终要在语言这条路上玩完。
而跑到微软的Ander Hejlberg也没闲着
先是搞了java比sun还要快,雷得SUN公司里焦外嫩……
硬是不允许这世上有MS自己写的JVM。
后来sun也……落幕。
突然的悲哀啊,这段就不写了……
还好有gooooooogle,还有它们的go.