Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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

SeviyeAçıklamaDerleme SüresiPerformans
-O0Optimizasyon yok (Debug)HızlıYavaş
-O1Temel optimizasyonlarOrtaOrta
-O2Tam optimizasyon (varsayılan)YavaşHızlı
-O3Agresif optimizasyonEn 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

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 BoyutuDerleme SüresiIncremental
10 KLOC1 saniye0.1 saniye
100 KLOC8 saniye0.5 saniye
1M LOC80 saniye3 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ı