2010-11-03 76 views
24

AFAIK GHC là trình biên dịch phổ biến nhất hiện nay, nhưng tôi cũng thấy, một số ompilers khác cũng có sẵn. GHC có thực sự là lựa chọn tốt nhất cho mọi mục đích hay không? Ví dụ, tôi đọc rằng một số trình biên dịch (quên tên) làm tốt hơn về tối ưu hóa, nhưng không thực hiện tất cả các phần mở rộng.Trình biên dịch cho Haskell

+2

http://www.haskell.org/haskellwiki/Thực hiện là những gì bạn đang tìm kiếm. –

Trả lời

36

GHC là trình biên dịch Haskell được sử dụng rộng rãi nhất và cung cấp nhiều tính năng nhất. Tuy nhiên, có những lựa chọn khác, đôi khi có một số lợi ích so với GHC. Đây là một số giải pháp thay thế phổ biến hơn:

Hugs - Hugs là một thông dịch viên (Tôi không nghĩ nó bao gồm trình biên dịch) nhanh và hiệu quả. Nó cũng được biết đến với việc tạo ra các thông báo lỗi dễ hiểu hơn GHC.

JHC - Trình biên dịch toàn bộ chương trình. JHC có thể tạo ra mã rất hiệu quả, nhưng nó chưa hoàn chỉnh tính năng (đây có lẽ là những gì bạn đang nghĩ đến). Lưu ý rằng nó không phải luôn luôn nhanh hơn GHC, đôi khi chỉ. Tôi đã không sử dụng JHC nhiều bởi vì nó không thực hiện các lớp kiểu đa tham số, mà tôi sử dụng rất nhiều. Tôi đã nghe nói rằng mã nguồn là cực kỳ rõ ràng và dễ đọc, làm cho một trình biên dịch tốt để hack trên. JHC cũng thuận tiện hơn cho việc biên dịch chéo và thường tạo ra các tệp nhị phân nhỏ hơn.

UHC - Trình biên dịch Utrecht Haskell gần hoàn thành tính năng (tôi nghĩ điều duy nhất còn thiếu là mẫu n + k) cho Haskell98. Nó thực hiện nhiều phần mở rộng phổ biến nhất của GHC và một số phần mở rộng ban đầu. Theo mã tài liệu không nhất thiết phải được tối ưu hóa tốt. Đây cũng là một trình biên dịch tốt để hack.

Tóm lại, nếu bạn muốn có mã hiệu quả và các tính năng tiên tiến, GHC là cách tốt nhất của bạn. JHC là giá trị cố gắng nếu bạn không cần MPTC hoặc một số tính năng khác. Các phần mở rộng của UHC có thể hấp dẫn trong một số trường hợp, nhưng tôi sẽ không dựa vào nó cho mã nhanh.

5

ghc là trình biên dịch rắn. nói rằng đó là lựa chọn tốt nhất cho mọi mục đích là một mục tiêu rất mạnh mẽ. và tìm kiếm một công cụ như vậy là vô ích.

Sử dụng nó và nếu bạn thực sự yêu cầu thứ gì đó khác thì vào thời điểm đó bạn có thể sẽ biết nó là gì.

9

Tôi nghĩ điều này cũng đáng được đề cập đến nhc98. Từ lời giới thiệu trên trang chủ:

nhc98 là một nhỏ, dễ cài đặt, tiêu chuẩn phù hợp trình biên dịch cho Haskell 98, lười biếng chức năng ngôn ngữ lập trình. Nó là rất di động và nhằm mục đích tạo ra các tệp thực thi nhỏ chạy với số lượng nhỏ bộ nhớ. Nó tạo ra mã số trung bình nhanh chóng và việc biên dịch tự nó là khá nhanh chóng . Nó cũng đi kèm với hỗ trợ công cụ mở rộng để tự động biên dịch , ngoại ngữ interfacing, heap và hồ sơ thời gian, theo dõi và gỡ lỗi.

10
  1. Haskell được định nghĩa không chính thức là ngôn ngữ được xử lý bởi GHC.
  2. GHC là trình biên dịch của nền tảng Haskell.
  3. Cố gắng tối ưu hóa mã của bạn với GHC có thể trả tiền nhiều hơn chuyển sang trình biên dịch khác vì bạn sẽ học một số kỹ năng tối ưu hóa.
  4. Có rất nhiều rất tiện ích mở rộng hữu ích trong GHC. Tôi chỉ không thể thấy cách sống mà không có họ.

Vì vậy, đối với bất kỳ điều gì nghiêm trọng (ví dụ như phi học thuật, phi thực nghiệm, không bay hơi hoặc sử dụng nhiều gói), lựa chọn thực dụng là đi cùng với GHC.

+0

Rất thú vị và hữu ích! Cảm ơn bạn! – fuz

8

Tính đến năm 2011, không có lựa chọn nào khác ngoài GHC cho lập trình hàng ngày. Nhóm HP khuyến khích mạnh mẽ việc sử dụng GHC của tất cả các lập trình viên của Haskell.


Nếu bạn là một nhà nghiên cứu, bạn có thể sử dụng UHC, nếu bạn đang ở trên một hệ thống rất lạ, bạn có thể chỉ có Hugs hoặc nhc98. Nếu bạn là một retro-fan như tôi, bạn vẫn có gofer, HBC và HBI cài đặt:

$ hbi 
Welcome to interactive Haskell98 version 0.9999.5c Pentium 2004 Jun 29! 
Loading prelude... 1 values, 4 libraries, 200 types found. 
Type "help;" to get help. 
> help; 
     HBI -- Interactive Haskell B 1.3 

HBI là mát mẻ bởi vì a) nó thực hiện Haskell B, và b) nó hỗ trợ đầy đủ các ngôn ngữ ở lệnh line:

> data L a = I | X a (L a) deriving Show; 
data L b = I | X b (L b) deriving (Show) 
> X 4 (X 3 I); 
X 4 (X 3 I) 

và trình biên dịch tạo mã khá tốt, thậm chí 15 năm sau đó.

+1

Haskell B là gì? – fuz

+2

Phiên bản đầu tiên của Haskell. –

+3

Tôi có thể lấy nó ở đâu? Dường như, tất cả các liên kết đến hbc đều đã chết. – fuz

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