》全サービス一覧《
初心者必見:なぜC言語を書かないといけないのか?解説します(参考)
情報・話題・検索・動画・画像・履歴
<真相探求>
『参考動画』
初心者必見:なぜC言語を書かないといけないのか?解説します(参考)
2025/01/08
良かったら!評価お願いします
[詳細・外部リンク]
00:00 はじめに
01:16 C/C++とは
04:08 プログラムの成り立ち(5層まで)
15:50 プログラムの成り立ち(6層、7層)
25:04 コンパイラ層のコードを書かないといけない理由
【類似・参考・関連・検索】
【検索一覧集(中)】
》duckduck検索《
》》Bing検索《《
》》google検索《《
『適当機械文字起こし』
※機械なので文字起こしが間違っていることがあります。それから検閲によりワザとNGキーワードを避けるために他の表現や文字が使用されてる場合もあります。
初心者必見:なぜC言語を書かないといけないのか?解説します(参考)
文字起こし
動画内を検索
はじめに
0:00
はいこんにちはえ今回の動画ではCC+ plusとはという話をしようと思ってい
0:05
ます具体的にはえなぜ書かないといけない のか何のために使うのかという話をしよう
0:12
と思っていますなのでえっとこの動画の 対象者はですねえCC+plusを触り
0:17
始めの初心者の人またはえなぜC言語が今 も使われているのかというのを知らない人
0:24
ですねあと3つ目にですね初めて プログラミングをやってみたい人でC言語
0:31
が気になってる人ですねえそんな人いるの かというのもあるんですけど結構今でも
0:36
ですね大学でC言語教えてるケース多いん じゃないかなと思ってですねあのC言語 使うのをやめましょうというのが僕の主張
0:44
なんですよねでまず初めての人はですねえ Pythonからやりましょうあのもう 本当に初めてでC触るのはやめた方がいい
0:51
ですねでその理由をこの動画で説明しよう というのが趣旨になりますこの動画結構長
0:58
丁場になると思うんですけど この動画見ればですねそもそもえ プログラムとは何かなぜえあなたがえ
1:05
プログラムを書いているのかそれがどう やって動いているのかというのを一通り 理解することができます初心者の人ほど
1:12
ですねえこの動画見て欲しいと思っており ますでまずC言語とはということで基本 情報なんですけどえプログラミング言語
C/C++とは
1:20
ですねえ1972年にアメリカのデニス氏 とブライアン氏が開発したということで
1:28
だいぶ古い言語ですよよねで特徴はですね 手続き型のプログラミング言語で構造化の
1:35
プログラミングに適している プラットフォーム依存の言語使用がないの で移植性が高いとで実行速度が早いとか
1:42
リソースが少なくて済むとかそういったえ 特徴がありますでえっとC+plus略し
1:48
てCプラという風に言うこともあります けどえこれもですねだいぶ古いですよね
1:54
1番最初は1979年のようですけども 最初の商用リリースはえ1985年という
2:01
ことですねでCプラはですねえC言語を 拡張した言語になってますでC言語では
2:08
できない高度な処理を実現することが できるという言語で大まかにえCと一緒
2:13
ですよねなのでえっとこの2つを一緒にし てえこの動画では話を進めていきますで
2:18
ですねえっと本題というか先に結論お伝え しますえCCプラをなぜ書かないといけ
2:24
ないのかえ何のために使うのかという ところでえ答えはですね現状を自動化でき
2:30
ないからということになりますもちろん これはあくまでも僕の見解なんで他にも
2:35
ですねえ専門家の皆さんいろんなご意見を 持ちたと思いますがで自動化できない理由 なんですけどそれはえメモリ消費を少なく
2:43
計算時間を短くしたい要求を自動化すると 満たせないからなんですねでもちろんです
2:51
ねえケースバイケースなんで満たせる場合 もありますで満たせる場合はえ実際えそう
2:57
いうケースではC言語を書いていません 例えば最初にえ僕はPythonをお勧め
3:03
すると言いましたけどPythonでやり たいことが全部できるのであればえそれで
3:09
オッケーでえC言語わざわざ書く必要は ないんですねそれはえPythonで メモリ消費を少なく計算時間を短くした
3:16
要求を満たしているからなんですよでこれ が満たせない領域っていうのはマイコン ですよねこのチャンネルのメインテーマと
3:23
して存在してるマイコン実装というところ ですねえその領域でこの件を満たすことが
3:30
できないのでマイコンではえC言語を書 ざるを得ないということなんですね補足で
3:36
書いていますがソフトウェアの領域で ハードウェア操作を抽象化するCPUの
3:41
メモリ管理処理の最適化を行うという目的 もありますこれをしたいのでえC言語を
3:47
使うと理由にもなっていますでは続けて ですねえプログラムの成り立ちという話を
3:53
していきたいと思います皆さんが動かして いるプログラムですねどうやって動いて いるのかというところをですね理解してい
4:00
ないと僕の言いたいことが伝わりませんの でえそこをですね保管していこうと思って
4:06
いますただ本気で全部説明していると何十 時間もかかりますんでだいぶ走りますが
プログラムの成り立ち(5層まで)
4:11
まずですねえOSI3勝モデルというもの がありますこれ何かと言うとプログラムと
4:17
はちょちょっと違うんですけどこういう風 にレイヤー分けするとネットワークの分野
4:23
で設計がやりやすくなりますよというそう いう話なんですねで下からえ物理的実際の
4:30
物理的なシステムですねで上に行くにすれ てどんどん宇宙症化していきますで1番上
4:37
はですねもう通信のことなて考えなくても 良いアプリケーション層を置いています
4:43
こういう風にえレイヤー分けしていってえ 上の方により抽象的な分野を持っていくと
4:50
設計しやすくなるということでこういう 分け方をしますでこのモデルって非常に 優秀でしてこういう風にですねモデルを
4:57
分けるとこういうモデルの分け方って いろんな応用ができるんですよこのえ通信
5:04
の分野のOSI3勝モデルをですね今回は プログラムの領域に持ってこようと思い
5:10
ましたというわけで僕がですねこれ オリジナルなんですけど僕のオリジナルで こんなえレイヤー分けをえ考えています
5:18
まず1番下は物理層これ物理的なシステム ですねプログラムではえトランジスタとか
5:24
大王そういったものになりますいわゆる 反動体ですで2番目がですねロン2回路と
5:29
かオアとか全加算機とかそういったものを 置いていますこれらが実際に計算を行って
5:36
いるわけですね実際の計算回路を 組み合わせてプロセッサーというものを 作っていてでそのプロセッサーを
5:43
アセンブラー機械後が動かしていますでえ その上にあるコンパイラ層というところで
5:50
CCプラが出てきますねえつまり何が言い たかったかていうとCCプラはえこの
5:55
レイヤーの言語だとこの関係性ですねこ この全7層におけるこの関係性を概ね理解
6:04
しておけばなぜC言語がなぜあんな感じな のかなぜあんなめどくさいのかというのが
6:10
分かると思いますあとちょっと補足なん ですけどこの7つのレイヤーですねこのえ
6:16
第3層プロセッサー層と第4層 アセンブラー層の間に切れ目があります
6:23
こっから下がえハードウェアですねこっ から上がソフトウェアになりますでですね もう1つ境い目がでこの第5層と第6層
6:31
ですねこの間の境い目がハードウェア依存 のあるプログラムなのかハードウェア依存
6:39
のないプログラムなのかという違いがあり ますこれも意識しておくと良いと思います
6:45
ではまず順番に説明していきたいと思い ますまずは物理層ですね1番下のある条件
6:51
によって電子を通す物質のことを反動体と 呼んでいまして反動体を使うとオンオフ
6:58
状態を電気エネルギーで制御したり維持し たりできるんですねそれがまず出発線とし
7:04
てありますいう話ですで参考のページ載せ てるんですけどえこの反動体ですねこれの
7:10
仕組み解説してると時間がいくらあっても 足んないんであのとりあえず読んどいて くださいねまこんな感じでま電圧をかける
7:18
とま電気が流れたり流れなかったりする わけですよでオンオフの状態を作ることが
7:24
できるようになったんですねこのオンオフ 状態というものがえ全ての始まりですその
7:29
状態を制御することでプログラムが 成り立っているという風に思ってください で次論理回路層ですここの技術領域として
7:37
は反動体を使った論理演算を実現すること でえ四則演算条件分岐を実現するという
7:44
ことをしてますで参考としてですねこちら のページを貼ってるんですけど例えばここ
7:50
ではえ加算機ですね加算機を作るという 説明がありますで加算機を作るにはですね
7:57
こういう風にアド解除とかですねXとか ですねそういった論理演算の回路を
8:02
組み合わせると作れるわけですねすいませ ん論理演算の説明してなかったんですけど ま見ておいてくださいあのアとかですね
8:09
オアとかノトとかそういう演算を先ほどの 反動体を使えばできるわけですねでそれを
8:16
組み合わせていろんな演算を作ることが できるようになりましたというのがここの 技術領域ですで次の第3層がプロセッサー
8:24
層ということで入力出力制御演算記憶置を
8:29
組み合わせてコンピューターというものを 実現していますで参考のページとして こちらのページ貼ってるんですけども
8:35
こちらのページもですね結構参考になるの で是非ですね読んでおいて欲しいと思い ますあの長いんで全部は紹介しませんけど
8:43
例えばこれですねこういう風に5つの装置 がありますけどこういう装置というものを
8:50
組み合わせて一連の動作を実現できるよう にしてるんですねこの1個1個の装置があ
8:56
先ほど説明しました論理回路ですね論理 回路を使っていろんな動きができるように
9:03
作り込まえているわけですねあと具体的に はここですねこちらの図を見て欲しいん ですけどコンピューターというものは
9:10
CPUとRAMを持っていますでlamの 中にですね命令とかデータというものが
9:16
一通り格納されていますまずこの命令を 読み取ってでそれを情報として処理してえ
9:24
実際の演算を行いますで演算を行ったその 結果をデータとしてラムにまた置きますラ
9:31
ムっていうのはメモリですよねこれも反動 体ですよ反動体のオンオフ状態を表現する
9:37
デバイスですこの中にデータとして格納さ れてるわけです結局この層でやってる ことって割とシンプルで命令を読んで計算
9:46
して結果を外部にするあるいはラグに書く のということをやってるだけではあります
9:51
ただこの技術分野ってかなり深いんですよ で僕もあんま詳しくないんであんまやら そうに語れないんですけど例えばCPUの
9:58
ですねクロックがいくつでとかlamのが 何GBでとかえそういういろんなデータ
10:05
シートを見たことがあると思うんですけど そういう話がですねえここのレイヤーの話 ですで非常に重要ですよこの図の一連の
10:13
動きをですねさらに上のレイヤーの プログラミング言語が動かしているんです
10:18
ねなのでここのレイヤーが何をしているの かというのは理解しておくと非常に参考に
10:24
なりますえ続いてえ第4層アセンブラー層 ですねここではですですねメモリの
10:30
読み書きIOとの入出力CPU内部での 演算プログラムの流れの制御を
10:36
ソフトウェアで実現するということをして ますでその時に使うのがまアセンブラ言語
10:41
とかま機械語というものですそういう文字 情報と言いますかま最終的には機械後に
10:48
なるので機械後というのは01の1連の 数値データになりますそれがえ機械の動作
10:54
を表していますでその機械の動作っていう のはちょっとさっきの図に戻るんですけど こですよねえこの図の通りですアンブラで
11:02
えlamから情報を読むとかえCPUの 計算をするとかあそういったことを書い
11:08
てるわけですねなのでえプログラムとして はこのアセンブラが作れれば終わりですえ
11:16
これができれば全て完結するんですけど このアセンブラってですねかなり難しいん
11:22
ですよあの言語の要素としてはそんなに 多くはないんですけどここに書いてる通り
11:28
ですねメモリからCPUへデータを 読み込むとかですねえこういうのがあるん ですよねこの3術加算とかですねロンリー
11:36
加算とかですね直接その演算装置でやる 演算の中身をですねえ命令できるんですよ
11:43
でこういうのがあるのでままっすぐかけ るっちゃ書けるんですけど何か複雑な処理 を作ろうと思うとアセンブラだとだいぶ
11:50
きついんですねなのでえC言語というもの ができたんですねというわけで一気にえ
11:55
飛ばしてきたんですけど第5層コンパイラ 層に行きますえこの層の言語がCCプラに
12:02
なります結局この層ではですねやってる ことはあんまり変わらないんですねメモリ のみかIOとの入出力CPU内部での演算
12:10
プログラムの流れの制御というのをやって ますでその上でえ理解しやすく汎用性の
12:16
高い高水準言語で記述しえコンパイラを 使って機械後に変換するということをして
12:22
ますつまりアセンブラでやりたいことを より人間が書きやすいことで書けるように
12:30
した言語ですねえそれを用意してえそれを 使って書くことで難しい動かし方をでき
12:38
実現できるようにしているというわけです というわけで参考で貼ってるのがこちらの ページですねC言語と機械語の関係いう
12:46
ページですあの詳しくはこのページ読ん どいてもらいたいんですけどC言語の コードというのはただの文字列ですねで
12:55
その文字列をなんやかんや変換してええ つまりこのラムに書き込むための01
13:02
データに変換をしてるわけですこういうC 言語のコードがあった時にそれをですね
13:08
アセンブラにで書くとこういう風になる わけですねさっき説明してなかったんです けどアセンブラこう見ると結構ややこしい
13:15
ですよねこういうような書き方をしてです ねC言語に比べるとかなり記述量が増える んですよねでこのえC言語のソース
13:23
プログラムをアセンブラーそして機械後に え変換することをしてくれているのがはえ
13:29
コンパイラというアプリですねコンパイラ というのはですね無料で使えるようにして
13:35
くれているものが多いですねなので皆さん がですねえ好き勝ってダウンロードして
13:40
コンパイラーを使ってC言語のコードを 機械後に変換することができようになって ますはいというわけでダート説明しました
13:47
けどえここまでですねえ第1層から第5層 まで説明しましたけどこれら全部ですね1
13:55
個1個がめちゃくちゃ技術分野として深い 話ですここまでの話をまとめるとこのCC
14:01
プラはアセンブラのコードを分かりやすく 書けるようにした言語でえコンパイラーを
14:09
使ってえアセンブラーつまり機械語の コードを出力していますでその機械後の
14:14
コードはこのプロセッサーをどう動かすか を決めている01のコードになりますこの
14:20
01のコードがメモリーに保存されている のでそれを読み取ってプロセッサーは動き ますでそのプロセッサーの各部品の中身は
14:29
とかオアとか論理回路で構成されているの でその論理回路がガチャガチャ動いて計算
14:35
が進んでいくわけですねでその ガチャガチャ動くことができてるのはなぜ かと言と反動体というものがあって反動体
14:42
がオンオフをえガチャガチャ切り替え られる物理構造になっているからですね
14:48
よろしいですかねここまではというわけで ですねC言語で書いているプログラムの 例えば変数はですね中身は全部ビットなん
14:56
ですよねビットつまり0か1か例えば不動 小数点という数値のデータ型があります
15:03
けど例えばフロート型だったらえ32ビッ で作られていましてこの32ビットの内訳
15:10
は1番上がえプラスかマイナスかを表現し ているビットで次の8ビットが指数ですね
15:18
2の何乗かを示している指数部で残りの 仮数部が細かい数値の部分を表現してると
15:24
これらを組み合わせてえ実数のようなです ね柔軟なえ数の表現を実現しているという
15:31
わけですなのでC言語を書くにあたっては こういう変数がビットであるとかですね
15:38
プロセッサーがどう動くかとかメモリに どういうデータが置かれているかとかそう
15:44
いったことをきちんと分かった上で書か ないといけない言語なんですよでそういう
15:49
のをですね考えながら書くって大変なん ですよなぜかと言うともっと上の抽象的な
プログラムの成り立ち(6層、7層)
15:56
レイヤーのところで皆さんが実現したい何 かがあるんですよねというわけでさらに上
16:01
の層に行きたいと思います第6層 インタープリター層ですねここの層の言語
16:06
を使えばえハードウェアのことを考えなく て良いのでだいぶ楽になりますえこの層で
16:12
はですねえデータの構造流れ条件分岐状態 繊維を設計するとでこれらですねその
16:20
データがどういう構造になっているか システムがどういう講座になっているか データの流れがどうなっているか状態が
16:27
どういう風に遷移するかでこの並列って いうのはタスクが並列に動いてるかどうか
16:32
とかそういうのを表現してますけどそう いうの実際にプロセッサーがどうなって
16:38
いるかって関係ないんですよ今言ったプロ セッサーっていうのはこの第3層の プロセッサーのことですよこれがどうなっ
16:44
ているかって関係ないんですよね端的に 言えばなのでえこの第6層ではですね純粋
16:50
にソフトウェアのアルゴリズムとしてどう いう動きになれば良いのかというのを書く
16:56
だけで済むように仕組みを整えているわけ ですなのでえこのレイヤーにいるpyon
17:02
ですね例えばですね初めての人にとっては 非常に使いやすいですえなぜならこのえ5
17:08
層以下ですねハードウェアのことを何も 知らなくてもある程度書けるようになっ
17:14
てるからですでそのインタープリタ層の 言語の特徴なんですけどインタープリタ層
17:20
ですね実はあの2つに分けることができる んですねまこういうの言い出してるときり ないんですけどま例としてえ1つ上げたい
17:27
と思って今てますでインタープリタソの 上位にえpyonとかえマトラボとかが
17:33
ありますでインタープリタソの回はですね えCSとかJavaあとSIMLINK
17:39
なんかもそうですSIMリンク言語では ないんですけどモデルを作ることでえ機能
17:44
を記述できるということで一応 プログラミング言語の区に置いています このインタープリタ層解とコンパイラ層の
17:51
違いはメモリ操作ができるかメモリ操作が できないかですねでコンパイラ層では
17:56
メモリ操作ができるんですけどそれより上 ではえできませんでもう1つですねえっと
18:01
上位と会の違いでえっとコンパイルをする かしないかというのがありますコンパイル
18:07
というのはさっきも解説しましたがこのC 言語の文字列からこの機械後のコードを
18:13
生成するための自動翻訳機能ですねで コンパイルなしでやれるっていうことは
18:19
プログラミングの工程が1つ省略されると 思っていいですあとついでにもう1つ言う とえデータ型が同的に変わるかもしくは
18:29
データ型が変わらないかというものがあり ます何らかの変数を定義する時にですねま
18:34
A=1とかいう風に定義する時にですね この解の言語だとデータ型を決めて例えば
18:41
ina=1とかいう風に書かないといけ ないんですけど上の方の言語だとえデータ
18:46
型を決めなくてもA=1という風に書く ことができますでその後にそのAに対して
18:53
ですね例えば文字列を代入することも できるんですねデータ型が明らかに違う
18:58
ものを後からボンと入れることができます そういう風に柔軟にデータ型を変えること
19:03
ができるということは要するにえ抽象的と いうことなんですよまそもそもこのデータ
19:09
型ってどっから来てるかと言うとここです よねえビットから来てるんですよもちろん
19:14
インタープリタ層の言語でもその中身を 突き詰めていくとビットの列になりますよ
19:21
なのでデータ型というものはあの存在して いますデータ型を決めないとこのビットが
19:26
何を表現してるのか分からなくなります からでもそこを全部抽象化して見なくても
19:33
いいように仕組みを整えているのがこの インタープリタ層の言語なんですねだから
19:38
Pythonは落ちなんですねまちなみに もちろんインタープリターソの言語C#と
19:44
かJAVとかもえコンパイラーはついて ますでそれらの言語ではコンパイラーを
19:49
使って最終的な機械語との生成はしてます あのちなみにコンパイラの仕組みをですね
19:55
より深く知りたい人はですねあのこちらの ページとか見てもらうと分かりますま もちろんもっと勉強するとですね果てし
20:02
なく深い領域なんであのもしま興味のある 人はですね是非勉強してもらえると良いと
20:07
思いますが繰り返しになりますけどえなん でコンパイラーがあるかと言うと上の方の
20:13
レイヤーの言語を介護にするためですよね でアセンブラで書くとですね人によって
20:19
あの性能にばらつきが出すぎるんですね なぜなら複雑なシステムを書くのが難しい
20:25
からで複雑なシステムを書き出すとえ科性 がなるっていデメリットがあるので
20:30
やっぱりコンパイラーというものは必要に なってくるというわけですねちなみにです ねちょっとここに参考に載せてるんです
20:35
けどllvmというものがあってですねえ コンパイラってやってることをいろんな
20:41
言語で同じことしてるよねとそれを全部 共通してるところをまとめてえ違うところ
20:47
だけ分けよう分けて管理しようよという ような枠組がありましてまそれがlvm
20:53
ですねちょっとこれ説明しと長いんであの もし興味があればですね見てみてください
20:58
で次ですねえさっき説明はっていたこの インタープリターですねコンパイルしなく
21:04
ても良い状況を作ることができますという これどうなってんだという話なんですけど
21:09
このインタープリターというものがあると 記述したソースコードを1行ずつ変換して
21:15
命令を処理実行できますえ実行前に事前に コンパイルを行う工程を省略できるとでえ
21:21
汎用的なんでま厳格な最適化はできないん ですけどえ気軽に試せるというのが
21:26
メリットですという風にまとめてます 詳しくはですねあのこちらのページにえ Pythonのインタープリタについて
21:32
まとまっているんでえこれも是非読んで おいていただきたいんですけどあのC言語 だとですねまず全部のコードを書いてそれ
21:40
を全部コンパイラで読み取って機械後に 変換するということをしてますが インタープリターだとえフインを書いたら
21:48
その1行1行を都度読んで実行ということ ができるんですねPythonのアプリ
21:54
から見た時にこの仮想CPUというものを 使ってるんですねで1行読んでそれに該当
22:01
する何らかの控のコードをとりあえず読ん で実行するとでまた1行読んで別の機械後
22:07
を実行するというような動かし方をしてい るっていう風に考えれば良いですねなので コンパイルは最初から終わってるという風
22:15
に見るのが良いかもしれませんでその インタープリタの中身っていうのがこれ ですねこの仮想CPUというのが実際の
22:23
CPUに何をするかをま決めてくれてるん ですねなのでpyonから見てそのCPU
22:30
っていうものがどうなっているのかを知る 必要がないんですよだからさっきも言い
22:35
ましたがこのインタープリター層の言語と いうのはハードウェアのことを何も知ら なくてもいいんですね逆にこの
22:43
インタープリターの仕組みCPUを仮想化 する仕組みというのが最初からないといけ
22:49
なくってこれがまあ大変と言えば大変なの で基本的にPythonみたいな楽な言語
22:56
はパソコンで動かすのがだと思います マイコみたいにですねリソースが限られ
23:01
てるシステムだとなかなかいい感じのもの を用意してくれていないという現状があり
23:07
ますねまあるんですけどねあの Pythonでもマイクロpyonという ものもあったりしますこれがマイコン用の
23:14
pyonみたいな感じであるんですけどま 結局ですねこれもまよくできてると思うん
23:20
ですけど作り込んないんですよねあくまで pyonはハードウェアのことを何も知ら
23:25
なくても動かせる言語なのでできことがC 言語と比べると少ないんですよなので結局
23:33
このコンパイラ層の言語でカスタマイズし ないと性能が出ないということが多いです
23:39
以上がですねインタープリター層という ことで最後にですねアルゴリズム層の話を しようかなと思いますがここも飛ばし気味
23:47
でいきますけどインタープリター層の上と いうことでシステムの使用を決める
23:52
レイヤーですで基本的にえ実行できない 文章と図で表現するということことで
23:59
例えばumlとかですねsismlという ものを使ったりしますもうこのレイヤーに
24:05
来るとですねこの実装対象が コンピューターかどうかというのはもう 問わない領域になってきますこの領域で
24:11
書くのはこういう要求図とかですねC験数 図とかですねユス系数図とかえそういった
24:18
え抽象的な振る舞いとか構造をですねえ 表現するものなんですね例えばあの普通の
24:25
文章ですねま使用書ですけど使用書とか 数式とかあのそういったものでも表現して
24:31
良いと思ってますこういう風にま何を作り たいかですよね何がああって欲しいかと
24:37
いうものを表現するのがここのレイヤー ですまちなみにこのレイヤーで何をどう
24:43
作るかというのが実は設計の世界では1番 重要ですよでこれをどう実現するかという
24:50
のをどんどんレイヤーを下げて具体化して いくというのがえ開発の流れですここまで
24:56
の説明で大体分かったと思うんですけど 最後ですねもうちょっと具体的に話を進め
25:02
たいと思いますコンパイラ層のコドを書か ないといけない理由ということでま結局
コンパイラ層のコードを書かないといけない理由
25:08
ですねインタープリタソの言語つまり Pythonからえ機械語を自動生成する
25:13
のが難しいんですよでさっきも言いました けどインタープリター層の言語にはえ プロセッサー層の操作に関する情報が踏ま
25:22
れてませんなので実際に機械語として動く 段になった時に何らかの処理が自動的に
25:29
作られるわけですねでその処理が十分に いいものにならないのでえコンパイラ層の
25:36
言語でかざるを得ないという状況にあり ますでもう1回この図に戻りますがま簡単
25:42
に言えばこのアンブラソですねえこの レイヤーに変換するのにインタープリタソ
25:48
はちょっと離れすぎてるんですよね離れ すぎてるので難しい直接変換するのが
25:54
難しいという風に言えますあとちなみに ですねあのコンパイラですねCCプラの他
25:59
にラストという言語もありますC言語って 結構古い言語で色々問題を抱えてるんです
26:06
よねえそれを色々解決してくれている 新しい言語がラストという言語でえこの
26:13
言語が今後普及していくんじゃないかなと いう風に僕は思っていますでですね コンパイラ層で設計できる幅というのは
26:20
アセンブラ層で設計できる幅とほとんど 同じという風に言っていいかなと思います
26:25
なのでえ最適化を行いやすいただししえ それでもですねアセンブラコードを手書き
26:30
してさらなる最適化を行わないといけない 場合もあるようですねま僕はそんなケース
26:36
に出会ったことはないんですけどま中には ですねあのC言語じゃまだ遅いと アセンブラを書かなきゃ最適ができないと
26:44
いうようなことを言ってる人を見たことが あります結局設計の本質というのはこの
26:50
アルゴリズム層にあるんですよねここで 具体的にどういう振舞をこの世界に実現
26:57
させせたいかというのを考えるんですで それを具体的に実装していくのがこの下の
27:05
層にな行くわけですけどここをですねもし 自動化できれば自動化したいんですよ本当
27:13
はこの層だけで全部終わればですね1番楽 で早いんですなのでそれがプログラミング
27:20
の発展の方向性だと思っています今夜中的 にはですねいろんないろんなツールの発展
27:27
の流れがありますアルゴリズム層から順番 に落としていって機械後までえ自動的に
27:35
変換できるようにする動きはですねあって ですねそれが例えばマトラボシムリンクで
27:42
あるわけですねマトラボシムリンクという のはマスワクスという会社が作っている ツールなんですけどえその中にですねあの
27:49
エンベデッドコーダーというツールがあり ますこれはですねマトラボの言語やあの
27:55
SIMリンクのモデルからえC言語のを 自動的に生成することができるツールです
28:01
ねでその自動生成されたC言語のコードを まもしあればですね手書きのコードと統合
28:07
してコンパイラで機械後に変換することが できますインタープリター層から
28:12
アセンブラ層までですね一気にえ自動化 することができることになってますことに
28:18
なってるっていうのはですねま完璧では ないからなんですねあのマザボシリンクは 結構いろんな業界で使えていてえ量産開発
28:26
でも使えていますでえその理由はですねま 一言で言えばえ十分に良いえ
28:32
インタープリター層からえ機械後を自動 生成するワークフローが実現できるのでは
28:38
ないかと思われているからですねただ今ん ところ十分に良いものはできないですね
28:44
残念ながらでそのお手当ですね量産開発で 最終的なえ成果物を作るためのお手当がえ
28:52
ちょっと必要になりますあと例えばえCI がありますよね最近ですとで生成AIは
28:59
ですねめちゃくちゃ期待されているわけ ですね皆さんもあの分かると思うんです けどえなぜかと言うとえさっき説明した
29:06
通りアルゴリズム層かですねアセンブラ層 まで一気に自動化できるのではないかと
29:12
いう風に期待されているわけですよ もちろん一足飛びでumlからですね機械
29:18
語を生成するなんてそんなことは誰も期待 してないと思うんで順番にですね層を
29:23
落としていってえ自動自動生成自動生成し ていって最終的に機械語を生成するという
29:30
流れができないかなという風にみんな考え てると思いますこれもですねまあなかなか
29:35
難しいと思いますよまもちろんケースバイ ケースでしょうけどまそもそもこれが できるんだったらですねもう生成合がです
29:43
ね全ての製品を設計できるという世界に なってきますよそれもうマトリックスの
29:48
世界ですよねもうそうなったら僕も皆さん もですね仕事する必要がないんであのそう
29:53
なったら僕も遊んで暮らせるようになるん で是非そういう世界は来て欲しいと思って いますただあのすぐには来ないと思って
30:00
ますまだまだ時間がかかるでしょうなので えそもそもですねあの自動生成に丸投げ
30:06
するということがえ間違っているわけです よねこの上層から解層に対してえ十分に
30:12
いいコードが自動生成できるということは しばらくないですなのでえ自動生成を活用
30:18
しつつえ必要に応じて人間が修正できる ようにする枠組が必要ですよねで今回僕が
30:25
1番言いたかったのここなんですけど今回 説明したえプログラムの参照モデル7層
30:30
全てが連携して機能することで ソフトウェアというものが動作しているん ですとそれをですねま大まかにでもいいん
30:37
でえ理解しておかないとえなんで行動を 書いているのかなぜこれが動いてるのかと
30:43
いうのを分からずC言語を扱いきれないと 思うのでえ是非ですね理解してもらいたい
30:48
という風に思ったのでこの動画を作りまし たで結論なんですけど結局えCを書かない
30:55
といけない状況にある皆さんなぜそうなっ ているかというとえ自動化できないかです ねでまたですねえソフトウェアの領域でえ
31:03
ハードウェアの操作をえC言語のレイヤー の言語でえ抽象化するということをしたい
31:09
からまたえCPUのメモリ管理とか処理の 最適化を行うということをしたいのでここ
31:15
のレイヤーの言語があるわけですねなので これらをやりたいわけではないのであれば
31:22
Pythonでいいんですよというわけで 適切に言語を使い分けてですねえ皆さんの
31:27
やりたいことことを実現してもらえればと 思いますあと最後ですねC言語をや使わ
31:33
なきゃいけない人向けにですね是非これ 読んどいてというのをえここに書きました C言語のコンパイラーの動きについてです
31:40
ねえちゃんと説明してくれてるのがこちら のページですねあとえプリプロセッサーと いうものがC言語にはあってですねこいつ
31:47
が何をしてるのかというのを理解する必要 があるのでえそれを説明しているのがこの ページですねま是非ですねこの2つは読ん
31:54
でおいていただきたいですちょっと今日 時間があれなんでもうしませんがえ概要欄 に貼ってますのでえ見ておいてください
32:02
だいぶ長くなりましたが以上になります 最後までご視聴くださいましてありがとう ございました
32:12
[音楽]
【サービス】
》全サービス一覧《
◆[一覧・リスト]真相探求ニュース
》》一覧情報《《
なんでも!一覧中(集)
◆◆全メニュー◆◆
↑画面TOPへ↑
---以上
【このカテゴリーの最新記事】
-
no image
-
no image
-
no image
-
no image
-
no image
-
no image
-
no image
-
no image
-
no image
-
no image
-
no image
-
no image
-
no image
-
no image
-
no image
-
no image
-
no image
-
no image
-
no image
-
no image