見出し画像

Go っていう名前のプログラミング言語

さて、いろいろなプログラミング言語を紹介してきましたが、今回で

わたしのプログラミング言語歴

に書いた言語は一段落です。最後になった Go ですが、これはPythonにも慣れた頃に、やはりC言語のようなパフォーマンスで、できれば並列処理が得意な処理系を探している時に見つけました。Googleのエンジニアが設計した言語でC言語のようなシンプルさを持ち、メモリを安全に使う機構とガベージコレクションを持ち、言語自身が並行処理の機能を持っています。反面、クラスや多重定義、例外処理といった機能はありません。

Go (プログラミング言語)

言語が持っている仕様が複雑でないために、処理系自身も複雑さが抑えられ、パフォーマンスの良いコードが生成されやすくなります。そして覚えるのも楽ちんです。標準化されたライブラリが充実しており、ネットワークプログラミングも容易です。

Build simple, secure, scalable systems with Go

Goで特徴的なのがGoルーチンと呼ばれる並行処理機構で go に続けて関数を呼び出せば、その関数の終了を待つことなく次の行が実行されます。これが言語名の由来でもあるのでしょう。C言語のスレッドに似ていますが、C言語のようにすべてをOSに任せてしまうのではなく、言語独自の管理機構を持っているために適切なスケジューリングであるとかリソース管理を行ってくれるので使いやすくなっています。この機能が強力であるが故に多くの処理を並行に動作させてもパフォーマンスの低下が起きにくく規模が大きくなってもスケールできるわけです。

【翻訳】goroutine の仕組み

そしてGoルーチンとセットになるのがチャネルです。並列処理では並列に動作するが故に呼び出した関数から結果を得る方法が問題になるのですが、Goではこれをチャネルという機構でやり取りをします。

ゴールーチンとチャネル

並列処理は難しいと思われていますが、並列にすること自身はさほど難しいものではなく、難しくなりやすいのは並列に動作している処理間でのやりとりと、並列に利用されるリソース(変数)の保護です。Goはこれをシンプルにまとめたので並行処理を覚えるのにはオススメです。

ところでプログラミング言語で、よく議論が白熱するインデントや空行の使い方です。Pythonではインデントが言語仕様に取り込まれましたが、Goでは処理系自身が整形機能を持っています。そういえばC言語にもGNU indentを始めいろいろな整形ツールがありますが、言語仕様とは無関係なためにいろいろな流儀があるのですが、処理系自身が整形機能を持つために標準化されているのはわかりやすいです。

Formatting

GoはオープンソースでWEBサイトからダウンロードして直ぐに使うことが出来ますが、新しい言語らしくWEB上で説明を読みつつ動作させることができるサービスが用意されており、まずはここから始めるのが基本です。

A tour of the Go

処理系自身の勉強をしたいのであれば、Githubでソースを読みましょう。

The Go Programming Language

Goは多くのプラットフォームで動作するように進化を続けておりTiny Goと呼ばれるLLVMを使ったコンパイラがArduino Unoやmicro.bit、そしてWeb Assembly を使用する最新のブラウザでも動作します。

TinyGo

しかし、やはり名前は大切です。不幸にしてGoというとても簡単な名前を持つために、C言語と同じように検索するのには向きません。そこで golang と表記していることも多いす。Goをうっかり自動翻訳をすると「碁」と翻訳され何を言っているのかわからなくなることがあるのですが、そこはご愛嬌ということで。

【プログラミング入門】これからはじめるGo(Go言語/golang)- tenntenn Conference 2022

Goはまだ大きな仕様変更を行ったことはないのですが、細かなバージョンアップは繰り返されており、今はだいたい1.20くらいのバージョンになっています。他の言語と同じようなつもりでいると、時々「あれ?」これは無いの?これはどうするのという場面に遭遇することもありますが、複雑になりがちな仕様をうまく回避してあるので、まあ慣れるしか無いですね。使ったことは無いのですがC言語からの変換ツールもあるようなので、小規模なシステムであっても、ある程度の規模になってきたらGoへの乗り換えも考える価値はありそうです。C言語でスレッドをゴチョゴチョするよりも却って速くなることするらあります。

さて主だった言語は紹介してしまった訳ですが、あまり使ったことは無いけど特徴的な言語であるとか、既に紹介した言語の深掘りでもしていくことにしましょうか。ということでボチボチと続けていこうと思っています。

ヘッダ画像はGo言語のマスコットであるgopher。以下にあるものを使いました。
https://commons.wikimedia.org/wiki/File:Golang.png
Renée French (http://reneefrench.blogspot.com) - http://golang.org/doc/gopher/ Recreated from cc-by 3.0 images gopherbw.png + bumper.png (combined like the logo of http://code.google.com/p/go/). File:Go_gopher_mascot_bw.png. Original files by Renee French. (reneefrench.blogspot.com), CC 表示-継承 3.0, https://commons.wikimedia.org/w/index.php?curid=22600783による

#プログラミング言語 #Go #golang #goroutine #TinyGo  

いいなと思ったら応援しよう!