Hi,广大VB爱好者,大家好!
2011年就确定要写一个自己的脚本平台。但是一直没有下定决心来做。
今年因为一个项目,下定决心来做这件事。
首先解释下Cobra,这个名字中文是眼镜蛇的意思,当初遇到这个单词时,一眼就记住了,两个词根,Co和Bra,中文是啥意思,自己琢磨吧,特容易记哈,屌丝特喜欢!
确定了名字后,问了下度娘,发现已经有一门语言叫Cobra,还好基本没啥名气。所以就不换了。
Cobra,我们的设计初衷是,类似.net,可以在一个虚拟机上运行几个语言,目前只支持VB.NET语言,未来会扩充支持Java、C#语法。
简要介绍Cobra的特性:
1、完全面向对象
接口、继承、多态等
有包(库)、命名空间的概念。
2、支持结构和枚举。
3、支持API调用,暂时不支持回调。
4、支持调用ActiveXDll
ActiveXDll中的类可以被实例化并调用,而且支持其事件处理。
实例化的类,可以被Cobra类继承扩展。
5、Cobra类,可以作为普通类实例在VB等支持COM的语言中使用。
6、强类型。
作者对强类型,有强烈的认同感,另外,由于能力有限,目前还不清楚怎么解决弱类型情况下的运行速度问题。
所以暂时不支持后期绑定,后续版本会有所支持。
7、关于数据类型。
数据类型和VB完全一样,可以互传。
8、数组。
支持动态数组和静态数组。
另外不支持多维数组,在作者的编程生涯中,从未使用过多维数组,故舍弃支持。
9、支持中文。
所有关键字,都可以设置别名,别名可以是中文。
10、速度。
速度还算不错,比按键精灵的那个脚本平台快几十倍。
当然了,跟专业的脚本平台比,速度还有很大的提升空间。
11、与宿主通信。
宿主程序可以获得脚本编译中产生的错误,可以准确支持行号、列号,以及错误的原因。
脚本执行中,可以获取脚本的事件,哪个对象的哪个函数被调用了,参数是几个,值分别是多少。
可以快速访问Cobra栈上面的变量。
因为Cobra支持ActiveX调用,也就是说,脚本代码中可以引用Cobra本身,从而是实现动态编译、执行。更多特性,期待产品完成后,大家亲自体验。好了,先大体介绍到这里。
目前Cobra还在开发中,后续动态将陆续在本帖中贴出,欢迎大家提意见和建议。Cobra团队
2014-5-22
2011年就确定要写一个自己的脚本平台。但是一直没有下定决心来做。
今年因为一个项目,下定决心来做这件事。
首先解释下Cobra,这个名字中文是眼镜蛇的意思,当初遇到这个单词时,一眼就记住了,两个词根,Co和Bra,中文是啥意思,自己琢磨吧,特容易记哈,屌丝特喜欢!
确定了名字后,问了下度娘,发现已经有一门语言叫Cobra,还好基本没啥名气。所以就不换了。
Cobra,我们的设计初衷是,类似.net,可以在一个虚拟机上运行几个语言,目前只支持VB.NET语言,未来会扩充支持Java、C#语法。
简要介绍Cobra的特性:
1、完全面向对象
接口、继承、多态等
有包(库)、命名空间的概念。
2、支持结构和枚举。
3、支持API调用,暂时不支持回调。
4、支持调用ActiveXDll
ActiveXDll中的类可以被实例化并调用,而且支持其事件处理。
实例化的类,可以被Cobra类继承扩展。
5、Cobra类,可以作为普通类实例在VB等支持COM的语言中使用。
6、强类型。
作者对强类型,有强烈的认同感,另外,由于能力有限,目前还不清楚怎么解决弱类型情况下的运行速度问题。
所以暂时不支持后期绑定,后续版本会有所支持。
7、关于数据类型。
数据类型和VB完全一样,可以互传。
8、数组。
支持动态数组和静态数组。
另外不支持多维数组,在作者的编程生涯中,从未使用过多维数组,故舍弃支持。
9、支持中文。
所有关键字,都可以设置别名,别名可以是中文。
10、速度。
速度还算不错,比按键精灵的那个脚本平台快几十倍。
当然了,跟专业的脚本平台比,速度还有很大的提升空间。
11、与宿主通信。
宿主程序可以获得脚本编译中产生的错误,可以准确支持行号、列号,以及错误的原因。
脚本执行中,可以获取脚本的事件,哪个对象的哪个函数被调用了,参数是几个,值分别是多少。
可以快速访问Cobra栈上面的变量。
因为Cobra支持ActiveX调用,也就是说,脚本代码中可以引用Cobra本身,从而是实现动态编译、执行。更多特性,期待产品完成后,大家亲自体验。好了,先大体介绍到这里。
目前Cobra还在开发中,后续动态将陆续在本帖中贴出,欢迎大家提意见和建议。Cobra团队
2014-5-22
解决方案 »
- 在PPT中能不能预加载FLASH来提高显示速度
- 双击mschart中的柱形,怎样显示出它的值
- VB连接EXCEL数据库的字符串写法
- 如何自动设别优盘设备?
- 一个关于用其它窗体显示进度条的问题。请大家指教。
- 是不是记录集对象指针处于bof或eof时是不能更新的,只能指向确定记录才能update
- 请问在vb中如何可以调用出类似于window中拷贝文件出现的那种动画效果
- VB 的安装程序怎么做?
- 个位,小弟初学vb,一些语法规则还不太明白,现有一语法问题,请帮助!!!!语法见正文
- datagrid显示问题
- 关于VB2010怎么样 textbox或者richtextbox背景设置为透明(或者插入图片)的问题
- vb adodc控件sql查询中日期变量引用错误
除了支持传统的VB注释语法,还支持以下特性
1、行内注释,比如 a=a '这里是行内注释' +2
2、多行注释:
‘/sdfsdfsdf
sdfsdf
sdfsdf
sdfsdf/'
我是猛将兄。QQ里跟你聊过这个项目。
Cobra大概6月中旬发布,最迟6月底发布。
到时多指点。
这段代码可以被编译Public NameSpace NameSpacePublic '该NameSpace,在包外也可以访问
'下面这行演示多行注释
'/*你的注释 你的注释 你的注释
你的注释
你的注释 你的注释
你的注释*/
'/*
Public 在包内包外所有作用域都可以访问
Friend 仅仅在当前包内可以访问
Private 仅仅在当前包内可以访问
*/
'声明Enum
Public Enum dySomeEnum '直接声明在NameSpace下的枚举,该枚举在包内包外所有作用域都可以访问
'/*
跟VB.NET类似,但是跟VB6不同的是Cobra允许不同枚举,他们的成员名可以相同,访问枚举成员,使用如下格式:dySomeEnum.MemberPublic
Public 在包内包外所有作用域都可以访问
Friend 在当前的命名空间下都可以访问
Private 仅仅直接声明在当前NameSpace下(不能是声明在某个Module或是Class内)的函数才可以访问
*/
Public MemberPublic =1 '包内和包外都可见
Friend MemberFriend =2 '仅仅在当前命名空间下可见
Private MemberPrivate =3 '仅仅直接声明在当前NameSpace下的函数内才可见
End Enum
'声明Type
Public Type dySomeType '直接声明在NameSpace下的结构,该枚举在包内包外所有作用域都可以访问
'/*
因为Type关键字有别名Struct,所有也可以这么声明
Struct dySomeType
End Struct
Public 在包内包外所有作用域都可以访问
Friend 在当前的命名空间下都可以访问
Private 仅仅直接声明在当前NameSpace下(不能是声明在某个Module或是Class内)的函数才可以访问
*/
Public MemberPublic As Long =1 '包内和包外都可见
Friend MemberFriend As Long =2 '仅仅在当前命名空间下可见
Private MemberPrivate As Long =3 '仅仅直接声明在当前NameSpace下的函数内才可见
End Type
'声明常量,同时演示了跨行文本
Public Const Const_SomeConst As String="一个段落1
一个段落2
一个段落3
一个段落4
一个段落5
Text"
'/*
上面的声明等同于
Public Const Const_SomeConst As String="一个段落1" & vbCrlf & _
"一个段落2" & vbCrlf & _
"一个段落3" & vbCrlf & _
"一个段落4" & vbCrlf & _
"一个段落5" & vbCrlf & _
"Text"
*/ Public Const Const_SomeConst2 As String="一个段落1 —
一个段落2 —
一个段落3 —
一个段落4 —
一个段落5 —
Text"
'/*
上面的声明等同于
Public Const Const_SomeConst2 As String="一个段落1一个段落2一个段落3一个段落4一个段落5Text"
*/
Public gLong As Long = 15 '声明一个变量,并且赋值15
Public ’/*行内注释*/ Interface SomeInterface '这里声明了一个Interface,同时演示了行内注释
Public Enum dyEnumInInterfaceEnum
A = dySomeEnum.MemberPublic '枚举成员,它的值是 dySomeEnum.MemberPublic。
End Enum Public Sub SomeSub(ByRef A as long)
END SUB
Public Property Get PropGet() As Long
End Property
End Interface Public Class SomeClass NotSerializable NotInheritable Inherit OtherNameSpace.SomeClass
'该类不能串行化,并且不能被继承,它本身继承自 OtherNameSpace.SomeClass
Public Declare Function VarPtrArray Lib "msvbvm60.dll" Alias "VarPtr" (byref var As Any) As Long Private Sub SomeSub(Byval a As Long)
'跟VB6一样,可以申请变量和常量,Cobra允许在过程内定义枚举和结构,还有API声明
Local Enum dyEnumInInterfaceEnum
A = dySomeEnum.MemberPublic '枚举成员,它的值是 dySomeEnum.MemberPublic。
End Enum End Sub End ClassEnd NameSpace
我希望Cobra是吸收大家的建议,开发出来的。
每个人的建议都很重要。
我有个建议,尽量也兼容一些Freebasic的语法,毕竟这个开源Basic已经有了一定稳定的用户群
http://www.freebasic.net/
Cobra,还是定位脚本平台,跟宿主有交互。没打算做成独立的语言。
目前不会加入比较怪异的语法。事实上,我们没想过自己发明一门自己的一语言,只是做某个现成的语言的实现。
目前参考蓝本是VB.NET.
Dim a<甲,老大> as Long这里a是名称,甲、老大是别名
下面的语句就可以这么写
a=10
和
甲=10是等价的。
所有命名的地方,都支持别名。
实例,这是Cobra里的一段代码,是解析标记的:Private Function pParseTokens(ByRef tLines As dycCodesLinesType, _ ‘所有的行
ByRef lLine As Long, _ '当前行
ByVal sCodeLine As String, _ '当前行的内容
ByRef tOutTokens As dycTokensType, _ '返回标记
ByRef lOutErrChar As Long, _ ’错误发生的字符位置
ByRef sOutError As String) As Boolean '错误信息
End Function‘或下面的方式
Private Function pParseTokens(ByRef tLines As dycCodesLinesType‘/*所有的行*/ , ByRef lLine As Long'/*当前行*/ , ByVal sCodeLine As String'/*当前行的内容*/, ByRef tOutTokens As dycTokensType'/*返回标记*/ , ByRef lOutErrChar As Long’/*错误发生的字符位置*/, ByRef sOutError As String '/*错误信息*/) As Boolean
End Function
Cobra,可以不区分中英文的单引号。也就是说中文的单引号也是开始一段注释。
当然了。这个可以作为一个选项。如果关掉,那么就是只能用英文的单引号开始一段注释。