中間表現の勉強中(LLVM IR)
ほんとは、勉強自体あまり好きではないけど、やるしかないのかもしれない。
LLVM IRという中間表現があるみたいです。
これは、CやPythonといったほぼ全ての既存の高級言語から変換可能で、さらにx86やARMといったいろんな種類の機械語に変換可能らしいです。
なので、Cとアセンブリの中間のような中身になっているらしく、高級言語が超苦手な僕でもギリギリ理解できるかもしれないということで、必死に調べています。
今の目標は、パソコンを作ることです。
コンパイラやOSを全て機械語で直書きし、自作のレッドストーンCPUで動作させます。
そのパソコン内に、プログラミングソフトのようなものを予めインストールしておきたいと思っています。
そのために、コンパイラも自分で作る必要があるんです。
ここで、最初のLLVM IRに繋がるのですが、元々は自作の高級(風)言語、もしくは自作の中間言語からのコンパイラを作る予定でした。
ですが、知り合いからLLVM IRのことを教えてもらい「もし仮に僕がこれを習得出来たら、すでにある既存の高級言語で作られた大量のプログラムが、僕のCPU上で実行できるようになるのでは!?」と思いました。
そうです、僕の今の最終目標は、予めインストールされたアプリのみ実行可能ななんちゃってパソコンとは違います。
マルチタスク可能なOSを搭載し、プログラミングソフトをプリインストールし、既存の高級言語のプログラムも、コンパイルの手間はありますが、実行可能にするという、かなり本格的なものになります。
既存の高級言語からLLVM IRへのコンパイラは、流石にKB単位のマイクラCPUで動作させるのは難しいと思うので、LLVM IRへのコンパイルは外部で行ってもらうことになりますが、そこから先のコンパイルはマイクラ内で行うことになります。
なので、LLVM IRを理解されている方なら、マイクラ内で全てのプログラミングをすることが可能です。
(将来的には、機械語やアセンブリレベルでのプログラミングや、日本語採用の独自高級言語とかも使えるようにしてみたいですが、それはもしかしたら数年後のここではないどこかの世界線でのお話になるかもしれません。)
どうでしょうか?
かなり面白そうでしょう?
もちろん、統合版のMinecraftでは限界があります。
なので、Java版のMinecraftで、本気を出して作ろうと思っています。
そこで、ここからがこの記事を書いた本当の目的になるのですが、LLVM IRの勉強に、苦戦しているんです、、、
そこで、もし分かりやすいサイトなどがありましたら、コメントで教えていただけると嬉しいです。
僕のレッドストーンパーソナルコンピュータが完成した時、僕の気が変わっていなければ、配布をすると思うので、このプロジェクトを応援したいと思っていただけたのでしたら、LLVM IRに関する知識などを共有していただけると嬉しいです。
ちなみに、今はphi命令の所で躓いています。
変数は上書き不可能なはずなのに、ループ命令で使われるphi命令はどうなっているんだろう?とという点でずっと理解できずに苦しんでいます、、、
仮にここを理解できたとしても、きっとまた壁にぶつかると思います。
その時は、またみなさんに色々聞くかもしれないですが、教えていただけると嬉しいです。
最後まで読んでいただき、ありがとうございました!
いいなと思ったら応援しよう!
僕の回路制作のモチベにもつながるので、もしよければチップをお願いします!