見出し画像

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ブラウザ)


終わり

お疲れさまでした。どうしてキット選びにこんなに種類があるの?迷っちゃう!!!という悩みは吹き飛んだでしょうか?自分のマシンにあったコンパイラ、自分の目的にあったコンパイラを選んでくださいね。わかってしまえば怖くない。(最悪の場合、全部チェックして、動くまでしらみつぶしにコンパイルしてみる、という手もあります。)

ここから先は

0字

この記事は現在販売されていません

この記事が気に入ったらチップで応援してみませんか?