我目前在公司做的CAD平台项目是跨平台的开发项目,由于公司以前一直都是在windows上面开发项目,缺少在linux等平台下的开发经验,我们组的架构师为我们选择了windows下的类UNIX模拟编译环境MingW。虽然我经常听到、看到很多跨平台编程,也尝试用过,但是对跨平台开发并没有去深入了解和涉及,可谓是只问其声,不见其人。昨天我在windows下使用MingW对我所做的模块进行类Unix的编译,花了我不少时间。决定好好了解一下开发平台和编译器。
参考:百度百科:Unix
Unix操作系统,是一个强大的多用户、多任务操作系统,支持多种处理器架构,按照操作系统的分类,属于分时操作系统,最早由Ken Thompson, Dennis Richie和Douglas Mcllroy于1969年在AT&T的贝尔实验室开发。目前它的商标权由国际开放标准组织所拥有,只有符合单一UNIX规范的UNXI系统才能使用UNIX这个名称(比如HP-UX, Mac OS X, iOS等),否则只能成为类UNIX(UNIX-like, 比如GNU, Linux, Android等)。
1971年,Ken Thompson(Unix之父)申请到了一台PDP-11/24的机器,Unix第一版就是运行在这台机器上。
1973年,Ken Thompson与Dennis Ritchie感到用汇编语言做移植太头痛,他们想用高级语言来完成第三版。一开始他们尝试使用Fortan,可是失败了。后来他们用一个叫BCPL(Basic Combined Programming Language)的语言开发,他们整合了BCPL形成B语言,后来Dennis Ritchie(C语言之父)觉得B语言还是不能满足要求,于是改良了B语言,这就是今天的大名鼎鼎的C语言。于是Ken Thompson与Dennis Ritchie成功的用C语言重写了Unix的第三版内核。Unix和C完美的结合成为一个统一体,C与Unix很快成为世界的主导。
Unix的第一篇文章“The UNIX Time Sharing System”由Ken Thompson和Dennis Ritchie于1974年7月的The Communications of the ACM发表。
说到这里,我再插播一下面向对象和C++之父。
参考:面向对象方法_版本历史,百度百科:Bjarne Stroustrup
OO方法起源于面向对象的编程语言(简称为OOPL)。50年代后期,在用FORTRAN语言编写大型程序时,常出现变量名在程序不同部分发生冲突的问题。鉴于此,ALGOL语言的设计者在ALGOL60中采用了以"Begin……End"为标识的程序块,使块内变量名是局部的,以避免它们与程序中块外的同名变量相冲突。这是编程语言中首次提供封装(保护)的尝试。此后程序块结构广泛用于高级语言如Pascal 、Ada、C之中。
60年代中后期,Simula语言在ALGOL基础上研制开发,它将ALGOL的块结构概念向前发展一步,提出了对象的概念,并使用了类,也支持类继承。70年代,Smalltalk语言诞生,它取Simula的类为核心概念,它的很多内容借鉴于Lisp语言。由Xerox公司经过对Smautalk72、76持续不断的研究和改进之后,于1980年推出商品化的,它在系统设计中强调对象概念的统一,引入对象、对象类、方法、实例等概念和术语,采用动态联编和单继承机制。
面向对象源出于Simula,真正的OOP由Smalltalk奠基。Smalltalk现在被认为是最纯的OOPL。
1986年在美国举行了首届"面向对象编程、系统、语言和应用(OOPSLA'86)"国际会议,使面向对象受到世人瞩目,其后每年都举行一次,这进一步标志OO方法的研究已普及到全世界。
1982年,美国AT&T公司贝尔实验室的Bjarne Strousrup博士在c语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言与c语言的渊源关系,它被命名为C++。而Bjarne Stroustrup博士被尊称为C++语言之父。此后C++语言历经了不断地完善,例如1990年C++语言引入模板和异常处理的概念,1993年引入运行时类型识别(RTTI)和命名空间(Name Space)的概念。1997年,C++语言成为美国国家标准(ANSI)。1998年,C++语言又称为了国际标准(ISO),同年,B.S推出了其经典著作The C++ Programming Language的第三版。
参考百度百科:GNU,wikipedia: GNUCompiler Collection,百度百科:GCC
GNU(GNU’s Not Unix)计划,是由Richard Stallman在1983年9月27日公开发起的。它的目标是创建一套完全自由的操作系统。为保证GNU软件可以自由地“使用、复制、修改和发布”,所有GNU软件都有一份在禁止其他人添加任何限制的情况下授权给任何人的协议条款,GNU通用公共许可证(GNU General Public License, GPL),即“反版权”(或称Copyleft)概念。(这个计划也正符合它的名称GNU’s Not Unix,在20世纪70年代,AT&T公司开始注意到Unix所带来的商业价值。公司的律师开始寻找一些手段来保护Unix,并让其成为一种商业机密。从1979年Unix的版本V7开始,Unix的许可证开始禁止大学使用Unix的源码,包括在授课中学习。也许是因为这个原因,Stallman发起了GNU计划。)
1985年Richard Stallman又创立了自由软件基金会(Free Software Foundation)来为GNU计划提供技术、法律以及财政支持。
1987年5月22日,由Richard Stallman领导开发的GCC首次发布。这时候的GCC为GNU C Compiler,因为它只能处理C语言,同年的12月,GCC扩展到可以支持处理C++。之后很快扩展能够支持更多编程语言,如Frotan, Pascal, Objective-C, Java, Ada, Go等。
GCC(GNU Compiler Collection,GNU编译器套装)是一套由GNU计划开发的支持多种编程语言的编译器。GCC是自由软件发展过程中的著名例子,由自由软件基金会以GPL协议发布。GCC是大多数类Unix操作系统(如Linux, BSD, Mac OS X?等)的标准的编译器,GCC同样适用于微软的Windows。GCC支持多种计算机体系芯片,如X86, ARM,并已移植到其他多种硬件平台。
1991年Linus Torvalds(Linux之父)编写了与Unix兼容的Linux操作系统内核并在GPL条款下发布。Linux之后在网上广泛流传,许多程序员参与了开发与修改。1992年Linux与其他GNU软件结合,完全自由的操作系统正式诞生。该操作系统往往被称为“GNU/Linux”或简称Linux。
许多UNIX系统上也安装了GNU软件,因为GNU软件的质量比之前UNIX的软件还要好。GNU工具还被广泛地移植到Windows和Mac OS上。
GNU包含3个协议条款:GPL(GNUGeneral Public License, GNU通用公共许可证),LGPL(GNU Lesser General Public License, GNU较宽松公共许可证)和GFDL(GNUFree Documentation License, GNU自由文档许可证)。
Windows操作系统是如何诞生的在现在很多网站上的解释都不是很详细的(可能是跟windows系统的出生背景有关吧。。),有兴趣的可以看下《硅谷之火》,里面有讲到windows操作系统的来龙去脉,在这里我不陈述了。
可见另外两篇博客: