Bagaimana saya bisa menggunakan pemrograman fungsional di dunia nyata? [Tutup]

103

Bahasa fungsional bagus karena menghindari bug dengan menghilangkan status, tetapi juga karena dapat dengan mudah diparalelkan secara otomatis untuk Anda, tanpa Anda harus mengkhawatirkan jumlah utas.

Sebagai pengembang Win32, dapatkah saya menggunakan Haskell untuk beberapa dll aplikasi saya? Dan jika saya melakukannya, apakah ada keuntungan nyata yang akan diambil secara otomatis untuk saya? Jika demikian, apa yang memberi saya keuntungan ini, kompilator?

Apakah F # memparalelkan fungsi yang Anda tulis di beberapa core dan cpu secara otomatis untuk Anda? Apakah Anda pernah melihat jumlah utas di pengelola tugas meningkat?

Pada dasarnya pertanyaan saya adalah, bagaimana saya bisa mulai menggunakan Haskell dengan cara yang praktis, dan apakah saya benar-benar akan melihat beberapa manfaat jika saya melakukannya?

Brian R. Bondy
sumber
2
Secara pribadi, saya akan melihat ke erlang - tapi itulah saya.
Jason Bunting
2
Untuk menjelaskan sedikit, saya sudah berpengalaman dengan beberapa bahasa pemrograman fungsional yang berbeda, dan saya tahu cara kerjanya dan apa perbedaannya. Tapi pertanyaan ini secara khusus: bagaimana cara membawanya ke penggunaan dunia nyata.
Brian R. Bondy
1
kemungkinan duplikat dari Mengapa bahasa fungsional?

Jawaban:

41

Sepertinya buku Real World Haskell adalah yang Anda cari. Anda dapat membacanya online gratis:

http://book.realworldhaskell.org/

Apocalisp
sumber
Saya menunggu untuk mencetaknya. Tampaknya ini akan menjadi salah satu buku terbaik yang pernah ada. Saya yakin ini akan melayani orang-orang yang tertarik dengan Haskell lebih baik daripada yang dilakukan Ocaml Praktis untuk Ocaml
Friedrich
25

F # tidak mengandung debu peri ajaib yang akan mengalihkan fungsi ke CPU atau mesin yang berbeda. Apa yang dilakukan F # / Haskell dan bahasa pemrograman fungsional lainnya adalah mempermudah Anda untuk menulis fungsi yang dapat diproses secara independen dari utas atau CPU tempat mereka dibuat.

Saya merasa tidak benar memposting tautan di sini ke podcast yang saya ikuti, tampaknya sedikit aneh, tetapi dalam episode Kode Penggembalaan di mana kami berbicara dengan Matt Podwysocki kami mengajukan pertanyaan yang sama dan dia memberikan beberapa jawaban yang menarik. Ada juga banyak tautan bagus yang berkaitan dengan pemrograman fungsional di episode itu. Saya menemukan satu tautan berjudul " Mengapa Pemrograman Fungsional Itu Penting " Yang mungkin memberikan beberapa jawaban untuk Anda.

ScottKoon
sumber
21
Kemudian saya akan memposting untuk Anda: herdingcode.com/?p=45 :)
Brian R. Bondy
14

Ini mungkin juga menarik: " Pemrograman Fungsional Dunia Nyata "

Contohnya ada di F # dan C #, tetapi teorinya cukup umum. Dari apa yang saya baca (pra-rilis) ini pasti menarik, tetapi sejauh ini saya pikir itu membuat saya ingin lebih banyak menggunakan C #, menggunakan pustaka seperti Ekstensi Paralel.

Marc Gravell
sumber
Apakah Anda masih merasa seperti Anda "ingin terus bertahan dengan C #"? F # menawarkan beberapa fitur menarik. Peningkatan terbesar yang saya dapatkan adalah lebih sedikit mengetik (yang berarti lebih sedikit gesekan dalam proses mengungkapkan solusi dalam kode).
Daniel
1
@Daniel dalam beberapa hal, terlebih lagi; p Alat yang saya kerjakan mungkin tidak biasa.
Marc Gravell
8

Anda tidak menyebutkan, tapi saya berasumsi, Anda menggunakan C ++. Salah satu cara yang berpotensi mudah untuk berfungsi adalah melalui C ++ / CLI ke F #. C ++ berisi "debu peri ajaib" (disebut IJW: It Just Works) untuk memungkinkan Anda memanggil dan keluar dari kode yang dikelola. Dengan ini, memanggil kode F # hampir sesederhana itu dari C #.

Saya telah menggunakan ini dalam satu program (FreeSWITCH), yang seluruhnya ditulis dalam C / C ++. Dengan satu C ++ / CLI terkelola (gunakan sakelar / clr), ia secara ajaib bertransisi menjadi kode terkelola, dan dari sana, saya dapat memuat plugin F # saya dan menjalankannya. Untuk mempermudah penerapan, F # dapat menautkan semua dependensinya secara statis, jadi Anda tidak perlu menerapkan file runtime F #. Satu hal lain yang membuat kode CLR menarik adalah Anda dapat meneruskan kode yang dikelola (delegasi) ke kode C, dan runtime secara otomatis membuat pemikiran untuk Anda.

Jika Anda memutuskan untuk menggunakan cara Haskell, fitur yang akan Anda cari adalah FFI: Antarmuka Fungsi Asing. Namun, saya tidak berpikir itu akan memberi Anda tingkat integrasi yang sama dengan C ++ / CLI dengan F #.

MichaelGG
sumber
6

Saat ini saya belajar Haskell sendiri, ketika Anda mulai mempelajarinya, sepertinya tidak terlalu menarik karena pengalaman belajar TIDAK ADA seperti belajar bahasa seperti C #, ini adalah dunia yang sama sekali baru, tetapi saya perhatikan saya bisa menulis dengan sangat kompleks ekspresi hanya dalam beberapa baris kode, ketika saya melihat kembali kode itu jauh lebih ringkas, itu kecil dan ketat. Saya sangat menyukainya! Anda memang dapat menulis program dunia nyata yang lebih kecil, lebih mudah dirawat, dan jauh lebih kompleks daripada kebanyakan bahasa lain, saya memilih Anda untuk mempelajarinya !!

Semoga berhasil.

Rayne
sumber
4

Karena Anda menyebutkan Win32 dan DLL, saya kira Anda bekerja dengan kode yang tidak dikelola. Dalam hal ini, GHC akan bekerja dengan sangat baik untuk Anda. Akhir tahun lalu saya menulis server DDE di bawah Windows menggunakan FFI untuk berbicara dengan pustaka MS DDE, dan, yang mengejutkan, itu adalah pengalaman yang sangat menyenangkan (terutama karena saya orang Unix). FFI Haskell sangat kuat (bahkan mendukung, misalnya, panggilan balik ke fungsi Haskell dari C atau pustaka lain), dan memeriksa tipe Haskell saat menulis kode level-C adalah seperti mimpi yang menjadi kenyataan.

Poin terakhir itu adalah salah satu keunggulan utama Haskell: sistem tipenya luar biasa. Yang mengatakan, itu seperti alat yang ampuh; dibutuhkan waktu dan upaya untuk memanfaatkannya dengan baik.

Jadi ya, adalah mungkin untuk mulai menulis potongan kecil kode di Haskell yang ditautkan ke seluruh kode Anda (meskipun Anda mungkin merasa lebih mudah untuk memulai dengan program Haskell kecil yang ditautkan ke kode Anda yang lain), dan itu layak untuk digunakan. cukup waktu untuk mempelajari hal ini dan menggunakannya di mana pun Anda bisa. Anda mungkin berakhir seperti saya, merencanakan proyek yang cukup besar yang terintegrasi erat dengan kode Windows (dalam kasus saya, add-in Excel yang canggih) di Haskell.

cjs
sumber