快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
yingProducts for method call ''add'' , ''com.alibaba.saling.Product'' is required.

As for the previous Velocity code snippet [Code 1], after executing ''vcheck'' command on console,

半静态语言–原理和价值分析(6)

时间:2010-12-30 infoq 何坤

4.3 变量声明

变量声明就是对变量的类型进行声明。变量声明根据放置的地点分为两种,显示声明(Explicit Declaration)和隐式声明(Implicit Declaration)。

显式声明

显式声明采用特殊指令(Directive)或语句(Statement),在源码中对变量进行类型声明。

显式声明通常的格式为:

<Declaration Directive> <Type> <varList>

为了保持与运行时解释器的兼容性,我们引入一种“基于注释的扩展声明指令”技术。以Velocity模板语言(VTL)为例, 在Velocity注释指令“##”上扩展“##contentrdquo;指令用于变量声明。如下例所示:

[Code 3] showBuyProducts_static.vm

##$ com.abc.crm.Customer customer ##$ List buyingProducts ##$ String flag, sss, abc

对于其他动态类型语言,同样使用“基于注释的扩展声明指令”来实现兼容性的半静态语言。

Language Comment Instruction S2L Declaration Instruction
Velocity ## ##$
Javascript // //$
Ruby # #$
Python # #$

隐式声明

隐式声明不用在源码中编写声明语句,而从配置文件或其他地方分析变量声明。例如,使用Velocity进行Web App开发时,如果需要直接频繁操作request,response,session等Servlet容器对象,编译器可以将它们作为内置变量,使用隐式声明。如下表所示:

Built-in variable Type
request HttpServletRequest
response HttpServletResponse
session HttpSession
application ServletContext

以下代码使用隐式声明变量 request, session,

<html> <body> Hello, $request.getParameter("username") ! <p/> Your logged in at $session.getAttribute("loginTime") last time. </body> </html>

这段代码看起来,对现有Velocity语法没有任何扩展. 但实际上,在编译时,编译器使用内置变量对源码进行类型检查。

如果编写了一段错误的调用,例如:

$session.getParameter("loginTime")

则编译器输出一条“方法不存在的”错误信息:

Error: line:12, column:5, method ''getParameter'' not found for $session!.

半静态语言–原理和价值分析(7)

时间:2010-12-30 infoq 何坤

4.4 语法约束

半静态语言基于某种动态类型语言进行实现,但它在语法语义上更接近与静态类型语言。在这两个端点,存在一些矛盾的地方,比如:变量动态定型,ducking type等。因此,半静态语言需要有语法约束:

变量先声明,后使用

变量在作用域scope内置能声明为一个类型;

禁止Ducking type 也就是多, 动态语言的无继承多态特性不允许使用,因为这与静态类型系统是冲突的。

如果违反这几个规则,编

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号