Diferenças entre modelo de programação e paradigma de programação?

8
  1. Qual é a relação e a diferença entre um modelo de programação e um paradigma de programação? (especialmente ao falar sobre o modelo de programação e o paradigma de programação para uma linguagem de programação.)

  2. A Wikipedia tenta responder à minha pergunta em 1:

    Os paradigmas de programação também podem ser comparados com modelos de programação que são abstrações de sistemas de computador. Por exemplo, o "modelo von Neumann" é um modelo de programação usado em computadores seqüenciais tradicionais. Para a computação paralela, existem muitos modelos possíveis que refletem diferentes maneiras pelas quais os processadores podem ser interconectados. Os mais comuns são baseados em memória compartilhada, memória distribuída com passagem de mensagens ou um híbrido dos dois.

    Mas eu não entendo isso:

    • É incorreto que a citação na Wikipedia diga "o 'modelo de von Neumann' é um modelo de programação", porque eu entendo que o modelo de Von Neumann é um modelo de arquitetura de https://en.wikipedia.org/wiki/Von_Neumann_architecture ?

    • Os modelos de programação paralela "refletem tipicamente diferentes maneiras pelas quais os processadores podem ser interconectados"? Ou os modelos arquitetônicos paralelos "refletem diferentes maneiras pelas quais os processadores podem ser interconectados"?

  3. Para responder à pergunta em 1, você poderia esclarecer o que é um modelo de programação?

    É correto que um modelo de programação fornecido / implementado por uma linguagem de programação ou biblioteca de APIs, e essa implementação não seja única?

    No livro de Programação Paralela de Rauber , "modelo de programação" é uma abstração acima de "modelo de computação (isto é, modelo computacional)" que, por sua vez, está acima de "modelo de arquitetura". Eu acho que um modelo de programação não é usado apenas em computação paralela, mas para uma linguagem de programação ou biblioteca de API.

Tim
fonte

Respostas:

5

Um modelo de programação está implícito na arquitetura do sistema. Se a arquitetura do sistema for uma máquina de registro, seu modelo de programação consistirá em operações de código de máquina nos registros. Se sua arquitetura for uma máquina de empilhar, seu modelo de programação consistirá em operações de empilhamento. Uma arquitetura de Von Neumann e uma arquitetura de Harvard terão outros modelos de programação. O código de modificação automática será possível em uma arquitetura de Von Neumann, mas não em uma arquitetura de Harvard.

Um paradigma de programação é mais de alto nível: é a maneira como um problema é modelado (imperativo ou declarativo, Orientado a objetos, funcional, lógico, ...). Uma única linguagem de paradigma suporta um deles. As línguas multiparadigmas são mais um tipo de canivete suíço que tira elementos de mais paradigmas.

Toda arquitetura (e modelo correspondente) terá seu próprio conjunto de instruções de código de máquina. Essa linguagem de código de máquina seguirá o paradigma imperativo (faça isso, faça isso, leia o registro A, adicione o valor ao registro B, ... ou coloque um valor no topo da pilha, coloque outro valor no topo da pilha, adicione os dois valores na parte superior ..., etc ...)

(Pelo menos eu nunca vi um processador de hardware não obrigatório)

Uma linguagem de alto nível (de qualquer que seja o paradigma) será compilada ou interpretada para esse código de máquina.

Sobre o paralelismo: Se considerarmos os processadores interconectados, ficará claro que a maneira como eles se interconectam fará parte do modelo de programação. Um transputador INMOS antigo pe se conecta a outros quatro transputadores. O código da máquina terá instruções para se comunicar com os transputadores que importam.

Mas também em sistemas recentes, a maneira de fornecer exclusão mútua terá que ser resolvida em baixo nível. Em um sistema com um processador, teremos que ativar e desativar as interrupções ao sair ou entrar na seção crítica. Em um sistema multiprocessador, precisaremos de uma instrução monoatômica 'test and set'. Isso faz parte do modelo de programação.

Paradigmas de computação paralela são modelos de alto nível para usar o paralelismo. Pense em idiomas que tenham objetos encadeados ou use semáforos e monitores como elementos de idioma.

Quando programarmos em diferentes sistemas operacionais, diferentes APIs serão usadas. (ou mesmo se programarmos no mesmo sistema, mas usarmos outra biblioteca - uma biblioteca gráfica pe). Isso mudará nosso modelo de programação. o código de baixo nível será diferente, mas se houver uma boa abstração (tipo de código uma vez, compile em qualquer lugar), isso será invisível no idioma de alto nível. Caso contrário, você precisará fazer pequenas alterações no seu código. Mas como você usará a mesma linguagem de alto nível, não haverá mudança de paradigma.

EL Dendo
fonte
4

Não há resposta exata para sua pergunta. Os termos "modelo de programação" e "paradigma de programação" não são termos técnicos exatos que possuem definições fixas. Dependendo do contexto, alguns autores podem definir "modelo de programação" de alguma maneira específica, mas isso geralmente cobre apenas alguns aspectos do que as pessoas entendem em "modelo de programação".

Como regra geral, você deve fugir de qualquer pessoa que use a palavra "paradigma". (Eu era estudante de graduação quando a palavra era muito usada em excesso.)

No entanto, ainda é muito útil usar essas frases, mesmo que não sejam muito precisas. Eles são úteis para explicar e organizar vários aspectos da computação. Mas lembre-se de que não há definições matemáticas aceitas que abranjam inteiramente o uso. Portanto, se você fizer perguntas muito precisas, não receberá respostas muito precisas, mas sim opiniões e explicações úteis.

Em particular, você perguntou: "Qual é a relação e a diferença entre um modelo de programação e um paradigma de programação?" Bem, isso depende de quem você pergunta e em que década você vive. Aqui está o que meu dicionário diz:

paradigma - uma visão de mundo subjacente às teorias e metodologia de um assunto científico específico

modelo - uma descrição simplificada, especialmente matemática, de um sistema ou processo, para auxiliar cálculos e previsões

Portanto, um paradigma é um conceito mais amplo que um modelo. De qualquer forma, aconselho você a não pensar na sua pergunta como uma ciência, porque não é.

Andrej Bauer
fonte
1

Programming models preenchem a lacuna entre as hardware architecturecamadas subjacente e de suporte do software disponível para os aplicativos.

Programming models são diferentes de ambos programming languages e application programming interfaces ( APIs). Especificamente, um modelo de programação é uma abstração do sistema de computador subjacente que permite a expressão de algorithms e data structures.

Em comparação, linguagens e APIs fornecem implementações dessas abstrações e permitem que os algoritmos e estruturas de dados sejam colocados em prática - existe um modelo de programação independentemente da escolha da linguagem de programação e das APIs de suporte.

Os modelos de programação geralmente focam em obter maior produtividade, desempenho e portabilidade do desenvolvedor para outros projetos de sistema. A natureza em rápida mudança das arquiteturas de processador e a complexidade de projetar uma plataforma de escala exascada oferecem desafios significativos para esses objetivos. É provável que vários outros fatores tenham impacto no design de futuros modelos de programação.

Fonte https://asc.llnl.gov/content/assets/docs/exascale-pmWG.pdf , "Simulação avançada e computação" (armas nucleares)

Mais no twitter: #ProgrammingModel

Paradigmas de programação

Imperative Programming com uma sequência explícita de comandos que atualizam o estado.

Declarative Programming especificando o resultado desejado, não como obtê-lo.

Structured Programming com estruturas de controle aninhadas limpas, livres de goto.

Procedural Imperative programming com chamadas de procedimento.

Functional (Applicative) Programming com chamadas de função que evitam qualquer estado global.

Event-Driven Programming com emissores e ouvintes de ações assíncronas.

Flow-Driven Programming processos de comunicação entre si através de canais predefinidos.

Logic (Rule-based) Programmingespecificando um conjunto de fatos e regras. Um mecanismo infere as respostas para as perguntas.

Fonte https://cs.lmu.edu/~ray/notes/paradigms/

Pensar nessas definições ajuda a dar respostas à pergunta.

Uma maneira de raciocinar seria dizer que programming models estão mais próximos do design de um sistema / aplicativo e podem ser feitos de um ou mais programming paradigms que estão próximos a uma linguagem de programação.

Isso pode ser visto com muita clareza em aplicativos de ciência de dados em que várias tecnologias são usadas, cada uma com a sua programming paradigm, mas no geral o sistema que o arquiteto deve manter é coeso programming model.

Mais sobre esse modo de raciocinar: https://twitter.com/semanticbeeng/status/1103027054302425089?s=20

SemanticBeeng
fonte