İçeriğe geç

LLVM Tabanlı, AOT-Derlenen Programlama Dili

AOT · LLVM 18 · piller dahil

Her şeyi kurgereksiz kod olmadan

Python kadar kolay, C kadar hızlı. Statik tipli, AOT-derlenen bir dil — HTTP, JSON, SQLite, bir ORM, OpenAPI ve C FFI doğrudan runtime’a gömülü. npm install yok, pip yok, bağımlılık yok.

~36kistek/sn · Tulpar pool
~1.9× Cfib · yerel AOT
0dış bağımlılık
çalışıyor
api.tpr
içe_aktar "wings";
içe_aktar "orm";

orm_open("app.db");
define_model("users", {
  "name": "TEXT", "age": "INTEGER"
});

fonk kullanicilari_listele(req) {
  döndür ok(orm_all("users"));
}

get("/users", "kullanicilari_listele");
serve(8080);  // + Swagger UI, /openapi.json
sayac.tpr
// Tüm .tpr dosyalarındaki satırları say
değişken toplam = 0;
değişken dosyalar = list_dir(".");

için (str d içinde dosyalar) {
  eğer (endsWith(d, ".tpr")) {
      str icerik = read_file(d);
      değişken satirlar = split(icerik, "\n");
      tamsayi n = length(satirlar);
      print(d + ": " + toString(n));
      toplam = toplam + n;
  }
}

print("Toplam: " + toString(toplam));
istatistik.tpr
// Bir veri setinden istatistik hesapla
fonk ortalama(array veri) {
  ondalik toplam = 0.0;
  için (değişken x içinde veri) {
      toplam = toplam + toFloat(x);
  }
  döndür toplam / toFloat(length(veri));
}

değişken notlar = [85, 92, 78, 96, 88, 73, 91];
ondalik ort = ortalama(notlar);
print("Ortalama: " + toString(ort));
print("En yüksek: " + toString(max(notlar)));
print("En düşük:  " + toString(min(notlar)));
Benchmark

Önemli yerde hızlı

GET / → JSON {“hello”:“world”} throughput’u, keep-alive, native yük aracı, tek 14-vCPU kutu. Her runtime kendi önerilen tek-process yapılandırmasında.

Tulparpool · 14c
~36k istek/sn
Go net/http14c
~30k istek/sn
Node.js http1c
~8.7k istek/sn
FastAPIuvicorn · 1w
~3.5k istek/sn

Üstelik latency düşük kalıyor: p50 0.32 ms (Tulpar) vs 3.3 ms (FastAPI). CPU’da fib, 1.37× C (Windows / MinGW) ile ~1.9× C (Linux gcc -O2) arasında — her iki ortamda da Rust/Go sınıfı. Tüm metodoloji →

Neden Tulpar?

Hepsi bir arada vs. parça parça kurulum

Başka yerde dört paket gerektiren şey, Tulpar’da tek binary ile gelir.

TulparLangGoPython (FastAPI)Node.js
HTTP Sunucusu✅ Gömülü✅ Gömülü❌ pip install⚠️ Minimal
ORM / Veritabanı✅ Gömülü❌ go get gorm❌ pip install❌ npm install
OpenAPI / Swagger✅ Otomatik❌ Harici araç⚠️ Eklenti❌ npm install
DağıtımTek binaryTek binaryContainer gerekliContainer gerekli
Bellek ModeliARCGC (stop-the-world)GC + refcountGC (V8)
Throughput~36k istek/sn~30k istek/sn~3.5k istek/sn~8.7k istek/sn
C Interop (FFI)✅ Native✅ cgo⚠️ ctypes / cffi⚠️ node-ffi
Özellikler

İhtiyacın olan her şey zaten kutuda

🚀

İlk günden API

import “wings”, bir route kaydet, serve(8080) — bitti. Otomatik OpenAPI 3.0 + Swagger UI, şema doğrulama (geçersiz gövde → 422), bağımlılık enjeksiyonu, yapılandırılmış log, keep-alive, ayrıca bedava gelen yerleşik /healthz ve /metrics (JSON + Prometheus).

C sınıfı performans

LLVM 18 ile bağımsız yerel binary’ye AOT-derlenir. Üretimde VM yükü yok.

🗄️

SQLite + ORM

Gömülü SQLite ve Active-Record ORM — bağlanacak sürücü yok.

🧬

ARC Bellek Yönetimi

Otomatik Referans Sayımı (ARC) — güvenli, öngörülebilir bellek, stop-the-world GC duraksaması yok.

🔗

C FFI

Herhangi bir C kütüphanesini doğrudan çağır. Sıfır sarmalayıcı yükü ile native interop.

🧰

Editör araçları

Gömülü LSP, tulpar fmt ve bir VS Code eklentisi.

📦

Paket yöneticisi

tulpar pkg, tulpar.toml manifesti ve kilit dosyası.

🌍

UTF-8 · TR + EN

Tam Türkçe anahtar kelime desteği (fonk, eğer, döndür) ve iki dilli derleyici tanıları.

Kendi dilinde kod yaz

İngilizce ve Türkçe — aynı derleyici, aynı binary

Her anahtar kelimenin Türkçe karşılığı var. Serbestçe karıştır veya tamamen tek dilde yaz. Derleyici tanıları yerel ayarını takip eder.

ENgreet.tprEnglish syntax
import "wings";

func greet(req) {
    var name = req.json["name"];
    if (name == "") { return bad_request("Name required"); }
    return ok("Hello, " + name + "!");
}

post("/greet", "greet");
serve(8080);
TRselamla.tprTürkçe sözdizimi
içe_aktar "wings";

fonk selamla(req) {
    değişken isim = req.json["name"];
    eğer (isim == "") { döndür bad_request("İsim gerekli"); }
    döndür ok("Merhaba, " + isim + "!");
}

post("/selamla", "selamla");
serve(8080);
Canlı playground

Doğrudan tarayıcında dene

Kurulum yok, ayar yok. Kodu düzenle ve Çalıştır’a bas — sayfa içinde çalışır.

merhaba.tpr — özyineleme + ternary operatörü
Sıfırdan bir REST API’ye

Tek dosyada kalıcı bir CRUD servisi

Model, route’lar ve sunucu tek bir .tpr dosyasında — /healthz, /metrics, /openapi.json ve bir Swagger UI ile bedava açılır.

import "wings";
import "orm";
orm_open("app.db");
define_model("users", {
"id": "INTEGER PRIMARY KEY AUTOINCREMENT",
"name": "TEXT NOT NULL",
"age": "INTEGER"
});
func list_users(req) { return ok(orm_all("users")); }
func create_user(req) {
int id = orm_create("users", req.json);
return created(orm_find("users", id));
}
get("/users", "list_users");
post("/users", "create_user");
body_schema({"name": "str", "age?": "int"}); // geçersiz gövde → otomatik 422
serve(8080);

Rehberli halini mi istersin? Wings Öğreticisi üç tam uygulamayı adım adım kurar — REST, token auth ve SQLite destekli bir API.

Araç zincirini kur, ilk programını derleyip çalıştır. macOS, Linux ve Windows.