1 คะแนน โดย GN⁺ 2026-01-04 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • เป็นภาษาโปรแกรมที่ผสาน ไวยากรณ์ของ Clojure และประสิทธิภาพเนทีฟบน LLVM พร้อมมอบ การทำงานร่วมกับ C++ ได้อย่างราบรื่น
  • ยังคงรักษา คุณลักษณะเชิงฟังก์ชันและแนวคิดยึดค่าข้อมูลเป็นศูนย์กลาง ของ Clojure ไว้ โดยใช้ LLVM เป็นสภาพแวดล้อมโฮสต์ แทน JVM
  • โครงสร้างข้อมูลทั้งหมดไม่เปลี่ยนแปลงค่า (persistent & immutable) และเชื่อมต่อกับไลบรารีมาตรฐานของ C++ ได้โดยตรง
  • ขณะนี้อยู่ในขั้น อัลฟา (Alpha) โดยมีเอกสารทางการและตัวอย่างให้ดูที่ jank book
  • เป็นความพยายามในการผสานระบบนิเวศของ Clojure เข้ากับประสิทธิภาพเนทีฟของ C++ ซึ่งมี ความหมายในแง่การลดเส้นแบ่งระหว่างภาษาฟังก์ชันนัลกับภาษาระดับระบบ

ภาพรวมของ jank

  • jank คือ ภาษาแบบโฮสต์บน LLVM ที่สร้างขึ้นบนไวยากรณ์และปรัชญาของ Clojure
    • ใช้ LLVM แทน JVM และรองรับ การทำงานร่วมกัน (interoperability) กับ C++
    • รักษา คุณลักษณะแบบฟังก์ชันนัล โต้ตอบได้ และยึดค่าข้อมูลเป็นศูนย์กลาง ของ Clojure ไว้
  • ตั้งเป้าให้ เข้ากันได้กับ Clojure ในระดับสูง โดยเปรียบได้กับที่ Clojure ทำงานร่วมกับ Java ส่วน jank จะผสานกับ C++
  • ปัจจุบันกำลังพัฒนาในสถานะ เวอร์ชันอัลฟา และสามารถดูรายละเอียดเพิ่มเติมได้ในเอกสารทางการ

คุณลักษณะของภาษา

  • โครงสร้างข้อมูลในตัวทั้งหมดเป็นแบบไม่เปลี่ยนแปลงค่า (persistent & immutable)
    • ตัวอย่าง: (def george {:name "George Clooney"})
  • สามารถทำ ผลข้างเคียง (side effect) ได้อย่างชัดเจนเมื่อจำเป็น
    • ตัวอย่าง: (defn say-hi [who] (println (str "Hi " (:name who) "!")) (assoc who :greeted? true))
  • สามารถ เชื่อมต่อกับไลบรารีมาตรฐานของ C++ ได้โดยตรง
    • ตัวอย่าง: (cpp/std.this_thread.sleep_for (cpp/std.chrono.milliseconds ms))
  • มีฟังก์ชันแกนหลักหลากหลายสำหรับ การประมวลผลข้อมูลแบบฟังก์ชันนัล
    • ตัวอย่าง: (apply + (distinct [12 8 12 16 8 6])) ; => 42

การพัฒนาและเอกสาร

  • เอกสารทางการ: jank book
  • โปรเจ็กต์นี้ อิงกับ LLVM 22 และเข้ากันได้กับมาตรฐาน C++ รุ่นใหม่
  • รองรับ AOT compilation, GC profiling, ตัวเลือกการบิลด์ CMake เป็นต้น
  • รวมการตั้งค่า สภาพแวดล้อม Nix และ การบิลด์อัตโนมัติด้วย CI

ชุมชนและการสนับสนุน

  • โปรเจ็กต์สามารถสนับสนุนได้ผ่าน GitHub Sponsors
  • ผู้สนับสนุนทั้งองค์กรและบุคคล ได้แก่ Clojure Together, nubank, multiply.co, modulr-software เป็นต้น
  • ช่องทางชุมชน: Slack (Clojurians), Twitter

การบรรยายและบทแนะนำที่เกี่ยวข้อง

  • วิดีโอบรรยายจาก Clojure Conj 2023
  • มีการแนะนำภาษาใน The REPL Interview และ Compiler Spotlight
  • มีวิดีโอ YouTube: Language Introduction ให้รับชม

สรุป:
jank เป็นภาษาที่นำปรัชญาเชิงฟังก์ชันของ Clojure มาสู่สภาพแวดล้อม LLVM และ C++ แบบเนทีฟ โดยมีเป้าหมายเพื่อ ผสานผลิตภาพของ Clojure เข้ากับประสิทธิภาพของ C++ แม้ตอนนี้จะยังอยู่ในขั้นอัลฟา แต่ก็ได้นำเสนอ ประสบการณ์การพัฒนาแบบบูรณาการรูปแบบใหม่สำหรับทั้งนักพัฒนา Clojure และโปรแกรมเมอร์สายระบบ

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

 
GN⁺ 2026-01-04
ความคิดเห็นจาก Hacker News
  • สำหรับเรื่อง jank alpha อยากให้ไปดูที่หนังสือทางการ
    ตอนนี้ยังไม่พร้อมประกาศอย่างเป็นทางการเต็มที่ แต่ก็ดีใจที่ผู้คน ให้ความสนใจ
    ถ้ารวมความสามารถของคอมไพเลอร์เพิ่มอีกไม่กี่อย่าง ก็จะพร้อมพอให้คนลองใช้ jank ตามหนังสือได้แล้ว

    • สนใจ jank มากเลย ตอนนี้กำลังอ่านหนังสือที่ลิงก์ไว้เมื่อกี้
      เห็นมีจุดผิดไวยากรณ์อยู่บ้าง เลยสงสัยว่า ส่ง PR ไปที่ส่วน book ได้ไหม หรือว่าควรส่งฟีดแบ็กด้วยวิธีอื่นเพื่อคงสำนวนของผู้เขียนไว้
    • ขอส่ง คำขอบคุณและคำชื่นชม ให้ทุกคนที่มีส่วนร่วม
  • jank เป็น ภาษาถิ่นของ Clojure และ Clojure เองก็เป็นภาษาถิ่นของ Lisp
    เน้นเชิงฟังก์ชัน แต่ก็รองรับ mutable state และ side effects ด้วย
    โครงสร้างข้อมูลทั้งหมดเป็น immutable โดยปริยาย และเหมือน Clojure ตรงที่มีกลไกการเปลี่ยนแปลงอย่างปลอดภัย ทำให้จัดการ concurrency ได้ง่าย
    อีกทั้งยังเชื่อมต่อกับ C++ ได้ลึกมาก จนสามารถนิยามชนิดข้อมูล ฟังก์ชัน และเทมเพลต C++ ใหม่ได้ในรันไทม์
    ใช้ JIT compilation ผ่าน Clang และ LLVM จึงเข้าถึงไลบรารี C/C++ ได้ง่าย
    รายละเอียดดูได้ในหนังสือทางการ

    • ตอนที่เคยใช้ C++ เมื่อก่อน ขั้นตอนคอมไพล์ทรมานมาก
      ผมชอบ Clojure อยู่แล้ว และการมี native target ก็ดูน่าสนใจมาก
      เลยอยากรู้ว่าใน jank ความเร็ว คอมไพล์/คอมไพล์ใหม่ เป็นอย่างไรบ้าง
  • สงสัยว่าการพัฒนา jank จะ ตาม Clojure ต้นน้ำ ใกล้แค่ไหน
    ตั้งใจจะให้เหมือนกันมากที่สุดแบบ cljs หรืออาจแยกทางกันในอนาคต
    ผมเคยทำภาษาที่คล้าย Clojure อยู่ประมาณ 90% แต่ไม่กล้าตั้งชื่อแบบนั้นเพราะรับประกันความเข้ากันได้เต็มรูปแบบไม่ได้
    jank ดูเหมือน drop-in replacement ซึ่งดูเจ๋งมาก

    • jank ก็คือ Clojure และมีแผนจะ ติดตามการพัฒนา Clojure ต้นน้ำ
      ตอนนี้กำลังร่วมมือกับทีม Clojure และนักพัฒนาภาษาถิ่นอื่น ๆ และกำลังเป็นแกนนำของ cross-dialect clojure-test-suite
      ตอนนี้รองรับหรือกำลังทำงานกับ Clojure JVM, ClojureScript, Clojure CLR, babashka, Basilisp และ jank
      อย่างไรก็ดี มีแผนจะเพิ่ม โหมดทางเลือก ที่ได้แรงบันดาลใจจาก Carp แต่จะยังคงความเข้ากันได้ตามค่าเริ่มต้น
  • แวบแรกนึกว่าไม่ใช่ jank แต่เป็น Jack Lang นักการเมืองฝรั่งเศส

    • ผมก็เข้าใจผิดแบบเดียวกัน
  • หนังสือที่ควรดูคู่กัน: https://book.jank-lang.org/

  • ผมตามบล็อก jank มา 1 ปีแล้ว ขอแสดงความยินดีด้วยกับ alpha release
    ในฐานะผู้ใช้ Emacs อยากรู้ว่าสถานะการรองรับ เครื่องมือพัฒนา แบบ CIDER เป็นอย่างไรบ้าง
    แล้วก็เจอพิมพ์ผิดในลิงก์ส่วน Welcome — ควรเป็น “foreword” ไม่ใช่ “foreward”

    • nREPL server ใช้งานได้แล้ว แต่ยังไม่ได้ merge เข้าที่ repository ของ jank
      ดูได้ที่ try-jank
      งานนี้ล่าช้าเพราะบั๊กของ Clang แต่เป็น งานที่มีลำดับความสำคัญสูง
      ส่วนคำสะกดผิดในลิงก์แก้แล้ว
  • สงสัยว่า jank เชื่อมกับโค้ดเบส Rust ได้ไหม

    • ได้เหมือนโปรเจกต์ C++ ทั่วไป
      เชื่อมกันได้ผ่าน C ABI หรือกลไกการทำงานร่วมกันระหว่าง C++/Rust
    • ได้แน่นอน
  • อยากรู้ว่ามี ระบบชนิดข้อมูลแบบสถิต มาด้วยไหม

    • เพราะเป็นภาษาถิ่นของ Clojure จึงเป็น ภาษาแบบ dynamic typing โดยพื้นฐาน
      แต่ผู้พัฒนาเคยพูดถึงแผนจะเพิ่มระบบชนิดแบบค่อยเป็นค่อยไป¹
      วิสัยทัศน์คือให้บางส่วนเป็นแบบ dynamic เต็มตัวและอิง GC ส่วนบางส่วนก็จะควบคุมได้มากขึ้นและปรับแต่งประสิทธิภาพได้ดีขึ้น
      ¹ บล็อกโพสต์ที่เกี่ยวข้อง
    • ไม่มี static type ในระดับภาษาทั้งหมด
      interop กับ C++ นั้น มีการกำหนดชนิดแบบสถิต แต่พอกลับเข้ามาในโลกของ Clojure ก็จะเป็นแบบ dynamic และ polymorphic เต็มรูปแบบ
      มีแผนจะสำรวจโหมด static type แบบเลือกใช้ได้เหมือน Carp แต่ ไม่ใช่ปีนี้
    • เนื่องจากกำลังทำ Clojure อยู่ จึง ค่อนข้างมั่นใจ ว่าไม่มี static type
  • ตอนแรกนึกว่าเป็นข่าวว่า “Jank Lang” ไป หา investment alpha เจอ