ฉันจะใช้การเขียนโปรแกรมเชิงฟังก์ชันในโลกแห่งความเป็นจริงได้อย่างไร? [ปิด]


103

ภาษาที่ใช้งานได้ดีเพราะหลีกเลี่ยงข้อบกพร่องโดยการกำจัดสถานะ แต่ยังเป็นเพราะสามารถขนานกันได้โดยอัตโนมัติสำหรับคุณโดยที่คุณไม่ต้องกังวลกับการนับเธรด

ในฐานะนักพัฒนา Win32 ฉันสามารถใช้ Haskell สำหรับ dll ของแอปพลิเคชันของฉันได้หรือไม่? และถ้าฉันทำจะมีข้อได้เปรียบที่แท้จริงสำหรับฉันโดยอัตโนมัติหรือไม่? ถ้าเป็นเช่นนั้นอะไรที่ทำให้ฉันได้เปรียบคอมไพเลอร์นี้

F # ขนานฟังก์ชันที่คุณเขียนในหลายคอร์และซีพียูให้คุณโดยอัตโนมัติหรือไม่? คุณเคยเห็นจำนวนเธรดในตัวจัดการงานเพิ่มขึ้นหรือไม่?

โดยทั่วไปคำถามของฉันคือฉันจะเริ่มใช้ Haskell ในทางปฏิบัติได้อย่างไรและฉันจะเห็นประโยชน์บางอย่างจริงหรือไม่ถ้าฉันทำ


2
โดยส่วนตัวแล้วฉันจะดู erlang - แต่นั่นคือฉัน
Jason Bunting

2
เพื่อชี้แจงเล็กน้อยฉันมีประสบการณ์กับภาษาโปรแกรมที่ใช้งานได้หลายภาษาอยู่แล้วและฉันรู้ว่ามันทำงานอย่างไรและความแตกต่างคืออะไร แต่คำถามนี้เป็นคำถามเฉพาะ: ฉันจะนำไปสู่การใช้งานจริงได้อย่างไร
Brian R.Bondy

1
อาจซ้ำกันได้ของทำไมภาษาที่ใช้งานได้?

คำตอบ:


41

ดูเหมือนว่าหนังสือ Real World Haskell เป็นเพียงสิ่งที่คุณกำลังมองหา คุณสามารถอ่านออนไลน์ได้ฟรี:

http://book.realworldhaskell.org/


ฉันกำลังรอให้พิมพ์ออกมา ดูเหมือนว่าจะเป็นหนังสือที่ดีกว่าเล่มหนึ่ง ฉันพนันได้เลยว่ามันจะเซิร์ฟเวอร์ที่คนที่สนใจ Haskell ดีกว่าที่ Ocaml จะทำกับ Ocaml
Friedrich

25

F # ไม่มีฝุ่นพิกซี่เวทมนตร์ที่จะส่งผ่านฟังก์ชั่นไปยัง CPU หรือเครื่องอื่น สิ่งที่ F # / Haskell และภาษาโปรแกรมการทำงานอื่น ๆ ทำคือทำให้คุณเขียนฟังก์ชันที่สามารถประมวลผลโดยไม่ขึ้นกับเธรดหรือ CPU ที่สร้างขึ้นได้ง่ายขึ้น

ฉันรู้สึกไม่ถูกต้องที่จะโพสต์ลิงก์ที่นี่ไปยังพอดคาสต์ที่ฉันเข้าร่วมดูเหมือนจะไม่ค่อยดีนัก แต่ในตอน Herding Code ที่เราได้พูดคุยกับ Matt Podwysocki เราได้ถามคำถามเดียวกันและเขาก็ให้คำตอบที่น่าสนใจ นอกจากนี้ยังมีลิงก์ที่ดีมากมายเกี่ยวกับการเขียนโปรแกรมเชิงฟังก์ชันในตอนนั้น ฉันพบลิงก์หนึ่งชื่อ " ทำไมการเขียนโปรแกรมเชิงฟังก์ชันจึงมีความสำคัญ " ซึ่งอาจให้คำตอบสำหรับคุณได้


21
แล้วฉันจะโพสต์ให้คุณ: herdingcode.com/?p=45 :)
Brian


14

สิ่งนี้อาจน่าสนใจ: " การเขียนโปรแกรมเชิงฟังก์ชันในโลกแห่งความจริง "

ตัวอย่างอยู่ใน F # และ C # แต่ทฤษฎีนี้ค่อนข้างทั่วไป จากสิ่งที่ฉันได้อ่าน (ก่อนวางจำหน่าย) มันน่าสนใจอย่างแน่นอน แต่จนถึงตอนนี้ฉันคิดว่ามันทำให้ฉันอยากติด C # มากขึ้นเรื่อย ๆ โดยใช้ไลบรารีเช่น Parallel Extensions


คุณยังรู้สึกว่าคุณ "อยากติดมากขึ้นเรื่อย ๆ กับ C #" หรือไม่? F # มีคุณสมบัติที่น่าสนใจ การเพิ่มที่ใหญ่ที่สุดที่ฉันได้รับคือการพิมพ์น้อยลง (ซึ่งหมายถึงแรงเสียดทานน้อยลงในกระบวนการแสดงโซลูชันในโค้ด)
Daniel

1
@ แดเนียลในบางวิธียิ่งกว่านั้น; p เครื่องมือที่ฉันใช้อาจผิดปกติแม้ว่า
Marc Gravell

8

คุณไม่ได้พูดถึง แต่ฉันสมมติว่าคุณกำลังใช้ C ++ วิธีหนึ่งที่ง่ายในการเข้าสู่ฟังก์ชันคือผ่าน C ++ / CLI ไปยัง F # C ++ มี "magic pixie dust" (เรียกว่า IJW: It Just Works) เพื่อให้คุณโทรเข้าและออกจากโค้ดที่มีการจัดการ ด้วยเหตุนี้การเรียกรหัส F # จึงแทบจะเป็นเรื่องง่ายเหมือนกับที่มาจาก C #

ฉันใช้สิ่งนี้ในโปรแกรมเดียว (FreeSWITCH) ซึ่งเขียนด้วย C / C ++ ทั้งหมด ด้วย C ++ / CLI ที่มีการจัดการเพียงครั้งเดียว (ใช้สวิตช์ / clr) มันเปลี่ยนเป็นโค้ดที่มีการจัดการได้อย่างน่าอัศจรรย์และจากที่นั่นฉันสามารถโหลดปลั๊กอิน F # ของฉันและดำเนินการได้ เพื่อให้การปรับใช้ง่ายขึ้น F # สามารถเชื่อมโยงการอ้างอิงทั้งหมดแบบคงที่ดังนั้นคุณไม่จำเป็นต้องปรับใช้ไฟล์รันไทม์ F # อีกสิ่งหนึ่งที่ทำให้โค้ด CLR น่าสนใจก็คือคุณสามารถส่งผ่านรหัสที่มีการจัดการ (ผู้รับมอบสิทธิ์) ไปยังรหัส C ได้และรันไทม์จะสร้างความสนใจให้กับคุณโดยอัตโนมัติ

หากคุณตัดสินใจที่จะไปทาง Haskell คุณสมบัติที่คุณจะมองหาคือ FFI: Foreign Function Interface อย่างไรก็ตามฉันไม่คิดว่าจะให้การผสานรวมในระดับเดียวกับ C ++ / CLI กับ F #


6

ตอนนี้ฉันกำลังเรียนรู้ Haskell ด้วยตัวเองเมื่อคุณเริ่มเรียนมันดูเหมือนจะไม่น่าสนใจเท่าไหร่เพราะประสบการณ์การเรียนรู้ไม่เหมือนกับการเรียนภาษาเช่น C # มันเป็นโลกใหม่ทั้งหมด แต่ฉันสังเกตว่าฉันเขียนได้ซับซ้อนมาก การแสดงออกในโค้ดเพียงไม่กี่บรรทัดเมื่อฉันมองย้อนกลับไปที่โค้ดมันกระชับกว่ามากมันเล็กและแน่น ฉันรักมันจริงๆ! คุณสามารถเขียนโปรแกรมในโลกแห่งความเป็นจริงที่จะมีขนาดเล็กลงดูแลรักษาง่ายและซับซ้อนกว่านั้นภาษาอื่น ๆ ส่วนใหญ่อนุญาตให้ฉันโหวตให้คุณเรียนรู้ !!

โชคดี.


4

เนื่องจากคุณพูดถึง Win32 และ DLL ฉันคิดว่าคุณกำลังทำงานกับโค้ดที่ไม่มีการจัดการ ในกรณีนี้ GHC จะทำงานได้ดีสำหรับคุณ ปลายปีที่แล้วฉันเขียนเซิร์ฟเวอร์ DDE ภายใต้ Windows โดยใช้FFIเพื่อพูดคุยกับไลบรารี MS DDE และน่าแปลกใจที่มันเป็นประสบการณ์ที่น่าพอใจอย่างยิ่ง (โดยเฉพาะอย่างยิ่งเมื่อฉันเป็นคน Unix) FFI ของ Haskell นั้นทรงพลัง (แม้จะรองรับเช่นการโทรกลับไปยังฟังก์ชัน Haskell จาก C หรือไลบรารีอื่น ๆ ) และการตรวจสอบประเภทของ Haskell เมื่อเขียนโค้ดระดับ C ก็เหมือนกับความฝันที่เป็นจริง

ประเด็นสุดท้ายนั้นเป็นข้อได้เปรียบที่สำคัญอย่างหนึ่งของ Haskell: ระบบประเภทนั้นยอดเยี่ยมมาก ที่กล่าวว่ามันเหมือนกับเครื่องมือที่ทรงพลัง ต้องใช้เวลาและความพยายามในการใช้ประโยชน์ให้เกิดประโยชน์

ใช่มันเป็นไปได้ที่จะเริ่มต้นด้วยการเขียนโค้ดเล็ก ๆ ใน Haskell ที่เชื่อมโยงไปยังส่วนที่เหลือของโค้ดของคุณ (แม้ว่าคุณอาจพบว่าการเริ่มต้นด้วยโปรแกรม Haskell ขนาดเล็กที่เชื่อมโยงกับรหัสอื่นของคุณง่ายขึ้น) และมันก็คุ้มค่าที่จะใช้จ่าย ใช้เวลาพอสมควรในการเรียนรู้เกี่ยวกับเรื่องนี้และใช้งานได้ทุกที่ คุณอาจจะเป็นเหมือนฉันโดยวางแผนโครงการที่ค่อนข้างสำคัญซึ่งรวมเข้ากับรหัส Windows (ในกรณีของฉันคือ Add-in ของ Excel ที่ซับซ้อน) ใน Haskell

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.