Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/t3tra-dev/lython
Python compiler toolchain that can be AOT compiled using LLVM as a foundation
https://github.com/t3tra-dev/lython
compiler llvm python
Last synced: 3 days ago
JSON representation
Python compiler toolchain that can be AOT compiled using LLVM as a foundation
- Host: GitHub
- URL: https://github.com/t3tra-dev/lython
- Owner: t3tra-dev
- Created: 2025-01-08T07:43:07.000Z (about 1 month ago)
- Default Branch: main
- Last Pushed: 2025-02-17T12:13:58.000Z (3 days ago)
- Last Synced: 2025-02-17T12:32:28.720Z (3 days ago)
- Topics: compiler, llvm, python
- Language: LLVM
- Homepage:
- Size: 265 KB
- Stars: 62
- Watchers: 2
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
> Please do not send pull requests to this repository.
# Lython - Python compiler toolchain based on LLVM
> [!TIP]
> Searching for **pyc**? You are in the right repo. **pyc** has been renamed to **Lython**.```
๐ Benchmark Results
โโโโโโโโโโโโโโโโโโณโโโโโโโโโโโโโโโโโโโโณโโโโโโโโโโโ
โ runtime โ time โ result โ
โกโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฉ
โ LLVM(O1) โ 15.71ms (x0.69) โ 9227465 โ
โ C(O1) โ 16.37ms (x0.72) โ 9227465 โ
โ LLVM(O3) โ 17.17ms (x0.76) โ 9227465 โ
โ C(O3) โ 17.30ms (x0.76) โ 9227465 โ
โ C(O2) โ 17.88ms (x0.79) โ 9227465 โ
โ LLVM(O2) โ 20.32ms (x0.90) โ 9227465 โ
โ Lython โ 22.68ms (x1.00) โ 9227465 โ
โ LLVM(O0) โ 23.15ms (x1.02) โ 9227465 โ
โ C(O0) โ 33.34ms (x1.47) โ 9227465 โ
โ Bun โ 54.52ms (x2.40) โ 9227465 โ
โ Deno โ 80.33ms (x3.54) โ 9227465 โ
โ Node.js โ 94.68ms (x4.17) โ 9227465 โ
โ Python โ 611.73ms (x26.97) โ 9227465 โ
โ Python(no GIL) โ 884.05ms (x38.97) โ 9227465 โ
โโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโ
```**Lython** ใฏใPython ใณใผใใ LLVM IR ใซๅคๆ (ใใฉใณในใใคใซ) ใใๆฉๆขฐ่ชใธใณใณใใคใซใใใใจใ็ฎๆใใๅฎ้จ็ใใญใธใงใฏใใงใใ
LLVM ใๅบ็คใซใใคใคใCPython ใจใฏ็ฐใชใๅฝขใง้็ๅไปใใฎใใใซๆฑใใชใใ Python ใฝใผในใ่งฃๆใใ`clang` ใชใฉใฎใใผใซใใงใผใณใงใใคใใฃใใใคใใชใ็ๆใใใใจใใดใผใซใจใใฆใใพใใ## Features
- **Python AST ใฎใใฉใใผใน**: Python ใฎๆฝ่ฑกๆงๆๆจใ่งฃๆใใฆ LLVM IR ใ็ๆ
- **ใใผใซใใงใผใณๆดป็จ**: ็ๆใใ IR ใใใใซ `clang` ใ `llc` ใชใฉใงใณใณใใคใซใใๅฎ่กใใกใคใซๅใ็ใ
- **ๅฎ้จ็ใช้็ๅ่งฃๆ**: Python ใซใใใฝใผในใณใผใ่งฃๆ้จๅใ็ฐกๆ็ใซ้็ๅใใงใใฏ้ขจใซๅฆ็
- **ใฉใณใฟใคใ (`runtime/`) ใฎ่ชๅๅฎ่ฃ **: ใกใขใช็ฎก็ (Boehm GC) ใ `print` ้ขๆฐใชใฉใๆไฝ้ C ่จ่ชใงๆไพ---
## Directory Structures
```text
โโโ .gitignore
โโโ .python-version # Python ใฎใใผใธใงใณๆๅฎ (3.12)
โโโ .vscode/ # VSCode ็จ่จญๅฎใใกใคใซ
โ โโโ settings.json
โ โโโ c_cpp_properties.json
โโโ bench.py # ใใณใใใผใฏ็จในใฏใชใใ
โโโ benchmark/ # ใใณใใใผใฏใงไฝฟ็จใใใณใผใ็พค (C/JS/LLVM IR/Pythonใชใฉ)
โ โโโ cfib.c
โ โโโ jsfib.js
โ โโโ llfib.ll
โ โโโ pyfib.py
โโโ helloworld.ll # ใตใณใใซใฎ "Hello, world!" LLVM IR
โโโ src # ใกใคใณใฝใผใน
โ โโโ lython
โ โ โโโ __init__.py
โ โ โโโ codegen
โ โ โ โโโ ir/ # LLVM IR ใๆง็ฏใใใใใฎใใซใใผ็ญ
โ โ โ โโโ visitors/ # ๅ็จฎ AST ใใผใใธใฎ Visitor ๅฎ่ฃ
โ โ โโโ compiler/ # ็ๆใใใ LLVM IR ใใใคใใชใซๅคๆใใใญใธใใฏ (ll2bin ใชใฉ)
โ โโโ lythonc
โ โโโ __main__.py # CLIใฎใจใณใใชใใคใณใ
โโโ pyproject.toml # Python ใใญใธใงใฏใ็ฎก็็จ (PEP 621)
โโโ runtime/ # C ใงๅฎ่ฃ ใใใฉใณใฟใคใ (Boehm GC)
โ โโโ builtin/
โ โโโ functions.c
โ โโโ functions.h
โ โโโ types.c
โ โโโ types.h
โโโ samples/ # ไป่จ่ชใใ็ๆใใIRใฎใตใณใใซ
โโโ Makefile # ใฉใณใฟใคใ ใฎใใซใ็จ
โโโ source.py # Python ใฎใตใณใใซใณใผใ
โโโ source.py.ll # source.py ใ LLVM IR ๅใใไพ
โโโ source.py.s # ใใใซใขใปใณใใชใพใง็ๆใใไพ
โโโ uv.lock # uv ใซใใไพๅญ้ขไฟใฎใญใใฏใใกใคใซ
```---
## ใคใณในใใผใซ
### ็ฐๅขๆง็ฏ
ใใฎใชใใธใใชใงใฏ [uv](https://docs.astral.sh/uv) ใจใใใใใฑใผใธ็ฎก็ใใผใซใไฝฟ็จใใฆใใพใใ
Python 3.12 ไปฅไธใๅฟ ่ฆใงใ (`.python-version` ใง 3.12 ใๆๅฎใใฆใใพใ)ใ1. **uv ใฎใคใณในใใผใซ**
- **Unix (Linux/macOS)**:
```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
```
- **Windows**:
```powershell
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
```
2. **ไพๅญ้ขไฟใฎๅๆ**
```bash
uv sync
```
ใใใซใใ `uv.lock` ใฎๅ ๅฎนใซๅพใใblack, isort, rich ใชใฉใใพใจใใฆใคใณในใใผใซใใพใใ
3. **ใณใณใใคใฉใใผใซใใงใผใณ**
- LLVM/Clang ใๅฟ ่ฆใงใใ`clang --version` ใ `llc --version` ใไฝฟ็จใงใใ็ถๆ ใซใใฆใใใพใใใใ
4. **ใฉใณใฟใคใ ใฎใใซใ**
- ใซใผใใใฃใฌใฏใใชใซใใ `Makefile` ใไฝฟใใ`runtime.o` ใ็ๆใใพใ:
```bash
make
```
- `make clean` ใงใญใฃใใทใฅใใใคใใชใๅ้คๅฏ่ฝใงใใ---
## ไฝฟ็จๆนๆณ
### 1. LLVM IR ใฎ็ๆ
```bash
python -m lythonc -emit-llvm
```
- ไพ:
```bash
python -m lythonc -emit-llvm source.py
```
ๅฎ่กๅพใ`source.py.ll` ใๅไธใใฃใฌใฏใใชใซ็ๆใใใพใใ### 2. ใใคใใชใธใฎใณใณใใคใซ
```bash
python -m lythonc -o
```
- ไพ:
```bash
python -m lythonc source.py -o main
```
ๅฎ่กๅพใ `main` ใใคใใชใ็ๆใใใพใใ---
## ใใณใใใผใฏ
`bench.py` ใไฝฟใใจใไปฅไธใฎใใใช่จ่ช/ใฉใณใฟใคใ /ใณใณใใคใซใใฟใผใณใงใใฃใใใใ (n=35) ใฎๅฎ่กๆ้ใๆฏ่ผใงใใพใ:
- Node.js / Bun / Deno (JavaScript)
- C (clang) with -O0, -O1, -O2, -O3
- LLVM IR (clang) with -O0, -O1, -O2, -O3
- **Lython**
- Python (CPython), Python(no GIL)#### ไฝฟใๆน
```bash
python bench.py
```- ในใฏใชใใๅ ใฎ `setup()` ้ขๆฐใงไบๅใซ C ใ LLVM IR ใฎใณใณใใคใซใ่กใใใใฎๅพใใใใๅฎ่กใใฆๅนณๅๅฎ่กๆ้ใๆธฌๅฎใใพใใ
- ็ตๆใฏใฟใผใใใซไธใซ่กจๅฝขๅผ๏ผ`rich`๏ผใงๅบๅใใใพใใ---
## ใฉใณใฟใคใ
`runtime/` ใใฃใฌใฏใใช้ ไธใซ C่จ่ชใงๅฎ่ฃ ใใๆๅฐ้ใฎใฉใณใฟใคใ ๏ผBoehm GC ไฝฟ็จ๏ผใ็ฝฎใใใฆใใพใใ
- `builtin/functions.c / .h`
- `PyInt_FromI32`, `PyList_New`, `int2str`, `print` ใชใฉใๆไพ
- LLVM IR ใใ `declare` ๅผใณๅบใใใใใจใงใPython ็ตใฟ่พผใฟ้ขจใฎ้ขๆฐใๅฎ่ฃ
- `builtin/types.c / .h`
- `String`, `PyInt`, `PyList` ใชใฉใฎๅใๅฎ็พฉ
- ๅ็ใกใขใช็ฎก็ใฏ Boehm GC ใซไปปใใPython ็ใชใชใใธใงใฏใใ็ฐกๆ็ใซๅ็พใใใใฎใฉใณใฟใคใ ใใชใณใฏใใใใจใงใ`print("Hello, world!")` ใใชในใๆไฝใชใฉใฎๅฆ็ใๅฏ่ฝใซใชใใพใใ
---
## ไปๅพใฎไบๅฎ / ๆณจๆ็น
- **ๅๆจ่ซใฎๅผทๅ**: ใพใ `int` / `str` ใชใฉไธ้จๅใซใใๅฏพๅฟใใฆใใชใ
- **ๅถๅพกๆงๆใฎๆกๅผต**: `while`, `for`, `try` ใใฏใฉในๅฎ็พฉใฏๆชๅฎ่ฃ
- **ๆ้ฉๅใใน**: ใปใผ `clang -O2` ใชใฉใซไธธๆใใๅฐๆฅ็ใซ LLVM ใฎๆ้ฉๅใในใใซในใฟใ ใใๅฏ่ฝๆงใใ
- **Windows ็ญใฎใตใใผใ**: ้็บใฏไธปใซ Unix ็ณป (Linux, macOS) ใๆณๅฎใWindows ใงใฎๆค่จผใฏ้ๅฎ็ใงใๆฌใใญใธใงใฏใใฏๅฎ้จ็ๆฎต้ใฎใใใไปๅพไปๆงๅคๆดใๅ ฅใๅ ดๅใใใใพใใ
่ๅณใๆใฃใฆใใใ ใใๆนใฏใ้ฃ่ผใใญใฐ่จไบใใตใณใใซใๅ่ใซใใใฒ่ฉฆใใฆใฟใฆใใ ใใ๏ผ---
## ใฉใคใปใณใน
ๆฌใชใใธใใชใฎใฝใผในใณใผใใฏใ็น่จใใชใ้ใ [MIT License](https://opensource.org/licenses/MIT) ใง้ ๅธใใใฆใใพใใ
่ฉณ็ดฐใฏใฝใผในใณใผใๅ ใฎ่จ่ฟฐ๏ผ`lython/__init__.py` ใชใฉ๏ผใใๅ็ งใใ ใใใ