Temel düzeyde, çok fazla fark yok, ama hala oradalar.
Haskell, tıpkı özellikler içerdikleri nesnelerdeki OOP yöntemlerini tanımladığı gibi, bir tip sınıfında tanımlanan işlevleri veya değerleri 'yöntemler' olarak tanımlar. Bununla birlikte, Haskell bunlarla farklı şekilde ilgilenir, onlara OOP gibi bir nesneye sabitlemek yerine bireysel değerler olarak davranır. Bu, en belirgin yüzey seviyesi farkı ile ilgilidir.
Rust'un bir süre yapamayacağı tek şey , rezil ve tipik sınıflar gibi daha üst düzey tip özelliklerdi .Functor
Monad
Bu, Rust özelliklerinin genellikle 'somut tip' olarak adlandırılan şeyi, başka bir deyişle, genel bir argüman olmadan tanımlayabileceği anlamına gelir. Başlangıçtan itibaren Haskell, üst düzey işlevlerin diğer işlevleri nasıl kullandığına benzer türler kullanan daha üst düzey tipler yapabilir: birini diğerini tanımlamak için kullanma. Bir süre için bu Rust'da mümkün değildi, ancak ilişkili öğeler uygulandığından, bu tür özellikler yaygın ve deyimsel hale geldi.
Dolayısıyla, uzantıları görmezden gelirsek, bunlar tam olarak aynı değildir, ancak her biri diğerinin neler yapabileceğini yaklaşık olarak tahmin edebilir.
Yorumlarda da belirtildiği gibi, GHC'nin (Haskell'in ana derleyicisi), çok parametreli (yani birçok tür dahil) daktilolar ve tip bağımlılıklarına izin veren hoş bir seçenek de dahil olmak üzere, tipik sınıflar için diğer seçenekleri desteklediği de belirtilmelidir. ve tip ailelere götürür . Bildiğim kadarıyla, Rust gelecekte ne de olsa eğlenceliDeps veya tip aileleri yok. †
Sonuç olarak, özellikler ve tipik sınıflar, etkileşim biçimleri nedeniyle, hareket etmelerini ve sonunda oldukça benzer görünmelerini sağlayan temel farklılıklara sahiptir.
† Haskell'in tip sınıfları hakkında güzel bir makale (daha yüksek tipler de dahil olmak üzere) burada bulunabilir ve özelliklerle ilgili Örnek bölümüyle Rust'ı burada bulabilirsiniz.
class Functor f where fmap :: (a -> b) -> (f a -> f b)
; ikincisinin bir örneğiclass Bounded a where maxBound :: a
.