Làm cách nào tôi có thể sử dụng lập trình hàm trong thế giới thực? [đóng cửa]


103

Ngôn ngữ chức năng tốt vì chúng tránh được lỗi bằng cách loại bỏ trạng thái, nhưng cũng vì chúng có thể dễ dàng được tự động song song hóa cho bạn mà bạn không phải lo lắng về số lượng luồng.

Với tư cách là nhà phát triển Win32, tôi có thể sử dụng Haskell cho một số ứng dụng của mình không? Và nếu tôi làm vậy, liệu có lợi thế thực sự nào sẽ được tự động dành cho tôi không? Nếu vậy điều gì mang lại cho tôi lợi thế này, trình biên dịch?

F # có song song hóa các chức năng bạn viết trên nhiều lõi và cpu tự động cho bạn không? Bạn có bao giờ thấy số luồng trong trình quản lý tác vụ tăng lên không?

Về cơ bản, câu hỏi của tôi là, làm cách nào để tôi có thể bắt đầu sử dụng Haskell một cách thiết thực, và liệu tôi có thực sự thấy một số lợi ích nếu làm thế không?


2
Cá nhân tôi, tôi sẽ xem xét erlang - nhưng đó là tôi.
Jason Bunting 27/09/08

2
Để làm rõ một chút, tôi đã có kinh nghiệm với một vài ngôn ngữ lập trình chức năng khác nhau, và tôi biết chúng hoạt động như thế nào và sự khác biệt của chúng là gì. Nhưng câu hỏi này cụ thể là: làm thế nào để tôi đưa nó vào sử dụng trong thế giới thực.
Brian R. Bondy 27/09/08

1
có thể có bản sao của ngôn ngữ chức năng Tại sao?

Câu trả lời:


41

Có vẻ như cuốn sách Real World Haskell chính là thứ bạn đang tìm kiếm. Bạn có thể đọc trực tuyến miễn phí:

http://book.realworldhaskell.org/


Tôi đang đợi nó in ra. Có vẻ như nó sẽ là một trong những cuốn sách tốt hơn xung quanh. Tôi cá rằng nó sẽ phục vụ những người quan tâm đến Haskell tốt hơn Ocaml thực tế làm cho Ocaml
Friedrich

25

F # không chứa bất kỳ bụi pixie ma thuật nào sẽ truyền các chức năng cho các CPU hoặc máy khác nhau. Điều mà F # / Haskell và các ngôn ngữ lập trình hàm khác làm là giúp bạn viết các hàm có thể được xử lý độc lập với luồng hoặc CPU mà chúng được tạo trên đó dễ dàng hơn.

Tôi cảm thấy không ổn khi đăng liên kết ở đây tới một podcast mà tôi tham gia, có vẻ hơi sai, nhưng trong tập Herding Code nơi chúng tôi nói chuyện với Matt Podwysocki, chúng tôi đã hỏi cùng một câu hỏi và anh ấy đã đưa ra một số câu trả lời thú vị. Cũng có rất nhiều liên kết tốt liên quan đến lập trình chức năng trong tập đó. Tôi đã tìm thấy một liên kết tiêu đề " Tại sao lại quan trọng lập trình chức năng " Điều đó có thể cung cấp một số câu trả lời cho bạn.


21
Sau đó, tôi sẽ đăng cho bạn: herdingcode.com/?p=45 :)
Brian R. Bondy


14

Điều này cũng có thể thú vị: " Lập trình chức năng trong thế giới thực "

Các ví dụ là trong F # và C #, nhưng lý thuyết khá chung chung. Từ những gì tôi đã đọc (trước khi phát hành), nó chắc chắn rất thú vị, nhưng cho đến nay tôi nghĩ nó đang khiến tôi ngày càng muốn gắn bó nhiều hơn với C #, bằng cách sử dụng các thư viện như Tiện ích mở rộng song song.


Bạn vẫn cảm thấy mình "muốn gắn bó ngày càng nhiều với C #"? F # cung cấp một số tính năng thú vị. Sự thúc đẩy lớn nhất mà tôi nhận được là việc nhập ít hơn (có nghĩa là ít ma sát hơn trong quá trình thể hiện các giải pháp trong mã).
Daniel

1
@Daniel theo một số cách, thậm chí còn hơn thế nữa; p Tuy nhiên, các công cụ tôi làm việc có thể không điển hình.
Marc Gravell

8

Bạn không đề cập đến, nhưng tôi giả định rằng bạn đang sử dụng C ++. Một cách có thể dễ dàng để truy cập vào chức năng là thông qua C ++ / CLI đến F #. C ++ chứa "bụi pixie ma thuật" (được gọi là IJW: It Just Works) để cho phép bạn gọi vào và ra khỏi mã được quản lý. Với điều này, việc gọi mã F # gần như đơn giản giống như từ C #.

Tôi đã sử dụng điều này trong một chương trình (FreeSWITCH), được viết hoàn toàn bằng C / C ++. Với một C ++ / CLI được quản lý duy nhất (sử dụng công tắc / clr), nó chuyển đổi một cách kỳ diệu thành mã được quản lý và từ đó, tôi có thể tải các plugin F # của mình và thực thi chúng. Để làm cho mọi thứ dễ dàng hơn cho việc triển khai, F # có thể liên kết tĩnh tất cả các phụ thuộc của nó, vì vậy bạn không cần phải triển khai các tệp thời gian chạy F #. Một điều khác làm cho mã CLR hấp dẫn là bạn có thể chuyển mã được quản lý (đại biểu) sang mã C và thời gian chạy sẽ tự động tạo ra một cú đánh cho bạn.

Nếu bạn quyết định sử dụng Haskell, tính năng bạn sẽ tìm kiếm là FFI: Giao diện chức năng ngoại. Tuy nhiên, tôi không nghĩ rằng nó sẽ cung cấp cho bạn mức độ tích hợp giống như C ++ / CLI với F #.


6

Tôi hiện đang tự học Haskell, khi bạn bắt đầu học nó, nó có vẻ không hấp dẫn lắm vì trải nghiệm học tập KHÔNG GÌ giống như học một ngôn ngữ như C #, đó là một thế giới hoàn toàn mới, nhưng tôi nhận thấy rằng tôi có thể viết rất phức tạp biểu thức chỉ trong một vài dòng mã, khi tôi nhìn lại mã, nó ngắn gọn hơn nhiều, nó nhỏ và chặt chẽ. Tôi hoàn toàn thích nó! Bạn thực sự có thể viết các chương trình trong thế giới thực sẽ nhỏ hơn, dễ bảo trì hơn và phức tạp hơn nhiều mà hầu hết các ngôn ngữ khác đều cho phép, tôi bỏ phiếu cho bạn học nó !!

Chúc may mắn.


4

Vì bạn đề cập đến Win32 và DLL, tôi cho rằng bạn đang làm việc với mã không được quản lý. Trong trường hợp đó, GHC sẽ hoạt động rất tốt cho bạn. Cuối năm ngoái, tôi đã viết một máy chủ DDE trong Windows sử dụng FFI để nói chuyện với các thư viện MS DDE, và thật ngạc nhiên, đó là một trải nghiệm cực kỳ thú vị (đặc biệt là tôi là một chàng trai Unix). FFI của Haskell rất mạnh mẽ (thậm chí hỗ trợ, ví dụ, gọi lại các hàm Haskell từ C hoặc các thư viện khác) và việc kiểm tra kiểu của Haskell khi viết mã cấp C giống như một giấc mơ trở thành hiện thực.

Điểm cuối cùng đó là một trong những ưu điểm chính của Haskell: hệ thống kiểu loại tuyệt vời. Điều đó nói rằng, nó giống như bất kỳ công cụ mạnh mẽ nào; nó cần thời gian và nỗ lực để tận dụng nó.

Vì vậy, có thể bắt đầu viết các đoạn mã nhỏ trong Haskell liên kết với phần còn lại của mã của bạn (mặc dù bạn có thể thấy dễ dàng hơn khi bắt đầu với các chương trình Haskell nhỏ liên kết với mã khác của bạn) và nó rất đáng để chi tiêu một lượng thời gian hợp lý để tìm hiểu về điều này và sử dụng nó ở bất cứ đâu bạn có thể. Bạn có thể kết thúc như tôi, lập kế hoạch cho một dự án khá lớn được tích hợp chặt chẽ với mã Windows (trong trường hợp của tôi là một bổ trợ Excel phức tạp) trong Haskell.

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.