Soyut düzeyde, istediğiniz bir şeyi tasarladığınız dilde ekleyebilirsiniz.
Uygulama düzeyinde, bazı şeylerin uygulanmasının daha kolay olacağı, bazılarının karmaşık olacağı, bazılarının hızlı hale getirilebileceği, bazılarının daha yavaş olma zorunluluğunu duymaları kaçınılmazdır. Bunu hesaba katmak için, tasarımcıların genellikle zor kararlar vermeleri ve ödün vermeleri gerekir.
Uygulama düzeyinde, bir değişkene erişmenin en hızlı yollarından biri adresini bulmak ve bu adresin içeriğini yüklemektir. Çoğu CPU'da adreslerden veri yüklemek için özel talimatlar vardır ve bu talimatlar genellikle kaç bayt yüklenmeleri gerektiğini (bir, iki, dört, sekiz vb.) Ve yükledikleri verileri nereye koyacaklarını bilmelidir (tek kayıt, kayıt çift, genişletilmiş kayıt, diğer hafıza vb. Bir değişkenin boyutunu öğrenerek, derleyici bu değişkenin kullanımları için tam olarak hangi talimatın yayılacağını bilir. Bir değişkenin boyutunu bilmeden, derleyicinin daha karmaşık ve muhtemelen daha yavaş bir şeye başvurması gerekir.
Soyut düzeyde, alt yazmanın amacı, eşit veya daha genel bir türün beklendiği bir türden örnekleri kullanabilmektir. Başka bir deyişle, belirli bir türdeki bir nesneyi veya daha fazla türetilmiş herhangi bir şeyi bekleyen, tam olarak bunun ne olacağını bilmeden, kod yazılabilir. Açıkçası, daha fazla türetilmiş tür daha fazla veri üyesi ekleyebildiği için, türetilmiş bir türün temel türleriyle aynı bellek gereksinimine sahip olması gerekmez.
Uygulama düzeyinde, önceden belirlenmiş bir büyüklükteki bir değişkenin bilinmeyen bir büyüklük örneğini tutması ve normalde verimli dediğiniz bir şekilde erişilmesi için basit bir yolu yoktur. Ancak, işleri biraz hareket ettirmenin ve nesneyi saklamak için değil, nesneyi tanımlamak ve o nesnenin başka bir yerde saklanmasına izin vermek için bir değişken kullanmanın bir yolu vardır. Bu bir referanstır (örn. Bir hafıza adresi) - bir değişkenin nesneyi bu bilgiler boyunca bulabildiğimiz sürece sadece bir tür sabit boyutlu bilgiyi tutması gereken ekstra bir dolaylı yönlendirmedir. Bunu başarmak için, sadece adresi yüklemeliyiz (sabit boyutta) ve o zaman bildiğimiz ofsetlerde daha fazla veri olsa bile, geçerli olduğunu bildiğimiz nesnenin ofsetlerini kullanarak her zamanki gibi çalışabiliriz. Bunu yapabiliriz çünkü yapmıyoruz.
Soyut düzeyde, bu yöntem, bir (a referansına) referansını , onu yapan bilgiyi kaybetmeden string
bir object
değişkene kaydetmenizi sağlar string
. Her türün bu şekilde çalışması iyidir ve ayrıca birçok açıdan zarif olduğunu söyleyebilirsiniz.
Yine de, uygulama düzeyinde, fazladan dolaylı yönlendirme daha fazla talimat içerir ve çoğu mimaride nesneye erişimi daha da yavaşlatır. Dilinizde, bu fazladan bir dolaylı aktarım seviyesine sahip olmayan, sık kullanılan bazı türleri (referans) eklerseniz, derleyicinin bir programdan daha fazla performans elde etmesine izin verebilirsiniz. Ancak, derleyici seviyesini kaldırarak, derleyici artık bellekte güvenli bir şekilde alt yazı yazmanıza izin veremez. Bunun nedeni, türünüze daha fazla veri üyesi eklerseniz ve daha genel bir türe atarsanız, hedef değişken için ayrılan alana sığmayan fazladan veri üyesi kesilir.