Repolode
xgo-dev

xgo-dev/llgo

LLVMを基盤とするGoコンパイラ。GoからCライブラリを直接呼び出し、Pythonライブラリもインポートできます。

スター
845
フォーク
53
未解決の Issue
197
最終コミット
33 分前

これは何?

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. 1

    README の「How to install」セクションに従って llgo をインストールします

  2. 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 の数値は毎日更新されます。

関連プロジェクト