Qtチュートリアル わかりやすいコンパイラの話
皆さん こんにちは。 前回はプロジェクトの作成をしてもらいました。うまくいったかな?! 今回は、キットを選んだ時に、たくさんのコンパイラがあって、どれを選べばいいのかわからない!って人が多かったと思います。
でもご安心を。今回の記事を読めば、コンパイラのことが何となくわかるはず。正確ではないかもしれないけど、大外れはしていない。
コンパイラとは
私たちが書いたソースコード(プログラム)をコンパイラがコンパイルします。コンパイルとは、機械語翻訳のことです。コンピュータは、0と1しか理解できません。スイッチのオンとオフだけなのです。
コンパイラは、私たちのプログラムを、このオンとオフ、0と1だけに翻訳してくれるものなのです。
何でたくさんのコンパイラがあるの?
0と1に変換するだけなら、何でたくさんのコンパイラがあるのでしょうか。
0と1、スイッチのオンとオフを読み取るのは、CPUです。CPUとは、中央演算処理装置です。これがこの0と1の値を読み取り、超スピードで演算を行っています。もうちょっと深く言うと、0と1をただ流し読みしているわけではありません。レジスタというものがあって、そこに0と1を一時的に書き留めています。また、0と1をメモリを通して読書きするなども行っています。
0と1の正体は、電気信号の電圧の高低です。この電圧の変化を読み取ります。電気の流れというのは、文字通り高速です。私たち人間にとっては、体感できないくらいごくわずかな時間です。ナノ秒以下の世界。10の-9乗以下の世界です。
Windows, MacOS, Linux, アンドロイド、IPhone等、それぞれ固有のCPUを持っているのです。CPUに合わせたコンパイルをする必要がある・・・。だから、たくさんのコンパイラがあるわけです。
同じWindowsでも、複数の種類があります。32bit版と、64bit版があったことをご存じですか?あれも、CPUの違いがあります。32bit版のみに対応したソフト、なんていうのもあったはずです。どうして32bit版のみに対応しているの?64版でもいいじゃん!というわけにはいかない。32bit版のWindowsに対応したコンパイラで翻訳したソフトだからです。実際は、64bit版は32bit版に対応する、つまり互換性があるようで、32bit版のものは、64bit版では使えなかったように思います。そうそう、ついでに言えば、互換性のことを、Compatible(コンパティブル)といいますね。コンパイラの、コンパ、の部分が被っているのが何やら意味ありげです。互換性があれば、違う環境でも動きます。
Qtをインストールするとき、Windowsでも、64系版と、Windows ARM用のインストーラがありましたね。あれは知識のない人にとっては、どっちにすればいいんだろうって、大変悩む問題だったと思います。プログラミングに挫折する人って、もうあの時点で挫折しちゃうんですよね。私も過去一度、ARMの方でいっか、と軽い気分でダウンロード、インストールしたことがあります。できちゃうから怖い。ARMは、64系版とは、別CPUです。私のパソコンのCPUとは違うCPU対応のコンパイラを選択してしまった、ということになるわけですね。
鍵と鍵穴があうように、コンパイルしなければいけないわけで、それができるコンパイラと、できないコンパイラがあるわけです。鍵と鍵穴が違っていても、ドアを開けられる場合は、互換性があるということになるわけですね。
CPUだけではなく、OSの種類とか、メモリアドレスとか、アドレスのエンディアンとか、プログラミング言語の違いとか、そういう違いによって、対応するコンパイラも違います。プログラミング言語の違いでコンパイラが違う、というのはわかりやすいでしょう。言語を翻訳して0と1にするわけですから、その言語を翻訳できるコンパイラじゃないとダメなわけです。
コンパイラの世界にも、マルチリンガルなコンパイラがいます。複数のOSやCPUにコンパイルできるものです。こういうのを、クロスコンパイラというようですね。
はい・・・。Qtのキット選択をもう一度振り返ってみましょう。

私の環境では、このようになっており、Android~というのが最初に選択された状態で出てきます。これはその名の通り、アンドロイドアプリ用のコンパイラです。
私が手掛けたいのは、デスクトップアプリですから、これを選んだら死にます。
MSVC2022 64bitにしたのは、私のPCがWindowsの64系のマシンだからです。
下にWebAssemblyとかいうコンパイラがありますね。これは何なんでしょう。WebAssemblyというのは、Webアプリケーションを作成するためのもので、WebAssemblyは、クライアント側のソフトを指します。
これが、私たちが今使っているコンパイラの動きです。
C++/QML → コンパイル → x64 / ARM などのバイナリ → 実行(Windows/macOS/Linux)
WebAssemblyだとこうなるようです。
C++/QML → emscripten コンパイラ → .wasm(バイナリ形式) + HTML/JS → 実行(Webブラウザ)
終わり
お疲れさまでした。どうしてキット選びにこんなに種類があるの?迷っちゃう!!!という悩みは吹き飛んだでしょうか?自分のマシンにあったコンパイラ、自分の目的にあったコンパイラを選んでくださいね。わかってしまえば怖くない。(最悪の場合、全部チェックして、動くまでしらみつぶしにコンパイルしてみる、という手もあります。)
この記事が気に入ったらチップで応援してみませんか?
