2008-09-27 39 views

Trả lời

19

Tôi muốn sử dụng Haskell. HackageDB là một bộ sưu tập tuyệt vời các thư viện được viết riêng cho ngôn ngữ. Trong trường hợp của F # bạn sẽ phải sử dụng chủ yếu là các thư viện mà không được viết với một ngôn ngữ chức năng trong tâm trí để họ sẽ không được 'thanh lịch' để sử dụng. Nhưng, tất nhiên nó phụ thuộc phần lớn vào việc lập trình chức năng mà bạn muốn làm và những hạn chế của dự án mà bạn muốn sử dụng nó cho. Thậm chí 'mục đích chung' không có nghĩa là nó nên được sử dụng trong mọi trường hợp;)

8

Nó phụ thuộc những gì bạn muốn làm:

Haskell là ngôn ngữ hoàn toàn chức năng hơn trong hai.

F # là ngôn ngữ lai và không hoàn toàn có chức năng, nhưng có một bộ thư viện lớp cơ sở tuyệt vời mà bạn có thể sử dụng để làm những việc hiện đại dễ dàng trên Windows hoặc Mono.

+0

F # cũng hoạt động trên Mono. – TraumaPony

+1

Nhưng thats với một nền tảng khác nhau, ông doesnt xứng đáng một downvote. – Rayne

+0

F # là ngôn ngữ cho CLI; do đó, nó là cùng một nền tảng. – TraumaPony

9

Tôi muốn nói F #, vì bạn có thể truy cập toàn bộ khung .Net. Tuy nhiên, đó là nhiều hơn một điều thư viện.

2

Tôi muốn nói điều đó tùy thuộc vào lý do bạn học nó. Nếu bạn đang làm nó cho kinh nghiệm của một ngôn ngữ chức năng thuần túy, hãy tìm Haskell. Nhưng nếu bạn chắc chắn sẽ sử dụng ngôn ngữ nhiều hơn thế, F # có thể là lựa chọn tốt hơn.

4

Bạn có thể tìm thấy bài viết trên blog này bởi Neil Mitchell thông tin:

F# From a Haskell Perspective

Các ý kiến ​​cũng được chiếu sáng.

+1

Neil bắt đầu bằng cách nói rằng anh ta biết rất ít về ML và sau đó rút ra một số so sánh thiếu sót giữa F # và ML, kết luận rằng F # thừa hưởng sai sót của nó từ ML. Đó chỉ là vô nghĩa vô nghĩa. Nếu bạn muốn biết về ML, hãy hỏi ai đó biết ML (tức là không phải Neil). –

25

Tôi thích Haskell hơn.

tuyên bố của Jon Harrop rằng Haskell có công cụ kém khiến tôi suy nghĩ một chút, vì tôi hoàn toàn không đồng ý với điều này. Tôi nghĩ rằng vấn đề ở đây là một phần của phong cách phát triển. Hãy so sánh một vài đặc điểm liên quan đến công cụ của F # và GHC:

  1. F # có các công cụ trực quan phong phú và GHC không có. Đối với tôi, việc thiếu các công cụ trực quan là không liên quan: tôi làm việc với vi, một dòng lệnh Unix và một hệ thống xây dựng tùy chỉnh rất nhiều. Sự thiếu hỗ trợ cho phong cách phát triển của tôi trong F # sẽ rất cố gắng đối với tôi. Mặt khác, nếu bạn thích làm việc trong môi trường kiểu Visual Studio, bạn có ý kiến ​​ngược lại.

  2. F # và/hoặc .NET Tôi hiểu có trình gỡ lỗi rất tốt. GHC chỉ có một trình gỡ lỗi giới hạn chạy trong trình thông dịch. Tôi đã không sử dụng một trình gỡ rối trong nhiều năm (phần lớn điều này là do sử dụng phát triển theo hướng thử nghiệm) và khi bạn làm việc chủ yếu với các hàm thuần túy, như trong Haskell, một trình gỡ lỗi ít cần thiết hơn nhiều. Vì vậy, đối với tôi, việc thiếu công cụ này là khá không liên quan.

  3. Thư viện. Điều này phụ thuộc chủ yếu vào thư viện bạn cần, phải không? Rất nhiều cái tốt không giúp ích gì nếu bạn không cần, và có rất nhiều thư viện được thiết kế kém có thể không hữu ích. Haskell chắc chắn có ít thư viện hơn .NET, nhưng nó có lựa chọn hợp lý và chất lượng của thiết kế API trong nhiều thiết bị là rất, rất cao.

Tôi không biết giao diện của F # vào thư viện mã gốc là như thế nào, nhưng GHC là tuyệt vời cho điều này, do FFI tuyệt vời. Tôi đã viết một máy chủ Windows DDE hoàn toàn trong Haskell (có — không phải là dòng C, thậm chí không phải đối phó với các cuộc gọi lại từ thư viện Windows C) và mất ít thời gian hơn và đơn giản hơn nhiều so với thực hiện tương tự trong C hoặc C++. Nếu bạn cần giao diện mã nguồn gốc, Haskell chắc chắn là sự lựa chọn tốt hơn.

Tính không thể đoán trước của việc sử dụng bộ nhớ và hiệu suất là một điểm tốt. Haskell dường như đối với tôi thực sự có thể dự đoán được nếu bạn biết bạn đang làm gì, nhưng bạn sẽ không biết bạn đang làm gì khi bạn bắt đầu, và bạn sẽ có rất nhiều điều để học. F # tương tự như các ngôn ngữ .NET khác. Nhìn chung, câu hỏi này có thể đi xuống nền tảng nhiều hơn ngôn ngữ: sự khác biệt lớn giữa "thế giới Unix" của GHC tạo mã gốc và "thế giới Windows" của F # đang chạy trên .NET không phải là vấn đề ngôn ngữ .

+2

Tất cả các điểm công bằng. Tôi nghĩ rằng Windows Presentation Foundation là một ví dụ truy cập rõ ràng trong bối cảnh của các thư viện mặc dù: nó được thiết kế tốt hơn và mạnh mẽ hơn bất cứ thứ gì có sẵn từ Haskell (ví dụ: Qt). Tôi cũng sẽ tư vấn cho người dùng kỹ thuật xem xét nghiêm túc việc chuyển đổi nền tảng chỉ để sử dụng F #. Tôi thích Linux cho Windows nhưng .NET chỉ vượt xa mọi thứ có sẵn trên Linux hoặc Mac OS X bây giờ ... –

+2

"Tôi không biết giao diện của F # vào thư viện mã gốc là như thế nào, nhưng ... Nếu bạn cần giao diện mã nguồn gốc, Haskell chắc chắn là lựa chọn tốt hơn ". Âm thanh không được điều chỉnh. –

6

Tôi nghĩ Jon Harrop có một kẻ nghiêm trọng về Haskell vì một lý do nào đó. Nó chỉ đơn giản là không đúng rằng nó không được sử dụng bên ngoài của học viện trong thực tế nó được sử dụng rộng rãi trong ngân hàng đầu tư và nhiều hơn nữa so với F # và OCaml là và vì lý do tốt. Nếu bạn muốn lập trình chức năng công việc thì hãy tìm hiểu Haskell vì có nhiều bài viết được quảng cáo cho các lập trình viên Haskell hơn là F # hoặc OCaml. Tôi chắc chắn F # sẽ trở nên phổ biến vì nó có Microsoft đằng sau nó và nó bắt đầu từ số không nhưng tại thời điểm Haskell có một dẫn rõ ràng.

Có lẽ 2 hoặc 3 năm trước, OCaml đã dẫn đầu lĩnh vực này bằng ngôn ngữ chức năng thực tế nhưng kể từ đó Haskell đã vượt qua nó với nhiều thư viện hơn, nhiều tính năng hơn, hiệu suất tốt hơn và sử dụng thương mại rộng hơn.

+0

"Tôi nghĩ Jon Harrop có một kẻ phản bội nghiêm trọng trên Haskell vì một lý do nào đó". Tôi có một kẻ xấu hổ. "... nó được sử dụng rộng rãi trong ngân hàng đầu tư và nhiều hơn nữa so với F # và OCaml là và vì lý do chính đáng". Nhảm nhí như thế. –

+1

"OCaml dẫn đầu lĩnh vực này bằng ngôn ngữ chức năng thực tế nhưng kể từ đó Haskell đã vượt qua nó với nhiều thư viện hơn, nhiều tính năng hơn, hiệu suất tốt hơn và sử dụng thương mại rộng hơn". Nhiều thư viện hơn. Nhiều tính năng hơn, có thể. Hiệu suất tốt hơn, không có cách nào. Sử dụng thương mại rộng hơn, tương đương với Haskell của XenSource (gần đây đã bán cho Citrix với giá $ 500,000,000) là bao nhiêu? –

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