Ngôn ngữ lập trình Haskell

Haskell là một ngôn ngữ lập trình hàm, sử dụng kiểm tra tĩnh. Phiên bản đầu tiên của ngôn ngữ được thiết kế vào năm 1990. Tiêu chuẩn mới nhất là Haskell 2010 và phiên bản tiếp theo dự định ra mắt vào năm 2020.

Haskell là ngôn ngữ được thiết kế cho mục đích lập trình hàm cho nên nó phù hợp để giải quyết các vấn đề thế giới thực mặc dù nguồn gốc của lập trình hàm là trong giới học thuật.

Haskell bắt nguồn từ những cánh đồng màu mỡ của Princeton. Nhà thờ Alonzo, Tiến sĩ giám sát viên của bộ ngắt Enigma Alan Turing, đã đưa ra mô hình toán học của các hàm được gọi là phép tính lambda vào những năm 1930.

Đến những năm 1950, một ngôn ngữ lập trình bậc cao (high-level) đã hình thành, nó được gọi là LISP (chữ viết tắt của List Processing). Ngôn ngữ cho phép người dùng định nghĩa và truyền qua như các giá trị.

Các hình thức của Haskell gần đây như là lScheme và Clojure.

Trong những năm 1980, Hope, ML, Miranda và các ngôn ngữ lập trình chức năng khác đã được tạo ra và mở rộng.

Tuy nhiên, nghiên cứu đã bị phân mảnh dựa trên nhiều ngôn ngữ và nhiều ngôn ngữ không có framework nguồn mở.

Vì vậy, một nhóm các học giả đã thành lập một ủy ban để đưa ra một ngôn ngữ mới và thực hiện nó để được sử dụng làm phương tiện phục vụ cho nghiên cứu cũng như giảng dạy các ngôn ngữ lập trình chức năng.

Nhiều năm trôi qua với những quan điểm và lập luận khác nhau, ủy ban đã công bố Báo cáo ngôn ngữ Haskell đầu tiên vào năm 1990. Đây là một bước đột phá lớn, kể từ đó có một ngôn ngữ lập trình chức năng chung mà toàn bộ cộng đồng nghiên cứu, hợp nhất.

Một nhà toán học người Mỹ cũng là một nhà logic học đứng đằng sau việc làm sáng tỏ ngôn ngữ lập trình này.

Tên anh ta là Haskell Curry, và đã có ba ngôn ngữ lập trình được đặt theo tên anh ta, đó là: Haskell, Curry và Brook (tên đệm của anh ấy).

Theo John Hughes, giáo sư khoa học máy tính tại Đại học Công nghệ ở Gothenburg, tên Haskell được đặt bởi ủy ban thiết kế ngôn ngữ.

Mọi người trong ủy ban đã viết một cái tên mà họ nghĩ sẽ là tên mới của ngôn ngữ lập trình này. Sau khi các tên được đưa lên bảng, mọi người được yêu cầu gạch bỏ một trong những lựa chọn đó cho đến khi chỉ còn một tên: Curry.

Vì vậy, lần tiếp theo họp bàn, họ quyết định đặt tên theo tên của Haskell Curry. Từ thời điểm đó, nó được gọi là, ngôn ngữ lập trình Haskell.

Lazy

Haskell chỉ đánh giá các biểu thức khi giá trị thực sự cần thiết cho một phép tính. Đây là một trong những ngôn ngữ đầu tiên sử dụng loại chiến lược đánh giá này. Trước Haskell, hầu hết các ngôn ngữ lập trình đều sử dụng “đánh giá háo hức” trong đó một biểu thức được đánh giá ngay khi nó được liên kết với một biến. Đánh giá lười biếng có thể mang lại hiệu suất tốt hơn và cho phép xác định cấu trúc dữ liệu không có giới hạn kích thước.

Các hàm thuần túy

Trong Haskell, các hàm là “thuần túy”, nghĩa là giá trị trả về luôn giống nhau đối với một đầu vào nhất định. Không giống như các hàm trong các ngôn ngữ lập trình khác, một hàm Haskell không thể gây ra tác dụng phụ cho các biến bên ngoài phạm vi từ vựng của nó. Hạn chế này có thể đơn giản hóa việc phát triển, gỡ lỗi và cấu trúc lại mã.

Kiểu gõ tĩnh, mạnh

Khi một biến được khai báo là một kiểu dữ liệu nhất định trong Haskell, nó không thể được sử dụng như một kiểu khác. Hạn chế này đòi hỏi một phong cách lập trình nghiêm ngặt hơn, nhưng cho phép các lợi ích về hiệu suất của mã đã biên dịch.

Thư viện có sẵn

Haskell có thể không phổ biến như Python hay JavaScript, nhưng nó vẫn có một cơ sở dữ liệu khá tốt về các package được gọi là Hackage. Nó không rộng rãi như Python nhưng thường bao gồm các thứ khá hiếm.

Tốc độ

GHC, trình biên dịch Haskell chính là một kiệt tác có thể tạo ra mã hiệu suất đáng kinh ngạc.

Điều này là do LLVM và back-end chạy native trong GHC. Nếu được tối ưu hóa đúng cách, Haskell có thể chạy với tốc độ khá gần với ngôn ngữ C.

Trình quản lý IO và runtime có thể xử lý hàng ngàn luồng với nguồn lực tối thiểu. Haskell có thể được chuyển đổi thành một ngôn ngữ hiệu suất cao với các thay đổi code tối thiểu.

Giáo dục

Các lợi ích về giáo dục của Haskell là giúp sinh viên có được các kỹ năng có giá trị.

Điều khó nhất liên quan đến việc học Haskell là các thực tiễn và yêu cầu bắt buộc đối với code-base chất lượng cũng như mức độ trừu tượng cao, các hàm thuần túy và phân biệt code hiệu quả và thuần túy.

Học Haskell hàng ngày cũng tạo ra những thói quen mới rất tốt. Nhiều công ty nói rằng đào tạo Haskel không khó như nhiều người vẫn nghĩ.

Testing

Mức độ trừu tượng, độ thuần túy và đánh giá do Haskell cung cấp giúp việc nhắn tin rất dễ dàng.

SmallCheck, QuickCheck và các thư viện khác là những phát minh trong cộng đồng Haskell và sau đó được chuyển sang các ngôn ngữ như Scala và Python.

Cùng với đó, các bài kiểm tra cần thiết cho các ngôn ngữ khác thì không cần có khi nói đến Haskell.

Tái sử dụng code

Haskell cho phép sử dụng lại code. Các mẫu được trừu tượng hóa thành các component và component có thể tái sử dụng và sau này các high-level interfaces ược tích hợp vào các thư viện.

Điều này làm giảm sự sao chép code và các lập trình viên có thể tập trung vào việc xây dựng.

  • Haskell 98, được phát hành vào cuối năm 1997, bao gồm một thư viện tiêu chuẩn đặc biệt cho mục đích giảng dạy và một khuôn khổ cho các phần mở rộng trong tương lai.
  • Haskell Prime, ra mắt vào năm 2006, là một quy trình mở, chính thức, liên tục để tinh chỉnh đặc tả ngôn ngữ của Haskell.
  • Haskell 2010 đã thêm một tính năng được gọi là FFI (giao diện chức năng nước ngoài), cho phép các chương trình Haskell sử dụng chức năng của các ngôn ngữ lập trình khác.