Ý nghĩa thực tiễn của lý thuyết loại đồng luân trong lập trình là gì?


11

Tôi mới bắt đầu học Haskell, sau khi đến từ thế giới JavaScript / Ruby. Tôi đã xem qua https://github.com/HoTTcuốn sách Lý thuyết loại Homotopy , mà tôi rất háo hức đọc.

Tuy nhiên, tôi sẽ học các khái niệm lý thuyết toán học và loại khi tôi đi, vì vậy có vẻ như sẽ mất một thời gian dài trước khi tôi hiểu lý thuyết loại đồng luân sẽ có ý nghĩa gì đối với một lập trình viên thực hành.

Bạn có thể mô tả những gì tác động loại lý thuyết đồng luân sẽ có trong lập trình trong thực tế, cho một giáo dân? Ví dụ, nó sẽ làm cho những điều nhất định dễ dàng hơn để viết dễ dàng hơn? Nếu vậy, những điều gì? Hay nó sẽ cho phép bạn làm những điều mới trong lập trình mà trước đây không thể có? Nếu vậy, những điều gì?

Cảm ơn, rất mong được quấn đầu tôi ở mức độ cơ bản hơn.


Tôi hy vọng rằng nó là, và sẽ luôn luôn không thể hiểu được đối với các lập trình viên thực hành. Tốt nhất, chúng ta có thể có được trình biên dịch nhanh hơn hoặc hộp đen ma thuật tận dụng lợi thế của toán học-fu.
Telastyn

Haha đây là những gì tôi đã nghĩ cho đến nay quá. Mặc dù vậy, tôi vẫn đang tự hỏi, đây có phải là câu trả lời hay có điều gì vượt quá những gì bạn đã nói không? Ví dụ, cơ sở dữ liệu có thể được hưởng lợi từ điều này? Hoặc bất cứ điều gì như thế.
Lance Pollard

1
Tôi không có ý kiến. Tôi đọc bản tóm tắt và nhanh chóng bỏ nó vào thùng cho mumbo-jumbo học thuật khó hiểu.
Telastyn


4
@Telastyn: Nếu bạn tải xuống một cuốn sách bằng tiếng Bồ Đào Nha, nó cũng sẽ không thể hiểu được miễn là bạn chưa cố gắng học ngôn ngữ. Tại sao công khai tố cáo sách Bồ Đào Nha bằng thuật ngữ xúc phạm mumbo-jumbo ? Động lực của Gôdels để giới thiệu các chức năng đệ quy nguyên thủy là cực kỳ hàn lâm, đặc biệt bởi vì thế giới thậm chí không chạy bất kỳ chương trình nào trong 30 '. Tôi không nghĩ chỉ vì một người là một lập trình viên thực hành, các chủ đề học thuật sẽ "luôn luôn không thể hiểu được" đối với khả năng của bạn.
Nikolaj-K

Câu trả lời:


15

Một trong những điều mạnh mẽ mà trình biên dịch có thể thực hiện trong giai đoạn tối ưu hóa của chúng là trao đổi các biểu diễn không hiệu quả cho các trình tương đương. Ví dụ, trong Haskell, bạn có thể sử dụng danh sách lười biếng để tính tổng các số, nhưng trình biên dịch GHC Haskell sẽ nhận ra rằng điều này tương đương với việc sử dụng phép lặp với biến tạm thời. Bằng cách đó, bạn có thể lập trình chống lại sự trừu tượng đơn giản, dễ lý do, trong khi khả năng thực thi của bạn tận dụng lợi thế của một đại diện phù hợp hơn với nền tảng phần cứng (và điều đó khó xảy ra hơn ở quy mô).

Tuy nhiên, các tương đương được biết đến với trình biên dịch hầu hết bị giới hạn ở các cấu trúc dữ liệu được biết đến và nghiên cứu, chẳng hạn như hợp nhất luồng cho danh sách. Bạn có thể xác định các tương đương của riêng mình trong mã nguồn (sử dụng một cặp hàm chuyển đổi hợp thành nhận dạng theo một trong hai hướng), nhưng bạn phải áp dụng chúng theo cách thủ công và có thể gặp khó khăn khi chọn đúng loại để sử dụng ở mọi nơi để tránh chuyển đổi quá mức.

Bây giờ hãy tưởng tượng một thế giới nơi bạn có thể định nghĩa "các loại quy nạp cao hơn", giả sử một bản đồ tra cứu chính tắc. Loại này có một số hàm tạo cho các loại bản đồ khác nhau: tìm kiếm nhị phân, AVL, đỏ-đen, Trie, Patricia, v.v. chuyển đổi cung cấp các kích thước khác nhau của hiệu quả (nghĩa là thời gian so với bộ nhớ).

Điều gì sẽ xảy ra nếu trình biên dịch có thể sử dụng khái niệm này để viết lại các biểu diễn bản đồ một cách trong suốt, giống như cách mà nó có thể làm ngày nay với phản ứng tổng hợp danh sách? Trong khi đó, trong mã của bạn, bạn có thể làm việc với cấu trúc đơn giản nhất để lý do (và làm cho công việc chứng minh dễ dàng hơn, nếu bạn ở trong một môi trường như vậy). Điều này nghe có vẻ giống như một giao diện trừu tượng với nhiều triển khai, nhưng nó bao gồm quyền tự do lựa chọn bất kỳ triển khai nào và có trình biên dịch thay thế một cách trong suốt khi cần, mà không ảnh hưởng đến ý nghĩa của chương trình.

HoTT cung cấp cho chúng ta một nền tảng lý thuyết loại để biện minh cho cơ chế viết lại ưa thích này và các loại được xác định phong phú này, bởi vì nó thúc đẩy khái niệm tương đương là tương đương với bình đẳng. Vẫn còn phải xem điều này sẽ thực sự diễn ra như thế nào trong thực tế, nhưng nó cho chúng ta khung lý thuyết để dựa vào đó để làm việc trong tương lai.

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.