Sự cần thiết phải học mở rộng ngôn ngữ haskell cho sản xuất


10

Ngôn ngữ cốt lõi của Haskell thực sự đơn giản. Đến từ nền tảng OO, khó khăn chính là thích nghi với mô hình chức năng thuần túy.

Trong khi học Haskell "cơ bản", tôi luôn coi các phần mở rộng ngôn ngữ là đồ chơi cho người CS hoặc là thử nghiệm cho các phiên bản ngôn ngữ trong tương lai (như from future import ???trong python).

Tuy nhiên, khi tôi bắt đầu xem xét các khung web như Yesod, tôi thấy rằng rất nhiều tệp nguồn yêu cầu giữa 3 và 4 phần mở rộng. Một số trông khá đơn giản (StringOverload). Những thứ khác thực sự đáng sợ (GADT, Type Famillies, Template Haskell). Tài liệu của họ liên kết đến các tài liệu nghiên cứu, điều đáng sợ đối với ai đó muốn học "chỉ" một thư viện mới.

Có nhất thiết phải học các phần mở rộng ngôn ngữ GHC để có hiệu quả trong Haskell không? Nếu bạn thuê một nhà phát triển Haskell cho một ứng dụng sản xuất, bạn có hỏi kiến ​​thức như vậy không?


Câu trả lời:


7

Có nhất thiết phải học các phần mở rộng ngôn ngữ GHC để có hiệu quả trong Haskell không?

Đúng. Và điều đó đúng với bất kỳ ngôn ngữ / công cụ nào. Với kiến ​​thức cốt lõi / cơ bản, bạn có thể giải quyết các vấn đề của cuộc thi trực tuyến, có thể là dự án đại học nhỏ, nhưng chắc chắn không phải là ứng dụng trong thế giới thực.

Nếu bạn thuê một nhà phát triển haskell cho một ứng dụng sản xuất, bạn có hỏi kiến ​​thức như vậy không?

Điều đó bây giờ phụ thuộc vào việc bạn có một số người với bạn có thể chia sẻ kiến ​​thức này. Nếu có, thì người đó có thể tăng cường nhân viên mới. Nếu không thì bạn phải có được người có kiến ​​thức như vậy trước. Và một lần nữa điều này đúng với các công nghệ mới.

Dĩ nhiên bạn cũng có thể cố gắng thuê những người có kiến ​​thức sâu rộng như vậy ở Haskell. Nhưng Haskell còn khá mới trong ngành và xem xét rất ít dự án thương mại đã được thực hiện xung quanh nó, việc tìm kiếm người như vậy sẽ khó khăn. Cách hiệu quả để xây dựng một nhóm các chuyên gia ở Haskell, sẽ là thuê những người biết cơ bản và sẵn sàng làm việc tại Haskell, sau đó giáo dục họ.


Tôi định phản kháng, nhưng sau đó tôi thấy Real World Haskell dạy nhiều ngôn ngữ mở rộng. Cảm ơn về câu trả lời của bạn.
Simon Bergot

2
"Và điều đó đúng với mọi ngôn ngữ / công cụ" - điều đó hoàn toàn sai. Nói, lấy các ngôn ngữ như Java, C #, C ++ - không ngôn ngữ nào trong số chúng có phần mở rộng ngôn ngữ thường được tìm thấy trong mã ứng dụng trong thế giới thực. Nếu bạn phải sử dụng tiện ích mở rộng ngôn ngữ mỗi lần bạn cần viết bất cứ điều gì tầm thường hơn "giải pháp cho vấn đề cuộc thi trực tuyến", theo tôi, có điều gì đó rất sai với thông số ngôn ngữ.
Malcolm

@Malcolm Tại sao bạn thấy "Nếu bạn phải sử dụng tiện ích mở rộng ngôn ngữ mỗi khi bạn cần viết bất cứ điều gì tầm thường hơn" giải pháp cho vấn đề cuộc thi trực tuyến ", theo tôi, có điều gì đó rất sai với thông số ngôn ngữ." có đúng không Đặc điểm của một phần mở rộng làm cho nó tiêu cực là gì? Tôi sử dụng ghc và các phần mở rộng được cung cấp. Thêm một phần mở rộng cho một dự án hiện có có vẻ nặng nề như thêm một thư viện khác.
Davorak

2
@Davorak Bởi vì thay vì một ngôn ngữ, chúng tôi có hàng trăm kết hợp tiện ích mở rộng khác nhau và bạn không biết gì về việc liệu mã sẽ được biên dịch trên một trình biên dịch nhất định. Phần mở rộng làm cho mã không di động. Và điều này cũng khiến ngôn ngữ trở nên khó học vì thay vì một bộ tính năng mà mọi người sử dụng, có rất nhiều tính năng bổ sung, và bạn không có manh mối nào bạn phải biết và sử dụng và những tính năng nào tồn tại bởi vì các nhà nghiên cứu đang vui vẻ
Malcolm

2
@Davorak Đó chính xác là vấn đề tôi đang nói đến: mọi người đều sử dụng GHC, vì đây là trình biên dịch duy nhất vẫn được duy trì tích cực. Các trình biên dịch khác không thể theo kịp, vì vậy không ai có thể sử dụng chúng và có rất ít lý do để đầu tư vào chúng. Đối với các thư viện: bạn chọn các thư viện cho vấn đề và chỉ làm việc với chúng. Giả sử, nếu bạn cần đọc XML, bạn chỉ cần một thư viện đọc XML. Tuy nhiên, với các tiện ích mở rộng, không rõ ràng khi bạn cần. Mặc dù có một vấn đề với các thư viện quá. Giả sử, trong Java chỉ có các mảng và bộ sưu tập và trong Haskell có rất nhiều thư viện mảng.
Malcolm
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.