Pergunta

Sou um aluno iniciante em CS, e minhas aulas estão principalmente em Java. Atualmente, estou passando por "Little Schemer" como um auto -estudo e, no processo de descobrir como fazer isso, encontrei inúmeras referências a "implementações" do esquema. Minha pergunta é: o que são implementações?

Eles são sub-dialectos do esquema ou é algo mais (o drscheme parece permitir diferentes "sabores" do idioma)? É apenas o nome dado a um determinado ecossistema que incorpora um IDE, intérprete, ferramenta interativa e similares?

Todos os outros idiomas (por exemplo, Java) também têm uma variedade de "implementações", ou é algo reservado para "abrir" idiomas?

Obrigada,

Joss Delage

Foi útil?

Solução

Uma implementação de uma linguagem de programação é um compilador ou intérprete para esse idioma. Componentes adicionais do sistema ecológico, como o IDES, podem fazer parte de uma implementação, mas não são necessários. Para o esquema, existem muitos, por exemplo, drscheme, dolo, gambit.

Muitas linguagens de programação têm implementações diferentes, mas todas as implementações de um determinado idioma devem implementar (ou seja, compilar) o mesmo dialeto. Isso é mais fácil se houver uma especificação clara e oficial do idioma, como é o caso do esquema. Obviamente, a maioria das especificações de idiomas passa por muitas versões; portanto, implementações diferentes podem suportar versões diferentes do idioma.

Para Java, existem implementações de Sun, Oracle, IBM e eu penso uma outra.

Outras dicas

Um implementação de um idioma significa qualquer programa que execute ou compila esse idioma específico.

Em esquema específico, é uma boa pergunta, porque houve várias revisões importantes da especificação do idioma. Além disso, existem muitos idiomas (incluindo o esquema original!) Que são chamados de esquema que não seguem nenhuma das especificações completamente. Os idiomas iniciantes para o HTDP são pequenos para serem um pouco restritivos sobre como os problemas são resolvidos (e provavelmente por outros motivos). O GIMP até muito recentemente usou um intérprete de esquema fora do padrão chamado Siod (esquema em um desfile ou esquema em um dia). Há muitos outros exemplos; Veja, por exemplo Dialetos do esquema Para a opinião do esquema PLT sobre o suporte padrão do idioma.

Uma implementação é a versão/produto de um fornecedor específico que implementa (conforme, fornece, etc.) um determinado padrão (interface de classe, API, especificação de idioma etc.).

Para tornar isso simples de entender por analogia, a Coca-Cola e a Pepsi podem ser consideradas implementações de refrigerante (ou, se você for tão inclinado, do POP). Soda/Pop é um conceito geral, e a Coca-Cola e a Pepsi são produtos específicos que estão em conformidade com esse conceito.

Da mesma forma, o Mac OS X e o Linux são ambas as implementações da especificação única do UNIX. O compilador GNU C ++ e o compilador Intel C ++ são implementações da linguagem de programação C ++. O Sun Java 6 JDK, o OpenJDK e o compilador GNU para Java (GCJ) são implementações de Java.

Dentro de Java, como você descobrirá em breve, a palavra "implementos" é usada como palavra -chave quando uma classe fornece uma definição concreta de uma função declarada em uma interface, porque, ao fornecer a definição concreta, essa classe implementa os requisitos do geral conceito incorporado pela interface.

Espero que isso ajude a melhorar sua compreensão do significado de "implementação".

Uma implementação é um compilador ou intérprete para uma linguagem de programação; É uma maneira de traduzir as instruções do idioma em comportamento. A linguagem mais comum com várias implementações hoje é provavelmente JavaScript.

Quando as pessoas falam sobre implementações, geralmente está no contexto de ter que lidar com os problemas que surgem de ter vários. Existem benefícios - o seu favorito fará as coisas da maneira que você gosta - mas os problemas podem ser frustrantes. Como o Chrome e o Firefox e o IE e o Safari se comportam de maneira um pouco diferente com o mesmo código JavaScript, os desenvolvedores da Web precisam gastar muito tempo testando seu código nos vários navegadores, detectando qual alguém que você está usando e adaptando o código ao código ao Conjuntos ligeiramente diferentes de bibliotecas, insetos, etc.

Alguns idiomas são definidos por uma implementação padrão (Ruby, Perl, Python) e não por um documento, e é por isso que você não ouve várias implementações delas. Mesmo nesses idiomas, você tem o problema relacionado de várias versões com comportamento diferente.

As implementações não são um fenômeno novo: em seus dias de ensino médio, Bill Gates começou a escrever uma das muitas implementações básicas, por exemplo.

O que piora os problemas com o esquema do que com outros idiomas é que a especificação é intencionalmente pequena - tenta especificar muito pouco. O benefício é que as pessoas que projetam linguagens de programação podem criar uma nova implementação do esquema experimental com novas propriedades legais relativamente rapidamente. Depois que eles fizeram isso, eles podem afirmar que mesmo a pequena linguagem que escreveu é "útil" porque outros mostraram como estender a pequena linguagem a um útil. No entanto, há muito trabalho nessa "simples questão de programação", e cada implementação deve tomar muitas decisões por conta própria; portanto, as diferenças entre as implementações são muitas e grandes. Assim, os problemas associados a múltiplas implementações são muitas e grandes em esquema em comparação com idiomas mais completamente especificados.

A comunidade do esquema reconhece o problema, juntamente com o benefício de uma pequena especificação, e está trabalhando ativamente em maneiras de tornar a transição da linguagem experimental para a linguagem útil mais clara, com novas versões do padrão. http://schemeports.org/

Por enquanto (2010), eu pessoalmente recomendo que novos usuários comecem a trabalhar no esquema PLT, e estou feliz que você tenha começado por lá. Não deixe que as muitas implementações o assustem: há muito benefício em trabalhar no idioma que os designers de linguagem de programação projetavam para si mesmos. A PLT tem uma grande comunidade e um bom conjunto de bibliotecas que o ajudarão a superar as dificuldades descritas acima.

Melhor, Grem

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