T:12238 Y:16164 Total:01270560 Online:222

    Flashの組み込みプログラミング講座

「AmebaKING」アメブロ売上倍増&アクセスアップの多機能ツール

2017/8/5

Go言語のCGOは、C言語の資産を受け継ぐ機能 カテゴリー 徒然ぶろぐ

【カーニハンとリッチー】の意思に触れる♫
 
Go言語をできたばかりの使えないプログラミング言語だという人も居るだろうが、
同じことをC言語には言わないだろう。古いとは思うかもしれないが、
今なお、組み込みや、速度を必要とするシステム系の開発には必要とされているし、
 
なにより、書店等のプログラミング書籍のコーナーに行けば、今なお現役であることが判る。書籍の取り揃えは、そのプログラミング言語の需要に比例しているから。
 
それとGo言語となんの関係が?

そうおもう若いエンジニアも多いかもしれない。
 
Go言語を開発したのは、GoogleだからGoなのねと思っている人も多いかもしれないが、実は、Go言語の開発の要になっている人物で重要な人がもう一人いる。

それは、ブライアン・カーニハン その人。
かれは、そうC言語の開発者の一人としてあまりにも有名だから、今のひとでも知っていると思う。
 
それにアドバイザーにはリッチーも、名を連ねているから、Go言語は面白いことになってきた。

このC言語の開発者たちがなぜGo言語にこれほど熱心なのかは、想像に優しい。
 
つまり、長年のCの普及を目にしてきた彼らは、C言語の欠点を一から見直す新言語を作りたかったのだと思う。
 
それがGoなのかもしれない。なのかもしれないというのは、直にそう聞いたわけではないので想像上の話の域をでないが、Go言語に隠された機能を知ればそう思わざるをえない。
 
Go言語の文法仕様などは、C言語に比べるとかなり厳しく、そのかわりシンプル化されている。
 
また、Goに至るまでのオブジェクト指向の欠点や利点も取り込んでいる。(※1)
 
Go言語にはオブジェクト指向化よりも、高速性と、GNUーCであまり注目されなかった並列処理が盛り込まれている。
 
これは強力かもしれないが、それだけではなく、GNUの特徴である、マルチプラットフォームで同じ仕様、
 
またCPUの違いを乗り越える、クロスコンパイルも可能になっている。
このクロスコンパイルの利点は、今後Googkeがアンドロイドなどの開発で、Go言語を中心に据え置く可能性もあるのではないかと想像させる。
 
だが、本当に凄いのはそれだけじゃない。
素晴らしいのは、C言語の資産をそのまま利用できる可能性にある。

これはCGOという隠し?機能だ。
Cのソースも、Cのライブラリも、コンパイルして利用できる。
 
つまり、Go言語は、生まれたてにして、膨大なC言語のアルゴリズム資産を利用できるように
すでになっている。

オブジェクト指向言語の、ライブラリや、フレームワークのようなメンテナンス性の薄いものではなく
ソースや、アルゴリズムをそのままGO言語の中に取り込むことが可能になっている。

これは実体験するのが一番速い。
以下にテストソースを示す。ソース名は、仮にtest.go としよう。
ーーー
package main

/*
#include
void hello()
{
printf("HelloWorld!!¥n");
}

int wata()
{
return 10;
}
*/
import "C"
import "fmt"
import "unsafe"

func main(){
var hello int
sz := C.wata()
C.hello()
hello = int(sz)
fmt.Println( unsafe.Sizeof(hello) )
}
ーーー
コンパイル方法は、Go build test.go でいい。
コメントアウトされた部分のC言語の関数を利用できる機能をテストした。
 
興味のある方は是非やってみることをオススメしたい。

※1)Go言語にはクラスは無いが、インターフェースなどのオブジェクト指向の利点は利用できるようになっている。

― posted by i2lab at 10:04 am

この記事に対するコメントは締め切られています





Top! Top!
blog seo tool : track word blog SEO tool
[プレスブログ]価値あるブログに掲載料をお支払いします。