Một kiến ​​trúc phi von Neumann thực tế là gì?


16

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ì?


6
mô hình lập trình "non-von Neumann" là gì?
Suresh Venkat

Tôi cũng không hiểu câu hỏi, có lẽ bạn có thể thêm một số nền tảng cho câu hỏi để dễ hiểu hơn những gì bạn đang hỏi.
Kaveh

3
kiến trúc von neumann có CPU. do đó, một kiến ​​trúc xử lý song song được cho là không phải von Neumann (kiến trúc neumann được phát minh trước khi xử lý song song). nhưng đồng ý câu hỏi có vẻ mơ hồ hoặc mơ hồ - được định nghĩa. von neumann đề cập đến một kiến ​​trúc máy tính, không thực sự chính xác là một mô hình lập trình. mô hình lập trình và kiến ​​trúc cpu / máy tính tồn tại trong một loại sức mạnh tổng hợp / cộng sinh nhưng cũng hơi độc lập với nhau .... các kiến ​​trúc khác nhau có thể thực hiện các mô hình lập trình khác nhau mà không cần mô hình lập trình được "ghép" với kiến ​​trúc ...
vzn

1
Ngôn ngữ lập trình không von Neumann là gì? Đối với vấn đề đó, ngôn ngữ lập trình von Neumann là gì? (Tôi không tìm thấy định nghĩa của Backus --- về cơ bản là "ngôn ngữ bắt buộc" --- thậm chí là một chút hấp dẫn.)
Jeffε

1
@Ronny: Trang Wikipedia chỉ là bài viết của Backus.
Jeffε

Câu trả lời:


12

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à VHDLVerilog . 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?


11

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:

  1. 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 đó.

  2. 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.

  3. 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. .

  4. 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.

  5. 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:

http://en.wikipedia.org/wiki/FP_(programming_lingu )

http://en.wikipedia.org/wiki/FL_(programming_lingu )


1
Bây giờ có vẻ như anh ta có ý gì đó giống như lập trình không có điểm hơn là lập trình chức năng - có con trỏ nào để thảo luận về vấn đề này không? Nghe có vẻ thú vị.
Suresh Venkat

Mô hình lập trình của Backus được gọi là "Lập trình cấp hàm" và có một bài viết ở đây: en.wikipedia.org/wiki/Function-level_programming . Tôi không biết bất kỳ liên kết thực sự tốt nào (tôi rất muốn biết nếu bạn tìm thấy bất kỳ liên kết nào!), Nhưng "Lập trình cấp chức năng" của Google cho thấy một số liên kết tìm kiếm thú vị, bao gồm cả video.
Ronny

1
@SureshVenkat: Các ngôn ngữ FP và FL được Backus tạo ra đặc biệt để hỗ trợ ý tưởng của ông về lập trình cấp chức năng. Xem thêm "lập trình ngầm" và cụ thể hơn là ngôn ngữ J , kết hợp APL và FP / FL để tạo ra thứ có thể là ngôn ngữ có mục đích chung khó hiểu nhất và có ý nghĩa nhất trong sử dụng thực tế. Tôi cũng nhớ lại một bài đăng trên SO về việc sử dụng lập trình ngầm trong các ngôn ngữ chức năng.
CA McCann

Ngẫu nhiên, niên đại trong bài này dường như tắt đáng kể. Lập trình chức năng (theo cả truyền thống Lisp và ML) từ lâu trước bài giảng Giải thưởng Turing của Backus, cũng như hầu hết hoặc tất cả các mô hình lập trình hiện có - bao gồm cả lập trình cấp chức năng, dưới dạng Logic kết hợp , trước cả tính toán lambda của Church và Turing làm việc trên lý thuyết tính toán! (Oh, và tôi muốn nhiều hơn sử dụng Haskell cho các mục đích thực tế thực tế hơn là một hành động tàn bạo như Javascript.)
CA McCann

@camccann Tôi không bao giờ đặt thời gian trong bài. Ngoài ra, Lisp quá rộng để hỗ trợ bất kỳ khiếu nại nào. Ví dụ, không phải tất cả Lisps đều hoạt động vì không phải tất cả đều là đệ quy đuôi. Tôi thích tài liệu tham khảo của bạn về Logic kết hợp, nhưng tôi nghĩ rằng quan điểm của Backus là có một ngôn ngữ mà người ta có thể lập trình cho một máy tính hỗ trợ mô hình. Do đó, trong khi Logic kết hợp làm sáng tỏ lập luận của anh ta, cuối cùng nó không ảnh hưởng đến quan điểm của anh ta.
Ronny

2

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 .

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.