主頁 > 軟體工程 > Cobra,一款VB.NET,VB6腳本編譯器,開發中,有興趣的進來聊聊

Cobra,一款VB.NET,VB6腳本編譯器,開發中,有興趣的進來聊聊

2020-09-20 10:29:04 軟體工程

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熱心網友回復:

參考 7 樓 websmart78 的回復:
有興趣的人,還有覺得Cobra對你有用的人,可以參與進來。
我希望Cobra是吸收大家的建議,開發出來的。
每個人的建議都很重要。


我有個建議,盡量也兼容一些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 再用他們編譯成js

uj5u.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

上一篇:listview控制元件失去焦點就看不到藍色高亮條,怎么用代碼控制?

下一篇:關于VB PrintWindow 抓圖時黑屏的問題

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more