快速业务通道

半静态语言–原理和价值分析 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
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 , "##.##" )

则产生编译错误信息:

Error: line:6, column:22, parameter type mismatched of $customer for method call ''convert'' , Double is required.

特定语句的类型匹配,如条件,循环语句:

集合泛型的类型匹配

如果有下面的复制语句调用

#set( $customer.Name = $product.Price)

则产生编译错误信息:

Error: line:11, column:5, type mismatched of assignment statement.

''if'', ''foreach'' 等语句使用的类型匹配规则类似。这与Java等强类型语言一样。

对于Java语言,JDK5+支持泛型特性。因此,类型检查也需支持泛型。对于以下代码

##$ List buyingProducts $buyingProducts.add( $customer)

编译错误如下:

Error: line:12, column:5, parameter type mismatched of $bu

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号