Jawaban:
Ada banyak perbedaan, beberapa teknis, beberapa sosiopolitik. Saya telah mencoba untuk mengutamakan perbedaan yang lebih penting.
SML adalah bahasa dengan definisi dan standar. Itu stabil (dan sebenarnya telah dibekukan sehingga tidak dapat berkembang). Objective Caml adalah implementasi yang dikendalikan oleh sekelompok kecil di INRIA. Itu terus berkembang. (IMO evolusi dikelola dengan baik.)
SML memiliki banyak implementasi; Caml hanya punya satu.
Objective Caml memiliki sejumlah fitur tambahan, di antaranya yang paling menonjol mungkin adalah objek dan varian polimorfik.
Kedua bahasa tersebut memiliki model jenis rekaman yang sangat berbeda. Singkatnya, di Caml, nama bidang rekaman harus unik, di mana di SML, dua tipe rekaman berbeda dalam lingkup yang sama mungkin memiliki nama bidang yang sama. Keunikan ini dapat membuat porting dari SML ke Caml sedikit rumit.
Ada beberapa perbedaan sintaksis.
Perpustakaan dan fungsi standar sangat berbeda. Pustaka Caml sangat penting, sedangkan Pustaka Dasar Standar SML lebih fungsional. Misalnya, komposisi fungsi adalah primitif level atas di SML; itu bukan bagian dari perpustakaan Caml. Pustaka string Caml tidak menyediakan fungsi lipat (setidaknya tidak sejak versi 3.08). Penerapan banyak List
fungsi Caml tidak aman untuk daftar yang sangat panjang; mereka meledakkan tumpukan.
Sistem tipe sedikit berbeda: Di Caml, anotasi tipe pada ekspresi e : ty
diterima jika tipe ty
menyatu dengan tipe e
. Di SML, e : ty
diterima hanya jika tipenya ty
adalah turunan dari tipe e
. Perbedaan ini membuat anotasi di Caml kurang berguna dalam praktiknya, karena tidak mungkin menggunakan anotasi tipe untuk menegaskan bahwa ekspresi polimorfik.
Caml memiliki hubungan yang jauh lebih masuk akal dan masuk akal antara antarmuka (disebut jenis modul atau tanda tangan ) dan implementasi (konkret) (disebut modul atau struktur ) daripada SML. Dalam SML hampir semua hal berjalan dan Anda harus bergantung pada programmer untuk membuat kesepakatan yang baik. Di Caml, konvensi yang baik dibuat dan diberlakukan oleh kompilator.
Di SML, operator aritmatika kelebihan beban untuk diterapkan pada data floating-point dan integer. Di Caml, operator tidak kelebihan beban; operator floating-point diberi notasi dengan titik ekstra.
Di SML, pemrogram dapat mengontrol prioritas dan asosiasi operator infix. Di Caml, ini ditentukan oleh karakter pertama dari nama operator. Pembatasan ini membatasi manfaat dari kemampuan untuk menentukan notasi infix Anda sendiri.
Untuk analisis yang lebih detail lengkap dengan komentar editorial, Anda juga bisa melihat halaman perbandingan Adam Chlipala .
e : 'a . ty(a)
dimungkinkan dan bermakna.
Untuk detail tentang perbedaan sintaksis yang disebutkan Norman Ramsey, berikut adalah beberapa halaman web:
OCaml menambahkan fitur orientasi objek dan memiliki beberapa perbedaan sintaks kecil.