Mengapa OCaml tidak lebih populer?

86

Saya selalu mendengar bahwa C adalah yang bahasa pilihan untuk menggunakan untuk embedded system, atau apapun yang perlu dijalankan pada kecepatan maksimum. Saya tidak pernah mengembangkan kesukaan untuk C, terutama karena saya tidak suka pointer aritmatika dan bahasanya tidak seperti anak tangga di atas assembler.

Di sisi lain, bahasa ML adalah fungsional, bahasa yang dikumpulkan sampah, dan OCaml bahkan memiliki model objek, namun mereka memiliki reputasi sebagai secepat C. bahasa ML memiliki abstraksi yang dapat diminta siapa pun untuk menulis tingkat tinggi, ringkas kode, namun tetap mempertahankan kecepatan yang diperlukan untuk menulis aplikasi berkinerja tinggi.

OCaml khususnya dapat digunakan di mana saja yang secara tradisional digunakan C, seperti untuk perangkat yang disematkan, driver grafis, sistem operasi, dll. Dengan semua hak, OCaml seharusnya telah mengambil alih dunia sekarang, tetapi hampir tidak ada orang yang mendengar bahasa itu sendirian. menggunakannya

Ini adalah pertanyaan subyektif, tetapi mengapa OCaml dan ML bahasa lainnya tetap tidak jelas, sementara C dan bahasa lainnya menjadi populer?

Juliet
sumber

Jawaban:

82

Jawaban pertama adalah bahwa tidak ada yang benar-benar tahu mengapa bahasa menjadi populer, dan siapa pun yang mengatakan sebaliknya tertipu atau memiliki agenda. (Seringkali mudah untuk mengidentifikasi mengapa suatu bahasa gagal menjadi populer, tapi itu pertanyaan lain.)

Dengan penafian itu, berikut adalah beberapa hal yang sugestif, paling penting terlebih dahulu:

  • Compiler C matang pertama muncul pada tahun 1974; kompiler OCaml matang pertama kali muncul pada akhir 1990-an. C memiliki kepala mulai 25 tahun.

  • C dikirimkan bersama Unix, yang merupakan "aplikasi pembunuh" terbesar sepanjang masa. Untuk waktu yang lama, setiap departemen CS di dunia harus memiliki Unix, yang berarti bahwa setiap instruktur dan semua orang yang mengambil kursus CS memiliki kesempatan untuk diekspos ke C. OCaml dan ML masih menunggu aplikasi pembunuh pertama mereka. (MLdonkey itu keren, tapi itu bukan Unix.)

  • C mengisi ceruknya dengan sangat baik sehingga saya ragu tidak akan ada lagi bahasa tingkat rendah yang hanya dikhususkan untuk pemrograman sistem. (Untuk melihat bukti yang mendukung, baca makalah Dennis Ritchie tentang sejarah C dari HOPL II.) Bahkan tidak jelas apa ceruk OCaml, dan ceruk Standar ML hanya sedikit lebih jelas. Jadi Caml dan ML memiliki beberapa pesaing, sedangkan C membunuh satu-satunya pesaing (BLISS).

  • Salah satu kekuatan besar C adalah bahwa model biayanya sangat dapat diprediksi: mudah untuk melihat setiap fragmen kecil dari kode C dapat secara instan mendapatkan ide yang akurat tentang operasi mesin apa yang harus dilakukan untuk mengeksekusi kode itu. Model biaya OCaml jauh lebih tidak jelas, terutama karena alokasi memorijauh lebih eksplisit, dan keseluruhan biaya alokasi memori (sama dengan biaya alokasi ditambah biaya yang dikeluarkan selama pengumpulan sampah) tergantung pada properti yang muncul seperti berapa lama objek hidup dan objek mana yang merujuk ke objek lain. Hasil akhirnya adalah bahwa kinerja sulit diprediksi, dan bahkan sulit untuk dianalisis setelah fakta. (Alat memori profiling OCaml tidak seperti yang seharusnya.) Akibatnya, OCaml tidak baik untuk aplikasi di mana kinerja harus sangat dapat diprediksi --- seperti sistem embedded.

  • C adalah bahasa dengan standar dan banyak kompiler. OCaml adalah artefak perangkat lunak: satu-satunya kompiler adalah dari satu sumber, dan kompiler adalah standar. Dan standar itu berubah dengan setiap rilis. Untuk orang-orang yang menghargai stabilitas dan kompatibilitas, bahasa sumber tunggal dapat mewakili risiko yang tidak dapat diterima.

  • Siapa pun yang memiliki kursus kompiler sarjana setengah layak dan banyak kegigihan dapat menulis kompiler C yang lebih atau kurang berfungsi, dan dengan kinerja yang memadai. Untuk mendapatkan implementasi OCaml atau ML secara langsung membutuhkan lebih banyak pendidikan, dan untuk mendapatkan kinerja yang sebanding dengan kompiler C naif membutuhkan lebih banyak pekerjaan. Ini berarti ada lebih sedikit penghobi hobi untuk bermain-main dengan bahasa seperti OCaml, jadi lebih sulit bagi masyarakat untuk mengembangkan pemahaman yang mendalam tentang bagaimana mengeksploitasinya.

Norman Ramsey
sumber
5
OCaml adalah dialek ML yang relatif baru, lahir sekitar waktu yang sama dengan Jawa. Namun, ML kembali ke tahun 1973 dengan dialek besar pertama, SML sedang dikembangkan pada tahun 1978. Dialek-dialek ML menemukan ceruk dalam pembuktian dan penelitian teorema, tetapi sejak itu telah menjadi standar industri di lembaga keuangan.
Juliet
15
Saya tidak akan menyebut ML "standar industri di lembaga keuangan." (Dan saya tidak mengatakan ini karena saya menulis aplikasi keuangan di Haskell. :-)) Di dunia komersial, sementara industri keuangan mungkin memiliki program pemrograman fungsional yang jauh lebih besar daripada yang lain, itu masih belum digunakan secara luas. : dalam pengalaman saya, C ++ dan Java mendominasi. Perusahaan seperti Jane Street adalah pengecualian, bukan aturannya.
8
Perl adalah "perangkat lunak artefak" - satu-satunya definisi dari Perl adalah "bahasa yang diterjemahkan oleh perl (1)" - namun itu agak populer. Python dan Ruby adalah "artefak perangkat lunak" untuk waktu yang lama.
5
@ Chris: IMO ini adalah salah satu alasan Perl kehilangan mindshare.
Norman Ramsey
5
Mengenai prediktabilitas, saya pikir OCaml benar-benar mengalahkan C di bidang itu, dengan tingkat optimisasi yang diharapkan dari kompiler C, dan kerapuhan banyak dari optimasi tersebut. Kompiler OCaml sangat literal tentang kompilasi kode Anda.
63

Saya pikir masalah dengan OCaml adalah tidak terlalu berguna "di luar kotak". Alasan akhirnya mengapa orang menggunakan bahasa adalah karena memiliki perpustakaan yang mereka butuhkan. Dengan tidak adanya "out of the box", tidak ada yang cukup jauh dalam proyek untuk menyadari bahwa mereka perlu menulis perpustakaan. Hasilnya adalah bahasa tanpa perpustakaan, yang membuatnya sulit untuk menulis "aplikasi nyata".

Saya pikir inilah yang menderita OCaml - tidak ada yang mau memulai "proyek nyata" di dalamnya karena semua yang ada adalah bahasa pemrograman. Yay, saya bisa menambahkan dua dan dua dan mencetak hasilnya. Hasilnya adalah kumpulan perpustakaan yang sebagian besar adalah perangkat akademis (penulis mendapatkan gelar PhD dan melanjutkan), yang tidak terlalu membantu untuk mempraktikkan programmer.

(Saya tahu ada pekerjaan yang sedang dilakukan untuk mengubah ini, dengan proyek-proyek seperti "Termasuk Baterai". Kembali ke sini dalam 5 tahun, dan mungkin OCaml akan lebih populer.)

Ada beberapa pengecualian untuk aturan ini. Java dimulai dengan tidak ada perpustakaan, tetapi Sun membayar orang untuk menulis semuanya di rumah, dan kemudian mereka memasarkannya. Sertifikasi Java, perangkat keras khusus Java, buku Java, kelas Java, dll. Kemudian bahkan meyakinkan sebagian besar universitas untuk mengajarkannya secara eksklusif, meskipun itu bukan bahasa yang sangat baik untuk digunakan untuk mempelajari pemrograman.

Hasilnya adalah popularitas. Uang dapat memecahkan banyak masalah.

Di arena bahasa fungsional, kita dapat melihat bahwa Haskell menjadi sangat populer. Saya pikir sebagian besar popularitas adalah karena orang-orang seperti don yang menulis perpustakaan yang bermanfaat, dan tidak pernah berhenti menjual bahasa. Setiap hari Anda melihat beberapa artikel Haskell tentang Pemrograman Reddit. Ini membuatnya terjebak dalam pikiran orang-orang sampai mereka akhirnya memutuskan, "Saya akan mencoba Haskell." Ketika mereka melakukannya, mereka melihat hal-hal berguna seperti kerangka kerja web, database objek, pustaka OpenGL, dan pustaka pemrosesan XML. Ini berarti bahwa mereka benar-benar dapat melakukan sesuatu yang bermanfaat "Right Now". Jadi antara potensi untuk menjadi produktif dan banyak mendengar tentang itu, Haskell telah mendapatkan banyak popularitas.

CL memiliki banyak perpustakaan yang sama dengan Haskell dan hampir secepatnya, tetapi tidak ada yang membicarakannya, sehingga "terasa mati". Memang #lisp jauh lebih tenang daripada #haskell, tetapi Lisp masih merupakan bahasa yang sangat produktif dengan banyak perpustakaan. Tidak ada bahasa lain yang memiliki SLIME. Tetapi pemasaran sangat penting, dan Haskell melakukannya lebih baik daripada Lisp atau OCaml (dan bersaing untuk pengguna yang sama).

Akhirnya, beberapa orang tidak akan pernah "mendapatkan" pemrograman, jadi dengan menghancurkan model mental mereka (variabel adalah kotak dengan nilai, kode dijalankan dari atas ke bawah) akan memastikan bahwa mereka tidak menggunakan bahasa Anda. Jenis programmer ini adalah persentase besar dari populasi pemrograman, jadi ini lebih lanjut membatasi kemungkinan penggunaan bahasa abstrak seperti Lisp, Haskell, dan OCaml.

Jrockway
sumber
45
Ini mungkin benar 10 tahun yang lalu. Beritahu saya kapan saya bisa "cabal install" pustaka OCaml. Bagaimanapun, hanya karena saya mengatakan sesuatu yang buruk tentang bahasa favorit Anda tidak berarti Anda harus berhenti menggunakannya. Jadi tidak perlu emosional.
5
Tidak, maksud saya pemrograman pada umumnya. Jika Anda tidak dapat memahami pemrograman fungsional, Anda mungkin juga tidak dapat memahami konsep lain.
8
Saya tidak membeli ini. OCaml memiliki banyak perpustakaan untuk hal-hal dasar pemrograman sehari-hari, dan jika menjadi lebih populer, orang akan menulis lebih banyak. Setiap bahasa dimulai dengan beberapa perpustakaan.
8
Bagaimana dengan tautan ke perpustakaan ini?
4
Mengapa lebih dari 0 orang menyukai seseorang yang mengklaim bahasa tidak memiliki implementasi tabel hash yang dapat digunakan? Saya tidak tahan bahasa yang membangun omong kosong tidak berguna seperti ekspresi reguler dan kamus di dalamnya, bahasa harus dipisahkan dari mungkin dari perpustakaan, untuk menjaga TCB kritis turun. Bahasa yang bergantung pada kamus untuk menyelesaikan sesuatu adalah omong kosong.
Longpoke
22

Saya suka OCaml banyak sebagai bahasa. TAPI...

Dukungan alat tidak ada. Debugger hanya berfungsi OK tapi tidak bekerja di windows (terakhir saya periksa) dan tidak ada banyak alat pengembangan yang tersedia untuk itu.

Sistem tipenya, kadang-kadang, agak terlalu kuat. Untuk seseorang yang tidak mengerti cara kerja inferensi tipe atau sistem tipe ML secara umum, fakta bahwa ia tidak dapat menambahkan bilangan bulat ke float adalah langsung mematikan.

Perpustakaan standar kadang-kadang dapat memiliki perasaan yang tidak konsisten.

Model objek tampaknya agak ditempelkan dan perpustakaan standar jarang menggunakannya, sebagai gantinya memilih untuk perpustakaan berbasis modul.

Ada banyak hal lain yang pada dasarnya sama dengan bahasa yang tidak merasa "dipoles" dan yang membuat orang menjauh selama periode yang sangat kritis ketika mereka mengambil bahasa dan mencoba memutuskan apakah mereka menyukainya atau tidak.

Saya pikir warisan terpentingnya adalah bahwa hal itu, bersama dengan dialek ML lainnya, telah memiliki pengaruh yang sangat kuat pada bahasa fungsional lainnya. Sebagian besar bahasa fungsional generasi saat ini mengambil elemen terbaik dari dialek ML dan memperbaiki beberapa gangguan.


sumber
3
Saya tidak akan mengatakan sistem tipenya terlalu kuat, tetapi tidak cukup ekspresif, tipe kelas ala Haskell akan banyak membantu.
2
Ya, tetapi sebagian besar komentar ini tentang perasaan tidak puas berlaku lebih kuat pada C ++! Saya merasa ini sedikit melemahkan argumen Anda (meskipun saya setuju dengan itu).
Yttrill
2
Debugger OCaml, adalah satu-satunya yang saya tahu yang bisa mundur, juga maju.
ocodo
21

Sistem tertanam sering membutuhkan dua hal: kecepatan dan determinisme. OCaml dapat memberikan kecepatan, tetapi fakta bahwa ia memiliki pengumpul sampah membuatnya secara inheren tidak deterministik, dan untuk sistem real-time yang sederhana tidak akan berhasil.

ctacke
sumber
1
Tentu, tetapi Java dan PHP populer, dan Anda tidak dapat menggunakannya dalam sistem embedded. Kegunaan dalam sistem tertanam tidak memiliki banyak pengaruh terhadap popularitas bahasa.
3
Pertanyaan awal bertanya tentang sistem tertanam jadi saya memberikan alasan spesifik mengapa mungkin tidak digunakan. Dan sebagai catatan Anda dapat menggunakan Java - tidak hanya untuk waktu nyata (berlaku untuk C #).
2
Java sendiri bukan waktu nyata. Apa pun dengan mekanisme pengumpulan sampah tidak mungkin.
3
@ctacke: Itu tidak benar. Ada banyak pengumpul sampah waktu nyata. Implementasi Java menggunakannya dan Java digunakan dalam aplikasi waktu nyata.
Jon Harrop
18

Ini sedikit perbandingan apel dengan jeruk. OCaml adalah bahasa yang cukup muda [1] dan tidak pernah ada upaya serius dan berkelanjutan untuk mendorongnya ke arus utama (kecuali karya Microsoft saat ini dengan F #). Tidak seperti C, itu bukan lingua franca dari sistem operasi perusahaan yang paling banyak didukung dan ditiru (yaitu, UNIX). Tidak seperti Java, ia belum memiliki perusahaan besar yang mendorongnya sebagai platform komputasi generasi mendatang. Tidak seperti Perl, Python, dan Ruby, itu belum mengambil posisi di profil tinggi, ceruk berpengaruh (yaitu, ceruknya adalah bahasa pemrograman dan riset penalaran otomatis — tidak terlalu profil tinggi dibandingkan dengan pengembangan web). Karenanya, itu tidak super populer.

[1] Dalam keadilan, bahasa ML asli telah ada sejak 70-an. Tetapi OCaml tidak muncul sampai tahun 1996 dan tidak mewarisi pustaka ML standar. Secara praktis, ini adalah bahasa yang lebih muda dari C, C ++, Java, Python, Haskell, atau bahkan Ruby.

Chris Conway
sumber
Menurut Wikipedia, ML tidak jauh lebih muda, hanya satu tahun lebih muda (1972 untuk Cv. 1973 untuk ML). Sisa dari penjelasan Anda, saya pikir benar tentang uang.
1
Hah. Saya akan berkencan dengan C hingga akhir 60-an dan ML hingga awal 80-an (dan OCaml, khususnya, hingga akhir 90-an ... lebih muda dari Jawa, Python, dan bahkan Ruby), tapi saya rasa saya sedikit kurang.
ML tanggal kembali ke 1973, OCaml adalah dari tahun 1996.
ocodo
15

Komunitas OCaml gagal mengembangkan perpustakaan standar yang besar dan andal (melampaui apa yang hadir dengan OCaml saat ini) yang membuat pengembangan aplikasi menjadi mudah. Ada beberapa upaya untuk menyelesaikan masalah tetapi lihatlah Python atau Ruby untuk melihat apa yang hilang. OCaml adalah bahasa yang hebat jika Anda ingin menyelesaikan masalah algoritmik yang tidak terlalu bergantung pada keharusan berinteraksi dengan modul standar lanjutan seperti XML, jaringan, kalkulasi data, dan sebagainya, yang Anda tidak ingin terapkan sendiri.

Saya percaya bahwa bagian dari masalahnya adalah bagaimana modul dipetakan ke file oleh OCaml: secara konseptual semua file * .ml hidup dalam ruang nama yang sama dan direktori tidak memiliki arti. Ini membuat sulit bagi komunitas untuk mengembangkan perpustakaan. Jika kompiler akan memetakan hierarki direktori menjadi hierarki modul saya akan melihat peluang yang lebih baik bahwa perpustakaan standar akan berkembang. Namun, ini akan membutuhkan upaya yang cukup besar dari pengembang inti kompiler. (Saya tahu ada modul pengemasan tapi saya pikir ini adalah kludge.)

Masalah perpustakaan lain adalah kompatibilitas biner antara rilis kompiler. Cukup aman untuk mengatakan bahwa semua kode perpustakaan harus dikompilasi ulang setelah pemutakhiran kompiler. Ini membuatnya sulit untuk menyediakan rilis biner dari modul atau perpustakaan.

Christian Lindig
sumber
poin yang sangat bagus
cnd
11

Mungkin karena terlalu banyak orang yang diajarkan ML sebagai bagian dari pengantar hal-hal teoritis aneh dan membingungkan tentang jenis. Itulah yang terjadi pada saya.

Saya ditunjukkan ML dan Smalltalk sekitar waktu yang sama. Smalltalk baru saja terlihat keren, dan segera bisa dimengerti untuk apa OO dan bagaimana Anda bisa membuat barang-barang yang cantik dan interaktif di lingkungan ini. ML adalah tentang hal-hal matematika abstrak yang tampaknya tidak relevan dengan apa yang ingin saya lakukan. Dan tidak seperti C, tidak berjanji untuk membiarkan saya menulis game cepat dengan micros 16-bit.

Ini, tentu saja, sangat tidak adil dan subyektif. Tapi itu mungkin menjadi kisah nyata bagi kebanyakan orang.

Akhir-akhir ini saya kira pertanyaannya adalah: sekarang saya merasa perlu mengetahui hal-hal teoritis yang aneh dan membingungkan tentang jenis ini, mengapa saya memilih ML daripada Haskell atau Erlang?

interstar
sumber
Nah, Anda mungkin memilih Haskell daripada ML karena Haskell, dalam banyak hal, hanya ML yang ditingkatkan. Mengapa Anda memilih Erlang atau tidak, saya tidak yakin: Erlang tidak diketik secara statis dan, bagi saya, setelah beberapa pengalaman yang membuat frustrasi, saya akan meminum ML setiap hari.
Saya diajarkan Standar ML pada tahun 1996 di Universitas Cambridge dan benar-benar tidak menyukainya sebagian karena contoh-contohnya semua ilmu komputer teoretis (dan saya seorang ahli fisika) dan karena implementasinya menyedot (ketika saya mengeluh mereka memberi saya 100kLOC sumber kompiler ML yang bahkan tidak dapat dikompilasi dan menyuruh saya untuk memperbaikinya sendiri). Saya mengambil OCaml setelah PhD saya dan menemukan itu jauh lebih praktis. Adapun ML vs Haskell / Erlang, itu tergantung ML. OCaml jelas memiliki banyak fitur yang tidak dimiliki Haskell dan Erlang. Selain itu, fitur-fitur itu ternyata sangat penting dalam praktik.
Jon Harrop
9

Saya percaya bahwa masalah utama adalah kurangnya perpustakaan standar yang sebenarnya. Oleh karena itu, proyeksikan Baterai OCaml Termasuk , yang diharapkan akan memperbaiki situasi. Seharusnya memasuki fase Beta dalam beberapa hari, jadi Anda harus mengajukan pertanyaan lagi dalam satu tahun atau lebih.


sumber
10
Dua tahun kemudian, OCaml tampaknya tidak lebih populer.
5
Empat tahun kemudian, OCaml tampaknya tidak lebih populer.
Camilo Martin
8

Saya setuju bahwa dukungan Windows yang buruk, kurva pembelajaran yang curam dan perpustakaan standar yang ramping telah menahan semua penyerapan OCaml di masa lalu, tetapi saya akan menambahkan bahwa ada banyak sekali informasi tutorial (misalnya buku) tentang OCaml dibandingkan dengan bahasa utama seperti Java.

Juga, jenis orang yang tahu bahasa seperti OCaml sangat heterogen. Di antara programmer web, mungkin 1 dari 1.000 akan pernah mendengar tentang OCaml. Di antara orang-orang yang melakukan komputasi ilmiah di Universitas Cambridge, sekitar 90% dari orang yang saya kenal fasih di OCaml. Memang, saya adalah salah satu yang terakhir di antara teman-teman saya yang belajar OCaml. Kami bahkan menjalankan OCaml pada supercomputer 256 CPU kami ...

Saya juga harus menyebutkan bahwa masalah ini sedang ditangani dengan cepat. OCaml telah menemukan kembali dirinya untuk pemrograman web baru-baru ini dengan proyek-proyek seperti Ocsigen dan sudah memiliki setidaknya dua kisah sukses industri utama dalam konteks itu. Ada lagi buku baru di OCaml sekarang. Komunitas ini berkolaborasi pada perpustakaan standar komprehensif yang disebut "baterai termasuk" yang baru saja dirilis dan dirilis menjadi beta. Versi ramah multicore dari OCaml akan segera dirilis. Versi terbaru OCaml juga mencakup banyak fitur baru yang hebat seperti pola lazy dan pustaka OCaml kode asli yang di-load secara dinamis.

Jon Harrop
sumber
"kurva belajar yang curam": Berapa lama untuk menguasai C ++ mulai dari 0? Saya pikir jika OCaml lebih populer, lebih banyak orang akan merasa normal untuk berusaha mempelajarinya.
Giorgio
@Giorgio "Saya pikir jika OCaml lebih populer, lebih banyak orang akan merasa normal untuk berusaha mempelajarinya". Saya pikir lebih banyak orang belajar Python dan Ruby karena mereka relatif mudah dipelajari.
Jon Harrop
Tentu saja orang lebih suka belajar bahasa yang lebih sederhana (tapi saya tidak berpikir Ocaml jauh lebih kompleks daripada Ruby dan jelas kurang kompleks daripada C ++), intinya adalah bahwa sekali bahasa menjadi arus utama / populer, fakta bahwa itu kompleks adalah tidak dilihat sebagai masalah besar lagi. OCaml tidak populer dan oleh karena itu orang tidak menganggapnya berharga untuk mempelajarinya.
Giorgio
Saya setuju kecuali saya tentu menganggap kompleksitas C ++ telah menjadi masalah besar dan saya pikir sebagian besar orang yang saya temui juga yakin akan hal ini. Secara khusus, kesulitan memanipulasi kode C ++ secara terprogram adalah kehilangan peluang yang sangat besar.
Jon Harrop
Saya menemukan pernyataan Anda, "Di antara orang-orang yang melakukan komputasi ilmiah di Universitas Cambridge, sekitar 90% dari orang yang saya kenal fasih di OCaml." sangat mengejutkan. Sebagai seorang ahli fisika yang melakukan banyak pemodelan, saya melihat rekan-rekannya menggunakan banyak bahasa berbeda: C, C ++, Fortran, Java, Python, Perl, MATLAB, Mathematica, R cukup umum, dan beberapa lainnya juga. Tapi saya belum pernah melihat orang menggunakan OCaml. Saya mendengar orang berbicara tentang mungkin mempelajarinya, tetapi saya belum pernah melihat orang menggunakannya . Pencarian di scicomp.stackexchange.com tidak menghasilkan apa-apa lagi. Advokasi Anda untuk penggunaan ML ini memang ...
Szabolcs
6

Saya pikir bagian dari masalahnya adalah bahwa pemrograman fungsional bukan cara alami bagi kebanyakan orang untuk berpikir (dan saya mengatakan ini sebagai seseorang yang memiliki minat besar pada, dan penghargaan untuk, pemrograman fungsional). Ini diperparah oleh kenyataan bahwa sebagian besar programmer saat ini mulai belajar pemrograman prosedural (sebagian besar bahasa OOP populer masih prosedural di hati) dan bahasa fungsional sulit untuk menyesuaikan pada awalnya.

Ketika saya mulai kuliah, saya sudah tahu BASIC, C ++ dan Java dalam jumlah yang wajar dan sedikit bahasa assembly Pascal dan x86. Saya jauh dari seorang ahli tetapi telah mencapai kesimpulan (agak naif) bahwa semua bahasa pemrograman pada dasarnya sama dengan sintaksis yang sedikit berbeda. Pengantar kursus pemrograman kami menggunakan ML yang dengan cepat melemahkan saya dari gagasan itu. Saya mengalami kesulitan mendapatkan ML sekitar pada tahap karir pemrograman saya dan tidak benar-benar melihat titik pemrograman fungsional. Saya pikir dibutuhkan sedikit lebih banyak pengalaman dengan beberapa masalah pemrograman prosedural untuk benar-benar menghargai manfaat dari pendekatan fungsional.

Dosen ML kami sering mengklaim bahwa mengungkapkan masalah secara rekursif lebih 'alami' dan lebih mudah daripada menggunakan loop atau konsep prosedural lainnya. Saya tidak pernah diyakinkan oleh klaim itu dan masih belum membelinya. Fungsi rekursif kadang-kadang dapat memberikan solusi yang sangat elegan dan ringkas untuk masalah tetapi saya masih merasa itu cara yang tidak wajar untuk memikirkan masalah. Mungkin jika Anda memiliki latar belakang matematika yang sangat kuat tampaknya lebih intuitif tetapi saya tidak berpikir itu mudah bagi kebanyakan orang untuk berpikir secara rekursif. Mengingat sentralitas fungsi rekursif dengan paradigma pemrograman fungsional saya pikir ini juga dapat menjadi alasan untuk popularitas bahasa fungsional yang lebih rendah.

Ada juga efek umpan balik terhadap popularitas bahasa. Ketika saya mulai pemrograman saya ingin tahu bagaimana memprogram efek grafis dan game. Setelah mempelajari sedikit BBC BASIC dan kemudian QBASIC, saya secara alami menyelidiki apa bahasa yang paling umum digunakan oleh adegan demo dan programmer game dan mulai belajar C ++ dan x86 assembly. Saat ini beberapa programmer baru mungkin ingin tahu cara membuat aplikasi web dan akan tertarik untuk belajar PHP, Ruby atau C #. Ada beberapa area aplikasi untuk programmer pemula yang memiliki motivasi di mana jawaban untuk 'apa bahasa terbaik untuk belajar memprogram sesuatu seperti X' adalah 'Ocaml'.

Banyak alasan praktis yang diberikan untuk popularitas Ocaml yang terbatas (kurangnya perpustakaan yang matang, debuggers, IDE, dll.) Ditangani oleh dukungan resmi Microsoft untuk F # sebagai bahasa .NET class. Akan menarik untuk melihat apakah F # membantu membawa tingkat popularitas yang lebih besar untuk pemrograman fungsional.

mattnewport
sumber
Hubungan perulangan adalah salah satu hal yang selalu dipetakan dengan baik ke FP.
Jon Harrop
3
"pemrograman fungsional bukan cara alami bagi kebanyakan orang untuk berpikir": Pemrograman terstruktur bukanlah cara alami bagi saya untuk berpikir selama saya memprogram di Basic. Lalu saya pindah ke Pascal. Pemrograman berorientasi objek bukanlah cara alami bagi saya untuk berpikir selama saya memprogram dalam Pascal dan C. Kemudian saya pindah ke C ++ dan Java. Pemrograman fungsional juga tampak aneh bagi saya sampai saya mulai belajar Haskell dan bahasa FP lainnya, dan sekarang C ++ terlihat canggung untuk tugas-tugas tertentu. :-)
Giorgio
6

Saya percaya inti masalahnya adalah politik. Pengembang Ocaml pada dasarnya tertarik dalam penelitian dan tidak memiliki sumber daya untuk menyediakan dan memelihara perpustakaan yang kaya. Namun mereka juga tidak mau melepaskan kendali produk kepada masyarakat yang memang memiliki sumber daya ini, hasilnya adalah beberapa upaya untuk menyelesaikan masalah ini bergantung pada kerja sama yang tidak ada dan pendanaan perpustakaan pihak ketiga dan upaya ini gagal. Baterai akan gagal karena alasan yang sama, kecuali pengembang Ocaml mengubah sikap mereka.

Saya menggunakan Ocaml untuk mengembangkan produk saya, dan saya memiliki aturan sederhana: meminimalkan ketergantungan pada kode pihak ketiga. Ketika item pihak ketiga berguna, jika memungkinkan, sertakan kode sumber langsung dalam paket. Misalnya Skema OCS dan Dypgen adalah bagian penting dari pengurai Felix, jadi mereka disalin ke sumber kami sehingga kami memiliki kendali atas mereka. Kontrolnya agak ilusi (karena Dypgen setidaknya sangat kompleks sehingga tidak mungkin kita bisa mempertahankannya, tetapi setidaknya kita memiliki salinan yang menurut kami berfungsi :)

Saya tidak akan menggunakan baterai karena lisensinya terbatas, jadi saya tidak dapat menyalin sumbernya, dan saya tidak percaya pada kelayakan jangka panjangnya sebagai produk yang berdiri sendiri: satu-satunya cara saya dapat menggunakannya adalah jika itu adalah dimasukkan langsung ke dalam distribusi standar Ocaml.

Dalam dunia C ++, saya mungkin hanya mempertimbangkan untuk menggunakan Boost: meskipun ini adalah perpustakaan pihak ketiga bukan bagian dari Standar, ia memiliki dukungan komunitas yang sangat besar dan sebenarnya sangat baik disinkronkan dengan proses pengembangan Standar. Gagasan yang dikembangkan dan diuji dalam Boost menjadi jenis praktik yang ada yang dapat distandarisasi, dan proses standar cukup terbuka untuk memungkinkan partisipasi masyarakat.

Ocaml telah mendapatkan popularitas yang sebenarnya karena itu adalah produk yang sangat bagus, tetapi itu tidak cukup untuk membuatnya menjadi bahasa utama. Jawa kasar, dipopulerkan dengan miliaran dolar dari pemasaran dan pengembangan perpustakaan, tetapi pada akhirnya harus dilepaskan ke masyarakat untuk bertahan hidup sama sekali.

Yttrill
sumber
5

Saya telah menikmati pengkodean dalam ML dan C untuk berbagai proyek. Hal yang mencegah saya menggunakan ML dalam proyek tertanam (sebagian besar yang memiliki kendala waktu nyata, dan memerlukan validasi) adalah pengumpulan sampah.

Ada penelitian manajemen memori dengan wilayah (lihat MLKit ) tetapi kompleksitas implementasi dan pelatihan yang diperlukan untuk menggunakannya dengan benar (dan risiko yang menyertainya) telah menjadi hambatan untuk menggunakannya.

Doug Currie
sumber
3

IMHO, saya pikir masalah besar OCaml bukan dalam bahasa (yang hebat) tetapi pada orang-orang yang mengembangkannya dan akibatnya, lisensinya:

http://caml.inria.fr/ocaml/license.en.html

Mereka menggunakan lisensi Q Public untuk kompiler! Ya, lisensi ex-Trolltech yang digunakan untuk perpustakaan Qt! Lupakan tentang mendapatkan kontribusi apa pun dengan lisensi seperti itu.

Jika Anda memeriksa Penembakan Bahasa ( http://shootout.alioth.debian.org/ ) sekitar 7-8 tahun yang lalu, OCaml berada tepat di belakang C dan C ++ untuk kecepatan eksekusi. Sementara itu, bahasa lain (seperti Haskell) mendapat kompiler yang lebih baik (karena pendekatan komunitas yang berbeda, saya kira) dan sekarang kecepatan eksekusi OCaml tidak begitu besar seperti di masa lalu.

Singkatnya, saya tidak akan menggunakan OCaml, karena saya tidak melihatnya berjalan lebih baik tanpa beberapa peretas yang benar-benar baik membuat kompiler OCaml yang memiliki lisensi sumber terbuka BENAR-BENAR dan komunitas dengan perilaku sumber terbuka BENAR-BENAR.

Patrizio Rullo
sumber
Ada diskusi di milis beberapa waktu lalu tentang kinerja OCaml yang tampaknya buruk di Language Shootout. Anehnya, bahasa seperti C diizinkan untuk menggunakan pengalokasi memori yang tidak standar sedangkan bahasa sampah yang dikumpulkan tidak diizinkan untuk menyetel pengumpul sampah mereka sendiri ... Dan pengaturan default IIRC OCaml agak tidak sesuai untuk CPU saat ini.
bltxd
3

Nah jika ini tentang uang seperti kata @jrockway, kita akan lihat apakah F # akan mendapatkan popularitas seperti java atau C #.

Bagi saya, saya kira pengembang tidak merasa nyaman dengan cara fungsional dalam melakukan sesuatu (itu dari sesi F # di techdays 2009 di mana sekitar 10 orang mengatakan mereka tahu pemrograman fungsional di antara hampir 100 orang).

Saya memulai OCAML tahun ini, saya tidak pernah kotor dengan pemrograman fungsional, tapi sekarang saya benar-benar belajar hal-hal baru selalu dari OCAML dan cara fungsional untuk memecahkan masalah, (tapi saya tidak bisa mengatakan bahwa saya akan menyerah C # untuk menggunakan OCAML :)).

0xFF
sumber
10 tahun yang lalu akan lebih seperti 1 dari 100 orang yang mengetahui FP. ;-)
Jon Harrop
2

Yah, mungkin F # menjadi populer.


sumber
2

Tidak membantu bahwa c-> ocaml adalah transisi mental yang lebih besar daripada c-> lisp. Saya telah mempertimbangkan ocaml beberapa kali, dan selalu menemukan bahwa biaya / manfaatnya tidak ada untuk saya, jadi sisihkan lagi. Bukan konstruksi yang membuatnya tampak keras, yang sebenarnya terlihat sangat rapi. Itu mencoba mempelajari makna yang sama sekali berbeda untuk '!'. Gangguan setidaknya terlihat sangat berbeda sehingga mudah untuk menghindari salah menafsirkan potongan kecil itu sebagai c.


sumber
2

Jika Anda ingin bahasa digunakan dalam sistem embedded real-time, Anda memerlukan pointer dan Anda tidak mampu membeli GC.

Nemanja Trifunovic
sumber
1

Saya pikir alasan utamanya adalah karena terlalu sedikit pengembang yang tahu OCaml.

Dan ketika berbicara dengan pengembang lain (mereka yang mendengar sesuatu tentang Ocaml) saya selalu mendapat kesan bahwa mereka menganggap OCaml sebagai bahasa "hanya pendidikan" ... sedih tapi benar

Chris
sumber
Saya percaya sekarang ada 2 perusahaan dengan> 20 pengembang OCaml (Jane St. dan Citrix).
Jon Harrop
3
Wow! Seluruh dua perusahaan? :)
Yttrill
0

Saya sangat menyukai O'caml ... Saya telah mengimplementasikan banyak hal dengan menggunakannya, kompiler, juru bahasa, sistem untuk berkomunikasi dengan C ...

ketika saya mempelajarinya, masalah utama adalah bahwa pesan kesalahan tidak benar-benar jelas ... jadi misalnya, pada awalnya saya tidak benar-benar yakin kapan harus meletakkan ';' dan itu sangat sulit untuk menemukan bahwa sebenarnya; salah tempat ...

LB40
sumber