コンパイラ言語RustとGoのまとめ

2022年12月26日
 
2022年12月28日

みなさんこんにちは。ゆーろんです。

今回は最新のWeb系言語として注目されているRustとGoに関してまとめました。

Go(Golang)とは

GoことGo言語は2009年にGoogleのエンジニアによって設計された静的型付けのコンパイラ言語です。
C言語の特徴であるコンパイラ言語、高速処理、メモリ安全、GCなどの特徴を引き継いでいます。また、言語の特徴としてはWebアプリ開発やIoTの開発に向いています。

Goはシンプルな構文構造なため可読性が高いです。これは開発元のGoogleがコードの複雑化や属人性のあるコードを問題としていたためにそれを解決するための設計となったためです。

Rustとは

Rustはメモリ安全性、安全な並行性を目指して設計されたマルチパラダイムプログラミング言語です。
Rust は静的型付け、式ベースであるため、手続き型と関数型プログラミングの両方を実装することが可能です。

Rustは非常に高速でメモリ効率が高く、ランタイムやGCがないためパフォーマンス重視のサービスを実装可能です。組込み機器上で実行したり他の言語との調和も比較的容易です。

GC(ガベージコレクション)とは

実行中のプログラムが占有していたメモリのうち不要になったものを自動的に解放し、空き領域として再利用できるようにするもの。
これにより、確保された領域への参照が失われ再利用不可能になってしまう現象(メモリリーク)や、領域の二重解放、参照の無効化などを防止することが可能。

なぜGoとRustが注目されているのか

GoやRustは共通して「安全性・スケーリング性・生産性」が他のWeb系のバックエンド他言語よりも高いため、世界中で注目されています。

またこの2つの言語は、パフォーマンスの特性(GCの有無など)や学習コスト、順応性、メモリ制御(Rustの方が得意)が相違点としてあるので、開発するプロダクトに求める特性や開発チームメンバーのバックボーンやスキルを吟味して、選択する必要があるようです。(一般的にRustは学習コストが高いと言われます)

Graph

Goとマイクロサービスアーキテクチャ

マイクロサービスは「個別に開発された小さなサービスを組み合わせて、1つのサービスを提供する」というアプリ開発の設計哲学であり、これにアーキテクチャが付くと「小さいサービスを組み合わせたアーキテクチャ」と言えます。
これまでに作られたアプリケーションの多くはモノリシック(一枚岩)な構造であり、急速に変化するITを用いたテクノロジー/文化的需要に追いつくことが大変でした。これを解決するためのメソッドとしてこのマイクロサービスアーキテクチャが注目されています。

Goはマイクロサービスアーキテクチャと非常に相性がいいため、ここ2,3年かなり注目されており、日本のモダンなWeb系企業がGo言語を採択するケースも増えてきています。
実際にマイクロサービスを採用している日本の企業さんには、「ZOZOTOWN」「メルカリ」などがあります。

参考記事(外部リンク)

OGPサムネイル

ZOZOTOWNのGo言語におけるマイクロサービス開発の共通規約を守るための取り組み - ZOZO TECH BLOG

はじめに こんにちは。ECプラットフォーム部の北原です。普段はZOZOTOWNのバックエンドの開発、運用に携わっており、現在は会員機能を司るマイクロサービスの開発を進めています。 今回はZOZOTOWNのGo言語におけるマイクロサービス開発

企業がRustを採用するケース

Rustは「メモリの使用量」を気にするサービスの構築に向いていると言えます。特に多くのユーザ(クライアント)が使用するメディア処理(画像生成など)に向いているかもしれません。しかしながら学習コストの問題とGoとのポジションの被りがあるため日本の場合はGoの方を採択するケースが多いことが実情のようです。(海外は米国を中心にRustも需要が大きい)

参考記事(外部リンク)


OGPサムネイル

GMOペパボが画像処理に「Rust」採用、なぜ「Go」ではダメだったのか

 システム開発言語として注目を集める「Rust」。GMOペパボは画像処理にRustを採用した。なぜRustの採用に踏み切ったのか。またどのような効果を得られたのか。取材を基に明らかにする。

まとめ

GoやRustに関してまとめてみましたが、これによってGoやRustの大まかな仕様や社会的ニーズへこたえる可能性の視野を知ることができたと思います。基本はGo採用で事情があればRustといった感じとなると思います。
ここまでご覧くださり、ありがとうございました。

よろしければシェアしてくださいね!
タグ:

関連記事