不輟集

遊清暉園

透早睇了一頃《哥倫比亞的倒影》,內底是呾木心先生著紐約哥倫比亞大學行走時亓所見所想。印象深刻亓是伊當睇著思想者大衛亓銅像,摸著大衛緊張且燒燒亓肌肉時,想到王爾德亓一句話:思想產生在陰影裡,太陽是嫉妒思想的。

接續讀落

頭痛

頭好痛啊,顱骨一陣陣地刺痛,頭顱恐怕要炸裂了。
腿挪不動了,腳一步步仍在原地,腿腳肯定被下咒了。

身體雖困於此,靈魂卻在外遊來蕩去。
想出去找回靈魂,卻不知去向何方。

接續讀落

Concurrency in Go

Concurrency in Go is an excellent book written by Katherine Cox-Buday. And It is impressive and drive me to learn deeply about Go.

《Go並發編程》是凱瑟琳·考克斯布迪執筆的一本絕好的書籍。此書令我印象深刻,並驅使我深入學習Go。

接續讀落

光和熱

我努力地呼吸
I try hard to breathe
仍然覺得氧氣不夠
Maybe the oxygen is too thin and
肺部仿佛被什麼東西重重壓著
Something heavy presses my lung
快要令我窒息
Which make me suffocating

接續讀落

《Go 設計與實現》筆記之第二章 編譯原理

編譯原理這一章講 Go 的源代碼是如何變成二進制碼的,可分爲四個過程:

  1. 詞法和語法分析 lexical and grammar analysis
  2. 類型檢查 type check
  3. 中間代碼生成 IR(intermediate representation) generation
  4. 機器碼生成 machine code generation

詞法分析是將源代碼視爲字符串序列,對各個字符串進行標記,生成 Token 序列。

語法分析是將 Token 序列按照 LALR(1)(向前查看和自底向上解析)的解析文法進行解析,生成一棵AST (抽象語法樹 )。

類型檢查分靜態類型檢查和動態類型檢查,靜態類型檢查會在編譯期對變量賦值、返回值和函數參數進行類型檢查;動態類型檢查在代碼運行時進行,可以實現向下類型轉換、延遲綁定和反射等功能。

中間代碼生成階段首先會進行 ssaconfig 的初始化,緩存可能需要用到的類型和指針;然後進行遍歷和替換,將內建函數 make、map、channel、new、select、panic、recover 等等替換成 runtime 包的函數。最後不斷地進行中間代碼生成,優化代碼,生成類似彙編代碼的代碼。

機器碼生成階段分兩個部分:一是 SSA 中間代碼降級、針對特定CPU架構的中間代碼優化和重寫,最後生成相當接近特定架構彙編代碼的指令;二是將特定架構的指令轉成二進制代碼。

接續讀落