cst脚本语言的设计【1】设计背景
来源:互联网 发布:2017悬疑推理网络剧 编辑:程序博客网 时间:2024/06/09 16:21
我在很多场合论述了脚本语言的重要性,分析过各个语言的特性。由于自己主要做C/C++开发,所以对嵌入式脚本语言,如Lua比较推崇。现在由于工作的关系,准备设计一种脚本语言,类于c语法。先介绍下设计背景。
在很多系统设计的背景下,特别是我正在从事的服务系统设计,性能是很重要的考量,所以c/c++是首选的。但涉及到很多业务逻辑,却是容易变更和增删的,使用c/c++来应对这种业务逻辑是很辛苦的,因此,必须在性能允许的范围内,需要提高灵活性来应对这种变化。脚本语言是可行的方案。我也研究过网游系统,象魔兽世界的私服T端,类脚本的解决方案也多被采用。显然,如我在【编译和解释的组合】中表达的观点那样,在编译和解释结合来解决高性能背景下应对业务的灵活性是不错的主意。
如果将编译的代码比做机器的部件,那么解释的代码应该是螺丝类连接器。shell脚本连接的各个程序,lua连接的是各种函数,sql连接的是各种数据库对象,象虚幻或者雷神脚本,他们连接是游戏中的各种对象。
我在设计期货风控系统时,遇到一些需求,坚定了我设计一个独特的脚本语言的想法,因为我更喜欢c的简洁,所以语法结构会更倾向于c,当然后面会增加类c++特性的支持。在这个系统中,需要将数据库中的数据拉到内存表中进行计算,计算过程还会设计到dbf等。计算的结果需要以报文方式发送给其他客户端。而计算中涉及到的业务逻辑,在后来需要增加或者修改。在这种情况下,使用传统的sql+c已经很难解决了。
cst全称c script,就是类似于c语法的脚本语言。他的主要涉及目标是作为连接器存在的。本身即可以作为一个独立的脚本脚本语言,也可以做作为其他脚本语言的容器,允许嵌入式的使用其他脚本解释器来解析执行相应的脚本,比如sql/lua/pyton/sh。cst为他们提供交换数据的能力。
因为cst主要目标是被嵌入到c中执行的,作为系统级别的脚本,所以,性能是很重要的考量。目前的目标,是计算能力最低为全c编译代码的50%。下面代码是个范例
#! /bin/cst
import std ;
void cst_init()
{
printf("hello world /n") ;
}
void cst_final()
{
//
}
void open_cursor(cursor *result) __interpreter__ t-sql
{
DECLARE result CURSOR FOR SELECT id , name FROM account ;
OPEN result ;
}
void close_cursor(cursor *result) __interpreter__ t-sql
{
CLOSE result ;
}
int do_script()
{
cursor result ;
open_cursor(&result) ;
close_cursor(&result) ;
return do_script() ;
}
#!可以作为linux下执行脚本解释器的指令,也可以被当作注释。
cst_init是每次载入这个脚本时,都会被执行。cst_final是每次卸载脚本时被执行的。而do_script没有直接关系。可以被解释器单独执行,比如其他脚本可以要求执行do_script。
而通过__interpreter__指令,可以将后面的语句直接传给t-sql解释器,结果通过参数返回。
是不是很有吸引力呢?但难度不小,后面我会一步步地来完成这个工程,欢迎您的加入。
- cst脚本语言的设计【1】设计背景
- CST脚本语言的设计【2】规划
- CST脚本语言的设计【3】适用范围
- CST 脚本语言的设计【4】LINQ
- 脚本语言的分析和设计
- 如何设计一门新的脚本语言?
- 自制脚本语言(1) 词法、语法、虚拟机的设计思路
- 自制脚本语言(2) LR(1) parser generator的设计
- 设计随想--脚本语言
- 背景设计
- 模糊背景设计的优雅
- 简易模式脚本语言(PS)设计
- 网页设计中纯色背景 的例子
- 安卓实现音响效果的背景设计
- H5+CSS3设计动态的首页背景
- 网页设计中背景的创意风格与设计趋势!
- 渐变背景设计
- Atitit. 脚本语言的断点单步调试的设计与实现 attialx 总结 php 参照java
- 我们暧昧,却不属于对方~~~~~~
- 我也注册CSDN啦
- CentOS中时间同步方法
- spring配置事物bean必须配接口
- IT经理七宗罪:过分渴求新技术居首位
- cst脚本语言的设计【1】设计背景
- table取childNodes对象子节点
- SUSE11安装时禁用防火墙
- VC++ 如何创建一个线程并传递参数
- 静态接口DLL(IMPORT_C and EXPORT_C)(转)
- MyEclipse下XFire开发Webservice实例
- RawFS (Raw File System)
- pz伯伯的番茄排序
- map的一种替代方案,不会自动排序