Ngôn ngữ chức năng biên dịch với Dalvik VM của Android? [đóng cửa]


16

Tôi có một vấn đề phần mềm phù hợp với cách tiếp cận chức năng để lập trình, nhưng thị trường mục tiêu sẽ có trên HĐH Android. Tôi hỏi bởi vì có các ngôn ngữ chức năng biên dịch thành VM của Java, nhưng mã byte của Dalvik! = Mã byte Java.

Ngoài ra, bạn có biết liệu dxtiện ích có thể chuyển đổi thông minh các .classtệp được tạo từ các ngôn ngữ chức năng như Scala không?

Chỉnh sửa : Để thêm một chút hữu ích cho cộng đồng, và cũng để giúp tôi chọn tốt hơn, tôi có thể tinh chỉnh câu hỏi một chút không?

  • Bạn đã sử dụng bất kỳ ngôn ngữ thay thế với Dalvik? Những cái nào?
  • Một số "vấn đề" (vấn đề) mà tôi có thể gặp phải là gì?
  • Hiệu suất có được chấp nhận không? Điều đó có nghĩa là ứng dụng vẫn cảm thấy phản hồi nhanh cho người dùng.

Tôi chưa bao giờ thực hiện phát triển điện thoại di động, nhưng tôi lớn lên trên các thiết bị bị hạn chế và tôi không hề ảo tưởng rằng có một chi phí để sử dụng các ngôn ngữ không chuẩn với nền tảng. Tôi chỉ cần biết nếu chi phí là như vậy thì tôi có nên tiếp cận ngôn ngữ mặc định của mình không (nghĩa là áp dụng các nguyên tắc chức năng trong ngôn ngữ OOP).


Tôi đã cập nhật câu hỏi. Cảm ơn bạn @geekizard vì câu trả lời ban đầu của bạn. Đó là thông tin bắt đầu mà tôi đang tìm kiếm.
Berin Loritsch

Tôi đã nghe thấy tiếng thì thầm trên quán cà phê Haskell của những người làm điều này với FFI + Haskell + Can đảm. Tôi tin rằng có một thư viện trên github / hackage cho nó
Daniel Gratzer

Câu trả lời:


7

Có một bài đăng trên blog của Christian Neukirchen có tên là Lập trình cho Android với Scala chỉ ra cách xây dựng các chương trình Scala cho Android. Có vẻ như dexcó thể xử lý Scala, nhưng bạn cần sử dụng một công cụ như ProGuard để cắt thư viện lớp Scala xuống kích thước vì dexnếu không sẽ nhập toàn bộ thời gian chạy Scala.

Ngoài ra còn có một số công việc đang diễn ra về lập trình Android với ErjangClojure .


1
Dường như tất cả các tùy chọn bạn đưa ra đều có hình phạt hiệu suất nghiêm trọng. Điều đó cho tôi biết rằng các tùy chọn chưa thực sự đủ trưởng thành cho thời gian chính. Có lẽ trong một năm nữa?
Berin Loritsch

Miễn là bạn không sử dụng phần lớn thư viện lớp của scala, sẽ không có bất kỳ hình phạt hiệu suất đáng kể nào. Ngoài ra, bạn có thể tự động hóa toàn bộ quá trình với maven.
Kim

@Berin: Tôi nghĩ rằng tương lai sẽ không sử dụng các ngôn ngữ nhắm mục tiêu JVM - dexsau tất cả được tối ưu hóa để xử lý không chỉ các mã byte của Java mà cả các quy ước về mã byte của Java (bạn sẽ thấy một số thảo luận về điều này trong các liên kết tôi đã cung cấp trước đó) - nhưng nhắm mục tiêu máy ảo Dalvik trực tiếp. Có thể hiểu rằng điều đó có thể kết thúc nhanh hơn dextuyến đường Java .
geekizard

1
Và đối với những người thắc mắc: mã byte Dal Dal VM được ghi lại: opcodes , các định dạng hướng dẫn . Tôi thấy một số khả năng tối ưu hóa lổ nhìn trộm là không thể bằng cách nhắm mục tiêu JVM ngay lập tức, chứ đừng nói đến việc tối ưu hóa thông minh hơn bằng cách sử dụng trực tiếp kiến ​​trúc Dalvik.
geekizard

@Kim, bài báo tôi tìm thấy cho biết vấn đề về hiệu năng nằm ở sự khác biệt giữa các thuật toán tải lớp cho Java và Dalvik. Nếu tôi tránh xa các tính năng ngôn ngữ động của Scala, tôi sẽ có thể tránh được các sự cố tải lớp. Vấn đề tương tự cũng làm khổ các lựa chọn khác. Bây giờ nó vẫn còn khá mới. Cuối cùng tôi vẫn có thể thử nó trong dự án này - đó là bằng chứng về khái niệm.
Berin Loritsch

7

Kawa là một biến thể đáng yêu nhưng ít được biết đến của Đề án đã tồn tại âm thầm trong nhiều năm và chạy trên cả hai JVM và Dalvik, natively . Do đó, tương tự như Mirah, đầu ra của nó không bao gồm thêm VM và chỉ bao gồm các thư viện được nhập rõ ràng. Kawa có rất nhiều macro tiêu chuẩn (bao gồm một số API cụ thể cho Android) tạo ra một cú pháp sạch đẹp (giả sử một cái không phản đối dấu ngoặc đơn) và thêm một số tính năng ngon lành trên đầu trang của Scheme, như "lời hứa và lười biếng trong một). Ngôn ngữ này khá mạnh mẽ và được ghi chép tốt, và đã được tích cực duy trì và phát triển kể từ những ngày đầu của Java.

Lịch Mùa Vọng Java tóm tắt giá trị của Kawa với một số ví dụ và liên kết thông tin.


Wow, cảm ơn vì đã chỉ cho tôi về phía Kawa! Tôi đã rất muốn thực hiện một số phát triển Android không phải Java và điều này có vẻ rất hứa hẹn.
Evicatos

1

Bên cạnh scala tôi có thể đề nghị bạn nên xem mirah trên Android, dưới đây là một số chi tiết: http://threebrothers.org/enamendan/blog/strange-loop-2011-mirah-for-android-development/

Vậy điều gì làm cho phương pháp này 'tốt hơn' so với các ngôn ngữ khác? Mirah là một ngôn ngữ gõ tĩnh giống với ruby. Điều này cho phép một số phong cách chức năng tốt hơn nhiều so với java. Thường thì việc 'chuyển' ngôn ngữ sang Android là vấn đề vì bạn cũng cần chuyển thư viện chuẩn. Mirah tránh điều này bằng cách tránh để có một lib tiêu chuẩn. Trong tài liệu tham khảo có một cái nhìn tổng quan tuyệt vời từ trải nghiệm REAL WORLD chạy mirah trên Android và cách nó bật ra. (thử 2)


1
Vui lòng không đăng lại cùng một câu trả lời, tất cả những gì bạn phải làm để yêu cầu câu trả lời của bạn không bị xóa sau khi bạn chỉnh sửa nó để gắn cờ cho sự chú ý kiểm duyệt.
yannis


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.