Có ứng dụng thực tế nào cho các mô hình lập trình không von Neumann không? Các ngôn ngữ lập trình không von Neumann được chấp nhận rộng rãi nhất là gì?
Có ứng dụng thực tế nào cho các mô hình lập trình không von Neumann không? Các ngôn ngữ lập trình không von Neumann được chấp nhận rộng rãi nhất là gì?
Câu trả lời:
Khi tôi nói "kiến trúc von Neumann", ý tôi là một số phần cứng bị giới hạn bởi "nút cổ chai von Neumann" - nghĩa là, tất cả dữ liệu được chuyển qua một số bus dữ liệu hẹp.
Các ngôn ngữ lập trình không phải von Neumann mà tôi thường gặp là VHDL và Verilog . Trong VHDL và Verilog, theo mặc định, mọi thứ xảy ra cùng một lúc. Các lập trình viên phải nỗ lực nhiều hơn để thực hiện một loạt các sự kiện xảy ra theo thứ tự liên tiếp. Điều đó rất khác với hầu hết các ngôn ngữ lập trình khác có nghĩa là "con trỏ lệnh", theo mặc định, thực thi tối đa một dòng mã bất kỳ lúc nào và lập trình viên phải nỗ lực nhiều hơn để có được nhiều thứ xảy ra cùng một lúc thời gian.
Một số người sẽ nói rằng đó là một mặc định tự nhiên hơn. Rất nhiều sinh viên lập trình bắt đầu mong đợi một vòng lặp "while (x> 0) {...}" để thoát khỏi thời điểm x trở thành bằng 0 và họ rất ngạc nhiên khi biết rằng máy tính không liên tục đánh giá tình trạng đó.
Hầu hết mọi người viết mã VHDL và Verilog biên dịch các chương trình của họ lên các GPU, tạo ra các khối hoạt động nhỏ, tất cả đều chạy ở tốc độ tối đa mọi lúc. Thông thường những người như vậy thiết lập một "đường ống" đọc dữ liệu từ các chân đầu vào, xử lý nó thông qua một loạt các khối, các chân đầu ra của một khối được nối trực tiếp với các chân đầu vào của khối tiếp theo và khối cuối cùng sẽ gửi kết quả ra các chân đầu ra. Nó gợi nhớ đến đường ống Unix , ngoại trừ một phần dữ liệu mới xuất hiện và một phần dữ liệu mới xuất hiện trên mỗi chu kỳ đồng hồ.
Các chân đầu vào, các giai đoạn trung gian và các chân đầu ra đều độc lập với nhau - bạn không phải sử dụng lại một bus dữ liệu duy nhất được ghép giữa các phần dữ liệu khác nhau.
Bạn cũng có thể quan tâm: Có kiến trúc máy tính nào khác ngoài kiến trúc von neumann / turing không?
Tôi giả sử không phải là Von Neumann, ý bạn là các ngôn ngữ đã bỏ qua "Von Neumann Bottleneck" theo bài viết của Backus "Lập trình có thể được giải phóng khỏi Phong cách Von Neumann không?". Đối với những người quan tâm, bạn có thể tìm thấy một bản sao ở đây: http://www.thocp.net/biographies/ con / backus_turingaward_lecture.pdf
Câu trả lời cho câu hỏi của bạn sẽ phải mơ hồ vì một vài lý do.
Đầu tiên, ngôn ngữ nào thỏa mãn các tiêu chí trong bài báo của mình? Mặc dù có những thứ theo dõi lập trình chức năng cho bài báo này, nhưng điều đó hiện được coi là một sự hiểu lầm vì ông có nghĩa là một cái gì đó giống như lập trình không có điểm. Vì vậy, bạn đi với sự hiểu lầm ban đầu, hoặc ý định thực sự của bài báo? Để biết thêm chi tiết về ý nghĩa của anh ấy, vui lòng xem phần sau: http://en.wikipedia.org/wiki/Function-level_programming
Thứ hai, nếu bạn đi với sự hiểu lầm, chức năng là chức năng như thế nào? Bạn có ngôn ngữ chức năng thuần túy, ngôn ngữ chức năng không tinh khiết và ngôn ngữ tương đối thân thiện với mô hình chức năng. Xem xét rằng bạn đề cập đến sự phổ biến và có mối quan hệ nghịch đảo giữa điều đó và độ tinh khiết chức năng, chỉ cần đưa vào những ngôn ngữ nào? Bạn có muốn ngôn ngữ chức năng thuần túy phổ biến nhất (hoàn toàn không phổ biến) hoặc ngôn ngữ phổ biến hơn đáp ứng một số tiêu chí tối thiểu của "chức năng" không? Nếu sau này, những tiêu chí đó là gì?
Vì vậy, tùy thuộc vào quan điểm của bạn:
Haskell là phổ biến nhất trong số các ngôn ngữ chức năng hoàn toàn thuần túy mà tôi biết và có những ứng dụng được viết trong đó. Tuy nhiên, mặc dù có trọng lượng lớn trong cộng đồng lập trình chức năng, nhưng nó không phổ biến trong cộng đồng lập trình lớn hơn. Ngoài ra, khi sử dụng nó, tôi không cảm thấy nó thực tế cho việc sử dụng trong thế giới thực và dường như nó có giá trị cho công việc lý thuyết. Nó không cho phép một kiểu không có điểm, vì vậy bạn có thể tiếp cận một số mục tiêu của Backus với điều đó.
Clojure, Scala và F # ít tinh khiết hơn, nhưng ngôn ngữ chức năng thực tế và phổ biến hơn. F # cũng thân thiện với phong cách không có điểm.
Forth có thể là ví dụ mẫu của ngôn ngữ không có điểm và nó khá phổ biến vào thời của nó, mặc dù bây giờ ... Factor là một ngôn ngữ không có điểm khác đã thu hút được sự chú ý, nhưng tôi nghi ngờ nó phù hợp với sự phổ biến của Forth vào thời hoàng kim. .
APL đã được Backus nhắc đến tại một thời điểm (có lẽ không phải trong bài viết của ông) là một bước tiến tới, nhưng không hoàn toàn tương thích với các mục tiêu của ông. Vào thời của nó, nó là lớn trong lĩnh vực tài chính. Hãy chắc chắn kiểm tra hậu duệ của nó, như J.
JavaScript không hoạt động, nhưng nó khá thân thiện đối với phong cách lập trình bậc cao hơn, bằng chứng là việc sử dụng rất nhiều các bao đóng. Với sự phổ biến của nó, nó có thể chỉ đáp ứng các tiêu chí. Hãy chắc chắn kiểm tra một số nội dung thú vị được thực hiện với JavaScript, như triển khai kết hợp và kết hợp.
Như một chú thích, để cho bạn thêm góc nhìn về mục tiêu của anh ấy, bạn có thể kiểm tra hai ngôn ngữ anh ấy thiết kế để đáp ứng tiêu chí của anh ấy. Chúng không phổ biến ở tất cả AFAIK, vì vậy điều này hoàn toàn là vì lợi ích của kiến thức:
Tôi nghĩ rằng Linda và lập trình tuplespace có thể phù hợp với dự luật. Kết hợp / mô hình khớp hoạt động bộ nhớ với đồng thời có nghĩa là (về mặt khái niệm) nút cổ chai Von-Neuman được loại bỏ.
Đi theo hướng đó, một ngôn ngữ mô hình Diễn viên thuần túy cũng mô hình hóa giao tiếp thay vì giải trình tự hướng dẫn. Và mặc dù chúng là các hình thức và không phải là ngôn ngữ lập trình thực tế, các phép tính xử lý như phép tính Pi, giao tiếp mô hình CSP và Petri Nets theo các cách liên quan.
Xem wikipedia để biết các liên kết (Tôi là người dùng mới và được bảo vệ chống spam), nhưng để biết một chút hài hước ngụy biện về tên của Linda, hãy đọc http://c2.com/cgi/wiki?LindaEtymology .