นักพัฒนาสร้าง Runtime สำหรับการเขียนโปรแกรมส่วนตัวด้วยแนวคิด Message Passing จาก Erlang และไวยากรณ์ Lisp

BigGo Editorial Team
นักพัฒนาสร้าง Runtime สำหรับการเขียนโปรแกรมส่วนตัวด้วยแนวคิด Message Passing จาก Erlang และไวยากรณ์ Lisp

นักพัฒนาได้สร้าง VRS ซึ่งเป็น runtime สำหรับการเขียนโปรแกรมส่วนตัวที่รวมแนวคิดจาก Erlang , Lisp และ Unix เข้าด้วยกันในแพลตฟอร์มเดียว ระบบทดลองนี้ถูกสร้างขึ้นระหว่างการเข้าร่วมโครงการที่ Recurse Center โดยมีเป้าหมายเพื่อสร้างประสบการณ์การเขียนโปรแกรมที่สนุกสนานผ่าน lightweight processes และการสื่อสาร message-passing

สถาปัตยกรรมแบบ Daemon ช่วยให้คำนวณแบบถาวร

VRS ทำงานเป็น system daemon ทำให้นักพัฒนาสามารถเชื่อมต่อจากไคลเอนต์ต่างๆ ตัดการเชื่อมต่อ และกลับมาใหม่เพื่อพบว่ากระบวนการของพวกเขายังคงทำงานอยู่ วิธีการนี้แตกต่างจากสภาพแวดล้อมการพัฒนาแบบดั้งเดิมที่การหยุด main process จะฆ่าโค้ดที่กำลังทำงานทั้งหมด

ระบบใช้ green threads เพื่อใช้งาน lightweight processes ที่สามารถทำงานได้หลายล้านกระบวนการบนเครื่องเดียว แต่ละกระบวนการทำงานแยกกันด้วย namespace ของตัวเอง โดยสื่อสารกันเฉพาะผ่าน message passing แทนการใช้ shared memory การออกแบบนี้ป้องกันไม่ให้กระบวนการต่างๆ รบกวนกัน ในขณะที่เปิดใช้งานการเขียนโปรแกรมแบบ distributed ที่ซับซ้อนบนระบบเดียว

ส่วนประกอบของระบบ VRS

ส่วนประกอบ คำอธิบาย
sync Embedded Urg Dialect และ Virtual Machine
vasd การใช้งาน Runtime ในรูปแบบ system daemon
vim Binary ที่ใช้ร่วมกันระหว่าง vasd/vrs และการใช้งานฝั่ง client
vurx Rich CLI client ผ่าน libei
vexpj GUI launch bar client

Lisp Dialect แบบกำหนดเองขับเคลื่อน Runtime

แพลตฟอร์มใช้ Lisp dialect แบบกำหนดเองที่เรียกว่า lyric ซึ่งรวมการสนับสนุนในตัวสำหรับ processes, message passing และ cooperative multithreading ผ่าน fibers ภาษานี้ช่วยให้นักพัฒนาเขียนโค้ดแบบ sequential สำหรับการโต้ตอบของผู้ใช้และงานที่ทำงานนาน โดยไม่บล็อก main thread

ตัวอย่างเช่น งานที่กำหนดเวลาประจำปีสามารถเขียนเป็น infinite loops ธรรมดาที่หลับเป็นเวลาหนึ่งปี ในขณะที่ user interface flows สามารถแสดงเป็นโค้ดแบบ sequential ที่บล็อกตาม user input อย่างเป็นธรรมชาติโดยไม่ส่งผลต่อการตอบสนองของระบบ

คุณสมบัติหลักของ VRS

  • กระบวนการน้ำหนักเบา: Green threads ที่สามารถรันได้หลายล้านตัวบนเครื่องเดียว
  • การส่งผ่านข้อความ: กระบวนการที่แยกตัวสื่อสารกันผ่าน mailboxes เท่านั้น
  • Service Registry: ระบบค้นหาและเชื่อมโยงบริการแบบมีชื่อ
  • Built-in PubSub: กลไกการส่งข้อความแบบ publish-subscribe ทั่วโลก
  • Cooperative Multithreading: Fibers สำหรับ coroutines และ generators ภายในกระบวนการ
  • Live Programming: การพัฒนาแบบขับเคลื่อนด้วย REPL พร้อมการตรวจสอบ runtime

ชุมชนหารือเรื่องความท้าทายในการใช้งาน

นักพัฒนาในชุมชนได้ระบุหลายพื้นที่ที่ VRS อาจได้รับประโยชน์จากฟีเจอร์เพิ่มเติม บางคนแนะนำให้ใช้งาน supervisor patterns และการจัดการ service ที่แข็งแกร่งกว่าคล้ายกับ gen_server abstraction ของ Erlang ซึ่งจัดการ timeouts, error recovery และ state management สำหรับการโต้ตอบ client-server

Erlang gen_srv, supervisor analogs จำเป็นต้องถูกสร้างขึ้น พร้อมกับ Erlang messaging logic มาตรฐานรอบๆ มัน เพื่อให้โครงการนี้มีประโยชน์

คนอื่นๆ ได้พบปัญหาทางเทคนิค รวมถึงการ crash บนระบบ macOS ที่นักพัฒนากำลังตรวจสอบ แม้จะเป็นโครงการส่วนตัวที่ปัจจุบันไม่รับการสนับสนุน แต่ระบบนี้ได้สร้างความสนใจจากนักพัฒนาที่ทำงานในสภาพแวดล้อมการเขียนโปรแกรมทดลองที่คล้ายกัน

บริการในตัวและเครื่องมือพัฒนา

VRS รวม service registry system ที่กระบวนการที่ทำงานนานสามารถลงทะเบียนตัวเองด้วยชื่อและเปิดเผย interfaces สำหรับกระบวนการอื่นๆ เพื่อค้นหาและสื่อสารด้วย runtime ยังให้ global publish-subscribe mechanism สำหรับการ broadcast ข้อมูลทั่วระบบ

เครื่องมือพัฒนารวม REPL-driven workflow ผ่าน command-line clients และการรวมกับ Emacs ผ่าน custom major mode ระบบสนับสนุน live programming และ debugging ทำให้นักพัฒนาสามารถตรวจสอบ runtime state และโต้ตอบกับ services ที่กำลังทำงานแบบ real-time

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

อ้างอิง: vrs