跳至主要內容

關於 #WebAssembly 的內容

蒼時弦也蒼時弦也

Kobako:讓 Block 可以穿透沙盒

Kobako:Handle 機制對許多支援腳本語言的專案並不算太特殊的機制,但是 Block 概念算是 Ruby 語言特有的能力,如果使用沙盒(Sandbox)時無法善用,那就太可惜。

然而,像這樣的寫法真的做得到嗎?

1sandbox.bind("Seq::Map", ->(items, &blk) { items.map(&blk) })
2sandbox.eval("Seq::Map.call([1, 2, 3]) { |x| x * 2 }").value
3
4# => [2, 4, 6]

我們竟然可以在沙盒裡面用一個 Block 接收外部的呼叫。

蒼時弦也蒼時弦也

Kobako:為什麼要有 Filesystem 原生支援

最近 Kobako 更新到 v0.28.0 後,改善了原本對 MessagePack 高度依賴的設計,這是從八月 COSCUP 結束後的第一個大改版。

然而,當我們要迎接明年(2027 年)的 AI 應用時,在 Ruby 生態系還缺少怎樣的能力,我認為答案再次回到四月份我在日本 RubyKaigi 和朋友分享的「虛擬檔案系統(Virtual Filesystem)」上,因此 Kobako 也即將支援這個特性。

蒼時弦也蒼時弦也

Kobako:WebAssembly 的記憶體交換

前幾篇說明了選擇 MessagePack 的過程,然而使用 WebAssembly 還要能夠互動,跟原生的套件互動方式有一點不太一樣。

理由是我們要打造的是沙盒(Sandbox)來隔離不安全的程式碼,這表示操作基本上是接近單向的,在沙盒中執行的程式,是不能碰到任何宿主(Host)的記憶體,那麼原本預想的方法呼叫,就需要一些特別的方式來處理。

蒼時弦也蒼時弦也

Kobako:COSCUP 2026 演講後,來聊聊為什麼是 Ruby

上週末我在 COSCUP 的演講「讓 AI 接管你的應用,打造微秒級無縫的 Ruby 安全沙盒」分享 Kobako 設計過程中的一些考量,後續的提問被問到在 AI 時代不太需要考慮語言時,為什麼要選 Ruby 呢?

簡單地回答,單純就是「我喜歡用 Ruby 這個語言」然而在 Kobako 的設計,還有很多更深層的考量。

蒼時弦也蒼時弦也

Kobako:從 Ruby 到 mruby

雖然是受到 ruby.wasm 的限制才選擇 mruby 來作為沙盒(Sandbox)的語言,但也不代表跟 CRuby 都使用相同的語言標準(ISO/IEC 30170:2012)就讓這個目標輕鬆實現,相比 CRuby 在 mruby 上有很多限制存在。

這是 mruby 為了能夠在嵌入式系統這類環境運作必要的取捨,相對的輕量的特性剛好也是一種 Embedded Sandbox 的優勢,我們把 Ruby 語言沙盒嵌入到任何語言的這種想法,變成可行的選項。

蒼時弦也蒼時弦也

Kobako:打造 AI 時代的沙盒

開始 Kobako 的開發已經有幾個月的時間,接下來也會在 COSCUP 分享這個專案,因為過程非常有趣,我認為很適合做一系列的更新,來介紹我怎麼開始「打造 AI 時代的沙盒」

到這篇文章撰寫為止,已經有 20 個左右版本發布,接下來我會盡可能按照時間順序,分享 Kobako 的演進,以及過程中做的決策。