[Fikir] FFI Seam Detaylı Tasarımı — callhost İmzası ve Tip Eşleme (Marshaling) #88

Open
opened 2026-06-14 22:14:04 +03:00 by saqut · 0 comments
Owner

Giriş (Nedir, Neden Önemli?)

ADR-016, "host fonksiyonu çağır" (FFI — Foreign Function Interface, Yabancı Fonksiyon Arayüzü) mekanizmasının kasıtlı bir tasarım kararı olduğunu, print'in ilk müşterisi olacağını söylüyor. Ama mekanizmanın somut hali (fonksiyon imzası, parametre/dönüş tipi eşlemesi) henüz tasarlanmadı.


Gelişme (Olası Yaklaşımlar)

  • VM'de bir callhost <isim> <argüman sayısı> IR/bytecode komutu: argümanlar yığından alınır, C++ tarafındaki kayıtlı bir fonksiyon tablosuna (std::map<std::string, HostFunction>) bakılır, sonuç yığına geri konur.
  • Tip eşleme: saQut int/float/string/bool değerleri C++ int/double/std::string/bool'a nasıl çevrilir (marshaling) — basit primitiflerle başlamak ("önce dikey dilim"), struct/array marshaling'i ileri bir adım olarak bırakmak.
  • Hata yönetimi: host fonksiyon başarısız olursa (örn. dosya bulunamadı) bu, saQut tarafına nasıl yansır — bir hata kodu mu, yoksa panic benzeri bir çalışma-zamanı hatası mı (yeni runtime hata kategorisi gerekebilir)?

Açık Sorular

  • Host fonksiyon tablosu derleme zamanında mı sabit (yalnızca derleyicinin sunduğu print gibi fonksiyonlar), yoksa kullanıcı kendi C++ fonksiyonunu kayıt edebilir mi (gömülü/embeddable derleyici senaryosu — "alet çantası" ruhuna çok uygun ama kapsam büyütür)?
  • callhost IR seviyesinde mi, yoksa daha yüksek seviyeli bir AST-annotation mı (Faz 1'in ExpressionNode alanlarına eklenebilir)?

İmza/Yorum: print(fibonacci(n)) çalıştığı gün, bu issue'nun "v0" kapsamı fiilen tamamlanmış olacak — minimal hedef gayet net.

### Giriş (Nedir, Neden Önemli?) ADR-016, "host fonksiyonu çağır" (FFI — Foreign Function Interface, Yabancı Fonksiyon Arayüzü) mekanizmasının **kasıtlı** bir tasarım kararı olduğunu, `print`'in ilk müşterisi olacağını söylüyor. Ama mekanizmanın somut hali (fonksiyon imzası, parametre/dönüş tipi eşlemesi) henüz tasarlanmadı. --- ### Gelişme (Olası Yaklaşımlar) - VM'de bir `callhost <isim> <argüman sayısı>` IR/bytecode komutu: argümanlar yığından alınır, C++ tarafındaki kayıtlı bir fonksiyon tablosuna (`std::map<std::string, HostFunction>`) bakılır, sonuç yığına geri konur. - Tip eşleme: saQut `int`/`float`/`string`/`bool` değerleri C++ `int`/`double`/`std::string`/`bool`'a nasıl çevrilir (marshaling) — basit primitiflerle başlamak ("önce dikey dilim"), struct/array marshaling'i ileri bir adım olarak bırakmak. - Hata yönetimi: host fonksiyon başarısız olursa (örn. dosya bulunamadı) bu, saQut tarafına nasıl yansır — bir hata kodu mu, yoksa `panic` benzeri bir çalışma-zamanı hatası mı (yeni runtime hata kategorisi gerekebilir)? --- ### Açık Sorular - Host fonksiyon tablosu derleme zamanında mı sabit (yalnızca derleyicinin sunduğu `print` gibi fonksiyonlar), yoksa kullanıcı kendi C++ fonksiyonunu kayıt edebilir mi (gömülü/embeddable derleyici senaryosu — "alet çantası" ruhuna çok uygun ama kapsam büyütür)? - `callhost` IR seviyesinde mi, yoksa daha yüksek seviyeli bir AST-annotation mı (Faz 1'in `ExpressionNode` alanlarına eklenebilir)? *İmza/Yorum:* `print(fibonacci(n))` çalıştığı gün, bu issue'nun "v0" kapsamı fiilen tamamlanmış olacak — minimal hedef gayet net.
saqut added the
fikir
ffi-builtin
labels 2026-06-14 22:14:04 +03:00
Sign in to join this conversation.
No description provided.