Repolode
xgo-dev

xgo-dev/llgo

Компилятор Go на базе LLVM: позволяет Go-коду напрямую вызывать библиотеки C и импортировать библиотеки Python.

Звёзды
845
Форки
53
Открытые issues
197
Последний коммит
3 часа назад

Что это?

LLGo — компилятор Go на базе LLVM, предназначенный для интеграции Go с экосистемой C ABI, включая C/C++, Python и другие языки, поддерживающие совместимые с C интерфейсы. Он совместим с Go на уровне исходного кода и является подпроектом XGo.

Вместо cgo LLGo связывает объявления Go напрямую с символами C с помощью go:linkname, поэтому вызовы C компилируются в нативные вызовы без перехода между стеками Go и C или переключения планировщика. В комплект входят биндинги для множества библиотек C, например SQLite, zlib, libuv, OpenSSL и raylib, а также для таких пакетов Python, как NumPy и PyTorch, — с помощью инструментария llpyg. Среда выполнения по умолчанию использует нативные горутины, сопоставленные с потоками ОС, и консервативный сборщик мусора BDWGC.

Компилятор нативно поддерживает Linux, macOS и Windows, а также WebAssembly и встраиваемые платформы. Для сборки и запуска программ требуются LLVM 22, Clang 22 и LLD.

Ключевые возможности

  • 01Напрямую вызывает функции C через go:linkname без накладных расходов cgo.
  • 02Импортирует библиотеки Python, такие как NumPy и PyTorch, с помощью сгенерированных биндингов.
  • 03Компилирует исходный код, совместимый с Go 1.20+, и поддерживает cgo.
  • 04Предоставляет биндинги стандартной библиотеки C/C++ и многих распространённых библиотек C.
  • 05Поддерживает нативные Linux, macOS и Windows, WebAssembly и встраиваемые платы.

Сценарии использования

  • Вызов существующих библиотек C, например SQLite или raylib, из кода Go.
  • Использование численных библиотек Python и библиотек для анализа данных в программах на Go.
  • Сборка программ на Go для WebAssembly или встраиваемых плат с микроконтроллерами.
  • Эксперименты с компиляцией Go через LLVM для взаимодействия с экосистемой C.

Быстрый старт

  1. 1

    Установите llgo, следуя разделу How to install в README

  2. 2

    Запустите демо, например _demo/c/hello, из соответствующего каталога

    llgo run .

Что важно знать

  • Другие целевые платформы, например WebAssembly и встроенные системы, могут не предоставлять все службы ОС и не поддерживать все варианты поведения среды выполнения.
  • Сторонние библиотеки Python, такие как pandas и PyTorch, необходимо устанавливать отдельно.
  • Привязки C и C++ поддерживаются вручную, поэтому набор поддерживаемых библиотек ограничен.
  • Перенаправление вариативных вызовов C через обёртки повышенных методов поддерживается только на нативных целевых платформах с хостовой ОС.

Темы

Частые вопросы

Что такое llgo?
Компилятор Go на базе LLVM: позволяет Go-коду напрямую вызывать библиотеки C и импортировать библиотеки Python. LLGo — компилятор Go на базе LLVM, предназначенный для интеграции Go с экосистемой C ABI, включая C/C++, Python и другие языки, поддерживающие совместимые с C интерфейсы. Он совместим с Go на уровне исходного кода и является подпроектом XGo.
llgo можно использовать бесплатно? Какая у него лицензия?
llgo распространяется с открытым исходным кодом под лицензией Apache-2.0. Перед использованием в коммерческих продуктах проверьте условия лицензии.
llgo всё ещё поддерживается?
Активно поддерживается. Последний коммит в llgo — 22 окт. 2026 г..
Для чего можно использовать llgo?
Вызов существующих библиотек C, например SQLite или raylib, из кода Go. Использование численных библиотек Python и библиотек для анализа данных в программах на Go. Сборка программ на Go для WebAssembly или встраиваемых плат с микроконтроллерами. Эксперименты с компиляцией Go через LLVM для взаимодействия с экосистемой C.
Как установить llgo?
Установите llgo, следуя разделу How to install в README Запустите демо, например _demo/c/hello, из соответствующего каталога: llgo run .
Где скачать llgo?
Исходный код и инструкции по установке — на GitHub: https://github.com/xgo-dev/llgo

Описание создано ИИ на основе README проекта. Статистика GitHub обновляется ежедневно.

Похожие проекты