5 điểm bởi GN⁺ 2024-05-23 | 1 bình luận | Chia sẻ qua WhatsApp
  • Try Clojure là một trang trải nghiệm 5 phút cho phép đánh giá trực tiếp biểu thức Clojure ngay trong trình duyệt
  • Nội dung nhập vào REPL ở bên phải màn hình được thực thi theo vòng lặp read-eval-print loop
  • Bạn có thể tự nhập các biểu thức ví dụ như (+ 1 2), hoặc nhấp vào đoạn mã để tự động chèn
  • Dùng (help) để xem các lệnh, và khi đã sẵn sàng, nhập (start) để bắt đầu trải nghiệm
  • Trang này được xây dựng bằng Clojurescript, với thông tin tác giả bao gồm Elia Scotto, Michiel Borkent và cộng đồng Clojure

Chạy Clojure ngay trong trình duyệt

  • Try Clojure được thiết kế để bạn trải nghiệm nhanh Clojure với lời nhắc “Got 5 minutes?”
  • Biểu thức ký hiệu Clojure do người dùng nhập vào REPL bên phải sẽ được đánh giá
  • Luồng trải nghiệm rất đơn giản
    • Tự nhập biểu thức như (+ 1 2)
    • Nhấp vào đoạn mã để tự động chèn
    • Dùng (help) để xem lệnh
    • Bắt đầu bằng (start)

Thông tin tác giả

  • Trang có trích dẫn của Rich Hickey: “If you want everything to be familiar, you'll never learn anything new.”
  • Try Clojure được xây dựng bằng Clojurescript, và Elia Scotto được hiển thị là người tạo ra trang
  • Trang cũng kèm lời cảm ơn tới Michiel Borkentcommunity Clojure

1 bình luận

 
GN⁺ 2024-05-23
Các ý kiến trên Hacker News
  • Rất vui khi thấy cái này quay trở lại. Một phiên bản có từ rất lâu trước đây đã giúp tôi thử Clojure, và lựa chọn đó trở thành quyết định có ảnh hưởng lớn nhất đến sự nghiệp của tôi
    Đến giờ tôi vẫn dùng Clojure gần như hằng ngày ở công ty và ở nhà; đôi khi là Clojure tiêu chuẩn, đôi khi là Babashka rất tuyệt vời để thay thế các task runner kiểu Make hoặc script Zsh
    Go cũng là lựa chọn thứ hai mạnh mẽ khi cần biên dịch thành một binary duy nhất, nhưng Clojure khiến tôi thấy thoải mái nhất nhờ quy trình phát triển dựa trên REPL, cho cảm giác như đang trò chuyện với chương trình hơn là vòng lặp viết-biên dịch-chạy thông thường
    Cộng thêm việc chạy trên JVM, nó trở thành một bộ công cụ giúp hoàn thành công việc một cách vui vẻ. Nếu bạn có chút hứng thú nào với Lisp và lập trình hàm, tôi thật sự khuyên nên thử; nếu dùng VSCode thì plugin Calva sẽ giúp ích rất nhiều

    • “Lý do nó biến mất một thời gian” là vì người tạo ra nó, Anthony Grimes (https://github.com/Raynes), đã qua đời 7 năm trước: https://www.reddit.com/r/Clojure/comments/5gyyxw/clojure_ope...
    • Tôi luôn thấy lạ khi có những người đang dùng các ngôn ngữ có tính biểu đạt cao như Clojure, Rust, TS mà vẫn dễ dàng chuyển sang Go
      Chuyển sang một ngôn ngữ kém biểu đạt hơn từng rất đau đớn và khó chịu với tôi; tôi nhớ khi chuyển từ Python sang Java 5, đoạn mã để diễn đạt cùng một nội dung dài gấp 3–5 lần
      Có lẽ mấu chốt là với các ngôn ngữ kém biểu đạt, chỉ nên viết những thứ nhỏ như shell script, các hàm C nhỏ cho hiệu năng hoặc giao diện hàm ngoại, hay các tiện ích Go nhỏ
    • Điều luôn khiến tôi không học Clojure là chữ “j” trong tên. Tôi đã có quá nhiều trải nghiệm tệ với JDK và JVM, nên nếu không phải là JavaScript thì tôi muốn tránh xa bất cứ thứ gì có chữ “J” khoảng một nghìn kilômét
  • Nếu bạn mới tiếp xúc với Clojure và muốn thử nghiệm thứ gì đó hữu dụng ngay, tôi rất khuyến nghị runtime Babashka cho scripting: https://babashka.org
    Nó thú vị, dễ tiếp cận, và là một trong những phần được trau chuốt hơn của hệ sinh thái Clojure
    Khác với Clojure đầy đủ trên JVM, thời gian khởi động của nó rất nhanh nên là điểm vào tốt; người mới có thể làm việc theo kiểu gần như tương tác bằng các công cụ theo dõi file/tải lại vốn đã quen thuộc, chẳng hạn như nodemon
    Về sau thì nên chuyển sang cấu hình tương tác đầy đủ với kết nối REPL từ trình biên tập, nhưng với người mới thì luồng làm việc đó khá lạ và việc thiết lập cũng có thể phiền phức

    • Khi đã sẵn sàng mở rộng niềm vui lên web, hãy xem Biff: https://biffweb.com
    • Điểm hay nhất của Babashka là ngày nay nó thật sự có sẵn đủ pin
      Tôi đã dùng nó cùng HTMX để tạo một UI nhỏ hiển thị thống kê của ứng dụng công việc, và đó là một trải nghiệm rất tốt
      Babashka gần như tích hợp sẵn mọi thứ cần cho một web app cơ bản, và với HTMX bạn có thể tải nội dung động trên trang mà không phải xử lý frontend JavaScript
      Ngoài ra, bạn có thể chạy nREPL bằng bb --nrepl-server rồi kết nối một trình biên tập như Calva để phát triển script theo cách tương tác, nên nếu cần một UI web đơn giản thì rất đáng xem thử
  • Một trang cùng hướng tương tự là https://www.maria.cloud/
    Nó được định hướng nhiều hơn cho việc dạy lập trình cho người mới hoàn toàn, nhưng tôi cho rằng các thao tác cơ bản kiểu paredit và cách đánh giá theo từng form gần với phát triển dựa trên REPL trong thực tế hơn nhiều
    Gõ trực tiếp vào cửa sổ terminal REPL có ergonomics rất tệ, và thực tế hơn thường là dùng thứ như Calva của VSCode hoặc CIDER của Emacs để gửi form dưới con trỏ tới một tiến trình REPL nào đó

  • Lý do tốt nhất để học Clojure là Reagent, và tôi cho rằng đây chắc chắn là cách tốt nhất để dùng React: https://reagent-project.github.io/
    shadow-cljs giúp việc dùng các thư viện npm trở nên dễ dàng: https://github.com/thheller/shadow-cljs
    Với cấu hình cơ bản, tôi đã ổn định với backend Go và frontend Reagent: https://github.com/nathants/aws-gocljs

    • Reagent thì tốt và đã tồn tại khoảng 10 năm, nhưng bản thân React vốn đã phức tạp, tôi cảm thấy có quá nhiều độ phức tạp được chồng thêm lên trên nó, nên đã chuyển sang hướng wrapper mỏng cho React
      Tôi muốn thấy rõ hơn chuyện gì đang diễn ra bên trong, và muốn tương tác đơn giản hơn với các component React native
      Có vẻ nó đang bắt kịp phần hỗ trợ thử nghiệm cho React 18, nhưng Reagent đã tụt lại so với dòng chảy React mới nhất và có thể không nhận được toàn bộ lợi ích tối ưu hiệu năng
      Nó vẫn dùng class component chứ không dùng hook, và cũng có lo ngại rằng việc chuyển đổi Hiccup lúc runtime có thể làm giảm hiệu năng
      Tuy vậy, trong phần lớn trường hợp có lẽ không phải vấn đề cảm nhận được, và nếu không làm gì quá cầu kỳ thì vẫn ổn. Tôi nhớ mô hình UI-as-data của Hiccup, nên biết đâu một ngày nào đó sẽ quay lại Reagent
      Về quản lý trạng thái, tôi rất khuyên dùng re-frame: https://day8.github.io/re-frame/
      Ban đầu có thể trông hơi nặng nề, nhưng tài liệu rất xuất sắc, và khi đã hiểu thì mô hình rất rõ ràng
      Cũng có các lựa chọn thay thế như Helix(https://github.com/lilactown/helix) hoặc UIx(https://github.com/pitch-io/uix), và cả refx(https://github.com/ferdinand-beyer/refx) gần như loại bỏ phụ thuộc vào Reagent
      Hoặc có thể thêm mã tương tác vào UIx/Helix để gắn re-frame vào: https://github.com/pitch-io/uix/blob/master/docs/interop-wit...
    • Backend Elixir cũng rất hợp nhờ sức mạnh của BEAM VM
    • Tôi tò mò liệu cấu hình đó có hỗ trợ code splitting hoặc tạo site tĩnh không
      Năm 2024 thì không thể gửi xuống một file HTML trống được, vì điều đó sẽ phá hỏng tối ưu hóa tìm kiếm; nếu không phải vậy thì tôi muốn thử
  • Quãng thời gian dùng Clojure của tôi thật sự rất tuyệt và tôi rất khuyến nghị: https://eli.thegreenplace.net/2017/clojure-the-perfect-langu...

  • Clojure for the Brave and True của Daniel Higginbotham là một tài liệu thực sự tuyệt vời để học Clojure, tôi rất khuyến nghị
    Có thể đọc miễn phí trên mạng: https://www.braveclojure.com/clojure-for-the-brave-and-true

    • Tôi thấy văn phong hơi quá dài dòng, nhưng cũng hiểu là có người thích phong cách đó
      Vấn đề thực sự của cuốn sách này không phải là Clojure, mà là nó bắt đầu bằng việc dạy Emacs
      Ngày nay chắc có nhiều người mới đến từ VSCode, và với họ đó là một sự phân tâm lớn
    • Tôi cũng rất thích loạt Clojure from the ground up của Aphyr: https://aphyr.com/posts/301-clojure-from-the-ground-up-welco...
    • Nếu chưa có kinh nghiệm với Emacs, có lẽ nên dùng plugin Calva trong VSCode
  • Vài năm trước, một đồng nghiệp khuyên tôi dù không thử Clojure thì cũng nên đọc History of Clojure, nhưng tôi đã trì hoãn: https://dl.acm.org/doi/pdf/10.1145/3386321
    Rồi sau khi xem Rich Hickey - Greatest Hits https://changelog.com/posts/rich-hickeys-greatest-hits, tôi đọc History of Clojure và bắt đầu học ngay
    Clojure là một trong những ngôn ngữ thú vị nhất để xây dựng thứ gì đó, và cũng là một trong những ngôn ngữ đẹp nhất
    Không hẳn ở bản thân cú pháp, mà ở cách nó cho phép biểu đạt suy nghĩ thông qua thiết kế tốt và sự kết hợp, khiến đầu óc được kích thích một cách dễ chịu
    Nếu bạn vẫn đang tìm một công cụ sáng bóng vừa vặn mà chưa thứ gì thật sự chạm đến mình, Clojure đáng để thử. Trong số các ngôn ngữ tôi từng thấy, nó thuộc nhóm cô đọng nhất mà vẫn mạnh mẽ nhất

    • Vài tháng trước, khi học Common Lisp, tôi cũng có cảm giác tương tự
      Tôi tò mò liệu học Clojure có đem lại thêm điều gì ngoài những thứ đó không, hay nhìn chung cũng tương tự
  • Tôi tò mò liệu có phiên bản Clojure nào được biên dịch bằng thứ như LLVM không
    Cảm giác khá giống với điều mà Scala Native ban đầu định làm, nhưng thực tế thì nó đã không thực sự đứng vững theo hướng đó
    Tôi thích lập trình hàm, nhưng vào năm 2024, hệ sinh thái Java có cảm giác quá cũ kỹ đến mức khó chịu nổi

    • Đang có nỗ lực triển khai runtime của Clojure bằng Clang/LLVM, và cũng nhắm tới các tính năng thú vị như hot reloading
      Có thể xem tại https://jank-lang.org/
      Vẫn chưa đạt mức tương đương tính năng hoàn toàn với JVM Clojure, nhưng tôi đang theo dõi sát quá trình phát triển
    • Bình luận đang đứng đầu hiện tại trỏ tới https://babashka.org/, nhưng cái này dựa trên GraalVM chứ không phải LLVM
      Thực ra đó có lẽ cũng không phải vấn đề lớn
    • Sắp ra mắt: https://jank-lang.org
    • https://jank-lang.org/
  • Các liên kết liên quan:
    Try Clojure – An interactive tutorial in the browser - https://news.ycombinator.com/item?id=30423856 - tháng 2 năm 2022, 93 bình luận
    Try Clojure in your browser - https://news.ycombinator.com/item?id=3366526 - tháng 12 năm 2011, 26 bình luận
    Try Clojure - https://news.ycombinator.com/item?id=1359682 - tháng 5 năm 2010, 60 bình luận

  • Clojure đang trở nên phổ biến ở Mexico, và tôi nghĩ Brazil cũng có xu hướng tương tự nhờ Nubank
    Đó là nơi các nhà khoa học máy tính muốn đến làm việc, và có vẻ họ chủ yếu làm bằng Clojure
    Hình như họ đã tuyển một số thành viên cốt lõi của ngôn ngữ này, và tôi nhớ là vào một thời điểm nào đó họ cũng đã mua lại công ty của José Valim, người tạo ra Elixir
    Dù vậy, nhìn chung đây vẫn có vẻ là một công ty chủ yếu dùng Clojure

    • Nubank đã mua lại Cognitect, công ty tư vấn đứng sau Clojure, vào năm 2020, và cũng mua lại Platformatec, công ty từng là nơi José Valim làm việc
      Thương vụ sau là để có được chuyên môn quản lý dự án của Platformatec (https://building.nubank.com.br/tech-perspectives-behind-nuba...), và theo tôi biết thì không có mã Elixir nào đang chạy ở Nubank
      Ở “phía bên kia” của pipeline ETL có Python, nhưng ở phần hướng tới người dùng thì theo tôi biết backend là Clojure, còn ứng dụng Android và iOS là TypeScript
    • Tôi thường xuyên gặp những người dùng Clojure có tên trông giống tên trong cộng đồng Hoa ngữ
      Tôi tò mò liệu Clojure ở Trung Quốc cũng có một xu hướng đáng kể hay không