Trong khi các tính năng clojure và clojurescript về cơ bản giống nhau (ngoài những khác biệt rõ ràng), các macro thì không. Khi tôi muốn một macro trong clojurescript tôi phải viết nó trong clojure và yêu cầu nó với yêu cầu-macro. Đó có phải là giới hạn kỹ thuật của javascript hay chỉ là một quyết định thiết kế? Tại sao cả hai không thể giống nhau?Tại sao macro đinh ghim không thể được viết bằng clojurescript?
13
A
Trả lời
15
Từ ClojureScript: Up and Running bởi Stuart Sierra và Luker VanderHart, trang 69:
Macros được áp dụng trong quá trình biên dịch. Chúng không tồn tại khi chạy. Bởi vì trình biên dịch ClojureScript được triển khai trong Clojure, các macro ClojureScript phải được viết trong Clojure, không phải là ClojureScript. May mắn thay, Clojure và ClojureScript gần như giống hệt nhau khi nói đến thao tác cấu trúc dữ liệu, vì vậy việc chuyển đổi giữa hai ngôn ngữ là không khó.
Điều đó có nghĩa là mã macro được thực thi trong thế giới Clojure chứ không phải trong trình duyệt, vì vậy nó phải được viết bằng đồng Clojure.
Các vấn đề liên quan
- 1. Viết bằng Meteor bằng ClojureScript
- 2. Silverlight - Thêm đinh ghim vào Bản đồ Bing qua C#
- 3. Tại sao tôi không thể viết IO.Directory.GetFiles?
- 4. Tại sao CultureInfo.NativeName không được viết hoa?
- 5. Tôi làm cách nào để xử lý mã Clojurescript bắt buộc từ các macro Clojurescript?
- 6. Tại sao Matlab được viết bằng C thay vì Fortran?
- 7. Tại sao True/False được viết hoa bằng Python?
- 8. Tại sao auto_increment "được viết" bằng dấu gạch dưới?
- 9. MVVM Windows Phone 8 - thêm một bộ sưu tập các đinh ghim vào một bản đồ
- 10. Điện thoại 7 Kiểm soát bản đồ Bing - Thêm đinh ghim khi chạm
- 11. Nhiều đinh ghim với hộp thông tin trong Bản đồ Bing
- 12. Silverlight - Thêm văn bản vào đinh ghim trong Bản đồ Bing qua C#
- 13. Tại sao tôi không thể viết MessageBox.Show ("asdfasdf {0}", i) ;?
- 14. Không thể "sử dụng" trong clojurescript repl
- 15. Tại sao tôi không thể viết [1,2,3] .reduce (Math.max) bằng Javascript?
- 16. Tại sao có macro xác định _tmain?
- 17. Tại sao stdarg.h có macro «__va_size»?
- 18. Chúng ta có thể viết macro trong C# cho Excel
- 19. GCHandle, Marshal, bộ nhớ được quản lý và không được quản lý: Để ghim hoặc không ghim
- 20. Dòng nhận xét có thể được viết bằng Python không?
- 21. Cách xác định lý do tại sao đối tượng được ghim
- 22. Tại sao tôi không thể thấy/gỡ lỗi javascript được tải bằng jquery.html() bằng Chrome
- 23. Nhận phần được ghim hiện tại của UITableView
- 24. Tại sao tôi không thể làm "nếu không" bằng ruby?
- 25. Tại sao biên dịch phàn nàn về khai macro này
- 26. Tại sao tôi cần hai lớp indirection cho macro?
- 27. Tại sao tôi không thể nhận được đầu ra của ftp.exe bằng mã?
- 28. Thư viện Clojurescript - goog.require không thể tìm thấy
- 29. Bạn có thể viết tắt tên danh sách? Tại sao?
- 30. Tại sao các truy vấn trong SQL chủ yếu được viết bằng chữ in hoa?
Và đó là cách đó bởi vì clojurescript sử dụng trình biên dịch đóng cửa google tôi tưởng tượng ... Trình biên dịch clojurescript được viết bằng clojurescript sẽ đẹp. – islon
Trình biên dịch Google Closure chỉ được sử dụng để loại bỏ các phụ thuộc không sử dụng và rút gọn mã, không biên dịch ClojureScript sang JavaScript. Khi mã đạt đến trình biên dịch Google Closure chỉ là JavaScript, mặc dù nhóm ClojureScript làm việc chăm chỉ để đảm bảo JavaScript được tạo ra có giá trị đối với hầu hết các tính năng của Trình biên dịch Google đóng gói nâng cao. – Serabe
Trên một lưu ý liên quan, có công việc đang được thực hiện trên một trình biên dịch ClojureScript tới ClojureScript tại [clojurescript.net] (http://clojurescript.net/). Một trong những tác giả thảo luận về nó trong [video này] (http://www.infoq.com/presentations/cljs-in-cljs). – bmaddy