Swift neden tanık masalarına ihtiyaç duyuyor?


10

Swift'in uygulama detaylarını okumaya çalışıyorum ve çivilemediğim bir şey de onun "tanık masaları". Yapılar için kullanılan ayrı bir vtable işaretçisi gibi görünüyorlar.

Ama neden buna ihtiyacın olsun ki? Yapılar değere göre kopyalanır, böylece derleme zamanında ne tür olduklarını zaten biliyorsunuzdur. Peki hangi yöntemi arayacağınızı ve onunla nasıl yapılacağını sabit kodlamak istemez misiniz? Neden bu yöntemlerde sanal dağıtım gerçekleştirilmeli?


1
Bu yapı tanık tablolarındaki bazı kaynaklara işaret edebilir misiniz? Tüm bulabildiğim protokol tanık tabloları.
Jörg W Mittag

Yanıtlar:


12

Yapılar Swift'te protokol adı verilen arabirimleri uygulayabilir. Protokol olan bir parametre, değişken veya alan / üyeniz olabilir ve sınıflardan bahsetmemek için birden fazla farklı yapı, bir protokol parametresine (veya bir yapı) geçtikten (veya atadığınızda) aynı protokolü uygulayabilir değişken veya alan) içeriyorsa, özellikleri "kayıp" olabilir (re: derleme zamanı) ve protokol tanık tablosu devreye girer (re: runtime).

Swift bellek düzeni hakkında daha fazla bilgi edinebilirsiniz .


Benzer şekilde daha aşina olduğum C # da oluyor. Bir arabirim değişkenine veya alana / üyeye iletilen veya atanan bir yapı kutulu ve yapının kutulu temsili, sınıf temsillerinin yapısıyla eşleşir, yani kutulu yapılar için bir vtable vardır.

Öğe derleme zamanında bir yapı olarak bilindiğinde hem C # hem de Swift'in doğrudan arama yapmasını ve derleme zamanında vtable gönderimini kullanmasını beklerim, öğe yalnızca bir arabirim olarak bilinir.


1
"Öğe derleme zamanında bir yapı olarak bilindiğinde, hem C # hem de Swift'in doğrudan arama yapmasını beklerdim," evet, bu devirtualization
Alexander - Yeniden

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.