2013-08-22 24 views
13

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?

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.

+1

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

+2

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

+5

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

Các vấn đề liên quan