Falso senso de segurança . Isso não faz sentido.
Alguns tipos básicos . O OCaml agora possui matrizes de bytes e bytes, mas não possui cadeias unicode internas, números inteiros de 16 bits, números inteiros não assinados, flutuações de 32 bits, vetores ou matrizes. Bibliotecas de terceiros fornecem algumas delas.
Estouro Inteiro Silencioso . Inalterado, mas nunca foi um problema.
Imutabilidade do módulo . Sua recomendação de que funções e módulos devem ser mutáveis é um retrocesso sombrio para o Lisp e uma péssima idéia. Você pode substituir os módulos usando, include
se quiser, mas não pode modificá-los, é claro.
Polimorfismo causa erros de tipo em tempo de execução . Este é um grande problema com o OCaml e não foi corrigido. À medida que seus tipos evoluem igualdade polimórfica, a comparação e o hash começam a falhar quando encontram tipos como funções e a depuração do problema é muito difícil. O F # tem uma ótima solução para esse problema.
Sem macros . Ironicamente, quando ele escreveu isso, o OCaml realmente tinha suporte total para macros, mas agora eles decidiram retirar o recurso.
Wrappers . Este foi um problema real e não foi corrigido. Ainda não há try ... finally
construção na linguagem OCaml e nenhum wrapper implementando-a no stdlib.
Locais . Inalterado, mas sem problemas.
Campo de registro nomeando o inferno . Estruture seu código corretamente usando módulos.
Sintaxe . Inalterado, mas sem problemas.
Sem polimorfismo . Isso não fazia sentido quando ele escreveu e nada mudou.
Conjuntos de funções inconsistentes . O OCaml ainda não tem uma cons
função. Isso é bom. Não quero coisas de Lisp no meu idioma, obrigado.
Sem variáveis dinâmicas . Foi uma coisa boa sobre o OCaml. Ainda é uma coisa boa sobre o OCaml.
Argumentos ~ opcionais são péssimos . Argumentos opcionais. Instalei a Microsoft a fazê-los adicionar argumentos opcionais ao F #.
Inconsistência de aplicativo de argumento parcial . Eh?
Legibilidade da aritmética . Isso mudou desde que parei de usar o OCaml ~ 8 anos atrás. Aparentemente agora você pode fazer Int64.((q * n - s * s) / (n - 1L))
.
Resolução de conflito de nome silencioso . Ele estava tentando fazer um desenvolvimento de software completo no REPL, como você faria no Lisp. Não faça isso no OCaml. Use arquivos e compilação em lote recorrendo ao REPL apenas para teste, execução de código descartável e computação técnica interativa.
Ordem de avaliação . Isso estava errado quando ele escreveu. A ordem da avaliação é indefinida no OCaml.
Nenhum objeto de entrada / saída . Ele citou uma biblioteca de terceiros que já resolveu esse "problema".
O compilador para após o primeiro erro . Eh?
Nenhum rastreamento de pilha para executáveis compilados nativamente . Fixo.
Depurador é uma merda . Eu nunca usei o depurador. A verificação de tipo estático captura quase todos os meus erros.
GC é uma merda . Eu achei o GC do OCaml excelente, exceto por um grande problema: o bloqueio global impede a programação paralela.
Nenhuma declaração direta implícita . A recursão mútua é explícita por design em todos os MLs. A única estranheza é que as type
definições são recursivas por padrão, enquanto as let
ligações não são recursivas por padrão.
A rodada de funções está ausente . O OCaml ainda tem um stdlib básico, mas bibliotecas de terceiros como o Core de Jane St fornecem round
e amigos.
Listas . List.map
ainda não é recursivo da cauda. Enviei patches para corrigir erros graves como esse e tive que esperar anos antes de aparecerem nos lançamentos. As listas ainda são imutáveis, é claro. E assim deveriam ser.
Velocidade . Acredito que os tempos de compilação para grandes variantes polimórficas foram corrigidos.
Correspondência de padrões . Um triunfo da esperança sobre a realidade. A comunidade Lisp falhou ao fazer isso. Daí a minha décima regra: qualquer programa Lisp suficientemente complicado contém uma implementação ad-hoc, especificada informalmente e cheia de erros, de metade do compilador de correspondência de padrões do OCaml.
mas você pode chamar a impressora bonita do nível superior como uma chamada de biblioteca, fornecendo as informações de tipo necessárias. E havia uma macro que você pode usar para anotar estruturas de dados, a fim de ter lindas impressoras geradas automaticamente.