İçeriğe geç

LLVM Tabanlı, AOT-Derlenen Programlama Dili

LLVM tabanlı, AOT-derlenen programlama dili

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
C sınıfıtam sayı çekirdekleri · AOT
0dış bağımlılık
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
$ tulpar build api.tpr çalışıyor
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));
$ tulpar build sayac.tpr çalışıyor
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)));
$ tulpar build istatistik.tpr çalışıyor
Kaputun altında

Tek komut, tek native binary

tulpar build tüm hattı önceden (AOT) çalıştırır. Dağıttığın şey bağımsız, native bir çalıştırılabilir dosya — VM yok, yorumlayıcı yok.

  1. api.tpr

    Kaynak

    İngilizce ya da Türkçe anahtar kelimeler — aynı derleyici.

  2. lexer → parser

    Ayrıştırma

    Kaynak AST'ye dönüşür. Sözdizimi hataları burada, senin dilinde durur.

  3. LLVM 18 IR

    Kod üretimi

    AST, LLVM IR'a indirgenir.

  4. clang + runtime

    Bağlama

    Tulpar runtime ile bağlanır: HTTP, JSON, SQLite ve fazlası.

  5. ./api

    Native binary

    Bağımsız bir çalıştırılabilir dosya. VM yok, yorumlayıcı yok.

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 Tulpar fib’de C’yi 2,7× geçiyor (gcc -O3 -march=native -flto’ya karşı), sieve ve intloop’ta başa baş; arrayiter ve strcat’i eşit bayrak ve eşit araçla C alıyor. Tüm tablo, bayrak matrisi ve geri çekilen iddialar

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ım Tek binary Tek binary Container gerekli Container gerekli
Bellek modeli Arena (GC yok) GC (stop-the-world) GC + refcount GC (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. Bunların hepsi beraberinde gelir:

  • OpenAPI 3.0
  • Swagger UI
  • Şema doğrulama → 422
  • Bağımlılık enjeksiyonu
  • Yapılandırılmış log
  • Keep-alive
  • /healthz
  • /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.

GC duraksaması yok

Çöp toplayıcı yok, dolayısıyla stop-the-world duraksaması da yok. Bellek arenalardan geliyor; hangi yolda ne kadarının geri alındığı şu an ölçülüyor — bellek notlarına bakın.

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, Türkçe + İngilizce

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. Bir anahtar kelimenin üzerine gel, karşılığı yansın.

EN greet.tpr English 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);
TR selamla.tpr Tü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);
serve(8080) sonrası route’lar
  • GET/userslist_users
  • POST/usersdoğrulanır, hatalı gövdede 422
  • GET/healthzyerleşik
  • GET/metricsJSON + Prometheus
  • GET/openapi.jsonotomatik üretilir
  • UISwagger UIotomatik üretilir

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

Tek komutla hazır

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

$curl -fsSL https://tulparlang.dev/install.sh | bash