Haskell ใช้สำหรับอะไรในโลกแห่งความเป็นจริง? [ปิด]


475

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


56
ไม่ฉันไม่ได้เพราะมันเป็นคำตอบที่ชัดเจน ไม่มีห้องกระดิกสำหรับความคิดเห็นและเช่น ฉันแค่อยากรู้ว่าภาษาใดที่ถูกสร้างขึ้น
Sergio Tapia


12
@ Papuccino1 เดี๋ยวก่อนคุณต้องการที่จะรู้ว่ามันมีประโยชน์อะไรหรือมันถูกสร้างขึ้นมาเพื่ออะไร? อดีตคือสิ่งที่เป็นคำถามที่ถามและมีจำนวนมากห้องพักสำหรับความคิดเห็นที่นั่น ...
bdonlan

3
@ Papuccino1 - คำพิเศษในหัวข้อของคุณมีประโยชน์อย่างไรต่อคำถาม นอกจากนี้ฉันคิดว่าคุณเข้าใจผิดเกี่ยวกับการใช้คำว่า "หน้าที่" ในบริบทนี้ แต่ก็ยากที่จะบอก
คริสลัทซ์

2
ตามเว็บไซต์ของตัวเองหลาย ๆ บริษัท ใช้เพื่อจุดประสงค์ที่แตกต่างกัน ... haskell.org/haskellwiki/Haskell_in_industry
Julian

คำตอบ:


309

การใช้งานทั่วไปสำหรับภาษานี้มีอะไรบ้าง

การพัฒนาแอพพลิเคชั่นอย่างรวดเร็ว

หากคุณต้องการรู้ว่า "ทำไมต้อง Haskell" คุณต้องพิจารณาถึงข้อดีของภาษาโปรแกรมที่ใช้งานได้ (มาจากhttps://c2.com/cgi/wiki?AdvantagesOfFunctionalProgramming )

  • โปรแกรมฟังก์ชั่นมีแนวโน้มที่จะสั้นกว่าโปรแกรม ImperativeLanguage บ่อยครั้งสิ่งนี้นำไปสู่การเพิ่มผลผลิตของโปรแกรมเมอร์

  • FP กระตุ้นการสร้างต้นแบบอย่างรวดเร็ว ดังนั้นฉันคิดว่ามันเป็นกระบวนทัศน์การออกแบบซอฟต์แวร์ที่ดีที่สุดสำหรับ ExtremeProgrammers ... แต่ฉันรู้อะไรบ้าง

  • FP เป็นมอดุลาร์ในมิติของการทำงานโดยที่ ObjectOrientedProgramming นั้นเป็นโมดุลในมิติของส่วนประกอบต่าง ๆ

  • ความสามารถในการมีเค้กของคุณและกินมัน ลองนึกภาพคุณมีข้อความที่ซับซ้อนในการประมวลผลระบบ OO ทุกองค์ประกอบอาจทำการเปลี่ยนแปลงสถานะโดยขึ้นอยู่กับข้อความจากนั้นส่งต่อข้อความไปยังวัตถุบางอย่างที่มีการเชื่อมโยง มันจะไม่เจ๋งเกินกว่าที่จะย้อนกลับทุกการเปลี่ยนแปลงได้อย่างง่ายดายหากวัตถุบางอย่างที่ลึกลงไปในลำดับชั้นการโทรตัดสินใจว่าข้อความมีข้อบกพร่องหรือไม่? วิธีการเกี่ยวกับการมีประวัติของรัฐที่แตกต่างกันอย่างไร

  • งานทำความสะอาดหลายอย่างที่ทำเพื่อคุณ: การแยกโครงสร้างข้อมูล (PatternMatching), การจัดเก็บการเชื่อมตัวแปร (LexicalScope พร้อมการปิด), การพิมพ์ที่รัดกุม (TypeInference), GarbageCollection, การจัดสรรพื้นที่เก็บข้อมูล, ไม่ว่าจะใช้แบบกล่อง ) การเป็นตัวแทน ...

  • มัลติเธรดที่ปลอดภัย! โครงสร้างข้อมูลที่ไม่เปลี่ยนรูปไม่อยู่ภายใต้เงื่อนไขการแข่งขันของข้อมูลและดังนั้นจึงไม่จำเป็นต้องได้รับการปกป้องจากการล็อค หากคุณจัดสรรวัตถุใหม่อยู่เสมอแทนที่จะจัดการกับวัตถุที่มีอยู่แบบทำลายล้างการล็อกสามารถซ่อนอยู่ในระบบการจัดสรรและ GarbageCollection

นอกเหนือจาก Haskell นี้มีข้อดีของตัวเองเช่น:

  • ไวยากรณ์ที่ชัดเจนและใช้งานง่ายได้แรงบันดาลใจจากสัญลักษณ์ทางคณิตศาสตร์
  • รายการความเข้าใจในการสร้างรายการตามรายการที่มีอยู่
  • นิพจน์แลมบ์ดา: สร้างฟังก์ชั่นโดยไม่ต้องให้ชื่อชัดเจน ดังนั้นจึงง่ายต่อการจัดการสูตรที่มีขนาดใหญ่
  • Haskell จะสมบูรณ์โปร่งใส referentially รหัสใด ๆ ที่ใช้ I / O จะต้องถูกทำเครื่องหมายเช่นนี้ วิธีนี้จะช่วยให้คุณแยกรหัสด้วยผลข้างเคียง (เช่นการใส่ข้อความบนหน้าจอ) จากโค้ดโดยไม่ต้อง (การคำนวณ)
  • การประเมิน Lazy เป็นคุณสมบัติที่ดีจริงๆ:
    • แม้ว่าบางสิ่งจะทำให้เกิดข้อผิดพลาด แต่ก็ยังคงใช้ได้ตราบใดที่คุณไม่ได้ใช้ผลลัพธ์ ตัวอย่างเช่นคุณสามารถใส่1 / 0เป็นรายการแรกของรายการและจะยังคงทำงานได้หากคุณใช้รายการที่สองเท่านั้น
    • มันง่ายกว่าที่จะเขียนโปรแกรมค้นหาเช่นตัวแก้ซูโดกุเพราะมันไม่ได้โหลดทุกชุดพร้อมกันมันแค่สร้างมันขึ้นมา คุณสามารถทำได้ในภาษาอื่น แต่ Haskell จะทำตามค่าเริ่มต้นเท่านั้น

คุณสามารถตรวจสอบลิงค์ต่อไปนี้:


20
ความคิดต่อไปนี้มักจะข้ามความคิดของฉัน: ในภาษาที่บริสุทธิ์ฟังก์ชั่นจะส่งกลับผลลัพธ์เดียวกันเสมอเมื่อผ่านพารามิเตอร์เดียวกัน นี่คือการรับประกัน ในทางตรงข้ามภาษาที่จำเป็นต้องสร้างทุกอย่างที่ด้านบนของ "คำสั่ง" คำสั่งไม่ได้มาพร้อมกับการรับประกันใด ๆ (ยกเว้นการดำเนินการใช้เวลาและสร้างความร้อน) ดังนั้นรากฐานจึงสั่นคลอนแล้วและทุกสิ่งที่อยู่ด้านบนสุดของมันจะสั่นคลอน สำหรับฉันนี่เป็นหนึ่งในเหตุผลที่จะเรียนรู้ฮาเซล
Martin Drautzburg

8
เป็นเวลา 6 ปีแล้วที่คำถามนี้ถูกถามและเนื่องจากภาษาการเขียนโปรแกรม Go เปิดตัว แม้จะมีระบบที่อ่อนแอกว่าและโดยทั่วไปแล้วจะ "ด้อยกว่าเชิงวัตถุ" (ตามการใช้งานของแฟน ๆ / ML) แต่ก็มีการจัดส่งซอฟต์แวร์เพิ่มเติม (และที่สำคัญกว่า) ใน 6 ปีที่ผ่านมา ฉันหมายถึงสิ่งนี้เป็นกรณีศึกษา มีสิ่งต่าง ๆ ที่ชัดเจนซึ่งทำให้ภาษาที่ใช้งานอยู่กลับมาและพวกเขาไม่สามารถนำมาประกอบกับการโฆษณาได้
weberc2

3
คุณลืมจุด - การเข้ารหัสใน haskell เป็นการระเบิดแน่นอน;) ฉันสนุกมากที่ได้ลองใช้มือกับปัญหาบางอย่างใน haskell
J Atkin

8
@MartinDrautzburg แน่นอนว่าแถลงการณ์มาพร้อมกับการรับประกัน ภาษาที่มีประโยชน์ประเภทใดที่จะมีข้อความที่ไม่รับประกัน ยกตัวอย่างเช่นใน C x = 5;รับประกันว่าหลังจากที่มันรันมีค่าx 5
user253751

5
@ E4z9 ใช่ แต่ใน C ++ มันรับประกันว่าoperator =จะเรียกว่า และจะรับประกันว่าจะเกิดอะไรขึ้นหากคุณไม่ได้กำหนดoperator =
user253751

234

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


2
ฉันใช้ iPhone, Mac Haskell ใช้อยู่ที่ไหน ฉันหมายถึงแอพที่ฉันใช้พวกเขาเขียนใน Objective-C หรือ Swift + บางอย่างสำหรับฐานข้อมูลและเซิร์ฟเวอร์ สวิฟต์ยังสามารถใช้งานได้ ดังนั้นอีกครั้งฉันสับสนว่ามันใช้ที่ไหน
ฮันนี่

2
Facebook ใช้การตรวจจับสแปมด้วยมัน: code.facebook.com/posts/745068642270222/ …
อเล็กซ์

25
คำตอบนี้เขียนด้วยน้ำเสียงที่แตกต่างกันบอกว่า Haskell เป็นแบบฝึกหัดที่ยอดเยี่ยมสำหรับโปรแกรมเมอร์ซึ่ง IMO ไม่ได้ใช้ภาษาที่ใช้ทั่วไปได้ดีนัก
Passer By

5
ที่ Keera Studios เราเขียนเกมและแอพ iOS และ Android โดยใช้ Haskell
Ivan Perez

1
ฉันเห็นด้วยกับสิ่งนี้ทั้งหมด ฉันเขียนโค้ดจำนวนมากในช่วงหลายทศวรรษในภาษาที่จำเป็น ฉันสำรวจ Haskell มาสองสามเดือนแล้วและมันก็เปิดใจกับสิ่งที่ฉันไม่เคยคิดมาก่อน
Adahus

87

มีหนึ่งคำตอบที่ดีสำหรับสิ่งที่ภาษาวัตถุประสงค์ทั่วไปเช่น Haskell ดีสำหรับ: การเขียนโปรแกรมโดยทั่วไป

สำหรับสิ่งที่ใช้ในทางปฏิบัติฉันมีสามวิธีในการสร้างสิ่งนั้น:

บ่งชี้ว่ามันเป็นสิ่งที่ดีสำหรับกราฟิกระบบเครือข่ายการเขียนโปรแกรมระบบโครงสร้างข้อมูลฐานข้อมูลการพัฒนาการประมวลผลข้อความ ...

และในที่สุดความเห็นของฉันเกี่ยวกับสิ่งที่แข็งแกร่งจริงๆที่:

ฉันหวังว่ามันจะช่วยให้คุณเข้าใจว่าคำถามของคุณกว้างแค่ไหนหากตอบด้วยความเฉพาะเจาะจง


15
แท็กเมฆหัก
Elliot Cameron

แท็กคลาวด์ถูกสร้างโดยใช้wordcloudหรือไม่
Janus Troelsen

29

ตัวอย่างหนึ่งของการทำงานของ Haskell คือxmonad "ตัวจัดการหน้าต่างที่มีลูกเล่นในรหัสน้อยกว่า 1200 บรรทัด"


18

จากHaskell Wiki :

Haskell มีการใช้งานที่หลากหลายในเชิงพาณิชย์ตั้งแต่การบินและอวกาศไปจนถึงการป้องกันทางการเงินไปจนถึง บริษัท ที่เพิ่งเริ่มก่อตั้ง บริษัท ออกแบบฮาร์ดแวร์และผู้ผลิตเครื่องตัดหญ้า หน้านี้รวบรวมทรัพยากรเกี่ยวกับการใช้งานอุตสาหกรรมของ Haskell

ตามที่วิกิพีเดียภาษาHaskellถูกสร้างขึ้นจากความต้องการที่จะรวมภาษาการทำงานที่มีอยู่เป็นภาษาทั่วไปซึ่งสามารถใช้สำหรับการวิจัยในอนาคตในการออกแบบฟังก์ชั่นภาษา

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

หากคุณยังถามตัวเองว่า "ทำไมฉันจึงควรใช้" อ่านคำว่าทำไมจึงควรใช้ ส่วนของ Haskell Wiki Introduction


13

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

และใช่ฉันคือ Rayne จาก Dreamincode :)

ฉันอยากจะพูดถึงว่าในกรณีที่คุณไม่ได้อ่านหน้าวิกิพีเดียการเขียนโปรแกรมการทำงานเป็นกระบวนทัศน์เช่นการเขียนโปรแกรมเชิงวัตถุเป็นกระบวนทัศน์ ในกรณีที่คุณไม่รู้ Haskell ยังสามารถใช้งานได้ในแง่ที่ใช้งานได้ มันทำงานได้ค่อนข้างดีที่

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


9

ฉันมีเท่ห์หนึ่ง Facebook สร้างเครื่องมืออัตโนมัติสำหรับการเขียนโค้ด PHP ใหม่ พวกเขาแยกแหล่งที่มาเป็นต้นไม้ไวยากรณ์นามธรรมทำการเปลี่ยนแปลงบางอย่าง:

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

ฉันไม่รู้ว่าทำไม แต่ดูเหมือนว่าจะเป็นสไตล์เฉพาะของพวกเขาแล้วพวกเขาก็พิมพ์สวย

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

เราใช้ Haskell เพื่อสร้างภาษาเฉพาะโดเมนขนาดเล็ก การประมวลผลข้อมูลจำนวนมาก การพัฒนาเว็บ เว็บสไปเดอร์ โปรแกรมทดสอบ การเขียนสคริปต์การบริหารระบบ สคริปต์เบื้องหลังซึ่งสื่อสารกับบุคคลอื่น สคริปต์การตรวจสอบ (เรามี DSL ที่ใช้งานร่วมกันได้ดีกับ munin ทำให้ง่ายต่อการเขียนรหัสตรวจสอบที่ถูกต้องสำหรับแอปพลิเคชันของคุณ)

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


6
Re: สไตล์ FB วางเท็จก่อน == หมายถึงถ้าคุณลืมและเขียนเพียงหนึ่งเดียว = แล้วพฤติกรรมที่เกิดขึ้นจะเห็นได้ชัดว่าผิดมากกว่าการดำเนินการมอบหมายโดยไม่ตั้งใจและดำเนินการตามปกติ
Magnus

A นั่นคือความฉลาดพลังของคุณโดยเฉพาะอย่างยิ่งข้อผิดพลาดที่ต้องรู้เวลารวบรวม
Edgar Klerks

@EdgarKlerks, PHP ไม่มีเวลารวบรวม สิ่งนี้บังคับให้มีการยกข้อยกเว้นเมื่อเกิดข้อผิดพลาดแทนที่จะนำไปสู่พฤติกรรมที่แปลกประหลาดหรือข้อผิดพลาดในรหัสที่อยู่ห่างไกล
dfeuer

แม้ว่าฉันจะเห็นประโยชน์ของการเขียนfalseทางด้านซ้าย แต่ฉันไม่เห็นจุดที่ใช้เครื่องมือในการทำโดยอัตโนมัติ: หากคุณมี==ผู้ให้บริการอยู่แล้วคุณก็รู้อยู่แล้วว่าคุณไม่มีข้อผิดพลาดซึ่งเป็นส่วนหนึ่งของ lex-pass มีไว้เพื่อจับและถ้าคุณมี=แทนไม่มีวิธีที่แน่นอนที่จะบอกหรือไม่ว่ามันเป็นเช่นนั้นโดยเจตนา
Jeremy List

1
@ JeremyList บางทีพวกเขาจะเข้มงวดกับสไตล์การเขียนโค้ด ฉันเห็นว่าโค้ดที่จัดรูปแบบเรียบร้อยเชิญให้เขียนโค้ดที่จัดรูปแบบเรียบร้อยมากขึ้น เพียงเดาป่า
Edgar Klerks

6

จากHaskell :

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

โดยทั่วไป Haskell สามารถใช้เพื่อสร้างอะไรก็ได้ที่คุณมักจะสร้างโดยใช้ภาษาที่ใช้งานทั่วไปอื่น ๆ (เช่น C #, Java, C, C ++ เป็นต้น)


5

ตัวอย่างเช่นสำหรับการพัฒนาเว็บแอปพลิเคชัน HTML5 แบบเรียลไทม์ ดูElmคอมไพเลอร์ซึ่งมีการใช้งานใน Haskell และไวยากรณ์ที่ยืมมาจาก Haskell มาก


3

นี่เป็นแหล่งข้อมูลที่ดีเกี่ยวกับ Haskell และการใช้งาน:

โอเพนซอร์ส Haskell ข่าวและการเติบโต


คำตอบสำหรับลิงค์เท่านั้นไม่เหมาะ ที่กล่าวว่าเนื่องจากคำถามนี้ถูกปิดมันอาจจะดีกว่าที่จะแก้ไขกว่าจะลบ
dfeuer

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