- ประสบการณ์ทำงานฟรีแลนซ์ Ruby on Rails นาน 20 ปี นำไปสู่โปรเจกต์ Common Lisp แต่ข้อจำกัดด้านประสิทธิภาพ ความสามารถในการพอร์ต และสภาพแวดล้อมรันไทม์ที่สะสมขึ้น ทำให้กลับมาเลือก C อีกครั้ง
- cl-facts มี triple store ที่รวดเร็วและ atomic transaction ที่ซ้อนกันได้ แต่เวลาพัฒนาที่ยาวนานก็ทำให้สูญเสียลูกค้าไปด้วย
- ความไม่พอใจต่อ virtual machine, container ที่ใช้ Linux cgroups และ garbage collector นำไปสู่ข้อสรุปว่า C ยังคงเป็นฐานที่ใช้งานได้จริงสำหรับซอฟต์แวร์ระบบ
- งานที่เริ่มจาก libc3 ขยายไปสู่แนวคิดภาษา C3, interpreter ic3 และ compiler c3c และภายหลังเปลี่ยนชื่อเป็น KC3 เพราะชื่อซ้ำ
- ปัจจุบัน KC3 รวมถึง graph database ที่พอร์ตเป็น C89, REPL ikc3, เว็บเซิร์ฟเวอร์ MVC kc3_httpd และเว็บไซต์เอกสารที่ใช้ implementation Markdown-to-HTML ด้วย C
เส้นทางจากงาน Common Lisp ไปสู่การเขียนใหม่ด้วย C
- หลังจากเรียนที่โรงเรียนคอมพิวเตอร์ในฝรั่งเศส 5 ปี และทำงานเป็นนักพัฒนา Ruby on Rails แบบฟรีแลนซ์ 20 ปี สิ่งที่คิดว่าจะเป็นการเรียนรู้ Common Lisp สั้น ๆ ค่อย ๆ กลายเป็นโปรเจกต์ที่ใหญ่ขึ้นเรื่อย ๆ
- สร้าง ASN.1 parser และระบบ query โดยใช้ Common Lisp สร้างโค้ด C และงานนี้ขยายไปเป็นเซิร์ฟเวอร์ SNMP แบบ custom Common Lisp-to-C
- หลังจากนั้นได้เขียนแพ็กเกจ Common Lisp หลายตัว
- cl-unix-cybernetics กลายเป็นโปรเจกต์ที่ได้ดาวมากที่สุดในบรรดา repository บน GitHub
- เขียน cl-streams และ cffi-posix ด้วย
- cl-facts เป็น triple store ที่ใช้เป็น graph database ของ Common Lisp ได้
- cl-facts เป็นผลงานที่มีประสิทธิภาพเร็ว รองรับ atomic transaction, transaction ที่ซ้อนกันได้, เข้ากันได้กับ
unwind-protectและใช้งานง่ายโดยเรียนรู้เพียง 3 macro - cl-facts ถูกนำเสนอเป็น lightning talk ที่ European Lisp Symposium ในเบลเยียม และสไลด์นำเสนออยู่ที่ facts.pdf
- แม้การพัฒนาแพ็กเกจ Common Lisp จะใช้เวลานานจนสูญเสียลูกค้า แต่ก็เห็นว่า Common Lisp เป็นเครื่องมือสำหรับคนรุ่นถัดไป
C, KC3 และองค์ประกอบในปัจจุบัน
- ประสบการณ์ที่เห็นว่า virtual machine สิ้นเปลือง CPU และ bandwidth ไปกับการจำลอง และ container ที่ใช้ Linux cgroups ยังคงพบปัญหา RCE กับ privilege escalation อยู่เรื่อย ๆ นำไปสู่การเลือกแนวทางที่มี OpenBSD เป็นศูนย์กลาง
- หลีกเลี่ยงเครื่องมือ DevOps อย่าง Terraform และ Ansible และยังได้เห็นคนที่ไม่พอใจทั้ง VM, container รวมถึงตัวภาษาโปรแกรมเอง
- กรณีที่พยายามสร้างเกมกลยุทธ์ด้วย Clojure ซึ่งมียูนิตหลายพันตัวที่แต่ละตัวรับรู้โลกของตัวเอง ล้มเหลวเพราะ garbage collector
- โปรเจกต์ Common Lisp เองก็ถูกจำกัดขอบเขตการใช้งานเพราะ garbage collector และ garbage collector ของ JVM ถูกมองว่าเป็นจุดแข็งเชิงพาณิชย์ที่ต้องใช้ต้นทุนสูงเพื่อทำให้ดี
- เมื่อพิจารณาประสิทธิภาพและความสามารถในการพอร์ต หากไม่มีเครื่องมืออื่น ทางเลือกที่สมเหตุสมผลคือ C
- Linux เขียนด้วย C
- OpenBSD เขียนด้วย C
- GTK+ เขียนด้วย C ล้วนแบบ object-oriented
- GNOME เขียนด้วย C
- แอปเดสก์ท็อปบน Linux จำนวนมากก็เขียนด้วย C แบบเก่า
- เริ่มจากไลบรารียูทิลิตี libc3 แล้วพัฒนาไปเป็นแนวคิดภาษา C3, interpreter ic3 และ compiler c3c
- ทำให้ buffer UTF-8 และ data structure ส่งผ่านไปมาได้อย่างรวดเร็ว และยอมรับต้นทุนหน่วยความจำเพื่อใช้ bounds-check
- วาง defensive programming ไว้เป็นแกนหลัก ตั้งเป้าลดบั๊กให้เป็น 0 ตั้งแต่แรก และระบุว่าโค้ด KC3 รันโดยไม่มีนัยด้านความปลอดภัย
- interpreter ช่วงแรกถูกสร้างเป็นรูปแบบที่ REPL ประมวลผล tags ซึ่งเป็น enum-tagged union ที่บรรจุชนิดข้อมูลทั้งหมดของภาษา
- หลังจาก 3 ปี รีแฟกเตอร์แบบ 5 ชั้นเสร็จสิ้น เทสต์ทั้งหมดกลับมาผ่านอีกครั้ง และเว็บเซิร์ฟเวอร์ก็กลับมาอยู่ในสภาพที่ไม่พังอีก
- ชื่อภาษา C3 มีผู้ใช้อยู่แล้ว จึงเปลี่ยนเป็น KC3
- graph database cl-facts เดิมของ Common Lisp ถูกพอร์ตเป็น C89
- ส่วนใหญ่เขียนขึ้นในช่วงล็อกดาวน์ Covid-19 ปี 2020
- รวมการเพิ่ม·ลบ triple, ระบบ recursive query, transaction, logging และ persistence
- นำดีไซน์ต้นฉบับของ Common Lisp มาทำใหม่ใน C89 แทบจะเหมือนเดิม
- KC3 ยังมี parser และ generator สำหรับจัดการความหมายเชิงรูปแบบของชนิดข้อมูลอัลกอริทึมหลายแบบ
- รวมถึง Structs, Linked lists, Maps, Hash tables, Time, Complex, Rationals, Tuples, Code blocks, Quotes, Unquotes, Copy on write, Skip lists, Sets เป็นต้น
- มี macro และจะกล่าวถึงตัวอย่างในบทความถัดไป
- ได้รับแรงบันดาลใจอย่างมากจาก José Valim และงาน Elixir
- REPL ikc3 parse อินพุตจากคีย์บอร์ดหรือไฟล์ แล้วส่งผลการประเมิน KC3 ไปยัง standard output และถูกใช้ใน unit test ของ KC3 ระดับที่ 2 เป็นส่วนใหญ่
- kc3_httpd เป็นเว็บเซิร์ฟเวอร์ที่มีเฟรมเวิร์ก MVC และใช้สร้างหน้าเว็บในปัจจุบัน
- บทความ Common Lisp มียอดเข้าชม 700 ครั้ง และเว็บไซต์เอกสารเขียนด้วย kc3_httpd กับ implementation Markdown-to-HTML ด้วย C ที่ขยายเพิ่มเติม
ยังไม่มีความคิดเห็น