対象とする CPU アーキテクチャ

MRI が対象とする CPU アーキテクチャは、32bit および 64bit CPU。命令セットは、一応だいたい動くような気がするけど、レジスタウィンドウとか、IA64 のなんとか、というのが特殊な対応が入る奴がいる。今は Intel x64 が多いんじゃないかな。AWS で動かすならこれですよね。直接 CPU 命令を弄るところはほとんど無い、というか、(1) CPU ごとにどうしてもしょうがないところをアセンブラで書く、(2) 性能のために、有名どころは弄る必要がある

弄っているのは、

  • GC のため(保守的GC の root set のため)
  • Fiber のため(2.6 から)

の2カ所、だと思う。それ以外のところは、多分 CPU をあまり選ばないのではないだろうか。

コンパイラは、32bit or 64bit CPU で、C91 を対象としている。C99 は、今議論中。C99 は 20年前なのか。

マシンスタックを保守的GCのルートにするため、マシンスタックのすべての値を取る必要がある。そのため、コンパイルされたコードはマシンスタックが1つの配列構造になっている必要がある。スパゲッティスタックではいけない。callstack - How to make spaghetti stack with C? - Stack Overflow によると、clang も gcc も、そういうのをやるオプションがあるようだが、MRI はそのようにコンパイルされると動かない。