エディターや表計算など、いろいろな既存のアプリがあります。
なにげに、文字や計算結果等が出力されますが、アプリをダウンロードするとき、コンパイラーも一緒にダウンロードされているのものなのでしょうか。
よろしく、お願いいたします。
場合によりますが、一般的には「ライブラリ」と呼ばれる部品となったものを纏めてダウンロードしています。
例えば、現在見ているこのページを表示するブラウザの場合、データを送受信する部品、ページを表示させるために使う部品、JavaScriptを実行する部品などを組み合わせて表示させています。
アプリの中に埋め込んだり、他のアプリでも使いまわす事ができるように分離してあったりと、様々です。
ライブラリの中には、機能によって呼ばれ方が変わるものもあります。
データを小さく効率よく取り扱うために変換(エンコード)したファイルを元に戻して動画や音声に変えるデコーダーなどがあります。
OSにあらかじめ含まれている部品(ライブラリ)のみで動作するアプリの場合は、アプリ本体をダウンロードするだけで済みます。
しかし、OSに元々準備されているライブラリよりも新しい開発環境に対応したアプリが動作できるように「Visual C++ 再頒布可能パッケージ」といったライブラリをダウンロード・インストールする場合もあります。次世代となるバージョンのOSには基本的に含まれるため、利用者によっては不要に見えることもあります。
最後に、Linuxなどで時折行われるパターンとなりますが、アプリのソースコードをダウンロードして、利用したい環境に合わせてコンパイル・実行するために、コンパイラのダウンロードが必要となることがあります。
コンパイルした結果がダウンロードされれば、コンパイラーはユーザーには必要ありません。
「メモ」について。
コンピュータ内部に保存される、その機械語は、コンパイラーにより変換されたのでしょうか。
ユーザーが入力したのは違います。
場合によりますが、一般的には「ライブラリ」と呼ばれる部品となったものを纏めてダウンロードしています。
例えば、現在見ているこのページを表示するブラウザの場合、データを送受信する部品、ページを表示させるために使う部品、JavaScriptを実行する部品などを組み合わせて表示させています。
アプリの中に埋め込んだり、他のアプリでも使いまわす事ができるように分離してあったりと、様々です。
ライブラリの中には、機能によって呼ばれ方が変わるものもあります。
データを小さく効率よく取り扱うために変換(エンコード)したファイルを元に戻して動画や音声に変えるデコーダーなどがあります。
OSにあらかじめ含まれている部品(ライブラリ)のみで動作するアプリの場合は、アプリ本体をダウンロードするだけで済みます。
しかし、OSに元々準備されているライブラリよりも新しい開発環境に対応したアプリが動作できるように「Visual C++ 再頒布可能パッケージ」といったライブラリをダウンロード・インストールする場合もあります。次世代となるバージョンのOSには基本的に含まれるため、利用者によっては不要に見えることもあります。
最後に、Linuxなどで時折行われるパターンとなりますが、アプリのソースコードをダウンロードして、利用したい環境に合わせてコンパイル・実行するために、コンパイラのダウンロードが必要となることがあります。
コメントの訂正となりますが、ライブラリはコンパイラではありません。
承知しました。ありがとうございます。
プログラミング言語を機械語に置き換える作業の事をコンパイル、それを実行するプログラムの事をコンパイラと呼びます。プログラミング言語は人間が理解できる形なんですがCPUにとってはちんぷんかんぷんなので、これをそのままCPUに渡しても実行する事ができません。そこでコンパイルという、プログラミング言語から機械語へと翻訳する作業が必要となるわけです。
例えば多くのプログラミング言語では四則演算が当たり前のように使えますが、CPUには加算減算の命令セットはあるものの、乗算除算の命令セットがありませんので、後者についてはコンパイルする過程で乗算除算を「再現できるように」やや長文の機械語が配列されます。
つまり、コンパイラ(翻訳者)を必要とするのはプログラミング言語の段階ですので、機械語に置き換わった後にはコンパイラ(翻訳者)を必要としません。アプリと呼ばれるのは基本的にコンパイル後(翻訳後)の機械語の塊なので、コンパイラを必要とせずそのまま実行できます。
ファイルB、ファイルCは、やりとりの遡上にあがっているものです。
なるほど、pythonですか(自分はそっちを知らない)。
でも、インタプリタ言語のようですので、バイナリではなく、
実行前はテキストのままです。
python実行環境という限られた環境下において、
プログラムの実行時に命令を逐次、1行1行構文解析していき、
その命令を再現するためのライブラリ(機械語)の呼び出しを(pythonが)行います。
つまり、実行するたびに、プログラム部分の解析が行われます。
10回実行すれば10回の解析が、
100回実行すれば100回の解析が、
1万回実行すれば1万回のテキスト解析が行われるわけ。
コンパイラはこの解析を1回しか行わず、
解析結果を機械語に落とし込んで、
アプリという形で保存するのです。
なお例外として、インタプリタ言語を無理やりコンパイル
してしまうコンパイラというのも存在します。
その場合、コンパイラの実行結果として保存されるのは機械語ですから、
インタプリタ環境下から離れて実行することができます。
質問者がコンパイラを何のために欲しているのかが、はたから見ていると疑問です。
まず、コンパイラは生産者がアプリなどの製品を作成するために必要なもので、
消費者が持っていても、基本的には何の役にも立ちません。
たとえば、アプリの作成を、一本の鉛筆を作成するのと置き換えて説明します。
「プログラム」は鉛筆の設計図、もしくは製造工程図に当たるものです。
どの材質を使って、どのくらいの長さ、太さで、材料ををどのように組み合わせて、、
という内容が事細かく書いてあるものです
「コンパイラ」は、鉛筆を作るための組立設備にあたるものです。
特注で作った、全自動の専用機械で作っているかもしれませんし、
汎用の木材工作機械をいくつか使用して作っているかもしれません。
手作業でカンナやノミを駆使してひとつひとつ丁寧に作っているかもしれません。
「アプリ(製品)」である、出来上がった鉛筆を、消費者が購入して使います。
もちろんこの製品には、設計図も工作機械も付いてきません。
コンパイラをくれ、というのは、
アプリの「工場」や「職人」をくれ、と言っているのに近しいので
元々提供するのはおかしな話ですし、
仮に、カンナやノミを売っている場所を教えたとしても、
何に使うか不明なうえに、役に立てるとも思えないのです。
結論から言うと、その段階で動作するコンパイラのようなものは存在しません。
あえて、質問者が想定する処理を行うものをあげるとすると、
それはOSだと思います。スマホで言うと、AndroidやiOSといったものです。
コンピュータは機械語や2進数しか理解しない、というのは
ちょっとした誤解があって、実際に2進数(ONかOFFか)しか処理できないのは
プロセッサとか、メモリとか、そういうハード的な部分であって、
その上層にある、BIOSとかカーネルとかOSの部分は、2進数じゃなくても処理可能です。
逐次解析処理しながら実行していくらからです。
実はこの解析も「プログラム」が行っています。
たとえば、任意の場所にあるメモリ上に4ビットの2進数「1010」があったとして、
それをユーザーに理解できるよう画面表示するときは、
まずは10進数に直して、1×2の3乗+0×2の2乗+1×2の1乗+0×2の0乗 → 10 とし
次に画面に「1」と「0」を表す文字を表示するために、
それぞれの桁に16進数0x30を足して、0x31番と、0x30番の文字グラフィックを表示します。
これで画面に「10」が表示されました。
実際には最低でもこれだけの処理(プログラム)が動作しています。
そんな処理を、いちいちプログラマが書かなくていいのは、
OSなどが用意した、基本的な動作をするプログラムがすでに用意されてい来るからです。
逆も然りで、ユーザーが入力した内容を、プロセッサにわかるように
解析するプログラムも、OSなどが用意してくれています。
つまりは、質問者が疑問に思っている処理を行っているのは
つきつめていくとプログラムであり、
そのプログラムはOSの用意したものであるから、
処理を行っているのは、見た目上OSであると言ってよいと思います。
分かりやすいご回答、ありがとうございます。勉強になります。
コメントの訂正となりますが、ライブラリはコンパイラではありません。
承知しました。ありがとうございます。