Saya telah menulis aplikasi untuk menyeimbangkan jadwal pembangkit listrik nasional untuk portofolio pembangkit listrik ke posisi perdagangan untuk perusahaan energi. Komponen klien dan server berada di C # tetapi mesin perhitungan ditulis dalam F #.
Penggunaan F # untuk mengatasi kompleksitas di jantung aplikasi ini jelas menunjukkan sweet spot untuk bahasa dalam perangkat lunak perusahaan, yaitu analisis algoritmik kompleks dari kumpulan data besar. Pengalaman saya sangat positif. Khususnya:
Unit ukuran Industri tempat saya bekerja penuh dengan unit. Persamaan yang saya terapkan (sering bersifat geometris) berurusan dengan satuan waktu, daya, dan energi. Memiliki sistem tipe memverifikasi kebenaran unit input dan output fungsi adalah penghemat waktu yang sangat besar, baik dalam hal pengujian dan membaca / memahami kode. Ini menghapus seluruh kelas kesalahan yang rentan terhadap sistem sebelumnya.
Pemrograman eksplorasi Bekerja dengan file skrip dan REPL (F # Interactive) memungkinkan saya untuk menjelajahi ruang solusi lebih efektif sebelum melakukan implementasi daripada loop edit / kompilasi / run / tes yang lebih tradisional. Ini adalah cara yang sangat alami bagi seorang programmer untuk membangun pemahaman mereka tentang masalah dan ketegangan desain dalam permainan.
Kode pengujian unit yang ditulis menggunakan fungsi yang tidak memihak dan struktur data yang tidak dapat diubah adalah kegembiraan untuk diuji. Tidak ada interaksi tergantung waktu yang kompleks untuk mengacaukan segalanya atau serangkaian besar dependensi untuk diejek.
Interoperation Saya mendefinisikan antarmuka ke mesin perhitungan di C # dan menerapkan perhitungan dalam F #. Mesin perhitungan kemudian dapat disuntikkan ke modul C # yang perlu menggunakannya tanpa khawatir sama sekali tentang interoperabilitas. Mulus. Programmer C # tidak perlu tahu.
Pengurangan kode Sebagian besar data dimasukkan ke dalam mesin perhitungan dalam bentuk vektor dan matriks. Fungsi pesanan lebih tinggi memakannya untuk sarapan dengan sedikit keributan, kode minimal. Cantik.
Kurangnya bug Pemrograman fungsional bisa terasa aneh. Saya dapat bekerja pada suatu algoritma, berusaha keras untuk mendapatkan kode untuk melewati pemeriksa tipe tetapi setelah pemeriksa tipe puas, itu berfungsi. Hampir biner, baik itu tidak dapat dikompilasi atau benar. Kesalahan tepi kasus yang aneh diminimalkan, rekursi dan fungsi urutan yang lebih tinggi menghapus banyak kode pembukuan yang memperkenalkan kesalahan kasus tepi.
Paralelisme Kemurnian fungsional dari implementasi yang dihasilkan membuatnya siap untuk mengeksploitasi paralelisme yang melekat dalam pemrosesan vektor data. Mungkin di sinilah saya akan pergi berikutnya sekarang. NET 4 keluar.