ภาษาการวิจัยใดที่มีระบบการพิมพ์ที่ดีกว่า Haskell และทำไม


14

ที่นี่ฉันอ่านแล้ว:

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

ดังนั้นฉันถามสองสิ่ง:

  1. ภาษาวิจัยใดที่มีระบบพิมพ์ที่ทรงพลังกว่า Haskell
  2. พวกเขาปรับปรุงอะไร

ฉันเป็นโปรแกรมเมอร์ดังนั้นฉันไม่รู้วัตถุทางคณิตศาสตร์มากมายที่ใช้ในทฤษฎีชนิดโปรดอธิบายอย่างนุ่มนวลหากคุณสามารถ


3
"ดีกว่า" คืออะไร
David Richerby

2
@DavidRicherby ฉันเดาว่าหมายถึงระบบประเภทที่มีประสิทธิภาพมากขึ้น
ВиталийОлегович

2
เมื่อคุณได้พิสูจน์แล้วว่าระบบแบบทัวริงนั้นสมบูรณ์จริง ๆ หรือไม่ ;-)
DevSolar

7
เครื่องทัวริงมีความสมบูรณ์แบบทำไมคุณไม่ใช้มันสำหรับงานเขียนโปรแกรมทุกวัน?
gallais

4
โปรดทราบว่าข้อความต้นฉบับกล่าวถึงภาษาที่มีระบบประเภทขั้นสูงกว่าและไม่ทำให้การยืนยันใด ๆ ว่า 'ขั้นสูงมากขึ้น' ดีกว่าหรือแย่กว่าสำหรับระบบพิมพ์
Peteris

คำตอบ:


25

คำถามนี้ค่อนข้างมีปัญหาเนื่องจากต้องอาศัยคำจำกัดความของ "ดีกว่า"

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

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

ภาษาเหล่านี้ "ดีกว่า" กว่า Haskell ไหม พวกเขาสามารถตรวจสอบการพิสูจน์ความถูกต้องขั้นสูงสำหรับรหัสของคุณ แต่พวกเขาไม่สามารถพิสูจน์คุณสมบัติเกี่ยวกับรหัสของคุณได้อย่างที่ Haskell ทำได้

ภาษาการวิจัยอีกนั่นคือ "ดี" กว่า Haskell เป็นLiquidHaskell นี่คือพื้นแฮสเค็ลล์ที่มีการปรับแต่งประเภทปิดด้านบนแยกจากความคิดเห็นพิเศษ

ประเภทการปรับแต่งช่วยให้คุณปรับแต่งประเภทด้วยคุณสมบัติ ตัวอย่างเช่นแทนที่จะมีIntคุณสามารถระบุ{i : Int | i > 0}ให้ประเภทของจำนวนเต็มบวกทั้งหมด การอนุมานประเภทนั้นสามารถตัดสินใจได้ด้วยประเภทการปรับแต่ง แต่คุณไม่สามารถพิสูจน์ได้ว่ามีคุณสมบัติความถูกต้องเกือบเท่ากับประเภทการปรับปรุง

มีระบบประเภทการปรับแต่งอื่น ๆ อยู่ที่นั่น แต่ฉันไม่คุ้นเคยกับระบบใด ๆ เลย


ขอขอบคุณ! เป็นไปได้หรือไม่ที่จะพิสูจน์ว่าระบบประเภท Haskell เป็นระบบที่แข็งแกร่งที่สุดที่ยังคงใช้การอนุมานได้?
ВиталийОлегович

3
Haskell ไม่ได้แข็งแกร่งที่สุดที่อนุญาตให้อนุมานประเภท ประเภทการปรับแต่งที่ฉันได้กล่าวถึงอนุญาตให้มีการอนุมานประเภทและมีการเพิ่มส่วนขยาย GHC จำนวนมากใน Haskell ซึ่งช่วยให้ระบบประเภทที่แข็งแกร่งขึ้นเล็กน้อย
jmite

4
นอกเหนือจากนี้แล้วยังมีระบบหลายประเภทและอีกหลายระบบที่หาที่เปรียบไม่ได้: มันจะแข็งแกร่งกว่า Haskell ในบางวิธี แต่จะอ่อนแอกว่า Haskell ในระบบอื่น ๆ ไม่มีการเรียงลำดับแบบเชิงเส้นของระบบประเภทตั้งแต่แข็งถึงอ่อนที่สุด
jmite

5
ตอนนี้ฉันต้องการพิสูจน์ว่าไม่มีระบบพิมพ์ที่แข็งแกร่งที่สุดที่อนุญาตการอนุมานประเภท จะต้องต่อต้านการพิสูจน์ข้อเท็จจริงที่ไร้ประโยชน์
Andrej Bauer

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

10

ตระกูล ML ของภาษา (StandardML, OCaml ) เกิดขึ้นจากประเพณีที่คล้ายคลึงกับ Haskell ดังนั้นจึงมีระบบประเภทที่คล้ายคลึงกัน แม้ว่ามันจะไม่เหมือนกับ Haskell แต่และคุณสมบัติบางอย่างของมันอาจเหมาะกับคุณมากกว่า (ไม่มีสิ่งที่เป็นระบบการพิมพ์ที่ดีกว่าอย่างเป็นกลางเนื่องจากระบบประเภทในภาษาการเขียนโปรแกรมมีอยู่เพื่อช่วยเหลือมนุษย์ ) นี่คือคุณสมบัติบางอย่างของ OCaml ที่ Haskell ไม่มี (แต่อาจมีแนวคิดคล้ายกัน) หรือ Haskell มี แต่ทำแตกต่างกัน:

  1. สายพันธุ์ polymorphic
  2. วัตถุกับsubtyping เชิงลึกและการเรียน
  3. Functorsซึ่งเป็นแผนที่ระหว่างโมดูล (Haskell มีโมดูล) และแม้กระทั่งโมดูลชั้นหนึ่ง

และได้โปรดไม่จำเป็นต้องเปลี่ยนสิ่งนี้ให้เป็น ML-Haskell shootout มิฉะนั้นฉันจะเริ่มเชื่อมโยงไปยังบล็อกของ Bob Harper ;-)


9

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

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


3
อย่างใด "เผยแพร่" และ "ต่อต้านการวิจัย" ไม่ไปด้วยกันได้ดี
Andrej Bauer

1
เอกลักษณ์นั้นเป็นแนวคิดที่น่าสนใจ แต่ IMO มันเกี่ยวกับความหมายมากกว่าลักษณะของระบบแบบนี้ และนี่ทำให้ระบบประเภทดีขึ้นจริงๆหรือไม่ Clean สามารถทำสิ่งที่ใหม่กว่า Haskell ได้เพิ่มลงในระบบชนิดของมัน, polymorphism ที่มีอันดับสูงกว่า ฯลฯ - สิ่งเหล่านี้เป็นไปได้ไหมเมื่อระบบประเภทต้องการจัดการกับความเป็นเอกลักษณ์อยู่แล้ว?
leftaroundabout

1
@leftaroundabout คุณคุ้นเคยกับประเภทที่ไม่เหมือนใครหรือตรรกะเชิงเส้นอย่างไร หาก x มีชนิดที่ไม่ซ้ำกันดังนั้น f (x, x) จะไม่ถูกพิมพ์เช่นกัน อาจเป็นไปได้ที่จะขยาย Haskell เพื่อรองรับประเภทที่เป็นเอกลักษณ์ ความหมายย้ายใน C ++ อาจถูกมองว่าเป็นการปรับปรุงการสนับสนุนสำหรับชนิดที่ไม่ซ้ำกันที่ด้านบนของระบบชนิดที่มีอยู่
โทมัสคลิมเพล

ฉันคุ้นเคยกับความหมายของการเคลื่อนไหวแบบ C ++ บางทีนั่นอาจเป็นสาเหตุว่าทำไมความประทับใจในตัวฉันถึงไม่เหมือนกันคือ สิ่งที่ฉันคิดว่าน่าสนใจก็คือการสร้างความเป็นเอกลักษณ์แบบเต็มรูปแบบออกไปข้างนอกขัดขวางคุณสมบัติอื่น ๆ ของระบบขั้นสูง?
leftaroundabout

1
@leftaroundabout การอ้างอิงค่าเสียงเหมือนสิ่งที่ระบบประเภทให้ฉัน ทำไมประเภทที่ไม่ซ้ำจึงควรเป็นอุปสรรคต่อคุณสมบัติประเภทขั้นสูงอื่น ๆ ในกรณีที่เลวร้ายที่สุดคุณสมบัติขั้นสูงเหล่านั้นจะไม่สามารถใช้กับประเภทที่ไม่ซ้ำกันได้ แน่นอนว่าคุณสมบัติ "โลกแห่งความจริง" เช่นประเภทที่ไม่เหมือนใครหมายถึงการใช้ความกว้างแทนความลึกและเวลาที่คุณใช้ในการไปที่กว้างขึ้นจะไม่อยู่ที่นั่นอีกต่อไป แต่ฉันมีความรู้สึกว่าประเภทที่เป็นเอกลักษณ์มีความสมดุลระหว่างทฤษฎีและการปฏิบัติดังนั้นฉันคิดว่าเวลาจะใช้เวลาอย่างดี
โทมัสคลิมเพล
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.