ภาษาการผลิตที่เข้ากันได้และใช้กันอย่างแพร่หลายที่สุดในการส่งออกความรู้และทักษะที่ได้จาก Haskell คืออะไร?


14

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

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

คำตอบ:


21

Haskell มีความสัมพันธ์อย่างใกล้ชิดกับตระกูลภาษา ML ซึ่งรวมถึงสิ่งต่าง ๆ เช่นOCamlแน่นอน แต่ยังเป็นF #บนแพลตฟอร์ม. NET ภาษาเหล่านี้ใช้ร่วมกับ Haskell ซึ่งเป็นพื้นฐานของระบบประเภทและวิธีการใช้ข้อมูล - ประเภทข้อมูลเกี่ยวกับพีชคณิตการจับคู่รูปแบบการอนุมานประเภท ฯลฯ พวกเขาสามารถแตกต่างอย่างมากจาก Haskell ในจุดอื่น ๆ แน่นอนว่า ML ส่วนใหญ่เข้มงวดและไม่บริสุทธิ์ เริ่มต้นด้วยและความนิยมของ Haskell ในฐานะยานพาหนะสำหรับการวิจัยในระบบพิมพ์และการออกแบบภาษาหมายความว่าภาษาสไตล์ ML ส่วนใหญ่มักจะมีระบบพิมพ์ที่ทรงพลังน้อยกว่า (แต่อาจเข้าใจได้ง่ายกว่า) มันอาจจะปลอดภัยที่จะบอกว่าในขณะที่คุณอาจพลาดบางสิ่งเกี่ยวกับ Haskell โดยเฉพาะอย่างยิ่งในตอนแรกโปรแกรมเมอร์ Haskell ส่วนใหญ่อาจรู้สึกสบายใจที่บ้านใน ML ที่ค่อนข้างเร็วในระดับการทำสิ่งพื้นฐาน หากคุณต้องการภาษาที่มีโครงสร้างโดยรวมเหมือนกับ Haskell ML จะเป็นทางออกที่ดีที่สุดของคุณ

ด้านการทำงานของสกาลาดึงมาจากประเพณี ML อย่างมากและยังดึงคุณสมบัติระบบขั้นสูงบางอย่างที่คุ้นเคยจาก Haskell รวมถึงระบบ OOP มาตรฐานที่รวมเข้ากับข้างต้น ในขณะที่ OO ในภาษาสไตล์ ML นั้นมีแนวโน้มที่จะเข้าใกล้เป็น "โมเดล OO ด้วยเครื่องมือการทำงานขั้นพื้นฐาน" มากกว่า Scala มีชีวิตและสูดลมหายใจ OO แบบ Java สิ่งนี้มีประโยชน์สำหรับ Java interop อย่างที่คุณอาจจินตนาการและนำเสนอสภาพแวดล้อมการทำงานที่คุ้นเคยสำหรับโปรแกรมเมอร์ OO อย่างไรก็ตามจากพื้นหลังของ Haskell คุณมีแนวโน้มที่จะถูกรบกวนด้วยวิธีการผสมผสานสิ่งต่าง ๆ เข้าด้วยกันใน Scala ทำให้สำนวนฟังก์ชั่นที่ใช้งานได้ยากขึ้นและค้นหา Java APIs ส่วนใหญ่ที่ออกแบบมาไม่ดีและใช้งานยาก

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

การพูดกับตัวเองด้วยข้อจำกัดความรับผิดชอบว่าประสบการณ์ครั้งแรกของฉันในการเขียนโปรแกรมการทำงานอยู่ใน Scheme ฉันอาจจะเอนตัวไปที่ Clojure ด้วย OCaml เป็นตัวเลือกที่สอง


1
F # ถูกกล่าวว่าได้รับแรงบันดาลใจจาก OCaml หากไม่ได้มาจาก คำถาม SO ก่อนหน้านี้F # และ OCamlครอบคลุมการอภิปรายที่ดีของความสัมพันธ์นั้น หากคุณอยู่ด้าน. NET, F # จะเป็นตัวเลือกที่ยอดเยี่ยมและขณะนี้ Microsoft พิจารณาภาษา. NET F # a "First class" ในด้านของ JVM สกาล่ามีประวัติด้านการใช้งานในอุตสาหกรรมและ Clojure ดูเหมือนว่าจะเพิ่มขึ้นในชาร์ต ฉันไม่ทราบทางเลือกที่ดีที่สุดในขณะนี้เนื่องจากตลาดยังไม่ได้ประกาศผู้ชนะที่ชัดเจนในพื้นที่เชิงวัตถุนี้
John Tobler

4

ฉันไม่เคยใช้ตัวเอง แต่ฉันเห็น Scala โผล่ขึ้นมาในบล็อกหรือคำอธิบายโครงการบางครั้งและฉันเชื่อว่ามันใช้แนวคิดที่สำคัญจาก Haskell Scala คอมไพล์ลงไปที่ JVM และสามารถทำงานร่วมกับ Java


3

ทางเลือกที่ทำงานเป็นErlang แม้ว่ามันจะเป็นภาษาที่เกิดขึ้นพร้อมกันมาก แต่เซตย่อยของซีเควนเชียลนั้นเป็นภาษาที่ใช้งานได้จริงโดยมีคุณสมบัติหลายอย่างของภาษาที่ใช้งานได้เช่นการปิดข้อมูลที่ไม่เปลี่ยนรูปแบบและการจับคู่รูปแบบ มันทำงานบนหลาย ๆ แพลตฟอร์มรวมถึง linux, unixes, windows และ macosx ขณะนี้แม้จะมีการดำเนินการใน JVM, erjang มันสามารถสื่อสารและอยู่ร่วมกับภาษาอื่น ๆ ได้อย่างง่ายดายนี่คือวิธีที่ใช้บ่อย

ตรวจสอบเว็บไซต์หลัก


3

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

คุณสมบัติเด่นของ Clojure ที่ผู้ใช้ Haskell อาจคุ้นเคยและน่าสนใจ:

  • ภาษาหลักใช้งานได้จริง - ในขณะที่ผลข้างเคียงเป็นไปได้พวกมันจะถูกฝังอยู่ในสถานที่เฉพาะ (เช่นการอ้างอิง STM, ฟังก์ชั่น IO, การทำงานร่วมกันของ Java)
  • โครงสร้างข้อมูลทั้งหมดไม่เปลี่ยนแปลงและคงอยู่
  • ความเกียจคร้าน - ประสบความสำเร็จเป็นส่วนใหญ่ผ่านการเรียงตัวกันอย่างแพร่หลายของ Clojure สิ่งนี้จะให้ความรู้สึกคุ้นเคยกับผู้ใช้ Haskell ลำดับการขี้เกียจไม่มีที่สิ้นสุดเป็นเรื่องปกติ
  • ซอฟต์แวร์ Transactional Memory - เป็นวิธีหลักในการจัดการสถานะที่ไม่แน่นอนใน Clojure คุ้มค่าที่จะรับชมวิดีโอที่ยอดเยี่ยมนี้ที่ Rich Hickey อธิบายวิธีการของตัวตนและสถานะของ Clojure: http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey

ความแตกต่างที่สำคัญ (อาจเป็นบวกหรือลบขึ้นอยู่กับมุมมองของคุณ):

  • มันไม่บริสุทธิ์ - แม้ว่าการสังเกตของฉันจะเป็นไปในลักษณะที่เป็นสำนวน Clojure ที่จะติดฟังก์ชั่นบริสุทธิ์ทุกที่ที่เป็นไปได้
  • แบบไดนามิกมากกว่าการพิมพ์แบบคงที่ (แม้ว่าคำแนะนำประเภทคงที่สามารถใช้เป็นทางเลือกสำหรับการเพิ่มประสิทธิภาพ)
  • มันคือ JVM langauage พร้อมการเข้าถึงทั้งระบบ Java Library อย่างสมบูรณ์ - นี่คือความเห็นของฉันในข้อได้เปรียบที่ใหญ่ที่สุดในแง่ของการใช้งานจริง
  • ไวยากรณ์เสียงกระเพื่อม ดังนั้นคุณจะได้รับประโยชน์ทั้งหมดจากการเป็นhomoiconicityโดยที่คุณไม่ต้องเรียนรู้ที่จะมองผ่านวงเล็บทั้งหมด :-)

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


1

ถ้าคุณชอบ Haskell แต่ต้องสร้างรหัสสำหรับ JVM การเพิ่มความอิสระอาจน่าสนใจสำหรับคุณ มันถูกออกแบบมาให้ใกล้เคียงกับ Haskell 2010 มากที่สุด แต่ก็สร้างโค้ด Java

แน่นอนว่า frege นั้นไม่เหมือน "ภาษาที่ใช้กันอย่างแพร่หลาย" (เพิ่งเผยแพร่เมื่อเร็ว ๆ นี้) แต่ Java นั้นแน่นอน

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