exoproc
Mimari

Accessor zinciri

Accessor, Exoproc'un en önemli soyutlamalarından biridir. Aynı işlem kümesi — read, write, alloc, free, protect, scan ve call — farklı bellek...

Accessor, Exoproc'un en önemli soyutlamalarından biridir. Aynı işlem kümesi — read, write, alloc, free, protect, scan ve call — farklı bellek erişim biçimleri için ortak bir arayüzde sunulur.

Neyi çözer?

Bir struct alanı için “bu değer yerel bellekteyse senkron, uzaktaysa asenkron API kullan” ayrımı üst katmana sızarsa, her özellik taşıma mekanizmasına bağımlı olur. Accessor, bu ayrımı taşır: struct yerleşimini bilir; verinin nereden geldiğini accessor bilir.

Struct / CFunction

IMemoryAccessor

Middleware'ler

Yerel API | Remote API | NThread yönlendirmesi

IndirectNThreadHostAccessor

IndirectNThreadHostAccessor, çağrı çalıştırıcısı olarak NThread'i kullanır ve bunun üzerine middleware'ler ekler. Zincirde çağrı yönlendirme, machine-code havuzu, memset tabanlı yazma, memcmp tabanlı okuma, dosya aktarımı, tarama ve ABI marshalling bulunur.

Bu kurulumda yalnızca call() değil, allocation, okuma ve yazma gibi işlemler de aynı erişim stratejisi içinde kalabilir. Karşılığı; hata ayıklamada tek bir “uzak bellek işlemi”nin birden fazla middleware'den geçtiğinin bilinmesidir.

Başlatma sırası

Accessor zinciri yaşam döngüsü taşır. IndirectNThreadHostAccessor başlatıldığında bootstrap root ve alt zincir hazırlanır; NThread ise gerekli stub taramasını bekleyip thread'i park eder. createAccessor() bu init() akışını bekleyerek döner. Sınıfı doğrudan kuruyorsanız await init() tamamlanmadan kullanmayın; genel accessor üzerinde olmayan bir whenReady() çağrısını varsaymayın.

Bir hata görüldüğünde önce hangi katmanın çağrıyı gerçekten yürüttüğünü belirleyin. NThread kaynaklı timeout ile middleware'in yanlış marshal ettiği imza aynı belirtiyi üretebilir, fakat çözüm yerleri farklıdır. Varsayılan zincirin seçim ve cleanup davranışı için NThread accessor rehberine bakın.