Haskell trên JVM?


83

Tôi tự hỏi nếu có một số cách để làm cho Haskell chạy trên JVM (biên dịch hoặc thông dịch)?

Có tồn tại JHaskell trên Sourceforge nhưng cái này dường như trống rỗng và chết.

GHC sử dụng LLVM làm chương trình phụ trợ trình biên dịch. Sẽ là một ý kiến ​​hay nếu biên dịch LLVM sang Java bytecode? Hoặc có thể sử dụng một chương trình phụ trợ trình biên dịch khác?



4
toàn bộ chủ đề này trên haskell-cafe.
Josh Lee,

3
Tối ưu hóa cuộc gọi đuôi dường như vẫn còn là một vấn đề mở. Đó là lý do tại sao các ngôn ngữ jvm chức năng khác như Clojure cần các cấu trúc đặc biệt ( recur).
jeha,

13
@jeha: Không, TCO rất dễ dàng. Seph làm được, Erjang làm được, Kawa và tất cả các triển khai Đề án khác trên JVM đều làm được. JVM có các Ngoại lệ, về cơ bản giống nhau GOTO, có thể được sử dụng để triển khai TCO. Hoặc bạn sử dụng trampolines. Hoặc bạn hoàn toàn không sử dụng ngăn xếp cuộc gọi JVM và chỉ triển khai của riêng bạn. Lý do tại sao Clojure và Scala chỉ cung cấp TCO hạn chế (về cơ bản, chỉ đệ quy đuôi được tối ưu hóa) là bởi vì họ muốn sử dụng ngăn xếp cuộc gọi JVM vì lý do tương tác và hiệu suất. Như Rich Hickey, nhà thiết kế của Clojure đã nói: Tương tác, tốc độ, TCO - Chọn hai.
Jörg W Mittag,

3
Tôi không thể tưởng tượng được sẽ rất khó để biên dịch Haskell sang JVM nếu bạn không quan tâm đến hiệu suất và chỉ tập trung vào những gì ngôn ngữ Haskell yêu cầu. Sử dụng trampolines như Jorg đề cập. Chúng rất dễ thực hiện. Sử dụng các cấu trúc dữ liệu đơn giản nhất để thực hiện công việc. Đừng bận tâm đến việc tối ưu hóa. Tôi chắc rằng ai đó có thể tự mình thực hiện một cách hiệu quả và đầy đủ trong vòng một tuần nếu anh ta thực sự quan tâm.
Thomas Eding

Câu trả lời:


80

Bạn có thể muốn điều tra Frege . Trích dẫn từ trang đó:

"Frege là một ngôn ngữ lập trình chức năng thuần túy, không nghiêm ngặt theo tinh thần của Haskell."

"Các chương trình Frege được biên dịch sang Java và chạy trong JVM."

Dựa trên sự hiểu biết ngắn gọn về đặc tả ngôn ngữ, Frege có vẻ gần như là một bản sao của Haskell. Có lẽ cụm từ "theo tinh thần Haskell" là đơn giản nhằm đặt ra kỳ vọng thích hợp.


1
Có vẻ như họ đã cập nhật trang của mình một chút - bây giờ nó có nội dung "Frege là Haskell cho JVM." đó là một yêu cầu IMO mạnh hơn nhiều.
Michael Anderson

23

Haskell hoạt động tuyệt vời trên JVM. Xem Eta , một dự án đưa Haskell GHC 7.10.3 đầy đủ vào JVM với tương tác Java an toàn về loại.


12

Ngôn ngữ duy nhất mà tôi biết gần với haskell trong JVM là CAL. CAL dựa nhiều vào haskell nhưng nó không có tất cả các tính năng của haskell. Hệ thống kiểu tương tự như Haskell 98, và đường cú pháp như doký hiệu bị thiếu.

Đây là so sánh giữa Haskell và CAL: CAL dành cho Lập trình viên Haskell

Plugin eclipse rất tốt và hữu ích.

Lưu ý rằng CAL là một phần của khuôn khổ Open Quark.


Thực ra tôi đang tìm kiếm "cái thật". Tôi không thể đánh giá về CAL. Nhưng CAL dường như có các lớp loại btw. Ấn tượng đầu tiên thực sự là rất khó hiểu.
jeha

CAL thực sự có các lớp kiểu - nó khá gần với Haskell 98 trừ đi một chút đường cú pháp.
tgdavies

cảm ơn vì tgdavies thông tin thêm, tôi không phải là một lập trình viên CAL bản thân mình
islon

Trong một số ngày, tôi cố gắng lấy tài liệu CAL dành cho Lập trình viên Hakell. Liên kết bạn cung cấp dường như cũng không giúp được gì. Ai đó có thể đăng một liên kết làm việc tới pdf được không?
Ingo

@Ingo: liên kết này tới hướng dẫn người dùng sẽ hoạt động nhưng có thể nó không phải là hướng dẫn mới nhất: resources.businessobjects.com/labs/cal/cal_users_guide.pdf
jeha 30/09/11

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.