cheerp 通用計算模塊(ccm1) 是基於cheerp 編譯器發射出平臺格式無關的wasm中間代碼,在不同宿主之內運行的一種模塊化方式。
0x1. 不同宿主的相同代碼實現
ccm1 的一般宿主是c++實現,不同平臺編譯引用就可以,目前已知在 nginx,redis, wrk, node 和瀏覽器等宿主軟件上性能優越。 一套cheerp標準生產的wasm 中間代碼可以運行在任何平臺。
0x2. nginx 相關例子
對應編譯內容
0x3. javascript 相關例子
對應編譯內容
0x4. 總結
入手的陡峭程度大概比java略低,需要使用c語法實現模塊內容,寫出來的代碼是經過AOT的所以性能好一些,裏面設計了一些不太常見的思路, 比如 獲取參數用get_local ,而不是參數名,讓人感到新奇。
至於爲什麼要使用get_local , 我猜想是因爲是寄存器數量限制,在某些基於寄存器實現的宿主上在參數列表內容超過8個會出錯誤,而這裏這樣用,我猜測是用了堆棧的方式壓入參數。