半静态语言–原理和价值分析 - 编程入门网
010-12-30 infoq 何坤
4.2.4 开发流程 半静态语言的开发流程涉及5个步骤: 编码 编译(类型检查). 半静态语言的编译与静态类型语言很不相同,它的编译只进行类型检查,不产生机器码或字节码。因此,半静态语言的编译可以称为“检查”(Checking). 在这个步骤中,如果代码存在类型错误(Error),编译失败,那么你必须退回到步骤1)修改代码bug,直到代码编译正确。 编译过程还可以产生警告(Warning),程序员可以有选择的忽略。 测试 QA 执行功能测试,集成测试和系统测试。 如果测试失败,必须退回到步骤 1)。 发布 将代码发布到生产环境 执行 最终用户访问用半静态语言开发的应用功能。 从上面的开发流程可见, 开发时阶段覆盖了步骤 1)、2), 运行时阶段覆盖了步骤 3)、4)、5). 为了保证只有编译合法的半静态语言程序在生产环境运行,需要有以下两条约束规则来保证: 代码编译合法后,才能提交到测试阶段; 测试正确的代码才能发布上线。 由于半静态语言仍用解析器运行,理论上代码仍具有修改即生效的特点。但从软件质量保证角度,这个缺点应该规避。因此上线后的代码不允许未经编译、测试的随意修改。 4.2.5 类型检查系统和原理 半静态语言的类型检查系统中的核心组件编译器Compiler(或称为Checker),它本质上是一个类型化解析器。编译时,该系统采用类型检查算法(Type Checking Algorithm);而在运行时阶段,仍由解释器执行代码,采用类型推断算法(Type Inference Algorithm)。 半静态语言的类型检查基本原理是,根据变量声明对源码进行解析、类型检查和语义检查,输出检查结果。这个系统中类型检查系统的基本原理如下图所示: 半静态语言–原理和价值分析(5)时间:2010-12-30 infoq 何坤我们使用一个命令行工具 vmcheck 来编译半静态语言代码。格式为: Format: vmcheck templateFile 以前面的声明式Velocity源码为例,类型检查系统包含以下几个基本规则和检查点: 变量是否声明; 如果变量 $customer 未声明,编译错误如下: Error: line:2,column:7,variable $customer not declared ! JavaBean的属性和方法是否存在 如果com.alibaba.saling.Customer类没有属性 ''Name'' , 编译错误如下: Error: line:2, column:7, property ''Name'' not found for $customer. 如果com.alibaba.utils.CurrencyUtil 类没有方法 ''convert'' , 编译错误如下: Error: line:6, column:22, method ''convert'' not found for $currencyUtil. 方法调用的参数匹配; 3.1) 如果这样调用 ''convert'' 方法: $currencyUtil.convert() 则产生如下编译错误信息: Error: line:6, column:22, insufficient parameters for method call ''convert'' . 3.2) 如果这样调用 ''convert'' 方法 $currencyUtil.convert( $customer , "##.##" ) 则产生编译错误信息:
特定语句的类型匹配,如条件,循环语句: 集合泛型的类型匹配 如果有下面的复制语句调用 #set( $customer.Name = $product.Price) 则产生编译错误信息: Error: line:11, column:5, type mismatched of assignment statement. ''if'', ''foreach'' 等语句使用的类型匹配规则类似。这与Java等强类型语言一样。 对于Java语言,JDK5+支持泛型特性。因此,类型检查也需支持泛型。对于以下代码
编译错误如下:
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |