あれ?wasm版のLinuxカーネルを動かしてその上でDockerを動かしてるって話ではないのか
@amaiyo 完全に私の勘違いでした……
@orumin@mstdn.maud.io 私もwasmをブラウザ上の仮想CPU的にしか理解してなかったので正しく把握できている自信がないです。
文中にx86エミュレーター入れてLinux云々って記述があったのでそういう意味なのかなあと…。
@amaiyo
WASM 自体は JVM とかと同じでスタックベースの VM で命令列を解釈するだけなので他の言語インタプリタとかと違うトクベツなものなわけではなく、CPU というほどのものではないです。なんなら Lisp と同じ S 式を使うテキスト形式の記述もできます。
ただし Java applet や NaCl からの反省で sandbox 的に動かせたり軽量高速だったりがウリです。
それはそれとして、WASM をブラウザではなくエッジのランタイムとして使いたい需要があってホスト OS のファイルシステム操作とかそういうのをやりたい需要で WASI という WASM 向け interface があって、私はてっきりそれに依存していると思っていたのですが、実は独自パッチを当てた CPU emulator (bochs/tinyemu) を動かすのに WASI など使ってその上に Linux kernel や docker image をそのまま動かしている風な気がします。
JSLinux など似たやりかたのものは既にあるのですが、私がそのことを完全に失念していました……
@orumin@mstdn.maud.io 個人的には複数の言語からコンパイルターゲットにされるような低レベルのISAを実行するソフトは仮想CPUなのかなーとか思います、OoOとか分岐予測とかはないけど…。
最近エミュレーターの実用例増えてきてて面白いです。
@amaiyo wasm の V-ISA ってかなり高級なんですよね……C ほどじゃないですが、数値系の操作に abs や ceil みたいなアセンブリならルーチンライブラリに入ってる操作があり、null pointer や function への参照に限定した操作をする ref 命令系とか、table への操作があったり、Lua 言語の文法をアセンブリのニモニック風に置き換えたと言われても納得できるぐらいには高級なので……
@amaiyo 逆に言えばヘタにそれっぽい VM を作ろうとするよりそのぐらいの粒度になってるほうが何かと都合が良さそうだし使い勝手も良さそうでもあります。
@orumin@mstdn.maud.io amd64とかもマイクロopに変換されてから実行されたりしてますしね…。picojava…。
ISAと高水準言語の境目は一度に扱えるメモリがたかだかいくつだ、とかくらいになってるくるのかもしれませんね。
@amaiyo AMD64 のやつは 8086 や CISC な古い設計の闇の遺産なところはあり……。μop fusion とか謎の最適化がすごいですよね。
JVM に関しては実は picoJava よりももっと卑近なところで、Arm に Jazelle 命令というものが実は埋めこまれてました。
@amaiyo まあその手の話だと古くは Lisp マシンがあり……みたいになるかもしれないですが……