Dasturlash

Blaise – Zamonaviy, Zero-Legacy Object Pascal Kompilyatori QBE Orqali

8-may, 2026, 08:0810 ko'rish4 daqiqa o'qish
Blaise – Zamonaviy, Zero-Legacy Object Pascal Kompilyatori QBE Orqali

Object Pascal dasturlash tilining sevuvchilari uchun yangi imkoniyatlar ochilmoqda. Blaise nomli zamonaviy kompilyator, eski kod bazalari va murakkab konfiguratsiyalardan xalos bo'lib, dasturchilarga tez, xavfsiz va samarali ishlashni ta'minlaydi.

Blaise nima va nega u muhim?

Blaise – bu self-hosting (ya'ni o'zini o'zi kompilyatsiya qila oluvchi) va zero-legacy (meros qolgan eski xususiyatlar yo'q) yondashuvga asoslangan Object Pascal kompilyatori. U GitHubda ochiq manba sifatida mavjud bo'lib, QBE (Quick Backend) orqa tizimiga asoslanadi, shuningdek, kelajakda LLVM backend ham qo'shilishi rejalashtirilgan.

project.xml                       Root aggregator (packaging=pom)
│
├── compiler/                     The compiler binary (packaging=application)
│   ├── project.xml
│   └── src/
│       ├── main/pascal/          uLexer, uParser, uAST, uCodeGenQBE, ...
│       └── test/pascal/          FPTest test suite for compiler units
│
├── rtl/                          Runtime library (packaging=library)
│   ├── project.xml
│   └── src/
│       ├── main/pascal/          System.pas, SysUtils.pas, Classes.pas, ...
│       └── test/pascal/          FPTest test suite for RTL units
│
├── tools/
│   └── migration-analyser/       FPC/Delphi migration report tool (packaging=application)
│       ├── project.xml           depends on compiler module
│       └── src/
│           ├── main/pascal/
│           └── test/pascal/
│
├── vendor/qbe/                   Vendored QBE backend source (pinned, built from source)
└── docs/                         Design documents and specifications

Asosiy farqlar va afzalliklar

  • Bir til rejimi – {$mode} kabi eski kalit so'zlar va ko'p dialektlar yo'q. Bu kodni o'qishni va tushunishni ancha osonlashtiradi.
  • Yagona string turi – UTF‑8 asosidagi, referens hisoblagichli stringlar. Bu xotira sızıntılarını kamaytiradi va ko'p tilli ma'lumotlar bilan ishlashni soddalashtiradi.
  • Avtomatik referens hisoblagich (ARC) – sinflar, yozuvlar, interfeyslar bir xil xotira modeliga ega, qo'lda xotira boshqaruvi kerak emas.
  • Reifikatsiyalangan generiklar – kompilyatsiya vaqtida turli tiplar uchun kod yaratish (monomorphization) amalga oshadi, bu esa ishlash tezligini oshiradi.
  • Yangi qurilish tizimi – PasBuildproject.xml fayli orqali modul va bog'lanishlarni avtomatik boshqaradi, an'anaviy makefilelarga ehtiyoj qolmaydi.
  • Birlamchi debugger – OPDF – maxsus debug format bo'lib, DWARF kabi tashqi formatlarga bog'lanish talab qilinmaydi.

Arxitektura va modul tuzilishi

Blaise loyihasi bir nechta modulga bo'lingan:

pasbuild compile
  • compiler – asosiy kompilyator binarysi.
  • rtl – Runtime Library, ya'ni standart kutubxona (System.pas, SysUtils.pas, Classes.pas va boshqalar).
  • tools/migration-analyser – eski Free Pascal yoki Delphi kodlarini yangi Blaise kodiga o‘tkazish uchun analizator.
  • vendor/qbe – QBE backend manbai, loyiha ichida to‘liq yig‘ilgan.

Har bir modul project.xml fayli bilan tavsiflanadi va PasBuild ularni mustaqil tarzda kompilyatsiya qiladi.

pasbuild compile -p debug      # includes -g -gl -Criot -gh
pasbuild compile -p release    # includes -O2 -CX -XX -Xs

Qurilish va ishga tushirish jarayoni

Kompyuterda Free Pascal Compiler 3.2.2+ va GCC/Clang kabi C kompilyatori o'rnatilgan bo'lsa, quyidagi buyruqlar orqali Blaise'ni yaratish mumkin:

pasbuild test
pasbuild compile -p release   # optimallashtirilgan versiya
pasbuild compile -p debug     # debug ma'lumotlari bilan

Yaratilgan binary compiler/target/blaise yo'lida joylashadi. Misol uchun, Hello.pas faylini quyidagicha kompilyatsiya qilish mumkin:

pasbuild compile -m blaise-compiler
compiler/target/blaise --source Hello.pas --output Hello

Shuningdek, --emit-ir parametri orqali QBE IR (intermediate representation) kodini chiqarish, kompilyatorning ichki ishlashini tahlil qilish imkonini beradi.

# Compile a single file
compiler/target/blaise --source Hello.pas --output Hello

# Compile via project.xml
compiler/target/blaise --project project.xml --config debug --output myapp

# Emit QBE IR (useful for debugging the compiler itself)
compiler/target/blaise --source Hello.pas --emit-ir

Hozirgi holat va kelajak rejalari

Rasmiy jadvalga ko'ra, Blaise quyidagi bosqichlarni amalga oshirgan:

  • Bootstrap pipeline – Linux x86_64 platformasida Hello World muvaffaqiyatli ishladi.
  • Tip tizimi – sinflar, yozuvlar, ARC, istisnolar qo'shildi.
  • Generiklar va GUIDsiz interfeyslar – to'liq amalga oshirildi.
  • OPDF debug ma'lumotlari – chiqarilishi yakunlandi.

Keyingi bosqichlar:

  • LLVM backendni qo'shish, Windows va macOS ARM64 platformalarini qo'llab-quvvatlash.
  • VS Code uchun LSP (Language Server Protocol) kengaytmasi.
  • FPC/Delphi kod bazalarini avtomatik migratsiya qilish vositasi.

Nega Blaise’ni sinab ko‘rish kerak?

Blaise, eski Free Pascal yoki Delphi muhitlarida duch keladigan “ko'p dialekt”, “ko'p string turi” kabi muammolarni bartaraf etadi. Avtomatik xotira boshqaruvi va birlamchi debugger dasturchilarga kodni tezroq yozish, xatolarni kamroq topish imkonini beradi. Bundan tashqari, QBE backendning soddaligi va tezligi yuqori samaradorlikni kafolatlaydi.

Qiziqish bildirganlar GitHubdagi loyiha sahifasiga tashrif buyurib, PasBuild yordamida o‘z platformalarida kompilyatorni sinab ko‘rishlari mumkin.

Manba: Hacker News
#Blaise #Object Pascal #kompilyator #QBE #PasBuild
Telegram da muhokama qilish