Tôi muốn thực hiện các tệp mã nguồn Clojure (.clj) và chuyển đổi chúng thành các tệp mã nguồn java tương đương (.java) một cách tự động. Tôi tự hỏi cách tốt nhất để làm điều này là gì hoặc nếu nó thậm chí có thể. Mã nguồn java được chuyển đổi sẽ cần phải đủ chấp nhận được.Cách tốt nhất để chuyển đổi nguồn Clojure sang nguồn Java Tự động
Trả lời
Tôi sẽ thử tạo tệp .class từ .clj và sau đó biên dịch nó thành .java với trình dịch ngược, ví dụ: JAD.
Cũng nên nhớ rằng mã được biên dịch sẽ phụ thuộc vào các lớp Clojures. Vì vậy, bạn sẽ không nhận được mã Java "thuần túy". Đó có lẽ là giải pháp tốt nhất. –
Tôi không quen thuộc với Clojure nhưng lưu ý rằng bạn có thể đọc trong một chương trình Lisp và coi nó như một cơ sở dữ liệu, rất có khả năng tốt hơn việc xử lý mã Clojure đã biên dịch vì điều này phụ thuộc nhiều vào thời gian chạy Clojure.
Nếu điều này là dành cho các chương trình của riêng bạn thì bạn có thể sống với một tập hợp con rất nhỏ của Clojure đầy đủ và có thể bạn có thể tự xử lý với một trình tạo chương trình nhỏ.
Đặt cược tốt nhất của bạn, như những người khác đã chỉ ra, sẽ sử dụng trình giải mã bytecode. Bạn vẫn sẽ cần các lớp clojure. Nhưng, quan trọng hơn, nếu mục tiêu của bạn là tạo ra mã Java cần được xử lý bởi các lập trình viên Java, rất khó có khả năng bạn sẽ thành công.
Clojure không chỉ là "java với cú pháp khác". Cấu trúc ngôn ngữ của nó rất khác so với java, nhiều thứ mà Clojure thành ngữ sẽ trông rất lạ trong Java.
Thậm chí nếu mã Java của bạn trông có vẻ dễ đọc hơn, các nhà phát triển Java của bạn sẽ trở nên vô cùng thất vọng. Về cơ bản họ vẫn cần lập trình Lisp nhưng sử dụng cú pháp Java và các cấu trúc rất lạ: Nó sẽ là một mớ hỗn độn.
Nếu bạn đang tìm cách sử dụng Clojure trong một nhóm các nhà phát triển Java, tôi sẽ cố gắng phát triển và đóng gói mã Clojure của bạn như một cái bình với một API java được xác định rõ. Các nhà phát triển Java sẽ hạnh phúc, bởi vì nó chỉ là một thư viện java khác, và bạn sẽ hạnh phúc bởi vì bạn sẽ viết mã Clojure thích hợp.
Bộ công cụ gỡ lỗi Clojure là một công cụ tuyệt vời để tìm hiểu về mã Clojure đã biên dịch và nó thể hiện một số cách mà các lớp của Clojure khác với các lớp được tạo ra từ nguồn java. Nó sẽ là khó khăn ví dụ để viết mã java để đại diện cho Clojures đóng cửa ví dụ (mặc dù nó có thể)
Clojure tạo mã byte mà không thể được tạo ra bằng cách thu thập bất kỳ chương trình java, do đó, một giải pháp chung là không thể. Cụ thể Clojure nulls ra các đối số (trong khung gọi) trước khi thực hiện các cuộc gọi đệ quy. Vì bạn đang bắt đầu từ nguồn và không phải là tệp .class, bạn sẽ có thể nhận đủ gần với điều kiện bạn không cố gắng đảm bảo rằng mã java sẽ tạo ra hành vi giống hệt nhau. Clojure ngăn chặn một số rò rỉ bộ nhớ trong đệ quy sẽ thực sự khó tránh khỏi trong mã java tương đương.
"Mục đích của mã này là hủy bỏ các đối số để ngăn chặn 'giữ đầu' trong trường hợp có cuộc gọi hàm đệ quy." Từ bài nói chuyện của George Jahad về việc dịch ngược lớp clojure. http://georgejahad.com/clojure/clojureDecompiled.html
- 1. Cách tốt nhất để tự động chuyển đổi tệp nguồn LilyPond thành nhiều khóa là gì?
- 2. Tự động chuyển đổi nguồn java để sử dụng loại generic hơn là kiểu thô
- 3. Chuyển đổi tệp ASCII nguồn sang dạng JPEG
- 4. Cách tốt nhất để xử lý chuyển đổi trình tự này trong Clojure là gì?
- 5. Chuyển đổi một Nguồn Stax trong Java
- 6. Sửa đổi tệp mã nguồn Clojure trong clojure
- 7. Làm cách nào để chuyển từ Java sang Clojure?
- 8. Cách tự động thay đổi nguồn sự kiện?
- 9. Cách tốt nhất để chuyển đổi một bản đồ Java sang một từ điển trong C#
- 10. Chuyển đổi một backcace libc sang một số dòng nguồn
- 11. Giải pháp WURFL nguồn mở tốt nhất
- 12. Clojure cách tốt nhất để đạt được nhiều chủ đề?
- 13. Cách tốt nhất để xác định nguồn Cảnh báo: Chuỗi rỗng được chuyển đến getElementById()
- 14. nguồn html5 tốt nhất - web và in
- 15. Làm cách nào để tự động thụt lề mã nguồn?
- 16. Cách tốt nhất để chuyển đổi HTML sang dạng thô bằng cách sử dụng Python
- 17. Chuyển đổi Số Java thành BigDecimal: cách tốt nhất
- 18. Chuyển đổi PDF sang hình ảnh tự động
- 19. Cách tốt nhất để truyền từ Động vật [] sang Chó []
- 20. Chuyển đổi JavaScript sang Java
- 21. Cách tốt nhất để chuyển từ Java/C# sang C++ là gì?
- 22. Nguồn trực tuyến tốt nhất để học Perl là gì?
- 23. Các nguồn lực tốt nhất để học Ant là gì?
- 24. Chuyển đổi Java Swing sang ứng dụng dựa trên web
- 25. Nguồn tốt nhất cho việc học cách tạo các API RESTful trong Java là gì?
- 26. Cách tốt nhất để chuyển đổi Pascal Case thành câu
- 27. Cách chuyển đổi .wav sang .mp3 bằng Java?
- 28. script/tool để chuyển đổi tập tin sang mảng mã nguồn C/C++
- 29. Chuyển đổi CSS3: Nhiều nguồn gốc?
- 30. Loại Chuyển đổi từ C sang Java
Đó là chắc chắn * có thể *, bởi vì Clojure biên dịch sang mã byte của JVM và có các trình giải mã bytecode-to-Java. Nhưng một nghi phạm và hy vọng có một tuyến đường trực tiếp hơn sẽ tạo ra mã chất lượng cao hơn đáng kể ... –
Hãy xem: http://georgejahad.com/clojure/clojureDecompiled.html – phlogratos
Vâng, ý tôi là có thể sản xuất nguồn Java với bất kỳ khả năng đọc nào. – mudge