2009-07-20 23 views

Trả lời

7

Tôi không nghĩ bạn có thể chuyển trực tiếp một đoạn mã JavaScript thành tệp thi hành bằng V8, nhưng bạn có thể tạo ứng dụng bao gồm công cụ V8 với JavaScript và chạy nó như một độc lập.

Bạn có thể tìm thấy tất cả thông tin về V8 trên its project page.

Cũng lưu ý rằng JavaScript không thể được biên dịch hoàn toàn vì nó là một ngôn ngữ động. Với V8, nó được biên dịch JIT (như .NET chẳng hạn.) Vẫn có thể biến nó thành một tệp thực thi độc lập (ví dụ như .NET chẳng hạn.)

Nếu bạn muốn phát triển độc lập các ứng dụng sử dụng HTML để hiển thị, bạn cũng có thể xem Adobe Air.

+0

Tôi đang cố gắng làm một việc khác. Làm thế nào bạn có thể gói javascript vào exe sau đó? –

+0

Xem phần "nhúng" của trang dự án V8. – Blixt

+0

Bạn có thể gói JavaScript rất dễ dàng vào một .exe bằng cách sử dụng dự án Node-Webkit - https: // github.com/rogerwang/node-webkit – denysonique

6

Javascript không thể được biên dịch chỉ một lần. Ngôn ngữ có eval được sử dụng khá rộng rãi. (ví dụ JSON) Bạn cần mang theo JIT và toàn bộ thời gian chạy.

JIT ở đây chỉ là một tối ưu hóa, không phải là cách để loại bỏ trình biên dịch/thông dịch viên.

+2

"V8 biên dịch mã nguồn JavaScript trực tiếp vào mã máy khi nó được thực thi đầu tiên. Không có mã byte trung gian, không có trình thông dịch. Truy cập thuộc tính được xử lý bởi mã bộ nhớ cache nội tuyến có thể được vá bằng các hướng dẫn máy khác như V8 thực hiện. " –

+3

Có, nhưng lưu ý phần "khi nó được thực hiện lần đầu tiên". JavaScript không thể được biên dịch hoàn toàn thành mã byte, nó phải được biên dịch khi nó chạy, do tính chất động của nó. – Blixt

+5

@ the_drow: Vấn đề là với 'eval', bạn luôn cung cấp mã JavaScript mới. – EFraim

3

Node.js nhúng V8. Đây có thể là một ví dụ tốt để học hỏi.

3

Đã có một vài cố gắng làm cho js thành mã gốc, nó không phải là một cái gì đó có thể được sử dụng trong sản xuất bằng bất kỳ phương tiện, nhiều hơn một lợi ích học tập. Trình thông dịch Rhino cho java có một tùy chọn để biến js thành bytecode (java) do đó, một cách tiếp cận là chuyển đổi sang bytecode và sau đó từ bytecode thành native với GCJ. Có một số cuộc thảo luận về Rhino và GCJ nhưng tôi không biết liệu có ai đã từng thử chính xác điều đó hay không. https://groups.google.com/forum/#!msg/netscape.public.mozilla.jseng/c3tqyLZ19fw/8V4HeuMtIXUJ

Một cách tiếp cận khác là sử dụng Python, đặc biệt Py Py mà chính nó được viết trong một tập con không chuẩn của Python được gọi là rPython. rPython không có nghĩa là cho con người tiêu thụ nhưng nó có lợi ích là một cái gì đó mà có thể được biên dịch cho bản địa. Một thử nghiệm thú vị (mặc dù có tính chất lập dị) là biên dịch Javascript sang Python và sau đó trong một số trường hợp, Python xảy ra là hợp lệ như rPython và có thể được biên dịch xuống bản địa bằng trình biên dịch rPython.

http://mozakai.blogspot.com/2010/07/experiments-with-static-javascript-as.html

Nếu một file .exe là thực sự quan trọng, tôi sẽ bó V8 với ứng dụng của bạn từ ngay cả khi bạn có thể biên dịch js để tự nhiên, bạn vẫn cần một thông dịch viên đầy đủ nếu bạn sử dụng bất kỳ eval() hoặc tương tự . Nó sẽ không khó để viết một công cụ cho bundling tất cả mọi thứ vào một tập tin exe miễn là người dùng của bạn không nhớ hoặc một exe 8MB hoặc tập tin V8.dll 8MB.

Như một ý nghĩ cuối cùng, Big G đã bắt đầu cho phép các ứng dụng "gốc" dựa trên chrome (google: "ứng dụng đóng gói chrome"). Họ có quyền truy cập hệ thống cấp thấp và có thể sử dụng trình kết xuất WebKit cho phép bạn tạo GUI của mình trong CSS và HTML và chúng có cửa sổ và biểu tượng riêng của chúng để không rõ ràng chúng đang chạy bên trong chrome. Điều này có lẽ vẫn còn sớm nhưng nó là một cái gì đó để giữ một mắt trên trong lĩnh vực ứng dụng máy tính để bàn.

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