İşlevsel programlamayı gerçek dünyada nasıl kullanabilirim? [kapalı]


103

İşlevsel diller iyidir çünkü durumu ortadan kaldırarak hataları önlerler, aynı zamanda iş parçacığı sayısı hakkında endişelenmenize gerek kalmadan sizin için otomatik olarak kolayca paralelleştirilebilirler.

Yine de bir Win32 geliştiricisi olarak, Haskell'i uygulamamın bazı dll'leri için kullanabilir miyim? Ve eğer yaparsam, benim için otomatik olarak alınacak gerçek bir avantaj var mı? Eğer öyleyse bana bu avantajı sağlayan nedir, derleyici?

F # birden çok çekirdek ve cpu üzerinde yazdığınız işlevleri sizin için otomatik olarak paralelleştiriyor mu? Görev yöneticisindeki iş parçacığı sayısının arttığını gördünüz mü?

Temel olarak sorum şu: Haskell'i pratik bir şekilde kullanmaya nasıl başlayabilirim ve bunu yaparsam gerçekten bazı faydalar görecek miyim?


2
Şahsen, erlang'a bakardım - ama bu benim.
Jason Bunting

2
Biraz açıklığa kavuşturmak gerekirse, halihazırda birkaç farklı işlevsel programlama diliyle deneyimim var ve bunların nasıl çalıştığını ve farklılıklarının neler olduğunu biliyorum. Ancak bu soru özellikle şudur: Onu gerçek dünya kullanımına nasıl taşıyabilirim?
Brian R. Bondy

Yanıtlar:


41

Görünüşe göre Real World Haskell kitabı tam da aradığınız şey. Ücretsiz olarak çevrimiçi okuyabilirsiniz:

http://book.realworldhaskell.org/


Basılmasını bekliyorum. Görünüşe göre etrafındaki en iyi kitaplardan biri olacak. Bahse girerim Haskell ile ilgilenen insanlara Pratik Ocaml'ın Ocaml için yaptığından daha iyi hizmet sunacaktır
Friedrich

25

F #, işlevleri farklı CPU'lara veya makinelere aktaracak sihirli peri tozu içermez. F # / Haskell ve diğer işlevsel programlama dillerinin yaptığı şey, üzerinde oluşturuldukları iş parçacığından veya CPU'dan bağımsız olarak işlenebilen işlevler yazmanızı kolaylaştırmaktır.

Katıldığım bir podcast'in bağlantısını buraya göndermekte kendimi doğru hissetmiyorum, biraz kötü görünüyor ama Matt Podwysocki ile konuştuğumuz Herding Code bölümünde aynı soruyu sorduk ve bazı ilginç cevaplar verdi. Ayrıca bu bölümde fonksiyonel programlamayla ilgili birçok iyi bağlantı var. " İşlevsel Programlama Neden Önemlidir " başlıklı bir bağlantı buldum Bu size bazı yanıtlar sağlayabilir.




14

Bu aynı zamanda ilginç olabilir: " Gerçek Dünya İşlevsel Programlama "

Örnekler F # ve C # olarak verilmiştir, ancak teori oldukça geneldir. Okuduklarımdan (ön sürüm) kesinlikle ilginç, ancak şimdiye kadar Parallel Extensions gibi kitaplıkları kullanarak C # ile daha fazla bağlı kalmamı sağladığını düşünüyorum.


Hâlâ "C # ile daha fazla bağlı kalmak istediğinizi" düşünüyor musunuz? F # bazı ilginç özellikler sunar. Aldığım en büyük destek, daha az yazmadır (bu, çözümleri kodda ifade etme sürecinde daha az sürtünme demektir).
Daniel

1
@Daniel bazı yönlerden, daha da fazlası; p Üzerinde çalıştığım araçlar atipik olabilir.
Marc Gravell

8

Bahsetmediniz ama C ++ kullandığınızı varsayıyorum. İşlevselliğe geçmenin potansiyel olarak kolay bir yolu, C ++ / CLI'den F #'ye geçiştir. C ++, yönetilen koda girip çıkmanıza izin veren "sihirli peri tozu" (IJW: It Just Works olarak adlandırılır) içerir. Bununla, F # kodunu çağırmak neredeyse C # 'dan olduğu kadar basittir.

Bunu tamamen C / C ++ ile yazılmış bir programda (FreeSWITCH) kullandım. Tek bir yönetilen C ++ / CLI ile (/ clr anahtarını kullanın), sihirli bir şekilde yönetilen koda geçiş yapar ve oradan F # eklentilerimi yükleyebilir ve çalıştırabilirim. Dağıtım için işleri daha da kolaylaştırmak için, F # tüm bağımlılıklarını statik olarak bağlayabilir, böylece F # çalışma zamanı dosyalarını dağıtmanıza gerek kalmaz. CLR kodunu çekici kılan bir diğer şey, yönetilen kodu (temsilciler) C koduna geçirebilmeniz ve çalışma zamanının sizin için otomatik olarak bir şey yapmasıdır.

Haskell yoluna gitmeye karar verirseniz, arayacağınız özellik FFI: Yabancı İşlev Arayüzü olacaktır. Ancak, size F # ile C ++ / CLI ile aynı düzeyde entegrasyon sağlayacağını sanmıyorum.


6

Şu anda Haskell'i kendim öğreniyorum, öğrenmeye başladığınızda, pek ilgi çekici görünmüyor çünkü öğrenme deneyimi HİÇBİR ŞEY C # gibi bir dil öğrenmek gibi bir şey değil, yepyeni bir dünya, ama fark ettim ki çok çok karmaşık yazabilirim sadece birkaç satır koddaki ifadeler, koda dönüp baktığımda çok daha kısa, küçük ve dardı. Ben kesinlikle onu seviyorum! Gerçekten de diğer dillerin çoğunun izin verdiğinden daha küçük, bakımı daha kolay ve çok daha karmaşık gerçek dünya programları yazabilirsiniz, bunu öğrenmeniz için size oy veriyorum !!

İyi şanslar.


4

Win32 ve DLL'lerden bahsettiğinize göre, yönetilmeyen kodla çalıştığınızı varsayıyorum. Bu durumda, GHC sizin için çok iyi çalışacaktır. Geçen yılın sonlarında Windows altında FFI kullanarak bir DDE sunucusu yazdım , MS DDE kitaplıklarıyla konuşmak için ve şaşırtıcı bir şekilde bu son derece hoş bir deneyim oldu (özellikle de bir Unix çalışanı olduğum düşünüldüğünde). Haskell'in FFI'si güçlüdür (örneğin, C veya diğer kitaplıklardan Haskell işlevlerine geri aramaları destekler) ve C düzeyinde kod yazarken Haskell'in tür kontrolüne sahip olmak bir hayalin gerçekleşmesi gibidir.

Bu son nokta Haskell'in en büyük avantajlarından biridir: yazı sistemi harika. Bununla birlikte, herhangi bir güçlü araç gibi; onu iyi kullanmak için zamana ve çabaya ihtiyacı var.

Yani evet, Haskell'de kodunuzun geri kalanına bağlanan küçük kod parçaları yazmaya başlamak mümkündür (ancak diğer kodunuza bağlanan küçük Haskell programlarıyla başlamayı daha kolay bulabilirsiniz) ve harcamaya değer bunu öğrenmek ve mümkün olan her yerde kullanmak için makul bir zaman. Haskell'de Windows koduyla (benim durumumda, gelişmiş bir Excel eklentisi) sıkı bir şekilde entegre edilmiş oldukça büyük bir proje planlayarak benim gibi bitebilirsin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.