viscose脚本语言的对外宣布

其实,viscose脚本语言存在已经有四个年头了,但一直仅限于在自己参与的项目里使用,也就身边的人知道和熟悉其语法.今天看见某个人的博客上罗列了一堆国人自己写的语言和平台,而他们的特性都不是viscose想要追求的.特立此文以公布之.

viscose其实跟IronPython等基于.Net的脚本有一样的想法:利用.Net程序的反射机制,自动将.Net的功能导入到脚本中使用,从而避免书写繁琐的C/C++与脚本语言之间的扩展函数.

viscose的原生数据类型是:整数,双精度浮点数,字符串.内建了None,Point,PointF,Array,Map,Guid.

viscose支持类,匿名函数,JSON,名字空间.类函数全部都是虚函数,没有访问控制,所有访问都是public的,仅支持单继承.支持操作符重载(未全部支持,但原因仅仅是效率因素),函数参数支持引用.数据类型区分值类型和引用类型.

viscose的关键字有:if,elif,else,while,break,continue,do,for,var,method,switch,case,default,class,new,return,import,set,namespace

viscose的预处理符号有:true,false,__FILE__,__LINE__,__PATH__,__ABSPATH__;

viscose接受#using,#include导入其他的脚本.

viscose的特殊变量:@self,@base,@set

viscose的行注释是//,块注释是/**/,并引入特殊的行注释:///<END ALL>表示后面的脚本全部无效,主要用于测试

viscose支持常见的算术运算(内建幂次方运算),比较运算,逻辑运算,位运算

viscose比较特别的语法:

set 

set ::= "set" expression "{" suite "}";

在suite块里,优先引用expression里的成员变量。

import

import ::= "import" "*"|identifier expression";"

用来临时重命名某个名字空间下的名称,或者导入其全部内容

匿名:包含匿名类,匿名变量,匿名函数。

匿名类:anonym_class ::= "new" variable "{" class_body* "}";

匿名变量:anonym_variable ::= "new" call_function;

匿名函数:anonym_method ::= "method" "("argument_list")" "{"suite"}"


viscose最出彩的地方,在于自动导入.Net的类,来扩展脚本功能。本质上,不需要做任何操作,viscose就能导入所有的.Net的功能。但很多时候,并不想脚本具有程序的全部功能,所以,特定制了

public ref class Attribute : public System::Attribute;
public ref class ReadOnly : public System::Attribute;

用于控制哪些类,哪些函数/属性/变量可以提供给脚本使用。

viscose提供了.Net中绝大部分数据类型与脚本数据类型的自动转换,也提供了自定义转换的接口。

viscose拟提供协作式线程。但由于.Net没有完全吃透,导致目前在这方面还没有太多进展。

同一个程序可以同时运行多个viscose的虚拟机,各个虚拟机之间完全没有干涉,也提供了同一个虚拟机下运行多个脚本进程/多个脚本线程的能力。

viscose提供代理功能,无缝接受.Net函数/脚本函数作为其代理对象


以下演示如何将 .Net程序的功能导入到脚本使用:

[VictoryScript::vsAttribute]
public ref class TestExport
{
int m_nValue;
public:
[VictoryScript::Attribute]
property int Value{
int get(){return m_nValue;}
void set(int x){m_nValue = x;}
}


[VictoryScript::Attribute]
System::Drawing::Color testfunc(int a,int b)
{
Debug::Msg(L"testfunc({0},{1});",a,b);
return System::Drawing::Color::FromArgb(a,b,0xFF);
}


[VictoryScript::Attribute]
void testcolor(System::Drawing::Color clr)
{
Debug::Msg(clr.ToString());
}
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值