架设更为便利的桥梁--程虎研究员谈编译系统的技术与发展

微电脑世界记者--李明霞

 

----问:您作为我国一直从事编译工作的老专家,能否谈谈编译系统这些年来的发展状况?

----答:我们一般所说的软件主要是包括系统软件(如操作系统、编译系统等)、支撑软件和应用软件三大类。解决任何领域的问题一般都要用到系统软件,编译系统是仅次于操作系统的系统软件。

----编译系统是将高级语言书写的程序翻译成等价的机器语言程序或汇编语言程序。在逻辑上由分析和综合两大部分组成。分析部分主要包括词法分析、语法分析和语义分析;综合部分主要包括存储分配、代码优化和代码生成,有时还包括生成中间代码。编译程序的分类主要包括诊断型、优化型、可重定目标型、交叉型和增量型。

----随着高级语言在形式化、结构化、智能化和可视化(Visual)等方面的发展,作为实现相应语言功能的编译系统,也随之向自动程序设计和可视化程序设计的方向发展。我想主要应该从以下几个方面来理解:

----首先,针对各种高级语言的新版本编译系统不断涌现。如Fortran语言已经从66、77、90发展到了Fortran95,据说马上就要有Fortran2000推出。这些新版本的编译系统大多是在原有旧版编译系统的基础上修改完善而成的。

----其次,伴随并行计算机的出现,并行C、并行C++、并行Fortran或高性能Fortran(HighPerformenceFortran,HPF)等语言也纷纷出台,这些语言的编译系统一般都是在相应串行语言编译系统的基础上增加并行部分,把并行语言转换成串行语言,再用串行语言编译系统编译。

----第三,对并行编译技术的研究不仅仅针对并行语言而进行,还研究如何在并行机上进行编译。

----第四,面向对象技术的不断发展,一方面产生了面向对象语言如C++的编译系统,另一方面是研究与过去的思路有所不同的--如何用面向对象的方法来研制编译系统,。

----第五,Java语言作为面向网络应用的跨平台语言,将虚拟机的概念实用化,现已有第三代Java语言虚拟机问世。

----第六,自动生成编译系统的工具有些已经投入使用。还有生成编译系统其他部分,如语义分析、代码生成等的工具。

----问:编译系统作为系统软件的一部分,对于一般用户来讲,了解它的意义何在?您认为一个好的编译系统的技术标准是什么?

 

----答:在编译系统的研究与学习中,非常具有代表性的著作是Aho等专家撰写的《编译原理、技术与工具》一书。在该书中所谈到的一些技术内容,不仅对研制编译技术系统本身有用,其原理、方法和技术在很多方面都具有指导作用。如五代机语言、面向对象的程序设计语言、神经网络模型、反汇编技术、软件自动生成、模式识别等。所以国内、外计算机软件专业和应用专业的本科生甚至研究生都必修或选修这门课程。

----我认为判断一个好的编译系统的标准与这个编译系统的具体使用情况有关。如果编译的速度十分重要,如在教育性的编译器和为试验算法要不断修改程序的编译器,就要求编译程序简单。如果执行程序的结果处于首要位置,就要仔细加工,精雕细刻,多做优化,尽可能生成高质量的目标代码,这对于要反复使用的程序,特别是大程序的编译系统更加重要。

----除了编译程序本身外,还有几个方面的要求:

----(1)要便于用户程序的调试。

----(2)运行系统也很重要,要有良好的运行系统、运行环境,对面向对象语言来讲,要有丰富的类库。实际应用中的编译程序可以包括:程序开发支持环境,包括编辑、编译、调试、运行和维护;预处理;程序语言的非标准版本等。

----(3)在优化方面,优化效果又有一套标准,包括全局优化和局部优化。

----(4)对Java语言来说,包括编译系统和虚拟机实现两大部分,每一部分中有不少技术,虚拟机中有无用单元收集等,这些技术或者说算法的好坏也可以构成标准的一部分。

----(5)查错工作要尽可能做好。主要指编译程序帮助用户找出程序中的错误,并在查错后的修改与恢复功能如何。

----(6)编译系统的维护工作,一个编译系统在交给用户后能否跟踪维护,用户有问题能否帮助解决等服务,越来越在编译系统好坏的标准中占据重要的位置。

----问:以前我们讲编译系统都是针对某类机器或某种语言,现在情况如何?

----答:60年代,计算机界有过面向通用计算机的统一语言(Universal Computer Oriented Language,UNCOL)用虚拟机实现统一编译的思想,即各种语言都编译到UNCOL,然后在本地机上实现UNCOL,但后来没有流行起来。现在一般还都是针对具体机器、具体的操作系统研制特定语言的编译系统。

----中科院软件所的唐稚松院士于70年代设计了XYZ语言族,它是一种系列化的时序逻辑语言族,其中各个子语言分别表示不同的程序设计方式或程序范型语言,这可以看作是一种未来发展模式。软件所的董韫美院士近年来提出MLIRF方法,就是用机器学习(Machine Learning)和递归函数(Recursive Function)相结合,中间加入人机交互(Interaction),写出规约(Specification),规约包括一个上下文无关语言(CFL)表示的概念,用CFL来描述问题和它的解,用上下文无关语言的递归函数(CFRF)描述问题和解之间的关系,即解题算法,这是属于软件自动化。

----1995年Sun公司提出的Java语言是分两步走,第一步是编译成统一的字节码程序,然后在不同机器和操作系统下实现Java虚拟机,在本地机和操作系统上解释或编译字节码程序。

----软件开发经历过高级语言时期、结构化程序设计时期、软件工程工具时期,现在朝基于知识的软件工程时期发展。

----但一般说来,随着计算机硬件的变化(32位机发展到64位机)、操作系统的不同,相应的编译系统都要做一定的修改。如果当初设计编译系统时就有前瞻性考虑,对字长等留有余地,安置一些可变参数,修改起来就比较容易。

----问:我国的编译系统研究与国外编译系统研究的差距主要有哪些?

----答:我国的编译系统研究始于60年代,起步并不晚。我国先后自行研制了ALGOL60语言、类ALGOL60语言的BCY语言及其编译系统,后来又研制了Fortran语言、COBOL语言、ADA语言、757向量机上的向量Fortran语言、银河巨型机上的并行Fortran及其编译系统。有的系统还在我们国家两弹一星及其他国家重大项目中立下过汗马功劳。

----从技术方面讲,我们的差距并不大,但是我们都是研制一个系统后,由于机器生产数量少,有的只有2台到3台,甚至是1台,缺乏产品化、商品化环节,维护改进工作做得差,所以对用户来说,编译系统的质量不及国外的好,虽然有可能优化工作也做得不错,但调试手段、运行环境等全面衡量,就显得很不够。

----问:您能否从编译系统的角度,谈谈对Java语言的看法?

----答:Java语言是经过编译系统把Java语言编译成字节码程序,然后再在不同操作系统和计算机上解释或编译,也就是我们所说的虚拟机。该虚拟机统一规定有200多条指令,字节码程序都由这些指令组成,现在已经发展到第三代Java虚拟机。

----《计算机世界》报上曾经介绍过Java所使用的伪码编译器的概念,即把源程序转换成非现有机器上本机固有的目标码,也就是虚拟机指令。这样可以:(1)掩盖机器的差异;(2)加快开发周期,不用为每种机器、每种操作系统编程序,简化了跨平台开发;(3)可移植性好;(4)便于维护、管理和修改。

----过去的UNCOL和后来Pascal语言都有过这样的思想,现在的Java语言能够得到如此众多人的认可,从某种意义上讲,应该归结为Internet网络的发展,这是一个极好的时机,人们对跨平台的需求显得格外重要,技术上又可行,因此得到广泛的普及。

----虽然用户最大的怨言是速度太慢,但通过Sun公司与其他一些公司的几年努力,已经开发出第三代虚拟机HotSpot,速度大大提高。最近的Java2在功能上有了很大的增强,特别适合于企业,不但适合IT应用,商业和银行等方面的事务处理,而且适应工业、制造业和其他许多行业的需要,Java也在日趋成熟。


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值