BERK Derleyicisi
BERK derleyicisi, LLVM backend ile native kod üretimi yapan modern bir derleyicidir. Rust ile yazılmıştır ve C++ seviyesinde performans sunar.
Derleyici Mimarisi
Kaynak Kod (.berk)
↓
Lexer (Token'lara ayırma)
↓
Parser (AST oluşturma)
↓
Semantic Analysis (Tip kontrolü, modül çözümleme)
↓
LLVM IR Generation (Ara dil)
↓
LLVM Optimization (O0-O3)
↓
Code Generation
↓
Native Binary (.exe, .wasm, .elf)
Temel Kullanım
Derleme (Compilation)
# Basit derleme
berk-lang build program.berk
# Çıktı dosyası belirt
berk-lang build program.berk -o program.exe
# Release modu (optimizasyonlu)
berk-lang build --release program.berk
Çalıştırma (Run)
# Derle ve çalıştır
berk-lang run program.berk
# Komut satırı argümanları ile
berk-lang run program.berk -- arg1 arg2
Optimizasyon Seviyeleri
| Seviye | Açıklama | Derleme Süresi | Performans |
|---|---|---|---|
-O0 | Optimizasyon yok (Debug) | Hızlı | Yavaş |
-O1 | Temel optimizasyonlar | Orta | Orta |
-O2 | Tam optimizasyon (varsayılan) | Yavaş | Hızlı |
-O3 | Agresif optimizasyon | En Yavaş | En Hızlı |
# Debug build
berk-lang build --opt=0 program.berk
# Maksimum performans
berk-lang build --opt=3 --release program.berk
Hedef Platformlar
Native Compilation
# Windows x64
berk-lang build --target=x86_64-pc-windows-msvc program.berk
# Linux x64
berk-lang build --target=x86_64-unknown-linux-gnu program.berk
# macOS (ARM)
berk-lang build --target=aarch64-apple-darwin program.berk
WASM Compilation
# WebAssembly
berk-lang build --target=wasm32-unknown-unknown program.berk -o program.wasm
# WASI (WebAssembly System Interface)
berk-lang build --target=wasm32-wasi program.berk
Embedded Systems
# ESP32 (Xtensa)
berk-lang build --target=xtensa-esp32-none-elf program.berk
# STM32 (ARM Cortex-M)
berk-lang build --target=thumbv7em-none-eabihf program.berk
# Arduino (AVR)
berk-lang build --target=avr-unknown-gnu-atmega328 program.berk
Derleyici Bayrakları
Temel Bayraklar
# Verbose çıktı
berk-lang build -v program.berk
# Uyarıları göster
berk-lang build --warnings program.berk
# Tüm uyarıları hata say
berk-lang build --warnings-as-errors program.berk
# İstatistikleri göster
berk-lang build --stats program.berk
Ara Çıktılar
# LLVM IR çıktısı
berk-lang build --emit-llvm program.berk -o program.ll
# Assembly çıktısı
berk-lang build --emit-asm program.berk -o program.s
# AST yazdır
berk-lang build --print-ast program.berk
# Tip bilgilerini yazdır
berk-lang build --print-types program.berk
Proje Yapılandırması
berk.toml
[package]
name = "my_project"
version = "1.0.0"
authors = ["Ali Yılmaz <ali@example.com>"]
[dependencies]
serde = "1.0"
http = "0.2"
[build]
target = "x86_64-pc-windows-msvc"
opt-level = 2
lto = true # Link Time Optimization
[features]
default = ["std", "alloc"]
embedded = ["no-std"]
Build Komutları
# Proje dizininden build
cd my_project
berk-lang build
# Temizle
berk-lang clean
# Kontrol et (derleme yapmadan)
berk-lang check
# Testleri çalıştır
berk-lang test
Hata Mesajları
BERK derleyicisi, açık ve yardımcı hata mesajları sunar:
error[E0308]: tip uyuşmazlığı
--> program.berk:5:14
|
5 | değişken x: sayı = "merhaba";
| ^^^^ ^^^^^^^^^ beklenen `sayı`, bulundu `metin`
|
= yardım: string'i sayıya çevirmek için `sayıya_çevir()` kullanın
= not: tip çıkarımı için tip açıklamasını kaldırabilirsiniz
Performans Özellikleri
Link Time Optimization (LTO)
berk-lang build --lto program.berk
# %10-30 performans artışı
Profile-Guided Optimization (PGO)
# Adım 1: Instrumented binary oluştur
berk-lang build --pgo-gen program.berk
# Adım 2: Programı çalıştır (profil topla)
./program
# Adım 3: Profil ile optimize et
berk-lang build --pgo-use=program.profdata program.berk
# %15-40 performans artışı
Region Memory Optimization
berk-lang build --region-memory program.berk
# 263x daha hızlı bellek tahsisi
Cross-Compilation
# Linux'ta Windows için derle
berk-lang build --target=x86_64-pc-windows-msvc \
--linker=lld \
program.berk
# Windows'ta Linux için derle
berk-lang build --target=x86_64-unknown-linux-gnu program.berk
Incremental Compilation
BERK, sadece değişen modülleri yeniden derler:
# İlk derleme: 10 saniye
berk-lang build project.berk
# Sadece bir dosya değişti
# İkinci derleme: 0.5 saniye
berk-lang build project.berk
Derleyici Eklentileri
Custom Lintler
// lint.berk
#[lint]
fonksiyon büyük_fonksiyon_uyarısı(ast: AST) yap
eğer ast.satır_sayısı() > 100 yap
uyarı("Fonksiyon çok büyük: {} satır", ast.satır_sayısı())
son
son
Makrolar
// Compile-time kod üretimi
makro vec![$(x:expr),*] yap
yap
değişken temp = Vec::yeni()
$(temp.push(x);)*
temp
son
son
// Kullanım
değişken v = vec![1, 2, 3, 4]
Debug Bilgileri
# Debug sembolleri ile derle
berk-lang build --debug program.berk
# DWARF debug formatı
berk-lang build --debug-format=dwarf program.berk
# PDB debug formatı (Windows)
berk-lang build --debug-format=pdb program.berk
Cache Yönetimi
# Cache'i temizle
berk-lang cache clear
# Cache boyutunu göster
berk-lang cache size
# Cache ayarları
berk-lang cache config --max-size=5GB
Derleyici Performansı
| Proje Boyutu | Derleme Süresi | Incremental |
|---|---|---|
| 10 KLOC | 1 saniye | 0.1 saniye |
| 100 KLOC | 8 saniye | 0.5 saniye |
| 1M LOC | 80 saniye | 3 saniye |
Özet
- ✅ LLVM backend - C++ seviyesi performans
- ✅ Multiple targets - Windows, Linux, Mac, WASM, Embedded
- ✅ Optimizasyon seviyeleri - O0 to O3
- ✅ LTO & PGO - Maximum performance
- ✅ Incremental compilation - Hızlı rebuild
- ✅ Açık hata mesajları
- ✅ Cross-compilation
- ✅ Region memory - 263x daha hızlı