Mengapa F#?
(batsov.com)- F# adalah bahasa fungsional keluarga ML yang menargetkan .NET dan dikembangkan oleh Microsoft. Dibandingkan C# yang terutama berorientasi objek, F# berfokus pada paradigma pemrograman fungsional
- Artikel ini merangkum karakteristik bahasa F#, ekosistem, kondisi dokumentasi, alat pengembangan, contoh penggunaan, situasi komunitas, dan perbandingan F# vs. OCaml
Apa itu F#?
- F# adalah bahasa pemrograman serbaguna untuk menulis kode yang ringkas, kuat, dan berkinerja baik
- Dirancang agar pengguna dapat berfokus pada pemecahan masalah itu sendiri tanpa terlalu memikirkan sintaks yang rumit
- Bersifat open source, lintas platform, dan memiliki kompatibilitas tinggi dengan .NET
-
Karakteristik
- Sintaks ringan dan immutable secara default
- Inferensi tipe dan generalisasi
- Fungsi kelas satu, tipe data yang kuat, dan pattern matching
- Dukungan pemrograman asinkron (Async)
- Bahasa asal dari operator pipeline terkenal (
|>)
-
Contoh kode sederhana
open System let names = [ "Peter"; "Julia"; "Xi" ] let getGreeting name = $"Hello, {name}" names |> List.map getGreeting |> List.iter (printfn "%s") - F# bermula sebagai bahasa yang dikembangkan Don Syme di Microsoft Research pada 2005
- Berawal dari proyek riset untuk mem-porting OCaml ke platform .NET (Caml.NET)
- Kemudian diintegrasikan sebagai produk resmi mulai 2010, dan pada 2024 F# 9.0 dirilis
- Per 2025, F# telah menjadi bahasa matang yang merayakan ulang tahunnya yang ke-20
- Alasan utama untuk bereksperimen dengan F#
- Memeriksa bagaimana .NET berevolusi menjadi open source dan lintas platform
- Membandingkan kelebihan dan kekurangannya terhadap OCaml
- Penilaian positif terhadap tooling seperti Rider dan Ionide
- Ketertarikan sederhana untuk menjelajahi bahasa baru
F# sebagai bahasa
- F# adalah bahasa fungsional keluarga ML, dengan sintaks yang akrab bagi pengguna OCaml
- Pengembang yang pernah menggunakan Haskell atau Lisp juga dapat beradaptasi dengan mudah
- Struktur sintaksnya berbasis spasi, sehingga seperti Python, indentasi penting secara gramatikal
- Dirancang agar pemula pun dapat cepat mempelajari sintaks dasarnya
-
Ringkasan karakteristik bahasa
- Definisi dan penerapan fungsi dapat diekspresikan secara ringkas dan alami
- Percabangan, perulangan, tuple, dan pemrosesan list dapat digunakan dengan rapi dalam gaya fungsional
- Record, enumerasi (Discriminated Union), dan pattern matching memungkinkan penanganan struktur data kompleks secara ringkas
- Dengan operator pipeline (
|>), aliran data dapat disusun secara visual dengan jelas seperti rangkaian fungsi - F# sangat cocok untuk menulis skrip ad-hoc, dapat ditulis dalam file
.fsxlalu langsung dijalankan dengandotnet fsi - Lingkungan REPL juga tersedia sehingga menguntungkan untuk pemrograman eksploratif
-
Sintaks yang ramah pengguna
- Mencakup fitur sintaks praktis seperti komentar satu baris dan multi-baris, variabel
mutable, dan list slice - Berkat kompatibilitas tinggi dengan C#, API .NET dapat digunakan dengan mudah
- Mendukung operator overloading untuk berbagai tipe secara alami
printfnmemudahkan pencetakan berbagai tipe sehingga berguna untuk debugging dan logging
- Mencakup fitur sintaks praktis seperti komentar satu baris dan multi-baris, variabel
-
Pelopor pemrograman asinkron
- Asal mula pola
async/awaitadalah F# 2.0, yang kemudian memengaruhi banyak bahasa lain seperti C# dan JavaScript - F# menyediakan struktur yang memungkinkan pemrograman asinkron diimplementasikan secara intuitif tanpa callback
- Alur kode terasa seperti sinkron saat dibaca, tetapi sebenarnya berjalan secara asinkron
- Asal mula pola
-
Investasi Microsoft dan perkembangan bahasa
- Selama bertahun-tahun Microsoft hanya mengalokasikan sumber daya terbatas untuk F#, tetapi pada 2022 mulai berinvestasi serius dengan membentuk tim khusus di Praha
- Melalui rilis F# 8.0 dan 9.0, bahasa dan tooling berkembang pesat
- Dengan meningkatnya perhatian internal Microsoft, potensi perkembangan di masa depan juga menjanjikan
F# adalah bahasa praktis yang mudah dipelajari namun memiliki sistem tipe yang kuat dan paradigma pemrograman fungsional, sehingga menjadi pilihan yang sangat menarik bagi pengembang yang ingin mengadopsi pendekatan fungsional dalam proyek berbasis .NET
Ekosistem (Ecosystem)
- Dari hasil penggunaan dalam waktu relatif singkat, tidak banyak library atau framework yang murni khusus F#
- Sebagian besar pengguna bergantung pada API dasar .NET dan library pihak ketiga yang terutama dirancang untuk C#
- Ini adalah fenomena yang umum terlihat pada hosted language seperti Scala, Clojure, dan Groovy
-
Library utama untuk pengembangan web
- Giraffe: framework web ringan berbasis ASP.NET Core yang mengusung gaya fungsional
- Suave: framework server web sederhana bergaya combinator untuk routing dan komposisi task
- Saturn: framework bergaya MVC yang dibangun di atas Giraffe, terinspirasi dari Ruby on Rails dan Phoenix
- Bolero: framework pengembangan aplikasi klien berbasis WebAssembly dan Blazor
- Fable: mentranspilasi F# ke JavaScript sehingga dapat terhubung dengan ekosistem JS seperti React dan Node.js
- Elmish: framework UI berbasis pola MVU(Model-View-Update) yang sering digunakan bersama Fable
- SAFE Stack: stack pengembangan web fungsional end-to-end yang menggabungkan Saturn, Fable, Elmish, Azure, dan lainnya
-
Library utama untuk data science
- Deedle: library analisis dan manipulasi data bergaya pandas
- DiffSharp: library berfokus pada matematika yang menyediakan machine learning dan diferensiasi otomatis
- FsLab: toolkit terpadu untuk data science yang mencakup visualisasi dan alat analisis statistik
Kondisi dokumentasi
- Dokumentasi resminya secara umum tertata rapi dan berkualitas tinggi
- Sebagian tersebar di Microsoft Docs, sebagian lagi di F# Software Foundation
- Struktur dokumentasinya mungkin sedikit terpencar, tetapi panduan gaya bahasa, dokumen desain, dan API library standar sangat berguna
-
Tautan dokumentasi yang direkomendasikan
-
Materi belajar komunitas
- F# for Fun and Profit: kumpulan tutorial dan esai (agak lama tetapi masih relevan)
Alat pengembangan (Dev Tooling)
- Ekosistem alat pengembangan F# di masa lalu dioptimalkan hampir hanya untuk Visual Studio, dan dukungan untuk editor lain masih kurang
- Untungnya, dalam 10 tahun terakhir lingkungan tooling telah banyak membaik
-
Titik balik teknis: FSharp.Compiler.Service(FCS)
- FCS adalah library tunggal yang mencakup compiler F#, fitur dukungan editor, dan engine scripting, sehingga memungkinkan F# digunakan di berbagai editor dan lingkungan tooling
- Berkat ini, dukungan F# menjadi mungkin di VS Code, generator dokumentasi, backend alternatif, dan lain-lain, yang mendorong perluasan ekosistem
- Contoh paling menonjol adalah Ionide yang menyediakan dukungan F# kaya di VS Code, dengan lebih dari 1 juta unduhan
-
Editor yang diuji
- Emacs (
fsharp-mode): menyediakan fitur dasar, belum mendukung TreeSitter, aktivitas pengembangan minim - Zed: dukungan F# terbatas
- Helix: memiliki dukungan dasar
- VS Code (plugin Ionide): salah satu lingkungan yang paling matang
- JetBrains Rider: IDE komersial tetapi dukungan F# sangat kuat
Sebagian besar fitur bekerja berdasarkan server bahasa F# (
fsautocomplete), jadi editor mana pun dengan dukungan LSP yang baik dapat digunakan - Emacs (
-
Kekurangan
fsharp-modeberbasis codebase lama dan perkembangannya lambat- Zed kekurangan fitur
- VS Code memiliki beberapa fitur (misalnya expand/shrink selection) yang tidak bekerja dengan baik
- Ada juga pengguna yang merasa VS Code kurang nyaman karena masalah keybinding/model modal
-
Formatter dan linter kode
- Fantomas: formatter kode resmi F# yang digunakan oleh sebagian besar pengguna dan tim
- FSharpLint: dulu sempat populer, tetapi kini praktis terhenti
- Namun, berkat compiler yang kuat, ketergantungan pada linter menjadi rendah
-
Alat lainnya
Contoh penggunaan (Use Cases)
- Berkat ekosistem .NET yang luas, F# berpotensi digunakan di berbagai bidang
- Khususnya, berkat fitur Type Providers, F# sangat cocok untuk pekerjaan analisis dan manipulasi data
- Cocok juga untuk pengembangan layanan backend dan aplikasi full-stack, dan beberapa alat bahkan memungkinkan pengembangan frontend
-
Area penggunaan utama
- Analisis data: manipulasi data berbasis tipe statis dimungkinkan dengan memanfaatkan type providers F#
- Layanan backend: F# dapat digunakan bersama framework web .NET yang kuat
- Aplikasi frontend: pengembangan UI yang terintegrasi dengan ekosistem JS dimungkinkan melalui Fable dan Elmish
- Mulai
Fable 4, transpiling juga dimungkinkan ke berbagai bahasa seperti TypeScript, Rust, dan Python
- Mulai
-
Contoh Fable (perintah transpile sederhana)
- JavaScript:
dotnet fable - TypeScript:
dotnet fable --lang typescript - Python:
dotnet fable --lang python
- JavaScript:
Situasi komunitas
- Secara keseluruhan komunitasnya tidak besar dan bahkan mungkin lebih kecil daripada OCaml
- Kanal Reddit dan Discord adalah ruang komunikasi yang paling aktif
- Komunitas Slack juga ada, tetapi sulit diakses karena masalah pada sistem otomatisasi undangan
- Peran Microsoft di dalam komunitas kurang jelas, dan kecenderungannya lebih kuat dipimpin komunitas
-
Sumber daya utama yang dikelola komunitas
- Amplifying F#: memperluas adopsi F# dan mendorong partisipasi perusahaan
- F# for Fun and Profit: arsip tutorial dan esai
- F# Lab: toolkit komunitas F# untuk data science
- F# Weekly: newsletter yang merangkum kabar terbaru F#
Popularitas dan realitas (The Popularity Contest)
- F# tidak menempati peringkat tinggi di sebagian besar indikator popularitas (TIOBE, StackOverflow, lowongan kerja, dll.)
- Namun ini juga merupakan kenyataan yang dihadapi sebagian besar bahasa fungsional, jadi bukan masalah unik F#
- Walau tetap bukan arus utama, basis penggunanya berada di tingkat yang mirip dengan bahasa fungsional lain seperti Clojure, OCaml, dan Emacs Lisp
-
Mengapa memakai F#?
- Ada banyak alasan memilih bahasa pemrograman selain peluang kerja
- Untuk bersenang-senang (ada juga yang bilang F dalam F# berarti “Fun”)
- Mempelajari paradigma dan ide baru
- Melatih diri untuk berpikir dengan cara berbeda di luar pola pikir yang sudah familiar
- Ada banyak alasan memilih bahasa pemrograman selain peluang kerja
-
Materi terkait
- Tulisan tentang popularitas F#
- Analisis popularitas F# per 2024
- Versi video dari tulisan tersebut juga dapat dijadikan referensi
Perbandingan F# vs OCaml
Tujuan awal F# adalah membawa kelebihan OCaml ke .NET, dan kelebihan .NET ke OCaml
– Don Syme, pencipta F#
- F# dikembangkan dengan inspirasi dari OCaml, dan pada awalnya sangat mirip sampai-sampai mendukung ekstensi file
.mldan.mli - Seiring waktu, F# berkembang menjadi bahasa yang semakin mandiri, dan kini keduanya maju ke arah masing-masing
-
Kelebihan F#
- Berbasis platform .NET
- Dapat memanfaatkan jumlah library yang sangat besar
- Didukung Microsoft
- Ramah untuk pemula
- Sintaks yang akrab bagi mereka yang punya pengalaman dengan bahasa berorientasi objek (seperti C#)
- Pesan kesalahan compiler relatif jelas
- Pengalaman debugging lebih intuitif
- Dukungan pemrograman asinkron sangat kuat
- Menyediakan fitur yang tidak ada di OCaml
- Anonymous record
- Active pattern
- Computational expressions
- Sequence comprehension
- Type providers
- Units of measure
- Berbasis platform .NET
-
Kekurangan F#
- Berbasis platform .NET
- Banyak kompromi dalam desain bahasa demi interoperabilitas dengan
.NET(misalnya mengizinkannull)
- Banyak kompromi dalam desain bahasa demi interoperabilitas dengan
- Dimiliki Microsoft
- Ada perbedaan preferensi terhadap Microsoft
- Sumber daya yang dialokasikan untuk F# relatif sedikit
- Dalam jangka panjang, belum jelas sejauh mana MS akan terus mendukung F#
- Masalah terkait nama
- Konvensi penamaan
PascalCasedancamelCasebisa terasa kurang nyaman bagi sebagian orang - Nama F# dapat menimbulkan masalah dalam pencarian atau nama file (karena itu juga sering ditulis sebagai FSharp)
- Konvensi penamaan
- Tidak adanya fitur lanjutan yang tersedia di OCaml
- Modul kelas satu, functor
- Dukungan GADT yang terbatas
- Tidak punya maskot dan tidak ada unta
- Berbasis platform .NET
-
Kesamaan dan perbandingan timbal balik
- Keduanya sama-sama dapat menargetkan runtime JavaScript
- F#: Fable
- OCaml: js_of_ocaml, Melange
- Saat ini Fable terasa lebih matang, meski pengalaman penggunaan nyata masih perlu ditambah
- Keduanya sama-sama kuat tetapi niche, dan kecil kemungkinan menjadi bahasa populer luas dalam waktu dekat
- F# memiliki kepraktisan untuk meresap sedikit demi sedikit ke codebase C# yang sudah ada
- Salah satu kekurangannya adalah proyek F# masih menggunakan file proyek berbasis XML, dan urutan kompilasi harus ditentukan secara manual
- Ini bisa terasa merepotkan jika dibandingkan dengan sistem build OCaml,
Dune
- Ini bisa terasa merepotkan jika dibandingkan dengan sistem build OCaml,
- Untuk tujuan edukasi atau mempelajari struktur bahasa, OCaml mungkin lebih cocok
- Untuk layanan web praktis atau pengembangan backend, F# bisa menjadi pilihan yang lebih baik
- Terutama sebagai bahasa yang terintegrasi baik dengan
.NETsambil tetap mempertahankan gaya fungsional, F# adalah alat yang sangat kuat
- Keduanya sama-sama dapat menargetkan runtime JavaScript
Kesan penutup
- Penulis merasa F# adalah bahasa yang jauh lebih menyenangkan dan praktis daripada yang dibayangkan
- Ia menggambarkannya mirip dengan saat pertama kali mengenal Clojure di masa lalu
- Secara khusus, ini mengingatkan bahwa Clojure pernah menjadi Lisp paling praktis berkat interoperabilitasnya yang sangat baik dengan Java
- Jika sejak awal .NET sudah open source dan portable,
- Ada kemungkinan ClojureCLR akan lebih populer daripada sekarang
- Serta komunitas dan ekosistem F# juga akan tumbuh lebih besar, ungkapnya dengan nada menyayangkan
- Fakta bahwa F# tidak bersifat open source hingga 2010 juga menghambat adopsi awalnya
"Kesalahan terbesar adalah .NET dan F# sama-sama tidak open source pada awalnya, dan karena itu banyak peluang hilang" – Don Syme
- OCaml juga tidak sulit dipelajari, tetapi bagi orang yang baru belajar bahasa keluarga ML, F# mungkin lebih mudah
- Hambatan masuk menuju produksi juga lebih rendah
- Penulis menekankan bahwa terutama bagi pengembang yang punya pengalaman .NET, F# benar-benar layak dicoba
- F# bukan hanya bahasa yang hebat secara mandiri, tetapi juga memberi peluang memanfaatkan ekosistem .NET yang kuat
- Melalui alat seperti Fable, kode F# dapat ditranspilasi ke JavaScript, Dart, Rust, Python, dan lain-lain
- Di komunitas F# ada ungkapan bahwa "F dalam F# adalah Fun"
- Setelah mencobanya sendiri, penulis merasa ungkapan itu benar, dan menekankan bahwa bahasa ini bukan hanya menyenangkan, tetapi juga praktis
- Terakhir, penulis juga menyinggung stabilitas dan keandalan F# dengan mengatakan, "jika kompilasi berhasil, biasanya semuanya berjalan baik"
In sane type systems we trust!
1 komentar
Opini Hacker News
F# adalah bahasa fungsional terbaik saat menulis ulang aplikasi Ruby on Rails
Pernah mencoba F#, tetapi masih baru di ekosistem .NET
Perusahaan kami beralih dari C# ke F# enam tahun lalu
Alasan adopsi F# mandek adalah sistem build yang buruk
Belajar F# pada 2013 dan sangat menikmatinya
F# adalah kasus langka di mana semua penggunanya sangat puas
Keunggulan F# makin berkurang karena C# mendapatkan banyak fiturnya
Ada SaaS yang menguntungkan dan ditulis sepenuhnya dengan F#
F# adalah bahasa yang hebat
F# itu indah, tetapi sulit dipakai dengan lancar