กระบวนการใน 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
ผมเขียนนิด ๆ หน่อย ๆ เกี่ยวกับเรื่องนี้ในคำตอบของฉันอีก