1 คะแนน โดย GN⁺ 2024-08-31 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • CIEL เป็น Lisp แบบขยายที่สร้างบน Common Lisp 100% และชูจุดเด่นการจัดมาให้แบบ “batteries included” พร้อมเครื่องมือพื้นฐาน
  • สคริปต์รันได้ด้วย shebang #!/usr/bin/env ciel และสามารถใช้ การอ่าน JSON กับ HTTP GET ได้โดยตรงจากโค้ด Lisp
  • ตัวอย่างใช้ http:get เพื่อเรียก https://fakestoreapi.com/products?limit=5 แล้วใช้ json:read-json อ่านผลลัพธ์ก่อนพิมพ์ออกด้วย print
  • ตัวอย่างการรัน ./myscript.lisp แสดงให้เห็นการใช้งานสคริปต์ CIEL เหมือนไฟล์ที่รันได้ทั่วไป
  • ส่วนที่เหลือของเอกสารบนเว็บต้องใช้ JavaScript และหากดูโดยไม่ใช้ JavaScript ต้องไปที่ GitHub repository

ลักษณะพื้นฐานของ CIEL

  • CIEL เป็นภาษาที่แนะนำตัวเองว่าเป็น “Lisp แบบขยาย”
  • สร้างบน Common Lisp

    • สร้างบน Common Lisp 100%
    • มีจุดเด่นเป็นการจัดมาให้แบบ batteries included พร้อมเครื่องมือพื้นฐาน

ตัวอย่างการรันสคริปต์

  • โค้ดตัวอย่างกำหนดตัวรัน ciel เป็น shebang
#!/usr/bin/env ciel

(print
  (json:read-json
    (http:get "https://fakestoreapi.com/products?limit=5";)))
  • ใช้ http:get ส่งคำขอ HTTP แล้วใช้ json:read-json อ่าน JSON ที่ตอบกลับก่อนพิมพ์ออกด้วย print
  • คำสั่งรันมีดังนี้
$ ./myscript.lisp

การเข้าถึงเอกสารและรีโพซิทอรี

  • ลิงก์โปรเจ็กต์มีให้ที่ GitHub
  • ส่วนที่เหลือของเอกสารบนเว็บต้องใช้ JavaScript และมีคำแนะนำว่าหากไม่สามารถใช้ JavaScript ได้ ให้ไปดูที่ GitHub repository

1 ความคิดเห็น

 
GN⁺ 2024-08-31
ความคิดเห็นจาก Hacker News
  • การที่คอมโพเนนต์ที่มีเอกสารมาตรฐานชัดเจนถูกมัดรวมมาให้ใช้ได้ทันทีเหมือนเป็นส่วนหนึ่งของภาษาแกนหลัก แถมยังมีชื่อเท่ ๆ ด้วยนั้นสำคัญจริง ๆ
    ชอบนะ และดูเหมือนอาจกลายเป็นเป้าหมายมาตรฐานใหม่ได้ด้วย ตอนนี้เหลือแค่มาสคอตหรือโลโก้ดี ๆ สักอย่าง

    • ดูจากชื่อแล้วน่าจะเป็นแมวน้ำตัวน้อย
    • ไม่รู้ว่าเอกสารอยู่ตรงไหน พูดตรง ๆ ตรงนี้ดูไม่ได้มีเยอะ และผมคงเรียกมันว่า README มากกว่าเอกสาร
  • ชอบแนวทางนี้ คิดว่าจะเป็น “Lisp อีกตัวหนึ่ง” ซึ่งถึงจะเจ๋ง แต่ก็คงไม่ได้อยากหยิบมาใช้ทันที
    การขยายและปรับปรุงสิ่งที่มีอยู่แล้วอาจยากกว่าและสนุกน้อยกว่าการเริ่มใหม่ แต่มีคุณค่ากว่ามาก ผมใช้ Common Lisp อยู่แล้ว และสิ่งนี้ดูเหมือนช่วยลดความประหลาดเฉพาะตัวของมันลงได้บ้าง โดยเฉพาะสำหรับผู้เริ่มต้นหรือโปรเจกต์เล็ก ๆ

  • ทุกครั้งที่มีการพูดถึง Lisp ที่เร็วและสะดวก ผมอยากหยิบ Joker(https://github.com/candid82/joker) ขึ้นมาพูด
    มันเป็นไวยากรณ์แบบ Clojure ที่เขียนด้วย Go ผมไม่ได้เกี่ยวข้องอะไรด้วย แต่คิดว่ามันยอดเยี่ยมจริง ๆ ถ้าเขียนตัวอย่าง CIEL ด้วย Joker จะเป็น (prn {:a 1 :b 2 :c 3}) และ Gist สำหรับดาวน์โหลด·ติดตั้ง·รันอยู่ที่ https://gist.github.com/lsh-0/f7df23777ef35a8cc3d85e1dcbf0eb...
    การรันสคริปต์ทั้งหมดใช้เวลา 2.1 วินาที ส่วนการรันตัวอย่างเองใช้เวลา 0.007 วินาที

  • ดีใจที่ได้เห็นแนวทางที่ Babashka(https://babashka.org/) เลือกใช้เกิดขึ้นในโลกของ Common Lisp แล้ว

  • ดูบน Safari ก็มีคำเตือน Javascriptแบบเดียวกัน ผมไม่ได้เปิดส่วนขยายอะไรเลย
    ลองตรวจด้วย Chrome แล้ว นอกจากเรื่องนั้นก็ดูเป็นรูปแบบที่อยากใช้พอดี ไลบรารีมาตรฐานของ CL รู้สึกเหมือนมีภาระมากไปนิดอยู่แล้ว แต่ถ้าจะไปแนว “มีแบตเตอรี่มาให้ครบ” สิ่งอย่าง Alexandria, Bordeaux ก็ยังขาดอยู่ เลยชอบตัวเลือกนี้ มันให้ความรู้สึกของ “แนวปฏิบัติที่ดี” หรือการทำให้เป็นมาตรฐานในอีโคซิสเต็ม CL ที่ค่อนข้างกระจัดกระจาย

  • ยอดเยี่ยม ส่วนตัวผมใช้ image ที่ใส่ Alexandria, Serapeum, Dexador, Bordeaux Threads และเครื่องมือเกี่ยวกับ JSON ไว้ด้วยอยู่แล้ว การมีอะไรสักอย่างที่คนอื่น ๆ ใช้เป็นเป้าหมายคล้ายกันน่าจะสะดวก
    ดูมีโอกาสสำเร็จมากกว่าข้อเสนอ CDR ที่คุยกันมากเกินไป หรือ CL21 ที่มาก่อนหน้านั้นด้วย อยากรู้เหมือนกันว่ามี reader macro ที่เปิดไว้เป็นค่าเริ่มต้นเยอะไหม

    • ใน terminal REPL เปิดไว้แค่อันเดียว และเมื่อใช้ CIEL เป็นไลบรารี Lisp ทั่วไป จะไม่เปิดอะไรเลย
      เพราะไม่อยากแตะ readtable เป็นค่าเริ่มต้น วิธีเปิด shell passthrough ใน editor REPL ดูด้านล่างได้
    • ลองไล่ดูโค้ดเร็ว ๆ แล้วเหมือนว่ามีแค่ clesh[1] ที่เปิดเป็นค่าเริ่มต้นเพื่อใช้หลุดจาก REPL ไปยังเชลล์
      1: https://github.com/Neronus/Clesh
  • ถ้ามี wrapper สำหรับบิลด์คอร์ของ ncurses และ SDL ก็คงเป็นไปได้ไหมว่าในสักวัน lem จะรันบน CIEL ได้ตรง ๆ และเกิดสภาพแวดล้อม Lisp จริง ๆ ขึ้นมา
    https://news.ycombinator.com/item?id=41357409

  • ดูเหมือนจะต่างจาก Ciel(https://pldb.io/concepts/ciel.html) ซึ่งเป็น Lisp อีกตัวที่ Ron Garret ทำไว้ในปี 2010 เขายังเป็นนักวิทยาศาสตร์จรวดด้วย(https://flownet.com/ron/)

  • คอมไพล์เป็นไบนารีได้ง่ายไหม? ดูเหมือนใช้วิธีมาตรฐานของ CL ก็น่าจะได้
    การที่ CIEL custom REPL มีเชลล์ passthroughอย่าง !ls เป็นฟีเจอร์ที่เจ๋ง

    • ค่อนข้างสะดวก ถ้าอยากได้เชลล์ Lisp ขั้นสูงที่ผสมโค้ดเชลล์กับโค้ด Lisp ในเทอร์มินัล ลองดู lish: https://github.com/nibbula/lish/
      ผู้เขียนยังไม่มองว่ามัน “พร้อมแล้ว” หรือ “ดีพอแล้ว” แต่ก็พัฒนาไปมากพอสมควรแล้ว ยังมี POSIX shell อย่าง https://github.com/bradleyjensen/shcl ด้วย และเช่นเคย รายการเพิ่มเติมดูได้ที่ https://github.com/CodyReichert/awesome-cl#shells-shells-int...
    • ตอนนี้ใช้ CIEL เป็นไลบรารีแล้วบิลด์ด้วยวิธีมาตรฐาน
      อยากเพิ่มคำสั่ง ciel build
    • ขอโทษถ้าผมเข้าใจผิด แต่คิดว่านี่เป็นฟีเจอร์ที่ค่อนข้างมาตรฐานนะ IPython kernel ก็ใช้รูปแบบเดียวกันเป๊ะ ๆ และถ้าต้องการเชลล์เต็มรูปแบบก็ใช้ xonsh ได้
      สงสัยเหมือนกันว่า Python เป็นฝั่งที่แปลกในเรื่องการทำ REPL หรือเปล่า ผมคุ้นกับ REPL แค่ Python กับ e-lisp
    • Ctrl+Z ยังขาดอะไรไปหรือ?
  • ดูเหมือนเป็นSBCL ที่เพิ่มไลบรารีเข้าไป ผู้เขียนคือ vindarel อยู่ใน HN

    • สวัสดี o/ หวังว่าเป้าหมายของ CIEL จะอธิบายได้ชัดเจน ผมใช้มันทุกวัน ใช้ core image ในเอดิเตอร์ และนำผลิตภัณฑ์ไปเผยแพร่ด้วยสิ่งนี้
      เวลาจะเริ่มโปรเจกต์ใหม่ เมื่อต้องโต้ตอบกับโลกภายนอก หรือเมื่ออยากเขียนของเล็ก ๆ แล้วอัปขึ้นเซิร์ฟเวอร์โดยไม่ต้องเจอความซับซ้อนของ Python มันช่วยประหยัดเวลาได้มาก แน่นอนว่า Django แทนที่ได้ยาก แต่ผมก็เริ่มทำแดชบอร์ด DB อัตโนมัติสำหรับงาน CRUD แล้ว และแม้ยังไม่เปิดเผยต่อสาธารณะ แต่ก็กำลังคืบหน้า
      ผมค่อย ๆ ผสาน CL เข้าไปในงานลูกค้า และ CIEL ก็เป็นอีกเครื่องมือหนึ่งเพื่อจุดประสงค์นั้น เพื่อให้ได้ใช้ CL จริง ๆ โปรเจกต์ของผมไม่ได้จำเป็นต้องมีพลังพิเศษของ CL เสมอไป แต่ผมอยากได้พลังนั้นสำหรับการพัฒนา·ดีพลอย·มอนิเตอร์
      วันนี้แก้ปัญหาหลายอย่างและปล่อย v0.2 แล้ว: https://github.com/ciel-lang/CIEL/releases/tag/v02 ใจความสำคัญคือการติดตั้ง CIEL ควรง่ายขึ้นมาก โดยเฉพาะบน Mac ตอนนี้ dependency ของระบบลดลงไปมากแล้ว
      ถ้ายังติดตั้งบนบางแพลตฟอร์มได้ยาก ขอให้ส่งรายละเอียดมาใน issue ด้วย สรุปคือหวังว่า CIEL จะทำให้เส้นทาง CL ของพวกคุณง่ายและราบรื่นขึ้น คุณคงนึกไม่ออกหรอกว่าผมใช้เวลานานแค่ไหนกว่าจะค้นพบเรื่องต่าง ๆ เหล่านี้ ตอนนี้มันพร้อมและถูกแพ็กไว้ให้แล้ว :-]