Untuk apa Haskell digunakan di dunia nyata? [Tutup]


475

Ada banyak hype di sekitar Haskell, namun, sulit untuk mendapatkan informasi tentang bagaimana itu digunakan dalam aplikasi dunia nyata. Apa proyek / penggunaan paling populer dari Haskell dan mengapa ia unggul dalam memecahkan masalah ini?


56
Tidak, saya tidak akan melakukannya karena itu adalah jawaban yang jelas. Tidak ada ruang gerak untuk pendapat dan semacamnya. Saya hanya ingin tahu untuk apa bahasa itu diciptakan.
Sergio Tapia


12
@ Papuccino1, tunggu, apakah Anda ingin tahu apa gunanya , atau untuk apa ia diciptakan ? Yang pertama adalah apa pertanyaannya adalah meminta, dan ada banyak ruang untuk pendapat ada ...
bdonlan

3
@ Papuccino1 - Apa manfaat kata-kata tambahan dalam judul Anda untuk pertanyaan? Juga, saya pikir Anda salah memahami penggunaan istilah "fungsional" dalam konteks ini, tetapi sulit untuk mengatakannya.
Chris Lutz

2
Menurut situs web mereka sendiri, banyak perusahaan menggunakannya untuk berbagai keperluan ... haskell.org/haskellwiki/Haskell_in_industry
Julian

Jawaban:


309

Apa kegunaan umum untuk bahasa ini?

Pengembangan aplikasi yang cepat.

Jika Anda ingin tahu "mengapa Haskell?", Maka Anda perlu mempertimbangkan keuntungan dari bahasa pemrograman fungsional (diambil dari https://c2.com/cgi/wiki?AdvantagesOfFunctionalProgramming ):

  • Program fungsional cenderung jauh lebih singkat daripada rekan-rekan mereka yang berbahasa Imperative. Seringkali ini mengarah pada peningkatan produktivitas programmer

  • FP mendorong pembuatan prototipe cepat. Karena itu, saya pikir ini adalah paradigma desain perangkat lunak terbaik untuk ExtremeProgrammers ... tapi apa yang saya tahu?

  • FP bersifat modular dalam dimensi fungsionalitas, di mana ObjectOrientedProgramming bersifat modular dalam dimensi berbagai komponen.

  • Kemampuan memiliki kue dan memakannya. Bayangkan Anda memiliki pesan pemrosesan sistem OO kompleks - setiap komponen mungkin membuat perubahan keadaan tergantung pada pesan dan kemudian meneruskan pesan ke beberapa objek yang memiliki tautan. Bukankah itu terlalu keren untuk dapat dengan mudah memutar kembali setiap perubahan jika beberapa objek jauh di hierarki panggilan memutuskan pesan itu cacat? Bagaimana kalau memiliki sejarah negara yang berbeda?

  • Banyak tugas tata graha dibuat untuk Anda: mendekonstruksi struktur data (PatternMatching), menyimpan binding variabel (LexicalScope dengan penutup), pengetikan yang kuat (TypeInference), GarbageCollection, alokasi penyimpanan, apakah akan menggunakan kotak (penunjuk ke nilai) atau tanpa kotak (nilai secara langsung) ) representasi ...

  • Multithreading aman! Struktur data yang tidak dapat diubah tidak tunduk pada kondisi perlombaan data, dan akibatnya tidak harus dilindungi oleh kunci. Jika Anda selalu mengalokasikan objek baru, daripada secara destruktif memanipulasi objek yang sudah ada, pengunciannya dapat disembunyikan di dalam alokasi dan sistem GarbageCollection.

Terlepas dari Haskell ini memiliki kelebihan sendiri seperti:

  • Sintaks yang jelas dan intuitif terinspirasi oleh notasi matematika.
  • Daftar pemahaman untuk membuat daftar berdasarkan daftar yang ada.
  • Ekspresi Lambda: membuat fungsi tanpa memberi mereka nama eksplisit. Jadi lebih mudah untuk menangani formula besar.
  • Haskell sepenuhnya transparan referensial . Kode apa pun yang menggunakan I / O harus ditandai seperti itu. Dengan cara ini, ini mendorong Anda untuk memisahkan kode dengan efek samping (mis. Meletakkan teks di layar) dari kode tanpa (perhitungan).
  • Evaluasi malas adalah fitur yang sangat bagus:
    • Bahkan jika sesuatu biasanya menyebabkan kesalahan, itu akan tetap berfungsi selama Anda tidak menggunakan hasilnya. Misalnya, Anda bisa menempatkan 1 / 0sebagai item pertama dari daftar dan itu akan tetap berfungsi jika Anda hanya menggunakan item kedua.
    • Lebih mudah untuk menulis program pencarian seperti pemecah sudoku ini karena tidak memuat setiap kombinasi sekaligus — itu hanya menghasilkan mereka saat berjalan. Anda dapat melakukan ini dalam bahasa lain, tetapi hanya Haskell yang melakukan ini secara default .

Anda dapat memeriksa tautan berikut:


20
Pikiran berikut sering terlintas di benak saya: dalam bahasa murni, fungsi selalu mengembalikan hasil yang sama ketika melewati parameter yang sama. Ini jaminan. Bahasa imperatif berbeda membangun segalanya di atas "pernyataan". Sebuah pernyataan tidak datang dengan jaminan apa pun (kecuali pelaksanaannya menghabiskan waktu dan menghasilkan panas). Jadi fondasinya sudah goyah dan semua yang bult di atasnya akan tetap goyah. Bagi saya ini adalah salah satu alasan untuk belajar haskell.
Martin Drautzburg

8
Sudah 6 tahun sejak pertanyaan ini diajukan dan sejak bahasa pemrograman Go debut. Meskipun memiliki sistem tipe yang lebih lemah dan umumnya "lebih rendah secara objektif" (menurut penggemar fungsional / ML), ia berhasil mengirimkan lebih banyak perangkat lunak (dan lebih penting) dalam 6 tahun itu daripada Haskell dalam 26 tahun. Maksud saya ini sebagai studi kasus; jelas ada hal-hal yang menahan bahasa fungsional, dan mereka semua tidak dapat dikaitkan dengan hype.
weberc2

3
Anda lupa titik - pengkodean dalam haskell adalah ledakan mutlak;) Saya sudah sangat senang mencoba tangan saya di beberapa masalah di haskell.
J Atkin

8
@MartinDrautzburg Tentu saja pernyataan datang dengan jaminan. Bahasa bermanfaat macam apa yang akan memiliki pernyataan tanpa jaminan? Misalnya dalam C x = 5;menjamin bahwa setelah dijalankan, xberisi nilai 5.
user253751

5
@ E4z9 Ya tapi di C ++ itu menjamin yang operator =dipanggil. Dan itu menjamin apa yang terjadi jika Anda tidak mendefinisikanoperator =
user253751

234

Saya pikir orang-orang di posting ini kehilangan poin paling penting bagi siapa saja yang tidak pernah menggunakan bahasa pemrograman fungsional: memperluas pikiran Anda. Jika Anda baru mengenal pemrograman fungsional, Haskell akan membuat Anda berpikir dengan cara yang belum pernah Anda pikirkan sebelumnya. Akibatnya pemrograman Anda di area lain dan bahasa lain akan meningkat. Berapa banyak? Sulit untuk diukur.


2
Saya menggunakan iPhone, Mac. Di mana Haskell digunakan? Maksud saya untuk aplikasi yang saya gunakan ditulis dalam Objective-C atau Swift + sesuatu untuk database dan server. Swift juga bisa berfungsi. Jadi sekali lagi saya bingung di mana itu digunakan
Sayang

2
Facebook melakukan deteksi SPAM dengan itu: code.facebook.com/posts/745068642270222/…
Alex

25
Jawaban ini, ditulis dengan nada yang berbeda, mengatakan bahwa Haskell adalah latihan yang bagus untuk seorang programmer, yang IMO tidak membuat bahasa tujuan umum yang bagus
Passer By

5
Di Keera Studios kami menulis game dan aplikasi iOS dan Android menggunakan Haskell.
Ivan Perez

1
Saya sangat setuju dengan ini. Saya telah menulis banyak kode selama beberapa dekade dalam bahasa imperatif. Saya telah menjelajahi Haskell selama beberapa bulan dan itu membuka pikiran saya untuk hal-hal yang tidak saya pikirkan sebelumnya.
Adahus

87

Ada satu jawaban yang bagus untuk apa bahasa tujuan umum seperti Haskell baik untuk: menulis program secara umum.

Untuk apa digunakan dalam praktiknya, saya punya tiga pendekatan untuk menetapkan bahwa:

Menunjukkan bahwa itu baik untuk grafik, jaringan, pemrograman sistem, struktur data, database, pengembangan, pemrosesan teks ...

Dan akhirnya, pendapat saya tentang apa yang benar-benar kuat di:

Saya harap itu memberi Anda pengertian tentang seberapa luas pertanyaan Anda, jika ingin dijawab dengan spesifik.


15
Tag cloud rusak
Elliot Cameron

apakah tag cloud dibuat menggunakan wordcloud ?
Janus Troelsen

29

Salah satu contoh Haskell dalam aksi adalah xmonad , "manajer jendela penuh fitur dalam kurang dari 1.200 baris kode".


18

Dari Haskell Wiki :

Haskell memiliki beragam penggunaan komersial, mulai dari dirgantara dan pertahanan, untuk membiayai, hingga startup web, firma desain perangkat keras, dan produsen mesin pemotong rumput. Halaman ini mengumpulkan sumber daya tentang penggunaan industri Haskell.

Menurut Wikipedia, bahasa Haskell dibuat dari kebutuhan untuk mengkonsolidasikan bahasa fungsional yang ada menjadi bahasa umum yang dapat digunakan untuk penelitian masa depan dalam desain bahasa fungsional.

Hal ini jelas berdasarkan pada informasi yang tersedia yang telah melampaui tujuan aslinya dan digunakan untuk lebih dari sekedar penelitian. Sekarang dianggap sebagai bahasa pemrograman fungsional tujuan umum.

Jika Anda masih bertanya pada diri sendiri, "Mengapa saya harus menggunakannya?", Lalu baca Mengapa menggunakannya? bagian dari Pendahuluan Haskell Wiki.


13

Haskell adalah bahasa pemrograman tujuan umum. Ini dapat digunakan untuk apa pun yang Anda gunakan untuk bahasa lain. Anda tidak dibatasi oleh apa pun kecuali imajinasi Anda sendiri. Untuk apa itu cocok? Yah, hampir semuanya. Ada beberapa tugas di mana bahasa fungsional tidak unggul.

Dan ya, saya Rayne dari Dreamincode. :)

Saya juga ingin menyebutkan bahwa, jika Anda belum membaca halaman Wikipedia, pemrograman fungsional adalah sebuah paradigma seperti pemrograman Berorientasi Objek adalah sebuah paradigma. Kalau-kalau Anda tidak tahu. Haskell juga fungsional dalam arti berfungsi; itu bekerja dengan sangat baik pada saat itu.

Hanya karena suatu bahasa bukan bahasa Berorientasi Objek tidak berarti bahasanya dibatasi oleh apa pun. Haskell adalah bahasa pemrograman untuk tujuan umum, dan hanya untuk tujuan umum seperti Java.


9

Saya punya yang keren, facebook membuat alat otomatis untuk menulis ulang kode PHP. Mereka mengurai sumber menjadi pohon sintaksis abstrak, melakukan beberapa transformasi:

if ($f == false) -> if (false == $f)

Saya tidak tahu mengapa, tapi itu sepertinya gaya mereka dan kemudian mereka mencetaknya.

https://github.com/facebook/lex-pass

Kami menggunakan haskell untuk membuat bahasa spesifik domain kecil. Pemrosesan data dalam jumlah besar. Pengembangan web. Laba-laba web. Aplikasi pengujian. Menulis skrip administrasi sistem. Skrip backend, yang berkomunikasi dengan pihak lain. Skrip pemantauan (kami memiliki DSL yang berfungsi dengan baik bersama dengan munin, membuatnya lebih mudah untuk menulis kode monitor yang benar untuk aplikasi Anda.)

Semua jenis barang sebenarnya. Ini hanya bahasa tujuan umum sehari-hari dengan beberapa fitur yang sangat kuat dan berguna, jika Anda cenderung secara matematis.


6
Re: gaya FB, menempatkan false sebelum == berarti jika Anda lupa dan hanya menulis satu = maka perilaku yang dihasilkan akan lebih jelas salah daripada diam-diam melakukan operasi tugas yang tidak diinginkan dan melanjutkan secara normal
Magnus

A itu pintar, kekuatan Anda yang terutama diketahui waktu kompilasi diketahui.
Edgar Klerks

@ EdgarKlerks, PHP tidak memiliki waktu kompilasi. Ini memaksa pengecualian untuk dimunculkan di mana kesalahan itu, daripada mengarah pada perilaku aneh atau kesalahan dalam kode yang jauh.
dfeuer

Meskipun saya melihat manfaat dari menulis falsedi sebelah kiri, saya tidak melihat gunanya menggunakan alat untuk melakukannya secara otomatis: jika Anda sudah memiliki ==operator maka Anda sudah tahu Anda tidak memiliki bug yang merupakan bagian dari lex-pass dimaksudkan untuk menangkap, dan jika Anda mendapatkan =sebaliknya, tidak ada cara pasti untuk mengatakan apakah itu sengaja atau tidak.
Daftar Jeremy

1
@ JeremyList Mungkin mereka benar-benar ketat pada gaya pengkodean. Saya dapat melihat bahwa kode yang diformat dengan rapi mengundang untuk menulis kode yang diformat dengan lebih rapi. Tebakan liar.
Edgar Klerks

6

Dari Haskell :

Haskell adalah bahasa pemrograman standar fungsional serba guna standar, dengan semantik non-ketat dan pengetikan statis yang kuat. Ini dinamai ahli logika Haskell Curry.

Pada dasarnya Haskell dapat digunakan untuk membuat apa saja yang biasanya Anda buat menggunakan bahasa tujuan umum lainnya (misalnya C #, Java, C, C ++, dll.).


5

Misalnya, untuk mengembangkan aplikasi web HTML5 yang interaktif dan realtime. Lihat Elm , kompiler yang diimplementasikan dalam Haskell dan sintaksinya banyak meminjam dari Haskell's.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.