ใช้ HHKB จนจะคล่องแล้ว
Advice ไปผลิต keyboard อยู่หรือไง
"Type Inference in Lisp" https://medium.com/@kenichisasagawa/type-inference-in-lisp-9b3e691f2eb0
KDE Plasma 6 ออก beta แล้ว https://9to5linux.com/kde-plasma-6-desktop-environment-is-now-available-for-public-beta-testing
เคยลอง Void Linux อยู่พักนึงดี runit ก็ใช้ง่าย แต่ตอนนี้กลับมาใช้ Debian Stable ธรรมดา
เปลี่ยน font เป็น TLWG Typo แบบหนา
ลองจาก shell ใน Emacs อีกที
อยากโพสต์จาก Emacs
Lume เอาได้ ถึงรูปโปรไฟล์ไม่มาก็เถอะ
lume เอาได้
ลองจาก Lume
"โปรดเกล้าฯ แต่งตั้ง พล.อ.ประยุทธ์ เป็นองคมนตรี โดยไม่ปรากฏชื่อผู้รับสนองพระบรมราชโองการ " https://prachatai.com/journal/2023/11/107029
นอกจาก SQL แล้วก็มีภาษาอื่น ๆ ที่ใช้ได้คล้าย ๆ กัน เช่น datalog และ SPARQL ซึ่งมักจะใช้กับข้อมูลที่ไม่เป็น table ของ datalog ผมนึกไม่ออกเท่าไหร่ แต่ก่อน SPARQL ผมก็นึกไม่ออกจนได้มาเจอข้อมูลใน Wikidata ซึ่งมันหลากหลายมาก ๆ ถ้าจะเป็นใน table แบบ SQL โดยที่มี table หลายหลายชนิดน่าจะยากเลย เพราะก็จะมี table ใหม่ ๆ เกิดขึ้นตลอด ไม่เห็น RDF ที่มองเป็นแค่ triple
Concurrency นอกจากจะใข้ภาษาที่คิดมาแล้วว่าจะทำ concurrency อย่างไร อีกทางนึงก็ใช้ภาษาที่ไม่ได้ลงรายละเอียดมากเกินไปแบบ SQL ก็ได้
SQL เป็นการเขียนบอกว่าเอา data ออกมาตามเงื่อนไขอะไร แต่ไม่ไปเจ้ากี้เจ้าการว่าจะต้องไปหามาด้วยวิธีไหน ทำให้ implementation มีอิสระมาก อาจจะใช้ CPU 1 คอร์ด็ได้ ใช้ CPU หลาย ๆ ตัวมาช่วยกันก็ได้ หรือใช้ GPU ช่วยก็ได้ อาจจะใช้คอมพิวเตอร์หลาย ๆ เครื่องมาช่วยกันหาข้อมูลตามคำสั่ง SQL คำสั่งเดียวก็ได้
แต่เอาจริง Lisp ที่เป็นที่นิยมในวงการศึกษาส่วนมากก็เห็นใช้ Racket ไม่ใช่ ISLisp อยู่ดี
นอกจาก Common Lisp ที่เป็นมาตรฐาน ANSI ของสหรัฐอเมริกาแล้ว เพิ่งอ่านมาไม่กี่วันนี้ว่า ISLisp เป็นมาตรฐาน ISO/IEC ซึ่งดูอินเตอร์กว่า รายละเอียดก็ต่างกันนิด ๆ หน่อย ๆ ในแง่การศึกษาอาจจะใช้ ISLisp ก็ได้ แต่ในทางปฏิบัติอาจจะลำบากหน่อย เพราะ library น้อย และ implementation ยังไม่ได้ผ่านการใช้งานจริง ๆ จัง ๆ เท่าไหร่นัก
Clojure เป็นภาษาในตระกูล Lisp ที่อายุเพิ่งได้ 16 ปี ทำให้คิดเรื่อง concurrency มาแล้วเป็นอย่างดี ไม่ได้เป็นแค่ระบบ lock และแก้ state ปัญหาของระบบที่ lock และมาแก้ state เอาอย่างแรกคือมันเหนื่อย และอาจจะพลาดได้ บางทีคนเขียนอาจจะไม่ได้เข้าใจเลย เวลามันพังจะเป็นแบบรันได้บ้างไม่ได้บ้างทำให้งงไปใหญ่
Clojure ตัดปัญหาแต่แรกเลยว่า data structure ที่ใช้เป็นแบบ persistent/immutable แต่แรก ดังนั้นโอกาสที่จะไปแก้ตัวแปรเดียวกันจากหลาย ๆ thread โดยที่ไม่ได้คิดอะไร มันทำไม่ได้แต่แรก
ส่วนถ้าอยากให้แก้ค่ากันได้ระหว่าง thread ก็ต้องใช้คำสั่งพิเศษ
สิ่งที่ Common Lisp ซึ่งเป็น spec จากยุค 80s ไม่มีด้วย คือพวกเรื่อง multi-threads อย่างไรก็ตามในทางปฏิบัติก็ใช้ได้เพราะมี extension ของ implementation ต่าง ๆ เวลาใช้งานก็มี bordeaux-threads มาครอบให้ portable อีกที ก็ใช้งานได้
เทียบกับ Python และ JavaScript ที่เพิ่งเขียนขึ้นมาในยุค 90s กลายเป็นว่า Common Lisp ไม่มี global lock หรือระบบที่บังคับให้รันแบบ event driven
สรุปว่าในทางปฏิบัติ Common Lisp ก็ทำ type check ตอน compile รวมถือสามารถ declare type ได้ และ compile ก็มีระบบ type inferenece รู้ type ได้เองจากค่าคงที่ หรือบาง function ไม่จำเป็นต้องประกาศทั้งหมด
นอกจากจะใช้หาจุดผิดแล้วก็ยังเป็นการเพิ่มประสิทธิภาพด้วย ลด type check ตอนรันทำให้ความเร็วเพิ่มขึ้น
ที่สำคัญคือ SBCL ทำได้มาหลายปีแล้ว อาจจะถึง 20 กว่าปี ถ้านับรวม ๆ CMUCL ด้วย ไม่ใช่ว่าเพิ่งมาทดลองทำ

