ในโลกของภาษาโปรแกรมมิ่ง แนวคิดปฏิวัติวงการมักใช้เวลาหลายทศวรรษกว่าจะได้รับการยอมรับในกระแสหลัก ภาษา SELF ที่ถูกพัฒนาขึ้นในช่วงปลายทศวรรษ 1980 ได้นำเสนอแนวคิดที่ดูสุดโต่งในยุคนั้น แต่ตอนนี้กลับกลายเป็นรากฐานของเครื่องมือ JavaScript สมัยใหม่ แม้จะมีความเฉียบแหลมทางเทคนิค SELF ยังคงถูกจำกัดอยู่主要在ห้องปฏิบัติการวิจัย ในขณะที่แนวคิดของมันแปรเปลี่ยนเว็บตามที่เรารู้จักอย่างเงียบๆ
การปฏิวัติโปรโตไทป์ที่เกือบจะเกิดขึ้น
SELF ปรากฏตัวในฐานะการทดลองที่กล้าหาญในการเขียนโปรแกรมเชิงวัตถุ โดยกำจัดคลาสออกทั้งหมดเพื่อสนับสนุนโปรโตไทป์ ในโมเดลนี้ ออบเจกต์จะสืบทอดโดยตรงจากออบเจกต์อื่น แทนที่จะสืบทอดจากนิยามคลาสเชิงนามธรรม วิธีการนี้ให้คำสัญญาในเรื่องความยืดหยุ่นและความเรียบง่ายที่มากขึ้น ช่วยให้โปรแกรมเมอร์สามารถปรับเปลี่ยนระบบได้โดยไม่มีข้อจำกัดของลำดับชั้นประเภทที่เข้มงวด ภาษานี้ยังเข้าถึงสถานะผ่านข้อความเท่านั้น สร้างโมเดลที่สม่ำเสมออย่างงดงามซึ่งทุกอย่างทำงานในแบบเดียวกัน
JavaScript เป็นหนี้ SELF มาก ไม่เพียงแต่ในรันไทม์เท่านั้น แต่ยังรวมถึงการออกแบบออบเจกต์แบบโปรโตไทป์ด้วย
ในขณะที่ JavaScript นำแนวคิดโปรโตไทป์ของ SELF ไปใช้ หลายคนแย้งว่ามันขาดความงดงามของการนำเสนอแบบดั้งเดิม เวอร์ชันของ JavaScript กลายเป็นสิ่งที่ผู้แสดงความคิดเห็นคนหนึ่งอธิบายว่าเป็นระบบเทียมคลาสที่แปลกและสร้างความสับสนให้กับนักพัฒนาจนถึงทุกวันนี้ ความแตกต่างนี้เน้นย้ำให้เห็นว่าการพิจารณาด้านการตลาดมักจะเอาชนะการออกแบบทางเทคนิคล้วนๆ ในการยอมรับภาษา
นวัตกรรมหลักของภาษา SELF:
- โมเดลออบเจ็กต์แบบ prototype-based (ไม่มีคลาส)
- การเข้าถึงสถานะผ่านข้อความเท่านั้น
- การสืบทอดแบบพหุนามแบบไดนามิก
- การ inline เมธอดอย่างเข้มข้น
- Polymorphic inline caches
- Dynamic deoptimization สำหรับการดีบัก
- การคอมไพล์ซ้ำแบบค่อยเป็นค่อยไปอย่างโปร่งใส
ความก้าวหน้าด้านประสิทธิภาพที่เปลี่ยนทุกอย่าง
ความวิเศษจริงๆ ของ SELF ไม่ใช่แค่โมเดลการเขียนโปรแกรมเท่านั้น แต่เป็นประสิทธิภาพอันน่าทึ่งที่บรรลุได้ผ่านเทคนิคการคอมไพล์ที่ปฏิวัติวงการ ทีม SELF พัฒนาสิ่งที่พวกเขาเรียกว่าแผนที่ระดับการนำไปใช้ เพื่อจัดกลุ่มออบเจกต์อย่างโปร่งใส ให้ข้อมูลประเภทที่สำคัญแก่คอมไพเลอร์ ที่สำคัญกว่านั้น พวกเขาเป็นผู้บุกเบิกการคอมไพล์แบบไดนามิกของเวอร์ชันเมธอดหลายเวอร์ชัน ซึ่งแต่ละเวอร์ชันถูกปรับแต่งสำหรับประเภทออบเจกต์ที่แตกต่างกัน
วิธีการนี้ทำให้คอมไพเลอร์สามารถทำการอินไลน์อย่างก้าวร้าว โดยนำฟังก์ชันที่ถูกเรียกไปฝังไว้ในโค้ดที่เรียกใช้โดยตรง ระบบ甚至可以สร้างเฟรมสแต็กที่ถูกอินไลน์ใหม่เพื่อการดีบัก ทำให้การเพิ่มประสิทธิภาพเหล่านี้โปร่งใสโดยสมบูรณ์สำหรับโปรแกรมเมอร์ เทคนิคเหล่านี้เพิ่มประสิทธิภาพของ SELF เป็นสองเท่าเมื่อเทียบกับการนำ Smalltalk สมัยเดียวกันไปใช้ แม้ SELF จะมีธรรมชาติแบบไดนามิกมากกว่าก็ตาม
ผลสำเร็จด้านประสิทธิภาพ:
- ทำงานเร็วกว่าการใช้งาน Smalltalk ที่เร็วที่สุดถึงสองเท่า (ปี 1989)
- บรรลุประสิทธิภาพสูงทั้งที่มีการพิมพ์แบบไดนามิก
- กำจัดค่าโสหุ้ยด้านพื้นที่ที่เห็นได้ชัดของระบบ prototype
มรดกยังคงอยู่ใน JavaScript สมัยใหม่
ความเชื่อมโยงระหว่างการวิจัยของ SELF และเครื่องมือ JavaScript ในปัจจุบันนั้นตรงและลึกซึ้ง โดยตรงและลึกซึ้ง คอมไพเลอร์แบบ just-in-time (JIT) สมัยใหม่ในเครื่องยนต์เช่น V8 ใช้กลยุทธ์การเพิ่มประสิทธิภาพที่สืบเชื้อสายมาจาก SELF แคชอินไลน์แบบพหุสัณฐาน การคอมไพล์ใหม่แบบไดนามิก และเทคนิคการลดการเพิ่มประสิทธิภาพที่ทำให้ SELF รันเร็วในอดีต ตอนนี้กำลังขับเคลื่อนแอปพลิเคชันเว็บที่เราใช้ในชีวิตประจำวัน
สิ่งที่น่าสนใจเป็นพิเศษคือเทคนิคการคอมไพล์ขั้นสูงเหล่านี้พบทางสู่ระบบการผลิตได้อย่างไร ดังที่สมาชิกในชุมชนคนหนึ่งระบุ ผู้สร้าง Self ไม่คิดว่ามันจะรันเร็ว จนกระทั่งมันรันเร็วจริงๆ สิ่งนี้แสดงให้เห็นว่าโครงการวิจัยสามารถให้ประโยชน์เชิงปฏิบัติที่ไม่คาดคิดได้ในอีกหลายปีต่อมา
ทำไมไวยากรณ์จึงสำคัญกว่าอรรถศาสตร์
การอภิปรายเกี่ยวกับมรดกของ SELF เผยให้เห็นความจริงที่ไม่สบายใจเกี่ยวกับการยอมรับเทคโนโลยี ประสบการณ์ของนักพัฒนามักจะเอาชนะความเหนือกว่าทางเทคนิค ในขณะที่ SELF มีไวยากรณ์ที่งดงามคล้าย Smalltalk JavaScript นำไวยากรณ์แบบ C ที่รู้สึกคุ้นเคยสำหรับผู้ชมการเขียนโปรแกรมที่กว้างขึ้นมาใช้ ทางเลือกในการออกแบบนี้ ร่วมกับการที่ JavaScript ถูกวางไว้ในทุกเบราว์เซอร์ ทำให้มั่นใจได้ว่ามันจะครองตำแหน่งสูงสุด แม้จะมีการประนีประนอมทางเทคนิค
ชุมชนสะท้อนถึงความขัดแย้งนี้ นวัตกรรมที่ยอดเยี่ยมที่สุดของ SELF ถูกนำไปใช้อย่างกว้างขวางผ่าน JavaScript แต่ตัวภาษาเองกลับค่อนข้างไม่เป็นที่รู้จัก ตลาดให้รางวัลกับภาษาที่เข้าถึงได้ง่ายและออกแบบอย่างเป็นประโยชน์ มากกว่าภาษาที่บริสุทธิ์ทางเทคนิค
การเปรียบเทียบ JavaScript กับ SELF:
- JavaScript นำแนวคิดเรื่อง prototype จาก SELF มาใช้ แต่มีการประยุกต์ใช้ที่แตกต่างกัน
- JavaScript ใช้ constructor functions แทนที่จะเป็น pure prototype delegation
- SELF มี object model ที่สม่ำเสมอกว่าโดยไม่มีการแยกประเภทข้อมูลพื้นฐาน
- JavaScript engines สมัยใหม่ใช้เทคนิค JIT compilation ที่ได้รับแรงบันดาลใจจาก SELF
บทเรียนสำหรับอนาคตของการออกแบบภาษา
เรื่องราวของ SELF ให้บทเรียนที่ยั่งยืนเกี่ยวกับวิวัฒนาการของภาษาโปรแกรมมิ่ง ระบบนี้แสดงให้เห็นว่าความเรียบง่ายอย่างถึงรากในการออกแบบสามารถให้ทั้งพลังในการแสดงออกและประสิทธิภาพสูง การพัฒนาของมันแสดงให้เห็นว่าสภาพแวดล้อมการเขียนโปรแกรมแบบโต้ตอบสามารถอยู่ร่วมกับการเพิ่มประสิทธิภาพที่ซับซ้อนได้อย่างไร ซึ่งเป็นความสมดุลที่เครื่องมือการพัฒนาสมัยใหม่ยังคงพยายามบรรลุ
เทคนิคที่บุกเบิกโดยทีม SELF ยังคงมีอิทธิพลต่อการนำภาษาใหม่ไปใช้ในปัจจุบัน ในขณะที่นักพัฒนามองหาประสิทธิภาพที่ดีขึ้นสำหรับภาษาแบบไดนามิก พวกเขาค้นพบและสร้าง upon แนวคิดที่ปรากฏครั้งแรกในการวิจัยที่บุกเบิกนี้จากปี 1989
การเดินทางจากห้องปฏิบัติการวิจัยไปสู่การยอมรับในกระแสหลักอาจยาวนานและคดเคี้ยว แต่มรดกของ SELF พิสูจน์ว่าแนวคิดที่ยอดเยี่ยมจะหาที่ทางของมันในที่สุด 即使พวกเขามาถึงด้วยไวยากรณ์ที่แตกต่างและชื่อที่ต่างกัน
