Falso sentido de seguridad . Esto no tiene sentido.
Pocos tipos básicos . OCaml ahora tiene bytes y matrices de bytes, pero no tiene cadenas unicode integradas, enteros de 16 bits, enteros sin signo, flotantes de 32 bits, vectores o matrices. Las bibliotecas de terceros proporcionan algunos de estos.
Desbordamiento de enteros silencioso . Sin cambios, pero nunca fue un problema.
Módulo de inmutabilidad . Su recomendación de que las funciones y los módulos deberían ser mutables es un retroceso sombrío para Lisp y una muy mala idea. Puede reemplazar módulos usando include
si lo desea, pero no puede mutarlos, por supuesto.
El polimorfismo provoca errores de tipo en tiempo de ejecución . Este es un gran problema con OCaml y no se ha solucionado. A medida que sus tipos evolucionan, la igualdad polimórfica, la comparación y el hash comenzarán a fallar cuando encuentren tipos como funciones y la depuración del problema es muy difícil. F # tiene una gran solución para este problema.
No hay macros . Irónicamente, cuando escribió este OCaml en realidad tenía soporte completo para macros, pero ahora han decidido retirar la función.
Envolturas . Este fue un problema real y no se ha solucionado. Todavía no hay una try ... finally
construcción en el lenguaje OCaml y no hay un contenedor que la implemente en stdlib.
Lugares . Sin cambios pero sin problemas.
Campo de registro nombrando el infierno . Estructura tu código correctamente usando módulos.
Sintaxis . Sin cambios pero sin problemas.
Sin polimorfismo . Esto no tenía sentido cuando lo escribió y nada ha cambiado.
Conjuntos de funciones inconsistentes . OCaml todavía no tiene una cons
función. Esta bien. No quiero cosas de Lisp en mi idioma, gracias.
No hay variables dinámicas . Fue algo bueno de OCaml. Todavía es algo bueno de OCaml.
Los argumentos opcionales apestan . Argumentos opcionales rock. Insulté a Microsoft para que agregara argumentos opcionales a F #.
Inconsistencia de aplicación de argumento parcial . Eh?
Legibilidad aritmética . Esto ha cambiado desde que dejé de usar OCaml ~ hace 8 años. Aparentemente ahora puedes hacerlo Int64.((q * n - s * s) / (n - 1L))
.
Nombre silencioso resolución de conflictos . Él estaba tratando de hacer un desarrollo de software completo en REPL como lo haría en Lisp. No hagas eso en OCaml. Utilice los archivos y la compilación por lotes recurriendo al REPL solo para probar, ejecutar código desechable y computación técnica interactiva.
Orden de evaluación . Esto estaba mal cuando lo escribió. El orden de evaluación no está definido en OCaml.
No hay entrada / salida de objeto . Citó una biblioteca de terceros que ya resolvió este "problema".
El compilador se detiene después del primer error . Eh?
No hay seguimiento de pila para ejecutables compilados de forma nativa . Fijo.
El depurador apesta . Nunca usé el depurador. La comprobación de tipo estático detecta casi todos mis errores.
GC apesta . Encontré que el GC de OCaml es excelente, excepto por un problema importante: el bloqueo global impide la programación paralela.
No hay declaraciones directas implícitas . La recursividad mutua es explícita por diseño en todos los NM. Lo único extraño es que las type
definiciones son recursivas por defecto, mientras que los let
enlaces no son recursivos por defecto.
La ronda de funciones está ausente . OCaml todavía tiene un stdlib básico pero bibliotecas de terceros como Jane St's Core round
y amigos.
Listas . List.map
Todavía no es recursivo de cola. Envié parches para corregir errores graves como este y tuve que esperar años antes de que aparecieran en los lanzamientos. Las listas siguen siendo inmutables, por supuesto. Y así deberían ser.
Velocidad . Creo que los tiempos de compilación para grandes variantes polimórficas han sido corregidos.
Patronaje a juego . Un triunfo de la esperanza sobre la realidad. La comunidad de Lisp no ha podido hacer esto. De ahí mi décima regla: cualquier programa Lisp suficientemente complicado contiene una implementación ad hoc, especificada informalmente y llena de errores de la mitad del compilador de coincidencia de patrones de OCaml.
pero podría invocar la bonita impresora desde el nivel superior como una llamada a la biblioteca, dándole la información de tipo necesaria. Y había una macro que puedes usar para anotar estructuras de datos para tener impresoras bonitas autogeneradas.