นักพัฒนาได้สร้าง 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