Rasa Keamanan Palsu . Ini tidak masuk akal.
Beberapa Tipe Dasar . OCaml sekarang memiliki byte dan byte array tetapi tidak ada string unicode bawaan, integer 16-bit, integer unsigned, float 32-bit, vektor atau matriks. Perpustakaan pihak ketiga menyediakan beberapa di antaranya.
Overflow Integer Diam . Tidak berubah tetapi itu tidak pernah menjadi masalah.
Modul Ketidakmampuan . Rekomendasinya bahwa fungsi dan modul harus bisa berubah adalah kemunduran suram untuk Lisp dan ide yang sangat buruk. Anda dapat menggantikan modul menggunakan include
jika Anda mau, tetapi Anda tidak dapat memutasinya, tentu saja.
Polimorfisme Menyebabkan Kesalahan Tipe Run-time . Ini adalah masalah besar dengan OCaml dan belum diperbaiki. Saat tipe Anda mengembangkan kesetaraan polimorfik, perbandingan dan hashing akan mulai gagal ketika mereka menemukan tipe seperti fungsi dan men-debug masalahnya sangat sulit. F # memiliki solusi hebat untuk masalah ini.
Tidak ada Macro . Ironisnya, ketika dia menulis OCaml ini sebenarnya memiliki dukungan penuh untuk makro tetapi mereka sekarang telah memutuskan untuk mengeluarkan fitur ini.
Pembungkus . Ini adalah masalah nyata dan belum diperbaiki. Masih belum ada try ... finally
konstruk dalam bahasa OCaml dan tidak ada wrapper yang mengimplementasikannya di stdlib.
Tempat . Tidak berubah tetapi tidak menjadi masalah.
Rekam neraka penamaan bidang . Struktur kode Anda dengan benar menggunakan modul.
Sintaks . Tidak berubah tetapi tidak menjadi masalah.
Tidak Ada Polimorfisme . Ini sebagian besar omong kosong ketika dia menulisnya dan tidak ada yang berubah.
Set fungsi yang tidak konsisten . OCaml masih tidak memiliki cons
fungsi. Tidak apa-apa. Saya tidak ingin hal-hal Lisp dalam bahasa saya, terima kasih.
Tidak ada variabel dinamis . Adalah hal yang baik tentang OCaml. Masih bagus tentang OCaml.
Opsional ~ menghisap argumen . Argumen opsional mengguncang. Saya mendesak Microsoft untuk meminta mereka menambahkan argumen opsional ke F #.
Inkonsistensi aplikasi argumen parsial . Eh?
Keterbacaan Aritmatika . Ini telah berubah sejak saya berhenti menggunakan OCaml ~ 8 tahun yang lalu. Ternyata sekarang bisa Anda lakukan Int64.((q * n - s * s) / (n - 1L))
.
Resolusi konflik nama diam . Dia mencoba melakukan pengembangan perangkat lunak penuh di REPL seperti yang Anda lakukan di Lisp. Jangan lakukan itu di OCaml. Gunakan file dan kompilasi batch yang beralih ke REPL hanya untuk pengujian, menjalankan kode sekali pakai, dan komputasi teknis interaktif.
Urutan evaluasi . Ini salah ketika dia menulisnya. Urutan evaluasi tidak ditentukan dalam OCaml.
Tidak ada input / output objek . Dia mengutip perpustakaan pihak ketiga yang sudah memecahkan "masalah" ini.
Compiler berhenti setelah kesalahan pertama . Eh?
Tidak ada jejak stack untuk executable yang dikompilasi secara asli . Tetap.
Debugger menyebalkan . Saya tidak pernah menggunakan debugger. Pengecekan tipe statis menangkap hampir semua bug saya.
GC menyebalkan . Saya menemukan GC OCaml luar biasa kecuali untuk satu masalah utama: kunci global mencegah pemrograman paralel.
Tidak ada deklarasi maju tersirat . Rekursi timbal balik secara eksplisit dirancang oleh semua ML. Satu-satunya keanehan adalah bahwa type
definisi bersifat rekursif secara default sedangkan let
binding adalah non-rekursif secara default.
Fungsi putaran tidak ada . OCaml masih memiliki stdlib, tetapi perpustakaan pihak ketiga seperti Jane St's Core menyediakan round
dan teman-teman.
Daftar . List.map
masih belum ekor rekursif. Saya mengirimkan tambalan untuk memperbaiki bug serius seperti ini dan harus menunggu bertahun-tahun sebelum muncul dalam rilis. Daftar masih tetap, tentu saja. Dan memang seharusnya begitu.
Kecepatan . Saya percaya waktu kompilasi untuk varian polimorfik besar telah diperbaiki.
Pencocokan pola . Kemenangan harapan atas kenyataan. Komunitas Lisp gagal melakukan ini. Oleh karena itu aturan ke-10 saya: program Lisp yang cukup rumit berisi implementasi ad-hoc, yang ditentukan secara tidak resmi dan dipenuhi bug dari setengah dari kompiler pencocokan pola OCaml.
tetapi Anda bisa memanggil printer cantik dari tingkat atas sebagai panggilan perpustakaan, memberikannya informasi jenis yang diperlukan. Dan ada makro yang dapat Anda gunakan untuk membubuhi keterangan struktur data agar printer cantik dibuat otomatis.