Ko'p tilli kod kompilyatsiya va bajarish uchun ochiq API — o'zbek dasturchilari uchun qulay interfeys.
Repo: github.com/shoyim/compiler
- Loyiha haqida
- Qo'llab-quvvatlanadigan tillar
- API endpointlari
- Ishlash tamoyili
- Xavfsizlik
- O'rnatish va ishga tushirish
- Litsenziya
Compiler API — bu brauzer yoki ilovangizdan to'g'ridan-to'g'ri istalgan dasturlash tilida kod yozish va bajarishga imkon beruvchi REST API. Konteyner ichida Isolate sandbox texnologiyasi yordamida xavfsiz tarzda ishlaydi.
Port 2000 da HTTP server sifatida ishlaydi va CLI hamda veb ilovalar bilan muloqot qilishi mumkin.
Quyidagi dasturlash tillari qo'llab-quvvatlanadi:
awk bash befunge93 brachylog brainfuck bqn c c++ cjam clojure cobol
coffeescript cow crystal csharp csharp.net d dart dash dragon elixir
emacs emojicode erlang file forte forth fortran freebasic fsharp.net
fsi go golfscript groovy haskell husk iverilog japt java javascript
jelly julia kotlin lisp llvm_ir lolcode lua matl nasm nasm64 nim
ocaml octave osabie paradoc pascal perl php ponylang powershell prolog
pure pyth python python2 racket raku retina rockstar rscript ruby
rust samarium scala smalltalk sqlite3 swift typescript basic basic.net
vlang vyxal yeethon zig
O'rnatilgan barcha runtime muhitlarini qaytaradi.
GET /api/v2/runtimes
Javob namunasi:
[
{
"language": "bash",
"version": "5.1.0",
"aliases": ["sh"]
},
{
"language": "python",
"version": "3.10.0",
"aliases": ["py", "python3"]
}
]Berilgan til va fayllar asosida kodni sandbox muhitida bajaradi.
POST /api/v2/execute
So'rov parametrlari:
| Parametr | Tur | Majburiy | Tavsif |
|---|---|---|---|
language |
string | ✅ | Bajarilishi kerak bo'lgan til nomi yoki aliasi |
version |
string | ✅ | Til versiyasi (SemVer formatida) |
files |
array | ✅ | Kod fayllari massivi. Birinchi fayl asosiy fayl hisoblanadi |
files[].name |
string | ❌ | Fayl nomi (yo'lsiz) |
files[].content |
string | ✅ | Fayl mazmuni |
files[].encoding |
string | ❌ | Kodlash usuli: utf8, base64, hex. Standart: utf8 |
stdin |
string | ❌ | Standart kirishga uzatiladigan matn. Standart: "" |
args |
array | ❌ | Dasturga uzatiladigan argumentlar. Standart: [] |
compile_timeout |
number | ❌ | Kompilyatsiya uchun maksimal vaqt (ms). Standart: 10000 |
run_timeout |
number | ❌ | Bajarish uchun maksimal vaqt (ms). Standart: 3000 |
compile_cpu_time |
number | ❌ | Kompilyatsiya uchun maksimal CPU vaqti (ms). Standart: 10000 |
run_cpu_time |
number | ❌ | Bajarish uchun maksimal CPU vaqti (ms). Standart: 3000 |
compile_memory_limit |
number | ❌ | Kompilyatsiya uchun xotira chegarasi (bayt). Standart: -1 (cheksiz) |
run_memory_limit |
number | ❌ | Bajarish uchun xotira chegarasi (bayt). Standart: -1 (cheksiz) |
So'rov namunasi:
{
"language": "python",
"version": "3.10.0",
"files": [
{
"name": "main.py",
"content": "print('Salom, Dunyo!')"
}
],
"stdin": "",
"args": [],
"compile_timeout": 10000,
"run_timeout": 3000,
"compile_cpu_time": 10000,
"run_cpu_time": 3000,
"compile_memory_limit": -1,
"run_memory_limit": -1
}Muvaffaqiyatli javob (200 OK):
{
"language": "python",
"version": "3.10.0",
"run": {
"stdout": "Salom, Dunyo!\n",
"stderr": "",
"output": "Salom, Dunyo!\n",
"code": 0,
"signal": null,
"message": null,
"status": null,
"cpu_time": 12,
"wall_time": 180,
"memory": 1024000
}
}Eslatma: Kompilyatsiya bosqichi talab qiladigan tillar uchun (C, C++, Go, Java va h.k.) javobda
compilekaliti ham bo'ladi.
Xato holatlari (status maydonlari):
| Kod | Ma'no |
|---|---|
RE |
Runtime xatosi (Runtime Error) |
SG |
Signal bilan tugash (Signal) |
TO |
Vaqt tugashi (Timeout) |
OL |
stdout hajmi oshib ketdi (Output Limit) |
EL |
stderr hajmi oshib ketdi (Error Limit) |
XX |
Ichki xato (Internal Error) |
Noto'g'ri so'rov (400 Bad Request):
{
"message": "html-5.0.0 runtime is unknown"
}
⚠️ Bu endpoint faqat lokal API orqali mavjud — ochiq (public) API da ishlamaydi.
Jarayonlar bilan real vaqt rejimida ishlash uchun WebSocket ulanishi o'rnatiladi.
WS /api/v2/connect
Xabar turlari:
| Tur | Yo'nalish | Tavsif |
|---|---|---|
init |
Mijoz → Server | Ish boshlash (execute endpointidagi parametrlar, lekin stdin siz) |
runtime |
Server → Mijoz | Runtime muhiti haqida ma'lumot |
stage |
Server → Mijoz | Joriy bosqich: compile yoki run |
data |
Ikki tomonlama | stdin, stdout yoki stderr ma'lumotlari |
signal |
Mijoz → Server | Jarayonga signal yuborish (masalan, to'xtatish) |
exit |
Server → Mijoz | Bosqich tugashi va chiqish kodi |
error |
Server → Mijoz | Xato xabari (WebSocket yopilishidan oldin) |
Ishlash namunasi:
Mijoz WebSocket ulanishini /api/v2/connect ga o'rnatadi
< {"type":"init", "language":"python", "version":"*", "files":[{"content":"input()"}]}
> {"type":"runtime", "language":"python", "version":"3.10.0"}
> {"type":"stage", "stage":"run"}
< {"type":"data", "stream":"stdin", "data":"Salom!\n"}
> {"type":"data", "stream":"stdout", "data":"Salom!\n"}
> {"type":"exit", "stage":"run", "code":0, "signal":null}
WebSocket xato kodlari:
| Kod | Sabab |
|---|---|
4000 |
Allaqachon ishga tushirilgan |
4001 |
Ishga tushirish vaqti tugadi (1 soniyada init yuborilmadi) |
4002 |
Xato xabari yuborildi |
4003 |
Hali ishga tushirilmagan |
4004 |
Faqat stdin oqimiga yozish mumkin |
4005 |
Noto'g'ri signal |
Compiler API yuqori darajada quyidagicha ishlaydi:
- API so'rov qabul qiladi va manba kodni vaqtinchalik faylga yozadi.
- Kod Isolate sandbox muhitida bajariladi.
- Bajarilishi talab qiladigan tillar (C, C++, Java, Go va h.k.) avval kompilyatsiya qilinadi, so'ng bajariladi.
- Natija (stdout, stderr, chiqish kodi) mijozga qaytariladi.
- Barcha vaqtinchalik fayllar avtomatik tozalanadi.
Tizim Isolate sandbox texnologiyasini ishlatadi. Bu Linux namespace, chroot, bir nechta imtiyozsiz foydalanuvchilar va cgroup mexanizmlarini birlashtiradi.
Xavfsizlik choralari:
- 🚫 Tarmoqqa chiqish odatda o'chirilgan
- 🔒 Har bir bajarish alohida, izolyatsiyalangan Linux namespace'da ishlaydi
- 👤 Har bir bajarish alohida imtiyozsiz foydalanuvchi bilan ishlaydi
- ⚙️ Maksimal jarayonlar soni —
256(fork bomb'lardan himoya) - 📁 Maksimal fayl soni —
2048 - ⏱️ CPU va wall-time chegarasi — standart
3 soniya - 🧠 Xotira iste'moli chegaralanadi
- 📤 stdout — maksimal
1024belgi (cheksiz chiqishdan himoya) - 🔫 Noto'g'ri ishlaydigan kod SIGKILL bilan to'xtatiladi
- 🧹 Har bajarilishdan so'ng vaqtinchalik fayl maydoni tozalanadi
- Docker o'rnatilgan bo'lishi kerak
- Port
2000bo'sh bo'lishi kerak
git clone https://github.com/shoyim/compiler.git
cd compiler
docker compose up -dAPI http://localhost:2000 manzilida ishlaydi.
curl http://localhost:2000/api/v2/runtimesLoyiha bilan birga Postman kolleksiyasi ham berilgan. Uni import qilib, barcha endpointlarni qulay tarzda sinab ko'rishingiz mumkin.
Fayl: Compiler_Api_postman_collection.json
Ushbu loyiha MIT litsenziyasi ostida tarqatiladi.