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önlendirmesiIndirectNThreadHostAccessor
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.
Tasarım kararları
Bir Struct alanının veya CFunction çağrısının, taşınma mekanizmasına göre farklı API'lere bölünmesi kolay görünür; ancak bu, her üst katmanın...
Windows x64 ABI ve NThread
NThread, çağrının adresini bilmenin yanında Windows x64 çağrı sözleşmesine uygun bir register ve stack durumu kurmak zorundadır. Bu sayfa ABI'nin...