ความแตกต่างระหว่างกระบวนการ / ข้อความใน Erlang และวัตถุ / ข้อความใน Smalltalk คืออะไร?


12

ฉันพยายามที่จะเข้าใจความแตกต่างระหว่างวัตถุ / ข้อความในสมอลล์ทอล์คและกระบวนการ / ข้อความในErlang ผมอ่านโพสต์ต่อไปในหัวข้อ

เท่าที่ฉันเข้าใจใน Smalltalk ทุกอย่างเป็นวัตถุและทุกสิ่งมีนามธรรม "วัตถุ / ข้อความ" ที่เป็นนามธรรม - แม้ตัวเลข1จะเป็นวัตถุที่สามารถเข้าถึงได้เมื่อมีการส่งข้อความเท่านั้น คือ1กระบวนการใน Erlang / Elixir หรือไม่? ทุกอย่างใน Erlang เป็นคำตอบของกระบวนทัศน์ข้อความ / โปรแกรมหรือไม่? คุณสามารถส่งข้อความถึงหมายเลขใน Erlang ได้หรือไม่?

ขอบคุณมาก.


จำนวนเต็ม 1 ไม่ใช่กระบวนการดังนั้นคุณจึงไม่สามารถส่งข้อความได้ คุณสามารถห่อสถานะของจำนวนเต็มภายในกระบวนการที่เกิดซ้ำและส่งข้อความของกระบวนการนั้นเช่นคำสั่งเพื่อเพิ่มหรือลดค่าของมัน แต่จากนั้นอีกครั้งมันจะไม่มีค่าอีกต่อไป 1. เลื่อนลงไปที่ตัวอย่างของ Elixir ที่นี่dantswain.herokuapp.com/blog/2015/01/06/…
GavinBrelstaff

ขอบคุณสำหรับคำตอบ!
ครบ

คำตอบ:


18

กระบวนการใน Erlang และ Objects ใน Smalltalk เป็นสิ่งเดียวกัน

เมื่อเห็นอย่างรวดเร็วครั้งแรกสิ่งนี้ไม่น่าประหลาดใจอย่างยิ่ง: Erlang เป็นภาษาของนักแสดงรุ่น The Actor Model ถูกคิดค้นโดย Carl Hewitt ผู้สร้างแบบจำลองการประเมินผลที่ขับเคลื่อนด้วยข้อความบนรูปแบบการประเมินผลที่ขับเคลื่อนด้วยข้อความของ Smalltalk (จริง ๆ แล้วนักแสดงและวัตถุต่างก็มีความเหมือนกันพวกเขามีรายละเอียดแตกต่างกันไปเท่านั้น) Alan Kay ได้รับอิทธิพลจาก PLANNER ของ Carl Hewitt เมื่อเขาออกแบบ Smalltalk

ดังนั้นจึงมีความสัมพันธ์ใกล้ชิดระหว่างนักแสดงและวัตถุดังนั้นจึงไม่น่าแปลกใจที่กระบวนการของ Erlang และวัตถุของ Smalltalk นั้นคล้ายคลึงกันมาก

ยกเว้นสิ่งหนึ่ง: นักออกแบบของ Erlang ไม่รู้เกี่ยวกับ Actor Model !!! พวกเขาเรียนรู้เกี่ยวกับเรื่องนี้ในภายหลังโดยเฉพาะอย่างยิ่งเมื่อ Joe Armstrong เขียนวิทยานิพนธ์ปริญญาเอกของเขาภายใต้ Seif Haridi (ผู้เขียนร่วมของหนังสือที่ชัดเจนเกี่ยวกับกระบวนทัศน์การเขียนโปรแกรม) ในปลายปี 1990

Joe Armstrong เขียนบทความที่เขาสนับสนุนอย่างยิ่งต่อ OO ( ทำไม OO Sucks ) แต่ภายหลังเขาเปลี่ยนใจเมื่อเขาตระหนักว่า Erlang นั้นเป็นวัตถุที่มุ่งเน้น ในความเป็นจริงเขายังไปไกลถึงกับอ้างว่า Erlang เป็นเพียงภาษาเชิงวัตถุในการสัมภาษณ์ครั้งนี้กับโจอาร์มสตรองและราล์ฟจอห์นสัน

นี่เป็นกรณีที่น่าสนใจเกี่ยวกับสิ่งที่นักชีววิทยาวิวัฒนาการเรียกว่าวิวัฒนาการมาบรรจบกันนั่นคือสปีชีส์ที่ไม่เกี่ยวข้องสองชนิดที่พัฒนาขึ้นจะคล้ายกันเพื่อตอบสนองต่อแรงกดดันจากภายนอกที่คล้ายกัน

ยังคงมีความสัมพันธ์มากมายระหว่าง Erlang และ Smalltalk แม้ว่า:

Erlang เริ่มต้นจากการขยายการทำงานพร้อมกันใน Prolog (และแม้กระทั่งเมื่อ Erlang กลายเป็นภาษาที่แยกต่างหากการใช้งานครั้งแรกเขียนใน Prolog) และยังคงฝังรากลึกใน Prolog จนถึงทุกวันนี้ อารัมภบทได้รับอิทธิพลอย่างมากจาก PLANNER ของคาร์ลเฮวิตต์

สมอลทอล์คยังได้รับอิทธิพลอย่างมากจากสิ่งที่ต่อมาจะกลายเป็นอาร์พาเนต (และต่อมาอินเทอร์เน็ต); Erlang ถูกออกแบบมาสำหรับระบบเครือข่าย

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

Erlang มี "เลเยอร์" หลายรายการ:

  • ฟังก์ชั่น Erlang : ส่วนใหญ่เป็นภาษาที่ใช้งานทั่วไปและมีการพิมพ์แบบไดนามิกพร้อมกับ "ความแปลก" บางส่วนที่สืบทอดมาจาก Prolog เช่นการรวมกัน
  • Erlang พร้อมกัน : ฟังก์ชั่น Erlang + กระบวนการและข้อความ
  • กระจาย Erlang : Erlangพร้อมกัน + กระบวนการระยะไกล
  • ความผิดพลาด Erlang : แจกจ่าย Erlang + รูปแบบการออกแบบบางประมวลกฎหมายในห้องสมุด OTP gen_serverเช่นต้นไม้และผู้บังคับบัญชา

ระบบ Fault-Tolerant ที่เขียนใน Erlang / OTP จะดูเหมือนสิ่งที่เราอาจจำได้ว่าเป็น "Object-Oriented" แต่สิ่งที่อยู่ภายในของวัตถุเหล่านั้นมักจะถูกนำไปใช้ในรูปแบบการใช้งานมากกว่าสไตล์เชิงวัตถุ

สิ่งที่น่าสนใจคือ "ความกดดันด้านวิวัฒนาการ" ที่ Erlang อยู่ภายใต้คำอื่น ๆ ปัญหาที่นักออกแบบของ Erlang พยายามแก้ไข (ความน่าเชื่อถือการจำลองแบบความซ้ำซ้อน…) เป็นความกดดันแบบเดียวกันกับที่นำไปสู่การวิวัฒนาการของเซลล์ Alan Kay ขุดในจุลชีววิทยาและจำลอง OO อย่างชัดเจนในเซลล์ชีวภาพ นี่คือขนานอื่นระหว่าง Erlang และ Smalltalk

ผมเขียนนิด ๆ หน่อย ๆ เกี่ยวกับเรื่องนี้ในคำตอบของฉันอีก


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