导航:首页 > 源码编译 > 编译器技术的发展

编译器技术的发展

发布时间:2023-01-18 18:54:13

java软件工程师的发展路径

Java软件工程师的未来发展方向大致分为两类:
一是成为管理人员,例如产品研发经理,技术经理,项目经理等;
二是继续他的技术工作之路,成为高级软件工程师、需求工程师等。 Java语言是一个面向对象的。Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。Java语言全面支持动态绑定,而C++ 语言只对虚函数使用动态绑定。总之,Java语言是一个纯的面向对象程序设计语言。
Java语言是分布式的。Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
Java语言是健壮的。Java的强类型机制、异常处理、废料的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择。Java的安全检查机制使得Java更具健壮性。
Java语言是安全的。Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。除了Java语言具有的许多安全特性以外,Java对通过网络下载的类具有一个安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类SecurityManager)让Java应用设置安全哨兵。
Java语言是体系结构中立的。Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件),然后可以在实现这个Java平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。
Java语言是可移植的。这种可移植性来源于体系结构中立性,另外,Java还严格规定了各个基本数据类型的长度。Java系统本身也具有很强的可移植性,Java编译器是用Java实现的,Java的运行环境是用ANSI C实现的。
Java语言是编译解释型的。如前所述,Java程序在Java平台上被编译为字节码格式,然后可以在实现这个Java平台的任何系统中运行。在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。
Java是高性能的。与那些解释型的高级脚本语言相比,Java的确是高性能的。事实上,随着JIT(Just-In-Time)编译器技术的发展,Java的运行速度可以和优化过的本地代码相媲美。
Java语言是多线程的。在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建。通常有两种方法来创建线程:其一,使用型构为Thread(Runnable) 的构造子将一个实现了Runnable接口的对象包装成一个线程,其二,从Thread类派生出子类并重写run方法,使用该子类创建的对象即为线程。值得注意的是Thread类已经实现了Runnable接口,因此,任何一个线程均有它的run方法,而run方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。Java语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为synchronized)。
Java语言是动态的。Java语言的设计目标之一是适应于动态变化的环境。Java程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java中的类有一个运行时刻的表示,能进行运行时刻的类型检查。Java语言的优良特性使得Java应用具有无比的健壮性和可靠性,这也减少了应用系统的维护费用。Java对对象技术的全面支持和Java平台内嵌的API能缩短应用系统的开发时间并降低成本。Java的编译一次,到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式。特别是Java企业应用编程接口(Java Enterprise APIs)为企业计算及电子商务应用系统提供了有关技术和丰富的类库。
和C/C++的差异熟悉C语言和C++语言的读者一定想搞清楚这个问题,实际上,Java确实是从C语言和C++语言继承了许多成份,甚至可以将Java看成是类C语言发展和衍生的产物。比如Java语言的变量声明,操作符形式,参数传递,流程控制等方面和C语言,C++语言完全相同.尽管如此,Java和C语言,C++语言又有许多差别,主要表现在如下几个方面:
(1) Java中对内存的分配是动态的,它采用面向对象的机制,采用运算符new为每个对象分配内存空间,而且,实际内存还会随程序运行情况而改变。程序运行中 Java系统自动对内存进行扫描,对长期不用的空间作为”垃圾”进行收集,使得系统资源得到更充分地利用.按照这种机制,程序员不必关注内存管理问题,这使Java程序的编写变得简单明了,并且避免了由于内存管理方面的差错而导致系统出问题。而C语言通过malloc()和free()这两个库函数来分别实现分配内存和释放内存空间的,C++语言中则通过运算符new和delete来分配和释放内存。在C和C++这种机制中,程序员必须非常仔细地处理内存的使用问题。一方面,如果对己释放的内存再作释放或者对未曾分配的内存作释放,都会造成死机;而另一方面,如果对长期不用的或不再使用的内存不释放,则会浪费系统资源,甚至因此造成资源枯竭。
(2) Java不在所有类之外定义全局变量,而是在某个类中定义一种公用静态的变量来完成全局变量的功能。 (3) Java不用goto语句,而是用try-catch-finally异常处理语句来代替goto语句处理出错的功能。(4) Java不支持头文件,而C和C++语言中都用头文件来定义类的原型,全局变量,库函数等,这种采用头文件的结构使得系统的运行维护相当繁杂。
(5) Java不支持宏定义,而是使用关键字final来定义常量,在C++中则采用宏定义来实现常量定义,这不利于程序的可读性。
(6) Java对每种数据类型都分配固定长度。比如,在Java中,int类型总是32位的,而在C和C++中,对于不同的平台,同一个数据类型分配不同的字节数,同样是int类型,在PC机中为二字节即16位,而在VAX-11中,则为32位.这使得C语言造成不可移植性,而Java则具有跨平台性(平台无关性)。
(7) 类型转换不同。在C和C++中,可通过指针进行任意的类型转换,常常带来不安全性,而在Java中,运行时系统对对象的处理要进行类型相容性检查,以防止不安全的转换。
(8) 结构和联合的处理。在C和C++中,结构和联合的所有成员均为公有,这就带来了安全性问题,而在Java中根本就不包含结构和联合,所有的内容都封装在类里面。
(9) Java不再使用指针。指针是C和C++中最灵活,也最容易产生错误的数据类型.由指针所进行的内存地址操作常会造成不可预知的错误,同时通过指针对某个内存地址进行显式类型转换后,可以访问一个C++中的私有成员,从而破坏安全性。而Java对指针进行完全地控制,程序员不能直接进行任何指针操作。
(10)避免平台依赖。Java语言编写的类库可以在其它平台的Java应用程序中使用,而不像C++语言必须依赖于Windows平台。
(11)在B/S开发方面,Java要远远优于C++。 自从sun被甲骨文收购以后,Java的发展前景就变得扑朔迷离起来,很多程序开发者都感到很迷惑。2010年4月9日,被称为Java之父的JamesGosling又在个人博客上宣布离开Oracle,这一事件更为Java的前景增加了一层迷雾。但是在进入5月份之后,一切开始变得明朗起来。首先是Oracle在Java的后续支持方面,宣布了一系列关于Java的相关计划。然后是Java之父JamesGosling继声明Java不会死去之后又盛赞Oracle对Java所做的贡献。在Oracle的活动发布网站上,连续发布了多个关于Java的推广活动。
版本简介
2010年5月12日,Oracle主要产品负责人DaveHofert将大谈对JavaSE商业应用的改进和革新。根据宣传资料,在这次演讲中,DaveHofert将提到以下问题:
商业版与社区版本之间平台支持的差异。
如何获得专家帮助,以帮助企业增强其Java应用。
对于旧版本的安全修补问题。
可使用的发布工具和更新。
2010年6月18、19、20、27日,将分别在赫尔辛基、斯图加特、布达佩斯、伦敦举行Oracle、Sun专家与用户见面会,在见面会上与用户一起探讨Java的发展路线。主要讨论的问题包括Oracle将如何继续投资和改进Java技术,并且还会向用户通报JavaSE、JavaME专家团队的最新消息、JavaFX和JDK7最新的消息,以及OracleBerkeley DB的相关信息。
2010年5月3日,已经离开Oracle近一个月的Java之父JamesGosling在他的博客上表达了对NetBeans 6.9 和 FX1.3发布的关心。这两个项目最新版本的发布,可以证明Oracle已经开始兑现当初的承诺。JamesGosling在其早期的博客中,也透露了不会放弃Java事业,只是需要解决一些与Oracle之间的法律问题。
这一切迹象表明,Oracle绝对不会轻易放弃Java这块巨大的蛋糕,并且Oracle也开始逐渐学会了对开源社区的尊重。首先在JDK的商业版本方面,Oracle将会继续深入挖掘Java的商业利益,与其固有产品进行更深入的整合。在社区版本方面,Oracle将与Java开发者一起探讨和研发Java的技术。这里需要特别提到的一个产品是OracleBerkeleyDB,该产品是Oracle一直支持的一个开源非关系数据库产品,在NOSQL大行其道的今天,如果Oracle能够将BerkeleyDB与Java进行深入整合,将会为Java带来更多的活力和生命。从JamesGosling的表现来看,他似乎与Oracle之间已经达成某种谅解,并且有进一步合作的可能性。
java发展
Java在日新月异的IT技术领域内不算年轻,在过去的十几年中,Java曾凭借开放和跨平台等特性、借助互联网蓬勃发展的东风,改变了C/C++称霸天下的局面,形成Java、C、C++三足鼎立的格局。特别是Java在编程语言排名榜上独占鳌头长达10年之久,并帮助Sun奠定了其在IT技术和开源领域的地位,都说明Java在开发领域中的重要性。
在未来发展方向上,Java在Web、移动设备以及云计算方面前景非常广阔。虽然面对来自网络的类似于Ruby on Rails这样编程平台的挑战,Java依然还是事实上的企业Web开发标准。在Java对新开发者吸引力方面,这么多年以来,Java一直都在面对那些不成熟的,基于脚本的程序语言的挑战。比如PHP和Ruby,虽然经过多年努力,但是并没有看到他们相具有比Java更强的竞争力。另一方面,随着云计算以及移动领域的扩张,更多的企业在考虑将其应用部署在Java平台上,无论是本地主机,公共云,Java都是目前最合适的选择。
事实上Java技术的开放性、安全性和庞大的社会已有资源,以及其跨平台性,即“编写一次,到处运行”的特点,也使Java技术成为智能手机软件平台的事实标准。采用Java技术后,编写应用程序和提供服务的人就不必关心接受其服务的手机采用的是什么操作系统和芯片,只要按照Java的要求去写程序就好了;同样,生产手机的厂商也不必顾虑将来谁来提供增值服务。同时在Oracle的技术投资担保下,Java也将是企业在云应用方面回避微软平台、在移动应用方面回避苹果公司的一个最佳选择。比如VMware就宣布了一个称为VMforce的服务,该服务将在云计算机中布置Java应用,Google应用引擎也将一如既往的支持Java。他们都是微软提供的,基于.Net和开源PHP语言基础上的Azure云平台的竞争对手。此外,进军传统的桌面应用仍是Java未来一个努力的方向之一。
JAVA作为主流的商业应用的语言在3G、物联网时代下焕发出新的生机!
在互联网时代,JAVA语言已经是使用最广泛的服务器端语言。随着3G、互联网时代的到来,JAVA语言并不会“过时”,相反,JAVA语言会在新的业务领域有着更辉煌的发展前景。
3G、互联网的发展不仅仅带动了“智能手机制造业”、“电信运营业”、“RFID产业”、“嵌入式设备”等硬件或系统软件行业的发展;更重要的是:3G、互联网开创了更多、更新的商业领域应用,而这些领域的核心编程语言仍然是JAVA!
在TTS4.0 课程体系中的基于智能手机平台的“航空公司移动服务门户”项目和基于全球定位、实时订单跟踪、RFID仓储管理等诸多互联网新技术的“新一代物流管理系统”都是这些新商业应用领域的典型代表。
未来趋势
对Java来说,2010年是不平凡的一年,从Oracle在年初完成对Sun的收购,使大家对Java的未来充满了关注,而12月份在北京进行的JavaOne大会,可以说是Oracle在收购Sun之后的第一次正式大会,大家可以从 JavaOne上更多了解了Java未来的发展。而2011年,将成为Java新的开始。
Java走过了它15年的历程,在日新月异的IT技术领域不算年轻,但它一直没有停下变革、创新的脚步。Java已经不单单是一种计算机语言,很多情况下,我们称它是一个平台,一个社区。下面从Java SE、Java EE、Java ME、JavaFX几个方面,展望Java技术在2011年的发展。
Java SE
从Oracle公布的Java未来战略我们可以看到,Oracle目标是加强和继续扩大Java在新领域的应用,并将Java平台纳入新的部署架构,加大对 Java社区的投资,允许社区更多地参与。开发人员比较关注的Java SE 7将会在2011年夏天就绪,其中JCP已经批准了JSR 334、JSR 335、JSR 336和JSR 337等,支持改进Java语言和API规范,比如switch in string、multi-catch、泛型实例创建中的precise rethrow、Lambda表达式(闭包)等。而Java SE 8也将在SE 7发布之后的一年到一年半的时间就绪。
模块化的VM:可以将VM拆分成小块由应用程序使用,并按需推向Internet,这样的结果是Java应用程序的启动时间更短了,当VM不在目标机器上时,下载的时间也更短了。
额外的语言支持:Java平台支持用不同语言编写的应用程序,未来将会添加更多的语言支持,当然也包括对动态语言的支持,这就是所谓的达芬奇机或多语言虚拟机,请参考JSR-292。
增强的多核支持:需要借助工具、库和内置设施帮助新的和现有的Java应用程序更有效地利用多核硬件的优势,Java的线程模型可以轻松地创建并行执行任务的线程,但你如何将一个单一的任务拆分成多片进行并行执行呢?
其它改进包括持续的性能改进,以及许多语言方面的增强,包括增加的闭包,在switch语句中对Strings的支持,以及多块异常捕获,闭包是一个有争议的功能,它是通过使用匿名的Java内部类实现的。
Java EE
Oracle长期以来一直都是Java的支持者,也是最大的JCP成员之一,10多年前就开始参与Java EE规范的编制,因此对Oracle成为Java中间件市场的大鳄不应该感到意外。
Java EE展望
模块化,开发标准:Java EE 6通过配置文件(Profile)定义实现了模块化Java EE,允许厂商根据特定需求创建更小的Java EE堆栈子集,解决成本和Java EE使用复杂问题。通过模块化设计和定义标准,有助于简化Java EE,让它的应用领域更广泛。
Java EE 6规定了两种配置文件:Web配置文件(Servlet,JSP和JSF)和Java EE企业配置文件。显然还可以定义更多的配置文件种类,例如,为支持会话初始化协议(SIP)定义电信服务器配置文件。
UI和RIA:HTML仍然是Java EE应用程序隐含的UI协议,通常有Java Servlet,JSP和JSF生成,考虑到生产的Web页面是静态的,可以使用Ajax技术,不过它已经超出了Java EE的范畴。
虽然Oracle没有明确这方面的具体计划,但未来Java EE和JavaFX集成时将会解决Ajax问题。
Java ME
作为 Oracle 首选的移动环境的 Java,这个堆栈未来默认的呈现方式将会是 HTML, CSS 和 Javascript。Java ME 将包含 WebKit 引擎,JavaScript. 引擎,和 Java/JavaScript. 桥,换言之,未来运行新版 Java ME 的手机,将能够访问浏览器以外的 Web 服务,而不会有任何性能问题。这些引擎将直接插入 Java ME虚拟机和插入 Java FX。
Oracle 的 Java ME 引擎,将利用当代图形硬件加速器所擅长的(60 frames/秒)二维和三维渲染(在 Windows 环境下,微软的 Direct X,还有 OpenGL 或未来“更好”的技术)。 Java ME 将会针对 ARM7 和 ARM9芯片组进行优化,包括 Broadcom,三星,NEC,德州仪器,以及其他取得授权的手机部件制造商,还将内置充分利用手机装置的支付,通话,和定位等功能的 API。
JavaFX
随着 JavaFX 和 Java 的整合,并运行于 JVM 之上,它的富媒体处理及二维和三维渲染功能,也将能提供给任何在 JVM 上运行的其他编程语言,这意味着,例如 Groovy, Scala 和 JRuby 等也都能用来整合 JavaFX 的能力。
JavaFX展望:
基于可视化组件创建一个设计范式
为JavaFX应用程序创建一个丰富的UI扩展库
提升所有平台的JavaFX性能
增强跨设备移植JavaFX应用程序的能力
与Java,JavaScript和HTML 5无缝集成
支持新兴设备和UI范式(如多点触摸)

㈡ 编译原理

编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法。内容包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。 编译原理是计算机专业设置的一门重要的专业课程。编译原理课程是计算机相关专业学生的必修课程和高等学校培养计算机专业人才的基础及核心课程,同时也是计算机专业课程中最难及最挑战学习能力的课程之一。编译原理课程内容主要是原理性质,高度抽象[1]。

中文名
编译原理[1]
外文名
Compilers: Principles, Techniques, and Tools[1]
领域
计算机专业的一门重要专业课[1]
快速
导航
编译器

编译原理课程

编译技术的发展

编译的基本流程

编译过程概述
基本概念
编译原理即是对高级程序语言进行翻译的一门科学技术, 我们都知道计算机程序由程序语言编写而成, 在早期计算机程序语言发展较为缓慢, 因为计算机存储的数据和执行的程序都是由0、1代码组合而成的, 那么在早期程序员编写计算机程序时必须十分了解计算机的底层指令代码通过将这些微程序指令组合排列从而完成一个特定功能的程序, 这就对程序员的要求非常高了。人们一直在研究如何如何高效的开发计算机程序, 使编程的门槛降低。[2]
编译器
C语言编译器是一种现代化的设备, 其需要借助计算机编译程序, C语言编译器的设计是一项专业性比较强的工作, 设计人员需要考虑计算机程序繁琐的设计流程, 还要考虑计算机用户的需求。计算机的种类在不断增加, 所以, 在对C语言编译器进行设计时, 一定要增加其适用性。C语言具有较强的处理能力, 其属于结构化语言, 而且在计算机系统维护中应用比较多, C语言具有高效率的优点, 在其不同类型的计算机中应用比较多。[3]
C语言编译器前端设计
编译过程一般是在计算机系统中实现的, 是将源代码转化为计算机通用语言的过程。编译器中包含入口点的地址、名称以及机器代码。编译器是计算机程序中应用比较多的工具, 在对编译器进行前端设计时, 一定要充分考虑影响因素, 还要对词法、语法、语义进行分析。[3]
1 词法分析[3]
词法分析是编译器前端设计的基础阶段, 在这一阶段, 编译器会根据设定的语法规则, 对源程序进行标记, 在标记的过程中, 每一处记号都代表着一类单词, 在做记号的过程中, 主要有标识符、关键字、特殊符号等类型, 编译器中包含词法分析器、输入源程序、输出识别记号符, 利用这些功能可以将字号转化为熟悉的单词。[3]
2 语法分析[3]
语法分析是指利用设定的语法规则, 对记号中的结构进行标识, 这包括句子、短语等方式, 在标识的过程中, 可以形成特殊的结构语法树。语法分析对编译器功能的发挥有着重要影响, 在设计的过程中, 一定要保证标识的准确性。[3]
3 语义分析[3]
语义分析也需要借助语法规则, 在对语法单元的静态语义进行检查时, 要保证语法规则设定的准确性。在对词法或者语法进行转化时, 一定要保证语法结构设置的合法性。在对语法、词法进行检查时, 语法结构设定不合理, 则会出现编译错误的问题。前端设计对精确性要求比较好, 设计人员能够要做好校对工作, 这会影响到编译的准确性, 如果前端设计存在失误, 则会影响C语言编译的效果。[3]

㈢ 关于java

Java的Sun Microsystems的Java编程语言介绍了1995年5月(以下简称为Java语言)和Java平台的总称的。 HotJava浏览器(Java实现支持Java小程序)Java的魅力:跨平台,动态的Web,Internet计算。从那时起,Java被广泛接受和推广网络的快速发展,常用的浏览器现在支持Java applets。另一方面,Java技术是不断更新的。
Java平台的Java虚拟机(Java虚拟机)和Java应用程序编程接口(应用程序编程接口,或API)构成。独立的操作系统提供一个标准接口,可分为用于Java应用程序的Java应用程序编程接口的基本部分和扩展。 Java应用程序可以运行在Java平台上安装的硬件或操作系统平台。现在Java平台已经嵌入在几乎所有的操作系统。因此,Java程序可以只编译一次,并可以运行在不同的系统。 Java应用编程接口已经发展从1.1倍版本到1.2版本。 Java平台基于Java1.4,最近版本为Java1.7。

Java是分为三个系统JavaSE中(Java2平台标准版(32位x86)的Java平台,标准版),JavaEE服务器(Java 2平台企业版Java平台,企业版),和JavaME(Java 2平台Micro版平台的Java微型版)。

2009年的甲骨文(Oracle)宣布收购的太阳。

[编辑本段] JAVA的名字起源

一天,几个Java组的成员正在讨论如何命名这个新的语言,他们是爪哇(Java)的咖啡馆喝着咖啡,称为Java这项建议已得到别人的想法,Java名称的传播。没有去看看原来的Sun Java徽标认为,现在看,这不就是一杯热气腾腾的咖啡吗?

[编辑本段] Java语言特性

Java是一个简单的,面向对象的,分布式的,解释了安全,可靠的结构中立的,可移植的,高性能的多线程的动态语言。

当SUN的Java语言于1995年推出后,眼中的世界是神奇的语言吸引。 Java中到底有什么神奇的?

Java语言其实出生于1991年,最初称为OAK语言,SUN公司为一些消费性电子产品和通用设计环境。他们最初的目的只是为了开发一种独立于平台的软件技术,可以说是未知的,它几乎夭折,并在网络出现之前,OAK。然而,互联网的出现改变了OAK的命运。

的Java来临之前,在互联网上的信息内容都是一些无聊的刚性HTML文件。这是针对那些痴迷的WEB浏览器的人简直是无法忍受的。他们迫切希望看到的网络互动内容开发创建一个类,不需要考虑硬件和软件平台,可以执行应用程序的WEB是非常可取的,当然,这些程序也有一个很大的安全。对于用户来说,这样的要求,传统的编程语言是无能为力的。 SUN的工程师敏锐地认识到,从1994年起,他们开始OAK在WEB和HotJava的第一个版本所采用的技术。 SUN 1995年正式推出的Java的名义,几乎所有的Web开发人员心中感叹:哦,这正是我想要的!因此,Java已经成为一颗耀眼的明星,丑小鸭变成白天鹅的整个事情。

[编辑本段] Java的主要特点

Java语言是简单的。 Java语言的语法与C语言和C + +语言很接近大多数程序员很容易学习和使用Java。另一方面,Java已经丢弃了C + +中很少使用,这是很难理解的,令人困惑的功能,比如操作符重载,多继承,自动投。特别是,Java语言不使用指针,并提供了自动的废料收集,这样程序员就不必担心内存管理。

2,Java语言是一种面向对象的。 Java语言的类,接口和继承原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多重继承,并支持实施机制之间的类和接口(关键字实现)。 Java语言全面支持动态绑定,而C + +虚函数使用动态绑定。总之,Java语言是一种纯粹的面向对象编程语言。

3,Java语言是分布式的。 Java语言支持开发互联网应用,在基本的Java应用程序编程接口,它提供了网络应用编程的类库,包括URL,URL连接,套接字,ServerSocket的网络应用程序编程接口(java.net)。 Java的RMI(远程方法激活)机制是开发分布式应用程序的重要手段。

4,Java语言是健壮的。 Java的强类型,异常处理,自动垃圾收集的Java程序健壮性的重要保证。指针下降的Java明智的选择。 Java的安全检查机制使得Java更强的鲁棒性。

5,Java语言是安全的。 Java是经常被用来在网络环境中,Java提供了一个安全机制,以防止恶意代码的攻击。除了许多Java语言的安全功能,通过网络下载Java类的安全机制(类加载器)分配一个不同的名称空间,以防止其他本地类相同的名称,字节代码检查,并提供安全管理机制(类SecurityManager的)允许Java应用程序设置安全哨兵。

6,Java语言是体系结构中立的。 Java程序(后缀为java文件)被编译Java平台的体系结构中立的字节码格式的(类文件后缀),然后你就可以在Java平台上运行的任何系统。这种方法适用于异构的网络环境和软件分发。

7,Java语言是可移植的。这种可移植性体系结构中立此外,Java有严格的规定,每个基本数据类型的长度。 Java系统本身具有很强的可移植性,Java编译器是用Java实现的,Java的运行时环境中实现ANSI C.

8,Java语言的解释。正如前面提到的在Java平台上被编译成字节码格式,然后可以运行在任何系统中的Java平台,Java程序。在运行时,Java平台,Java解释器解释执行这些字节码类实施过程中需要加载到操作系统环境的耦合阶段。

9,Java是一种高性能。与解释型的脚本语言相比,Java是确实是一个高性能。事实上,Java的运行速度,搭配-IN-TIME(JIT)编译器技术的发展,越来越多的接近C + +。

10,Java语言是多线程的。线程是Java语言中的一种特殊的对象,它必须创建Thread类的子类(星期日)。通常有两种方法创建一个线程:首先,使用形式的几何结构,主题(可运行)构造函数将一个实现Runnable接口的对象包装成一个线程,第二子类派生从Thread类并重写run方法中,创建使用子类对象的线程。值得注意的是Thread类实现Runnable接口,因此,任何一个线程都有它的run方法,run方法包含的线程中运行的代码。的线程的活动来控制由一组方法。 Java语言支持同时执行多个线程之间的同步机制的多线程(关键字为synchronized)。

11,Java语言是动态的。 Java语言的设计目标之一的是,适于在环境中的动态变化。类的Java程序需要动态加载的经营环境,但也通过网络来加载所需的类。这也有利于软件的升级。此外,Java类的运行时类型检查的运行时表示。

Java语言的优秀功能,使Java应用程序具有无与伦比的耐用性和可靠性,这也降低了应用系统的维护成本。 Java嵌入式对象技术和Java平台API的支持可以缩短应用开发时间并降低成本。 Java编译,到处运行的特性使得它能够提供一个开放的架构可在任何地方,和低成本的方式来传递信息之间的多平台。特别是Java企业应用编程接口(Java企业API)为企业计算及电子商务应用提供相关的技术和丰富的类库。 [编辑本段] Java的相关技术

JDBC(Java数据库连接)提供了一个统一的接口来连接各种关系数据库,可提供统一的访问各种关系数据库,它由一组用JAVA语言编写的类和接口。 JDBC标准的API,JDBC为工具/数据库开发人员,你可以构建更高级的工具和接口,数据库开发人员用纯Java API来编写数据库应用程序,是一个商标名称。

2,EJB(企业JavaBeans)可以让开发人员能够轻松地创建,部署和管理跨平台的基于组件的企业应用程序。

3,用于开发分布式Java应用程序的Java的Java远程方法调用(RMI)。 Java对象,可以远程Java虚拟机调用。在这种方式中,远程方法激活可以发生在对等的两端,也可以发生在客户端和服务器之间,只要这两个应用程序都是用Java编写的。

4,Java的Java接口定义语言IDL()提供CORBA(公共对象请求代理体系结构)的无缝互操作性。这使得Java可以集成异构的业务信息资源。

5,JNDI(Java命名和目录接口)提供了一个统一的Java平台无缝连接。这个接口屏蔽了企业网络中使用的各种命名和目录服务。

6,JMAPI(Java管理API)提供了一套丰富的对象和方法的异构网络系统,网络和服务管理的发展。

7,JMS(Java消息服务),提供企业短信服务,如可靠的消息队列,发布和订阅通信,以及推 - 拉(推/拉)技术。

8,JTS(Java事务服务)提供开放的标准访问事务资源,包括事务处理应用程序,事务处理,管理和监测这些事务处理资源。

关注JavaBean,它是一个开放的标准的组件体系结构,它是独立于平台,但使用Java语言的Java技术,。一个JavaBean,以满足JavaBeans规范的Java类通常定义了一个现实世界的事物或概念。一个JavaBean属性,方法和事件的主要特点。通常情况下,在一个开发环境,支持JavaBeans规范(如Sun的Java Studio和IBM的VisualAge for Java)中,您可以直观地操作的JavaBean,也可以使用JavaBean构建一个新的JavaBean。 JavaBean的优势在于Java的可携性。现在,EJB(企业JavaBeans)的JavaBean概念扩展到Java服务器端组件体系结构,这个模型支持多层的分布式对象应用程序。除了到JavaBean,一个典型的组件体系结构DCOM和CORBA,在这些组件的体系结构的深入讨论超出了本书的范围。

Java的

计算机科学课程列表

JNI(Java本地接口)Java本机接口。

[编辑本段]

[Java开源J2EE框架Spring框架的Java开源项目]

Spring是一个解决方案,许多在J2EE开发功能强大的框架中的常见问题。 Spring提供了一个统一的管理业务对象的方法,并鼓励他们养成良好的生活习惯注入接口编程,而不是编程的类型。 Spring框架的基础是基于使用JavaBean属性控制反转容器。然而,这是完整的图片只是其中的一部分:Spring IoC容器作为一个完成的建筑关注所有架构层的完整解决方案是独一无二的。 Spring提供了唯一的数据访问抽象,包括简单和有效率的JDBC框架,极大地提高了工作效率,并减少了出错的可能性。 Spring的数据访问架构还集成了Hibernate和其他O / R映射解决方案。 Spring还提供了一个唯一的事务管理抽象,它能够在各种底层事务管理技术,例如JTA或者JDBC事务提供一个一致的编程模型。 Spring AOP框架提供了一个标准的Java语言,声明式事务管理和其它企业服务 - 如果你需要 - 还能实现自己的方面的POJO。这个框架足够强大,以使应用程序能够抛开EJB的复杂性,同时享受关键服务和传统EJB。 Spring还提供了集成和IoC容器强大而灵活的MVC Web框架。 [SpringIDE:Eclipse平台支持开发的一个插件。

WebWork的组件化和代码重用【Java开源的Web框架]开发

WebWork是由OpenSymphony组织专门拉出MVC模式J2EE Web框架。 WebWork的最新版本是2.1,现在WebWork2.x的前身,里卡德奥伯格开发的WebWork的WebWork的已经被分成两个项目Xwork1和webwork2的。 Xwork简洁,灵活功能强大,它是一个标准的Command模式,并且完全从web层脱离出来。 XWork之上提供了很多核心功能:前端拦截器(Interceptor)运行时表单属性验证,类型转换,强大的表达式语言(OGNL - 对象图形标记语言)的IoC(控制反转控制反转)容器。在建立XWork的顶部webwork2的处理HTTP的响应和请求。 webwork2的使用的ServletDispatcher HTTP请求转化为行动(业务层Action类)的映射会话(session)的应用范围(应用程序),请求的请求参数映射。 webwork2的支持多视图的视图部分可以使用JSP,速度,FreeMarker的的,JasperReports,XML。在WebWork2.2增加了对AJAX的支持,这种支持是建立的基础上的DWR与Dojo框架【EclipseWork:用于WebWork的一个Eclipse插件,帮助开发人员

的Struts【Java开源的Web框架]

Struts是一个基于J2EE平台的MVC框架,主要是采用Servlet和JSP技术。 Struts应用程序开发人员可以完全满足需求,易于使用,灵活快速乱舞在过去的一年。 Struts的的Servlet,JSP,自定义标签和信息资源(信息资源)整合到一个统一的框架,开发人员可以使用它的发展不再需要自己编码实现全套MVC模式,极大的节约的时间,让是Struts是一个非常不错的应用框架。 StrutsIDE:对Struts协助开发一个Eclipse插件]

休眠[开放源码的Java持久化框架]

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行非常轻量级的对象编程思维对象的封装性,使任意的Java程序员可以使用它来操纵数据库的。 Hibernate可以应用任何场合使用JDBC,无论是客户端程序在Java实用程序也可以使用一个Servlet / JSP的Web应用程序中,最具革命性的,Hibernate可以取代CMP EJB的J2EE架构的应用程序来完成数据持久化的重要任务。 Hibernate在Eclipse平台的辅助开发工具:【使用Hibernate Synchronizer】【MiddlegenIDE

石英[Java的开源作业调度】

Quartz是OpenSymphony的开源组织在该领域的工作安排的一个开源项目,它可以与J2EE,J2SE应用程序相结合也可以单独使用。 Quartz可以用来创建简单或运行十,百,甚至是数以十万计的就业机会,每天的日程是如此复杂。 Jobs可以做成标准的Java组件或EJBs。石英石英1.5.0的最新版本。

速度【Java开源模板引擎

Velocity是一个基于java的模板引擎(模板引擎)。它允许任何人仅仅简单的使用模板语言模板语言来引用由java代码定义的对象。速度应用于web开发时,界面设计和java程序开发人员同步开发遵循MVC架构的网站,也就是说,页面设计人员可以专注于显示的页面,java程序开发人员关注业务逻辑编码。速度java代码从网页中分离出来,便于长期维护的网站,同时也为我们在JSP和PHP提供了另一种解决方案。 Velocity的能力远超过网络网站的发展在这方面,例如,它可以产生SQL和PostScript的,XML模板(模板),它也可以被用来作为一个独立的工具,以产生源代码和报告,或者作为其他系统的集成组零件。速度还提供了模板服务的汽轮机的web开发框架(模板服务)。速度+涡轮机提供一个模板服务,允许Web应用程序开发一个真正的MVC模型。 【VeloEclipse:发展速度的辅助插件Eclipse平台]

IBATIS [开放源码的Java持久化框架

使用的iBatis提供的ORM机制,在人事方面,实现了业务逻辑,面对纯Java对象,这一层通过Hibernate ORM而言基本相同的具体的数据操作,Hibernate会自动生成SQL语句,ibatis的要求开发者编写具体的SQL语句。相对Hibernate的“全自动”ORM机制,ibatis的SQL开发的工作量和数据库移植性上的让步,系统设计提供了更大的自由空间。实现的有益补充,作为“全自动”ORM ibatis的外观显得特别有意义。

Compiere的ERP&CRM【Java开源的ERP和CRM系统

Compiere的ERP&CRM提供全面的解决方案,为全球小型和中小型企业,涵盖所有领域,从客户管理,供应链,财务,管理,支持多组织,多币种,多会计模式,多成本,多语种,多税收国际化的特征。易于安装,易于实施,易于使用。只需要几个小时,你可以用采购 - 采购 - 发票 - 付款报价 - 订单 - 发票 - 收款,产品定价,资产管理,客户关系,供应商关系,员工关系,的运作分析功能强大的结果。

滚子Weblogger【Java开源Blog博客]

网络博客更复杂的设计,源代码是一个很好的学习材料。它应该支持网络博客的功能,如:评论功能,所见即所得的HTML编辑器,引用,提供了页面模板,RSS聚合的blogroll,管理,并提供了一个XML-RPC接口。

Eclipse的Java的开放源代码开发工具]

Eclipse平台的开发框架,IBM捐赠给开放源代码社区,不是因为它是着名的IBM声称-4千万美元投资的发展,总数的资金,但如此巨大的投资,因为结果:一个成熟的,精心设计的,可扩展的体系结构。

的NetBeans【Java开源开发工具]

NetBeans IDE是一个软件开发提供了免费,开源的集成开发环境。你可以得到所有的工具,你需要使用Java,C / C + +甚至是Ruby来创建专业的桌面应用程序,企业应用程序,web和移动应用程序。 IDE可以在多种平台上运行,包括Windows,Linux和Mac OS X中,和Solaris,这是非常易于安装和易于使用的。

XPlanner【Java开源的项目管理

XPlanner一个基于Web的XP团队计划和跟踪工具。 XP独特的开发概念,如迭代,用户故事,,XPlanner提供了相应的管理工具,XPlanner支持XP开发流程,并解决遇到的问题的使用XP想法的开发项目。 XPlanner特点包括:简单的模型规划,虚拟笔记卡(虚拟笔记卡)迭代的用户故事和工作记录的追踪,未完成的故事会自动迭代,工作时间追踪,生成团队效率,个人考勤表,SOAP界面支持。

HSQLDB【Java开源DBMS数据库

HSQLDB(高超声速SQL)是一个纯Java的关系数据库的开发,并提供了一个JDBC驱动程序来访问数据。支持ANSI-92标准SQL语法。而且他占的空间小。大约只有160K,快速的数据库引擎。

Liferay的【Java的开源门户和

代表一个完整的J2EE应用程序,使用Web,EJB以及JMS等技术,特别是在前面部分使用Struts框架技术的接口,XML-基于portlet配置文件可以自由动态扩展,使用Web服务来支持一些远程访问的信息,Apahce Lucene的全文搜索功能。

Jetspeed的?【Java开源的门户门户]

Jetspeed是一个开放源代码的企业信息门户(EIP)的实现,使用的技术是Java和XML。信息门户的用户可以使用浏览器,支持WAP协议的手机或其他设备访问Jetspeed的架设。 Jetspeed的所扮演的角色的信息集中器,它可以把信息一起,很容易地提供给用户。

的JOnAS【Java开源的J2EE服务器]

的JOnAS是一个开放源代码的J2EE实现的ObjectWeb协会开发。集成Tomcat或Jetty成为它的Web容器,以确保符合Servlet 2.3和JSP 1.2规范。 JOnAS服务器的依赖,实现以下的Java API:JCA,JDBC,JTA,JMS,JMX,JNDI,JAAS,JavaMail的。

JFox3.0【Java开源的J2EE服务器使用

JFox是一个开源的Java EE应用服务器,致力于提供一个轻量级的Java EE应用服务器,从3.0开始,JFox提供了一个支持模块化MVC框架,以简化EJB和Web应用程序的开发!如果您正在寻找一个简单,重量轻,高效,全面的Java EE开发平台,JFox正是你需要的。

[编辑本段] Java的IDE

当今最流行的Eclipse,Myeclipse中,Jbuilder2008,Jdeveloper的,Netbeans的。 [编辑本段] Java“一书

Java编程思想(第4版)

:(美)埃克尔,陈薅怦翻译

JAVA编程思想(第四版)出版社:机械工业出版社

出版日期:2007-6-1词:版次:1页数:880印刷时间:2007/06/01开本:印象:纸张:胶版纸ISBN:9,787,111,213,826包装:平装

关于作者

Bruce Eckel的是MindView公司的总裁,该公司提供的软件,其客户的咨询和培训。他的C + +标准委员会的投票成员之一,拥有应用物理学学士和计算机工程硕士学位。除了这本书外,他是一个“C + +编程思想”的人合作撰写的“C + +编程思想,第2卷”(两本书的英文影印版和中国版引入了由机械工业出版社出版)及其他着作。他已发表了150多篇论文,还经常参加世界各地的研讨会并发表演讲。

[编辑本段] Java版本历史

Java语言诞生于1995年,

日,1996年,第一个JDK-JDK1.0出生的

1996年4月,10个最重要的操作系统供应商确认其产品中嵌入JAVA技术

1996年9月,约83,000 Web应用程序的JAVA技术,使

1997年2月18日一天,JDK1.1版本

1997年的JavaOne大会,参与者超过百万人,创下了类似的全球规模的会议记录

1997年,JavaDeveloperConnection社区成员超过10万

1998年,JDK1.1被下载超过200万次

在1998年,JAVA2企业平台发布

1999年,Sun发布了Java J2EE三个版本:标准版(J2SE),企业版(J2EE)和微型版(J2ME)

2000年5月8日,JDK1.3发布 /> 2000年5月29日,JDK1.4 2001年,诺基亚公司宣布,2003年将销售100万的Java功能的手机

2月2001年9月24日,2010年,J2EE1.3

2002年, 26日,J2SE1.4,因为Java的计算能力已显着增加

9月30日,2004 18:00 PM,J2SE1.5发布,成为Java语言的发展历史的又一个里程碑。要显示版本的重要性,J2SE1.5更名为Java SE 5.0的

2005年JavaOne大会上,Sun公司公开Java SE 6中。在这一点上,各种版本的Java已经被重新命名为取消一个数字“2”:J2EE更名为Java EE,J2SE更名为更名为Java SE,J2ME的Java ME

2006年12月,Sun发布了JRE6目前JDK7.0 0.0

在研究和开发,有测试版的的 https://jdk7。 dev.java.net / 可下载

[编辑本段] Java的互联网

我们知道,以前的WWW不仅可以发送文字和图片,Java的交互式页的的出现是一个伟大的革命。

的Java,设计不是互联网,万维网,它也可以被用来编写独立的应用程序。 Java是一种面向对象的语言,Java语言是C + +语言,所以我们必须掌握C + +编程语言,再学习Java语言是很容易的! Java程序需要编译,它被放置在互联网服务器上,当用户对服务器的访问,Java程序被下载到本地用户的机器,解释的浏览器中运行。实际上有两种Java程序的Java应用程序是一个完整的程序,如Web浏览器。另一个Java应用程序运行在一个Web浏览器程序。

Java程序其浏览器Hotjava中,提供了一种方法,可以让你的浏览器中运行的程序。您可以直接从您的浏览器来播放声音,你可以播放动画,Java的也可以告诉你如何处理与一个新的类型的文件浏览器的页面。当我们能够在2400波特线来传输视频图像,Hotjava中能够显示视频。

[编辑本段] Java和电子商务

,电子商务是当今的一个热门话题,传统的编程语言,但是,不能做电子商务系统,电子商务程序代码的基本要求:安全,可靠,做生意的世界各地,在不同的平台上运行的客户机的要求。 Java的强大的安全性,平台无关的,独立的硬件结构,用简单的语言,面向对象,并在网络编程语言中占据无可比拟的优势,成为电子商务系统的首选语言。

[编辑本段] Java的8个基本数据类型和它们的包装类

int基本数据类型的包装类的原始类型的份额

短短2个字节的整数中的字节数4个字节

长8个字节

浮子的4个字节

双人大床8个字节

字节字节1个字节

CHAR字符2个字节

布尔布尔测试编译环境

[编辑本段]第一个JAVA程序的HelloWorld

/ /文件名的HelloWorld.java

/ /声明公共类一类

的HelloWorld { / /声明一个方法

公共静态无效的主要(字串[] args){/ /程序入口

/ /输出

(“世界你好!); BR />}

}

/ /例子

包的文本;

类测试(

公共静态无效的主要(字串[] args){...... />短D = 12,/ /短整型的

System.out.println(D); / / D

长,C = 144L; / /长整数添加L

系统通过out.println(C)/ /输出

诠释Z = 15; / /整数

System.out.println(Z)/ /输出

字符E ='I “/ /字符”

System.out.println(五);/ /输出è

}



[编辑本段] Java新手入门是非常重要的一个一些基本的概念

[1] [2] [3]最后一类:为防止他人从你的类派生出新的类,它是不可扩展的。

动态调用比静态调用花费的时间要长。

抽象类:规定一个或多个抽象方法的类本身必须定义为abstract。

案件:公共抽象的字符串getDescripition

Java的每一个类都是从Object类扩展。和

平等和对象类的toString方法。

等于用于测试一个对象是否与另一个对象是相等的。

的toString返回一个字符串,几乎每一个类的对象将覆盖此方法,以便返回当前状态的正确表示。

(toString方法是一个很重要的方法)

泛型编程:所有的值?任何类型可以是同一对象类的变量,而不是。

数组列表:ArrayList的动态数组列表,是一个类库,定义在java.uitl包可自动调节数组的大小。
类的类对象类的getClass方法返回一个类型的实例的类,它包含的主要方法的类会被加载在程序启动时,虚拟机是所有他需要的类,每一个加载的类加载必须加载它需要的类。

㈣ 编译原理的发展历程


在20世纪40年代,由于冯·诺伊曼在存储-程序计算机方面的先锋作用,编写一串代码或程序已成必要,这样计算机就可以执行所需的计算。开始时,这些程序都是用机器语言 (machine language )编写的。机器语言就是表示机器实际操作的数字代码,例如:
C7 06 0000 0002 表示在IBM PC 上使用的Intel 8x86处理器将数字2移至地址0 0 0 0 (16进制)的指令。
但编写这样的代码是十分费时和乏味的,这种代码形式很快就被汇编语言(assembly language )代替了。在汇编语言中,都是以符号形式给出指令和存储地址的。例如,汇编语言指令 MOV X,2 就与前面的机器指令等价(假设符号存储地址X是0 0 0 0 )。汇编程序(assembler )将汇编语言的符号代码和存储地址翻译成与机器语言相对应的数字代码。
汇编语言大大提高了编程的速度和准确度,人们至今仍在使用着它,在编码需要极快的速度和极高的简洁程度时尤为如此。但是,汇编语言也有许多缺点:编写起来也不容易,阅读和理解很难;而且汇编语言的编写严格依赖于特定的机器,所以为一台计算机编写的代码在应用于另一台计算机时必须完全重写。
发展编程技术的下一个重要步骤就是以一个更类似于数学定义或自然语言的简洁形式来编写程序的操作,它应与任何机器都无关,而且也可由一个程序翻译为可执行的代码。例如,前面的汇编语言代码可以写成一个简洁的与机器无关的形式 x = 2。
在1954年至1957年期间,IBM的John Backus带领的一个研究小组对FORTRAN语言及其编译器的开发,使得上面的担忧不必要了。但是,由于当时处理中所涉及到的大多数程序设计语言的翻译并不为人所掌握,所以这个项目的成功也伴随着巨大的辛劳。几乎与此同时,人们也在开发着第一个编译器, Noam Chomsky开始了他的自然语言结构的研究。他的发现最终使得编译器结构异常简单,甚至还带有了一些自动化。Chomsky的研究导致了根据语言文法(grammar ,指定其结构的规则)的难易程度以及识别它们所需的算法来为语言分类。正如现在所称的-与乔姆斯基分类结构(Chomsky hierarchy )一样-包括了文法的4个层次:0型、1型、2型和3型文法,且其中的每一个都是其前者的专门化。2型(或上下文无关文法(context-free grammar ))被证明是程序设计语言中最有用的,而且今天它已代表着程序设计语言结构的标准方式。
分析问题( parsing problem ,用于限定上下文无关语言的识别的有效算法)的研究是在20世纪60年代和70年代,它相当完善地解决了这一问题, 现在它已是编译理论的一个标准部分。它们与乔姆斯基的3型文法相对应。对它们的研究与乔姆斯基的研究几乎同时开始,并且引出了表示程序设计语言的单词(或称为记号)的符号方式。
人们接着又深化了生成有效的目标代码的方法,这就是最初的编译器,它们被一直使用至今。人们通常将其误称为优化技术(optimization technique ),但因其从未真正地得到过被优化了的目标代码而仅仅改进了它的有效性,因此实际上应称作代码改进技术(code improvement technique )。
这些程序最初被称为编译程序-编译器,但更确切地应称为分析程序生成器 (parser generator ),这是因为它们仅仅能够自动处理编译的一部分。这些程序中最着名的是 Yacc (yet another compiler- compiler),它是由Steve Johnson在1975年为Unix系统编写的。
类似地,有穷自动机的研究也发展了另一种称为扫描程序生成器 (scanner generator )的工具,Lex (与Yacc同时,由Mike Lesk为Unix系统开发的)是这其中的佼佼者。在20世纪70年代后期和80年代早期,大量的项目都关注于编译器其他部分的生成自动化,这其中就包括代码生成。这些尝试并未取得多少成功,这大概是因为操作太复杂而人们又对其不甚了解。
编译器设计最近的发展包括:首先,编译器包括了更为复杂的算法的应用程序,它用于推断或简化程序中的信息;这又与更为复杂的程序设计语言(可允许此类分析)的发展结合在一起。其中典型的有用于函数语言编译的Hindle y - Milner类型检查的统一算法。
其次,编译器已越来越成为基于窗口的交互开发环境(interactive development environment,IDE )的一部 分,它包括了编辑器、链接程序、调试程序以及项目管理程序。这样的IDE的标准并没有多少, 但是已沿着这一方向对标准的窗口环境进行开发了。

㈤ 编译器的发展史

编译器
编译器,是将便于人编写,阅读,维护的高级计算机语言翻译为计算机能识别,运行的低级机器语言的程序。编译器将源程序(Source program)作为输入,翻译产生使用目标语言(Target language)的等价程序。源程序一般为高级语言(High-level language),如Pascal,C++等,而目标语言则是汇编语言或目标机器的目标代码(Object code),有时也称作机器代码(Machine code)。

一个现代编译器的主要工作流程如下:

源程序(source code)→预处理器(preprocessor)→编译器(compiler)→汇编程序(assembler)→目标程序(object code)→连接器(链接器,Linker)→可执行程序(executables)
目录 [隐藏]
1 工作原理
2 编译器种类
3 预处理器(preprocessor)
4 编译器前端(frontend)
5 编译器后端(backend)
6 编译语言与解释语言对比
7 历史
8 参见

工作原理
翻译是从源代码(通常为高级语言)到能直接被计算机或虚拟机执行的目标代码(通常为低级语言或机器言)。然而,也存在从低级语言到高级语言的编译器,这类编译器中用来从由高级语言生成的低级语言代码重新生成高级语言代码的又被叫做反编译器。也有从一种高级语言生成另一种高级语言的编译器,或者生成一种需要进一步处理的的中间代码的编译器(又叫级联)。

典型的编译器输出是由包含入口点的名字和地址以及外部调用(到不在这个目标文件中的函数调用)的机器代码所组成的目标文件。一组目标文件,不必是同一编译器产生,但使用的编译器必需采用同样的输出格式,可以链接在一起并生成可以由用户直接执行的可执行程序。

编译器种类
编译器可以生成用来在与编译器本身所在的计算机和操作系统(平台)相同的环境下运行的目标代码,这种编译器又叫做“本地”编译器。另外,编译器也可以生成用来在其它平台上运行的目标代码,这种编译器又叫做交叉编译器。交叉编译器在生成新的硬件平台时非常有用。“源码到源码编译器”是指用一种高级语言作为输入,输出也是高级语言的编译器。例如: 自动并行化编译器经常采用一种高级语言作为输入,转换其中的代码,并用并行代码注释对它进行注释(如OpenMP)或者用语言构造进行注释(如FORTRAN的DOALL指令)。

预处理器(preprocessor)
作用是通过代入预定义等程序段将源程序补充完整。

编译器前端(frontend)
前端主要负责解析(parse)输入的源程序,由词法分析器和语法分析器协同工作。词法分析器负责把源程序中的‘单词’(Token)找出来,语法分析器把这些分散的单词按预先定义好的语法组装成有意义的表达式,语句 ,函数等等。 例如“a = b + c;”前端词法分析器看到的是“a, =, b , +, c;”,语法分析器按定义的语法,先把他们组装成表达式“b + c”,再组装成“a = b + c”的语句。 前端还负责语义(semantic checking)的检查,例如检测参与运算的变量是否是同一类型的,简单的错误处理。最终的结果常常是一个抽象的语法树(abstract syntax tree,或 AST),这样后端可以在此基础上进一步优化,处理。

编译器后端(backend)
编译器后端主要负责分析,优化中间代码(Intermediate representation)以及生成机器代码(Code Generation)。

一般说来所有的编译器分析,优化,变型都可以分成两大类: 函数内(intraproceral)还是函数之间(interproceral)进行。很明显,函数间的分析,优化更准确,但需要更长的时间来完成。

编译器分析(compiler analysis)的对象是前端生成并传递过来的中间代码,现代的优化型编译器(optimizing compiler)常常用好几种层次的中间代码来表示程序,高层的中间代码(high level IR)接近输入的源程序的格式,与输入语言相关(language dependent),包含更多的全局性的信息,和源程序的结构;中层的中间代码(middle level IR)与输入语言无关,低层的中间代码(Low level IR)与机器语言类似。 不同的分析,优化发生在最适合的那一层中间代码上。

常见的编译分析有函数调用树(call tree),控制流程图(Control flow graph),以及在此基础上的 变量定义-使用,使用-定义链(define-use/use-define or u-d/d-u chain),变量别名分析(alias analysis),指针分析(pointer analysis),数据依赖分析(data dependence analysis)等等。

上述的程序分析结果是编译器优化(compiler optimization)和程序变形(compiler transformation)的前提条件。常见的优化和变新有:函数内嵌(inlining),无用代码删除(Dead code elimination),标准化循环结构(loop normalization),循环体展开(loop unrolling),循环体合并,分裂(loop fusion,loop fission),数组填充(array padding),等等。 优化和变形的目的是减少代码的长度,提高内存(memory),缓存(cache)的使用率,减少读写磁盘,访问网络数据的频率。更高级的优化甚至可以把序列化的代码(serial code)变成并行运算,多线程的代码(parallelized,multi-threaded code)。

机器代码的生成是优化变型后的中间代码转换成机器指令的过程。现代编译器主要采用生成汇编代码(assembly code)的策略,而不直接生成二进制的目标代码(binary object code)。即使在代码生成阶段,高级编译器仍然要做很多分析,优化,变形的工作。例如如何分配寄存器(register allocatioin),如何选择合适的机器指令(instruction selection),如何合并几句代码成一句等等。

编译语言与解释语言对比
许多人将高级程序语言分为两类: 编译型语言 和 解释型语言 。然而,实际上,这些语言中的大多数既可用编译型实现也可用解释型实现,分类实际上反映的是那种语言常见的实现方式。(但是,某些解释型语言,很难用编译型实现。比如那些允许 在线代码更改 的解释型语言。)

历史
上世纪50年代,IBM的John Backus带领一个研究小组对FORTRAN语言及其编译器进行开发。但由于当时人们对编译理论了解不多,开发工作变得既复杂又艰苦。与此同时,Noam Chomsky开始了他对自然语言结构的研究。他的发现最终使得编译器的结构异常简单,甚至还带有了一些自动化。Chomsky的研究导致了根据语言文法的难易程度以及识别它们所需要的算法来对语言分类。正如现在所称的Chomsky架构(Chomsky Hierarchy),它包括了文法的四个层次:0型文法、1型文法、2型文法和3型文法,且其中的每一个都是其前者的特殊情况。2型文法(或上下文无关文法)被证明是程序设计语言中最有用的,而且今天它已代表着程序设计语言结构的标准方式。分析问题(parsing problem,用于上下文无关文法识别的有效算法)的研究是在60年代和70年代,它相当完善的解决了这个问题。现在它已是编译原理中的一个标准部分。

有限状态自动机(Finite Automaton)和正则表达式(Regular Expression)同上下文无关文法紧密相关,它们与Chomsky的3型文法相对应。对它们的研究与Chomsky的研究几乎同时开始,并且引出了表示程序设计语言的单词的符号方式。

人们接着又深化了生成有效目标代码的方法,这就是最初的编译器,它们被一直使用至今。人们通常将其称为优化技术(Optimization Technique),但因其从未真正地得到过被优化了的目标代码而仅仅改进了它的有效性,因此实际上应称作代码改进技术(Code Improvement Technique)。

当分析问题变得好懂起来时,人们就在开发程序上花费了很大的功夫来研究这一部分的编译器自动构造。这些程序最初被称为编译器的编译器(Compiler-compiler),但更确切地应称为分析程序生成器(Parser Generator),这是因为它们仅仅能够自动处理编译的一部分。这些程序中最着名的是Yacc(Yet Another Compiler-compiler),它是由Steve Johnson在1975年为Unix系统编写的。类似的,有限状态自动机的研究也发展了一种称为扫描程序生成器(Scanner Generator)的工具,Lex(与Yacc同时,由Mike Lesk为Unix系统开发)是这其中的佼佼者。

在70年代后期和80年代早期,大量的项目都贯注于编译器其它部分的生成自动化,这其中就包括了代码生成。这些尝试并未取得多少成功,这大概是因为操作太复杂而人们又对其不甚了解。

编译器设计最近的发展包括:首先,编译器包括了更加复杂算法的应用程序它用于推断或简化程序中的信息;这又与更为复杂的程序设计语言的发展结合在一起。其中典型的有用于函数语言编译的Hindley-Milner类型检查的统一算法。其次,编译器已越来越成为基于窗口的交互开发环境(Interactive Development Environment,IDE)的一部分,它包括了编辑器、连接程序、调试程序以及项目管理程序。这样的IDE标准并没有多少,但是对标准的窗口环境进行开发已成为方向。另一方面,尽管近年来在编译原理领域进行了大量的研究,但是基本的编译器设计原理在近20年中都没有多大的改变,它现在正迅速地成为计算机科学课程中的中心环节。

在九十年代,作为GNU项目或其它开放源代码项目的一部分,许多免费编译器和编译器开发工具被开发出来。这些工具可用来编译所有的计算机程序语言。它们中的一些项目被认为是高质量的,而且对现代编译理论感性趣的人可以很容易的得到它们的免费源代码。

大约在1999年,SGI公布了他们的一个工业化的并行化优化编译器Pro64的源代码,后被全世界多个编译器研究小组用来做研究平台,并命名为Open64。Open64的设计结构好,分析优化全面,是编译器高级研究的理想平台。

编译器是一种特殊的程序,它可以把以特定编程语言写成的程序变为机器可以运行的机器码。我们把一个程序写好,这时我们利用的环境是文本编辑器。这时我程序把程序称为源程序。在此以后程序员可以运行相应的编译器,通过指定需要编译的文件的名称就可以把相应的源文件(通过一个复杂的过程)转化为机器码了。

编译器工作方法
首先编译器进行语法分析,也就是要把那些字符串分离出来。然后进行语义分析,就是把各个由语法分析分析出的语法单元的意义搞清楚。最后生成的是目标文件,我们也称为obj文件。再经过链接器的链接就可以生成最后的可执行代码了。有些时候我们需要把多个文件产生的目标文件进行链接,产生最后的代码。我们把一过程称为交叉链接。

阅读全文

与编译器技术的发展相关的资料

热点内容
程序员送女友的相册 浏览:251
压缩文件怎么设置打开加密 浏览:764
tracert命令结果详解 浏览:356
唯赛思通用什么APP 浏览:371
古玩哪个app好卖 浏览:146
u盘内容全部显示为压缩包 浏览:517
编译固件时使用00优化 浏览:356
速借白条app怎么样 浏览:756
用纸张做的解压东西教程 浏览:12
求圆的周长最快算法 浏览:190
安卓热点怎么减少流量 浏览:270
北京代交社保用什么app 浏览:855
第一眼解压视频 浏览:726
文件夹err是什么 浏览:97
qt4编程pdf 浏览:572
局域网服务器下如何连续看照片 浏览:254
经过加密的数字摘要 浏览:646
加密锁9000变打印机 浏览:694
程序员的职业发展前途 浏览:639
安卓是世界上多少个程序员开发 浏览:45