Pergunta

O que diferencia os dois dialetos ML separados?

Foi útil?

Solução

Existem muitas diferenças, algumas técnicas, algumas sociopolítica. Eu tentei colocar as diferenças mais importantes em primeiro lugar.

  • SML é uma língua com uma definição e um padrão. É estável (e de fato foi congelada por isso não pode evoluir). Objectivo Caml é uma aplicação controlada por um pequeno grupo no INRIA. Ele continua a evoluir. (IMO a evolução é bem gerida.)

  • SML tem muitas implementações; Caml tem apenas um.

  • Objective Caml tem uma série de recursos adicionais, entre as quais a mais proeminente, provavelmente, objetos e variantes polimórficas.

  • As duas línguas têm drasticamente diferentes modelos de tipos de registro. Resumidamente, em Caml, os nomes dos campos de registro deve ser único, onde em SML, dois tipos de registro diferentes no mesmo escopo podem ter nomes de campo em comum. Esta peculiaridade pode fazer portando a partir do SML para Caml um pouco complicado.

  • Existem algumas diferenças sintáticas.

  • As bibliotecas e funções padrão são dramaticamente diferentes. A biblioteca Caml é muito imperativo, que a base biblioteca padrão SML é mais funcional. Por exemplo, a composição é uma função de nível superior primitivo em SML; não é parte da biblioteca Caml. A biblioteca de cadeia Caml não fornece uma função de dobragem (pelo menos não a partir da versão 3.08). Implementações de muitos dos Caml funções List não são seguros para listas muito longas; eles explodir a pilha.

  • Os sistemas do tipo são sutilmente diferentes: Em Caml, um tipo de anotação em um e : ty expressão é aceite se o tipo ty unifica com o tipo de e. Em SML, e : ty é aceito somente se o tipo ty é uma exemplo do tipo de e. Esta distinção torna a anotação em Caml muito menos úteis na prática, porque é impossível usar uma anotação de tipo de insistir que uma expressão é polimórfico.

  • Caml tem uma relação muito mais sã e sensata entre as interfaces (chamado tipos de módulos ou assinaturas ) e implementações (concreto) (chamado módulos ou estruturas ) do SML. Em SML tudo vai muito bem e você tem que contar com o programador para estabelecer boas convenções. Em Caml, boas convenções são estabelecidas e executadas pelo compilador.

  • SML, operadores aritméticas são sobrecarregados a aplicar tanto de ponto flutuante e dados inteiros. Em Caml, os operadores não estão sobrecarregados; operadores de ponto flutuante são notados com um ponto extra.

  • Em SML, o programador pode controlar a precedência e associtivity de operadores infix. Em Caml, estes são determinados pelo primeiro caractere do nome do operador. Esta restrição limita os benefícios de ser capaz de definir a sua própria notação de infix.

Para uma completa análise mais detalhada com comentário editorial, você pode também olhar para o Adam Chlipala página de comparação .

Outras dicas

Para obter detalhes sobre as diferenças sintáticas que Norman Ramsey mencionou, aqui estão um par de páginas da web:

OCaml adiciona recursos objeto de orientação e tem algumas diferenças de sintaxe menor.

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