ลองใช้ Clojure
(tryclojure.org)- 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 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ดีใจที่มันกลับมา เวอร์ชันที่มีอยู่เมื่อนานมาแล้วทำให้ผมได้ลอง Clojure และการเลือกครั้งนั้นก็กลายเป็นการตัดสินใจที่ส่งผลต่ออาชีพมากที่สุด
ตอนนี้ก็ยังใช้ Clojure แทบทุกวันที่ทำงานและที่บ้าน บางครั้งเป็น Clojure มาตรฐาน บางครั้งก็ใช้ Babashka ที่ยอดเยี่ยมแทน task runner แบบ Make หรือสคริปต์ Zsh
Go ก็เป็นตัวเลือกอันดับสองที่แข็งแกร่งเมื่อจำเป็นต้องคอมไพล์เป็นไบนารีเดี่ยว แต่ Clojure ให้ความรู้สึกสบายมือที่สุด เพราะมี เวิร์กโฟลว์การพัฒนาแบบ REPL ที่ให้ความรู้สึกเหมือนได้สนทนากับโปรแกรม มากกว่าลูปเขียน-คอมไพล์-รันทั่วไป
พอรวมกับการที่มันรันบน JVM ก็กลายเป็นชุดเครื่องมือที่ทำงานให้เสร็จได้อย่างสนุก ถ้าสนใจ Lisp และการเขียนโปรแกรมเชิงฟังก์ชันแม้เพียงเล็กน้อย ก็อยากแนะนำให้ลอง และถ้าใช้ VSCode ปลั๊กอิน Calva จะช่วยได้มาก
การเปลี่ยนไปใช้ภาษาที่สื่อความได้น้อยกว่านั้นทั้งเจ็บปวดและน่าหงุดหงิด และจำได้ว่าตอนย้ายจาก Python ไป Java 5 โค้ดที่ใช้สื่อความหมายเดียวกันยาวขึ้น 3–5 เท่า
บางทีแก่นสำคัญคงอยู่ที่การใช้ภาษาที่สื่อความได้น้อยกว่าเขียนแค่ ของเล็ก ๆ เช่น เชลล์สคริปต์ ฟังก์ชัน C ขนาดเล็กสำหรับประสิทธิภาพหรืออินเทอร์เฟซกับฟังก์ชันภายนอก หรือยูทิลิตี Go เล็ก ๆ
ถ้าเพิ่งรู้จัก Clojure และอยากทดลองใช้งานให้เกิดประโยชน์ได้ทันที ขอแนะนำ Babashka runtime สำหรับงานสคริปต์อย่างยิ่ง: https://babashka.org
สนุก เข้าถึงง่าย และเป็นหนึ่งในส่วนที่ขัดเกลามาดีในระบบนิเวศ Clojure
ต่างจาก JVM Clojure แบบเต็ม ๆ ตรงที่เวลาเริ่มทำงานเร็วมาก จึงเป็นจุดเริ่มต้นที่ดี และผู้เริ่มต้นสามารถทำงานแบบคล้ายอินเทอร์แอกทีฟได้ด้วยเครื่องมือเฝ้าดูไฟล์/รีโหลดที่คุ้นเคยอยู่แล้ว เช่น nodemon
ภายหลังค่อยขยับไปสู่การตั้งค่าแบบอินเทอร์แอกทีฟเต็มรูปแบบที่ใช้การเชื่อมต่อ REPL จากเอดิเตอร์ก็ได้ แต่สำหรับผู้เริ่มต้น เวิร์กโฟลว์นั้นอาจไม่คุ้นเคยและตั้งค่าได้ยุ่งยาก
เคยลองใช้ร่วมกับ 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
ผมอยากเห็นให้ชัดขึ้นว่าข้างในเกิดอะไรขึ้น และอยากทำงานร่วมกับคอมโพเนนต์ 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...
ในปี 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 ก็ควรอ่าน 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 เป็นหนึ่งในภาษาที่กระชับที่สุดแต่ก็ทรงพลังที่สุดเท่าที่ผมเคยเห็นมา
เลยสงสัยว่าถ้าเรียน Clojure จะได้อะไรเพิ่มเติมจากนั้นไหม หรือโดยรวมแล้วคล้ายกัน
สงสัยว่ามี Clojure เวอร์ชันที่คอมไพล์ด้วยอะไรอย่าง LLVM หรือไม่
ให้ความรู้สึกคล้ายกับสิ่งที่ Scala Native เดิมทีตั้งใจจะเป็น แต่ในทางปฏิบัติก็ไม่ได้ตั้งหลักได้แบบนั้น
ชอบ functional programming แต่ในปี 2024 ระบบนิเวศ Java รู้สึกล้าสมัยเกินไปจนทนได้ยาก
ดูได้ที่ https://jank-lang.org/
ยังไม่ได้ถึงระดับ feature parity กับ JVM Clojure แบบเต็ม ๆ แต่กำลังติดตามการพัฒนาอย่างใกล้ชิด
ที่จริงเรื่องนั้นคงไม่ได้เป็นปัญหาใหญ่อะไร
ลิงก์ที่เกี่ยวข้อง:
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 เป็นหลักอยู่ดี
กรณีหลังเป็นไปเพื่อรับความเชี่ยวชาญด้านการจัดการโปรเจกต์ของ Platformatec (https://building.nubank.com.br/tech-perspectives-behind-nuba...) และเท่าที่รู้ ไม่มีโค้ด Elixir ที่รันอยู่ใน Nubank
ฝั่ง “อีกด้านหนึ่ง” ของ ETL pipeline มี Python อยู่ แต่เท่าที่รู้ พื้นที่ที่ผู้ใช้สัมผัสโดยตรงนั้น backend เป็น Clojure ส่วนแอป Android และ iOS เป็น TypeScript
สงสัยว่า Clojure ในจีน ก็เป็นกระแสที่มีนัยสำคัญด้วยหรือไม่