Como a “programação orientada para a linguagem” se compara a OOP/funcional no mundo real

StackOverflow https://stackoverflow.com/questions/1703869

  •  19-09-2019
  •  | 
  •  

Pergunta

Recentemente, comecei a ler alguma literatura relacionada a F#, falando de "programação funcional do mundo real" e "especialista F#", por exemplo. No começo, é fácil, porque tenho alguns antecedentes em Haskell e conheço C#. Mas quando se trata de "Programação orientada para a linguagem"Eu simplesmente não entendo. - Eu li algumas explicações e é como ler um artigo acadêmico que fica mais abstrato e estranho a cada frase.

Alguém tem um exemplo fácil para esse tipo de coisa e como ele se compara aos paradigmas existentes? Não é apenas fantasia acadêmica, não é? ;)

Obrigado, Wishi

Foi útil?

Solução

F# tem alguns mecanismos para fazer programação em um estilo que se pode chamar de "orientado para a linguagem".

Primeiro, as geturas da sintaxe (as chamadas de função não precisam de parênteses, podem definir os próprios operadores de infix, ...) fazem com que muitas bibliotecas definidas pelo usuário tenham a aparência de DSLs incorporados.

Segundo, o mecanismo de "citações" F# pode permitir citar o código e executá -lo com um mecanismo alternativo de semântica/avaliação.

Terceiro, F# "Expressões de computação" (também conhecido como fluxos de trabalho, Mônadas, ...) também fornecem uma maneira de fornecer um tipo de semântica alternativa para certos blocos de código.

Tudo isso meio que se enquadra na categoria EDSL.

Outras dicas

O Programa Orientado a Idioma (LOP) pode ser usado para descrever qualquer um dos seguintes.

Criando um idioma externo (DSL)

Talvez esse seja o uso mais comum do LOP e é onde você tem um domínio específico - como pacotes de envio da UPS por meio de tipos de trânsito através de rotas, etc. Em vez de tentar codificar todas essas entidades específicas do domínio dentro do código do programa, você Em vez disso, crie uma linguagem de programação separada apenas para esse domínio. Assim, você pode codificar seu problema em um idioma externo separado.

Criando uma linguagem interna

Às vezes, você deseja que o código do seu programa se pareça menos com o 'código' e mapeie mais de perto o domínio do problema. Ou seja, tenha o código 'Leia mais naturalmente'. Uma interface fluente é um exemplo disso: Interface fluente. Além disso, F# possui padrões ativos que suportam isso muito bem.

eu escrevi uma postagem no blog no lop um tempo atrás, que fornece alguns exemplos de código.

Na programação orientada a objetos, você tenta modelar um problema usando objetos. Você pode conectar esses objetos para executar funções ... e no final resolver o problema original.

Na programação orientada para a linguagem, em vez de usar uma linguagem de programação funcional ou orientada a objeto existente, você cria uma nova linguagem específica de domínio que é mais adequada para resolver com eficiência seu problema.

O termo programação orientado para a linguagem pode estar sobrecarregado, pois pode ter significados diferentes para pessoas diferentes.

Mas em termos de como eu o usei, isso significa que você cria um DSL (http://en.wikipedia.org/wiki/Domain_Specific_Language) Antes de começar a resolver seu problema.

Depois que seu DSL for criado, você escreverá seu programa em termos de DSL.

A idéia é que sua DSL é mais adequada para expressar o problema do que uma linguagem de uso geral.

Alguns exemplos seriam a sintaxe de arquivo ou rubi na classe ActiveRecord.

Eu não tenho diretamente Programação usada orientada para a linguagem em situações do mundo real (criando um idioma real), mas é útil pensar e ajuda a projetar melhores objetos orientados a domínios.

Num sentido, algum O desenvolvimento do mundo real no LISP ou no esquema pode ser considerado "orientado para o idioma", pois você está desenvolvendo o "idioma" do seu aplicativo e sua árvore abstrata à medida que codifica. Pepino É outro exemplo do mundo real que já ouvi falar.

Observe que existem alguns problemas nessa abordagem (e qualquer abordagem orientada ao domínio) no desenvolvimento do mundo real. Um grande problema com o qual lidei antes é a incompatibilidade entre a lógica que faz sentido no domínio e a lógica que faz sentido no software. A lógica de domínio (negócios) pode ser extremamente complicada e sem sentido - e faz com que os modelos de domínio se quebrem.

Um exemplo fácil de uma linguagem específica de domínio, mencionada aqui, é SQL. Além disso: Scripts de shell Unix.

Obviamente, se você está fazendo muitas operações básicas e tem muita sobreposição ao idioma subjacente, provavelmente é excessivo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top