Scheme2Js là một Đề án để trình biên dịch Javascript. Trong khi một số nỗ lực đã được chi cho được càng gần càng tốt để R5rs, chúng tôi tập trung chủ yếu vào hiệu quả.
Thông thường Scheme2Js sản xuất mã Javascript, đó là so sánh để tay viết code. Để đạt được hiệu suất này, Scheme2Js không hoàn toàn R5rs tuân thủ. Đặc biệt nó thiếu hỗ trợ cho sự tiếp tục, con số chính xác và nó xử lý đệ quy đuôi chỉ một phần.
Scheme2Js cung cấp một số cờ, cho phép thay đổi kết quả:
ย ท --no-js-dot-ký hiệu không cho phép truy cập vào các lĩnh vực JavaScript với các dot-ký hiệu. Lá cờ này sẽ vô hiệu hóa các truy cập của hình thức xy như trong document.getElementById. Tuy nhiên đó là vẫn có thể truy cập là một biểu thức hợp lệ bằng cách sử dụng chức năng js-field.
ย ท --mutable-strings: để cải thiện hiệu suất của chuỗi hoạt động và để giảm bớt các giao diện giữa các Đề án và mã JavaScript, việc thực hiện mặc định chuỗi bản đồ Đề án chuỗi JavaScript. Trái ngược với chuỗi Đề án, chuỗi JavaScript là tuy nhiên không thay đổi. Cờ bản đồ này các chuỗi thành một lớp JavaScript, đại diện chuỗi Đề án, có thể thay đổi. Các mã kết quả có thể là hơi chậm, và nó là khó khăn hơn để giao tiếp với mã Javascript.
ย ท --encapsulate bộ phận đóng gói chương trình thành một chức năng vô danh. Chỉ có các biến toàn cầu đang ở bên ngoài chức năng ẩn danh này. Một mặt này giới thiệu một chức năng cuộc gọi đến các chức năng ẩn danh. Nhưng mặt khác hầu hết các trường Javascript nên chạy nhanh hơn với tối ưu hóa này: thường hashtables được sử dụng để đại diện cho phạm vi trong JavaScript. Bằng cách sử dụng một chức năng ẩn danh các chương trình biến được tách thành hashtable nhỏ của riêng mình mà (trên lý thuyết) làm tăng tốc độ truy cập đến các biến này. Quan trọng hơn các biến được lưu trữ trong hashtable riêng của họ, và không có trong hashtable toàn cầu, có thể truy cập bởi các biến toàn cầu. Nó là vô cùng dễ dàng để thay đổi gián tiếp nội dung của các biến toàn cầu. Nội tuyến hoặc tối ưu hóa thông thường khác là vì thế không thể làm trên các biến toàn cầu. Bằng cách lưu trữ các biến của chương trình trong một chức năng vô danh trở thành những tối ưu hóa một lần nữa có thể.
ย ท --optimize-var-số giảm số lượng các biến được sử dụng trong các mã JavaScript quả. Mã này có thể chạy nhanh hơn, nhưng là khó khăn hơn để gỡ lỗi, như tên biến mất và các biến tương tự có thể được sử dụng nhiều lần.
ย ท --optimize-while: với cờ này Scheme2Js tối ưu hóa phổ biến trong khi các vòng. Các unoptimized trong khi các vòng thường có dạng:
while (true) {
if (thử nghiệm)
resVar = res;
else {
modify_loop_variable;
tiếp tục;
}
phá vỡ;
}
Tối ưu hóa này sẽ cho các mô hình và di chuyển các bài kiểm tra vào vòng lặp while:
while (thử nghiệm!) {
modify_loop_variable;
}
resVar = res;
Tối ưu hóa này đã được thực hiện chỉ mới đây và do đó chưa được kích hoạt theo mặc định.
ย ท --verbose in một số thông tin.
ย ท --no-nội tuyến vô hiệu hóa tất cả các chức năng nội tuyến (hằng số vẫn có thể được inlined).
ย ท --inline-globals phép Scheme2Js inline chức năng toàn cầu và hằng số. Điều này có thể có hai tác dụng phụ không mong muốn: một, biến toàn cầu thường được sử dụng để truyền dữ liệu giữa các mô-đun khác nhau. Một số chức năng inlined bị mất nếu không có tham chiếu đến chúng nữa. Nếu chức năng toàn cầu sẽ được sử dụng bên ngoài một module, ta không nên sử dụng lá cờ này. (Hành vi này có thể thay đổi trong các phiên bản tương lai của Scheme2Js.)
ย ท --unresolved-là-js: nếu một biến là không ràng buộc, trình biên dịch sẽ giả thiết biến xuất phát từ mô-đun khác, hoặc từ JavaScript. Xem Phần Scheme - Javascript cho một cuộc thảo luận chi tiết hơn về các giao diện Scheme JavaScript.
ย ท --js-này cung cấp cho các biến này trong chức năng Scheme. Bằng cách này, thủ tục Đề án có thể được sử dụng như phương pháp của đối tượng JavaScript.
ย ท --no-tailrec vô hiệu hóa các tailrec đến khi vòng lặp tối ưu hóa. Nếu bạn nghi ngờ một lỗi trong cách trình dịch của dịch tail-REC, bạn có thể thử cờ này.
ย ท --no-tối ưu hóa các cuộc gọi vô hiệu hóa Scheme2Js nội tuyến của hoạt động nhị phân hoặc nguyên phân. Ví dụ sci_plus (3, 5) được tối ưu hóa để (3 + 5). Tối ưu hóa này là khá quan trọng, và có thường là không có lý do gì để vô hiệu hóa nó.
ย ท --no-optimize-consts vô hiệu hóa các tính toán trước không đổi. Trừ khi người khuyết tật (với cờ này), các hằng số hợp chất được precalculated và sự xuất hiện của họ thay thế bằng một tham chiếu đến một biến giữ không đổi. Điều này làm cho việc lặp đi lặp lại các truy cập vào các hằng số nhanh hơn, nhưng giới thiệu các biến số mới.
ย ท --no-optimize-boolify vô hiệu hóa việc tối ưu hóa boolify. JavaScript và boolify Scheme của không tương đương: JavaScript coi sai, 0, null và không xác định là sai lầm, trong khi Đề án chỉ có #F. Các boolify unoptimized do đó luôn luôn bổ sung thêm các thử nghiệm đối với sai: if (test == false!) ... Nếu Scheme2Js có thể thấy, đó là những thử nghiệm bản thân là một boolean, nó có thể loại bỏ các thử nghiệm cần thiết == false!. Lá cờ này sẽ vô hiệu hóa tối ưu hóa này.
ย ท --d STAGE in một dot-file (xem graphviz) của AST sau giai đoạn giai đoạn. Giai đoạn có thể là: mở rộng, cây, biểu tượng, nút-elim1, đuôi, nội tuyến, liên tục lan truyền, rm-chưa sử dụng VAR, nắm bắt, node-elim2, trong khi, (tt "báo cáo"), node-elim3. Thông thường người ta không cần lá cờ này, trừ cho mục đích gỡ lỗi.
ย ท in --print-Locs các vị trí ban đầu như ý kiến để các tập tin JavaScript. Những địa điểm này hiện đang là những nhân vật bù đắp từ đầu của tập tin
là gì mới trong phiên bản này:.
- nhỏ thay đổi và sửa lỗi đã được chuyển từ Hop để Scheme2Js.
là gì mới trong phiên bản 20100816:
- runtime-reader Scheme2Js 'bây giờ nhận ra các từ khóa
- Một số lỗi đã được cố định.
là gì mới trong phiên bản 20081219:.
- Các trình biên dịch đã được tối ưu hóa
- Nó bây giờ là nhanh hơn và tiêu thụ ít bộ nhớ.
- Nhiều lỗi đã được cố định.
- Các khoản module mặc định của Scheme2Js tại là tương tự như một trong Bigloo.
- Phiên bản này hỗ trợ các tên tiêu chuẩn.
Bình luận không