2008-10-06 32 views
30

Tôi cần tìm một bộ chuyển đổi Lua sang JavaScript tốt; lua2js trên luaforge.org đã lỗi thời (từ 3 tuổi trở lên và có vẻ như nó không hoạt động trên Lua 5.1) và tôi chưa tìm thấy gì trên Google.Có bất kỳ trình chuyển đổi Lua hoặc JavaScript nào gần đây ở đâu đó không?

Có ai có bất kỳ trải nghiệm nào với bất kỳ người chuyển đổi nào khác không? Nó sẽ hoạt động trên Lua 5.1 và tốt hơn là dựa trên .NET, nhưng .NET không phải là một yêu cầu. Trình thông dịch javascript lua cũng sẽ hoạt động.

Trả lời

8

Đây là câu hỏi thường xuyên trong danh sách Lua, tôi đoán vì sự giống nhau bề ngoài của hai ngôn ngữ.

Thật không may, có nhiều điểm khác biệt quan trọng không rõ ràng. Làm cho nó hoạt động cần một trình biên dịch toàn diện hướng JS thay vì bytecode của Lua, hoặc viết lại Lua VM trong JavaScript.

Tôi không biết mục tiêu ban đầu của Lua2js; nhưng nếu nó chỉ đơn giản là một 'dịch giả' có giới hạn, thì việc viết mã Lua nhằm mục đích dịch sẽ từ chối hầu hết (tất cả?) về những điều tốt đẹp về Lua. Ví dụ, tôi không nghĩ rằng bạn có thể sử dụng một chức năng như một bàn phím, vì trong JavaScript các phím chỉ là chuỗi (và số? Tôi không chắc chắn).

Lựa chọn .NET hợp lý hơn, nó có thể được thực hiện thay đổi trình biên dịch hiện có để phát ra bytecode CLR thay vì mã byte Lua tiêu chuẩn. Ngay cả khi CLR được thiết kế và tối ưu hóa cho các loại ngôn ngữ khác, nó chắc chắn là đủ chung để chạy rất tốt. Rào cản chính là sự sẵn có của các thư viện.

Một tùy chọn khác mà tôi vừa tìm thấy là this paper của Roberto Ierusalmschy và Fabio Mascarenhas, tại đây họ tìm cách dịch mã byte LuaVM sang mã bytecode CLR.

Như thường lệ trên các tài liệu học thuật, không có dấu hiệu nào về ngày viết, vì vậy tôi không biết nó có mới hay cách mạng hay cũ và lãng quên.

+0

Tôi tự hỏi mục tiêu thực sự của mọi người là gì? Họ biết Lúa, và muốn viết JavaScript mà không cần phải học JavaScript? Họ có một ứng dụng lớn được viết bằng Lua và muốn chuyển nó thành webapp với công việc tối thiểu? Không ai trong số này dường như rất có khả năng với tôi – davr

+0

Cuộc phỏng vấn tại http://www.computerworld.com.au/index.php/id;1028768484 khiến cho âm thanh như Lua.NET là một dự án gần đây và đang diễn ra. –

+0

Lời chào, người ta có thể sử dụng một chức năng như một khóa bàn trong javascript. Ý kiến ​​của bạn dường như không được thông báo. – tomdemuyt

0

Dịch sang javascript là điều thú vị để cho phép thay thế javascript ở phía trình duyệt. Chúng tôi cũng có thể đảm bảo an toàn cho loại trình duyệt. Nhắm mục tiêu javascript dưới dạng nền tảng đang nhắm mục tiêu một trong những nền tảng phổ biến nhất, các trình duyệt của hành tinh. GWT làm java2js nhưng tôi không chắc liệu tôi có muốn giới thiệu GWT chỉ cho một vài trang trong một ứng dụng hay không. Tôi phải suy nghĩ về nó. Đối với chức năng của bạn như là một chìa khóa trong một bảng, phải có một số phép thuật được thực hiện. Có thể chỉ cần chỉ định một tên duy nhất cho mỗi hàm lúc biên dịch và sử dụng nó cho khóa của bạn. Bạn cũng có thể thêm tiền tố cho tất cả các phím của bạn để kiểm tra loại và đó là một khởi đầu tốt đẹp.

0

Một cách để thực hiện việc này có thể là sử dụng LuaSub và tạo JavaScript thay vì đầu ra Lua. Điều này có thể được thực hiện, với nỗ lực hợp lý (hiện tại LuaSub không làm điều đó).

Những nơi JS không thể bị uốn cong theo yêu cầu của Lua có thể được phát hiện tại thời gian biên dịch và gây ra lỗi.

Tôi sẽ thực hiện rất nhiều JS + SVG trong tương lai và nếu mặt JS bật ra đau đầu thì đây có thể là một điều cần thử. Nếu ai khác muốn đi, hãy làm như vậy. Nguồn LuaSub có sẵn cho bạn.

Ban đầu, LuaSub được tạo thành bộ mở rộng cú pháp cho Lua 5.1, để giới thiệu các khái niệm dễ sử dụng (s.a. increment, loại kiểm tra) mà không có khả năng tương thích với tiêu chuẩn Lua hoặc cần vá nó. Nó tương tự như MetaLua trong này (đã trở nên phổ biến hơn, có vẻ như).

0

Tôi đã viết trình biên dịch tĩnh Lua sang ECMAscript hoàn chỉnh một phần.

https://github.com/mherkender/lua2js-experiment

Nó có thể không đáp ứng nhu cầu của bạn, như dự án đang thiếu nhiều tính năng quan trọng và tôi không gấp rút hoàn thành nó bởi vì nó là một ngõ cụt. Đọc thêm trong README để biết chi tiết.

Mặc dù một số mối quan tâm tôi đã thấy trên Internet, chỉ có một vài tính năng cụ thể Lua (như các chức năng * fenv, hoặc hầu hết thư viện gỡ lỗi) mà Javascript không thực sự hỗ trợ. Những người khác, như thư viện tệp, bị giới hạn bởi các tính năng mà VM có quyền truy cập.

Tôi cũng đã thử tùy chọn Lua + Emscripten, và trong khi nó ấn tượng, nó cũng rất chậm.

4

ljs có bản trình diễn hoạt động của vm lua trong javascript. Mã nguồn thậm chí có thể được biên dịch trong trình duyệt bằng cách sử dụng một trình thông dịch lua được viết bằng lua.

https://github.com/humbletim/ljs

9

Một thách thức mới xuất hiện: Lua.js https://github.com/mherkender/lua.js

Đối với một số bản demo tuyệt vời minh sự trưởng thành của mình, xem https://github.com/ghoulsblade/love-webplayer

Lua.js hoạt động bằng cách chuyển đổi mã Lua trực tiếp đến ECMAScript (bao gồm cả JavaScript, ActionScript), cung cấp cho nó một lợi thế tốc độ quan trọng so với các giải pháp cố gắng triển khai máy ảo Lua trong JavaScript.

+0

@Akavel đã cố chỉnh sửa câu trả lời này để thêm một số thông tin. Bản chỉnh sửa không thành công trong quá trình phê duyệt, nhưng tôi nghĩ nó vẫn hữu ích. Tôi xin trích dẫn: \t "Đối với một số bản demo tuyệt vời minh sự trưởng thành của mình, xem: https://github.com/ghoulsblade/love-webplayer Lua.js hoạt động bằng cách chuyển đổi mã Lua trực tiếp đến ECMAScript (bao gồm JavaScript, ActionScript), cung cấp cho nó một lợi thế tốc độ quan trọng so với các giải pháp cố gắng triển khai máy ảo Lua trong JavaScript. " – Breton

+0

tôi nghĩ rằng bạn có thể quên điều này, vì vậy tôi hy vọng bạn quay lại và cập nhật này – SheetJS

2

Tôi đã sử dụng triển khai này https://github.com/mherkender/lua.js đã được đề cập trong câu trả lời trước. Tính năng phân tích ngoại tuyến và thời gian tải và tôi thấy nó rất dễ sử dụng.

Tập lệnh Lua của tôi đang gọi qua các hàm C và chuyển đổi mã C thành Javascript đó và nhận được nó nối với lua.js khá đơn giản.

2

truy cập http://luajs.org để xem công việc của tôi.

Có các demo và điểm chuẩn trên menu trang web.

Chỉ 35,5K trước khi nén và 12,2K sau khi nén. Nó có thể truy cập các đối tượng Javascript/mảng trực tiếp. Nó được cập nhật gần như mỗi ngày.

Nó nhanh hơn lua.vm.js. (Không quá nhanh vì việc triển khai có thể thực hiện được), và tôi tiếp tục tối ưu hóa nó.

+0

Liên kết tới luajs.org không còn hoạt động nữa. –

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