2010-07-23 63 views
10

thể trùng lặp:
Why functional languages?Lợi ích và công dụng của một ngôn ngữ lập trình chức năng

tôi bắt đầu lập trình với C/C++, VB, và cuối cùng Python - tất cả các ngôn ngữ bắt buộc. Tôi đã học một khóa học về ngôn ngữ lập trình và học ngôn ngữ chức năng đầu tiên của tôi - OCaml. Điều đó thật tồi tệ.

Cú pháp và những nỗi kinh hoàng khác sang một bên, OCaml lấy quy trình suy nghĩ bắt buộc của tôi và ném nó ra ngoài cửa sổ. Đó là bực bội. Tôi nhấn mạnh rằng mọi thứ có thể được thực hiện chức năng cũng có thể được thực hiện một cách bất hợp pháp. Tôi nghĩ về lập trình chức năng như lập trình bắt buộc mà không có chi (tác dụng phụ). Để đáp lại sự thất vọng của tôi, lợi ích duy nhất mà giáo sư của tôi có thể đưa ra là khả năng của FPL để song song các chức năng không có tác dụng phụ.

Dù sao, hãy nói đủ.

  1. Một số lợi thế mà FPL cung cấp ở trên IPL là gì?
  2. Có điều gì có thể dễ dàng thực hiện trong FPL không thể thực hiện dễ dàng trong IPL không?
  3. Có bất kỳ ví dụ thực tế về FPL nào đang được sử dụng hay chúng chủ yếu là các bài tập học thuật? (Khi tôi nói thế giới thực, tôi có nghĩa là một dự án phụ thuộc rất nhiều vào khía cạnh chức năng của ngôn ngữ và không nhồi nhét FPL vào một kịch bản mà nó không thuộc về).

Cảm ơn,
Advait

+2

Chủ yếu là lặp lại: http://stackoverflow.com/questions/36504/ Tại sao-chức năng-ngôn ngữ –

+1

Chỉ cần một gợi ý ngắn gọn: một ngôn ngữ OO 'ngăn chặn' bạn truy cập vào tất cả các biến, ẩn chúng đằng sau abstractions. Điều này giúp bạn kiểm soát sự phức tạp. Tương tự như vậy, một FP ngăn cản bạn thao tác trạng thái chia sẻ, và do đó giúp bạn viết mã song song, trong số những thứ khác. –

+0

Tôi thấy bài đăng đó và nhận thấy cách mọi người đề cập đến sự song song dễ dàng. Tôi đã không thực sự hài lòng với bất kỳ câu trả lời nào. Tôi cảm thấy rằng việc song song các lời gọi hàm chuẩn sẽ không cung cấp nhiều lợi ích hiệu năng hơn cho phép lập trình viên song song một cách rõ ràng mã của riêng mình (đặc biệt là vì chi phí của việc bắt đầu một chuỗi mới để thực hiện một hàm có tầm thường là khá lớn). Khi lựa chọn được để lại cho lập trình viên (khi nào/những gì để song song), anh/cô ấy được tự do nhất - lợi ích hiệu suất của song song mà không có nạng của một FPL. – advait

Trả lời

14

Trước hết, hầu hết các ngôn ngữ được sử dụng phổ biến hiện nay là tương đương trong khả năng diễn đạt, có thể là bắt buộc hoặc năng, do đó, nó tự nhiên để nghĩ rằng mọi thứ bạn có thể làm trong một ngôn ngữ chức năng bạn có thể làm trong một mệnh lệnh bắt buộc, bởi vì nó có thể đúng.

Một trong những điều thực sự thú vị về ngôn ngữ chức năng là cấu trúc của chúng cho phép áp dụng suy luận kiểu Hindley-Milner. Đây là hệ thống kiểu được sử dụng trong SML, OCaml và một loạt các ngôn ngữ chức năng khác. Nó thực sự dường như dẫn đến giảm tỷ lệ lỗi và có khả năng tiết kiệm cho bạn rất nhiều thời gian và năng lượng bằng cách tìm lỗi ở phía trước như là lỗi biên dịch.

Đối số song song tự động được sử dụng quá mức một chút, đặc biệt là vì lời hứa đơn giản là chưa được xác định. Tôi đã viết mã song song rõ ràng trong các ngôn ngữ chức năng và nó đẹp hơn, IMHO, hơn là làm một cái gì đó tương tự trong Java hoặc tương tự.

Giai thoại ít nhất, tôi sẽ không là người đầu tiên tuyên bố rằng việc học một ngôn ngữ chức năng làm cho bạn trở thành một lập trình viên bắt buộc tốt hơn! Đó là sự khó chịu mà bạn cảm thấy trong quá trình suy nghĩ "bắt buộc" của bạn bị gián đoạn khi sử dụng OCaml thực sự là một quá trình thực sự tốt để đi qua. Nó làm cho bạn đặt câu hỏi giả định và dừng bạn viết mã theo một cách cụ thể chỉ vì bạn đã luôn luôn thực hiện nó theo cách đó.

Để sử dụng trong thế giới thực, bạn có thể muốn xem các thủ tục của các hội thảo Commercial Users of Functional Programming. Ngoài ra còn có một số dự án rất lớn được viết bằng các ngôn ngữ chức năng khác nhau, mặc dù hầu hết trong số đó có thể là mối quan tâm hạn chế bên ngoài các cộng đồng khá nhỏ. Các định lý lý thuyết Coq và Isabelle được viết bằng Ocaml và SML, tương ứng.

Dù bạn làm gì, tôi sẽ kiên trì.Tôi đã dành một thời gian dài đập đầu vào lưới ML trước khi mọi thứ cuối cùng được nhấp vào. Những ngày này tôi không chắc tôi thậm chí còn nhớ cách Java hoặc C hoạt động như thế nào, bởi vì tôi không có nhu cầu cho họ trong một thời gian dài ... Tôi chỉ sử dụng ML!

+0

Cụ thể, video này về việc sử dụng Lập trình Chức năng tại Facebook thực sự thú vị và hấp dẫn: http://cufp.org/videos/functional-programming-facebook – Gian

+0

'Quyền lực biểu cảm' không mua cho bạn nhiều như vậy. Bạn có thể chèo thuyền trên khắp thế giới hoặc sử dụng tàu. Cả hai đều có 'sức mạnh biểu cảm' để đưa bạn đi khắp thế giới. Hầu hết mọi người không đi thuyền chèo. –

+0

@Rainer, tôi không chắc liệu bạn có đồng ý với tôi hay không, nhưng đó chính là điểm tôi đang làm. Điều quan trọng là bạn có thể thực hiện hầu hết mọi thứ bằng bất kỳ ngôn ngữ hợp lý nào, đó chỉ là liệu bạn có muốn hay không. – Gian

7
  1. Khi người cuối cùng quản lý để làm im lặng tâm trí được đào tạo không đúng mức của mình, FP thực sự trở nên dễ dàng và thú vị hơn IP.

  2. FP có xu hướng an toàn hơn, ít bị lỗi hơn, do tính chất khai báo của nó.

  3. Tôi thích nghĩ rằng mã song song bắt buộc làm tăng gấp đôi độ phức tạp của nó (thử bản thân với một ứng dụng song song không tầm thường). IMO, FP giảm khoảng cách rất nhiều, nhờ thiếu sự đồng bộ hóa trong nhiều trường hợp.

  4. Trích dẫn Gián, học FP làm cho bạn một khôn ngoan lập trình viên bắt buộc ...

+3

Không có nhiều dữ liệu thực về điểm 2. Phần lớn là kỳ vọng. Nếu bạn nhìn vào máy tính trong máy bay, họ có thể sử dụng Ada, một ngôn ngữ điển hình. Số lượng mã tương đương được viết bằng ngôn ngữ FP (OCAML, Haskell, ...) thực sự chạy trên máy tính chuyến bay có thể gần bằng không. Nơi duy nhất mà ngôn ngữ FP được sử dụng là để xác minh các chương trình bắt buộc, mã FP vẫn không hoạt động trên máy bay. Chúng có thể là ngoại lệ, nhưng hầu như tất cả các mã an toàn trong thế giới thực đều không thuộc một trong những ngôn ngữ mà bạn mong đợi là an toàn hơn hoặc ít bị lỗi hơn. –

+0

Vâng, đúng là hầu hết bằng chứng cho điểm 2 là giai thoại, nhưng có rất nhiều bằng chứng giai thoại cho nó! Và công bằng, không có nhiều thông tin vững chắc về các kỹ thuật để cải thiện chất lượng phần mềm bằng ngôn ngữ _any_. – Gian

+1

Có một lượng lớn tài liệu về viết hệ thống an toàn cho máy bay và các hệ thống tương tự. Nếu phần mềm FP an toàn hơn hoặc ít lỗi hơn, tại sao nó không được sử dụng rộng rãi trong phần mềm quan trọng (ngoài việc xác minh)? hệ thống thời gian chạy của các ngôn ngữ này được xác minh là gì? –

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