2019年1月8日火曜日

読書環境

追記: 改訂2版発売

今日読んだ本、みんなのGo言語 (松木雅幸(著) (@songmu)、mattn(著) (@mattn_jp)、藤原俊一郎(著) (@fujiwara)、中島大一(著) (@deeeet)、牧 大輔(著) (@lestrrat)、鈴木健太(著) (@suzu_v)、稲葉貴洋(イラスト)、技術評論社(@gihyo_hansoku)の感想。

普段はPythonを使うことが多い中、新しめの言語で、コンパイラーがある言語も学びたいなぁと思って、2019年からちゃんとGoを学び始めることに。他にもSwift、Rust等を候補に挙げて検討したけどGoが目的に合ってる感じがしたから。

その目的はというと、まずWindowsでも使えること。ということで、Apple(macOS、iOS、tvOS、watchOS)とLinux(Ubuntu等)のみ対応(工夫すればWindowsでも書いたり動かしたりできる(?)みたいだけど、正式に対応してくれてる方が嬉しい)ということでSwiftは候補から外すことに。次に、C/C++言語と比べて、CPPではなくC言語に近い感じな方がいいなぁということで、Rustより少しGoに気持ちが傾く。さらに、普段使っているPythonっぽい方がさらにいいかなぁということで、RustではなくGo言語を選択。

ただ、コンパイラーがあってコンパイル可能な言語なら、新しくは無いけどC言語でもよくて、21st Century C: C Tips from the New Schoolの67ページの、

Our language is almost as fast as C, but is easier to write…C is definitely as fast as C…C is easier to write…than…past
というのがお気に入りだから、新しくGo言語を学習してまで使えるようにならなくてもいいかなぁとも考えたけど、21世紀らしいC言語のコードをWindowsで書くためにはWindowsでの環境のセットアップが大変(Visual StudioではC11(C99は部分的に対応?)とか対応してないし、今後もあまり対応しなさそう(?)。ということでMSYS2でGNU、GCCの開発環境をセットアップしなければならない。そうなるとせっかくWindowsなのになぁと思ってしまう。)だし、ガベージコレクションがあるというのはやっぱり魅力的なので、Goを学習してみることに。

ということで、プログラミング言語GoでGoの学習をはじめたものの、教科書的な本だし、もう少し気軽な感じのGo言語の本も1冊読んでおきたいなぁということで本書を入手。

内容、難度的にはGoに入門したばかりの時点で読む本では無いかもしれないけど、断片的ではあるけどGoのコードを沢山読むことができて慣れることができたし、実践的なことも知ることができたので、これからプログラミング言語GoでGo言語をただ学んでいくのではな、どう実践的なことに役立つかを考えながら、把握しながら学んでいくことができそうなので、より楽しく学習を進めることができそう。あと、具体的なこととしては、クロスプラットフォームなプログラムを書くときに気をつけなければならないこと(第2章)、reflectというのでPerl(やRuby、Python)のように黒魔術できなこともできることを知ることができてよかった。Goなら何もしなくても普通にクロスプラットフォームなプログラムを書ける、シンプルな仕様なので黒魔術的なことはできないという思い込みがあったので。

あと、内容と関係ないかもしれないけど、表紙がカラフルだったり、Gopherʕ◔ϖ◔ʔがカワイイ。(これは好みによるかも。)ということで、しばらくは表紙が見えるように本棚に飾っておくことに。(本ブログ記事のタイトルに気軽に読めるあるのは、Gopherʕ◔ϖ◔ʔがカワイイからということだったり。)

ただ一つ気になった点としては、最初(はじめに)にいきなり記述があった、

Goは軽量言語とCなどのもっと低レイヤの言語の間にある
(軽量言語 = Python) という部分。もともとコンパイラのある言語を新たに学習しようと思ったのは、理論上は機械語に変換してくれるコンパイラーのある言語、実行時に機械語にその都度変換してくれるJIT(Just-in-time コンパイラー)のある言語、一つ一つ解釈していくインタープリターのある言語の順で速度は速いと考えたからで、GoとCを同等に考えてたから「えっ」ってなった。

なのでこの記述の意味が、Goはコンパイルの速度に力を入れてて、プログラムの実行速度は考慮していないという意味なのか、

あるいはプログラミング作法(Goの設計者の1人、Rob Pikeさん著)のページ227、第7章(性能)の
最適化の第一の原則は最適化するなだ。
な作法でコンパイラも開発が進められていて、C言語はGoより歴史が長いので、その分コンパイラも成熟されててかなり最適化してくれるからGoより速くて、現段階では間にあるだけで、いずれはGoのコンパイラもどんどん最適化するようになって、C言語と理論上も実用上も速度は変わらなく同じになるということなのか、あるいは何か他の理由なのか、気になるところ。2番目の意味あったら嬉しい。

ということで、まずはプログラミング言語Goをしっかり読み進めてGoを身につけつつ、本書のことを実際に役立てることが出来るようになりたいなぁと思った今日この頃。

0 コメント:

コメントを投稿