「低レイヤ」を⁠なぜ⁠どうやって学ぶのか

ITエンジニアには「学ぶべき」とされる知識がたくさんあります。もしあなたがITエンジニアのひとりなら、さまざまな分野について「これは知っておいたほうがいい」⁠あれを知っておいて損はない」といった言葉をしばしば耳にするのではないでしょうか。

いわゆる「低レイヤ」やコンピュータアーキテクチャといった分野の知識も、⁠知っておくべき」とされがちなもののひとつです。とはいえ、普段の業務でこういった分野と向き合っているのでもなければ、モチベーションが湧きづらく、学ぶ方法もわかりづらいといった印象があるかもしれません。

なぜ学ぶのか

そういった「CPUに近い」分野について知っておくべきなのは、どうしてでしょうか。理由は簡単で、コンピュータは結局「CPUが命令を読み、その指示どおりに計算する」というしくみで動いているからです。そしてご存じのとおり、このときCPUに与えられる命令は手元のプログラムそのものではありません。⁠CPUが読める言葉」⁠これは命令セットアーキテクチャ、ISAと呼ばれます)へと変換されたものです。

現在の機械学習の進展を鑑みても、ハードウェアの能力を最大限に引き出したいという要求が今後も存在しつづけることは間違いありません。そしてそんなときこそ、ハードウェアに近い部分、すなわちISAをはじめとする低レイヤの知識が役に立つというわけです。

どうやって学ぶのか

とはいうものの、こうした知識をどうやって学べばよいのでしょうか。たとえばCPUやそのシミュレータを自作するなど「下から」学んでいくというのは一つの手です。あるいは、プログラムからISAへの変換、すなわちコンパイラの動作を学ぶという「上から」の方法も考えられるでしょう。プログラムを書いた経験があるならば、後者のほうが馴染みやすいかもしれませんね。

そんな発想で書かれたのが、今回紹介する作って学ぶコンピュータアーキテクチャ —⁠— LLVMとRISC-Vによる低レイヤプログラミングの基礎という書籍です。書名から明らかなとおり「作って学ぶ」ことを主眼とした本で、ここで「作る」ものこそ、まさにそのコンパイラです。つまり、プログラムをISAに変換する処理の実装を通して低レイヤの知識を得ることが本書の狙いというわけです。

とはいえもちろん、ゼロからコンパイラを作るのは簡単なことではありません。そこでポイントとなるのが、サブタイトルにもある「LLVM」というコンパイラ基盤です。LLVMは「各種プログラミング言語→中間言語→各種ISA」というふうに中間言語を介することで、ISAによらない特定のプログラミング言語のコンパイラを作ったり、プログラミング言語によらない特定のISA向けのコンパイラを作ったりできることが特徴のひとつとなっています。したがって本書の目的からすれば、⁠中間言語→ISA」の部分(バックエンド)を実装すれば済みます。

なお、そこで変換先として取り上げるISAがサブタイトルにあるもう一つのキーワード「RISC-V」です。RISC-Vはその仕様がオープンソースで開発されており、シンプルで性能が出しやすいという特徴から近年注目されているISAです。ここでは詳述しませんが、ひとまず知っておいて損はないISAと言ってよいでしょう。

本書を通じて、コンパイラやISAの知識、ひいては「低レイヤ⁠⁠、コンピュータアーキテクチャへの理解を深めましょう!