GNU与GCC含义的解释

上传人:平*** 文档编号:14247504 上传时间:2017-10-30 格式:DOC 页数:9 大小:71.58KB
返回 下载 相关 举报
GNU与GCC含义的解释_第1页
第1页 / 共9页
GNU与GCC含义的解释_第2页
第2页 / 共9页
GNU与GCC含义的解释_第3页
第3页 / 共9页
GNU与GCC含义的解释_第4页
第4页 / 共9页
GNU与GCC含义的解释_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《GNU与GCC含义的解释》由会员分享,可在线阅读,更多相关《GNU与GCC含义的解释(9页珍藏版)》请在金锄头文库上搜索。

1、GNU 是 Gnus Not Unix 的缩 写,那么 Gnus Not Unix 里面的 Gnu 是什么意思, Gnus Not Unix 里的 Gnu 同 GNU。这个是递归。GNU 就是 GNUs Not Unix 的缩写, GNU 的创始人 Stallman 认为 UNIX 虽然不是最 好的操作系统,但是至少不会太差,而他自信有能力把 UNIX 不足的地方加以改进,使它 成为一个优 良的操作系统 , 就是名为 GNU 的一个同 UNIX 兼容的操作系统,并且开发这 个系统的目的就是 为了让 所有计算机用户都可以自由地获得这个系统。任何人都可以免费 地获得这个系 统的源代码 ,并且可以相

2、互自由拷 贝。因而在使用 GNU 软件的时候我们可以 理直气壮地说我们使用的是正版软件。当然 GNU 也是有自己的版 权声明(即 GPL,见附 录 A)的,就是它有名的 Copyleft(相对于版权的英文 Copyright),就是用户获得 GNU 软件后可以自由使用和修改,但是用户在散布 GNU 软件时,必须让下一个用户有获得源代 码的权利并且必须告知他这一点。 这一条看似古怪的规定是为 了防止有些别有用心的人或 公司将 GNU 软件稍加修改就去申 请版权,说成是自己的产品。其目的就是要让 GNU 永远 是免费和公开的。 GNU 是谁发起的? GNU 是由自由 软件基金会 (Free Sof

3、tware Foundation, FSF) 的董事长 Richard M. Stallman (RMS)于 1984 年发起的,如今已经有十几年的历史了。 Stallman 本来是在美国麻省理工学院的人工智能实验室从事研究工作的研究员, 同时也是 世界上可数的几个顶尖程序员之一,他的最著名的作品也是 GNU 的第一个软件就是 GNU Emacs,UNIX 平台上的一个编辑器。 这个软件推出后受到广大 UNIX 用户 的热烈欢迎, 由于它同时提供源代码,大家都 热心地替它排除错误,增加功能,它的功能越来越 强大, 终于成为 UNIX 平台上最好的编辑器,上至 CRAY 超级计算机,下至最普遍的

4、 PC 机,从 DOS 到 Windows,从 VMS 到 UNIX 都可以使用这个 Emacs。受到这个软件成功的鼓励, Stallman 成立了自由 软件基金会,以推广 GNU 计划。 基金会成立之后,主要靠一些厂家 的捐献和出售 GNU 程序的使用手册,以及拷贝 GNU 软件的电脑磁带和光盘来维持,不过 许多硬件厂家开始基金会提供高性能的工作站,这其中包括 HP 和 SONY,AT&T 这样的 国际性大公司。 GNU 目前已经推出的软件主要由 Emacs功能强大的编辑环境,GCC性能优 异的多平台的 C,C+,Fortran 编译器和其他 40 多种软件。其中 GCC 的成功为 GNU

5、带 来了前所未有的影响。GCC 是一种可以在 11 种硬件平台上 编译出可执行程序的超级编译 器,而且其执行效率更是惊人,与一般的 编译器相比平均效率要高 20%-30%。这使得很多 商业公司也采用 GCC 来开发软件,其中包括像 HP 公司这样的专业大公司。 而现在回到苹 果公司的前 NeXT 公司总裁斯蒂夫 乔布斯也对 Stallman 尊敬有加,因为 NeXT 公司的软 件都是用 GCC 开发的,在 PC 游戏中最好的 3D 射击游戏 quake(由 ID Software 公司开发) 也是用 GCC 的 DOS 移植版本 djgpp 编写的。GCC 是 C,C+,Objective C

6、(由 NeXT 公 司贡献)三者合一的编译器,它的 编译原理同大多数编译器不一 样,它先有一个前端 处理 程序将 C,C+,Ovjective C 的 语句转换成为一个类似于 Lisp 的内部语言RTL,再 由一个后端处理程序将其优化后产生目的 CPU 可以执行的机器代码,因而对于每种新语言 来说,只要写好一个新的前端处 理程序就可以立刻将此语言移植到 GCC 已经支持的不同硬 件平台上去,而且编译出来的就已 经是经过优化的二进制代 码。除了 C 系列以外, GCC 还 有 Fortran 77,ada9x,Pascal 的前端处理程序。GCC 的多平台的实现方法同 JAVA 的虚 拟机技术不

7、太一样,因而其运行速度 远非 JAVA 能望其项背。 GNU 开始的策略就是先开发 UNIX 已经有的程序(因 为计划中 GNU 将会是一个与 UNIX 兼容的操作系统,而 UNIX 下的标准使用界面已经非常完善了,所以先依照这个标准 开发应用程序,将来 GNU 自己的系统核心一出来,就立即可以使用所有先前开发的 GNU 应用程序),因此会先有 emacs,GCC 等工具软件开发 出来。其中 GCC 更是 GNU 计划 自立更生的一个重要步骤(不需要依靠商业软件来产生/编译 整个 GNU 系统),如今这套 程序开发工具已经很成熟了。下一步要做的就是开发 GNU 的核心Hurd 了,只要 Hur

8、d 一开发出来,GNU 就是一套能 够自我开机,真正自 给自足,完整的自由操作系统。Hurd 是基于 Mach 这个微内核( micro kernel)上的操作系统核心。 以后会使用尤他大学的 Mach4 (一个更为方便和快速的微内核),由于 Hurd 基于 Mach,所以只要 Mach 移植到什么机 器上,Hurd 也立刻就是 这种硬件平台的操作系统,就 这一点而言,它是一种很前卫的操作系统。但是 Linux 在短短的几年内崛起,也使用 GNU 的版权声明,大有取代 Hurd 之势。 在网络上甚至有不少人认为 Hurd 应该停止开发, 因为 Linux 系统已经十分成熟,GNU 实际上可以使

9、用 Linux 当作核心,也能构成一套完整的操作系统。甚至连自由软件基金会 的技术人员也承认,要是 Linux 早几年出现,也 许就不用 发展 Hurd 了。但是 Linux 还是 晚了一步,Hurd 已经计划很久了,技术上有很多非常领先的地方,能够支持的硬件平台也 比 Linux 多,不完成就太可惜了。1994 年 11 月,Hurd 的第一个雏形已经发表; 1995 年 4 月,也 发表了第二次 snapshot。Hurd 目前的版本是 0.2,是 1997 年 6 月发布的,已经可 以独立安装与稳定运行了,GNU 版本的 Mach 目前的版本是 1.1.3。与此同时,已经开发 出一个基于

10、微内核的 Linux 版本了,目前有一个可以在 HP-PA RISC 机器上运行的 Linux系 统。 实际上,自由 软件基金会目前有一套以 Linux 为核心的 GNU 系统计划。这个计划 就是自由软件基金会支持的 Debian Linux。 Debian Linux 是 GNU 软件与公共软件 (Public Domain Software )最 彻底的结合,它是一套完全由 GNU 和公共软件配置起来的, 而且具有商业操作系统水平的操作系统。 注一:POSIX(Portable Operating System Interface)标准操作系统界面。 注二:按照编程人员的习惯,一个 软件在

11、第一次推出前的所有 测试版本都不能称作 1.0 版,只能叫作 0.3,0.7,0.99 版,其数目越接近 1,就表明其越来越接近正式发布1、用于 linux 系统下编程的编译器概述GCC(GNU Compiler Collection,GNU 编译器套装),是一套由 GNU 开发的编程语言编译器。它是一套 GNU 编译器套装。以 GPL 及 LGPL 许可证所发行的自由软件,也是 GNU 计划的关键部分,亦是自由的类 Unix 及苹果电脑 Mac OS X 操作系统的标准编译器。GCC 原名为 GNU C 语言编译器,因 为它原本只能 处理 C 语言。GCC 很快地扩展,变得可处理 C+。之后

12、也变得可处理 Fortran、Pascal、Objective-C、Java, 以及 Ada 与其他语言。 历史GCC 是由理查德马修斯托曼在 1985 年开始的。他首先扩增一个旧有的编译器,使它能编译 C,这个编译器一开始是以 Pastel 语言所写的。Pastel 是一个不可移植的 Pascal 语言特殊版,这个编译器也只能 编译 Pastel 语言。为了让自由软件有一个编译器,后来此编译器由斯托曼和 Len Tower 在 1987 年以 C 语言重写并成为 GNU 专案的编译器。 GCC 的建立者由自由软件基金会直接管理。 在 1997 年,一群不满 GCC 缓慢且封闭的创作环境者,组

13、织了一个名为EGCSExperimental/Enhanced GNU Compiler System的专案,此专案汇整了数项实验性的分支进入某个 GCC 专案的分支中。EGCS 比起 GCC 的建构环境更有活力,且 EGCS 最终也在 1999 年四月成为 GCC 的官方版本。 GCC 目前由世界各地不同的数个程序 设计师小组维护。它是移植到中央 处理器架构以及操作系统最多的编译器。 由于 GCC 已成为 GNU 系统的官方编译器(包括 GNU/Linux 家族),它也成 为编译与建立其他操作系统的主要编译器,包括 BSD 家族、 Mac OS X、NeXTSTEP 与 BeOS。 GCC

14、通常是跨平台软件的 编译器首选。有 别于一般局限于特定系统与执行环境的编译器,GCC 在所有平台上都使用同一个前端处理程序, 产生一样的中介码,因此此中介 码在各个其他平台上使用 GCC 编译 ,有很大的机会可得到正确无误的输出程序。 结构GCC 的外部接口长得像一个 标准的 Unix 编译器。使用者在命令列下键入 gcc 之程序名,以及一些命令参数,以便决定每个输入档案使用的个别语 言编译器,并 为输出程序码使用适合此硬件平台的组合语言编译器,并且 选择性地执行连结 器以制造可执行的程序。 每个语言编译器都是独立程序,此程序可处理输入的原始码,并输出组合语言码。全部的语言编译器都拥有共通的中

15、介架构:一个前端解析符合此语言的原始码,并产生一抽象语法树,以及一翻译此语法树成为 GCC 的暂存器转换语言RTL的后端。编译器最佳化与静态程序码解析技术(例如 FORTIFY_SOURCE,一个试图发现缓冲区溢位buffer overflow的编译器)在此阶段应用于程序码上。最后,适用于此硬件架构的组合语言程序码以 Jack Davidson 与 Chris Fraser 发 明的算法产出。 几乎全部的 GCC 都由 C 写成,除了 Ada 前端大部分以 Ada 写成。 前端接口 前端的功能在于产生一个可让后端处理之语法树。此语法解析器是手写之递回语法解析器。 直到最近,程序的语法树结构尚无

16、法与欲产出的处理器架构脱钩。而语法树的规则有时在不同的语言前端也不一样,有些前端会提供它 们特别的 语法树规则。 在 2005 年,两种与语言脱 钩的新型态语法树纳入 GCC 中。它 们称为 GENERIC 与GIMPLE。语法解析变成产生与语言相关的暂时语法树,再将它们转成 GENERIC。之后再使用gimplifier技术降低 GENERIC 的复杂结构,成 为一较简单的静态唯一形式(Static Single Assignment form,SSA)基础的 GIMPLE 形式。此形式是一个与语言和处理器架构脱钩的全域最佳化通用语言,适用于大多数的 现代编程语 言。 中介接口 一般编译器作者会将语法树的最佳化放在前端,但其实此步骤并不看语言的种类而有不同,且不需要用到语法解析器。因此 GCC 作者们将此步骤归入通称为中介阶段的部分里。此类的最佳化包括消解死码、消解重复运算与全域数 值重 编码等。 许多最佳化技巧也正在实作中。 后端接口 GCC 后端的行为因不同的前

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号