TTCN3新执行器系列-合理映射runson语义
来源:互联网 发布:java秒杀设计 编辑:程序博客网 时间:2024/06/06 07:42
TTCN3是一个比较怪的语言,
大部分语法语义都是面向过程的,但有几个概念又很面向对象,如组件。
说到组件,不得不说runson关键字。
runson关键字可以使用于function和altstep中。
type component MTC
{
......
}
function Hello() runs on MTC
{
......
}
runson的function内,可以直接使用组件内定义的成员变量。
如果用C++映射,很好理解。
组件映射成类,带runson的方法映射成类的成员函数。
映射很好,但还是有点区别的。
TTCN3的组件定义,不需要声明函数,这和C++的成员方法是不一样的。
TTCN3是数据和方法分离的,
组件内定义数据,而runson的函数,是和组件定义分离的。
实际上,runson的函数是声明即定义,
所以在一个大测试套工程中,组件定义在一个模块,而runson该组件的函数,往往分布于多个模块中。
于是,根据上述的C++映射,我们很快发现了问题。
首先,TTCN3声明即定义的概念,映射成C++代码不好做,我们需要遍历完整个工程才知道有多少函数是runson某个组件上的。
其次,任一个runson函数的声明修改,将导致转换后的C++文件大范围重编译,因为组件的h文件改动导致所有定义runson函数的模块的改动。
我们曾经考虑过这样的改动,
将runson相同一个组件的函数,转换后的C++代码都生成到一个cpp和h文件中。
但这个方法又导致如下的问题:
1、runson函数往往很多,数以百千个是正常的,但类的成员函数个数有限制。
而且一个类引入那么多的函数也不是一件值得去做的事情。
2、代码搬迁导致TTCN3和C++映射文件不一致,这对后续的调试器开发工作都引入了技术难度。
我们更希望代码是一对一的映射的,TTCN3在那个文件实现的,C++应该生成一个对应的文件存放转换后代码。
到目前为止,恐怕不再认为runson函数就映射成类的成员函数,是一个好的方案了。
后续针对这个难题而重构的代码量还是蛮大的。
重构方案的灵感来自《Inside the C++ Object Model》关于编译器实现类成员函数调用的说明。
基于runson函数声明即定义的语法,我们将runson函数实现为模块的成员函数,而非组件。
组件实例作为runson函数的第一参数传入,函数内涉及组件成员变量的使用,可通过第一参数调用实现。
就这样,runson函数依赖于模块而非组件。
当runson函数声明改动,只需要重新编译链接当前模块即可。
这个方案的改动是可行而且值得去做的,但需要预编译器提供完备的语法和语义信息支撑。
- TTCN3新执行器系列-合理映射runson语义
- TTCN3新执行器系列-序
- TTCN3新执行器系列-说说基于TTCN3代码行的调试器实现
- TTCN3新执行器系列-对component的理解
- TTCN3新执行器系列-实现类型兼容问题
- TTCN3新执行器系列-实现简单的反射机制
- TTCN3新执行器系列-尽量远离template
- TTCN3新执行器系列-说说C++的编译速度
- TTCN3新执行器系列-对线程组件PTC的理解
- TTCN3新执行器系列-谈谈几次伤筋动骨的重构工作
- TTCN3新执行器系列-端口操作的接口简单化重构
- TTCN3新执行器系列-如何最小化类的成员函数(对拷贝构造和赋值操作函数的反思)
- JDK5.0新特性系列 使用ProcessBuilder执行本地命令
- 【移动语义和精准转发系列一】移动语义
- TTCN3学习笔记--转载
- TTCN3本身的类型
- [UML]对新语义建模
- HTML5新标签语义及用法
- hdu 1564 证明
- USACO算法系列六——contact
- Linux 文件内容查看工具介绍
- Linux 文件内容查看工具介绍
- java过滤器(filter)一
- TTCN3新执行器系列-合理映射runson语义
- 史上最牛的Linux内核学习方法论
- VMware workstation虚拟机详尽教程
- 常用的网络推广方法
- 禁用输入法非数字及粘贴
- Windows编程
- 第02章 IntelliJ IDEA起步 熟悉IntelliJ IDEA编辑器 01
- 如何获取绑定变量的值
- 介绍linux下vi命令的使用