อะไรคือความแตกต่างระหว่าง SML และ OCaml? [ปิด]


99

อะไรทำให้ภาษา ML สองภาษาแตกต่างกัน?


3
การเปรียบเทียบวากยสัมพันธ์: adam.chlipala.net/mlcomp
nawfal

คำตอบ:


157

มีความแตกต่างมากมายทางเทคนิคบางอย่างสังคมการเมือง ฉันพยายามใส่ความแตกต่างที่สำคัญกว่าก่อน

  • SML เป็นภาษาที่มีความหมายและมาตรฐาน มีความเสถียร (และในความเป็นจริงถูกแช่แข็งจึงไม่สามารถวิวัฒนาการได้) Objective Caml เป็นการดำเนินการที่ควบคุมโดยกลุ่มย่อยที่ INRIA มันยังคงพัฒนาไปเรื่อย ๆ (IMO วิวัฒนาการได้รับการจัดการอย่างดี)

  • SML มีการใช้งานมากมาย Caml มีเพียงหนึ่งเดียว

  • Objective Caml มีคุณสมบัติเพิ่มเติมหลายประการซึ่งสิ่งที่โดดเด่นที่สุดน่าจะเป็นวัตถุและรูปแบบหลายรูปแบบ

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

  • มีความแตกต่างทางวากยสัมพันธ์ค่อนข้างน้อย

  • ไลบรารีและฟังก์ชันมาตรฐานแตกต่างกันอย่างมาก ไลบรารี Caml มีความจำเป็นมากในขณะที่ไลบรารีพื้นฐานมาตรฐาน SML นั้นใช้งานได้มากกว่า ตัวอย่างเช่นองค์ประกอบของฟังก์ชันเป็นพื้นฐานระดับบนสุดใน SML ไม่ใช่ส่วนหนึ่งของไลบรารี Caml ไลบรารีสตริง Caml ไม่มีฟังก์ชันพับ (อย่างน้อยก็ไม่ใช่ของเวอร์ชัน 3.08) การใช้งานListฟังก์ชันCaml จำนวนมากไม่ปลอดภัยสำหรับรายการที่ยาวมาก พวกเขาระเบิดกอง

  • ระบบประเภทมีความแตกต่างกันเล็กน้อย: ใน Caml คำอธิบายประกอบประเภทบนนิพจน์e : tyจะได้รับการยอมรับหากชนิดty รวมเข้ากับชนิดของe. ใน SML e : tyจะยอมรับเฉพาะในกรณีที่ประเภทtyนั้นเป็นอินสแตนซ์ของประเภทe. ความแตกต่างนี้ทำให้คำอธิบายประกอบใน Caml มีประโยชน์น้อยกว่ามากในทางปฏิบัติเนื่องจากเป็นไปไม่ได้ที่จะใช้คำอธิบายประกอบประเภทเพื่อยืนยันว่านิพจน์เป็นความหลากหลาย

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

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

  • ใน SML โปรแกรมเมอร์สามารถควบคุมลำดับความสำคัญและความสัมพันธ์ของตัวดำเนินการ infix ได้ ใน Caml ค่าเหล่านี้กำหนดโดยอักขระตัวแรกของชื่อตัวดำเนินการ ข้อ จำกัด นี้ จำกัด ประโยชน์ของความสามารถในการกำหนดสัญกรณ์ infix ของคุณเอง

สำหรับสมบูรณ์การวิเคราะห์รายละเอียดเพิ่มเติมด้วยกับความคิดเห็นของกองบรรณาธิการคุณยังสามารถดูที่หน้าอดัมเปรียบเทียบ Chlipala ของ


4
คุณลืมความเท่าเทียมกัน (ไม่ จำกัด และไม่ปลอดภัยใน OCaml เทียบกับประเภทความเท่าเทียมกันที่ปลอดภัย แต่ถูก จำกัด ใน SML), ตัวแปรประเภทที่ไม่ใช่ทั่วไป ('_a ใน OCaml), printf, การตีความชื่อไฟล์เป็นชื่อโมดูลใน OCaml, แกงมากกว่าใน stdlib ของ OCaml คุณเขียนอินเทอร์เฟซสองครั้งเมื่อคุณหมายถึงอย่างอื่น (การใช้งาน?) ในครั้งที่สอง
JD

1
และ OCaml หรือรูปแบบและยามในการจับคู่รูปแบบ
JD

1
โปรดทราบว่าข้อ จำกัด เกี่ยวกับประโยชน์ของคำอธิบายประกอบประเภทได้รับการบรรเทาลงบ้างใน 3.12 ซึ่งการใส่คำอธิบายประกอบe : 'a . ty(a)เป็นไปได้และมีความหมาย

4
คุณตั้งข้อสังเกตที่สำคัญ: "ห้องสมุด Caml มีความจำเป็นมาก" สิ่งนี้ดูเหมือนจะแทรกซึมปรัชญาทั้งหมดจนถึงจุดที่การใช้งานแบบขนานบนฮาร์ดแวร์มัลติคอร์ดูเหมือนจะเป็นเรื่องยากมากจนเป็นไปไม่ได้ ในทางตรงกันข้าม SML คู่ขนานอย่างน้อยสองตัวคือ Mlton และ Poly / ML
Makarius

2
เกี่ยวกับจุดที่สามของคุณชื่อเร็กคอร์ดไม่ต้องการความเป็นเอกลักษณ์อีกต่อไปใน OCaml
PatJ

31

สำหรับรายละเอียดเกี่ยวกับความแตกต่างทางวากยสัมพันธ์ที่ Norman Ramsey กล่าวถึงนี่คือหน้าเว็บสองสามหน้า:


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