LLVMを基盤とするGoコンパイラ。マイクロコントローラー、WebAssembly(WASM/WASI)、コマンドラインツール向けにビルドできます。
xgo-dev/llgo
LLVMを基盤とするGoコンパイラ。GoからCライブラリを直接呼び出し、Pythonライブラリもインポートできます。
- スター
- 845
- フォーク
- 53
- 未解決の Issue
- 197
- 最終コミット
- 2 時間前
これは何?
LLGoはLLVMを基盤とするGoコンパイラで、C/C++、Pythonなど、C互換インターフェースを公開する言語を含むC ABIエコシステムとの連携を目的としています。ソースコードレベルでGoと互換性があり、XGoプロジェクトのサブプロジェクトです。
cgoに頼る代わりに、LLGoはgo:linknameを使ってGoの宣言をCシンボルに直接バインドするため、Cへの呼び出しはGoとCの間のスタック切り替えやスケジューラー遷移を介さず、ネイティブ呼び出しとしてコンパイルされます。SQLite、zlib、libuv、OpenSSL、raylibなど多くのCライブラリや、llpygツールを介したNumPy、PyTorchなどのPythonパッケージ用バインディングが付属します。ランタイムでは、ネイティブのgoroutineをOSスレッドに割り当て、デフォルトでBDWGCの保守的ガベージコレクターを使用します。
コンパイラはLinux、macOS、Windowsをネイティブにサポートし、WebAssemblyと組み込み向けターゲットにも対応しています。ビルドとプログラムの実行にはLLVM 22、Clang 22、LLDが必要です。
主な機能
- 01cgoのオーバーヘッドなしに、go:linknameを介してC関数を直接呼び出せます。
- 02生成されたバインディングを介して、NumPyやPyTorchなどのPythonライブラリをインポートできます。
- 03Go 1.20以降と互換性のあるGoソースをコンパイルでき、cgoもサポートします。
- 04C/C++標準ライブラリのバインディングと、よく使われる多数のCライブラリ向けバインディングを提供します。
- 05Linux、macOS、Windows、WebAssembly、組み込みボードをターゲットにできます。
ユースケース
- GoコードからSQLiteやraylibなどの既存のCライブラリを呼び出す。
- GoプログラムでPythonの数値計算・データサイエンス系ライブラリを使う。
- WebAssemblyや組み込みマイコンボード向けにGoプログラムをビルドする。
- Cエコシステムとの相互運用を目的に、LLVMを通じたGoのコンパイルを試す。
クイックスタート
- 1
README の「How to install」セクションに従って llgo をインストールします
- 2
_demo/c/hello などのデモを、そのディレクトリから実行します
llgo run .
使う前に知っておきたいこと
- WebAssembly や組み込みなどのほかのターゲットでは、すべての OS サービスやランタイムの動作が利用できるとは限りません。
- pandas や PyTorch などのサードパーティ製 Python ライブラリは、別途インストールする必要があります。
- C および C++ のバインディングは手作業で保守されているため、対応ライブラリは限られています。
- 昇格されたメソッドのラッパーを介した C の可変長引数呼び出しの転送は、ホスト環境のネイティブターゲットでのみサポートされています。
トピック
よくある質問
- llgo とは?
- LLVMを基盤とするGoコンパイラ。GoからCライブラリを直接呼び出し、Pythonライブラリもインポートできます。 LLGoはLLVMを基盤とするGoコンパイラで、C/C++、Pythonなど、C互換インターフェースを公開する言語を含むC ABIエコシステムとの連携を目的としています。ソースコードレベルでGoと互換性があり、XGoプロジェクトのサブプロジェクトです。
- llgo は無料で使えますか?ライセンスは?
- llgo は Apache-2.0 ライセンスのオープンソースです。商用製品で使う前にライセンス条件を確認してください。
- llgo は今もメンテナンスされていますか?
- 活発にメンテナンス中。llgo の最終コミットは 2026年10月22日 です。
- llgo は何に使えますか?
- GoコードからSQLiteやraylibなどの既存のCライブラリを呼び出す。 GoプログラムでPythonの数値計算・データサイエンス系ライブラリを使う。 WebAssemblyや組み込みマイコンボード向けにGoプログラムをビルドする。 Cエコシステムとの相互運用を目的に、LLVMを通じたGoのコンパイルを試す。
- llgo のインストール方法は?
- README の「How to install」セクションに従って llgo をインストールします _demo/c/hello などのデモを、そのディレクトリから実行します: llgo run .
- llgo はどこで入手できますか?
- ソースコードとインストール手順は GitHub にあります:https://github.com/xgo-dev/llgo
概要はプロジェクトの README をもとに AI が生成しています。GitHub の数値は毎日更新されます。
関連プロジェクト
C/C++コードをWebAssemblyに変換し、ブラウザーやNode.jsなどのWasmランタイムで実行できるコンパイラツールチェーン。
LLVMコア、Clang C/C++フロントエンド、libc++、LLDリンカーなどを含む、モジュール式のコンパイラおよびツールチェーン技術群。
JetBrainsがマルチプラットフォーム開発向けに開発するKotlin言語と、そのコンパイラ、標準ライブラリ、ビルドツール。
型付きTypeScriptのサブセットをWebAssemblyモジュールに変換する、TypeScript風の言語とコンパイラ。