Qumir β Π¨ΠΊΠΎΠ»ΡΠ½ΡΠΉ ΠΠ»Π³ΠΎΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ Π―Π·ΡΠΊ
Qumir β ΡΡΠΎ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠ΅Π±Π½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π²Π΄ΠΎΡ Π½ΠΎΠ²Π»ΡΠ½Π½ΠΎΠ³ΠΎ Π¨ΠΊΠΎΠ»ΡΠ½ΡΠΌ ΠΠ»Π³ΠΎΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠΈΠΌ Π―Π·ΡΠΊΠΎΠΌ Π°ΠΊΠ°Π΄Π΅ΠΌΠΈΠΊΠ° Π.Π. ΠΡΡΠΎΠ²Π° ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΠΡΠΠΈΡ.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Qumir?
Qumir β ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Ρ ΡΡΡΡΠΊΠΎΡΠ·ΡΡΠ½ΡΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠΎΠΌ. ΠΡΠΎΠ΅ΠΊΡ ΡΠΎΠ·Π΄Π°Π½ Π΄Π»Ρ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠΎΠΌΡ ΠΌΡΡΠ»Π΅Π½ΠΈΡ.
ΠΠ½Π»Π°ΠΉΠ½-ΠΏΠ΅ΡΠΎΡΠ½ΠΈΡΠ°: qumir.dev
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ
- Π ΡΡΡΠΊΠΎΡΠ·ΡΡΠ½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ, ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠΉ Ρ ΠΡΠΠΈΡ
- ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ ΡΠ΅ΡΠ΅Π· LLVM
- ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π² WebAssembly Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅
- ΠΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Π΄Π»Ρ Π±ΡΡΡΡΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
- ΠΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΠΈ: Π§Π΅ΡΠ΅ΠΏΠ°Ρ Π° ΠΈ Π ΠΎΠ±ΠΎΡ
ΠΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠΏΡΠ°Π²ΠΊΠ°
Π¨ΠΊΠΎΠ»ΡΠ½ΡΠΉ ΠΠ»Π³ΠΎΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ Π―Π·ΡΠΊ
Π¨ΠΊΠΎΠ»ΡΠ½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ·ΡΠΊ Π±ΡΠ» ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ Π² 1980-Ρ Π³ΠΎΠ΄Π°Ρ Π³ΡΡΠΏΠΏΠΎΠΉ ΡΡΡΠ½ΡΡ ΠΏΠΎΠ΄ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎΠΌ Π°ΠΊΠ°Π΄Π΅ΠΌΠΈΠΊΠ° ΠΠ½Π΄ΡΠ΅Ρ ΠΠ΅ΡΡΠΎΠ²ΠΈΡΠ° ΠΡΡΠΎΠ²Π° (1931β1988).
Π.Π. ΠΡΡΠΎΠ² β Π²ΡΠ΄Π°ΡΡΠΈΠΉΡΡ ΡΠΎΠ²Π΅ΡΡΠΊΠΈΠΉ ΡΡΡΠ½ΡΠΉ, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠΈΠΎΠ½Π΅ΡΠΎΠ² ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ½ Π±ΡΠ» ΡΠ±Π΅ΠΆΠ΄ΡΠ½, ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΡΠ°ΡΡ Β«Π²ΡΠΎΡΠΎΠΉ Π³ΡΠ°ΠΌΠΎΡΠ½ΠΎΡΡΡΡΒ» ΠΈ Π±ΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΠΊΠΎΠ»ΡΠ½ΠΈΠΊΡ.
ΠΠ»Π³ΠΎΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ·ΡΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Π»ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ:
- Π ΡΡΡΠΊΠΎΡΠ·ΡΡΠ½ΡΠ΅ ΠΊΠ»ΡΡΠ΅Π²ΡΠ΅ ΡΠ»ΠΎΠ²Π° ΠΏΠΎΠ½ΡΡΠ½Ρ Π±Π΅Π· ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π°
- ΠΡΠΎΡΡΠΎΠΉ ΠΈ ΡΡΡΠΎΠ³ΠΈΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π½Π΅ ΠΎΡΠ²Π»Π΅ΠΊΠ°Π΅Ρ ΠΎΡ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ²
- Π―Π·ΡΠΊ ΡΠΈΡΠ°Π΅ΡΡΡ ΠΏΠΎΡΡΠΈ ΠΊΠ°ΠΊ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠ΅ΠΊΡΡ
ΠΡΠΠΈΡ
ΠΡΠΠΈΡ (ΠΠΎΠΌΠΏΠ»Π΅ΠΊΡ Π£ΡΠ΅Π±Π½ΡΡ ΠΠΠ ΠΎΠ²) β ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΈΠ΄Π΅ΠΉ ΠΡΡΠΎΠ²Π°. ΠΡΠΠΈΡ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ:
- Π’Π΅ΠΊΡΡΠΎΠ²ΡΠΉ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ Ρ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΊΠΎΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ°
- ΠΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ°
- ΠΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π΅ΠΉ: Π ΠΎΠ±ΠΎΡ, Π§Π΅ΡΡΡΠΆΠ½ΠΈΠΊ, Π§Π΅ΡΠ΅ΠΏΠ°Ρ Π° ΠΈ Π΄ΡΡΠ³ΠΈΠ΅
ΠΡΠΠΈΡ ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΡΠΎΡΡΠΈΠΉΡΠΊΠΈΡ ΡΠΊΠΎΠ»Π°Ρ Π΄Π»Ρ ΠΏΡΠ΅ΠΏΠΎΠ΄Π°Π²Π°Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΊΠΈ ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ ΠΊ ΠΠΠ.
Qumir
Qumir β ΡΡΠΎ Π½ΠΎΠ²Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° Ρ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΎΠΉ:
- ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½Π° C++ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ LLVM
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° WebAssembly Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅
- ΠΡΠΊΡΡΡΡΠΉ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΈ Π·Π°ΠΏΡΡΠΊ
Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ
- CMake >= 3.30
- ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ C++23 (GCC 13+ ΠΈΠ»ΠΈ Clang 17+)
- LLVM >= 20
- Ninja (ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ)
- ΠΠ»Ρ WebAssembly:
wasm-ld
Π‘Π±ΠΎΡΠΊΠ° ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΎΠ²
# ΠΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ
git clone https://github.com/resetius/qumir.git
cd qumir
# Π‘Π±ΠΎΡΠΊΠ°
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j
# ΠΡΠΎΠ²Π΅ΡΠΊΠ°
./build/bin/qumiri --help
./build/bin/qumirc --help
ΠΠΎΡΠ»Π΅ ΡΠ±ΠΎΡΠΊΠΈ Π² ΠΏΠ°ΠΏΠΊΠ΅ build/bin/ ΠΏΠΎΡΠ²ΡΡΡΡ:
qumiriβ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ / JITqumircβ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ
ΠΠ°ΠΏΡΡΠΊ ΡΠ΅ΡΡΠΎΠ²
cmake -S . -B build -DQUMIR_BUILD_TESTS=ON
cmake --build build -j
ctest --test-dir build --output-on-failure
ΠΡΡΡΡΡΠΉ ΡΡΠ°ΡΡ
Π’ΠΎΡΠΊΠ° Π²Ρ ΠΎΠ΄Π°
Π’ΠΎΡΠΊΠ° Π²Ρ ΠΎΠ΄Π° β ΡΡΠΎ ΠΏΠ΅ΡΠ²ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ (ΡΡΠ½ΠΊΡΠΈΡ) Π² ΡΠ°ΠΉΠ»Π΅. ΠΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΡΠ»ΠΈ ΡΠΎΡΠΊΠ° Π²Ρ ΠΎΠ΄Π° ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ, ΠΈΡ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ:
- Π ΠΎΠ½Π»Π°ΠΉΠ½-Π²Π΅ΡΡΠΈΠΈ β Π² ΠΏΠΎΠ»Π΅ "Args" (ΡΠ΅ΡΠ΅Π· Π·Π°ΠΏΡΡΡΡ)
- Π ΠΎΡΠ»Π°ΠΉΠ½-Π²Π΅ΡΡΠΈΠΈ β Π²Π²ΠΎΠ΄ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ
ΠΠ΅ΡΠ²Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ°ΠΉΠ» hello.kum:
Π°Π»Π³
Π½Π°Ρ
Π²ΡΠ²ΠΎΠ΄ "ΠΡΠΈΠ²Π΅Ρ, ΠΌΠΈΡ!", Π½Ρ
ΠΊΠΎΠ½
ΠΠ°ΠΏΡΡΠΊ ΡΠ΅ΡΠ΅Π· ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ
./build/bin/qumiri -i hello.kum
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π² ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ»
./build/bin/qumirc hello.kum -o hello
./hello
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π² WebAssembly
./build/bin/qumirc --wasm hello.kum -o hello.wasm
Π‘ΡΡΡΠΊΡΡΡΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ
- Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΡΠ·ΡΠΊΠ° β ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ , ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ, ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ
- Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ β ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ°, ΡΡΡΠΎΠΊΠΈ, ΡΠ°ΠΉΠ»Ρ, Π²ΡΠ΅ΠΌΡ
- ΠΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ qumiri β ΠΎΠΏΡΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, ΡΠ΅ΠΆΠΈΠΌΡ ΡΠ°Π±ΠΎΡΡ
- ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ qumirc β ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΈ WebAssembly
- ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ Π§Π΅ΡΠ΅ΠΏΠ°Ρ Π° β ΡΠ΅ΡΠ΅ΠΏΠ°ΡΡΡ Π³ΡΠ°ΡΠΈΠΊΠ°
- ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ Π ΠΎΠ±ΠΎΡ β ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠ±ΠΎΡΠ° Π½Π° ΠΊΠ»Π΅ΡΡΠ°ΡΠΎΠΌ ΠΏΠΎΠ»Π΅
- ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ ΠΠ»Π°Π²ΠΈΠ°ΡΡΡΠ° β ΡΡΠ΅Π½ΠΈΠ΅ Π½Π°ΠΆΠ°ΡΠΈΠΉ ΠΊΠ»Π°Π²ΠΈΡ Π² ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ
- ΠΡΠΈΠΌΠ΅ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ β Π³ΠΎΡΠΎΠ²ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ Π΄Π»Ρ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ
Π‘ΡΡΠ»ΠΊΠΈ
- ΠΠ½Π»Π°ΠΉΠ½-ΠΏΠ΅ΡΠΎΡΠ½ΠΈΡΠ°: qumir.dev
- ΠΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄: github.com/resetius/qumir
- ΠΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΡΠΠΈΡ: kumir.info