Pergunta

F # é derivado de OCaml, mas o que os itens principais estão ausentes ou acrescentado? Especificamente estou curioso para saber se os recursos disponíveis para aprender OCaml também são úteis para alguém que quer aprender F #.

Foi útil?

Solução

As principais diferenças são que F # não suporta:

  • functors
  • objetos OCaml de estilo
  • polimórfica variantes
  • o camlp4 / 5 pré-processamento ou de extensão pontos (ppx)

Além disso, F # tem uma sintaxe diferente para parâmetros rotulados e opcionais.

Em teoria, os programas de OCaml que não usam esses recursos podem ser compilado com F #. Aprendizagem OCaml é uma introdução perfeitamente razoável F # (e vice-versa, eu imagino).

A lista completa de diferenças é aqui . (nota: archive.org substituição de link morto)

Outras dicas

Esta questão foi respondida por algum tempo agora, mas fiquei bastante surpreso que a maioria das respostas dizem que características OCaml estão faltando na F # - este é definitivamente bom saber se você quiser porto programas OCaml para F # existente (que é provavelmente a motivação da maioria dos artigos referenciados). No entanto, existem muitas características que tornam F # uma língua diferente (e não apenas uma versão limitada do OCaml para .NET!) Aqui está um par de coisas que são adicionados em F #:

  • As unidades de medida que permitem que você digite-check tráfico de código com cálculos numéricos
  • Meta-programação usando citações (que torna possível usar LINQ em F # e também é essencial para promissores projetos como a plataforma WebSharper)
  • padrões ativos para a criação de abstrações para tipos de dados funcionais (e recurso geralmente muito útil para aplicações padrão de correspondência mais complicado)
  • Computação expressões que é um recurso de linguagem por trás assíncrono fluxos de trabalho (uma biblioteca para E / S assíncrona serviço / web / programação GUI)
  • .NET compatível objeto do sistema que torna possível a plena interoperar com a plataforma .NET (OCaml também tem um suporte para objetos, mas diferente - Há, naturalmente, alguns benefícios em ambos os sistemas ).
  • operadores sobrecarregados - operadores Tanto quanto eu sei, OCaml não ter sobrecarregado -. Em F # você pode usar + para todos os tipos numéricos, bem como seus tipos que apoiá-lo

E, honestamente, acho que também vale a pena mencionar o Visual Studio IDE. Esta não é uma parte da linguagem, mas realmente melhora a experiência do usuário (IntelliSense suporte no Visual Studio é realmente bom!)

Se você olhar para a lista, há muitas coisas que muito contribuíram para a popularidade de F #, por isso é muito mais do que apenas "OCaml sem functors". F # é, definitivamente, com base em OCaml (e leva idéias de outras linguagens como Haskell) e compartilha muitos aspectos com eles, no entanto, há também um monte de outras coisas. Eu acho que, sem coisas como fluxos de trabalho assíncronos, OO estilo .NET e meta-programação, o Microsoft Developer Division nunca incluem F # no Visual Studio 2010.

Eu sempre descrever F # como um primo de OCaml porque OCaml tem muitas características que F # não tem e nunca é provável começar. F # é mais estreitamente relacionado com a linguagem CAML anterior. Em particular, F # tem suporte para abstração e não há suporte para digitação estrutural (como OCaml de objetos e polimórfica variantes ) em tudo.

Ao contrário do que alguns respondants ter escrito, F # tem (limitado) suporte para argumentos rotulados ( "nome") e opcionais.

No entanto, estas são todas as características avançadas e certamente você pode começar a chegar ao confronto com as idéias básicas por trás de programação funcional em pequena escala OCaml de estilo usando recursos sobre OCaml. A primeira grande diferença que você vai descobrir é problemas de maior escala, como encapsulamento e abstração que são resolvidos de maneiras completamente diferentes em OCaml e em F #. Se você quer aprender como fazer isso na F #, a literatura disponível apenas é este artigo em estruturas de dados puramente funcionais .

Eu também descobriram que o sistema de módulo maravilhosa do OCaml torna mais fácil de parametrizar código sobre tipos (tais como estruturas de dados), mas as alternativas OOP não são apenas hediondo, mas quase inteiramente não utilizado em .NET. Além disso, quando se tenta escrever estruturas de dados elegantemente parametrizadas eu bati dezenas de bugs no compilador F # porque ninguém sequer tentou fazer isso antes. A F # stdlib contém algumas implementações de estrutura de dados agradáveis ??mas praticamente sem reutilização, ou seja, é um trabalho cut'n'paste.

F # e OCaml são taxonimically aulas na família ML de linguagens, que inclui uma passle inteiro de outros animais estranhos também. F # é mais recente que OCaml, e ele não tem qualquer functors [funções do módulo -> módulo] Tipos ou linha [classes de objetos e variantes polimórficas] ainda. Entre eles, essas duas simplificações provavelmente fazer a curva de aprendizagem mais fácil para alguém desenvolvimento na plataforma .Net. Infelizmente, esses dois recursos de linguagem são extremamente poderosa em OCaml, então lendo a literatura OCaml a insights ganho em como código para F # provavelmente vai levar à frustração prematura com o último quando é provavelmente uma excelente alternativa para C #, onde ambos estão disponíveis.

F # suportes OCaml sintaxe diretamente. Pode não ser 100% compatível, mas eu acho que é bastante perto.

http://plus.kaist.ac.kr/ ~ shoh / FSharp / html / index.html

Aqui está uma lista de diferenças (não sei como up-to-date é)

http: //plus.kaist. ac.kr/~shoh/fsharp/html/fsharp-vs-ocaml.html

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