Apakah pemrograman fungsional relevan dengan pengembangan web? [Tutup]

88

Akhir-akhir ini saya sering melihat tentang pemrograman fungsional dan Clojure terlihat sangat menarik. Sementara saya 'memahami' deskripsi dasar tentang apa itu, saya tidak tahu bagaimana saya akan menggunakannya sehari-hari sebagai pengembang web, jika saya bisa. Banyak dari apa yang telah saya baca berfokus pada sisi matematika dari pemrograman fungsional daripada situasi pemrograman khas yang ditemukan di OO biasa.

Apakah ujung tongkat saya salah? Apakah pemrograman fungsional sama sekali tidak terkait dengan pengembangan web? Jika tidak, apakah ada contoh yang digunakan 'untuk web'?

Hates_
sumber

Jawaban:

31

Beberapa contoh di luar kepala saya:

  • Yahoo! Store diberdayakan oleh Lisp (awalnya bernama Viaweb sebelum akuisisi)
  • Reddit sepenuhnya dibuat prototipe di Lisp, meskipun mereka beralih ke Python pada tahun 2005
  • Hacker News seluruhnya ditulis dalam Arc (dialek Lisp)
Greg Case
sumber
7
Yahoo! Store telah ditulis ulang dalam c ++ beberapa tahun yang lalu.
apg
5
bahasa! = paradigma pemrograman.
phkahler
58
Pilihan contoh yang aneh ... Yahoo! Toko ditulis oleh Paul Graham, yang merupakan pendukung Lisp yang besar. Dia juga menulis Hacker News, yang secara efektif merupakan klon Reddit. Agaknya, HN ditulis agak sebagai tanggapan atas peralihan Reddit dari Lisp ke Python sementara Reddit adalah bagian dari YCombinator: program akselerator yang dijalankan oleh Paul Graham. Saya akan menghitung ini sebagai SATU contoh, bukan tiga.
Brandon Bloom
Konfigurasi server @ShermPendley, penyiapan jaringan, dan akses database juga merupakan faktor utama dalam performa. Waktu eksekusi skrip aplikasi web biasanya hanya sebagian kecil dari biaya keseluruhan.
AgmLauncher
62

Pemrograman fungsional sangat cocok dengan aplikasi web. Aplikasi web menerima permintaan HTTP dan menghasilkan hasil HTML. Ini bisa dianggap sebagai fungsi dari permintaan ke halaman.

Bandingkan dengan aplikasi desktop, di mana kami biasanya memiliki proses yang berjalan lama, UI yang stateful dan aliran data dalam beberapa arah. Ini lebih cocok untuk OO yang memperhatikan objek dengan status dan penyampaian pesan.

JacquesB
sumber
20

Saya tidak mengerti mengapa tidak - selama Anda mengirimkan HTML yang sesuai standar ke browser, mereka tidak peduli apa yang Anda gunakan untuk memproduksinya, baik itu bahasa fungsional, bahasa imperatif, atau monyet terlatih.

Sherm Pendley
sumber
20

Pemrograman fungsional murni mungkin tidak memetakan dengan baik ke dalam lingkungan pemrograman web. Namun hambatan utamanya hanyalah kurangnya infrastruktur (kerangka kerja dan API). Ini akan menjadi waktu yang lama (mungkin tidak pernah, jujur) sebelum bahasa fungsional memiliki lingkungan pemrograman web yang sekaya Java, Python, atau Ruby.

Meskipun demikian, ada beberapa opsi.

Saya tidak punya pengalaman dengan semua ini. Mungkin pemberi komentar dapat mempertimbangkan apa yang berhasil bagi mereka.

Chris Conway
sumber
4

Untuk Clojure, ada startup menarik (TheDeadline) yang dikembangkan menggunakan Clojure dan Google App Engine. Mereka memiliki ppt yang bagus di Slideshare dan wawancara di InfoQ.

Untuk diskusi yang bagus tentang penerapan Clojure dengan GAE: http://news.ycombinator.com/item?id=1239788

Sejauh yang saya tahu, Clojure memiliki beberapa perpustakaan pengembangan web. Penyamaran Cincin Gabungan

Semoga ini menjawab beberapa pertanyaan Anda =) (Saya baru mulai juga ..)

Terbaik, Ryan

Ryan Teo
sumber
3

Ini tidak sepenuhnya tidak terkait dengan pengembangan web. Aplikasi yang ada di server dapat memanfaatkan fitur fungsional seperti closure, fungsi tingkat tinggi, kekekalan, transparansi referensial ... misalnya, Anda yakin memiliki koleksi yang perlu diubah atau dimanipulasi dengan cara apa pun. Pemrograman fungsional membantu di sini, dan karena alasan itulah idiomnya menembus bahasa utama. Fitur fungsional membantu dalam keringkasan, testabilitas, paralelisasi, dan mereka juga dapat memberikan solusi asli untuk masalah yang seharusnya Anda selesaikan dengan pola.

Pembaruan: ada kerangka web untuk bahasa fungsional juga. Kunci web untuk Lisp Umum, Angkat untuk Scala. Ini adalah yang pernah saya dengar, mungkin ada lebih banyak ... namun Anda tidak harus sepenuhnya berfungsi - misalnya Scala tidak murni dan harus bekerja dengan kerangka Java apa pun, Anda masih bisa untuk menggunakan pemrograman fungsional untuk lapisan bisnis, dll.

Jerman
sumber
3

Lihat Ur / Web . Ini sangat cepat dan sistem tipe statisnya tahu tentang hal-hal seperti HTML dan SQL sehingga dapat menjamin segala macam hal baik tentang keamanan.

Cyrus Omar
sumber
3

Erlang tampaknya mendapatkan banyak penggunaan di beberapa infrastruktur untuk aplikasi web yang dapat diskalakan. database CouchDB dan Riak sebagian besar ditulis dalam Erlang, seperti halnya server antrian pesan RabbitMQ. Salah satu kunci keberhasilannya adalah ia menangani konkurensi melalui penyampaian pesan, tanpa status bisa berubah bersama. Cara berpikir seperti inilah yang berguna, lebih dari bahasa pemrograman fungsional tertentu.

Atau, lihat MapReduce. Ini adalah cara yang sangat fungsional untuk melihat komputasi, bahkan jika fungsi peta dan pengurangan Anda secara internal stateful - dan karena alasan itu, sangat cocok untuk melakukan kueri kumpulan data besar dengan cara terdistribusi yang toleran terhadap kesalahan.

Dengan segala cara, pilih apa pun yang menurut Anda paling praktis. Tetapi selalu simpan pemrograman fungsional di belakang pikiran Anda, karena Anda tidak pernah tahu kapan itu mungkin berguna.

Peter Scott
sumber
2

Bahasa dan paradigma tidak penting untuk aplikasi web, semuanya sama-sama baik dan buruk. Jika Anda mencari alasan untuk mempelajari paradigma baru, selami saja. Saran saya adalah menganalisis masalah yang Anda coba pecahkan dan pilih perangkat yang sesuai.

Chuck McKnight
sumber
2

Javascript (bahasa bagian FE dari web dan semakin banyak juga BE) tidak berfungsi per se tetapi fungsi adalah fungsi urutan pertama

Marcus Westin
sumber
2

Kami baru saja meluncurkan spreadsheet online di mana backend seluruhnya ditulis dalam bahasa Erlang.

http://hypernumbers.com

Dengan standar apa pun, ini adalah salah satu aplikasi web paling kompleks yang dapat Anda buat dengan GUI yang luar biasa dengan kerumitan mental.

Gordon Guthrie
sumber
2

Berikut adalah pengalaman pengembang web dalam membangun aplikasi web menggunakan Haskell . Meskipun bahasa fungsional sangat aman untuk jenis dan memiliki konkurensi yang baik, bahasa tersebut selalu kekurangan yang terbaik dari jenis api karena telah menjadi favorit akademisi sejak lama dan belum dipeluk dengan kuat di dunia nyata. Saya harap itu tidak terlalu jauh. Erlang sudah melakukannya.

A_Var
sumber
1

Alasan mengapa pemrograman fungsional populer dengan pemrograman web adalah karena ia menjelaskan keadaan bersama dan berubah dan memungkinkan programmer untuk mengekspresikan bagian fungsional murni sebagai fungsi murni. Fungsi murni memiliki keuntungan karena sangat sederhana untuk dijalankan secara paralel - karena tidak memiliki efek samping.

Setidaknya itulah alasan saya.

rbanffy.dll
sumber
1

Jawaban singkat lainnya: http://www.mlstate.com - platform pengembangan web lengkap, berdasarkan FP. Semantik bahasa yang bersih memungkinkan semua jenis analisis keselamatan dan keamanan otomatis, pengoptimalan, dll.

Peringatan: Saya bekerja di sana.

Yoric
sumber
1

Bahasa fungsional mungkin tidak secara langsung berguna untuk membuat aplikasi yang hebat, tetapi kami sangat menggunakan paradigma pemrograman fungsional untuk membangun Aplikasi kami. Pemrograman fungsional murni menempatkan batasan "tanpa efek samping". Ini memastikan bahwa panggilan fungsional murni akan menghasilkan hasil yang sama dalam urutan apa pun yang mereka panggil. Ini tidak ideal untuk pengembangan web tetapi jika pemrograman fungsional digabungkan dengan sistem yang mengubah status, aplikasi web yang kuat dapat dibuat. Silakan lihat makalah saya untuk lebih jelasnya: Server CEPAT Juga slide ini .

gopi
sumber
0

Ya, karena pemrograman fungsional dapat dilakukan dalam bahasa apa pun, Anda dapat menggunakannya sebagai pengembang web setiap hari.

Seharusnya kamu? itu tergantung pada masalah yang Anda selesaikan. Pemrograman fungsional adalah paradigma pemrograman dan di mana Anda harus menggunakannya tergantung pada masalah yang Anda pecahkan.

Untuk membuat keputusan lebih sederhana, pikirkan apakah lebih mudah untuk menyelesaikan beberapa masalah dengan menggunakan konsep OOPs, di mana enkapsulasi, polimorfisme, fitur seperti pewarisan dapat membuat hidup Anda lebih mudah?

Jika ya, jangan gunakan pemrograman fungsional di sana dan cukup gunakan OOP. Jika aplikasi Anda akan melakukan komputasi / kalkulasi / logika bisnis yang kompleks dan melibatkan pemrosesan yang sangat serentak, Pemrograman fungsional dapat menawarkan banyak alat dan keuntungan dalam kasus seperti itu.

Ini hanyalah gaya yang berbeda dalam membangun struktur dan elemen program, jadi ini semua tentang menggunakan alat yang tepat untuk pekerjaan yang tepat. Selebihnya apa pun dapat dilakukan dengan menggunakan apa saja.

Pemrograman fungsional dalam pengembangan web:

JavaScript mendukung pemrograman fungsional dan sangat mendukung ketika kita berada dalam konteks pengembangan web. Framework React sangat dipengaruhi oleh prinsip-prinsip pemrograman fungsional dan digunakan di banyak aplikasi web di luar sana.

Selain itu, Anda dapat menemukan banyak aplikasi web yang dibangun dan dijalankan dengan kerangka kerja yang dikembangkan pada bahasa pemrograman fungsional yang tercantum di bawah ini:

• WebSharper (F #)

• Jepret (Haskell)

• Angkat (Scala)

• Ocsigen (OCaml)

• Bos Chicago, Zotonic (erLang)

Semoga Jadi jawaban saya akan membantu siapa pun.

Amit Agrawal
sumber
-2

Anda mungkin tidak akan menggunakannya dan tidak boleh menggunakannya, tetapi ketika Anda mengatakan bahwa seseorang akan selalu menemukan pengecualian untuk aturan tersebut (Viaweb, dll.). Pada dasarnya tidak ada "bahasa super", hanya ada baris kode yang berfungsi, biasanya di "Blub." Bahkan Paul Graham mengatakan bahwa manfaat utama (sebenarnya hanya) bagi Lisp adalah kemampuan seseorang untuk membuat prototipe dengan cepat.

Juga "bahasa super" biasanya melanggar daripada meningkatkan keterbacaan kode, yang berarti bahwa orang "jenius" yang menulisnya harus memeliharanya selamanya karena tidak ada orang lain yang dapat memahaminya, terutama karena dia cenderung menulisnya dalam dialeknya yang dimodifikasi sendiri. Ini mengurangi kemungkinan cakupan proyek apa pun, yang berarti bahwa meskipun hal-hal baru dan inovatif dapat dilakukan, hal itu tidak dapat diperluas dan karenanya tetap dalam skala yang relatif kecil (seperti Hacker News in Arc).

Itu tidak berarti bahwa seseorang tidak dapat memiliki ide jenius dan menerapkannya dengan gaya yang tidak dapat dipahami yang kemudian dapat ditulis ulang di Blub dan diperluas sehingga banyak orang dapat memanfaatkannya. Sebenarnya, itulah yang terjadi di semua kisah sukses Lisp, belum lagi setiap filsuf terkenal yang pernah hidup. Tetapi tentu saja, jika Anda seorang "jenius", Anda mungkin juga dapat membuat prototipe produk Anda dengan cara lain.

Adapun FP di JVM, ada hal-hal terbatas tapi keren mungkin. Meskipun saya pribadi akan menggunakannya hanya untuk pembuatan prototipe, ada kemungkinan Anda mungkin memiliki kasus penggunaan (biasanya ada hubungannya dengan multi-threading) yang memberikan beberapa peningkatan.

Joel
sumber
1
Sebenarnya, Paul Graham mengatakan bahwa keuntungan besar Lisps adalah bahasa "paling kuat" yang tersedia. Dia mendukung argumennya dengan mengatakan bahwa seperempat viaweb (menurut baris) adalah makro Lisp. Pemrograman meta di sebagian besar bahasa (terutama yang tersedia di pertengahan 90-an) sulit dilakukan. Ini bukan prototipe jika didorong ke server produksi.
nmichaels