F # berasal dari OCaml, tetapi item utama apa yang hilang atau ditambahkan? Khususnya saya ingin tahu apakah sumber daya yang tersedia untuk belajar OCaml juga berguna bagi seseorang yang ingin belajar F #.
F # berasal dari OCaml, tetapi item utama apa yang hilang atau ditambahkan? Khususnya saya ingin tahu apakah sumber daya yang tersedia untuk belajar OCaml juga berguna bagi seseorang yang ingin belajar F #.
Jawaban:
Perbedaan utama adalah bahwa F # tidak mendukung:
Selain itu, F # memiliki sintaks yang berbeda untuk parameter berlabel dan opsional.
Secara teori, program OCaml yang tidak menggunakan fitur-fitur ini dapat dikompilasi dengan F #. Mempelajari OCaml adalah pengantar yang masuk akal untuk F # (dan sebaliknya, saya bayangkan).
Daftar lengkap perbedaan ada di sini (catatan: archive.org penggantian tautan mati).
Pertanyaan ini telah dijawab untuk beberapa waktu sekarang, tetapi saya cukup terkejut bahwa sebagian besar jawaban mengatakan apa fitur OCaml yang hilang dalam F # - ini pasti baik untuk mengetahui apakah Anda ingin port program OCaml yang ada ke F # (yang mungkin merupakan motivasi sebagian besar artikel yang dirujuk). Namun, ada banyak fitur yang menjadikan F # bahasa yang berbeda (bukan hanya versi terbatas OCaml untuk .NET!) Berikut adalah beberapa hal yang ditambahkan dalam F #:
+
untuk semua tipe numerik serta tipe Anda yang mendukungnya.Dan, jujur, saya pikir itu juga layak disebut Visual Studio IDE. Ini bukan bagian dari bahasa, tetapi benar-benar meningkatkan pengalaman pengguna (dukungan IntelliSense di Visual Studio sangat bagus!)
Jika Anda melihat daftar, ada banyak hal yang sebagian besar berkontribusi pada popularitas F #, jadi itu lebih dari sekadar "OCaml tanpa functors". F # jelas didasarkan pada OCaml (dan mengambil ide dari bahasa lain seperti Haskell) dan berbagi banyak aspek dengan mereka, namun ada juga banyak hal lain. Saya kira tanpa hal-hal seperti alur kerja asinkron, .NET style OO dan meta-programming, Divisi Pengembang Microsoft tidak akan pernah memasukkan F # dalam Visual Studio 2010.
<@ a @>
, apalagi ketik definisi suka <@ type t = int @>
dan tidak bisa menangani tata bahasa yang sewenang-wenang apalagi extenderble lexers dan parser seperti yang dilakukan Camlp4. Kurangnya sistem makro yang layak adalah satu kekurangan tetapi, IMHO, kurangnya lexers dan parser yang layak untuk F # adalah hambatan yang jauh lebih serius. Saya sebenarnya menyarankan pengembang untuk membuat lexer dan parser mereka menggunakan OCaml, membatasi diri mereka pada subset yang mendukung F # dan memindahkannya kembali ke F # untuk mendapatkan manfaat dari dukungan alat unggulan OCaml!
Saya selalu menggambarkan F # sebagai sepupu dari OCaml karena OCaml memiliki banyak fitur yang F # tidak miliki dan tidak pernah mungkin didapat. F # lebih dekat hubungannya dengan bahasa CAML sebelumnya. Secara khusus, F # memiliki dukungan yang sangat terbatas untuk abstraksi dan tidak ada dukungan untuk mengetik struktural (seperti OCaml ini benda-benda dan varian polimorfik ) sama sekali.
Berlawanan dengan apa yang ditulis beberapa responden, F # memang memiliki (terbatas) dukungan untuk berlabel ("bernama") dan argumen opsional.
Namun, ini semua adalah fitur-fitur canggih dan Anda tentu dapat mulai memahami ide-ide dasar di balik pemrograman fungsional gaya-kecil OCaml menggunakan sumber daya tentang OCaml. Perbedaan utama pertama yang akan Anda temukan adalah masalah skala besar seperti enkapsulasi dan abstraksi yang diselesaikan dengan cara yang sangat berbeda di OCaml dan di F #. Jika Anda ingin mempelajari cara melakukannya di F #, satu-satunya literatur yang tersedia adalah artikel ini tentang struktur data yang murni fungsional .
Saya juga telah menemukan bahwa sistem modul OCaml yang luar biasa memudahkan parameter parameter kode lebih dari jenis (seperti struktur data) tetapi alternatif OOP tidak hanya mengerikan tetapi hampir seluruhnya tidak digunakan di .NET. Selain itu, ketika mencoba untuk menulis struktur data parameter-elegan, saya memukul lusinan bug di kompiler F # karena tidak ada yang bahkan pernah mencoba melakukan ini sebelumnya. F # stdlib memang mengandung beberapa implementasi struktur data yang bagus tetapi sebenarnya tidak dapat digunakan kembali, yaitu itu adalah pekerjaan cut'n'paste.
F # dan OCaml adalah kelas taksonomi dalam keluarga bahasa ML, yang mencakup seluruh kumpulan hewan aneh lainnya juga. F # lebih baru dari OCaml, dan ia tidak memiliki functors [fungsi modul -> modul] atau tipe baris [kelas objek dan varian polimorfik]. Di antara mereka, kedua penyederhanaan itu mungkin membuat kurva belajar lebih mudah bagi seseorang yang mengembangkan platform .Net. Sayangnya, kedua fitur bahasa tersebut sangat kuat di OCaml, jadi membaca literatur OCaml untuk mendapatkan wawasan tentang cara membuat kode untuk F # mungkin akan menyebabkan frustrasi dini dengan yang kedua ketika itu mungkin merupakan alternatif yang sangat baik untuk C # di mana keduanya tersedia.
F # mendukung sintaks OCaml secara langsung. Mungkin tidak 100% kompatibel, tapi saya pikir itu cukup dekat.
http://plus.kaist.ac.kr/~shoh/fsharp/html/index.html
Berikut adalah daftar perbedaan (tidak yakin seberapa mutakhirnya)
http://plus.kaist.ac.kr/~shoh/fsharp/html/fsharp-vs-ocaml.html