Alasan Mencintai OCaml (2023)
(mccd.space)- Pengembang yang mengutamakan pemrograman fungsional dan jaminan statis menilai tinggi desain OCaml yang seimbang setelah mencoba berbagai bahasa
- Dibandingkan sistem tipe yang kompleks dan kecepatan kompilasi yang lambat pada Haskell, OCaml menawarkan kesederhanaan sekaligus kepraktisan
- Mirip dengan kompilasi cepat dan runtime yang ringkas milik Go, tetapi tetap mempertahankan kekuatan bahasa fungsional seperti pattern matching dan sum type
- Dengan build cepat, biner statis, serta alat dokumentasi yang kaya (odig, utop), produktivitas dan aksesibilitas menjadi tinggi
- Keseimbangan antara kesederhanaan dan daya ekspresif, serta desain bahasa yang elegan, ditunjukkan sebagai daya tarik terbesar OCaml
Pengalaman dan Perbandingan Bahasa Pemrograman
- Melalui pengalaman mengembangkan perangkat lunak amatir maupun profesional dengan berbagai bahasa, penulis merangkum ciri-ciri bahasa yang baik
- Kecepatan kompilasi, runtime yang sederhana, jaminan statis yang kuat, komponen fungsional, performa yang baik, dan kualitas dokumentasi disebut sebagai faktor penting
- Haskell membantu mempelajari cara berpikir pemrograman fungsional, tetapi sintaks yang kompleks dan kompilasi yang lambat disebut sebagai masalah
- Kecenderungan komunitas untuk mengejar kompleksitas dan masalah runtime seperti space leak membuat pemeliharaan menjadi sulit
- Go memungkinkan kesederhanaan, kompilasi cepat, ekosistem alat yang baik, dan pemahaman kode yang ringkas
- Namun, desain yang konservatif, penanganan error yang bertele-tele, dan tidak adanya pemeriksaan null eksplisit membuat potensi bug lebih tinggi dan terasa tidak nyaman
- Ketiadaan REPL dan sikap negatif terhadap gagasan fungsional juga disebut sebagai keterbatasan
Kekuatan Utama OCaml
- OCaml dinilai sebagai bahasa yang memenuhi sebagian besar kriteria di atas
- Jaminan statis yang kuat: dukungan untuk sum type, polymorphic variant, dan pattern matching
- Runtime yang sederhana: menggunakan garbage collection sambil tetap beroperasi sebagai bahasa tingkat sistem
- Kecepatan kompilasi cepat: melalui sistem build Dune, lebih cepat daripada Haskell atau Rust
- Pembuatan biner tunggal yang ditautkan secara statis sehingga mudah didistribusikan
- Alat dokumentasi yang unggul: odig (penelusuran dokumentasi offline), utop (REPL), serta struktur pemisahan file antarmuka dan implementasi
- Fitur inferensi tipe otomatis meningkatkan efisiensi penulisan kode
- Struktur yang mendefinisikan tipe dalam file antarmuka membantu penelusuran kode yang lebih jelas
Desain Bahasa dan Kesan
- OCaml adalah bahasa lama, tetapi tetap mempertahankan rasa desain yang elegan
- Beberapa fitur berorientasi objek atau pustaka yang kompleks dinilai tidak perlu
- Secara keseluruhan, keseimbangan antara kesederhanaan dan daya ekspresif, serta dokumentasi yang baik dan ekosistem alat adalah daya tarik inti OCaml
- Penulis menilai tinggi OCaml sebagai “bahasa yang sederhana tetapi ekspresif”, dan menyebut kepuasan yang sulit ditemukan di bahasa lain
1 komentar
Komentar Hacker News
Saya sempat sedikit memakai OCaml, tapi menemui berbagai masalah
Dukungan Windows sangat buruk, baru di OCaml 5 membaik menjadi “cukup buruk”
Sintaksnya sulit dibaca manusia, dan saat terjadi kesalahan sintaks, salah satu karakter saja bisa memicu error sepanjang 1000 baris
Ocamlfmt bahkan mengubah
matchyang rumit menjadi satu baris sehingga keterbacaannya menurunDokumentasinya juga terlalu ringkas dan hampir tidak ada contoh
OPAM secara teori terlihat bagus, tetapi dalam praktiknya banyak bug, bahkan pernah ada bug yang membuat
curltidak ditemukan jika Anda tergabung dalam lebih dari 32 grup UnixAnotasi tipe pada signature fungsi bersifat opsional, sehingga mengurangi manfaat static typing
Ekosistemnya juga kecil, bahkan tidak ada fungsi bawaan untuk sekadar menyalin file
Kegigihan pada linked list tunggal juga tidak efisien
Meski begitu, tetap lebih baik daripada C atau Python, tetapi saya rasa saya tidak akan memilihnya dibanding Rust
Karena menargetkan CLR, deployment jauh lebih mudah, dan Anda bisa langsung memanfaatkan ekosistem .NET
Library NuGet untuk C# atau VB.NET hampir bisa dipakai begitu saja, jadi ekosistemnya sangat besar
Dokumentasi F# jauh lebih kaya dan contohnya juga banyak
Tautan referensi: F# Language Reference, F# Core Docs, F# Cheatsheet
curldi OPAM itu benar ada, dan menemukannya di issue #5373Ternyata ini sebenarnya masalah terkait musl, yang muncul karena OPAM dibangun dengan binary tersebut
ocamlformatjauh lebih baik jika diatur ke profil janestreet daripada default-nyaMasalah anotasi tipe pada signature fungsi bisa diatasi dengan menyediakan file
.mli, tetapi kebanyakan orang tidak melakukannyaSebagai gantinya, plugin OCaml untuk VS Code memberi pengalaman terbaik bagi pemula
Di hardware modern, rasanya koleksi default seharusnya vector
Dulu bahkan tidak bisa langsung memasang dari ocaml.org, harus lewat mingw atau wsl
Jadi pada praktiknya memang seolah tidak ada OCaml untuk Windows
Alasan para perancang bahasa Go hampir tidak mengadopsi ide dari functional programming itu jelas
Seperti kata Rob Pike, kebanyakan developer di Google masih muda dan terbiasa dengan bahasa keluarga C, jadi mereka membutuhkan bahasa yang mudah dipelajari
Karena perubahan pola pikir ke bahasa fungsional memakan banyak waktu, Go berusaha menghindari biaya itu
Setiap kali melihat kata “ML”, jantung saya masih sempat berdebar, lalu kecewa setelah sadar bahwa itu bukan Meta Language melainkan Machine Learning
Saya lebih tidak suka lagi dengan penyalahgunaan kata “AI” belakangan ini
Sebelum AGI sungguhan muncul, saya berharap orang-orang tidak memakai istilah AI
Jika melihat ceramah dari Richard Feldman, dijelaskan dengan baik mengapa bahasa fungsional gagal menjadi arus utama
Harus menjadi bahasa yang dimonopoli platform, punya killer app, atau didukung dana pemasaran besar
Alasan Python tumbuh pesat juga karena ia menjadi bahasa pusat ekosistem AI
Saya sendiri belajar pemrograman fungsional lewat OCaml dan pernah mengerjakan proyek dengan Haskell dan Zig, tetapi pada akhirnya tetap kembali ke kenyataan: “pakai alat yang bisa dipakai”
OCaml, Rust, dan Haskell populer sebagai “bahasa yang ingin dipelajari”, tetapi bukan “bahasa yang benar-benar dipakai luas”
Torch awalnya berbasis Lua, lalu dipindahkan ke Python yang saat itu sudah sangat populer
Kubu FP tidak peduli pada perubahan teknologi di dunia nyata, sementara bahasa seperti C, Pascal, Perl, Tcl menguasai pasar
Akibatnya FP tetap menjadi “para imam di dalam katedral”, sementara bahasa imperatif merebut massa
Saya pernah memakai F#, dan konkurensi berbasis Actor terasa mudah dipahami
Namun ketika Array mutable muncul, semuanya jadi lebih rumit
Saya penasaran apa alasan memilih OCaml dibanding F# untuk pekerjaan nyata
Sebaliknya, OCaml punya penghapusan global lock, kompilasi cepat, dan fitur kuat seperti modul, GADT, dan effect
F# masih unggul dalam dukungan Windows, SIMD, dan unboxed type, tetapi OCaml juga perlahan mengejar
Library-nya banyak, tetapi kebanyakan tidak terasa F#-ish
OCaml punya ekosistem native yang lebih besar
Interoperabilitas dengan C# bagus, tetapi memakai library F# dari C# adalah mimpi buruk
Akhirnya shell C# tetap dipertahankan, dan codebase menjadi campuran
Ekosistem .NET memang kaya, tetapi cara berpikir yang berpusat pada OOP sering bentrok dengan gaya FP
Visual Studio nyaman, tetapi kurang cocok untuk workflow berbasis CLI
Kecepatan kompilasi makin lama makin menurun, dan pengujian juga terasa canggung
Setelah mencoba OCaml, desain ergonomi bahasanya terasa jauh lebih alami
F# sering disebut “OCaml for .NET”, tetapi kenyataannya ia hanya bahasa keluarga ML dan nyaris merupakan bahasa yang berbeda
Karena OCaml adalah bahasa lama, rasanya fitur OOP-nya bisa saja dibuang, tetapi saya rasa Standard ML lebih lengkap
Ini berguna untuk record dengan structural typing atau open recursion, serta binding JS seperti
Js_of_ocamlTidak adanya dukungan record update juga merepotkan
Sejak awal 2000-an, OCaml selalu menjadi “bahasa yang nyaris sempurna”
Tetapi saat sumber gesekan itu hampir teratasi, bahasa-bahasa lain sudah lebih dulu menyerap ide-idenya
Yang mempelajarinya memang sedikit, tetapi hampir semua yang mempelajarinya kemudian membuat bahasa baru
Sumber
Sudah banyak proyek yang berjalan baik dengan OCaml, dan
dengan tambahan sistem effect, justru terasa semakin unggul
Popularitas dan kualitas itu berbeda
Populer ≠ unggul, sama seperti dalam musik
Semua hanya ditentukan oleh tren dan inersia
Semakin banyak dipakai suatu bahasa, semakin banyak juga yang membencinya,
sementara bahasa yang asing lebih mudah dinilai terlalu tinggi
Alasan OCaml kurang populer adalah karena kelompok pengguna yang bisa merasakan efisiensi itu kecil
Dan sikap dogmatis dari kubu FP juga ikut berperan
Saya rasa Elixir adalah bahasa yang mirip OCaml tetapi punya peluang lebih besar untuk menjadi populer
Ia punya kelebihan FP seperti immutability, pattern matching, dan model Actor,
serta berjalan stabil di atas runtime BEAM
Memang belum ada static typing, tetapi pemeriksaan tipe bertahap sedang diperkenalkan
Padahal ia bisa langsung memakai ekosistem .NET, tetapi justru lebih tidak dikenal daripada OCaml
Dalam praktiknya, banyak juga perusahaan yang memakainya untuk backend SaaS
Karena itu bahasa FP tetap menjadi niche
OCaml mirip Go dalam hal sama-sama merupakan bahasa sistem berbasis GC
Saya lebih menyukai GC daripada manajemen memori manual atau borrow checking
GC di bahasa D juga sangat bagus, tetapi masalahnya kata “GC” itu sendiri membuat orang takut