Sự khác nhau giữa mô hình lập trình và mô hình lập trình?


8
  1. Mối quan hệ và sự khác biệt giữa mô hình lập trình và mô hình lập trình là gì? (đặc biệt khi nói về mô hình lập trình và mô hình lập trình cho ngôn ngữ lập trình.)

  2. Wikipedia cố gắng trả lời câu hỏi của tôi trong 1:

    Các mô hình lập trình cũng có thể được so sánh với các mô hình lập trình là sự trừu tượng của các hệ thống máy tính. Ví dụ: "mô hình von Neumann" là mô hình lập trình được sử dụng trong các máy tính tuần tự truyền thống. Đối với điện toán song song, có nhiều mô hình có thể phản ánh các cách khác nhau mà các bộ xử lý có thể được kết nối với nhau. Phổ biến nhất là dựa trên bộ nhớ chia sẻ, bộ nhớ phân tán với thông điệp truyền qua hoặc kết hợp cả hai.

    Nhưng tôi không hiểu nó:

    • Có phải không chính xác khi trích dẫn trong Wikipedia nói rằng "mô hình" von Neumann "là một mô hình lập trình", bởi vì tôi hiểu rằng mô hình Von Neumann là một mô hình kiến ​​trúc từ https://en.wikipedia.org/wiki/Von_Neumann_arch architecture ?

    • Các mô hình lập trình song song "thường phản ánh các cách khác nhau mà các bộ xử lý có thể được kết nối với nhau"? Hay là các mô hình kiến ​​trúc song song "phản ánh các cách khác nhau mà bộ xử lý có thể được kết nối với nhau"?

  3. Để trả lời câu hỏi trong 1, bạn có thể làm rõ mô hình lập trình là gì không?

    Có đúng không khi một mô hình lập trình được cung cấp / triển khai bởi ngôn ngữ lập trình hoặc thư viện API và việc triển khai đó không phải là duy nhất?

    Từ cuốn sách Lập trình song song của Rauber , "mô hình lập trình" là một bản tóm tắt bên trên "mô hình tính toán (tức là mô hình tính toán)" lần lượt nằm trên "mô hình kiến ​​trúc". Tôi đoán rằng một mô hình lập trình không chỉ được sử dụng trong điện toán song song mà dành cho ngôn ngữ lập trình hoặc thư viện API.

Câu trả lời:


5

Một mô hình lập trình được ngụ ý bởi kiến ​​trúc hệ thống. Nếu kiến ​​trúc hệ thống của bạn là một máy đăng ký, mô hình lập trình của bạn sẽ bao gồm các hoạt động mã máy trên các thanh ghi. Nếu kiến ​​trúc của bạn là một máy xếp, mô hình lập trình của bạn sẽ bao gồm các hoạt động ngăn xếp. Một kiến ​​trúc Von Neumann và một kiến ​​trúc Harvard sẽ có các mô hình lập trình khác. Tự sửa đổi mã pe sẽ có thể có trong kiến ​​trúc Von Neumann nhưng không phải trong kiến ​​trúc Harvard.

Một mô hình lập trình cao hơn: đó là cách một vấn đề được mô hình hóa (mệnh lệnh hoặc khai báo, hướng đối tượng, chức năng, logic, ...). Một ngôn ngữ mô hình duy nhất hỗ trợ một trong những ngôn ngữ này. Các ngôn ngữ đa âm là một loại quân đội Thụy Sĩ, đưa các yếu tố ra khỏi nhiều mô hình hơn.

Mỗi kiến ​​trúc (và mô hình tương ứng) sẽ có bộ hướng dẫn mã máy riêng. Bản thân ngôn ngữ mã máy này sẽ tuân theo mô hình bắt buộc (làm điều này, làm điều đó, đọc thanh ghi A, thêm giá trị để đăng ký B, ... hoặc đặt một giá trị lên trên cùng ngăn xếp, đặt một giá trị khác lên trên ngăn xếp, thêm hai giá trị lên trên ..., v.v ...)

(Ít nhất tôi chưa bao giờ thấy một bộ xử lý phần cứng không bắt buộc)

Một ngôn ngữ cấp cao (của bất kỳ mô hình nào) sẽ được biên dịch hoặc giải thích theo mã máy này.

Về tính song song: Nếu chúng ta xem xét các bộ xử lý được kết nối với nhau, rõ ràng cách chúng kết nối sẽ là một phần của mô hình lập trình. Một pe transputer INMOS cũ kết nối với bốn bộ chuyển đổi khác. Mã máy sẽ có hướng dẫn để liên lạc với các bộ chuyển đổi cần thiết.

Nhưng cũng trên các hệ thống gần đây, cách cung cấp loại trừ lẫn nhau sẽ phải được giải quyết ở mức độ thấp. Trên một hệ thống xử lý, chúng ta sẽ phải bật và tắt các ngắt khi rời hoặc vào phần quan trọng. Trên hệ thống đa bộ xử lý, chúng ta sẽ cần một lệnh 'kiểm tra và thiết lập' đơn sắc. Đây là một phần của mô hình lập trình.

Các mô hình điện toán song song là các mô hình cấp cao để sử dụng song song. Hãy suy nghĩ về các ngôn ngữ có các đối tượng luồng, hoặc sử dụng semaphores và giám sát như các yếu tố ngôn ngữ.

Khi chúng tôi lập trình trên các hệ điều hành khác nhau, các API khác nhau sẽ được sử dụng. (hoặc thậm chí nếu chúng tôi lập trình trên cùng một hệ thống nhưng chúng tôi sử dụng một thư viện khác - thư viện đồ họa pe). Điều này sẽ thay đổi mô hình lập trình của chúng tôi. mã cấp thấp sẽ khác nhau, nhưng nếu có sự trừu tượng hóa tốt (loại mã một lần, biên dịch ở bất cứ đâu) thì điều này sẽ vô hình trong ngôn ngữ cấp cao. Nếu không, bạn sẽ phải thực hiện những thay đổi nhỏ trong mã của mình. Nhưng vì bạn sẽ sử dụng cùng một ngôn ngữ cấp cao, nên sẽ không có thay đổi về mô hình.


4

Không có câu trả lời chính xác cho câu hỏi của bạn. Các thuật ngữ "mô hình lập trình" và "mô hình lập trình" không phải là thuật ngữ kỹ thuật chính xác có định nghĩa cố định. Tùy thuộc vào ngữ cảnh, một số tác giả có thể định nghĩa "mô hình lập trình" theo một cách cụ thể nào đó, nhưng điều đó thường sẽ chỉ bao gồm một số khía cạnh của những gì mọi người hiểu trong "mô hình lập trình".

Như một quy tắc tốt, bạn nên chạy trốn khỏi bất cứ ai sử dụng từ "mô hình". (Tôi là một sinh viên tốt nghiệp khi từ này bị lạm dụng quá mức.)

Tuy nhiên, vẫn rất hữu ích khi sử dụng các cụm từ này, mặc dù chúng không chính xác lắm. Chúng rất hữu ích trong việc giải thích và tổ chức các khía cạnh khác nhau của tính toán. Nhưng hãy nhớ rằng không có định nghĩa toán học được chấp nhận hoàn toàn bao gồm việc sử dụng. Do đó, nếu bạn hỏi những câu hỏi rất chính xác, bạn sẽ không nhận được câu trả lời rất chính xác, mà là những ý kiến ​​và giải thích hữu ích.

Cụ thể, bạn đã hỏi: "Mối quan hệ và sự khác biệt giữa mô hình lập trình và mô hình lập trình là gì?" Chà, điều đó phụ thuộc vào người bạn hỏi và bạn sống trong thập kỷ nào. Đây là từ điển của tôi nói:

mô hình - một thế giới quan cơ bản về lý thuyết và phương pháp luận của một chủ đề khoa học cụ thể

mô hình - một mô tả đơn giản, đặc biệt là mô hình toán học, của một hệ thống hoặc quy trình, để hỗ trợ các tính toán và dự đoán

Vì vậy, một mô hình là một khái niệm rộng hơn so với một mô hình. Trong mọi trường hợp, tôi khuyên bạn không nên nghĩ về câu hỏi của bạn là một trong những môn khoa học bởi vì nó không phải là.


1

Programming models thu hẹp khoảng cách giữa các hardware architecturelớp phần mềm cơ bản và hỗ trợ có sẵn cho các ứng dụng.

Programming models khác với cả programming languages và application programming interfaces ( APIs). Cụ thể, một mô hình lập trình là một sự trừu tượng của hệ thống máy tính cơ bản cho phép biểu hiện của cả algorithms và data structures.

So sánh, các ngôn ngữ và API cung cấp việc triển khai các khái niệm trừu tượng này và cho phép các thuật toán và cấu trúc dữ liệu được đưa vào thực tế - một mô hình lập trình tồn tại độc lập với sự lựa chọn của cả ngôn ngữ lập trình và API hỗ trợ.

Các mô hình lập trình thường tập trung vào việc đạt được năng suất, hiệu suất và tính di động của các nhà phát triển đối với các thiết kế hệ thống khác. Bản chất thay đổi nhanh chóng của kiến ​​trúc bộ xử lý và sự phức tạp của việc thiết kế một nền tảng exascale cung cấp những thách thức đáng kể cho các mục tiêu này. Một số yếu tố khác có khả năng ảnh hưởng đến việc thiết kế các mô hình lập trình trong tương lai.

Nguồn https://asc.llnl.gov/content/assets/docs/exascale-pmWG.pdf , "Mô phỏng và tính toán nâng cao" (vũ khí hạt nhân)

Thêm trên twitter: #ProgrammingModel

Mô hình lập trình

Imperative Programming với một chuỗi rõ ràng của các lệnh cập nhật trạng thái.

Declarative Programming bằng cách chỉ định kết quả bạn muốn, không phải làm thế nào để có được nó.

Structured Programming với các cấu trúc điều khiển lồng nhau, sạch sẽ, không có goto.

Procedural Imperative programming với các cuộc gọi thủ tục.

Functional (Applicative) Programming với các cuộc gọi chức năng mà tránh bất kỳ nhà nước toàn cầu.

Event-Driven Programming với người phát và người nghe các hành động không đồng bộ.

Flow-Driven Programming các quá trình giao tiếp với nhau qua các kênh được xác định trước.

Logic (Rule-based) Programmingbằng cách chỉ định một tập hợp các sự kiện và quy tắc. Một động cơ đặt câu trả lời cho câu hỏi.

Nguồn https://cs.lmu.edu/~ray/notes/paradigms/

Suy nghĩ thông qua các định nghĩa này giúp đưa ra câu trả lời cho câu hỏi.

Một cách để lý luận là nói rằng programming models gần với thiết kế của một hệ thống / ứng dụng hơn và có thể được tạo từ một hoặc nhiều programming paradigms gần với ngôn ngữ lập trình.

Điều này có thể được nhìn thấy rất rõ trong các ứng dụng khoa học dữ liệu trong đó một số công nghệ được sử dụng, mỗi công nghệ có một công nghệ riêng programming paradigm, nhưng nhìn chung hệ thống mà kiến ​​trúc sư nên giữ một sự gắn kết programming model.

Thông tin thêm về cách suy luận này: https://twitter.com/semanticbeeng/status/1103027054302425089?s=20

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.