F # มาจาก OCaml แต่มีรายการหลักอะไรบ้างที่ขาดหายไปหรือเพิ่มเข้าไป? โดยเฉพาะฉันอยากรู้ว่าแหล่งข้อมูลสำหรับการเรียนรู้ OCaml นั้นมีประโยชน์กับคนที่ต้องการเรียนรู้ F # หรือไม่
F # มาจาก OCaml แต่มีรายการหลักอะไรบ้างที่ขาดหายไปหรือเพิ่มเข้าไป? โดยเฉพาะฉันอยากรู้ว่าแหล่งข้อมูลสำหรับการเรียนรู้ OCaml นั้นมีประโยชน์กับคนที่ต้องการเรียนรู้ F # หรือไม่
คำตอบ:
ความแตกต่างที่สำคัญคือ F # ไม่รองรับ:
นอกจากนี้ F # ยังมีไวยากรณ์ที่แตกต่างกันสำหรับพารามิเตอร์ที่มีป้ายกำกับและพารามิเตอร์เสริม
ตามทฤษฎีแล้วโปรแกรม OCaml ที่ไม่ใช้คุณสมบัติเหล่านี้สามารถคอมไพล์ด้วย F # การเรียนรู้ OCaml เป็นการแนะนำ F # ที่สมเหตุสมผลอย่างสมบูรณ์ (และในทางกลับกันฉันก็นึกภาพออก)
รายการความแตกต่างทั้งหมดอยู่ที่นี่ (หมายเหตุ: archive.org แทนที่ลิงก์ที่ตายแล้ว)
คำถามนี้ได้รับคำตอบมาระยะหนึ่งแล้ว แต่ฉันค่อนข้างแปลกใจที่คำตอบส่วนใหญ่บอกว่าคุณสมบัติของ OCaml หายไปใน F # - นี่เป็นเรื่องดีที่จะทราบว่าคุณต้องการพอร์ตโปรแกรม OCaml ที่มีอยู่ไปยัง F # หรือไม่ (ซึ่งน่าจะเป็น แรงจูงใจของบทความอ้างอิงส่วนใหญ่) อย่างไรก็ตามมีคุณสมบัติมากมายที่ทำให้ F # เป็นภาษาอื่น (ไม่ใช่แค่ OCaml เวอร์ชัน จำกัด สำหรับ. NET!) นี่คือสองสิ่งที่เพิ่มเข้ามาใน F #:
+
กับประเภทตัวเลขทั้งหมดและประเภทของคุณที่รองรับได้และโดยสุจริตฉันคิดว่าการกล่าวถึง Visual Studio IDE ก็คุ้มค่าเช่นกัน นี่ไม่ใช่ส่วนหนึ่งของภาษา แต่ช่วยปรับปรุงประสบการณ์ของผู้ใช้อย่างแท้จริง (การรองรับ IntelliSense ใน Visual Studio นั้นดีมาก!)
หากคุณดูรายชื่อมีหลายสิ่งหลายอย่างที่ทำให้ F # ได้รับความนิยมเป็นอย่างมากดังนั้นมันจึงเป็นมากกว่าแค่ "OCaml without functors" F # ขึ้นอยู่กับ OCaml (และรับแนวคิดจากภาษาอื่นเช่น Haskell) และแบ่งปันแง่มุมต่างๆกับพวกเขาอย่างไรก็ตามยังมีสิ่งอื่น ๆ อีกมากมาย ฉันเดาว่าหากไม่มีสิ่งต่างๆเช่นเวิร์กโฟลว์แบบอะซิงโครนัส OO สไตล์. NET และการเขียนโปรแกรมเมตาแผนก Microsoft Developer จะไม่รวม F # ใน Visual Studio 2010
<@ a @>
คำจำกัดความของประเภทเช่น<@ type t = int @>
และไม่สามารถจัดการไวยากรณ์ตามอำเภอใจและตัวแยกวิเคราะห์ที่ขยายได้น้อยกว่าอย่างที่ Camlp4 ทำ การขาดระบบมหภาคที่ดีนั้นเป็นข้อบกพร่องอย่างหนึ่ง แต่ IMHO การขาดคำศัพท์และตัวแยกวิเคราะห์ที่เหมาะสมสำหรับ F # นั้นเป็นอุปสรรคที่ร้ายแรงกว่า ฉันแนะนำให้นักพัฒนาสร้างตัวย่อและตัวแยกวิเคราะห์โดยใช้ OCaml โดย จำกัด ตัวเองไว้ที่ชุดย่อยที่ F # รองรับและย้ายกลับไปที่ F # เพื่อรับประโยชน์จากการสนับสนุนเครื่องมือที่เหนือกว่าของ OCaml!
ฉันมักจะอธิบายว่า F # เป็นลูกพี่ลูกน้องของ OCaml เพราะ OCaml มีคุณสมบัติมากมายที่ F # ไม่มีและไม่น่าจะได้รับ F # เกี่ยวข้องกับภาษา CAML ก่อนหน้ามากขึ้น โดยเฉพาะอย่างยิ่ง F # มีการสนับสนุนที่ จำกัด มากสำหรับสิ่งที่เป็นนามธรรมและไม่มีการรองรับการพิมพ์เชิงโครงสร้าง (เช่นวัตถุของ OCaml และตัวแปรโพลีมอร์ฟิก ) เลย
ตรงกันข้ามกับสิ่งที่ผู้ตอบบางคนเขียน F # มีการสนับสนุน (จำกัด ) สำหรับป้ายกำกับ ("ชื่อ") และอาร์กิวเมนต์ที่เป็นทางเลือก
อย่างไรก็ตามสิ่งเหล่านี้เป็นคุณสมบัติขั้นสูงทั้งหมดและคุณสามารถเริ่มต้นใช้งานแนวคิดพื้นฐานเบื้องหลังการเขียนโปรแกรมการทำงานสไตล์ OCaml ขนาดเล็กโดยใช้ทรัพยากรเกี่ยวกับ OCaml ความแตกต่างที่สำคัญประการแรกที่คุณจะพบคือปัญหาขนาดใหญ่เช่นการห่อหุ้มและนามธรรมซึ่งได้รับการแก้ไขด้วยวิธีที่แตกต่างกันอย่างสิ้นเชิงใน OCaml และใน F # หากคุณต้องการเรียนรู้วิธีการทำใน F # วรรณกรรมที่มีอยู่เพียงบทความเดียวคือบทความนี้เกี่ยวกับโครงสร้างข้อมูลที่ใช้งานได้จริง
ฉันยังค้นพบว่าระบบโมดูลที่ยอดเยี่ยมของ OCaml ทำให้ง่ายต่อการกำหนดพารามิเตอร์โค้ดตามประเภทต่างๆ (เช่นโครงสร้างข้อมูล) แต่ทางเลือก OOP นั้นไม่เพียง แต่น่ากลัว แต่แทบจะไม่ได้ใช้กับ. NET ยิ่งไปกว่านั้นเมื่อพยายามเขียนโครงสร้างข้อมูลที่กำหนดพารามิเตอร์อย่างหรูหราฉันพบข้อบกพร่องหลายสิบข้อในคอมไพเลอร์ F # เพราะไม่มีใครเคยพยายามทำสิ่งนี้มาก่อน F # stdlib มีการปรับใช้โครงสร้างข้อมูลที่ดี แต่แทบจะไม่มีการนำมาใช้ซ้ำกล่าวคือเป็นงานที่ตัดแล้วไม่วาง
F # และ OCaml เป็นคลาสอนุกรมวิธานในตระกูลภาษา ML ซึ่งรวมถึงสัตว์ประหลาดอื่น ๆ ด้วย F # ใหม่กว่า OCaml และยังไม่มีทั้ง functors [ฟังก์ชั่นของโมดูล -> โมดูล] หรือประเภทแถว [คลาสอ็อบเจ็กต์และตัวแปรโพลีมอร์ฟิก] ระหว่างนั้นความเรียบง่ายทั้งสองนี้อาจทำให้เส้นการเรียนรู้ง่ายขึ้นสำหรับผู้ที่พัฒนาบนแพลตฟอร์ม. Net น่าเศร้าที่คุณสมบัติสองภาษาเหล่านี้มีประสิทธิภาพอย่างมากใน OCaml ดังนั้นการอ่านวรรณกรรม OCaml เพื่อรับข้อมูลเชิงลึกเกี่ยวกับวิธีการเขียนโค้ดสำหรับ F # อาจทำให้เกิดความไม่พอใจก่อนเวลาอันควรในภายหลังเนื่องจากอาจเป็นทางเลือกที่ยอดเยี่ยมสำหรับ C # ซึ่งมีทั้งสองอย่าง
F # รองรับไวยากรณ์ OCaml โดยตรง มันอาจจะเข้ากันไม่ได้ 100% แต่ฉันคิดว่ามันค่อนข้างใกล้เคียง
http://plus.kaist.ac.kr/~shoh/fsharp/html/index.html
นี่คือรายการของความแตกต่าง (ไม่แน่ใจว่าเป็นปัจจุบันเพียงใด)
http://plus.kaist.ac.kr/~shoh/fsharp/html/fsharp-vs-ocaml.html