質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
機械語

機械語とは、プロセッサが直接解釈・実行できる状態の言語です。

コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

11回答

6765閲覧

プログラミング言語をPCが認識する仕組みについて

natural1994

総合スコア16

機械語

機械語とは、プロセッサが直接解釈・実行できる状態の言語です。

コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

0グッド

0クリップ

投稿2019/07/19 22:12

「プログラミング言語=PCへの命令」というのは理解しています。

しかし、なぜ人間に近い言葉で書いたものをPCが機械語にコンパイルできるのでしょうか?疑問で仕方ありません。色々なプログラミング言語がありますが、それぞれ文法や表現方法も異なるのに機械語に変換されます。

そもそもプログラミング言語をどういう風にして作るのでしょうか。
また、作った後にそれらをどのようにしてPCに認識させるのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答11

0

まず、プログラミング言語自体の発想とは、難解な機械語を人間にも理解できる言語で記載できるようにしたものということになります。
我々の時代であれば世の中で利用されているプログラミング言語が非常にたくさんありますが、少し前(今40〜70歳)の時代であれば機械語に近い形でプログラミングしていた人たちもいるはずです。

機械語に近付けば近付くほど低級な言語、遠ざかれば遠ざかるほど高級な言語という言い方をします。
高低に良い悪いの違いはありません。機械を下に、人間を上にした場合に、より機械に近い部分で記載された命令を低級と位置づけています。
現在流行しているプログラミング言語は殆どが高級言語ですね。
しかし低級な言語を扱える人というのは非常に特殊な技術の持ち主であり、扱える言語が低級か高級かということに技術の高低はありませんので注意してください。

繰り返しになりますがプログラミング言語とは難解な機械語を人間に理解できるように記載できるようにしたものであり、機械はプログラミング言語自体を読むことはできません。
プログラミング言語が最初に作られた歴史というのは私も不勉強でよく分かりませんが、最初に流行したプログラミング言語はCOBOLというプログラミング言語です。
これはほぼ英文法に近い形で人間が機械に命令したい内容を記載することができ、コンパイルという機械語に翻訳する作業を行うことで機械への命令文に翻訳することができます。
これによって一般人でもコンピュータを扱うことができるようになり、役所や企業などはこぞってコンピュータを購入し事務処理をコンピュータに任せるようになっていきました。
なぜそれまでコンピュータが広まらなかったかというと機械語かそれに近い低級な言語を扱える技術者しかコンピュータを扱うことができなかったからです。
このCOBOLというプログラミング言語が流行したことで、その後のプログラミング言語も同様にある程度の英文法に則った形で記載でき、機械語に翻訳するような形が広まりました。

最初の質問はなぜプログラミング言語をコンパイルすることができるのかということでしたね。
プログラミング言語がなければ、機械語あるいは機械語に近い低級な言語を扱える技術者しかコンピュータを扱えないことになります。
そこで世の中にもっとコンピュータを広めるために、世の中をもっとよくするために、機械語や低級言語を扱える技術者は、英文法に近い記載内容を機械語に変換できるような技術を開発します。
それが現在一般にプログラミング言語と呼ばれている高級言語であり、最初に流行したプログラミング言語がCOBOLです。

低級言語技術者が、高級言語で書かれた内容を機械語に変換するよう作った処理をコンパイラと呼びます。

コンパイラは高級言語と機械語の翻訳機であり通訳です。
相手の話す言葉が分からなければ通訳はできません。
最初にコンパイラを作った人は、機械の言葉が分かったのでしょうね。
なぜプログラミング言語をコンパイルできるのかということになると、コンパイラを作った人は機械語が分かったからということになると思います。

より違った言い方をすれば、機械語の分かる人が、機械語の分からない人にも機械を扱えるよう、わざわざ用意したものがプログラミング言語でありコンパイラである、ということになると思います。

このような説明で、疑問は解消されますでしょうか。

※C言語のコンパイラはC言語で書かれているということもあり、この説明が完全に合っているかは保障できません。ただ私としては上記のような感じで理解しておりほぼ納得しています。
他の方の回答にもありますようにWikipediaなども併用しコンピュータの歴史から遡るなどするとより理解が深まると思います。

投稿2019/07/20 00:34

akabee

総合スコア1947

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pepperleaf

2019/07/20 01:34

> 少し前(今40〜70歳)の時代であれば機械語に近い形 DIP-SWで入力した時代もあると聞きます。(見た事はある) 今でもアセンブラ(≒機械語)は、使われていますね。 COBOLは、事務処理系で多く、使われ、技術計算は、Fortranと聞きます。あと、Lispが古いです。 機械語の問題は、難しいと言うより、同じ事をするのに、10倍、いや 100倍以上のコードが必要な事でしょう。やっている事は単純。でも実用的な事をさせるには、大量のコードが必要という事です。
guest

0

何をどこまで知りたいのかわからないのと、ご自身でどこまで調べたのか?という疑問があるんで、どういう回答すれば良いのかわかりませんが…。

Wikipediaでコンパイラの説明でも読むなり、その手の解説をしている本を探してみるなりしてみては。

一から全部説明すると、それこそ本が書けます。

投稿2019/07/19 22:19

gentaro

総合スコア8947

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

電源を入れると BIOS というソフトがまず起動します。これは電源を落としても消えない不揮発メモリに機械語で書かれていて、電源を入れた時からメモリ上にあります。

次に BIOS はディスクやネットワークといったハードウェアを使って OS をメモリ上に読み込み、それに制御を移します。OS は機械語で書かれていて、大抵の場合ディスクの特定位置にあります。

OS はディスクの構造(ファイルシステム)を解析し、そこから機械語で書かれた実行ファイルをメモリ上に読み込み、それに制御を移します。

大雑把に言って、これがプログラム実行の簡単な流れです。

プログラムは機械語で、メモリ上で実行されるということです。CPU はメモリ上の機械語を読み取り、それに従ってメモリの読み書きをしたり、各種レジスタやハードウェアに指令を出したりすることができます。CPU は様々な回路を精密かつ複雑に組み合わせたもので、要するにソフトウエアではなくハードウェアによるプログラミングがなされています。

コンパイルは人間の書いたプログラムを機械語に直す手順です。プログラミング言語は厳密に文法が定められているので、機械語に翻訳することができます。

コンパイラの前にインタプリタの話をします。これは指令書を読み取り、その通りに動くソフトです。例えば指令書に a = 10 と書かれていたら、メモリの特定の箇所を確保し、それに a という名前をつけ、そこに 10 という値を書き込むよう動きます。

インタプリタは指令書を読みながら動くので、指令書の解析という手順が必要で、それに時間を取られます。

そこであらかじめ指令書を読んで解析し、その通りに動く機械語を組み立てて保存しておくと、効率的に実行できます。この手順をコンパイルと呼び、それをするソフトをコンパイラと呼びます。

コンパイラはすべての言語をコンパイルできるわけではありません。自分の知っている言語を指令書とし、それに従って人間の代わりに機械語のプログラミングをするだけです。

コンパイラによって作られた機械語のプログラムは、実行ファイルとして保存され、実行すると OS によってメモリにロードされ、そこに制御が移されます。

参考: ブート ストラップ - パソコンの起動 by BIOS

投稿2019/07/20 01:29

編集2019/07/20 01:52
Zuishin

総合スコア28662

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pepperleaf

2019/07/20 01:52

ほとんど、突っ込みレベルですが、 > 電源を入れると BIOS というソフトがまず起動します。 電源を入れると、ハードウェア(CPU)に依存したメモリ上の(特定位置の)データを読込み、そこから、処理を開始します。そこには、(大抵)ブートストラップと呼ばれるコードがあり、ハードウェアの初期化/OS(or BIOS)の起動を行います。 だと思いますが、、。。 また、最近は、OSだけでなく、BIOSまで、その大半が、高級言語で記述される事が多いと聞きます。(実行はコンパイルされた機械語) Unixがその最初とも聞きますが、真偽のほどは知りません。
Zuishin

2019/07/20 03:20 編集

高級言語はそのまま動きません。機械語にコンパイルされ、実際にロードされるのは機械語のものです。また、この回答は、理解しやすくするためにいろいろと飛ばしています。詳細は最後のリンクを読んでいただければと思います。ブートストラップについても書かれています。
pepperleaf

2019/07/20 04:28

大体の意図は分かるのですが、機械語が動き、... 最初から、機械語で書かれたコードが動く印象です。 リンク先も見ましたが、既に古い印象。その割に微妙なところが細かい。最後にちょっと触れていますが、もうBIOSじゃないとか。(この辺は自分も詳しくないが、、) それに BIOSって Basic Input Output System で、MS-DOSの頃の基本的入出力システム。前時代の遺物で、Windowsになってからは、システム起動用の役割へと変質。(この辺、きちんと説明できる人はいないかも) と、問題を複雑にしたのではと。
Zuishin

2019/07/20 05:07

> 機械語が動き、... 最初から、機械語で書かれたコードが動く印象です。 どういうことかわかりませんが、機械語で書かれたコードが動きます。しかしそのソースは機械語である必要はありません。コンパイルするので。 BIOS は遺物ではなく現役だと思います。不揮発メモリは高いので、少量のコードに利があります。
pepperleaf

2019/07/20 14:37

MS-DOSの頃は、BIOSがI/Oのほぼ全てを行ってました。キーボード入力, グラフィック, FDD I/O, Printer出力 etc. それが、今は起動時の処理のみで、Windows等が直接アクセス。それで、Baisc "Input Outout" Systemじゃないと思う次第。(現実問題としては、BIOSという単語が独立したとも言えるが)
Zuishin

2019/07/20 14:55

私の回答では BIOS の役目として DOS の入出力云々は書いていません。それはまた別の話だと思います。
pepperleaf

2019/07/20 15:16

BIOSとは、(基本的)入出力を管理するものとの理解。従って、今のBIOSの役割は別と考えています。それが見解の相違と考えます。本来は、ブートストラップ、IPL(Initial Program Loader)と呼ぶべきじゃないか、と思っています。 今のPCの世界では、BIOSがブートストラップの役割を担っているのも確かですが。 (自分の経験上、この辺は PC以外が多いので、BIOSと言われると ⁇ となりがち)
Q71

2019/07/20 15:16

https://ja.m.wikipedia.org/wiki/Basic_Input/Output_System Basic Input/Output System(ベーシック インプット/アウトプット システム、頭字語:BIOS(バイオス))とは、ファームウェアの一つで、コンピュータに搭載されたプログラムのうち、ハードウェアとの最も低レベルの入出力を行うためのプログラムである。 https://ja.m.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface Unified Extensible Firmware Interface(ユニファイド・エクステンシブル・ファームウェア・インタフェース、UEFI)はオペレーティングシステム(OS)とプラットフォームファームウェアとの間のソフトウェアインタフェースを定義する仕様である。 「BIOS」と呼ばれても、別のものですね。方や「ファームウェアの一種」、他方は「ファームウェアとのインターフェイスの仕様」。 「OSを呼び出す」という役割については同じですが、というか、この役割を担っているものをBIOSと呼んでいるのかも。まぁ、起動の方法とか、全く別物なんですけどね。
Zuishin

2019/07/20 15:21

BIOS という名前であり、あなた方の想像する BIOS と私の回答に書かれている BIOS は違います。
Zuishin

2019/07/20 15:22

ごらんの通り、OS をロードする BIOS(総称)について書いています。
guest

0

PCがプログラミング言語なんか認識しません。
そこらへんから考え方を改めましょう。

PC上で走るそれ用のプログラムが、プログラミング言語なる文字列の羅列を解釈して、さもそれで動いてるように見えるように動かしてます

#インタプリタの説明

投稿2019/07/19 22:59

y_waiwai

総合スコア88024

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

プログラミング言語がいくら人間の使う自然言語に近いと言っても、プログラミング言語は人工的に作られたものです。構文が完全に決まっていて、形式的に定義されているのが普通です。

単なる文字列を機械語に変換することはできませんが、この構文でこう書いてあるならこの機械語に変換する、ということを決めておけば、構文解析までやったあとに機械語に変換することは可能になります。if文ならcmpとjzでという感じでしょうか。構文解析はプログラミング程度ならそう難しい技術ではない(というか構文解析がちゃんと成功するように定義している)ので、できるのかできないのかでいえばできますし、どんなコンパイラ・インタプリタもやっています。

投稿2019/07/20 06:36

hayataka2049

総合スコア30935

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

しかし、なぜ人間に近い言葉で書いたものをPCが機械語にコンパイルできるのでしょうか?

PCが、翻訳するのではありません。翻訳用のソフトウェアが翻訳します。通常、「compiler」と呼ばれます。
コンパイラは、どんなプログラミング言語でも翻訳できるわけではありません。人間は、マルチリンガル(multilingual)な人がいますが、ソフトウェアは大抵1種類のみの言語を翻訳できます。対象ではない言語で書かれたコードを渡しても、理解できないと返ってくるだけです。

投稿2019/07/19 22:26

Q71

総合スコア995

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

0

質問)なぜ人間に近い言葉で書いたものをPCが機械語にコンパイルできるのでしょうか?
(回答)プログラミング言語が機械語にコンパイルできるようなアーキテクチャしているからPCは機械語にコンパイルできるようになっています。
(質問)プログラミング言語をどういう風にして作るのでしょうか。
(回答)プログラミング言語の具体的な作り方はまだ分かっていません
「コンパイラ」「プログラミング言語の作り方」などでググってみてはいかがでしょうか?(質問)作った後にそれらをどのようにしてPCに認識させるのでしょうか?
(回答)プログラミング言語が機械語にコンパイルできるようなアーキテクチャすることで、PCに認識できるようになります。

低評価の回答のためサイトの内容に不適切な投稿と判断し削除

戻す方が良いという意見があるので、回答内容を戻す
(質問)なぜ人間に近い言葉で書いたものをPCが機械語にコンパイルできるのでしょうか?
(回答)プログラミング言語が機械語にコンパイルできるようなアーキテクチャしているからPCは機械語にコンパイルできるようになっています。
(質問)プログラミング言語をどういう風にして作るのでしょうか。
(回答)プログラミング言語の具体的な作り方はまだ分かっていません
「コンパイラ」「プログラミング言語の作り方」などでググってみてはいかがでしょうか?(質問)作った後にそれらをどのようにしてPCに認識させるのでしょうか?
(回答)プログラミング言語が機械語にコンパイルできるようなアーキテクチャすることで、PCに認識できるようになります。

低評価理由
情報価値0:1件

投稿2020/06/04 14:05

編集2020/06/06 13:35
panta

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/06/06 00:57

https://teratail.com/help/delete-policy >削除リクエストが許可されないケース 回答 2. 回答に低い評価がついた 1.にあるように「編集より修正するか、誤っている旨を追記してください」
panta

2020/06/06 02:22

指摘ありがとうございます。 紹介いただいたリンクの内容を参考にして修正しました。
m.ts10806

2020/06/06 02:24

大抵は、元の回答を残した上で、「誤っている」旨を書きます。 ただ、どのように誤っているか理解した上で対応すべきで「単に低評価ついたから消した」だけでは、今後の改善は見込めないので、低評価は減りませんし、逆にやりかたのマズサもあって加速する可能性もあります。
panta

2020/06/06 02:30

では、低評価の理由が分からない時、しかし不適切な回答だと判断した時はどのような対応をすることが良いのでしょうか?そのまま不適切と判断されている内容を表示しておくことは混乱を招きかねないと思ったのですが
m.ts10806

2020/06/06 02:44

質問を編集すれば低評価をした人に届きます。私は低評価をした人ではないですが、まず低評価理由を確認するところからでしょう。 さすがに5もつけば個人の好き嫌いではないでしょうし。
Zuishin

2020/06/06 02:48

いつの時点でついた低評価かわかりませんが、元々の低評価の理由がわからないというなら、それが不適切かどうかも判断できないということなので、余計なことはしないほうが良いと思います。元に戻してください。 > 低評価の回答のためサイトの内容に不適切な投稿と判断し削除 このような回答は不適切なので低評価の対象になります。
Zuishin

2020/06/06 03:04

編集前の回答についてですが、情報量 0 です。「自分にはわからない」と言っているに等しいので、それをわざわざ回答したことへの低評価ですね。 とりあえず現状よりはまだマシなので戻してください。 その上で、もう一度「アーキテクチャ」の詳細について学び直し、具体的にどのような「アーキテクチャ」なのかを説明し、それが説得力のあるものであれば、低評価が外れたり高評価が付いたりすると思います。
panta

2020/06/06 03:23

情報量が0と判断されているのですね。指摘に従い戻しました。指摘ありがとうございます。
guest

0

なぜ人間に近い言葉で書いたものをPCが機械語にコンパイルできるのでしょうか?

ちょっと何が疑問なのか分からないのですが、まずコンパイラと呼ばれるプログラムがその変換作業をしているのはよろしいですね?
コンパイラはそのように作られているから、あるいはプログラミング言語はそのようなことが出来るように作られているから、というのは答えになりますか?
あるいは「チューリング完全」という性質があって、その性質を満たす言語(機械語も含む)は本質的に同じ表現能力を持つので互いに翻訳可能という説明はいかがでしょう。

色々なプログラミング言語がありますが、それぞれ文法や表現方法も異なるのに機械語に変換されます。

どの言語も、機械語も、チューリング完全という点では同じ表現力を持ちます/同じ表現力しか持ちません。
(マルチプロセス対応は多少話が違うが、本質ではない)

そもそもプログラミング言語をどういう風にして作るのでしょうか。

これはまあ「(既存の言語で)この処理を書くと長ったらしいな→短く書けるようにしよう」の繰り返しではないかと想像します。

また、作った後にそれらをどのようにしてPCに認識させるのでしょうか?

コンパイラ(あるいはインタプリタ)を作ります。

投稿2019/07/20 06:43

ikadzuchi

総合スコア3047

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんにちは。

本質的な疑問を短くまとめますね。他の方もおっしゃっているように短い回答は困難ですが、トライしてみます。

しかし、なぜ人間に近い言葉で書いたものをPCが機械語にコンパイルできるのでしょうか?疑問で仕方ありません。

人が使う「文字」に「文字コード」を割り当て、「文字」をコンピュータへ入力する手段(昔は紙テープやパンチカード、現代はキーボード)を用意しています。キーボードの A を押すと A に割り当てられた「文字コード」がコンピュータに入力されます。(厳密にはちょっと異なりましが、細かい部分は端折ります)
そして、例えば、LDAAを 「アキュムレータA(CPUが内蔵するレジスタの1つ)へロードする命令」へ変換すると約束します。そのような約束を履行するプログラムは「アセンブラ」と呼ばれます。
そのようなアセンブラへLDAA $1234と入力すると 1234番地からアキュムレータAへデータをロードする機械語命令へ変換されます。

そのようなアセンブラはCPUメーカが開発し提供するケースが多く、CPU毎に命令体系も文法も異なります。
昔のプログラマはそれらの命令を組み合わせて有用なプログラムを記述し、アセンブラを使って機械語へ変換・デバッグし、バグが十分に無くなったと感じたら、機械語命令の形式でリリースしていました。

こんなレベルで開発していると時間がいくら有っても足りません。なので、もう少し人間がプログラムを書きやすく記述するための言語がプログラミング言語です。(黎明期はFORTRANやCOBOL等が有名です。)
それらのプログラミング言語で記述されたソース・ファイルを読み込んで、機械語プログラムへ変換するソフトのことをコンパイラと呼びます。
もちろんFORTRANコンパイラやCOBOLコンパイラも多数ありますし、CコンパイラやC++コンパイラ等も有名ですね。

Cコンパイラもアセンブラと同様CPUメーカが開発し提供する場合も多いですが、Visual C++は多くのPCのCPUメーカであるインテルではなくマイクロソフトが提供していますが、このようにCPUメーカでないベンダーが有償や無償で提供するケースも多いです。
また、gccのようにオープン・ソース・プロジェクトで開発されるメジャーなコンパイラも存在します。

これらのコンパイラは、int x;というコードがあれば、(多くのPCでは)4バイトの記憶領域を確保し、それにxという名前をつけ、多くのソース・コードがxという名前でアクセスできるようにします。for(int i=0; i < 10; ++i){...}というこコードがあれば、同様に4バイトの記憶領域を確保し、0に初期化後、+1しながら、10になるまで、...の部分を繰り返し実行するような機械語へ変換します。
コンパイラは同様な変換機能を多数持っています。

色々なプログラミング言語がありますが、それぞれ文法や表現方法も異なるのに機械語に変換されます。

そのプログラミング言語を解釈できる適切なコンパイラを使って機械語へ変換します。
多くのコンパイラ管理ツール(例えばgcc)は拡張子で適切なコンパイラを選択します。拡張子を付け間違うと間違ったコンパイラが選択され、コンパイル・エラーになります。
例えば、C++で記述したプログラムに .c という拡張子を付けて多数のエラーに見舞われたことのある人はそこそこ多いと思います。

そもそもプログラミング言語をどういう風にして作るのでしょうか。

頑張って作ります。基本はソース・コードを機械語へ変換するだけですから、頑張れば作れます。

とはいえ、複雑な変換処理を頑張るだけで作るのはあまりに大変です。
少しでも楽に開発するため、いろいろな工夫がなされます。ブートストラップ問題を見てみると多少雰囲気が伝わるかも知れません。

また、作った後にそれらをどのようにしてPCに認識させるのでしょうか?

OS毎に約束事があります。その約束事に則ったバイナリ・ファイルをリンカが出力します。
そのため、例えば、Mac用のバイナリをWindowsで起動することはできません。

なお、最近は他のOSのバイナリを起動できるような仕組みが徐々に実用化されつつあります。Windows Subsystem for Linuxなど。

投稿2019/07/20 06:34

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Q71

2019/07/20 13:24

Windows Subsystem for Linux のリンクはちょっと古いです。今はMicrosoft Store からダウンロードします。
Chironian

2019/07/20 13:45

おお、そうでしたか!! フォローありがとうございます。
Zuishin

2019/07/20 15:17

WSL は Store ではなく、OS の追加機能のはずです。Store からダウンロードするのは Ubuntu ではありませんか? いつ変わったんでしょう?
guest

0

なぜ人間に近い言葉で書いたものをPCが機械語にコンパイルできるのでしょうか?

既に指摘のあるように、翻訳するプログラムがあります。
まあ、中で小人さんが頑張ってるという冗談もありますが、最初は、人が機械語に(手作業で)翻訳した事もあるようです。
翻訳するためのプログラムを(最初は人が)機械語に翻訳し、そのプログラムを使って、更に良い翻訳プログラムを作成する、という歴史ですね。

今だと最初は、別のコンピュータ(PC)を使って、新しいコンピュータ用の翻訳プログラムを作成するので、人が直接、翻訳する事はまず無いでしょうが。

[追記]

そもそもプログラミング言語をどういう風にして作るのでしょうか。

また、作った後にそれらをどのようにしてPCに認識させるのでしょうか?

この質問の意図が分かりません。
"新しいプログラミング言語がどのように作られるか?" ならば、今までのプログラミング言語に不満があるから。とは言うものの、全く新規に作られる事は無く、既存の言語(Cとか)を参考にして作られます。 昔のCOBOLは、事務処理用言語として開発(米国なので、英語に近い記述)。FORTRAN は、数値演算が容易にできるようにと。(Wikipedia記述では、広く使われた最初の高級言語とか)
等々.... (と、Wikipediaを見るとそれぞれの言語の歴史とかあり、結構興味深い)
次に、言語の仕様が明確になったら、それを機械語に翻訳するためのツールの作成を行います。上に書いた様に、初期の頃は、手作業もありましたが、今は、既存の言語を使って機械語への翻訳ツール(コンパイラ)を作成する手順となります。
ただ、機械語への翻訳と言っても、環境によってその保存されるデータ形式(機械語のデータファイル形式)は異なり、Windows用、Linux用とか、システム起動用もまた別の形式となります。(機械語そのものは、CPUに依存)
PCは、それぞれの手順に従って作成されたプログラムファイル(大抵は機械語のデータファイル)をメモリに読込み、実行する事になる。(と言い切りたかったが、Windowsの.NETは、MSILと呼ばれるバイトコード。CPUは直接、実行しない -- 違うと言う指摘もあり、興味ある方は調べてください。MSILとかで検索すれば、情報はあります)

と、色々と複雑になってます。

投稿2019/07/20 01:21

編集2019/07/21 12:03
pepperleaf

総合スコア6385

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2019/07/20 15:16

機械語は OS ではなく CPU に依存します。OS に依存するのはエントリポイントなどを定めたファイル形式です。そこに誤解があります。また呼び出し規約は言語・ライブラリーに依存します。 MSIL はあくまで中間言語で、ここから更にコンパイルされて機械語になり、直接実行されます。なので、機械語へのコンパイルと MSIL へのコンパイルは別レイヤーの話であり、同列に扱うべきではありません。MSIL を機械語にコンパイルする段階と比較すべきでしょう。この場合、必ず実行のたびにコンパイルされるのではなく、多くは自動的にコンパイルされた結果がキャッシュされ、機械語としてファイルに保存されています。つまり、MSIL をメモリに読み込まないことになります。メモリにロードされるのは機械語であり、直接実行されます。
pepperleaf

2019/07/20 15:36

> MSIL はあくまで中間言語で、ここから更にコンパイルされて機械語になり 私の理解では、MSILを実行するための仮想マシン(インタープリター)があると理解してます。深く理解しているわけではありませんので、間違っているかも知れませんが、要確認です。 仮想マシンでの実行ならば、メモリ上に読み込まれるのは、MSILのバイトコードで、CPUの機械語ではありません。(機械語にコンパイルされるならば、違う) > 多くは自動的にコンパイルされた結果がキャッシュされ、 これは、仮想マシンでのキャッシュ(CPUのキャッシュ扱い)と考えています。 > 機械語は OS ではなく CPU に依存します。 こちらは、そう書いたつもりはありません。(見落とし?) > OS に依存するのはエントリポイントなどを定めたファイル形式です。 のつもりで書いたのですが、書き方が悪かった? もしかして、 > 機械語への翻訳と言っても、環境によってその形式は異なり、 coff とか、ELFを意識して書いたつもりですが、不十分でしたか。
Zuishin

2019/07/20 15:39

CPU に依存する言及がありません。OS にのみ依存しているように書いてあります。
pepperleaf

2019/07/21 11:52

JISコンパイラの件は、リンクを確認。(高機能な)インタープリターとしか見えないですが、議論は止めておきます。 OSに依存の件は、"OSにのみ"依存の記述もしてないと思う。(言われれば、そうとも読めるかもしれないが)
Zuishin

2019/07/21 11:54

機械語は主に CPU に依存します。Windows や Linux を列挙するのは違和感があります。
pepperleaf

2019/07/21 11:57

> Windows や Linux を列挙するのは違和感があります。 失礼しました。 出力される(機械語)のデータ形式が OS等にも依存するという事です。
Zuishin

2019/07/21 12:05

それは翻訳というレイヤーではなく、書籍で言うなら翻訳後のページ割のレイヤーだと思います。 > 機械語への翻訳と言っても、環境によってその形式は異なり、 「翻訳の形式」というと、翻訳の仕方自体が違うように見えますが、実際にはリンクされるライブラリの違いと、ファイル形式の違いだと思います。
guest

0

例えば動物に芸を教え込む場合、
人間の命令(合図)に対してどうすればよいかを覚えさせます。

動物は人間の命令(意図)がわかってやってるわけではなく
単にそうすると褒めてもらえたりオヤツがもらえるから
そうしているだけですね。

翻ってコンピューターの場合、なんらかの入力に対して
なんらかの出力をする、そういう風につくられています。
プログラマーの意図をくみとって動いているのでなく
淡々と入力を出力にしているだけなんスね。

もちろん、人間の意図を直接コンピューターに伝えるのは
難しいので、間をとりもつコンパイラーやインタープリター
なんてものが手伝っているというわけです。

プログラミング言語の作り方に関してはよく分からないので
まつもとゆきひろさんなどの著作を読んでみてはいかが?
もちろん興味があればコンパイラーの専門書を読むのが
いちばんいいと思います。

投稿2019/07/19 23:49

takasima20

総合スコア7460

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問