マイクロソフトがG#を発表:.NETのためのGo風言語

21CTOリード:マイクロソフトの.NETエコシステムとGo言語の互換性を実現する言語、G#。

マイクロソフトが新しいプログラミング言語「G#」を発表した。この言語の構造は.NETとGo言語のハイブリッドであり、そのアーキテクチャ設計により非常に柔軟なツールとなっている。

マイクロソフトは.NETをオープンソース化しており、これによりプラットフォームの開発スピードが加速しただけでなく、.NETランタイムとコンパイラを基盤として新しい言語や機能を構築することが可能になった。同時に、Visual Studio Codeの拡張性により、開発者はこれらの新しいプラットフォームが提供するツールを容易に利用できるようになっている。

.NETプラットフォーム上で注目を集める新プロジェクトのひとつが、Go風の言語「G#」だ。G#の対象領域はシステムプログラミングとモバイルアプリケーション開発であり、小型で安全、かつ他の.NETアプリケーションから利用可能なライブラリを提供することを目指している。

G#言語のロゴと概要

G#はGo、Kotlin、Swiftの経験を取り入れ、NuGetやその他の類似のコードリポジトリサービスを活用して、成熟した.NETプラットフォーム上でコードを構築する。これにより、.NETアセンブリやライブラリとの互換性を実現している。

G#の開発はGitHubを基盤として行われており、チームのリリースサイクルは非常に速い。

GitHub: https://github.com/GregoriBrunoFelicio/G-Sharp

G#のコード例

G#入門

G#の始め方は非常に簡単だ。

必要なのは、サポートされている.NETバージョンと、対象OSに対応するSDKである。G#が生成するコードは.NET 8から.NET 10に対応しているが、.NET 10の使用が推奨されている。G#のSDKとテンプレートはNuGetから入手可能で、.NET CLIを通じてG#をインストールして実行できることが保証されている。

最も手っ取り早い始め方は、G#テンプレートをインストールし、それらを使ってコンソールアプリケーションを作成することだ。その後、好みの開発ツールでアプリケーションを開き、拡張を始められる。基本アプリケーションの構造は非常にシンプルで、プロジェクトファイル、プログラム用の.gsファイル、パッケージとライブラリを管理するためのNuGet設定で構成されている。ローカルSDKもサポートしており、ソースコードからG#をビルドする場合に便利だ。

デフォルトのコンソールテンプレートのビルドと実行は高速で、ArmベースのWindows PCでは出力結果を得るまでにわずか4秒強しかかからない。これは大規模なアプリケーションのビルドとデバッグにおいて非常に有利だ。

基本的なコンソール実装に加えて、インストール済みのテンプレートにはさまざまな種類のアプリケーションやライブラリのオプションが用意されている。さらに、Visual Studio MarketplaceにはG#対応のVisual Studio Code拡張機能があり、ダウンロード可能だ。この拡張機能には対応する言語サーバーコンポーネントが含まれており、開発スピードを向上させる。ドキュメントにはコマンドラインインストールのオプションが用意されており、この拡張機能を簡単にインストールできる。必要なファイルを探し回る手間もなく、次回VS Codeを開いたときにすぐG#でのコーディングを始められる。

あるいは、.NET CLIのMSBuildを通じて呼び出すのではなく、G#言語自身のgscコンパイラを直接使用することもできる。特定の.NETバージョンを対象としたコードを出力する場合や、他の.NET言語から使用するためのアセンブリとしてコンパイルする場合に、この方法は非常に有用だ。この方法はインタープリタ型コードの使用を避け、プリコンパイル済みのバイナリを直接納品することができる。

G#言語の内部

G#言語自体は非常に直感的だ。コードはパッケージとして整理され、実行可能部分はfuncsとして定義される。

デフォルトでは、G#は.NETのSystem名前空間を使用するため、一般的な機能を実装するために異なる方法を学ぶ必要がなく、馴染みのある構造を直接使用できる。System名前空間のデフォルトインポートを望まない場合は、コンパイラ設定でインポートを無効にできる。

各関数は引数を受け取り、値を返すことができる。引数の型は引数リストで宣言される。引数リストの末尾に戻り値の型宣言を付けることで、期待されるデータが返されることを保証できる。ほとんどの型には長さ情報が含まれており、例えばint64などがある。もちろん、他の言語で一般的な型のエイリアスもいくつか用意されている。文字列型ではアライメントや書式設定情報を追加できる。関数に加えて、構造体やクラスを定義して変数を扱うこともできる。構造体は値を扱い、クラスは参照を扱う。同様に、データ構造体とクラスにより、変数をデータとして扱い、コピーや代入操作を行える。

G#の言語構造の大部分は馴染みやすいもので、特にGoのような言語に慣れている場合はなおさらだ。関数の引数を解析する際にnullチェックを行うif letのような興味深いショートカットも用意されている。if letとG#の例外処理メカニズムを組み合わせることで、より複雑なプログラムフローを管理できる。その他の機能として、for in mapを使用してコレクションを反復処理でき、実行前に配列の長さを確定することなく、関数内で任意の長さの配列を渡して使用できる。

分散システムでのG#の使用

G#は非同期プログラミングをサポートするように設計されており、これは分散アプリケーションの開発において極めて重要だ。

一般的なasyncとawait構造を使用し、ここでは非同期操作としてasync funcを使用する。

興味深いことに、G#では一連の非同期操作をひとつのスコープにまとめることができる。これにより、一連の操作を実行して失敗を管理しながら、成功した操作の結果をアプリケーションの他の場所で使用するために保持できる。

これにより、開発者は親操作と子操作を関連付け、親操作が常に子操作の後に返ることを保証できる。非同期シーケンスを使用してストリームを処理できるが、必要に応じてGo拡張パッケージを使用してGo風のチャネルをサポートすることもできる。

関連記事

分享網址
AINews·AI 新聞聚合平台
© 2026 AINews. All rights reserved.