Bahasa fungsional: Apa adanya, kemana tujuan mereka

Bahkan ketika beberapa orang berpendapat apa itu, pemrograman fungsional terus menarik pengembang. Dan tiga dari bahasa fungsional paling populer - Clojure, F #, dan Scala - siap untuk perbaikan.

Pemrograman fungsional memiliki daya tarik inti bagi beberapa pengembang, kata pendiri Scala, Martin Odersky: "Para programmer di segmen itu menyukai pemrograman fungsional karena membuat kode lebih jelas, lebih terstruktur, dan mencegah banyak kelas kesalahan." Tetapi beberapa orang berpendapat bahwa pemrograman fungsional mengarah pada perangkat lunak yang kurang efisien.

Pemrograman fungsional juga membutuhkan pemikiran tentang pemrograman dengan cara baru, kata David Stephens, manajer program Microsoft untuk .Net dan juru bicara F #. Abstraksi bisa menjadi masalah: "Saat Anda membuat kode lebih abstrak, saat Anda menjauh dari manipulasi bit dan secara eksplisit melalui loop, diperlukan lebih banyak waktu untuk memahami abstraksi ini."

Apa sebenarnya bahasa fungsional itu?

Dalam istilah yang paling mendasar, pemrograman fungsional adalah tentang memperlakukan komputasi sebagai fungsi matematika. Selain bahasa yang ditagih sebagai fungsional sejak awal, orang-orang seperti Java dan C # menjadi lebih fungsional dengan menambahkan dukungan untuk ekspresi lambda.

Tetapi definisi yang tepat dari pemrograman fungsional bisa sulit untuk dijabarkan. Blog Clojurefun mengutip beberapa definisi yang diyakini tidak benar, termasuk mendefinisikan pemrograman fungsional sebagai memungkinkan gaya fungsional dengan fungsi tingkat tinggi atau bahasa yang mendukung lambda. Dikatakan bahwa definisi yang benar adalah bahasa yang menekankan fungsi dan data yang tidak dapat diubah.

Tetapi definisi yang disukai blog Clojure belum tentu benar, kata orang lain. "Penulis memilih satu, yang kebetulan paling cocok dengan Clojure - tidak heran, ini adalah blog Clojure," kata Odersky dari Scala. "Saya memiliki interpretasi yang dekat dengannya, tetapi tidak sama."

Sebuah fungsi, kata Odersky, adalah sepotong kode yang memetakan input ke output dan tidak memiliki efek lain di luar itu. "Ini adalah definisi matematis dari fungsi yang kami gunakan di sini. Terkadang fungsi ini disebut 'murni', untuk membedakannya dari, katakanlah, fungsi di C." Bahasa fungsional berfokus pada pemrograman dengan fungsi murni, membuatnya mudah dan kuat untuk melakukannya, kata Odersky, yang mendirikan Typeafe, penyedia platform pengembangan aplikasi JVM Typeafe.

Pemrograman fungsional dapat dikombinasikan dengan paradigma lain, catatnya. "Misalnya, fungsional berjalan sangat baik dengan berorientasi objek. Scala adalah bahasa fungsional dalam pengertian itu. Saya setuju bahwa hanya memiliki lambda tidak membuat bahasa berfungsi; itu perlu tetapi tidak cukup."

Pengembang Clojure Rich Hickey, yang juga CTO di pengembang sistem Cognitect, sependapat dengan anggapan utama blog Clojure. "Artikel tersebut dengan tepat menunjukkan bahwa fungsi kelas satu atau tingkat tinggi bukanlah inti dari pemrograman fungsional. Pemrograman fungsional adalah tentang membuat pemrograman lebih seperti matematika," katanya. Yang mengatakan, masih ada spektrum definisi untuk pemrograman fungsional, kata Hickey.

Stephens dari Microsoft melihat kemampuan fungsional melampaui bahasa saja. "Bahasa pemrograman fungsional paling populer di dunia adalah Excel," katanya. Lembar kerja Excel sederhana mungkin memiliki kolom dengan sekumpulan nilai di dalamnya, seperti A1 X 2. "Itu adalah fungsi murni di A1, dan A1 tidak berubah, jadi Anda menghitung nilai dari data yang sudah ada."

Teknologi Language-Integrated Query (Linq) Microsoft juga menyediakan pemrograman fungsional, katanya. "Hampir setiap bahasa pemrograman sekarang mengadopsi fitur dari bahasa fungsional."

Stephens mengutip data yang tidak dapat diubah sebagai hal penting untuk pemrograman fungsional. Concurrency - program dengan banyak utas yang beroperasi pada data secara bersamaan - juga mendapat manfaat dari data yang tidak dapat diubah, catatnya. "Kami menyebut [F #] sebagai bahasa fungsional-pertama karena berasal dari warisan bahasa lain." Ini juga mendukung pemrograman berorientasi objek dan beroperasi dengan C # dan Visual Basic, katanya.

Clojure's Hickey melihat adopsi bahasa fungsional sebagai tanggapan atas meningkatnya tekanan yang dihadapi pengembang, yang harus menghadapi masalah yang lebih besar belakangan ini. "Untuk melakukannya, mereka harus mengurangi kompleksitas yang tidak disengaja dari program mereka. Sekarang secara luas diakui bahwa keadaan yang meresap dan efek samping adalah sumber utama kompleksitas dan bug dalam program," kata Hickey. "Meskipun dimungkinkan untuk mengurangi jumlah status dalam program yang ditulis dalam bahasa nonfungsional, secara dramatis lebih mudah dan lebih cepat untuk melakukannya dalam bahasa yang membuat pemrograman fungsional idiomatik dan default."

Apa selanjutnya untuk tiga bahasa fungsional teratas

Scala yang berusia 13 tahun adalah bahasa utama dalam ilmu data, kata pendiri Scala, Odersky. Didukung di JVM, ia diperkirakan memiliki 400.000 hingga 500.000 pengguna. Rencana dalam jangka pendek untuk mengoptimalkannya untuk Java 8, di mana instruksi bytecode dari peningkatan Java standar terbaru akan memungkinkan Scala menghasilkan kode yang lebih efisien.

Dalam jangka panjang, Scala akan mendapatkan sistem tipe yang dibersihkan, makro yang lebih aman, dan lebih banyak dukungan platform, dengan ujung belakang compiler LLVM yang sedang dipertimbangkan. Perbaikan lebih lanjut direncanakan untuk meningkatkan kegunaan Scala.js, untuk mengkompilasi Scala ke JavaScript.

Clojure yang berusia sembilan tahun, juga berdasarkan JVM, telah digunakan di bidang keuangan, ritel, perangkat lunak, dan hiburan, kata Hickey. "Ini telah diterapkan di berbagai area aplikasi seperti pemrosesan dan analisis transaksi, data besar, operasi jaringan, analitik prediktif, pencarian, keamanan, dan penawaran konsumen."

F # yang berusia 11 tahun didirikan oleh Microsoft Research oleh Don Syme dan diawasi oleh F # Foundation. Ini digunakan dalam berbagai aplikasi dan berjalan di Linux, OS X, Android, iOS, Windows, dan browser. "Apa yang kami kerjakan sekarang adalah membuatnya bekerja dengan .Net Core," versi modular lintas platform open source dari .Net Framework, kata Stephens. Interpolasi string, sehingga lebih mudah untuk menulis string, ada di papan gambar.