読者です 読者をやめる 読者になる 読者になる

Unityでインディゲーム道!

プログラム、Unity初心者がインディゲーム制作を目指して日々思うことなどを書き綴ります。

アセンブリ言語とC言語。コンピュータのコアの部分を知る。

 いまさらC言語なんて・・・ましてやアセンブリなんて・・・と思うかもしれませんが、人によっては最適な入り口は違うと思いますし、いろいろなプログラミング入門の仕方があっていいんではないか?ということです。

  

いいサイト見つけました

ポインタについての記事で、純プログラミングな話題はひとまず区切ろうと書いたのですが、すごくいいサイトに出会ったので紹介させてください。

というかやっぱUnityガンガン触んないと!って感じなんで後は平行して学んでいくって方針で行きたいと思います。 

  

こちらです!

Programming Room

アセンブリ言語の観点から、C言語について解説している個人の方のサイトです。

まさに2000年代初頭という感じのHTML丸出しなページですが、そこがイイ!

けっこう誤字脱字もありますが、ここら辺に興味ある人にとっては入門にふさわしいテキストなのではないかと思います!

  

 プログラミングを学び始めるなら

よく玄人の方は『アセンブリからやった方がいいよ。』みたいなことをおっしゃるようです。とはいうものの、最初からそれってなかなか難しいですよね。

なんで現実的にはC#とかで簡単なアプリを作ったりして覚えたほうが楽しいし、ハードルは低いと思います。自分もコピペでごり押しで作ってみて、でした。

 

自分もアセンブリからやった方がいい、という言葉は知っていましたが、コンピュータの基礎教養本で軽く触れた程度でしたね。

しかし、この考え方の有用性を明確に教えてくれたのが、このサイトなわけです!

  

では、なんでアセンブリ言語を学んだほうがいいのか?

それはアセンブリを通じて、コンピュータの核であるCPUメモリがどういうやり取りをして、プログラムを実行しているのか、という原始的な部分を学べるからです。

 

アセンブリとは、コンピュータに直接送られる機械語をすこし人間にも読みやすくしたものであり、アセンブリを知るということはコンピュータの生の動きを知ることができる!というのです。

プログラミング言語高級言語ということで、人間の言葉に近づくように抽象化されていますが、アセンブリはかなり具体的な、裸な姿を見ることができるというわけです。

  

人間の感覚に近づける。抽象化。

抽象化とは例えば、Console.WriteLineみたいな“コンソール画面に表示して!”

というようなことです。アレやって!みたいなことです。

 

しかし、コンピュータにこれをやらせるには、何番のポートに接続されているディスプレイの何番目の液晶の発光体をどのくらい光らせるとかそんな

クソ面倒な指示をしないとだめなわけです。

しかしプログラマがいちいちそこまで考えるのは面倒なので、あらかじめ抽象化されたConsole.WriteLineという命令が用意されているわけです。

  

Unityというゲームエンジンもそういう面倒な部分を考えずにすむように、作られているわけですが、より高度なゲームを作りたいとなったときにそういうコンピュータの仕組みそのものを避けることは出来ないと思うので、結果将来的には役立つと思いますけどね。

例えば"Destroy"というUnityのメソッドはゲームオブジェクトをシーンから完全消去する、という処理を『破壊する』という言葉で抽象化してくれています。

 

 

要は隠されているだけで、どんな言語、APIであってもその背後ではアセンブリC言語並みのめんどくさい部分がちゃんと存在している、ということのようです。 

そこらへんに興味のある方はぜひ詳しくは、このサイトを見るとなぜアセンブリからやるべきか?ということの謎がわかると思います。

  

サイトにお邪魔しよう!

こちらのサイト、HTML丸出しなのですこし読みにくいかも・・・。

でも読みやすく出来る、そうiPhoneならね。

 

f:id:miur-us:20170126165336j:plain

これが実際のページ。パソコンだとさらに横に広がるので見にくい。

 

f:id:miur-us:20170126165458j:plain

iOSのリーダー機能をオンにすると読みやすい!

 

iOSのリーダー機能は便利ですね。

これを使えば古いHTMLサイトも快適!

 

 

このサイトはC言語の解説のためにまずアセンブリの基本的な所を解説する、という体裁をとっています。

なぜならC言語高級言語とされるも、実際にはOS作成のための言語でもあるので、ハードを直接操作できるような部分があるからです。

Cの中にアセンブリを書くことも出来ますし、要は低級言語的な性質も持っているから、ということなようです。

 

そしてCの中で難関とされるポインタも低級な部分、つまり“メモリ”そのものに関することなのです。

普通の高級言語にも実はポインタに該当する部分があるのだけれど、抽象化されているので普通はプログラマが目にすることはない。

しかしC言語では丸出しになってしまっているわけです。

つまりハードに近い、低級な部分に関する知識がないとポインタは理解しにくい、ということなのだと思います。

なのでアセンブリの視点からC言語を説明する、という方法を採用した、とのことです。詳しくはサイトでどうぞ。

  

アセンブリから』の真意とは?

なのでアセンブリからやった方がいい、という言葉の真意は、

・Cをきっちり理解できれば、いろんな言語もできるようになるよね。
C言語をよく理解するにはアセンブリを学んだ方がいいよ!
・だからアセンブリから勉強しよう!

ということなのではないか?と思いました。

 

 とはいいつつも完全に理解するのは難しいと思うので、だからこそこういうサイトで軽く読んでおく位でいいんじゃないかなと思いますけどね。

というわけでそろそろゲームつくるぞ!っと。