现在的位置: 首页 > 综合 > 正文

ds 语言 Specification(规格说明书)

2012年03月26日 ⁄ 综合 ⁄ 共 2967字 ⁄ 字号 评论关闭
要写一种语言,我早有准备了,现在开始起草规格说明书,请路过的人都来参与。DD已经在ccrun.com做广告了,应该知名度会逐渐上升的。

虽然我已经广发请帖征求良方,可是还是孤身奋战http://community.csdn.net/Expert/TopicView3.asp?id=4690611

虽然我的前期作品也得到一定的肯定

http://www.softpedia.com/get/Multimedia/Graphic/Graphic-Others/Duceland-Designer.shtml

"We believe that the concept can be changed once the functions are developed to a certain level."
现在是动手做实际的累活的时候了。


一、前言

  在说明ds 语言之前,先说明ds与其他语言的不同之处,也是读者最关心的地方


二、与其他语言不同之处

1 类的方法可以随时hook,例如

1 class A
2 {
3 public void func();
4 public int x;
5 };

那么

1 A a;
2 a.func+=after_call; //这里表示在func之后调用after_call
3 a.func-=before_call; //这里表示在func之前调用before_call
4 a.x.get+=after_call;//对于变量的存取也可hook
5 a.x.get-=before_call;

该特性将函数和事件混合起来,而且,如果不是使用变量,而是使用类函数赋值

1 A.func=B.func;

结果是,打这一行执行后的A的所有实例的func函数都执行了B的func函数了。将怎么处理其中的成员呢???


 2
数组。数组自动形成,例如

1 A a;
2 a.x=100;//
3 a.x[0]=100; //一致

好处,在数据库的记录操作的时候能自然使用,例如声明一个,学生信息录入窗口,窗口中放入一个输入姓名的编辑框,自然,该编辑框是单个变量,但是如果是多行编辑的话,则使用上述特性更加自然。又如获取全部成员的语法:

1 object m=memberof(a);//memberof是关键字

那么m可以直接使用,当然表示m[0],即第一个成员,也可以m[9]表示第10个成员啦


3
自成的toString 和 fromString 的序列化和反序列化,该特性在DD中已经得到使用

4 别名,用户e文和中文同时混合使用
例如

1 #alias class<-->
2 #alias public<-->公有
3 类 学生录入窗体
4 {
5 #alias 设置值<-->SetValue
6 #alias from "c:\\别名对照表.txt"  //从外部装入别名对照表
7 公有 设置值(....);
8 };

 5 防止重入
例如,有时候在Edit1的改变事件中设置Edit2的内容,而在Edit2的改变事件中反过来又设置Edit的内容,结果是事件重入,导致stack overload,死循环直至栈用完,所以事件加入once关键字后可以防止重入。

6 动态成员数据和操作,生成的对象名字化。例如

 1 class A
 2 {
 3   public int x;
 4   A()
 5   {
 6       adddef(int y);
 7   }
 8 };
 9 
10 A a;
11 a.y=100;//此处为动态成员数据


7
合并类
例如:VCL的TForm 和 MFC的CWnd非常类似,提供一种比较容易的替代方法。

1 A+=B;

效果是,A和的所有实例已经含有B的成员函数和成员数据,同名者只取A的,加上特点1 就可以使这项功能更强大。

8 动态继承
A inherit B;
效果是A成为了B的子类。

其他在协同方面的特性还在设计中,请有协同OA,或游戏编写经验者,或编程语言高手新手来指点指点。更请语言爱好者倾注你的期望。

指令系统:

指令号 附加信息 指令描述
系统操作
00000000 (null) 无执行效果,但是当前的线程和线索都让出处理机,重新进行调度
00000001 (null) 停机等待
算术操作符
00010001 操作数0,操作数1 操作数0 = 操作数1
00010001 操作数0,操作数1,操作数2 操作数0 = 操作数1 + 操作数2
00010003 操作数0,操作数1,操作数2 操作数0 = 操作数1 - 操作数2
00010003 操作数0,操作数1,操作数2 操作数0 = 操作数1 * 操作数2
00010003 操作数0,操作数1,操作数2 操作数0 = 操作数1 / 操作数2
00010003 操作数0,操作数1,操作数2 操作数0 = 操作数1 % 操作数2
00010003 操作数0,操作数1 操作数0 +=  操作数1
00010004 操作数0,操作数1 操作数0 -= 操作数1
00010005 操作数0,操作数1 操作数0 *= 操作数1
00010005 操作数0,操作数1 操作数0 /= 操作数1
00010005 操作数0,操作数1 操作数0 %= 操作数1
函数调用
00020005 操作数0,操作数1 操作数0类名,操作数2构造函数参数列表
00020005 操作数0,操作数1 操作数0对象函数,操作数1参数列表
00020005 操作数0,操作数1,操作数2 操作数0对象函数,操作数1参数列表,操作数2出错对象函数
00020005 操作数0,操作数1 把操作数1推入操作数0参数列表对象
00020005 操作数0,操作数1 操作数0为函数返回值 = 操作数1
00020005 操作数0,操作数1 操作数0 = 操作数1为函数返回值
00020005 操作数0,操作数1 操作数0对象函数做完立即调用操作数1对象函数
00020005 操作数0,操作数1 操作数0对象函数做之前调用操作数1对象函数
线程与同步
00030005 操作数0 置操作数0临界变量
00030005 操作数0 复位操作数0临界变量
00030005 操作数0,操作数1 监视操作数0得值调用操作数1对象函数
00030005 操作数0,操作数1 监视操作数0置值调用操作数1对象函数
00030005 操作数0,操作数1 并发操作数0对象函数列表,操作数1参数列表列表
00030005 操作数0,操作数1 操作数1对象函数置入操作数0对象函数列表
00030005 操作数0,操作数1 操作数1参数列表置入操作数0参数列表列表
00030005 操作数0,操作数1 等待操作数0对象函数
00030005 操作数0 置操作数0对象函数为单一入口,其他线程或本线程递归调用则不调用此函数而不是等其完成
00030005 操作数0 复位操作数0单一入口对象函数
对象
00030005 操作数0,操作数1 设置操作数0类名继承操作数1类名的所有成员数据和成员函数
00030005 操作数0,操作数1 序列化操作数1对象到操作数0变量
00030005 操作数0,操作数1 从操作数1变量反序列化成操作数0对象
流程控制
00040005 操作数0 跳转操作数0程序段偏移量
00040005 操作数0,操作数1 如果操作数0真则跳转操作数1程序段偏移量
00040005 操作数0,操作数1 如果操作数0假则跳转操作数1程序段偏移量
00040005 操作数0 推入操作数0程序段偏移量到Exception栈中
00040005 操作数0 从Exception栈中出栈并跳转到操作数0程序段偏移量

抱歉!评论已关闭.