Autology ภาษาฟังก์ชันนอลแบบ Lisp ใหม่ที่เขียนด้วย Clojure ได้จุดประกายการสนทนาอย่างคึกคักในหมู่ผู้สนใจภาษาโปรแกรมมิ่ง จุดเด่นของโครงการนี้คือการให้โปรแกรมสามารถเข้าถึงตัวแปลภาษาของตัวเองได้ในขณะรันไทม์ ทำให้สามารถปรับเปลี่ยนพฤติกรรมของภาษาได้แบบไดนามิกระหว่างการทำงาน
การปรับเปลี่ยนภาษาในขณะรันไทม์
Autology ใช้วิธีการที่ไม่ธรรมดาในการทำเมตาโปรแกรมมิ่งโดยผูกฟังก์ชันตัวแปลภาษาเข้ากับตัวแปรชื่อ **
ซึ่งสามารถเข้าถึงได้ภายในโปรแกรม การออกแบบนี้ช่วยให้นักพัฒนาสามารถปรับเปลี่ยนวิธีการประเมินนิพจน์ของภาษาในขณะที่โปรแกรมกำลังทำงานอยู่ ต่างจากมาโครแบบดั้งเดิมของ Lisp ที่ทำงานในช่วงเวลาคอมไพล์ Autology ช่วยให้สามารถเขียนไวยากรณ์และความหมายของภาษาใหม่ได้อย่างสมบูรณ์ในขณะรันไทม์
ผู้สร้างโครงการที่ใช้ชื่อว่า Kimbsy อธิบายว่าโครงการนี้สร้างขึ้นเพื่อความสนุกและเพื่อสำรวจแนวคิดที่น่าสนใจ โดยยอมรับว่าการใช้งานในปัจจุบันยังช้าและใช้ทรัพยากรมาก Kimbsy มีกำหนดการบรรยายเกี่ยวกับ Autology ที่ London Clojurians ในเดือนพฤษภาคมและที่ Lambda Days ในเมืองคราคูฟในเดือนมิถุนายน
คุณสมบัติหลักของ Autology
- เขียนด้วยภาษา Clojure
- ฟังก์ชันตัวแปลความหมายมีอยู่ในรูปแบบโครงสร้างข้อมูลที่โปรแกรมสามารถเข้าถึงได้
- ผูกกับตัวแปร
**
ในสภาพแวดล้อมการทำงาน - อนุญาตให้ปรับเปลี่ยนพฤติกรรมของภาษาได้ในขณะรันไทม์
- สามารถเพิ่ม แก้ไข หรือลบคุณสมบัติของภาษาได้แบบไดนามิก
โครงการและแนวคิดที่เกี่ยวข้อง
- การพัฒนา Common Lisp (SBCL, CCL) ที่มีแพ็คเกจเข้าถึงตัวแปลความหมาย
- Reader Macros ใน Common Lisp
- FEXPRs (คุณสมบัติทางประวัติศาสตร์ของ Lisp)
- ภาษาโปรแกรม Kernel โดย John Shutt
- งานวิจัย "Towers of interpreters" โดย Amin & Rompf
- ภาษา Shen
การเปรียบเทียบกับวิธีการแบบดั้งเดิมของ Lisp
การสนทนาในชุมชนเผยให้เห็นการเปรียบเทียบที่น่าสนใจระหว่าง Autology และการใช้งาน Lisp แบบดั้งเดิม ผู้แสดงความคิดเห็นหลายคนสังเกตว่าการใช้งาน Common Lisp เช่น SBCL (Steel Bank Common Lisp) และ CCL (Clozure Common Lisp) มีแพ็คเกจสำหรับการโต้ตอบกับส่วนภายในของตัวแปลภาษาอยู่แล้ว แม้ว่าจะไม่ได้เป็นแบบโดยตรงเหมือนกับ Autology
ผู้แสดงความคิดเห็นคนหนึ่งอธิบายว่า Reader Macros ของ Common Lisp สามารถทำให้เกิดความยืดหยุ่นในลักษณะที่คล้ายกันได้:
คุณสามารถทำอะไรที่บ้าบอได้จริงๆ ใน Common Lisp โดยใช้สิ่งที่เรียกว่า Reader Macro ซึ่งช่วยให้คุณสามารถควบคุมตัวแปลภาษาได้อย่างสมบูรณ์ชั่วคราว
การสนทนายังกล่าวถึงแนวคิดทางประวัติศาสตร์ของ Lisp เช่น FEXPRs (Function Expressions) ซึ่งเป็นความพยายามในช่วงแรกที่จะให้ความสามารถที่คล้ายกัน แต่ถูกละทิ้งไปในที่สุดเพื่อใช้มาโครแทนเพื่อเหตุผลด้านประสิทธิภาพ คำอธิบายทางเทคนิคโดยละเอียดจากผู้ใช้ชื่อ kazinator เน้นย้ำว่าวิธีการของ Autology แตกต่างจาก FEXPRs โดยการส่งผ่านออบเจ็กต์ตัวแปลภาษาที่ปรับแต่งได้แทนที่จะเป็นเพียงสภาพแวดล้อมเชิงคำศัพท์
การประยุกต์ใช้ทางทฤษฎีและข้อจำกัด
แม้ว่าจะถูกสร้างขึ้นเป็นหลักเพื่อเป็นโครงการทดลอง การสนทนาในชุมชนได้สำรวจการประยุกต์ใช้ที่อาจเป็นไปได้สำหรับความยืดหยุ่นในรันไทม์ที่สูงมากเช่นนี้ กรณีการใช้งานทางทฤษฎีหนึ่งที่กล่าวถึงคือความสามารถในการสลับระหว่างไวยากรณ์ภาษาที่แตกต่างกันภายในขอบเขตเชิงคำศัพท์ ซึ่งช่วยให้นักพัฒนาสามารถแสดงส่วนต่างๆ ของปัญหาที่ซับซ้อนในภาษาที่เหมาะสมที่สุดสำหรับแต่ละส่วน
โครงการนี้มีตัวอย่างของโค้ดระหว่างภาษาที่แสดงให้เห็นการสลับระหว่างไวยากรณ์ภาษาที่แตกต่างกันภายในโปรแกรมเดียวกัน ผู้ใช้บางคนแนะนำว่านี่อาจเป็นกลไก Foreign Function Interface (FFI) ที่ปรับปรุงแล้ว แม้ว่าคนอื่นๆ จะสงสัยว่าประโยชน์จะมีมากกว่าต้นทุนความซับซ้อนหรือไม่
ผู้แสดงความคิดเห็นหลายคนได้เชื่อมโยงกับงานที่เกี่ยวข้อง รวมถึงภาษาโปรแกรมมิ่ง Kernel ของ John Shutt งานวิจัยของ Nada Amin และ Tiark Rompf เกี่ยวกับหอคอยของตัวแปลภาษา และภาษา Shen การเชื่อมโยงเหล่านี้เน้นย้ำถึงตำแหน่งของ Autology ในการสำรวจความสามารถในการขยายภาษาและการสะท้อนในการออกแบบภาษาโปรแกรมมิ่งในวงกว้าง
แม้จะมีข้อจำกัดในปัจจุบันในฐานะเครื่องมือที่ใช้งานได้จริง Autology แสดงให้เห็นถึงความเป็นไปได้ในการสร้างสรรค์ที่เกิดขึ้นเมื่อภาษาโปรแกรมมิ่งถูกออกแบบมาให้มีความยืดหยุ่นสูง ตามที่ผู้แสดงความคิดเห็นคนหนึ่งสังเกต น่าประทับใจว่าแนวคิดมากมายสามารถสำรวจได้ด้วยโค้ด Clojure เพียง 1,000 บรรทัด
สำหรับผู้ที่สนใจสำรวจ Autology เพิ่มเติม โครงการนี้มีให้ใช้งานออนไลน์ พร้อมตัวอย่างที่แสดงวิธีการเพิ่มฟังก์ชันให้กับภาษา การสลับกลยุทธ์การประเมิน หรือแม้แต่การกำหนด Lisp แบบ metacircular ภายในโปรแกรม
อ้างอิง: Autology