5 คะแนน โดย GN⁺ 2024-05-23 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • Try Clojure เป็นหน้าทดลองใช้งาน 5 นาทีที่ให้ประเมินผล นิพจน์ Clojure ได้ทันทีในเบราว์เซอร์
  • สิ่งที่พิมพ์ใน REPL ด้านขวาของหน้าจอจะถูกรันด้วย read-eval-print loop
  • สามารถพิมพ์นิพจน์ตัวอย่างอย่าง (+ 1 2) เอง หรือคลิกชิ้นส่วนโค้ดเพื่อแทรกให้อัตโนมัติได้
  • ใช้ (help) เพื่อตรวจสอบคำสั่ง และเมื่อพร้อมแล้วให้พิมพ์ (start) เพื่อเริ่มทดลอง
  • หน้านี้สร้างด้วย Clojurescript และข้อมูลผู้จัดทำระบุ Elia Scotto, Michiel Borkent และชุมชน Clojure

Clojure ที่รันได้ทันทีในเบราว์เซอร์

  • Try Clojure ถูกออกแบบมาให้ทดลองใช้ Clojure แบบสั้น ๆ พร้อมข้อความชวนว่า “Got 5 minutes?”
  • Clojure symbolic expression ที่ผู้ใช้ป้อนใน REPL ด้านขวาจะถูกประเมินผล
  • ลำดับการทดลองใช้งานเรียบง่าย
    • พิมพ์นิพจน์อย่าง (+ 1 2) ด้วยตนเอง
    • คลิกชิ้นส่วนโค้ดเพื่อแทรกอัตโนมัติ
    • ใช้ (help) เพื่อตรวจสอบคำสั่ง
    • ใช้ (start) เพื่อเริ่มต้น

ข้อมูลผู้จัดทำ

  • ในหน้ามีคำคมของ Rich Hickey รวมอยู่ด้วย: “If you want everything to be familiar, you'll never learn anything new.”
  • Try Clojure สร้างด้วย Clojurescript และระบุ Elia Scotto เป็นผู้สร้าง
  • ยังมีคำขอบคุณถึง Michiel Borkent และ community ของ Clojure ด้วย

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

 
GN⁺ 2024-05-23
ความคิดเห็นจาก Hacker News
  • ดีใจที่มันกลับมา เวอร์ชันที่มีอยู่เมื่อนานมาแล้วทำให้ผมได้ลอง Clojure และการเลือกครั้งนั้นก็กลายเป็นการตัดสินใจที่ส่งผลต่ออาชีพมากที่สุด
    ตอนนี้ก็ยังใช้ Clojure แทบทุกวันที่ทำงานและที่บ้าน บางครั้งเป็น Clojure มาตรฐาน บางครั้งก็ใช้ Babashka ที่ยอดเยี่ยมแทน task runner แบบ Make หรือสคริปต์ Zsh
    Go ก็เป็นตัวเลือกอันดับสองที่แข็งแกร่งเมื่อจำเป็นต้องคอมไพล์เป็นไบนารีเดี่ยว แต่ Clojure ให้ความรู้สึกสบายมือที่สุด เพราะมี เวิร์กโฟลว์การพัฒนาแบบ REPL ที่ให้ความรู้สึกเหมือนได้สนทนากับโปรแกรม มากกว่าลูปเขียน-คอมไพล์-รันทั่วไป
    พอรวมกับการที่มันรันบน JVM ก็กลายเป็นชุดเครื่องมือที่ทำงานให้เสร็จได้อย่างสนุก ถ้าสนใจ Lisp และการเขียนโปรแกรมเชิงฟังก์ชันแม้เพียงเล็กน้อย ก็อยากแนะนำให้ลอง และถ้าใช้ VSCode ปลั๊กอิน Calva จะช่วยได้มาก

    • “เหตุผลที่หายไปพักหนึ่ง” คือผู้สร้าง Anthony Grimes(https://github.com/Raynes) เสียชีวิตไปเมื่อ 7 ปีก่อน: https://www.reddit.com/r/Clojure/comments/5gyyxw/clojure_ope...
    • ผมมักทึ่งเสมอที่มีคนจำนวนมากเปลี่ยนไปใช้ Go ได้ง่าย ๆ ทั้งที่เคยใช้ ภาษาที่มีพลังในการสื่อความสูง อย่าง Clojure, Rust, TS
      การเปลี่ยนไปใช้ภาษาที่สื่อความได้น้อยกว่านั้นทั้งเจ็บปวดและน่าหงุดหงิด และจำได้ว่าตอนย้ายจาก Python ไป Java 5 โค้ดที่ใช้สื่อความหมายเดียวกันยาวขึ้น 3–5 เท่า
      บางทีแก่นสำคัญคงอยู่ที่การใช้ภาษาที่สื่อความได้น้อยกว่าเขียนแค่ ของเล็ก ๆ เช่น เชลล์สคริปต์ ฟังก์ชัน C ขนาดเล็กสำหรับประสิทธิภาพหรืออินเทอร์เฟซกับฟังก์ชันภายนอก หรือยูทิลิตี Go เล็ก ๆ
    • สิ่งที่ทำให้ผมไม่เรียน Clojure มาตลอดคือ “j” ในชื่อ เคยมีประสบการณ์แย่ ๆ กับ JDK และ JVM มากเกินไป จนถ้าไม่ใช่หมายถึง JavaScript อะไรที่มี “J” อยู่ในชื่อก็อยากอยู่ให้ห่างสักพันกิโลเมตร
  • ถ้าเพิ่งรู้จัก Clojure และอยากทดลองใช้งานให้เกิดประโยชน์ได้ทันที ขอแนะนำ Babashka runtime สำหรับงานสคริปต์อย่างยิ่ง: https://babashka.org
    สนุก เข้าถึงง่าย และเป็นหนึ่งในส่วนที่ขัดเกลามาดีในระบบนิเวศ Clojure
    ต่างจาก JVM Clojure แบบเต็ม ๆ ตรงที่เวลาเริ่มทำงานเร็วมาก จึงเป็นจุดเริ่มต้นที่ดี และผู้เริ่มต้นสามารถทำงานแบบคล้ายอินเทอร์แอกทีฟได้ด้วยเครื่องมือเฝ้าดูไฟล์/รีโหลดที่คุ้นเคยอยู่แล้ว เช่น nodemon
    ภายหลังค่อยขยับไปสู่การตั้งค่าแบบอินเทอร์แอกทีฟเต็มรูปแบบที่ใช้การเชื่อมต่อ REPL จากเอดิเตอร์ก็ได้ แต่สำหรับผู้เริ่มต้น เวิร์กโฟลว์นั้นอาจไม่คุ้นเคยและตั้งค่าได้ยุ่งยาก

    • ถ้าพร้อมจะขยายความสนุกไปสู่เว็บ ลองดู Biff ได้: https://biffweb.com
    • จุดที่ดีที่สุดของ Babashka คือทุกวันนี้มันเป็นแบบ มีแบตเตอรี่ให้พร้อม จริง ๆ
      เคยลองใช้ร่วมกับ HTMX เพราะต้องทำ UI เล็ก ๆ สำหรับแสดงสถิติของแอปงาน และเป็นประสบการณ์ที่ดีมาก
      Babashka มีแทบทุกอย่างที่เว็บแอปพื้นฐานต้องใช้มาให้ในตัว และถ้าใช้ HTMX ก็สามารถโหลดแบบไดนามิกบนหน้าเว็บได้โดยไม่ต้องยุ่งกับฟรอนต์เอนด์ JavaScript
      อีกทั้งยังเปิด nREPL ด้วย bb --nrepl-server แล้วเชื่อมต่อเอดิเตอร์อย่าง Calva เพื่อพัฒนาสคริปต์แบบอินเทอร์แอกทีฟได้ ดังนั้นถ้าต้องการเว็บ UI ง่าย ๆ ก็เป็นสิ่งที่ควรลองดู
  • ยังมีไซต์แนวคล้ายกันอย่าง https://www.maria.cloud/ ด้วย
    แม้จะเน้นไปทางสอนการเขียนโปรแกรมให้ผู้เริ่มต้นแบบศูนย์มากกว่า แต่ผมมองว่าการจัดการแบบ paredit พื้นฐานและวิธีประเมินผลเป็นหน่วยฟอร์มนั้นใกล้เคียงกับการพัฒนาแบบขับเคลื่อนด้วย REPL ที่ใช้จริงมากกว่า
    การพิมพ์ลงในหน้าต่างเทอร์มินัล REPL โดยตรงมี ergonomics แย่มาก และโดยปกติวิธีที่สมจริงกว่าคือใช้เครื่องมืออย่าง Calva ของ VSCode หรือ CIDER ของ Emacs เพื่อส่งฟอร์มใต้เคอร์เซอร์ไปยังโปรเซส REPL ที่ไหนสักแห่ง

  • เหตุผลที่ดีที่สุดในการเรียน Clojure คือ Reagent และผมมองว่าเป็นวิธีใช้ React ที่ดีที่สุดอย่างไม่ต้องสงสัย: https://reagent-project.github.io/
    shadow-cljs ช่วยให้ใช้ไลบรารี npm ได้ง่ายขึ้น: https://github.com/thheller/shadow-cljs
    ในการตั้งค่าพื้นฐาน ผมลงตัวกับแบ็กเอนด์ Go และฟรอนต์เอนด์ Reagent: https://github.com/nathants/aws-gocljs

    • Reagent นั้นดีและอยู่มาประมาณ 10 ปีแล้ว แต่ React เองก็ซับซ้อนอยู่แล้ว และผมรู้สึกว่ามันเพิ่มความซับซ้อนทับลงไปอีกมากเกินไป จึงย้ายไปทาง แรปเปอร์บาง ๆ ของ React
      ผมอยากเห็นให้ชัดขึ้นว่าข้างในเกิดอะไรขึ้น และอยากทำงานร่วมกับคอมโพเนนต์ React แบบเนทีฟได้ง่ายกว่าเดิม
      ดูเหมือนว่าจะตามทันการรองรับแบบทดลองของ React 18 แต่ Reagent ล้าหลังเทรนด์ React รุ่นใหม่ ๆ และอาจไม่ได้ประโยชน์ด้านการปรับประสิทธิภาพทั้งหมด
      ยังใช้ class component และไม่ใช้ hook อีกทั้งยังมีความกังวลว่า Hiccup runtime conversion อาจทำให้ประสิทธิภาพลดลง
      อย่างไรก็ดี ในกรณีส่วนใหญ่คงไม่ใช่ปัญหาที่รู้สึกได้ และถ้าไม่ได้ทำอะไรหวือหวาก็น่าจะโอเค ผมยังคิดถึงโมเดล UI-as-data ของ Hiccup อยู่ จึงอาจกลับไปใช้ Reagent อีกในสักวัน
      สำหรับการจัดการสถานะ ขอแนะนำ re-frame อย่างยิ่ง: https://day8.github.io/re-frame/
      ตอนแรกอาจดูหนักไปหน่อย แต่เอกสารยอดเยี่ยม และพอเข้าใจแล้วโมเดลจะชัดเจนมาก
      ยังมีทางเลือกอย่าง Helix(https://github.com/lilactown/helix) หรือ UIx(https://github.com/pitch-io/uix) รวมถึง refx(https://github.com/ferdinand-beyer/refx) ที่แทบตัด dependency กับ Reagent ออกไปแล้ว
      หรือจะเพิ่มโค้ดสำหรับการทำงานร่วมกันใน UIx/Helix เพื่อเชื่อม re-frame ก็ได้: https://github.com/pitch-io/uix/blob/master/docs/interop-wit...
    • แบ็กเอนด์ Elixir ก็เข้ากันได้ดีด้วยพลังของ BEAM VM
    • สงสัยว่าการตั้งค่านั้นทำ code splitting หรือสร้าง static site ได้หรือไม่
      ในปี 2024 คงส่งไฟล์ HTML เปล่า ๆ ลงไปไม่ได้ เพราะจะทำให้ SEO พัง ถ้าไม่ใช่แบบนั้นก็อยากลองดู
  • ช่วงเวลาที่ได้ใช้ Clojure นั้นดีมากจริง ๆ และขอแนะนำอย่างยิ่ง: https://eli.thegreenplace.net/2017/clojure-the-perfect-langu...

  • Clojure for the Brave and True ของ Daniel Higginbotham เป็นแหล่งเรียนรู้ Clojure ที่ยอดเยี่ยมจริง ๆ จึงขอแนะนำอย่างยิ่ง
    อ่านออนไลน์ได้ฟรี: https://www.braveclojure.com/clojure-for-the-brave-and-true

    • ผมรู้สึกว่าสำนวนยืดยาวเกินไป แต่ก็เข้าใจว่ามีคนที่ชอบสไตล์แบบนั้น
      ปัญหาจริง ๆ ของหนังสือเล่มนี้ไม่ใช่ Clojure แต่คือการ เริ่มสอนจาก Emacs
      ทุกวันนี้คงมีมือใหม่จำนวนมากที่มาจาก VSCode ซึ่งสำหรับพวกเขาแล้วมันกลายเป็นสิ่งรบกวนขนาดใหญ่
    • ซีรีส์ Clojure from the ground up ของ Aphyr ก็ดีมากเช่นกัน: https://aphyr.com/posts/301-clojure-from-the-ground-up-welco...
    • หากไม่มีประสบการณ์กับ Emacs การใช้ ปลั๊กอิน Calva ใน VSCode อาจเป็นทางเลือกที่ดีกว่า
  • เมื่อหลายปีก่อน เพื่อนร่วมงานแนะนำว่าถึงจะไม่ลองใช้ Clojure ก็ควรอ่าน History of Clojure แต่ผมก็ผัดผ่อนมาเรื่อย ๆ: https://dl.acm.org/doi/pdf/10.1145/3386321
    จากนั้นหลังจากดู Rich Hickey - Greatest Hits https://changelog.com/posts/rich-hickeys-greatest-hits แล้ว ผมอ่าน History of Clojure และเริ่มเรียนทันที
    Clojure เป็นหนึ่งในภาษาที่สนุกที่สุดสำหรับการสร้างอะไรสักอย่าง และเป็นหนึ่งในภาษาที่งดงามที่สุด
    ไม่ใช่เพราะไวยากรณ์เอง แต่เป็นวิธีที่มันช่วยให้แสดงความคิดผ่านการออกแบบและการประกอบที่ดี ซึ่งกระตุ้นสมองได้อย่างน่าพอใจ
    หากยังมองหาเครื่องมือแวววาวที่พอดีกับตัวเองอยู่ แต่ยังไม่มีอะไรโดนใจ ก็คุ้มที่จะลอง Clojure เป็นหนึ่งในภาษาที่กระชับที่สุดแต่ก็ทรงพลังที่สุดเท่าที่ผมเคยเห็นมา

    • เมื่อไม่กี่เดือนก่อน ผมได้ความรู้สึกคล้ายกันตอนเรียน Common Lisp
      เลยสงสัยว่าถ้าเรียน Clojure จะได้อะไรเพิ่มเติมจากนั้นไหม หรือโดยรวมแล้วคล้ายกัน
  • สงสัยว่ามี Clojure เวอร์ชันที่คอมไพล์ด้วยอะไรอย่าง LLVM หรือไม่
    ให้ความรู้สึกคล้ายกับสิ่งที่ Scala Native เดิมทีตั้งใจจะเป็น แต่ในทางปฏิบัติก็ไม่ได้ตั้งหลักได้แบบนั้น
    ชอบ functional programming แต่ในปี 2024 ระบบนิเวศ Java รู้สึกล้าสมัยเกินไปจนทนได้ยาก

    • กำลังมีงานที่พยายามนำ Clojure runtime ไปอิมพลีเมนต์ด้วย Clang/LLVM และยังตั้งเป้าฟีเจอร์ที่น่าสนใจอย่าง hot reloading ด้วย
      ดูได้ที่ https://jank-lang.org/
      ยังไม่ได้ถึงระดับ feature parity กับ JVM Clojure แบบเต็ม ๆ แต่กำลังติดตามการพัฒนาอย่างใกล้ชิด
    • คอมเมนต์บนสุดในตอนนี้ชี้ไปที่ https://babashka.org/ แต่ตัวนี้ไม่ได้ใช้ LLVM เป็นฐาน ทว่าเป็น GraalVM
      ที่จริงเรื่องนั้นคงไม่ได้เป็นปัญหาใหญ่อะไร
    • กำลังจะมาเร็ว ๆ นี้: https://jank-lang.org
    • https://jank-lang.org/
  • ลิงก์ที่เกี่ยวข้อง:
    Try Clojure – An interactive tutorial in the browser - https://news.ycombinator.com/item?id=30423856 - กุมภาพันธ์ 2022, 93 คอมเมนต์
    Try Clojure in your browser - https://news.ycombinator.com/item?id=3366526 - ธันวาคม 2011, 26 คอมเมนต์
    Try Clojure - https://news.ycombinator.com/item?id=1359682 - พฤษภาคม 2010, 60 คอมเมนต์

  • Clojure กำลังได้รับความนิยมในเม็กซิโก และบราซิลก็น่าจะมีแนวโน้มคล้ายกันเพราะ Nubank
    เป็นที่ที่นักวิทยาการคอมพิวเตอร์อยากไปทำงาน และดูเหมือนจะทำงานด้วย Clojure เป็นหลัก
    เหมือนว่าเคยจ้างสมาชิกหลักบางคนของภาษา และจำได้ว่าช่วงหนึ่งเคยซื้อกิจการบริษัทของ José Valim ผู้สร้าง Elixir ด้วย
    ถึงอย่างนั้นก็ยังดูเป็นบริษัทที่ใช้ Clojure เป็นหลักอยู่ดี

    • Nubank เข้าซื้อ Cognitect บริษัทคอนซัลติ้งที่อยู่เบื้องหลัง Clojure ในปี 2020 และยังซื้อ Platformatec ซึ่งเป็นนายจ้างของ José Valim ด้วย
      กรณีหลังเป็นไปเพื่อรับความเชี่ยวชาญด้านการจัดการโปรเจกต์ของ Platformatec (https://building.nubank.com.br/tech-perspectives-behind-nuba...) และเท่าที่รู้ ไม่มีโค้ด Elixir ที่รันอยู่ใน Nubank
      ฝั่ง “อีกด้านหนึ่ง” ของ ETL pipeline มี Python อยู่ แต่เท่าที่รู้ พื้นที่ที่ผู้ใช้สัมผัสโดยตรงนั้น backend เป็น Clojure ส่วนแอป Android และ iOS เป็น TypeScript
    • มักเจอผู้ใช้ Clojure ที่ชื่อดูเหมือนมาจากโลกภาษาจีนอยู่บ่อย ๆ
      สงสัยว่า Clojure ในจีน ก็เป็นกระแสที่มีนัยสำคัญด้วยหรือไม่