Doğrusallık, benzersiz bir durumsal temsili belirlemek için yeterli bir kısıtlama değildir ve bu nedenle sorunuzun cevabı, doğrusal mantığı durum olarak nasıl yorumladığınıza bağlıdır. Bu genellikle yöntem.!A
İstediğiniz referans semantiği, tüm işaretçilerin benzersiz değerler olduğunu söylüyorsa (yani, bir nesneye en fazla tek bir başvuru varsa), o zaman dags ve grafik yapıları ifade edilemez, çünkü bir dag'in birden çok referans içerebileceği aynı nesne. Bu durumda , ve haritalarını istediğiniz için A tipi yeni bir değer yaratan bir hesaplama olmalıdır .!AAε A : ! A ⊸ AδA:!A⊸!A⊗!AϵA:!A⊸A
Bununla birlikte, paylaşımı temsil etmesini istediğinizi varsayalım . Daha sonra, nesneler referans sayımıyla çöp toplanabilir, ve sadece referans sayılarını işlemler olarak gerçekleştirilebilir. Bu durumda, paylaşım olduğu için değerleri değiştirmenin her zaman güvenli olduğunu varsaymak için doğrusallığı kullanamazsınız. Ancak, programınızdaki tüm bellek ayırma işlemlerinin açık olduğundan ve yığın içinde döngü olmadığından emin olabilirsiniz.δ A : ! A ⊸ ! A ⊗ ! Bir ε A : ! A ⊸ A!AδA:!A⊸!A⊗!AϵA:!A⊸A
Doğrusal tiplerin en pratik uygulamaları bu iki yorumun hiçbirini kullanmaz . Bunun yerine, referanslar serbestçe kopyalanabilir varlıklar olarak görülür ve doğrusal olarak izlediğimiz şey aslında yeteneklerdir . Yetenekler çalışma zamanı değerleri değildir; bunlar yalnızca bir referansa erişim iznini temsil etmeyi amaçlayan kavramsal varlıklardır. Fikir, izin verme tarzında programlamanızdır ve bu nedenle aynı nesneye birçok referans olsa bile, bir durum parçasının okunması veya değiştirilmesi yalnızca ona erişme yeteneğiniz varsa oluşabilir. Ve yetenek doğrusal olduğundan, bunu yalnızca siz değiştirebileceğinizi bilirsiniz.
n e wg e ts e tc o p y::::∀ α .a ⊸ ∃ c : ι . c , bir p ( c ) ⊗ r e f( α , c )∀ α , c : ι .c , bir p (c)⊗ r e f( α , c ) ⊸ α ⊗ c a p ( c ) ⊗ r e f( α , c )∀ α , c : ι .c , bir p (c)⊗ r e f(α,c)⊗α⊸cap(c)⊗ref(α,c)∀α,c:ι.ref(α,c)⊸ref(α,c)⊗ref(α,c)
Yukarıda çizilen API'de , , derleme zamanı indekslerinin bazı etki alanları ve , türler arasında değişir. Bir tip sahip tarafından indekslenen bir özelliktir ve tip referanslarına türüdür, bir kapasite ile erişilen . Arayan ve bir referans üzerine yeteneği gerektirir ve çağıran yeni bir başvuru ve ortak bir endeks paylaşan yeni yeteneği oluşturur. Ancak,cιαcap(c)cref(α,c)αcgetsetcnewcopy-bir referansı kullanmak herhangi bir yeteneğe erişim gerektirmez, bu nedenle herhangi bir referansı içine bakmadığı sürece kopyalayabilir.