操作系统和语言的关系(转载)

“我一直弄不懂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.

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • TITLE: 编程语言乱炖 码农最大的烦恼——编程语言太多。不是我不学习,这世界变化快! 有时候还是蛮怀念十几、二...
    码园老农阅读 10,752评论 2 35
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,043评论 25 709
  • MySQL Enterprise Edition
    simtech2win阅读 845评论 0 0
  • NO.7 女孩发短信给男生:“我对你已经彻底死心” 男生回复:“我中了500万!” 女生秒回:“塌地了”
    山的那一边_ChenLei阅读 847评论 0 0
  • 有些劳务同行有时候一定很奇怪,明明自己的劳务公司资历证书一应俱全,公司上下员工也十分努力,也有很多企业和公司合作,...
    劳务圈阅读 4,490评论 0 0