numba/llvmlite

A lightweight LLVM python binding for writing JIT compilers

何を解決するか

llvmlite は、LLVM 用の軽量で安定性が高く、メモリ安全な Python バインディングを提供し、特に JIT コンパイラの構築を目的としています。完全な LLVM C++ API バインディングの複雑さや不安定さを避け、異なる LLVM バージョン間でのメンテナンスが困難な問題を解消します。

動作方法

このプロジェクトは、LLVM とのインターフェースを3層構造で実現しています:

  1. C ラッパー:C API に存在しない特定の LLVM C++ API 部分をラップする小さなラッパー。
  2. ctypes ラッパーctypes を使用して LLVM C API をラップする Python ラッパー。Python C-extensions の必要性を回避します。
  3. 純粋な Python IR ビルダー:LLVM 中間表現(IR)ビルダーのサブセットを Python で実装。頻繁に変更される C++ API から IR ビルディングプロセスを分離します。

対象ユーザー

Python 環境内で LLVM の IR ビルダー、最適化ツール、JIT コンパイラ API を使用する JIT コンパイラやソフトウェアを開発する開発者。

特徴

  • 安定性:安定した LLVM C API を使用し、LLVM バージョンのアップグレード時にメンテナンスコストを低く抑えます。
  • パフォーマンス:llvmpy などの従来のバインディングよりも単純なアーキテクチャで、高速です。
  • メモリ管理:C++ 風のエラーを防ぐために健全なメモリ管理を実装しています。
  • インストールの容易さ:ctypes でアクセス可能な単純な DLL として提供されるため、インストール時に複雑な C++11 対応やコンパイラ要件が不要です。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト