开发工具的基本功能就是编译功能,连调试功能都不能算是最基本的模块
发展至今,开发工具从原始的汇编工具到非集成方式的开发环境,到字符状态的集成环境,最后是现在的可视化集成环境
主要模块划分成
编译模块、调试模块、库(包括类库和基本函数库)、编辑器
分析中大部分以编译和调试为主,将库分析作为一个独立部分,而编辑器将在最后分析,因为必须等前面所有模块的需求分析完后,才能得到
一个基本的接口表,这个表是编辑器和各模块交互的接口,如此对编辑器分析将能更全面
而所有接口细节将在按视图角度分析各模块后得到
第一部分 基本功能分析
一、编译器分析
编译器 ——将某种指定语言的源代码翻译成某种指定的目标代码,同时检查源码中的静态逻辑是否符合语言定义
基本包含三大块内容:语言选择、错误检查、翻译
编译器从流程看是一个单纯的数据流处理过程,分析源码,查找语法错误,判断正确后,将源码转化成中间代码,进行优化,最后按硬件的要
求转化成目标代码,这就是编译器的基本运转图
基本结构如下:
源码 —— 词法分析 (词定义规则)
|
|—— 语法分析 (语法定义规则)
|
|—— 语义分析 (语义描述规则)
|
|—— 代码优化 (优化规则)
|
|—— 中间代码生成 (转换规则)
|
|—— 目标代码生成 (转换规则)
|
|—— 可执行文件 (代码连接规则)
1、计算机语言分析
每种语言产生时,都说知己是最好的,至少在某方面,实际情况呢,个人认为,在计算机语言发展到现在,还是强调哪个语言适合哪个方面,
本质上是一种商业操作,而非语言自身的问题
主流开发语言,如:
Ada —— 美国政府强推的号语言,但不能被广泛使用
C —— 被广泛使用,但定义不严格
Pascal —— 定义很严格,长期被用于教学,但几乎被淘汰,幸好有了DELPHI才重新恢复了生机
C++ —— 源自C被广泛使用,但和C一样有许多不严格之处
VB —— 门槛较低的语言,在视窗初期,由于开发工具的种类单调,使其获得了广泛的使用
Java —— 产生于商业竞争,做为网络开发工具前景不错,还不适合底层开发
C# —— 新的品种,存在和JAVA等语言严重等同之处,其应用结构不错,发展如何尚待时间来证明一切
1)从发展趋势看语言的特征
语言的发展趋势是差异逐步缩小,各种语言之间的交流接口是人为制造的商业障碍,正在被标准化渐渐消除,语言使用的一些早期约定,如内
存分配方式、参数排列顺序、对象垃圾回收等等,都是于语言本质上无关的内容,是操作系统和编译器之间的约定
语言 —— 是一种表达规则,让使用者方便的按照一定格式描述自己需要表达的逻辑
而现在经过长期的商业宣传后,使多数人产生了如下的误解,如C++就是VC或C++Builder,Pascal就是DELPHI,把语言和一个完整的开发工具等
同了,使得用某种语言必然是用某种开发工具,是一种商品僵化开发人员思想的体现,属于一种比较成功的商业行为,从一定程度上迫使开发
人员跟着商业产品打转,总是忙于各种各样的语言学习中,而主要是学习各种开发工具的使用
语言发展在面向对象分析推广后,除了原本的关键字差异外,在类上使用的符号基本一致,由于开发中类库的大量使用,使得语言侧重点从基
本语句的表达,转向类库设计中,而类库本身是面向对象的产物,无传统语言的痕迹,所以各开发语言工具的类库相似就不足为奇了
而最近出现的C#,第一眼看上去就是JAVA或DELPHI,和C/C++的形象相差很大了,以明显的方式告诉世人语言的未来是一致的
2)对语言的一些分工考察
早期的语言诞生是为了一些特定的目的,如BASIC是一种解释语言,但语言发展至今,还要说语言分工的话,就是一种商业行为了
BASIC至今仍旧是一种解释型语言,而它一度被广泛使用,原因就是VC较难用或者是使用方式不友好,而当时能竞争一下的BC没能跟上时代,而
被淘汰了,使得VC那种格式保留至今而未有改变,个人认为那是一种严重限制自由的风格
就象当年说的,VB做界面和数据库、VC做底层,说白了是微软的一种商业策略,而和语言自身无关
其实对一般用户来说,是解释还是编译的本质差别根本就不用考虑,他们考虑的是问题的结果,就是是否能得到一个速度满意的可执行文件,
而解释型语言现在也形成了可执行文件了,还不断提高效率,从结果上说和编译型没差别,中间的实现过程和语言无关的,因为并没有法律规
定BASIC就必须是解释型的,同样的代码是以解释方式还是编译方式对语言本身是没有区别的,纯粹是一种商业运作
毕竟市场是垄断的,开发者这样规定了,使用者就只能只能这样认为了
正因为如此,和VB的特点很象的DELPHI和C++builder侧重于可视化编程的工具一出现,就获得很好的口碑,不过奇怪的是C++Builder在市场上
若隐若现,一直来推广不利,这与DELPHI的流行形成强对比,因为两者本质上是一个界面和一个类库及函数库,差别仅在于关键字的叫法不同
,或许是不愿意和微软VC过于正面冲突,采取了低姿态
3)近来语言的发展
从DELPHI、C++Builder和Kylix可以看出Borland正是充分地利用了语言无差别性,轻松的扩展其产品线,而能保证他们地统一界面,基本一致
的类库,和一样的调试方式,可以看出它的良苦用心,以传统语言方式和微软抗衡
而微软的以C#核心的.NET计划,同样是试图统一开发平台的计划,只是它建立在新语言上,这本身是一种风险,幸好微软的实力大,有强制推
广新语言的能力,而且它是以一种语言为根基,从中间代码上下功夫,以的中间代码转化方式来适应各种硬件平台,实质和GCC能适应各种平台
的本质是一样的(是否算抄袭呢)
Java经历了跨世纪的发展,到现在已经成为一种标准,面对微软C#的挑战,加上编译形式限制了速度,可以说今后的路难走,毕竟模仿它的新
语言还会出现,而Java由于兼容性,必然会越来越显老化,看其自身变化是否能跟上时代了
这也是传统语言共同面对的问题,不进则退
总结:
1)语言趋向一致
2)开发新语言成本与风险高,周期太长
结论:
1)不开发新的语言种类
2)改变编译器的结构,使其不再受限制于特定语言
采用统一界面,以界面不变微基础,吸收各种语言形式,做到以不变应万变,再好的语言都能直接使用,省去推广新语言的风险,比较适合国
内的形式,而单纯的算法突破不足以改变现有编译结构,除非编译理论有重大突破,即使真的这样了,也只需要改变编译器的前半部分的功能
,毕竟所产生的目标代码还是机器代码,而后半部分的大改变是要计算机结构有本质变化时才可能,而那也只是改变编译器的后一半,与语言
本身是无关的
所以重点放在编译器的结构上