Yanlış Güvenlik Anlayışı . Bu saçmalık.
Birkaç Temel Tip . OCaml artık bayt ve bayt dizilerine sahiptir, ancak yerleşik unicode dizeleri, 16 bit tam sayıları, işaretsiz tam sayıları, 32 bit kayan sayıları, vektörleri veya matrisleri yoktur. Üçüncü taraf kütüphaneleri bunlardan bazılarını sağlar.
Sessiz Tamsayı Taşması . Değişmedi ama hiçbir zaman sorun olmadı.
Modül Değişmezliği . Fonksiyonların ve modüllerin değişebilir olması tavsiyesi Lisp için korkunç bir geri dönüş ve gerçekten kötü bir fikir. İsterseniz modüllerin yerini alabilir include
, ancak elbette değiştiremezsiniz.
Çok Biçimlilik Çalışma Zamanı Türü Hatalarına Neden Olur . Bu OCaml ile ilgili büyük bir sorundur ve düzeltilmemiştir. Tipleriniz polimorfik eşitlik geliştirdikçe, fonksiyonlar gibi tiplerle karşılaştıklarında karşılaştırma ve karma başarısız olmaya başlayacak ve problemi ayıklamak çok zor. F # bu soruna harika bir çözüm sunuyor.
Makro yok . İronik bir şekilde, bu OCaml'ın aslında makroları tam olarak desteklediğini yazarken, şimdi özelliği çekmeye karar verdiler.
Sarmalayıcılar . Bu gerçek bir sorundu ve giderilmedi. try ... finally
OCaml dilinde hala bir yapı yoktur ve bunu stdlib'de uygulayan hiçbir sarıcı yoktur.
Yerler . Değişmedi ama sorun değil.
Alan adlandırma cehennemini kaydedin . Modülleri kullanarak kodunuzu doğru şekilde yapılandırın.
Sözdizimi . Değişmedi ama sorun değil.
Polimorfizm yok . Bu onu yazdığında çoğunlukla saçmalıktı ve hiçbir şey değişmedi.
Tutarsız fonksiyon setleri . OCaml'ın hala bir cons
işlevi yoktur. Bu iyi. Lisp öğelerini kendi dilimde istemiyorum, teşekkür ederim.
Dinamik değişken yok . OCaml hakkında iyi bir şeydi. OCaml hakkında hala iyi bir şey.
İsteğe bağlı ~ argümanlar emmek . İsteğe bağlı argümanlar kaya. F # 'a isteğe bağlı bağımsız değişkenler eklemelerini sağlamak için Microsoft'u kötüleştirdim.
Kısmi argüman uygulaması tutarsızlığı . Eh?
Aritmetik okunabilirliği . OCaml ~ 8 yıl önce kullanmayı bıraktığımdan beri bu durum değişti. Görünüşe göre şimdi yapabilirsiniz Int64.((q * n - s * s) / (n - 1L))
.
Sessiz ad çakışması çözümü . Lisp'de olduğu gibi REPL'de tam gelişmiş yazılım geliştirme yapmaya çalışıyordu. Bunu OCaml'de yapma. Yalnızca test, tek kullanımlık kod çalıştırma ve etkileşimli teknik hesaplama için REPL'e uygun dosyaları ve toplu derlemeyi kullanın.
Değerlendirme sırası . Yazarken bu yanlıştı. Değerlendirme sırası OCaml'de tanımlanmamıştır.
Nesne girişi / çıkışı yok . Bu sorunu zaten çözen bir üçüncü taraf kütüphanesine atıfta bulundu.
Derleyici ilk hatadan sonra durur . Eh?
Yerel olarak derlenmiş yürütülebilir dosyalar için yığın izlemesi yok . Sabit.
Hata ayıklayıcı berbat . Hata ayıklayıcıyı hiç kullanmadım. Statik tip kontrolü hemen hemen tüm hatalarımı yakalar.
GC berbat . OCaml'nin GC'sinin büyük bir sorun dışında mükemmel olduğunu gördüm: küresel kilit paralel programlamayı önler.
Örtülü ileri bildirim yok . Karşılıklı özyineleme tüm ML'lerde tasarımla açıktır. Tek gariplik, type
tanımlar varsayılan olarak özyinelemeli iken, let
bağlamalar varsayılan olarak özyinelemesizdir .
İşlev turu yok . OCaml'ın hala çıplak bir kemik stdlib var ama Jane St's Core gibi üçüncü taraf kütüphaneleri round
ve arkadaşları.
Listeler . List.map
hala kuyruk özyinelemeli değil. Bunun gibi ciddi hataları düzeltmek için yamalar gönderdim ve sürümlerde görünmeden önce yıllarca beklemek zorunda kaldım. Listeler elbette hala değişmez. Ve öyle olmalılar.
Hız . Büyük polimorfik varyantların derlenme sürelerinin giderildiğine inanıyorum.
Örüntü eşleme . Gerçekliğin üzerinde bir umut zaferi. Lisp topluluğu bunu başaramadı. Bu yüzden 10. kuralım: Yeterince karmaşık olan herhangi bir Lisp programı, OCaml'nin desen eşleştirme derleyicisinin yarısının geçici, gayri resmi olarak belirtilen ve hataya dayalı bir uygulamasını içeriyor.
ancak güzel yazıcıyı üst düzeyden bir kütüphane çağrısı olarak çağırarak gerekli tür bilgilerini verebilirsiniz. Ve güzel yazıcıların otomatik olarak oluşturulmasını sağlamak için veri yapılarına açıklama eklemek için kullanabileceğiniz bir makro vardı.