6

Có vẻ như có một chuyển động mạnh mẽ cho sự hội tụ của toán học và ngôn ngữ lập trình máy tính, điều này đáng chú ý là ảnh hưởng của phép tính lambda trên ngôn ngữ hiện đại. Hầu hết thời gian tôi không nghĩ đến toán học, tôi nghĩ với logic. Dường như với tôi rằng nhiều hiện tượng có thể được mô hình toán học có thể được mô hình hóa một cách logic.Sự hội tụ của Toán học và Ngôn ngữ lập trình

Tôi không nghĩ rằng chúng ta sẽ thấy một ngôn ngữ hoàn toàn hợp lý hoặc một ngôn ngữ thuần túy đạt được cho lập trình mục đích chung, nhưng tôi muốn kiểm kê các lợi ích của mỗi mô hình. Tôi muốn biết:

  • Lợi ích của việc lập mô hình ngôn ngữ lập trình hoặc các tính năng ngôn ngữ về toán học là gì?
  • Lợi ích của việc lập mô hình ngôn ngữ trên nguyên tắc logic chính thức là gì?
  • Ngôn ngữ có mục đích chung có thể là logic hoặc toán học không?
  • Một số ngôn ngữ thực sự thể hiện lợi ích của một trong hai cách tiếp cận là gì?
  • Tính năng phần cứng nào làm cho một cách tiếp cận hấp dẫn hơn so với các tính năng khác?
+14

Logic là toán học. Trong thực tế, nó là một thành phần quan trọng cho toán học rời rạc. Và nếu bạn là một nhà khoa học máy tính hoặc kỹ sư phần mềm, bạn nên có ít nhất một chút thoải mái khi làm việc với toán học rời rạc. –

+0

Tôi hiểu mối quan hệ ở cấp cơ bản nhất, tôi thực sự tò mò hơn về biểu thức ở cấp độ người dùng. – jessecurry

+3

Tôi không thấy sự phân biệt rõ ràng giữa logic và toán học mà bạn thấy rõ ràng. Rõ ràng, các công cụ tính toán liên quan đến tính toán số học toán học nhiều hơn logic, nhưng đối với các chủ đề nâng cao hơn, thì các mục nghiên cứu là trừu tượng phức tạp, đặt chúng vào giỏ "logic" hoặc "toán học" có vẻ như một sự lựa chọn tùy ý. – harms

Trả lời

8

Trước hết, tôi không thấy nhiều sự phân biệt giữa logic và toán học; cái sau chỉ là cái trước được áp dụng một cách có hệ thống cho các cấu trúc cụ thể. Ngoài ra, tôi không tin rằng vẻ đẹp lý thuyết của ngôn ngữ lập trình căn cứ vào toán/logic thực sự đáng giá khi nói đến việc hoàn thành công việc bằng cách viết mã hiệu quả, bảo trì.

Đối với các câu hỏi cụ thể của bạn.

Lợi ích của việc lập mô hình ngôn ngữ lập trình hoặc ngôn ngữ các tính năng về toán học là gì? Lợi ích của việc lập mô hình ngôn ngữ trên nguyên tắc logic chính thức là gì?

Bằng chứng về tính chính xác trở nên dễ dàng hơn nhiều - mặc dù nó có vấn đề cho dù chúng ta sẽ đến điểm chúng trở nên thực tế cho các hệ thống thực tế.

Ngôn ngữ chung có thể bỏ qua logic hoặc toán học?

Phụ thuộc vào ý bạn với "forgo".Bạn có thể có một ngôn ngữ không có các phép toán (mặc dù bạn phải có được các esotheric tuyệt vời; các máy Turing là cái duy nhất tôi có thể nghĩ là thậm chí không có tăng hoặc giảm), và bạn chắc chắn có một thứ không quan tâm đến các hình thức (Assembler, C). Nhưng tôi không nghĩ rằng có thể có một ngôn ngữ lập trình mà không có logic (mặc dù nó có thể là một logic biến thái, xem Malbolge)

Một số ngôn ngữ thực sự thể hiện lợi ích của một trong hai cách tiếp cận là gì?

Vâng, nếu bạn xem xét tính toán Lambda một dạng logic, thì Lisp đã thể hiện lợi ích của nó khá tốt bằng từ năm 1958 ngôn ngữ mà ngôn ngữ biểu đạt khác khao khát (nhưng không quản lý) để tiếp cận.

Sau đó, có Prolog, ngôn ngữ "nghiêm trọng" duy nhất khác mà tôi biết cố gắng căn bản một cách rõ ràng trong logic chính thức. Và - quelle ngạc nhiên - nó rất tốt ở những thứ logic và ít khác.

Tính năng phần cứng nào giúp cho một cách tiếp cận hấp dẫn hơn so với các tính năng khác?

Không có. Sự thất bại của Lisp Machines chứng minh IMO khá thuyết phục rằng các trình biên dịch + phần cứng chung mạnh hơn phần cứng chuyên dụng. Tuy nhiên, người ta có thể nói rằng sức mạnh vũ phu simpe của hệ thống ngày nay đang làm cho các ngôn ngữ hoàn toàn bỏ qua những ràng buộc phần cứng thực tế mà trước đây họ không có.

+1

Tôi sẽ nói rằng Haskell cũng nghiêm túc về việc được căn cứ một cách rõ ràng trong logic, như là (Standard) ML. Nếu không, bình luận rất tốt. – harms

2

vì khoa học máy tính là một nhánh đặc biệt của toán học - không có sự hội tụ của toán học và ngôn ngữ lập trình. Một ngôn ngữ lập trình được áp dụng toán học. Đó là một công cụ được tạo ra bởi những người có kiến ​​thức sâu sắc về toán học được sử dụng bởi những người khác (phần lớn thời gian với kiến ​​thức ít sâu sắc hơn). Bạn có thể so sánh nó với một công tắc đèn - bạn có thể sử dụng nó mà không cần nghiên cứu vật lý nhưng nó vẫn được áp dụng vật lý. Đôi khi (đặc biệt là nếu bạn có một vấn đề) nó là cần thiết để có "kiến thức". Sau đó, bạn cần nền đặc biệt.

+0

nhưng những người bật đèn (viết PHP) cũng sẽ không được thuê làm nhà khoa học tên lửa (viết Haskell), và tôi nghĩ sự chia rẽ này sẽ tăng lên như thế nào ảnh hưởng đến ngành trong tương lai, giống như các thượng cổ nhưng bây giờ họ cần độ và hơn 9 năm - vì vậy tôi đoán sự hội tụ ở đây có nghĩa là sự hội tụ của nghề * với toán học không nhiều CS (vì CS đã * là * toán học). –

1

Thực ra, rất nhiều thứ được gọi là "ngôn ngữ lập trình hiện đại" này chỉ là những thứ đã được viết bằng nhiều ngôn ngữ lập trình khác nhau trong hơn 50 năm.

+0

Thật vậy. Lisp ban đầu được xác định vào năm 1958, dựa trên phép tính lambda. APL, được định hướng rất nhiều cho các hoạt động ma trận, đã có sẵn cho IBM 1130 vào năm 1967. –

+0

Những phần nào của Haskell, OCaml và các hệ thống kiểu khác đã có sẵn 50 năm trước hoặc bất cứ nơi nào thậm chí gần? –

1

Lợi ích của việc lập mô hình ngôn ngữ lập trình hoặc các tính năng ngôn ngữ về toán học là gì? Lợi ích của việc lập mô hình ngôn ngữ trên nguyên tắc logic chính thức là gì?

Đây là những điều tương tự: logic chính thức chỉ là một nhánh của toán học. Hai lợi ích chính của việc sử dụng toán học chính thức là tối ưu hóa và an toàn. Khi một thuật toán không có tác dụng phụ (tức là tham chiếu trong suốt), và được thể hiện chỉ bằng cách sử dụng trình biên dịch toán học thuần túy có thể cấu trúc lại thuật toán theo các quy tắc của toán học. Điều này giúp các trình biên dịch dễ dàng tối ưu hóa mã và khai thác kiến ​​trúc song song. Một lợi ích quan trọng khác là khả năng chứng minh các thuộc tính nhất định của mã.

Ngôn ngữ chung có thể bỏ qua logic hoặc toán học?

No. Bạn sẽ làm các phép toán boolean hoặc số học không logic hoặc toán học như thế nào. Bạn có thể có ý nghĩa gì đó ở đây mà tôi không hiểu.

Một số ngôn ngữ thực sự thể hiện lợi ích của một trong hai cách tiếp cận là gì?

Haskell, ML, OCaML, Miranda, Alice, Oz, Erlang, Twelf, Coq, Prolog, tất cả đều chứng minh các ứng dụng nghiêm ngặt hơn về toán học để lập trình.

Tính năng phần cứng nào giúp cho một cách tiếp cận hấp dẫn hơn so với các tính năng khác?

Tôi không tin rằng phần cứng thay đổi nhiều thứ về lợi ích của các phương pháp toán học nghiêm ngặt để lập trình.Những lợi ích của mã trong suốt liên quan chủ yếu là ở cấp độ của trình biên dịch.