Inside Go 之一 巨集觀架構篇

2021-10-23 20:07:23 字數 2138 閱讀 5717

今天我們將開啟《inside go+》系列文章的第一篇,講講 go+ 的巨集觀架構。後續我們將會一步步解剖 go+ 的實現。

go+ 是一門以 「資料科學」 為靶心的通用語言。它首先是一門通用語言,理論上你可以用它來解決絕大部分領域的問題。這一點和 go 也很像。go 也是一門通用語言,但以 「服務端程式設計」 為靶心。

以下是 go+ 給人們的主要印象:

例如,以下是乙個 go+ 的例子:

同樣功能的程式,用 go 需要這樣寫:

關於 go+ 更詳細的介紹,請參考

那麼,應該怎麼看這幅圖呢?

首先,圓角長方形代表 go+ 處理過程中涉及的物件實體(object entity),它們包括:

後端介面規範(executing specification)這塊比較特殊,它是乙個抽象介面族構成的 dom 樹。它是一種抽象物件實體,和常規的物件實體有所區別,所以我們把它畫成了特殊的形態。

整個 go+ 處理的過程,你可以把它理解為其實只是在不同物件實體之間進行變換的過程。其中,整個變換的起點是 go+ 源**(go+ source),終點有兩個分支,乙個分支是位元組碼(byte code),乙個分支是機器碼(package/software)。為什麼會有兩個終點?因為 go+ 是雙引擎的,它既可以像指令碼一樣解釋執行,也可以編譯成機器碼。

其次,藍色加粗的文字代表我們接下來要剖析的 package,它們包括:

當然,這些 package 並不是 go+ 完整的 package 列表,但它們是理解 go+ **的關鍵,我們接下來會重點對它們進行介紹。

需要注意的乙個細節是,我們有些 package 標在了物件實體(object entity)上,比如tokenastexec.spec。這代表這類物件實體(object entity)是通過**表達的,具體**就在對應的 package 中。

另一些 package 標在了箭頭上,比如scannerparserclexec/bytecodeexec/golang。這通常代表它們是負責了從一種物件實體變換為另一種物件實體。比如scanner負責將 go+ source 變換 go+ token,cl負責將 go+ ast 變換為 exec specification。但exec/bytecodeexec/golang有點特殊,它們是實現了 exec specification,然後將結果輸出為 byte code 和 go source。我們統一理解為物件實體的變換也是說得通的。

最後,我們解釋以下箭頭指向。大部分箭頭指向都是乙個物件實體,這些箭頭,毫無疑問,表示實體變換。標在其上的 package 就是負責變換的實現**。但有少量箭頭是指向某個 package 的,比如 go+ token 有箭頭指向parserprinter包有箭頭指向format。這些指向 package 的箭頭代表內部依賴。以上兩個這兩個箭頭,前者表示scannertoken這些實體和實體變換,都只是parser的內部過程,後者表示format內部依賴了printer

有了以上這些資訊,相信你對 go+ 整體的組織有了非常巨集觀的理解。更詳細的內容,我們下回分解。

要參與** go+,**入以下 go+ 使用者群。

Oracle基礎篇之一

size small 好久沒有更新我的部落格了,今天跟大家分享一下有關oracle的一些基礎知識。1.資料庫分類 a.小型資料庫 access,foxbase b.中型資料庫 mysql,sql server,informix c.大型資料庫 sybase,oracle,db2 2.如何選擇資料庫 ...

Git基礎篇之一

git config global user.name your name git config global user.email your email domain.com 1.config 的三個作用域 local 只對某個倉庫有效,git config 配置預設 命令時,等同於 local ...

php基礎篇之一

1.php是什麼 官方文件 超文字預處理器 2.php能夠做一些什麼?php主要應用在一下領域 1 伺服器端指令碼,需要 php解析器,php伺服器,php瀏覽器。2 命令列指令碼,只需要php解析器,但是依賴於cron linux unix環境 和task scheduler windows環境 ...