MELP Ne Yapabilir?
Dil tasarımından binary güvenliğine — temel özellikler.
🌍 1. Çok Dilli, Çok Sentakslı Yazım
MELP'te program mantığı dilden ve sözdizimi stilinden bağımsızdır. Aynı derleyici Türkçe,
İngilizce, Rusça veya Japonca kaynak dosyasını okuyabilir. Yeni bir dil eklemek için tek
yapılması gereken bir keywords.json dosyası yazmaktır —
derleyici kaynak koduna dokunulmaz.
Bunun yanı sıra MELP üç farklı sözdizimi stilini destekler:
function add(a; b)
return a + b
end function
function add(a; b) {
return a + b
}
function add(a; b):
return a + b
Kanonik kaynak: /ORTAK/dil/<dil_kodu>/keywords.json
function greet(name)
print("Hello, " + name)
end function
function main()
greet("World")
end function
fonksiyon selamla(isim)
yaz("Merhaba, " + isim)
fonksiyon sonu
fonksiyon giriş()
selamla("Dünya")
fonksiyon sonu
Tasarım İlkesi: Dil değişikliği algoritmanın kendisini değiştirmez.
Normalizer, kaynak dildeki anahtar kelimeleri tek biçimli iç temsile (pmlp)
çevirir ve derleyicinin geri kalanı yalnızca bu iç temsili görür.
🛡️ 2. Memory Safe — GC'siz, Annotation'sız Beta
MELP, varsayılan olarak global durum oluşturmaya izin vermez. Bu tek kural sayesinde bellek sızıntısı derleyici düzeyinde imkânsız hale gelir — ne çalışma zamanı Garbage Collector ne de Rust'ın borrow checker'ı gibi manuel annotation sistemi gerekir.
| Dil | Hız | Memory Safety | Ekstra Yük |
|---|---|---|---|
| C / C++ | ✅ | ❌ Manuel | — |
| Java / Python | ❌ GC | ✅ | Garbage Collector |
| Rust | ✅ | ✅ | Borrow checker annotation |
| MELP | ✅ | ✅ | Hiçbiri — stateless-first |
Stateless-First: Varsayılan tercih saf ve kısa ömürlü işlemlerdir. Global durum gerekiyorsa MELP sizi engellemez. Kullanıcı, bedeline katlanarak isterse MELP'i stateful olarak da kullanabilir.*
* Stateful kullanımın bedeli beklenenin ötesinde çok maliyetli değildir. MELP'in scope mekanizması bu durumun üstesinden gelecek şekilde planlanmıştır.
🔐 3. Yapısal Binary Güvenliği — EOK v1.0+
Binary'e sahip olmak, mantığa sahip olmak anlamına gelmez.
Klasik derleyiciler kaynak kodunun sembolik yapısını (fonksiyon adları, kontrol akışı, sabit değerler) binary içinde korur. IDA Pro, Ghidra veya benzeri bir araç bu binary'i açtığında programın mantığı büyük ölçüde okunabilir.
MELP farklı çalışır. EOK (Encryptic OK) mimarisinde binary, gerçek semboller yerine yalnızca indeks numaraları içerir. Bu indekslerin anlam tablosuna — "anahtar"a — sahip olmadan binary çalıştırılamaz, tersine mühendislik yapılamaz.
Saldırı Senaryoları
| Saldırı | Sonuç |
|---|---|
| Binary ele geçirildi, anahtar yok | Yürütülemez |
| Memory dump (çalışırken) | Bellekte yalnızca indeksler — veri okunaksız |
| IDA Pro / Ghidra analizi | Kontrol akışı ve semboller okunaksız |
| Binary kopyalanıp farklı ortamda çalıştırıldı | Anahtar eşleşmediği için başlatılamaz |
Hedef Kitle: Savunma sanayi, bankacılık ve kritik altyapı yazılımları için tasarlanmıştır. Fikri mülkiyet koruması iş modelinin merkezinde olan kuruluşlar için EOK doğrudan bir değer önerisidir.
Durum: EOK Phase 3 aktif — FBO tablo kompozisyonu çalışıyor, tip ve yapı metadatası indeksleniyor. Tam binary indeks şifreleme (Phase 4) MELP v1.0 ile kararlı sürüme geçecektir.
EFBO — Kuantum Dirençli Koruma Araştırma
EOK'un üzerine inşa edilen EFBO (Encrypted FBO), post-quantum şifreleme yöntemleriyle FBO dispatch tablosunu korumayı hedefler. Klasik şifreleme algoritmalarının kuantum bilgisayarlar karşısında kırılgan olacağı varsayımına karşı proaktif bir mimari yanıttır.
Durum: EFBO aktif araştırma aşamasındadır. Beta sonrası yol haritasında yer almaktadır — mevcut EOK koruması bundan bağımsız olarak çalışır.
⚡ 4. LLVM Native Binary
MELP sözdizimsel bir deney değildir. Kaynak kod LLVM IR'e derlenir,
ardından llc ve platform linker'ı aracılığıyla
gerçek bir ELF binary üretilir. GC yok, interpreter yok, overhead yok.
# LLVM IR görüntüle
bin/run_melp ornek.mlp --ir
# Native binary üret
melp_compiler ornek.mlp -o a.out
# Çalıştır — lli veya interpreter gerektirmez
./a.out
Üretilen binary, lli veya herhangi bir çalışma zamanı
olmadan doğrudan işletim sistemi tarafından çalıştırılır.
C/C++ ile karşılaştırılabilir performans hedefleri için LLVM optimizer
geçişleri uygulanabilir.
🔄 5. Spawn + Channel
MELP, eşzamanlılık için dil düzeyinde spawn ve
channel desteği sunar. Paylaşılan durum yerine
mesaj geçişi modeli benimsenmiştir — bu yaklaşım stateless-first felsefesiyle tutarlıdır.
spawn
print("Paralel görev çalışıyor")
end spawn
başlat
yaz("Paralel görev çalışıyor")
başlat sonu
📦 7. OK Katmanı — STO · SAO · FBO Beta
MELP derleme hattının optimizasyon omurgası üç katmandan oluşur: STO (Smart Type Optimization) tip çıkarımını, SAO (Semantic-Aware Optimization) erişim örüntülerini analiz eder; FBO (Frontend-Backend Optimization) ise semantiği 32-bit indekse indirger. Modüller arası transfer yalnızca 4 byte indekstir; kütüphane seyahat etmez.
32-bit indeks alanı: 4.294.967.296 giriş kapasitesi. EOK güvenlik katmanının ve ROK çalışma zamanı optimizasyonunun matematiksel temelidir. Erişim O(1) L1 cache hit; performans maliyeti neredeyse sıfıra yakındır.
🔁 8. State — FBO'nun Çalışma Zamanı Uzantısı Beta
Geleneksel dillerde state geçişi maliyetlidir: veri kopyalanır, bağımlılıklar taşınır, bellek sızar. MELP'te state FBO tablosunun bir indeksidir — modüller arası geçiş 4 byte, erişim O(1).
MELP state'i yasaklamaz, onu görünür kılar.
state.init() ve state.close()
ile state nerede başlar nerede biter açık olur.
import state
numeric function sayac()
state.init()
numeric n = state.get("n"; 0)
state.set("n"; n + 1)
state.close()
return n
end function
Planlanan: Stage 7. Mevcut sürümde FBO altyapısı aktif; state modülü beta sürümüyle birlikte devreye girer.
🔢 9. Tip Sistemi — 3 Tip, Sıfır Tip Derdi
MELP'te yalnızca üç değişken tipi vardır:
| Tip | Alt Yapı | Kapsam |
|---|---|---|
numeric | BigDecimal | 1 bit’ten binlerce byte’a kadar her sayı |
string | BigString | Herhangi bir uzunlukta metin |
boolean | — | doğru / yanlış |
numeric? | Nullable | Değer atanmamış olabilir; null / none alabilir |
tuple | i64 dizisi (heap) | (a, b, c) literal; (x, y) = boyut destructuring |
Klasik dillerde programcı “bu değişkene int8 mi, int64 mi,
float mı double mı ayırmalıyım?” derdine düşer.
MELP’te bu dert yoktur. Kullanıcının tek yaptığı ihtiyacını olan tipi tanımlamaktır:
numeric kucuk = 1 -- STO: 1 bit yeterli, öyle depolar
numeric buyuk = 9999999999999 -- STO: gereken byte’ı otomatik seçer
numeric pi = 3,14159265358979323846
numeric miktar = 1.000.000,45 -- Noktalı binlik ayraç
string mesaj = "Merhaba"
boolean aktif = true
-- Nullable tip (v1.2)
numeric? yas = null -- atanmamış olabilir
string? ad = "Ali"
-- Safe navigation operatörü
string sonuc = kullanici?.isim
-- Type cast
numeric n = deger as numeric
-- Tuple
tuple boyut = (1920; 1080)
(numeric w; numeric h) = boyut
STO (Smart Type Optimization) derleme zamanında değişkenin gerçek kullanımını analiz eder ve bellekte minimum yer kaplayacak şekilde temsil eder. İster 1 bit’lik bir bayrak, ister binlerce byte’lık bir sayı olsun — STO bunu kullanıcı adına otomatik çözer. IEEE 754 kısıtı yoktur; finansal ve akademik hesaplamalar RAM sınırına kadar %100 doğrulukla çalışır.
🐛 10. Yerleşik debug Anahtar Kelimesi
Kaynak kodda hata noktası işaretlemek için ayrı kütüphane ya da araç gerekmez.
debug dil düzeyinde bir anahtar kelimedir.
Üretim derlemesinde (--release) sıfır maliyet —
kod ve sembol üretilmez.
function hesapla(x)
debug -- burada dur, değerleri göster
return x * 2
end function
--release ile derlendiginde tüm
debug ifadeleri derleme zamanında kaldırılır.
Üretim binary'inde sıfır iz.
💀 11. Ölü Modül Felsefesi
Stateless-first mimarinin doğal sonucu: modüller varsayılan olarak ölüdür. Hiçbir modül kendi başına kaynak tahsis etmez ya da bellekte yer kaplamaz. Bir modülü kullanan modül diriltir ve iş bitince öldürür — atıl kaynak sıfır, çöp toplayıcıya gerek yoktur.
Sonuç: Memory leak derleyici düzeyinde imkânsızdır — GC veya borrow checker olmadan. Bellekte tutulan tek şey 4-byte FBO indeksidir; nesnenin kendisi seyahat etmez.
📌 12. Adlandırılmış Kapsamlar — scope
scope ad ile iç içe bloktan temiz koşullu çıkış sağlanır.
Derin döngülerde bayrak değişkeni ya da exception gerekmez.
scope islem
for i = 0 to 100
for j = 0 to 100
if bul(i; j) then
exit scope islem -- iç içe döngüden temiz çıkış
end if
end for
end for
end scope
🧱 13. Struct + Fonksiyon — Class Yok
MELP'te veri struct ile, davranış bağımsız fonksiyonlarla tanımlanır.
OOP hiyerarşisi olmadan aynı modelleme gücü, çok daha az karmaşıklık.
struct Nokta
numeric x
numeric y
end struct
enum Renk
Kirmizi
Yesil
Mavi
end enum
match renk
case Kirmizi
print("kırmızı")
end case
end match
🗂️ 14. Modüler Mimari
Her modül tek sorumluluğa sahiptir; merkezi orkestratör yasaktır. Derleme sırası otomatik dependency graph'tan belirlenir — döngüsel bağımlılık derleme zamanında hata olarak raporlanır.
Tasarım İlkesi: Modüller arasında doğrudan state paylaşımı yoktur. İletişim FBO indeksleri üzerinden gerçekleşir; bu mimari EOK güvenliğini ve stateless-first felsefesini pekiştirir.
🌐 15. Platform Bağımsız Beta
Bir kere yaz, her yerde çalıştır. LLVM altyapısı sayesinde aynı kaynak kod Linux, macOS ve Windows için native binary üretir. Çapraz derleme için ayrı araç gerekmez.
Mevcut durum: Linux x86-64 tam desteklenmektedir. macOS ve Windows desteği beta sürümüyle birlikte gelecektir.
🎯 16. Öz-Derleme Hedefi
v1.0 milstonunda MELP derleyicisi kendini MELP ile derleyecektir. Bu hedefe "self-hosting" denir ve bir dilin olgunluk göstergesidir. Stage 0 (C++ → C++) ve Stage 1 (MELP → C++) aşamalarından sonra Stage 2 (MELP → MELP) tamamlandığında bu hedef gerçekleşmiş olacak.
| Aşama | Kaynak | Hedef | Durum |
|---|---|---|---|
| Stage 0 | C++ | C++ | ✅ Tamamlandı |
| Stage 1 | .mlp | C++ (bootstrap) | Geliştirme |
| Stage 2 | .mlp | .mlp (self-hosting) | Planlı |
Deneyin
Tüm bu özellikleri tarayıcıdan, kurulum yapmadan test edebilirsiniz.