iT邦幫忙

鐵人檔案

2025 iThome 鐵人賽
回列表
佛心分享-SideProject30

Mongory:打造跨語言、高效能的萬用查詢引擎 系列

Mongory, let you query everywhere!
這是一個從 Ruby JSON 過濾器開始,逐步演進為跨語言支援、擁有 C 核心的通用查詢引擎的 side project。
在這 30 天內,我會完整分享 Mongory 的開發過程:從 AST 設計、matcher 實作、效能瓶頸,到 C 擴充、multi-platform gem 打包,以及 Go/Python/JS 的橋接規劃。
喜歡從「解決痛點」出發、一路打怪成長的你,不妨一起來看這趟技術旅程。

參賽天數 28 天 | 共 29 篇文章 | 1 人訂閱 訂閱系列文 RSS系列文
DAY 20

Day 20:關鍵優化 2:Shallow wrap

這一篇是整個效能的關鍵取捨點,筆者接著會把 Day 18 的震撼與 Day 19 的兩個關鍵修復接起來,補上最後一塊:把原本「看似已經很省」的淺層轉換從 O(n...

2025-09-18 ‧ 由 法蘭克 分享
DAY 21

Day 21:跨平台預編譯與 CI +實戰案例

這會是 Mongory 能夠被大多數讀者輕鬆用起來的轉折點:預編譯。筆者在公司的 pod 實際安裝時,從「本機沒 toolchain 裝不起來」的挫折出發,走過...

2025-09-19 ‧ 由 法蘭克 分享
DAY 22

Day 22:Mongory Bridge 的下一站:為什麼選 Go

Ruby 這一季的橋接已經證明可行:讀者能用 Mongory 的 DSL 操作任意 Ruby 結構,性能也在一連串優化後到位。接下來,筆者把目光放到 Go。這不...

2025-09-20 ‧ 由 法蘭克 分享
DAY 23

Day 23:cgo 與 submodule:Makefile/腳本同步與開發體驗

Go 端的第一個現實問題,並不是 API 長什麼樣,而是「讀者 go get 下來能不能直接編、可不可用」。筆者在設計 Mongory 的 Go Bridge...

2025-09-21 ‧ 由 法蘭克 分享
DAY 24

Day 24:Go 型別反射與 data converter 困境:設計邊界

在 Go 版的 Mongory,最棘手的不是 matcher 邏輯,而是「資料如何過橋」。筆者最終採用 shallow/deep/recover 的分工,盡量把...

2025-09-22 ‧ 由 法蘭克 分享
DAY 25

Day 25:Go ↔ C:unsafe.Pointer/cgo.Handle 的正確姿勢

Go 與 C 溝通時,指標與生命週期是第一原則。這篇以 Mongory 的 Go Bridge 為例,整理出在實作中踩過、避過的雷,並給出可直接對照的實作片段...

2025-09-23 ‧ 由 法蘭克 分享
DAY 26

Day 26:Go GC × memory pool:生命週期管理

在 Go 版的 Mongory,C 的記憶體池(memory pool)與 Go 的 GC 必須協同工作:既要確保不洩漏,也要避免過早釋放。本篇整理生命週期設計...

2025-09-24 ‧ 由 法蘭克 分享
DAY 27

Day 27:Go bridge Benchmark shock:原因拆解與方向

在 Ruby 版的震盪之後,Go 版也迎來一次「下巴掉下來」的時刻: 純 Go:≈ 2ms(十萬筆簡單條件) cgo 版 Mongory:≈ 90ms(同條件...

2025-09-25 ‧ 由 法蘭克 分享
DAY 28

Day 28:為什麼 Go 需要 native 重寫:cgo overhead 與編譯器演進

Day 27 的數字已經說服筆者:在 Go 的世界,跨界成本是壓倒性的常數項。這篇把「為什麼要 native 重寫」講清楚,回到編譯器與執行模型的基礎,並提出實...

2025-09-26 ‧ 由 法蘭克 分享