2017/02/18

[勉]go (2)

休日だったので、goのことを少し調べることにした。
普通に調べるとたくさん出てきそうなので、組込み分野で使えるかどうかだけ見てみよう。

組み込み go - Google 検索

・・・検索キーワードが悪かったようだ。
「組み込み型」の方が色濃く出ている感じがする。

コンピュータ言語の仕様はともかくとして、内容のことを検索すると、好きな人は強く推すし、嫌いな人はかなりけなすので、なかなか状況が読み取りにくい。
大半の人は状況に合わせて使っていると思うので、そういう人はあまりそういう感想を書かないのだろう。
私も、使っている言語のことは書くけど、めったに使わない言語については良いも悪いも書かないので、同じようなものだ。


そもそも「組み込みで使える」とは何なのかを決めていなかったのが、よくなかった。
メモリ空間を自由に操作できる、かな?
となると、まずはポインタか。

そういえば、むかーし受けたセミナで「C言語は値渡ししかできません」という説明をされ、心の中で「ポインタでの参照渡しがあるやん!」と反論したことがあった。
でも、ポインタ渡しはアドレス値を渡すということなんですよ、と説明され、ああそうか、と納得した次第だ。
C++での参照渡しはそれっぽい気がするけど、結局ポインタでアドレスを渡しているのとあんまり変わらないだろうし、そもそも「何かを渡す」というのは、値を全部渡すか、値を指している場所を渡すかしかないと思うので、どういう言語もそんなに意味は変わらないと思うようになった。

 

と、昔話はここまでとしよう。

C++プログラマ向けGo講座 - golang.jp

>ポインタはありますが、ポインタの演算はありません

そうなのか。
場所を教えるのだから計算もできてよいやん、と思うけれども、計算ができてしまうと予期しない場所へのアクセスも許容することになるのだろう。
なんだかんだいって、Cで一番不具合が起きやすいのはメモリアクセスのところだろうから、そこに対策を打つのは自然ななりゆきだ。

それだったら、もうC#でいいんじゃないのか、という気もしなくはない。
C#にもgolangにも精通していないのでなんともいえんが、C#もアドレスが扱えるし、unsafeみたいな逃げ道もあったような気がする。

 

アドレスの扱いについて大きく見ると、アセンブラ/C/C++と、それ以外の言語、みたいな分かれ方になってしまうのだろうか。
というほど他の言語に詳しくないのだが、OSが管理するアドレスを自由勝手に扱える言語は、そんなに多くない気がする。

OSがメモリを管理しないのであれば、誰かが管理することになり、それが言語自体であっても不思議ではない。
もしGo言語が、スタンドアローン環境というか、誰も管理する人がいない状況でも動くというセットがあるのであれば、デバイスドライバのようなものも作ることができるのかもしれない。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。