1 điểm bởi GN⁺ 2024-08-31 | 1 bình luận | Chia sẻ qua WhatsApp
  • CIEL là một Lisp mở rộng dựa 100% trên Common Lisp, theo đuổi cấu hình “batteries included” với các công cụ cơ bản được cung cấp sẵn
  • Script có thể chạy bằng shebang #!/usr/bin/env ciel, và có thể dùng trực tiếp đọc JSON cùng HTTP GET trong mã Lisp
  • Ví dụ sử dụng http:get để gọi https://fakestoreapi.com/products?limit=5, rồi dùng json:read-json để đọc phản hồi và in ra bằng print
  • Ví dụ chạy ./myscript.lisp cho thấy luồng làm việc xử lý script CIEL như một tệp thực thi thông thường
  • Phần còn lại của tài liệu web cần JavaScript, và nếu muốn xem không cần JavaScript thì phải vào kho GitHub

Đặc tính cơ bản của CIEL

  • CIEL được giới thiệu là một “Lisp mở rộng”
  • Dựa trên Common Lisp

    • Dựa 100% trên Common Lisp
    • Nổi bật với cấu hình batteries included có sẵn các công cụ cơ bản

Ví dụ chạy script

  • Mã ví dụ chỉ định trình thực thi ciel làm shebang
#!/usr/bin/env ciel

(print
  (json:read-json
    (http:get "https://fakestoreapi.com/products?limit=5";)))
  • http:get gửi yêu cầu HTTP, json:read-json đọc JSON phản hồi, sau đó print in kết quả ra
  • Lệnh thực thi như sau
$ ./myscript.lisp

Truy cập tài liệu và kho mã

  • Liên kết dự án được cung cấp tại GitHub
  • Phần còn lại của tài liệu web cần JavaScript, và nếu không thể dùng JavaScript thì có hướng dẫn xem kho GitHub

1 bình luận

 
GN⁺ 2024-08-31
Ý kiến trên Hacker News
  • Việc các thành phần được chuẩn hóa và ghi tài liệu đầy đủ được đóng gói để có thể dùng ngay như một phần của ngôn ngữ lõi, lại còn có một cái tên hay, là cực kỳ quan trọng
    Tôi thích điều này, và có vẻ nó có thể trở thành một mục tiêu chuẩn mới. Giờ chỉ cần một linh vật hoặc logo đẹp nữa là đủ

    • Nhìn tên thì có vẻ nên là một chú hải cẩu con
    • Tôi không biết tài liệu ở đâu. Thành thật mà nói, ở đây có vẻ không nhiều, và tôi sẽ gọi nó là README hơn là tài liệu
  • Tôi thích cách tiếp cận này. Tôi đã nghĩ sẽ là “một Lisp khác”, cái đó tuy hay nhưng chắc tôi sẽ không muốn dùng ngay
    Mở rộng và cải thiện thứ đã có có thể khó hơn và kém vui hơn so với bắt đầu lại từ đầu, nhưng có giá trị hơn nhiều. Tôi vốn đã dùng Common Lisp, và thứ này dường như giúp giảm bớt phần nào những điểm kỳ quặc đặc trưng của nó, nhất là với người mới bắt đầu hoặc các dự án nhỏ

  • Mỗi khi nói đến một Lisp nhanh và tiện, tôi lại muốn nhắc đến Joker(https://github.com/candid82/joker)
    Nó là cú pháp Clojure được triển khai bằng Go; tôi không liên quan gì, nhưng thật sự nghĩ nó rất tuyệt. Nếu viết ví dụ CIEL bằng Joker thì là (prn {:a 1 :b 2 :c 3}), còn Gist để tải xuống, cài đặt và chạy là https://gist.github.com/lsh-0/f7df23777ef35a8cc3d85e1dcbf0eb...
    Chạy toàn bộ script mất 2,1 giây, còn bản thân ví dụ mất 0,007 giây

  • Thật vui khi thấy cách tiếp cận mà Babashka(https://babashka.org/) chọn giờ cũng xuất hiện trong thế giới Common Lisp

  • Xem trên Safari cũng hiện cùng cảnh báo Javascript. Tôi không bật tiện ích mở rộng nào
    Kiểm tra bằng Chrome thì ngoài chuyện đó ra, nó trông đúng là kiểu tôi muốn dùng. Thư viện chuẩn CL vốn đã có cảm giác hơi quá tải, nhưng nếu muốn theo hướng “kèm sẵn pin”, thì trước đây còn thiếu những thứ như Alexandria, Bordeaux, nên tôi thích lựa chọn này. Nó đem lại cảm giác “thực hành tốt nhất” hoặc chuẩn hóa cho hệ sinh thái CL hơi phân mảnh

  • Tuyệt vời. Cá nhân tôi đang dùng một image có Alexandria, Serapeum, Dexador, Bordeaux Threads và các công cụ liên quan đến JSON, nên nếu có một thứ mà người khác cũng dùng làm mục tiêu tương tự thì sẽ tiện
    Nó có vẻ có khả năng thành công cao hơn các đề xuất CDR vốn bị bàn luận quá nhiều, hay CL21 trước đó. Tôi cũng tò mò liệu có nhiều reader macro được bật mặc định không

    • Trong REPL ở terminal thì chỉ bật một cái, còn khi dùng CIEL như một thư viện Lisp thông thường thì không bật cái nào
      Vì không muốn đụng đến readtable theo mặc định. Cách bật shell passthrough trong REPL của editor thì xem bên dưới
    • Nhìn nhanh qua mã thì có vẻ chỉ có clesh[1] được bật mặc định cho mục đích thoát từ REPL sang shell
      1: https://github.com/Neronus/Clesh
  • Nếu có wrapper để build lõi ncurses và SDL, biết đâu một ngày nào đó lem có thể chạy trực tiếp trên CIEL và một môi trường Lisp thật sự sẽ xuất hiện
    https://news.ycombinator.com/item?id=41357409

  • Có vẻ khác với Ciel(https://pldb.io/concepts/ciel.html), một Lisp khác do Ron Garret tạo năm 2010. Ông ấy cũng là nhà khoa học tên lửa(https://flownet.com/ron/)

  • Có thể biên dịch thành binary dễ dàng không? Có vẻ chỉ cần dùng cách chuẩn của CL
    Việc CIEL custom REPLshell passthrough như !ls là một tính năng hay

    • Khá tiện. Nếu muốn một Lisp shell cao cấp trong terminal, nơi trộn mã shell và mã Lisp, hãy xem lish: https://github.com/nibbula/lish/
      Tác giả vẫn chưa xem nó là “sẵn sàng” hay “đủ tốt”, nhưng đã tiến triển khá xa. Cũng có một shell POSIX là https://github.com/bradleyjensen/shcl. Như thường lệ, danh sách đầy đủ hơn có ở https://github.com/CodyReichert/awesome-cl#shells-shells-int...
    • Hiện tại thì build theo cách chuẩn bằng cách dùng CIEL như một thư viện
      Tôi muốn thêm lệnh ciel build
    • Xin lỗi nếu tôi nhầm, nhưng tôi tưởng đây là một tính năng khá chuẩn. IPython kernel cũng dùng đúng định dạng này, và nếu cần một shell đầy đủ thì cũng có thể dùng xonsh
      Tôi tò mò liệu Python có phải là trường hợp khác thường trong cách triển khai REPL không. Tôi chỉ quen REPL của Python và e-lisp
    • Ctrl+Z thì thiếu gì?
  • Trông giống như SBCL cộng thêm các thư viện. Tác giả vindarel có mặt trên HN

    • Chào o/ Hy vọng mục tiêu của CIEL đã được giải thích rõ. Tôi dùng nó hằng ngày, dùng core image bên trong editor, và cũng phân phối sản phẩm bằng nó
      Khi bắt đầu dự án mới, khi cần tương tác với thế giới bên ngoài, hoặc khi muốn viết một thứ nhỏ rồi đưa lên server mà không phải chịu độ phức tạp của Python, nó tiết kiệm rất nhiều thời gian. Tất nhiên khó thay thế Django, nhưng tôi cũng đã bắt đầu làm một dashboard DB tự động cho các tác vụ CRUD; chưa công khai nhưng đang tiến triển
      Tôi đã từng bước tích hợp CL vào công việc cho khách hàng, và CIEL là thêm một công cụ cho mục đích đó. Đó là để dùng CL trong thực tế. Các dự án của tôi không nhất thiết cần siêu năng lực của CL, nhưng tôi muốn sức mạnh đó trong phát triển, triển khai và giám sát
      Hôm nay tôi đã sửa vài vấn đề và phát hành v0.2: https://github.com/ciel-lang/CIEL/releases/tag/v02 Điểm chính là việc cài đặt CIEL, đặc biệt trên Mac, sẽ dễ hơn nhiều. Giờ các phụ thuộc hệ thống đã ít hơn hẳn
      Nếu vẫn khó cài đặt trên một nền tảng cụ thể nào đó, mong bạn gửi chi tiết trong issue. Tóm lại, tôi hy vọng CIEL sẽ giúp hành trình CL của các bạn dễ dàng và mượt mà hơn. Bạn sẽ không tưởng tượng được tôi đã mất bao lâu để tìm ra một số thứ đâu. Giờ mọi thứ đã được chuẩn bị và đóng gói ở đây :-]