00:05
はい、こんにちは。ながおかのプログラミングチャンネルです。
今日は、前回に引き続き、プログラミング言語同士の関係の話をしていきたいと思うんですが、
今あるあらゆる言語というのは、基本的にノイマン型のコンピューターというコンピューターで動いてまして、
それは基本的に同じ原理で動いています。
なので、あらゆる言語が最終的には機械語と呼ばれる 0101、0と1だけで書かれた命令になって、
それをCPUが実行するというふうになっています。
このただ0101だとさすがに、昔は本当に0101だけでプログラミングをしていて、
スイッチと呼ばれる、今でもパチパチって上下とか左右に動かすスイッチがあると思うんですが、
ああいうのでパチパチ入力してプログラミングをしていました。
本当に1960年とか、コンピューターができたぐらいの時とか。
ただそれだとさすがにつらいということで、アセンブリというのができまして、
その機械語と1対1に対応するんだけれども、人間が読みやすい、
例えばこの、たとえばですけど0100とかはADDという何かを加えるという、ADD、ADDというのにしようと。
だからこういうパターンがあったら、普通にADDと書くと。
そういうふうにして変換するようなものを作りました。
ただそれも全命令、全機械語の命令が1対1であるのでもう膨大な数の命令になってしまうんですね。
命令というかコード。
なのでもっと抽象度を上げたいというふうに、
どんどん歴史的に抽象度がどんどん上がってくるような方向に言語というのは進んできました。
その抽象度を上げるときにどういうふうな上げ方をするかであったり、
性能と抽象度のトレードオフみたいのも生まれてくるので、
そういったところでプログラミング言語のデザイナーの腕というかが問われると。
さらにその時々の需要というものが反映されます。
例えば、やっぱりここ20年ではWeb、World Wide Webが圧倒的にそういう言語に影響を与えていたので、
例えばRubyであればレールズの普及もあってすごくWebの世界で普及しましたし、
最近で言うとコンピューティングパワーのリソース的な問題で、
すごく並列化が重要視されているので、
そういう並列化しやすい関数型の言語、
例えば何だろう、Elixirとか、
AlanからAlanのラッパーのElixirという言語であったり、
03:01
そういった言語が注目されてきたりとか。
あとさらにGoogle社がそういうもののためにGoというのを開発したりとか、
そういういろいろな流れがあります。
なのでそういう、まず機械語からどんどん抽象化が上がってくるっていう流れと、
あとそもそもプログラミング言語の進化の流れっていうこの2つの流れをいろいろ理解できると、
結構その言語同士の関係性が分かっていろいろ面白くもなってくるんじゃないかなというふうに思います。
このチャンネルではレターを募集しているのでぜひ送ってください。
またいいねやコメントもいただけると嬉しいです。
ありがとうございました。