- Mengapa F# 9 penting: F# 9 menghadirkan berbagai peningkatan luas yang membuat program lebih aman, lebih tangguh, dan berkinerja lebih baik
Tipe referensi nullable
- F# dirancang untuk menghindari null, tetapi null dapat ikut masuk saat berinteraksi dengan pustaka .NET yang ditulis dalam C#
- Kini F# memungkinkan tipe referensi yang memiliki null sebagai nilai yang valid ditangani dengan cara yang aman secara tipe
- Contoh:
let notAValue: string | null = null
let len (str: string | null) = match str with | null -> -1 | NonNull s -> s.Length
Properti .Is* pada Discriminated Union
- Discriminated Union kini memiliki properti yang dibuat otomatis untuk tiap case
- Ini memungkinkan pengecekan apakah suatu nilai merupakan case tertentu
- Misalnya dapat ditulis seperti
person.contact.IsEmail
Active pattern parsial dapat mengembalikan bool alih-alih unit option
- Sebelumnya, active pattern parsial mengembalikan
Some () jika cocok, jika tidak None
- Kini juga dapat mengembalikan bool
Lebih memilih extension method daripada properti bawaan saat argumen diberikan
- F# kini menyelesaikan extension method yang didefinisikan dengan nama yang sama seperti properti bawaan suatu tipe
- Ini sesuai dengan pola yang terlihat di beberapa pustaka .NET
Dukungan untuk Computation Expression dengan body kosong
- F# kini mendukung Computation Expression kosong
- Contoh:
let xs = seq { }
- Ini akan memanggil metode Zero milik builder
Direktif hash menerima argumen non-string
- Sebelumnya, direktif hash untuk compiler hanya menerima argumen string yang diberikan dalam tanda kutip
- Kini dapat menerima argumen dari tipe apa pun
- Contoh:
#nowarn 0070
Perluasan direktif #help di fsi
- Direktif #help di F# Interactive kini menampilkan dokumentasi untuk objek atau fungsi yang diberikan
- Dapat diberikan tanpa tanda kutip
- Contoh:
#help List.map;;
Dukungan prefiks FS di #nowarn untuk menonaktifkan peringatan
- Sebelumnya, jika menulis
#nowarn "FS0057", akan muncul pesan bahwa nomor peringatan tidak valid
- Kini nomor peringatan tetap diterima meski memakai prefiks
Peringatan saat atribut TailCall dipakai pada fungsi non-rekursif atau nilai yang diikat dengan let
- Kini F# mengeluarkan peringatan jika atribut
[<TailCall>] digunakan di tempat yang tidak semestinya
- Ini tidak memengaruhi kode, tetapi bisa membingungkan pembaca
Penerapan target atribut
- Compiler kini menerapkan AttributeTargets dengan benar untuk nilai let, fungsi, deklarasi union case, konstruktor implisit, struct, dan class
- Ini dapat mencegah bug seperti lupa menambahkan argumen unit pada pengujian Xunit
Pembaruan pustaka standar
Fungsi Random untuk koleksi
- Fungsi baru untuk pengambilan sampel acak dan pengacakan ditambahkan ke modul List, Array, dan Seq
- Versi yang menggunakan instance Random bersama yang implisit dan aman untuk thread
- Versi yang menerima instance Random sebagai argumen
- Versi yang menerima fungsi randomizer kustom
- Tersedia fungsi Shuffle, Choice, Choices, dan Sample
Konstruktor tanpa parameter untuk CustomOperationAttribute
- Memudahkan pembuatan operasi kustom untuk builder Computation Expression
- Tidak perlu menentukan nama secara eksplisit (dalam kebanyakan kasus namanya sama dengan nama metode)
Dukungan expression koleksi C# untuk F# List dan Set
- Saat menggunakan F# List dan Set dari C#, inisialisasi kini bisa dilakukan dengan expression koleksi
- Contoh:
FSharpSet<int> mySet = [ 1, 2, 3 ];
Peningkatan produktivitas pengembang
Pemulihan parser
- Perbaikan berkelanjutan terus dilakukan pada pemulihan parser
- Alat tetap dapat bekerja meski kode sedang diedit dan belum selalu benar secara sintaksis
Diagnostik
- F# 9 memiliki banyak pesan diagnostik baru atau yang ditingkatkan
- Misalnya untuk metode override yang ambigu, saat menggunakan anggota abstrak, union dengan field duplikat, dan lain-lain
Visibilitas nyata
- Cara F# menghasilkan assembly memiliki masalah di mana anggota private ditulis sebagai internal di IL
- Kini perilaku ini dapat diperbaiki dengan flag compiler
--realsig+
Peningkatan performa
Pemeriksaan kesetaraan yang dioptimalkan
- Pemeriksaan kesetaraan kini lebih cepat dan mengurangi alokasi memori
Berbagi field pada struct Discriminated Union
- Jika beberapa case pada struct DU memiliki field dengan nama dan tipe yang sama, field tersebut dapat berbagi lokasi memori yang sama
- Ini mengurangi jejak memori struct
Optimasi rentang bilangan bulat
- Compiler kini menghasilkan kode yang dioptimalkan untuk lebih banyak instans dari ekspresi
start..finish dan start..step..finish
- Sebelumnya, optimasi hanya dilakukan saat tipe adalah int/int32 dan step berupa konstanta 1 atau -1
- Kini semua tipe bilangan bulat dan nilai step lain juga dioptimalkan
Optimasi for x in xs -> ... pada comprehension List/Array
for x in xs -> ... pada comprehension List dan Array kini dioptimalkan
- Khususnya pada Array, peningkatan kecepatan bisa mencapai 10x dan pengurangan ukuran alokasi menjadi sekitar 1/3 hingga 1/4
Peningkatan alat
Live Buffer di Visual Studio
- Sebelumnya ini adalah fitur opt-in, tetapi kini aktif secara default
- Compiler latar belakang di IDE kini bekerja langsung pada buffer file live
- Tidak perlu menyimpan file ke disk untuk menerapkan perubahan
Analyzer dan code fix untuk menghapus tanda kurung yang tidak perlu
- Terkadang tanda kurung tambahan dipakai demi kejelasan, tetapi kadang hanya menjadi noise
- Kini Visual Studio menyediakan code fix untuk menghapus tanda kurung
Dukungan custom visualizer untuk F# di Visual Studio
- Visualizer debugger di Visual Studio kini berfungsi pada proyek F#
Menampilkan tooltip signature di tengah pipeline
- Sebelumnya, bantuan signature tidak tersedia ketika fungsi di tengah pipeline sudah diberi parameter curry yang kompleks (seperti lambda)
- Kini tooltip signature untuk parameter berikutnya akan ditampilkan
1 komentar
Komentar Hacker News
F# adalah bahasa favorit saya sejak pertama kali mengenalnya saat kuliah. Bahasa ini punya fitur-fitur yang lebih maju daripada C#, dan meskipun C# juga mulai mengadopsi fitur-fitur tersebut, ada kesulitan karena masalah kompatibilitas. F# tetap merupakan bahasa yang luar biasa, kompatibel dengan ekosistem .NET, dan bisa memberikan performa setara C# dengan boilerplate yang lebih sedikit
F# adalah salah satu produk terbaik yang pernah dirilis Microsoft sejak Excel, dan menjadikan .NET sebagai platform yang masuk akal
Saya pernah banyak berinvestasi pada proyek Phosphor yang berbasis F#, tetapi akhirnya harus menulis ulang sepenuhnya ke Typescript dan Rust. Saya mencoba mempertahankan type safety lintas berbagai teknologi melalui library Fable, tetapi ada masalah interoperabilitas antar-library dan pengelolaan dependensi yang sulit. Menurut saya, F# hanya cocok jika ada pemisahan frontend/backend yang tradisional
Dalam kelas kriptografi yang membolehkan kami memilih bahasa apa pun yang menggunakan .NET, tugas yang saya tulis dengan F# lebih mudah dibaca dibandingkan milik orang lain. Hampir 100% pekerjaan data science dilakukan dengan Python, jadi saya tidak banyak kesempatan untuk lebih sering memakai F#
Saya rindu bekerja dengan F#, tetapi masih terus mengikuti pembaruannya. Tooling-nya cukup bagus meskipun ukuran komunitasnya kecil dan Microsoft tampak tidak terlalu peduli. Masalah terbesar adalah akurasi cakupan pengujian kode
Saya baru-baru ini mencoba F#, dan sebagai orang yang datang dari Python, saya suka karena bisa menggunakan REPL. Saya ingin membuat proyek backend web kecil pada musim dingin ini agar lebih mengenal bahasa dan ekosistemnya. Saya mendengar banyak hal baik tentang Oxpecker untuk bagian http
Saya penasaran dengan cara F# mengelola versinya. Ada banyak peningkatan kualitas, tetapi sepertinya tidak sampai memerlukan perubahan versi utama. Saya penasaran apakah alasannya adalah untuk menyamakan nomor versi dengan .NET9
Saya penasaran bagaimana posisi F# sebagai alternatif C# untuk membuat aplikasi GUI di Windows, dan apakah ada perusahaan yang menggunakannya untuk tujuan itu
Saya belum pernah mencoba F#, tetapi saya menemukan situs yang tampaknya merupakan sumber yang bagus: fsharpforfunandprofit.com
Saya penasaran bagaimana keadaan F# di Linux/MacOS. Apakah ini hanya untuk Windows, atau terasa seperti bahasa yang didukung sepenuhnya juga di sana