Go
rust
golng

rustとgolangに類似する特徴

はじめに

Golangは登場したときから注目していました。この一年くらいで仕事のプロジェクトでも使っています。
rustはまだ勉強し始めたばかり。
この記事は一種のポエムです。

rustとgolangに類似な特徴

rustとgolangはメモリ管理に関して異なるアプローチをとっています。違う言語なので、相違点があるのは当然のことですが、不思議といくつかの類似点があるのが興味深いです。
別々の道をたどって結局同じ結論に達したのか、どちらかが他方の影響を受けたのかは、勉強不足なのでわかりません。

型を後ろに書く

構文解析上、型を後ろに書くのはいまや常識らしいです。

if文の構文

  if cond {
    do_something
  }

cond を()でくくる必要はない。
{}は必須。
Cではif文の中身が単文のときは{}を省略可能でした。Linuxカーネルのコード規約では単文のときには{}をつけてはいけないことになっています。
でも私は常に{}をつけるのを習慣にしていました。{}必須は歓迎。

また、rustもgolangも型に厳しくてcondはbooleanでなくてはなりません。Cのように整数型から暗黙の変換はしてくれません。

structのメンバ参照

Cの場合はstructのメンバ参照のときにstructの実体かポインタかによって '.' と '->' を使い分ける必要がありました。
golangとrustではstructへの参照のデリファレンスは暗黙でやってくれるので '.' で統一されています。

slice

配列(またはベクター)を間接的に使用するものとしてslice がある。
golangではsliceは使い勝手がよいです。rustでも同じ結論になっているのが興味深いです。

例外が無い

C++を使っているプロジェクトでも、プロジェクト独自のコード規約で例外の使用を禁止しているところがありました。
やはり例外はよくないというのが共有認識のようです。

class が無い

structにメソッドを生やすことはできる。

無効な変数として '_' (アンダースコア) を使用する

いまのところは以上

rustはまだ勉強中なので、気がついたら追記するかも。