Coalton Playground เปิดตัวพร้อม REPL บนเบราว์เซอร์สำหรับ Lisp แบบ Statically-Typed

ทีมชุมชน BigGo
Coalton Playground เปิดตัวพร้อม REPL บนเบราว์เซอร์สำหรับ Lisp แบบ Statically-Typed

สภาพแวดล้อมการพัฒนาบนเว็บใหม่ได้เกิดขึ้นสำหรับ Coalton ซึ่งเป็นภาษา Lisp แบบ statically-typed ที่ผสมผสานระบบ type ของ Haskell เข้ากับความยืดหยุ่นของ Common Lisp โดย Coalton Playground ได้กำจัดอุปสรรคในการติดตั้งแบบดั้งเดิมที่เคยขัดขวางนักพัฒนาจากการทดลองใช้ภาษาโปรแกรมมิ่งที่มีเอกลักษณ์นี้

Coalton เป็นตัวแทนของการผสมผสานที่น่าสนใจในการออกแบบภาษาโปรแกรมมิ่ง โดยนำ algebraic data types, pattern matching และ Hindley-Milner type inference มาสู่ระบบนิเวศ Lisp ในขณะที่ยังคงความเข้ากันได้กับโค้ด Common Lisp ที่มีอยู่ แนวทางนี้ให้การรับประกันความปลอดภัยของ static typing ควบคู่ไปกับระบบ macro ที่ทรงพลังของ Lisp และประสบการณ์การพัฒนาแบบ interactive

เทคโนโลยีที่ใช้:

  • Backend: SBCL ( Steel Bank Common Lisp )
  • Package Manager: Quicklisp
  • ระบบประเภทข้อมูล: Hindley-Milner (คล้ายกับ Haskell )
  • ระบบ Macro: Common Lisp macros พร้อมการสร้างโค้ด Coalton

การปรับปรุงประสิทธิภาพทำให้ประสบการณ์บนเบราว์เซอร์เป็นไปได้

playground ได้บรรลุประสิทธิภาพที่ตอบสนองได้ผ่าน SBCL cores ที่สร้างไว้ล่วงหน้าพร้อมกับ Coalton ที่โหลดไว้แล้ว การปรับปรุงนี้ลดเวลาเริ่มต้นจากประมาณ 400 มิลลิวินาทีลงเหลือประมาณ 80 มิลลิวินาที ทำให้ REPL บนเบราว์เซอร์รู้สึกรวดเร็วและมีปฏิสัมพันธ์ได้ดี การปรับปรุงนี้แก้ไขหนึ่งในความท้าทายหลักในการนำสภาพแวดล้อม Lisp ที่มีน้ำหนักมากแบบดั้งเดิมมาสู่เว็บเบราว์เซอร์

การเปรียบเทียบประสิทธิภาพ:

  • การเริ่มต้นระบบแบบดั้งเดิม SBCL + Coalton : ~400ms
  • การเพิ่มประสิทธิภาพ pre-built core : ~80ms
  • การปรับปรุงประสิทธิภาพ: ลดเวลาการเริ่มต้นระบบลงได้ ~80%

ชุมชนถกเถียงเกี่ยวกับการอ้างสิทธิ์ความปลอดภัยของ Type

การเปิดตัวได้จุดประกายการอภิปรายเกี่ยวกับคำศัพท์และการเปรียบเทียบความปลอดภัยของ type สมาชิกชุมชนบางคนตั้งคำถามว่า type-safe อธิบายภาษา statically-typed ได้อย่างแม่นยำเมื่อเปรียบเทียบกับระบบ Lisp แบบ dynamically-typed หรือไม่ การถกเถียงมุ่งเน้นไปที่ว่าการตรวจสอบ type ในเวลา compile ให้การรับประกันความปลอดภัยที่ดีกว่าข้อมูล type ในเวลา runtime ที่ระบบ Lisp แบบดั้งเดิมรักษาไว้หรือไม่

ใน lisp ทุกตัว ค่าทุกค่าจะนำ strong type ของมันติดไปด้วย ใน typed lisp คุณพึ่งพา compiler ที่จะไม่ใช้ประโยชน์จาก weak casts ใน dynamically typed lisp ไม่มีช่องโหว่แบบนั้นเป็นไปได้

ความท้าทายในการรวม Macro System

การอภิปรายทางเทคนิคได้เกิดขึ้นเกี่ยวกับวิธีที่ Coalton จัดการกับ Lisp macros ภายในระบบ static type ในขณะที่ macro พื้นฐานทำงานได้อย่างราบรื่น macro ขั้นสูงที่รู้เรื่อง type ยังคงเป็นความท้าทายในการนำไปใช้ แนวทางปัจจุบันอนุญาตให้ macro ที่เขียนใน Common Lisp สร้างโค้ด Coalton ได้ แต่ระบบ macro ไม่สามารถเข้าถึงข้อมูล type จากบริบทรอบข้างได้

ข้อจำกัดนี้เป็นตัวแทนของความท้าทายที่กว้างขึ้นในการออกแบบภาษาโปรแกรมมิ่ง การสร้าง macro ที่รู้เรื่อง type อย่างแท้จริงต้องการการรวมลึกระหว่างระบบ type checker และระบบ macro expansion ซึ่งเป็นปัญหาที่ทำให้การพัฒนาในโครงการที่คล้ายกันอย่าง Hackett หยุดชะงัก

ความคิดเห็นของผู้ใช้ในช่วงแรกเผยให้เห็นปัญหา

ผู้ใช้ในช่วงแรกได้รายงานปัญหาทางเทคนิคหลายอย่างกับ playground โปรแกรมตัวอย่างหลายตัวมีข้อผิดพลาดทางไวยากรณ์ รวมถึงวงเล็บที่ไม่ตรงกันในตัวอย่าง Type Classes และข้อผิดพลาดในการ compile ในการสาธิต JSON Parser การออกแบบที่ตอบสนองยังแสดงปัญหาเค้าโครงบนหน้าจอขนาดเล็ก โดยส่วนหัวใช้พื้นที่แนวตั้งมากเกินไป

ผู้สร้าง playground ได้รับทราบปัญหาเหล่านี้และมุ่งมั่นที่จะแก้ไข ซึ่งบ่งบอกถึงการบำรุงรักษาที่กระตือรือร้นและการตอบสนองต่อความคิดเห็นของผู้ใช้

ปัญหาที่ทราบแล้วที่มีการรายงาน:

  • ตัวอย่าง " Type Classes ": ข้อผิดพลาดวงเล็บปิดที่ไม่ตรงกัน
  • ตัวอย่าง " JSON Parser ": ข้อผิดพลาดในการคอมไพล์
  • ปัญหาเลย์เอาต์บนหน้าต่างที่ไม่ได้ขยายเต็มจอ
  • ส่วนหัวใช้พื้นที่มากเกินไปบนหน้าจอขนาดเล็ก

ผลกระทบที่กว้างขึ้นต่อวิวัฒนาการของ Lisp

แนวทางของ Coalton แก้ไขข้อกังวลด้านประสิทธิภาพและความสามารถในการขยายขนาดที่มีมายาวนานกับระบบ Lisp แบบ dynamic ในขณะที่ Common Lisp สามารถบรรลุประสิทธิภาพสูงผ่านการประกาศ type ที่ระมัดระวังและคำแนะนำของ compiler สิ่งนี้มักต้องการการละทิ้ง abstraction ระดับสูง ระบบ static type ของ Coalton ช่วยให้เกิดการปรับปรุงที่รุนแรงมากขึ้นในขณะที่ยังคงความสามารถในการแสดงออกของโค้ด

โครงการนี้เป็นส่วนหนึ่งของแนวโน้มที่กว้างขึ้นในการนำคุณสมบัติระบบ type สมัยใหม่มาสู่กระบวนทัศน์การเขียนโปรแกรมที่มีอยู่แล้ว เมื่อโครงการซอฟต์แวร์เติบโตในความซับซ้อน ความน่าสนใจของการตรวจจับข้อผิดพลาดในเวลา compile และโอกาสในการปรับปรุงยังคงขับเคลื่อนความสนใจในทางเลือก statically-typed สำหรับภาษาที่เป็น dynamic แบบดั้งเดิม

อ้างอิง: Coalton Playground: Type-Safe Lisp in Your Browser