2 poin oleh GN⁺ 2025-11-08 | 1 komentar | Bagikan ke WhatsApp
  • 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
    Iklan
  • 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
    Iklan

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

 
GN⁺ 2025-11-08
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 match yang rumit menjadi satu baris sehingga keterbacaannya menurun
    Dokumentasinya juga terlalu ringkas dan hampir tidak ada contoh
    OPAM secara teori terlihat bagus, tetapi dalam praktiknya banyak bug, bahkan pernah ada bug yang membuat curl tidak ditemukan jika Anda tergabung dalam lebih dari 32 grup Unix
    Anotasi 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

    • Jika ingin memakai OCaml di Windows, saya justru merekomendasikan F#
      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
    • Saya sempat mencari apakah bug curl di OPAM itu benar ada, dan menemukannya di issue #5373
      Ternyata ini sebenarnya masalah terkait musl, yang muncul karena OPAM dibangun dengan binary tersebut
    • Sebagian besar ini memang masalah learning curve, tetapi bahkan setelah terbiasa pun keterputusan ekosistem tetap ada
      ocamlformat jauh lebih baik jika diatur ke profil janestreet daripada default-nya
      Masalah anotasi tipe pada signature fungsi bisa diatasi dengan menyediakan file .mli, tetapi kebanyakan orang tidak melakukannya
      Sebagai gantinya, plugin OCaml untuk VS Code memberi pengalaman terbaik bagi pemula
    • Saya setuju soal obsesi terhadap linked list tunggal
      Di hardware modern, rasanya koleksi default seharusnya vector
    • Saya sepenuhnya setuju bahwa dukungan Windows itu buruk
      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

    • Memang banyak Googler yang tidak puas dengan keputusan tim Go
  • Setiap kali melihat kata “ML”, jantung saya masih sempat berdebar, lalu kecewa setelah sadar bahwa itu bukan Meta Language melainkan Machine Learning

    • ML berarti Meta Language, dan LLM berarti grup riset Languages and Logic Montreal
    • Menurut saya, kebingungan seperti itu malah lebih baik
      Saya lebih tidak suka lagi dengan penyalahgunaan kata “AI” belakangan ini
      Sebelum AGI sungguhan muncul, saya berharap orang-orang tidak memakai istilah AI
    • Saat pertama kali mencoba ML di mesin 80286 pada akhir 1980-an, saya benar-benar terkejut
    • Dulu saya pernah menulis komentar serupa dan kena banyak downvote, jadi menyenangkan melihat kali ini responsnya lebih bagus
  • 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”

    • Saya tidak setuju dengan anggapan bahwa popularitas Python disebabkan oleh AI
      Torch awalnya berbasis Lua, lalu dipindahkan ke Python yang saat itu sudah sangat populer
    • Saya rasa alasan functional programming tidak menjadi arus utama adalah sikap elitis
      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

    • F# makin lama makin kurang kompatibel karena perubahan CLR, dan compiler-nya lambat serta tooling-nya tidak stabil
      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
    • Integrasi F# dengan .NET adalah pedang bermata dua
      Library-nya banyak, tetapi kebanyakan tidak terasa F#-ish
      OCaml punya ekosistem native yang lebih besar
    • Di kantor, kami mengembangkan bagian yang intensif komputasi dengan F#
      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
    • OCaml jauh lebih kuat daripada F# dalam hal functor, first-class module, GADT, dan sistem objek
      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

    • Saya juga suka SML, tetapi sistem objek di OCaml justru kurang dihargai
      Ini berguna untuk record dengan structural typing atau open recursion, serta binding JS seperti Js_of_ocaml
    • Saya sedang menulis compiler dengan SML, dan ada batasan aneh seperti overloading int/real atau value restriction
      Tidak adanya dukungan record update juga merepotkan
    • Dulu saya lebih suka SML, tetapi saat itu “bahasa yang diawali O” sedang tren sehingga OCaml yang lebih mendapat perhatian
  • 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

    • OCaml adalah bahasa seperti Velvet Underground
      Yang mempelajarinya memang sedikit, tetapi hampir semua yang mempelajarinya kemudian membuat bahasa baru
      Sumber
    • Meski begitu, OCaml benar-benar menjalankan sistem perdagangan bernilai miliaran dolar
    • Saya tidak paham apa yang dimaksud dengan “gesekan”
      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

    • Popularitas dan tingkat disukai justru punya hubungan berkorelasi negatif
      Semakin banyak dipakai suatu bahasa, semakin banyak juga yang membencinya,
      sementara bahasa yang asing lebih mudah dinilai terlalu tinggi
    • Jika “bagus” dalam musik itu subjektif, maka “bagus” dalam bahasa bisa diobjektifkan lewat efisiensi menyelesaikan masalah
      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

    • Sebenarnya yang lebih membuat saya penasaran adalah mengapa F# tidak lebih populer
      Padahal ia bisa langsung memakai ekosistem .NET, tetapi justru lebih tidak dikenal daripada OCaml
    • Elixir punya ekosistem dan tooling yang sangat baik, dan sintaksnya lebih akrab daripada Erlang
      Dalam praktiknya, banyak juga perusahaan yang memakainya untuk backend SaaS
    • Tetapi kebanyakan organisasi merasa paradigma fungsional yang berpusat pada rekursi itu memberatkan
      Karena itu bahasa FP tetap menjadi niche
    • Secara pribadi, Elixir terasa lebih ringan secara mental dan lebih fleksibel daripada OCaml
    • Gleam juga menarik, tetapi bahasa yang tidak bisa dikompilasi tidak cocok untuk pekerjaan saya
  • 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