Ngôn ngữ lập trình chức năng: Quá khứ, hiện tại và tương lai

Tác Giả: Laura McKinney
Ngày Sáng TạO: 4 Tháng Tư 2021
CậP NhậT Ngày Tháng: 14 Có Thể 2024
Anonim
Ngôn ngữ lập trình chức năng: Quá khứ, hiện tại và tương lai - Công Nghệ
Ngôn ngữ lập trình chức năng: Quá khứ, hiện tại và tương lai - Công Nghệ

NộI Dung


Lấy đi:

Để hiểu rõ hơn về lớp ngôn ngữ lập trình riêng biệt này, chúng tôi sẽ xem xét định nghĩa, đặc điểm và lịch sử liên quan đến nó.

Clojure, Elixir, Elm, F #, Haskell, Idris và Scala là những cái tên bạn có thể thấy trong số các khuyến nghị cho các ngôn ngữ lập trình chức năng đáng để học hỏi. Đây là những ngôn ngữ được sử dụng ngày nay và có thể sẽ được sử dụng trong những năm tới.

Một ngôn ngữ như haskell có tuổi thọ cao nhất, nhưng thậm chí những ngôn ngữ gần đây hơn như Clojure thực sự bắt nguồn từ các ngôn ngữ trước đó tiếp tục định hình sự phát triển của lập trình chức năng (FP). (Đọc thẳng từ các chuyên gia lập trình: Ngôn ngữ lập trình chức năng nào là tốt nhất để học ngay bây giờ?)

Để hiểu rõ hơn về lớp ngôn ngữ lập trình riêng biệt này, chúng tôi sẽ xem xét định nghĩa, đặc điểm và lịch sử liên quan đến nó. (Kiểm tra INFOGRAPHIC: Lịch sử của ngôn ngữ lập trình.)


Tại sao được gọi là lập trình chức năng?

FP lấy tên từ cách tiếp cận xây dựng phần mềm được xây dựng từ việc tạo ra các hàm thuần túy. Nền tảng của tất cả các ngôn ngữ lập trình chức năng là Lambda Tính (cũng được viết là calcul-compus). Nó được mô tả là ngôn ngữ lập trình phổ quát nhỏ nhất trên thế giới.

Theo đó, một FP dựa trên các hàm toán học sử dụng các biểu thức và đệ quy có điều kiện để thực hiện phép tính. Nó bao gồm các đặc điểm sau:

  • Các dữ liệu chứa trong đó là bất biến.
  • Nó tránh các tác dụng phụ, đó là bất kỳ thay đổi trạng thái nào xảy ra bên ngoài chức năng được gọi và trạng thái chia sẻ.
  • Lập trình FP dễ bảo trì hơn vì bạn không cần phải lo lắng về việc vô tình thay đổi bất cứ điều gì ngoài chức năng đã cho.
  • Nó có tính minh bạch tham chiếu.
  • Thiết kế mô-đun cho phép các mô-đun nhỏ có thể được mã hóa nhanh chóng và có khả năng được tái sử dụng, điều này góp phần phát triển chương trình nhanh hơn. Ngoài ra các mô-đun có thể được kiểm tra riêng rẽ có thể giảm thời gian dành cho kiểm tra và gỡ lỗi.

Bắt nguồn từ các hàm toán học

Khi lập trình chức năng bắt nguồn từ Lambda Tính, lịch sử của nó sẽ bắt đầu từ những năm 1930 khi Nhà thờ Alonzo giới thiệu nó. Tất nhiên, nó đã được sử dụng cho máy tính rồi.


1960

Tôi đã không đến năm 1960 khi một nhà khoa học máy tính và nhận thức người Mỹ tên là John McCarthy xuất bản các hàm đệ quy của biểu thức tượng trưng và tính toán của chúng bằng máy. Do kết quả nghiên cứu về chức năng như vậy, McCarthy đã tạo ra thứ được công nhận là ngôn ngữ lập trình chức năng đầu tiên: LISP.

Một bản tóm tắt tốt về nó có thể được tìm thấy trong Sự ra đời của LISP - một bản tóm tắt của bài báo gốc của John McCarthy. Ngôn ngữ có các nhánh, bao gồm Common Lisp, Scheme và elisp, chưa kể Clojure, hiện đang được sử dụng rất nhiều.

Gần hai thập kỷ sau, bước tiến lớn tiếp theo diễn ra tại Đại học Edinburgh nơi các nhà nghiên cứu định nghĩa ML (Metal Language). Các nhà nghiên cứu yêu cầu một ngôn ngữ sẽ hoạt động cho hệ thống chứng minh định lý tự động (LCF) của họ.

ML phù hợp với dự luật cho điều đó, và họ cũng nhận thấy vào năm 1978 rằng nó có thể hữu ích như một ngôn ngữ lập trình chung. Các phiên bản bao gồm ML tiêu chuẩn của New Jersey và CAML.

Một tên khác gắn liền với năm 1978 và Edinburgh là Hope. Nguồn gốc của cái tên là Hope Park Square, nơi Khoa Khoa học Máy tính của Edinburgh (cũng cho Thông số Thứ tự cao hơn và suối vĩnh cửu, v.v.) Hy vọng được phân biệt là ngôn ngữ đầu tiên sử dụng mô hình gọi.

1990 đến nay và hơn thế nữa: Haskell

Haskell, được đặt theo tên của nhà logic học Haskell B. Curry, là sản phẩm của một ủy ban bắt đầu xây dựng ngôn ngữ vào năm 1987 và phát hành phiên bản đầu tiên vào năm 1990. Tiêu chuẩn mới nhất là Haskell 2010, và một phiên bản khác dự kiến ​​vào năm 2020 .

Haskell đã trở thành mô hình của các ngôn ngữ chức năng hiện đại, được phân biệt bởi các tính năng của Google như các hàm bậc cao hơn, suy luận kiểu, đánh giá lười biếng và các kiểu dữ liệu do người dùng định nghĩa.

Các hàm bậc cao hơn lấy các hàm khác làm đối số hoặc trả về chúng làm kết quả. Chúng cho phép các ứng dụng cũng có thể được gọi là currying. Làm điều đó sẽ áp dụng riêng một hàm cho các đối số của nó và khi mỗi ứng dụng trả về một hàm mới, thì nó sẽ chấp nhận đối số tiếp theo.

Mặc dù sự lười biếng thường được coi là một điều xấu, nhưng nó lại phục vụ một mục đích trong lập trình. Như đã giải thích trong Đánh giá lười biếng là gì? Trái ngược với đánh giá nghiêm ngặt của người dùng, cách tiếp cận của đánh giá lười biếng là chỉ đánh giá những gì được yêu cầu.

Các ngôn ngữ lập trình chức năng hàng đầu hiện nay

Haskell là tên chiếm ưu thế nhất cho thể loại này, có thể là do lịch sử mở rộng của nó so với các FP khác. Nó cũng là một ảnh hưởng lớn đến sự phát triển của họ. Simon Peyton Jones, nhà nghiên cứu chính tại Microsoft và là người đóng góp chính cho Haskell, đã nói về ảnh hưởng lâu dài của Haskell, theo cả nghĩa của nó và theo cách mà nó định hình các ngôn ngữ khác.

"Những thứ như Linq, công cụ truy vấn tích hợp ngôn ngữ trong C #, thực ra là từ Haskell. Quy trình làm việc F # được rút ra trực tiếp từ câu chuyện I / O đơn điệu này."

Clojure

Clojure là một phương ngữ mới của Lisp được tạo bởi Rich Hickey. Điều khác biệt của Clojure với các phương ngữ LISP khác là nó chạy trên nền tảng Java và được biên dịch thành mã byte JVM. Ưu điểm mang lại là sự tích hợp với Java ngay cả những thứ không được viết bằng Clojure.

Như Hickey giải thích trong Clojure.org, nói, Clo Clojure cung cấp quyền truy cập dễ dàng vào các khung công tác Java, với các gợi ý loại tùy chọn và suy luận kiểu, để đảm bảo rằng các lệnh gọi tới Java có thể tránh được sự phản chiếu.

Nó cũng cho biết, cách tiếp cận mã dữ liệu của hệ thống của Lis Lisp và hệ thống vĩ mô của nó vẫn tách biệt nó với các phương ngữ Lisp khác và thêm rằng các bản đồ, bộ và vectơ của nó là lớp đầu tiên trong Clojure như các danh sách nằm trong Lispure .

Hickey cũng chia sẻ lý do của mình khi tạo ra Clojure khi gặt hái tất cả những lợi ích của Lisp mà không có một số nhược điểm của nó. Sau khi đặt ra nhiều dấu đầu dòng dưới các tiêu đề khác nhau, Hickey tổng hợp lại như sau: Nói tóm lại, tôi nghĩ Clojure chiếm một vị trí độc nhất như một Lisp chức năng cho JVM với sự hỗ trợ đồng thời mạnh mẽ. Cúc

Cây du

Elm là tên của một ngôn ngữ chức năng thuần túy được Evan Czaplicki thiết kế lần đầu tiên vào năm 2012. Nó được các nhà phát triển web ưa thích để xây dựng giao diện người dùng. Trình biên dịch Elm nhắm mục tiêu HTML, CSS và JavaScript. Nó hoạt động với các thư viện JavaScript theo cách tương tự như Clojure hoạt động với các thư viện Java.

Điều khác biệt của Elm về Elm là nó sử dụng kiểm tra kiểu tĩnh, giúp loại bỏ các ngoại lệ thời gian chạy vì các lỗi sẽ bị bắt tại thời điểm biên dịch. Vì trang Elm tự hào, nên NoRedInk đã chuyển sang Elm khoảng hai năm trước và 250k + dòng sau đó, họ vẫn không phải tranh giành để sửa một ngoại lệ thời gian chạy khó hiểu trong sản xuất.

Sự vắng mặt của các lỗi có thể nhìn thấy ở phía người dùng, là một lợi thế rõ ràng cho một ngôn ngữ. Đó có thể là lý do tại sao nó cũng cảm thấy hợp lý khi áp dụng mô tả về: Một ngôn ngữ thú vị, với chính nó.

Thuốc tiên

Như trang web của Elixir tự mô tả: Hồi Elixir là một ngôn ngữ chức năng, năng động được thiết kế để xây dựng các ứng dụng có thể mở rộng và có thể bảo trì được. El Elir hướng đến việc tạo ra các hệ thống có độ trễ thấp, tính sẵn sàng cao. Nó chạy trên Erlang VM, một hệ sinh thái được Heroku, WhatsApp, Klarna và các hệ thống khác sử dụng cho các ứng dụng phân tán, chịu lỗi.

Lợi thế cho các lập trình viên Elixir là họ có thể gọi hàm Erlang mà không phải chịu bất kỳ chi phí thời gian chạy nào.

ĐỤ#

F # là một ngôn ngữ lập trình đầu tiên, đa nền tảng, đa chức năng. Bất cứ ai cũng có thể tham gia Quỹ phần mềm F #. Trang web Foundation nền tảng tổng hợp ngôn ngữ theo cách này:

F # chạy trên Linux, Mac OS X, Android, iOS, Windows, GPU và trình duyệt. Nó là miễn phí để sử dụng và là nguồn mở theo giấy phép được OSI phê duyệt.

F # được sử dụng trong một loạt các lĩnh vực ứng dụng và được hỗ trợ bởi cả một cộng đồng mở tích cực và các công ty hàng đầu trong ngành cung cấp các công cụ chuyên nghiệp.

Idris

Idris là một ngôn ngữ lập trình chức năng thuần túy có mục đích chung có ảnh hưởng của Haskell và ML.

Như đã giải thích ở đây, nó được đặc trưng bởi các loại phụ thuộc, cho phép "các loại được xác định dựa trên các giá trị, nghĩa là một số khía cạnh của hành vi chương trình có thể được chỉ định chính xác trong loại. Đây cũng được phân biệt bằng cách biên dịch, với đánh giá háo hức.

JavaScript

Mặc dù JavaScript không hoàn toàn là một ngôn ngữ lập trình chức năng ở chỗ nó cũng cho phép một cách tiếp cận hướng đối tượng, nhưng nó có thành phần bắt nguồn từ lập trình chức năng. Điều đó bao gồm các chức năng bậc cao hơn. Ngoài ra các phiên bản mới hơn của tiêu chuẩn ECMAScript cung cấp các bản sửa lỗi cho vấn đề về tính biến đổi.

Kotlin

Trong số các ngôn ngữ mới nhất (chỉ được phát hành vào tháng 2 năm 2016), Kotlin đã có 5 năm trong quá trình chế tạo và thử nghiệm. Các công ty như Amex, NBC Digital, Expedia và Gradle sử dụng nó. Nó không phải là một ngôn ngữ chức năng thuần túy.

Giống như JavaScript, Kotlin có khả năng cả các cấu trúc hướng đối tượng và chức năng. Thêm vào đó, nó hoàn toàn tương thích với các ngôn ngữ lập trình Java.

Trong số những lợi ích mà nó mang lại là nó ngắn gọn hơn lập trình Java. Một số người nghĩ rằng nó có thể cắt ra hơn một phần ba dòng mã. Nó cũng cung cấp tất cả các lợi thế liên quan đến các ngôn ngữ lập trình chức năng, bao gồm các hàm bậc cao hơn, các hàm mở rộng và lambdas.

Tính linh hoạt của nó làm cho nó phù hợp với bất kỳ loại phát triển nào, có thể là phía máy chủ, web phía máy khách và Android, và nó đang làm việc để tương thích với Apple Apple iOS.

Scala

Scala là một sự kết hợp khác ở chỗ nó cung cấp cả lập trình hướng đối tượng và lập trình chức năng.

Các kiểu tĩnh của của Scala Scala giúp tránh các lỗi trong các ứng dụng phức tạp và thời gian chạy JVM và JavaScript của nó cho phép bạn xây dựng các hệ thống hiệu năng cao với quyền truy cập dễ dàng vào các hệ sinh thái khổng lồ của các thư viện, như cách giải thích trên trang web của nó.

Những gì chúng ta đã học

Telstraiên Phân tích dữ liệu lớn GM Mark Moloney tổng hợp lý do tại sao bây giờ chúng ta đã đến lúc nắm lấy các ngôn ngữ chức năng và tại sao các lập trình viên nên xem xét việc học chúng:

Một huyền thoại là lập trình chức năng là khó hoặc quá hàn lâm. Nó chỉ là một kỹ năng khác để học hỏi. Phải mất thời gian và thực hành để thành thạo - không khác gì hành trình mà các nhà phát triển đã trải qua để học lập trình hướng đối tượng vào cuối thập niên 80 / đầu thập niên 90. Công nghệ tiếp tục phát triển. Đó là một trong những lý do tôi yêu phần mềm. Học cách học cũng quan trọng như những gì bạn biết.