- เรียนที่โรงเรียนคอมพิวเตอร์ในฝรั่งเศส 5 ปี และทำงานเป็นนักพัฒนาอิสระมา 20 ปี
- ทำโปรเจ็กต์ให้ลูกค้าโดยใช้ Ruby on Rails เป็นหลัก
- เริ่มเรียนรู้ Common Lisp พร้อมกับเขียนโปรโตคอลจัดการเซิร์ฟเวอร์ที่สร้าง ASN.1 parser
- พัฒนาเซิร์ฟเวอร์ SNMP โดยสร้างโค้ด C จาก Common Lisp
- หลังจากนั้นก็ทำหลายโปรเจ็กต์บนพื้นฐานของ Common Lisp:
- cl-unix-cybernetics – โปรเจ็กต์ที่ได้ดาวมากที่สุดบน GitHub
- พัฒนา cl-streams และ cffi-posix
- cl-facts – triple store ที่ทำหน้าที่เป็นฐานข้อมูลกราฟสำหรับ Common Lisp
- เร็ว รองรับธุรกรรมแบบอะตอมมิก และธุรกรรมที่ซ้อนกันได้
- ใช้งานร่วมกับ
unwind-protect ได้
- เรียนรู้เพียง 3 แมโครก็ใช้งานได้
- เคยนำเสนอในงาน European Lisp Symposium (ELS)
- เมื่อโฟกัสกับการพัฒนา Common Lisp มากขึ้นก็สูญเสียลูกค้าไป แต่ยังคงเชื่อมั่นอย่างมากในศักยภาพของ Lisp
ข้อจำกัดของเครื่องเสมือน (VM) และคอนเทนเนอร์
- ผู้เชี่ยวชาญชี้ให้เห็นปัญหาของ VM และคอนเทนเนอร์:
- VM สิ้นเปลือง CPU และแบนด์วิดท์โดยไม่จำเป็น
- คอนเทนเนอร์บน Linux ที่อิงกับ cgroups มีช่องโหว่การรันคำสั่งจากระยะไกล (RCE) และการยกระดับสิทธิ์
- มีการค้นพบช่องโหว่ความปลอดภัยใหม่ทุกปี
- ชื่นชอบ OpenBSD และหลีกเลี่ยงปัญหาของเครื่องมือ DevOps อย่าง Terraform, Ansible
ข้อจำกัดของ Common Lisp และปัญหาด้านประสิทธิภาพ
- เกิดปัญหาด้านประสิทธิภาพจาก GC (garbage collector) ในภาษาอย่าง Clojure:
- มีกรณีล้มเหลวตอนพัฒนาเกมวางแผนที่ต้องจัดการยูนิตหลายพันตัว
- GC ของ JVM มาพร้อมปัญหาด้านประสิทธิภาพและต้นทุน
การตัดสินใจเปลี่ยนไปใช้ C
- ตระหนักถึงข้อจำกัดด้านประสิทธิภาพและการพกพาของ Common Lisp:
- Linux, OpenBSD, GTK+, GNOME ล้วนเขียนด้วย C
- สุดท้ายจึงเปลี่ยนไปใช้ C เพื่อแก้ปัญหาด้านประสิทธิภาพและการพกพา
การพัฒนาภาษาใหม่ KC3
- พัฒนาไลบรารียูทิลิตี libc3 → ภาษา C3 → เปลี่ยนชื่อเป็น KC3
- คุณสมบัติของ KC3:
- มีทั้งอินเทอร์พรีเตอร์ (ic3) และคอมไพเลอร์ (c3c)
- สร้างโครงสร้างข้อมูลจากบัฟเฟอร์ UTF-8 และแปลงกลับได้
- การเขียนโปรแกรมเชิงป้องกัน → ลดบั๊กให้เหลือน้อยที่สุดตั้งแต่ต้น
- ไม่มีปัญหาด้านความปลอดภัย
- ระบบชนิดข้อมูลที่อิงกับ tagged union แบบ enum
ผลลัพธ์ที่ได้บนพื้นฐานของ KC3
- พอร์ต cl-facts ไปยัง C89:
- พัฒนาเสร็จในช่วงการระบาดของ Covid-19
- ทำฟีเจอร์เพิ่ม triple, ลบ, ระบบ recursive query, ธุรกรรม, logging, persistence เป็นต้น
- เขียน parser และ generator สำหรับชนิดข้อมูลเชิงอัลกอริทึม:
- รวมถึง struct, linked list, map, hash table, complex number, tuple, code block เป็นต้น
- ได้แรงบันดาลใจอย่างมากจาก José Valim (ผู้สร้าง Elixir)
- ikc3 – REPL ที่แสดงผลลัพธ์การประเมินของ KC3
- kc3_httpd – พัฒนาเว็บเซิร์ฟเวอร์บนพื้นฐานของเฟรมเวิร์ก MVC
- ปัจจุบันหน้าเว็บบล็อกนี้ก็ให้บริการด้วย kc3_httpd
- สร้างเว็บไซต์เอกสาร → ใช้ตัวแปลง Markdown เป็น HTML ของ KC3
บทสรุป
- เปลี่ยนจาก Common Lisp ไปสู่ C โดยอาศัยประสบการณ์ที่ได้จาก Common Lisp
- KC3 ให้ผลลัพธ์ที่โดดเด่นด้านประสิทธิภาพ ความปลอดภัย และการพกพา
- มีแผนจะเผยแพร่แมโครและตัวอย่างเพิ่มเติมที่เกี่ยวข้องกับ KC3 ต่อไป
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ฉันเห็นต่าง ตอนเด็กใช้ VB เยอะมาก แล้วไปเรียน Java, C, C++ ในมหาวิทยาลัย และใช้ C เป็นหลัก ได้เป็นนักพัฒนาหลักของ Xfce และทำอยู่ 5 ปี
เข้าใจความรู้สึกนั้นเต็มที่ ช่วงหลายปีที่ผ่านมารู้สึกอยากพัฒนาอะไรสักอย่างด้วย C ล้วนอย่างแรง
ฉันเริ่มเขียนโปรแกรมด้วย C มานานมากแล้ว และทุกวันนี้ก็ยังอยากย้อนกลับไปช่วงนั้นบ้างเป็นครั้งคราว
หลังจากอ่านบล็อกโพสต์แล้ว ฉันสับสนว่าผู้เขียนต้องการจะสื่ออะไรกันแน่
มีการยกตัวอย่างโค้ด kc3
C เป็นภาษาแรกของฉัน และฉันเคยทำทั้งแอปคอนโซลง่าย ๆ กับเกมเล็ก ๆ
บางทีก็เขียนโค้ด C เป็นงานอดิเรก แต่มีงานซ้ำ ๆ เยอะเกินจนเริ่มน่าเบื่อ
C ประสบความสำเร็จเพราะมันใช้งานได้จริง
ฉันไม่เข้าใจอะไรเลย
บทความนี้ให้อารมณ์เหมือนนิทานเตือนใจที่ไม่มีตอนจบแบบมีความสุข