การเขียนโปรแกรม Erlang และ Go พร้อมกันความแตกต่างระหว่าง CSP และนักแสดง?


19

ฉันกำลังดูการเขียนโปรแกรมพร้อมกันในภาษาโปรแกรม Erlang และ Go ตามการค้นพบของฉันพวกเขาใช้โมเดลนักแสดงและ CSP ตามลำดับ

แต่ฉันก็ยังสับสนกับ CSP และนักแสดงต่างกันอย่างไร มันแตกต่างทางทฤษฎีเพียงอย่างเดียว แต่เป็นแนวคิดเดียวกันหรือไม่


พวกมันไม่เหมือนกันตั้งแต่ Go ให้เซตของ primitives ที่แตกต่างจาก Erlang ยิ่งไปกว่านั้นระดับต่ำกว่า Erlang และ C-like มาก
Daniel Gratzer

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

3
@gnat ฉันไม่เห็นด้วยนี่กำลังถามเกี่ยวกับความแตกต่างระหว่าง CSP และนักแสดง นั่นเป็นคำถามที่เหมาะสมอย่างสมบูรณ์แบบ
Daniel Gratzer

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

คำตอบ:


21

ในทางปฏิบัติมีความแตกต่างน้อยมาก: ทั้งสองเป็นตัวแทนของหน่วยการดำเนินการแยกต่างหากซึ่งอินเทอร์เฟซหลักกับโลกภายนอกผ่านทางข้อความ

ความแตกต่างอยู่ในรายละเอียดการใช้งานของภาษา นี่คือรายละเอียดบางอย่างเช่น:

  • พิมพ์ช่องทางใน Go หากคุณต้องการส่งข้อความที่มีข้อมูลแตกต่างกันคุณต้องใช้แชแนลแยกต่างหาก ด้วย Erlang สิ่งหนึ่งreceiveจะได้รับทุกอย่างที่ส่งไปยังกระบวนการและต้องจับคู่รูปแบบ (ใน Go คุณจะใช้ a selectพร้อมกับหลาย ๆ กรณีดังนั้นโค้ดจะดูคล้ายกันมากเพียงแค่มีช่องต่าง ๆ )
  • ทุกคนสามารถอ่านหรือเขียนช่อง Go ใน Erlang ทุกคนสามารถส่งไปยังกระบวนการ แต่จะได้รับเฉพาะกระบวนการนั้น สิ่งนี้มีความสำคัญหากคุณต้องการแบ่งงานระหว่างคนงานหลายคน: ใน Erlang คุณต้องสร้างกระบวนการแจกจ่ายในขณะที่ Go สามารถแชร์ช่องได้อย่างง่ายดาย
  • Erlang ให้เส้นทางโปร่งใส (ส่วนใหญ่) เพื่อกระจายกระบวนการบนหลายโฮสต์ / VMs Goroutines ถูกกักขังอยู่ในกระบวนการเดียว (แม้ว่าจะมีห้องสมุดสำหรับการแจกจ่าย)
  • การจัดการข้อผิดพลาดแตกต่างกันมาก Erlang ถือว่าแต่ละกระบวนการเป็นอิสระ: ข้อผิดพลาดในกระบวนการหนึ่ง (พูดหารด้วย 0) จะไม่ส่งผลกระทบต่อกระบวนการอื่นใดนอกจากว่าคุณจะเชื่อมโยงอย่างชัดเจน (แม้ว่าบางสิ่งที่รอข้อความจากกระบวนการที่ตายแล้วจะหยุดทำงาน) Goroutines ทั้งหมดทำงานในพื้นที่กระบวนการเดียวกัน หารด้วย 0 จะลงโปรแกรมทั้งหมด
  • ใน Erlang ข้อมูลไม่เปลี่ยนรูป ซึ่งหมายความว่าการสื่อสารทั้งหมดระหว่างกระบวนการและโลกภายนอกเกิดขึ้นผ่านข้อความ Go ช่วยให้คุณสามารถแบ่งปันสถานะระหว่าง goroutines (แม้ว่าคุณไม่ควร)

จุดสุดท้ายนี้ฉันคิดว่าสำคัญที่สุด ในขณะที่ทั้งคู่ใช้ข้อความเป็นสื่อหลักในการสื่อสาร Erlang ทำให้การรับประกันมีความแข็งแกร่งมากขึ้นเกี่ยวกับวิธีและเวลาที่รัฐสามารถเปลี่ยนแปลงได้

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