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
uj5u.com熱心網友回復:
關于注釋除了支持傳統的VB注釋語法,還支持以下特性
1、行內注釋,比如 a=a '這里是行內注釋' +2
2、多行注釋:
‘/sdfsdfsdf
sdfsdf
sdfsdf
sdfsdf/'
uj5u.com熱心網友回復:
關注下...uj5u.com熱心網友回復:
關注吧,這個東西主要是要持久堅持下去,畢竟無疾而終的預告太多了uj5u.com熱心網友回復:
對了,這方面介紹一個不錯的商業專案供參考,雖是商業的,但價格不貴,主要是賣的授權,單個授權只要199美元,關鍵是他是提供全部源代碼的,適合你們編譯原理等方面的專長研究。當然也有一點小遺憾,代碼是pascal:)http://www.paxcompiler.com/
uj5u.com熱心網友回復:
大版主來了哈。我是猛將兄。QQ里跟你聊過這個專案。
Cobra大概6月中旬發布,最遲6月底發布。
到時多指點。
uj5u.com熱心網友回復:
貼一段代碼這段代碼可以被編譯
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 Class
End NameSpace
uj5u.com熱心網友回復:
有興趣的人,還有覺得Cobra對你有用的人,可以參與進來。我希望Cobra是吸收大家的建議,開發出來的。
每個人的建議都很重要。
uj5u.com熱心網友回復:
支持一下..........uj5u.com熱心網友回復:
你想說明白一個腳本平臺?編譯器、代碼示例,總要給一個樣本出來吧,不然,它比VBS好用多少,能說得清楚嗎?
uj5u.com熱心網友回復:
樓主小號不少啊
uj5u.com熱心網友回復:
我有個建議,盡量也兼容一些Freebasic的語法,畢竟這個開源Basic已經有了一定穩定的用戶群
http://www.freebasic.net/
uj5u.com熱心網友回復:
CSDN一般只看不回帖發帖,要發帖現注冊哈,所以小號比較多哈。Cobra,還是定位腳本平臺,跟宿主有互動。沒打算做成獨立的語言。
目前不會加入比較怪異的語法。事實上,我們沒想過自己發明一門自己的一語言,只是做某個現成的語言的實作。
目前參考藍本是VB.NET.
uj5u.com熱心網友回復:
關于別名特性Dim a<甲,老大> as Long
這里a是名稱,甲、老大是別名
下面的陳述句就可以這么寫
a=10
和
甲=10是等價的。
所有命名的地方,都支持別名。
uj5u.com熱心網友回復:
支持一下。留個腳印……
uj5u.com熱心網友回復:
還有一個需求,就是你個編譯器的后端能否支持生成為llvm.或者說編譯成javascript執行,這樣就很有市場了。haxe.org就是這樣的啊。uj5u.com熱心網友回復:
我去曾經考慮過編譯到js 而且去年我們自己開發了一個瀏覽器級的html/css決議內核(搜網頁剪刀手可以搜到相關資訊) 但是這類工具已有了 谷歌的dart 微軟剛出了typescript 所以我放棄了 不過未來會考慮編譯成dart或是typescript 再用他們編譯成jsuj5u.com熱心網友回復:
嗯,anders弄的這個typescript 也值得關注一下uj5u.com熱心網友回復:
預編譯,整體整理完畢了。下面進入到整理編譯的環節。期待順利
uj5u.com熱心網友回復:
介紹一個小的特性,是關于注釋。實體,這是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
uj5u.com熱心網友回復:
不理解,你搞的"‘’“這組字符什么來路的?uj5u.com熱心網友回復:
我打錯了。Cobra,可以不區分中英文的單引號。也就是說中文的單引號也是開始一段注釋。
當然了。這個可以作為一個選項。如果關掉,那么就是只能用英文的單引號開始一段注釋。
uj5u.com熱心網友回復:
今天預編譯的代碼完成了。下面正式進入整理編譯環節的代碼了。
uj5u.com熱心網友回復:
好,看看啥時有測驗版出來uj5u.com熱心網友回復:
現在不敢承諾時間。呵呵。開發中總會蹦出這個那個問題的。
uj5u.com熱心網友回復:
但是時間不會太久。1-2個月uj5u.com熱心網友回復:
關注你一下,等待你的作品uj5u.com熱心網友回復:
然后就沒有然后了??uj5u.com熱心網友回復:
唉,一聲嘆息!uj5u.com熱心網友回復:
然后就沒有然后了。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/88118.html
標籤:VBA
