¿Cuáles son las ventajas y desventajas entre ReasonML (https://reasonml.github.io/) y los Manuscritos (https://www.typescriptlang.org/)?

  • Creo que esto es como comparar manzanas y peras. Me gustaría tomar algún tiempo a la investigación de estos idiomas y muchos de los otros a sí mismo. Usted no va a obtener una buena comprensión de las diferencias clave con sólo mirar a los equilibrios.
  • al parecer ReasonML es el futuro. He estado en varias conferencias y todo el mundo habla de él y hablar sobre lo bueno que es. Yo def quiere entrar en ella. Hay personas a desarrollar apps con reaccionar y la razón (ReasonReact) y super rápido.
  • Si utiliza ReasonML usted obtener real garantizado Tipos y pueden comenzar a usar cosas como esta: imandra.ai. Si sólo desea JavaScript que se parece más a Java, a continuación, ir con el Manuscrito.
InformationsquelleAutor noname | 2017-09-11

6 Comentarios

  1. 52

    Hay gran cantidad de idiomas que hoy en día el objetivo de JavaScript.
    La elección de uno de ellos depende de sus necesidades y la modismos estás cómodo con.

    JavaScript tiene un tipo dinámico del sistema. Algunos desarrolladores prefieren una estática.

    • Manuscrito o Haxe resuelve esto con un nuevo lenguaje que es de tipo estático y sólo transpiles a JavaScript.

    • De flujo es un JavaScript preprocesador que se dirige el mismo problema pero sin la necesidad de aprender un nuevo idioma. Yo prefiero este enfoque si sólo se necesita un tipo de sistema.

    Algunos JS desarrolladores quieren más y un uso más funcional de programación de las expresiones idiomáticas (algebraica de las estructuras de datos, la inmutabilidad, la coincidencia de patrones, …). Una gran cantidad de lenguajes de programación pueden hacerlo (OCaml, Haskell, ReasonML, F#, Scala, …).

    • ReasonML es una sintaxis para OCaml que puede compilar ya sea nativo o JavaScript a través de BuckleScript. Todo lo que puedes lograr con Razón se puede conseguir también con OCaml, excepto que el ReasonML sintaxis acepta JSX. ReasonML puede fácilmente destino node.js aplicación, react.js aplicación o app nativa.

    Manuscrito es fácil de aprender si usted viene de Java o C# mundo.

    ReasonML es más difícil de aprender si nunca se desarrolló con un ML (lenguaje de OCaml o F#)

    Mi consejo:

    • Si sólo necesita un tipo estático del sistema, usted debe considerar el Manuscrito

    • Si usted necesita un tipo de sistema para hacer una react.js o reaccionar-app nativa, usted debe considerar ReasonML porque ReasonReact es una gran mejora sobre react.js

    • Si usted necesita un lenguaje de programación funcional que compila js, usted debe considerar ReasonML

    • por dinámicamente tipado y de tipo estático, ¿quieres decir que inflexible y escrito indirectamente?
    • De verdad que no. Dinámicamente tipado significa que el tipo se evalúan en tiempo de ejecución, mientras que de forma estática significa que el tipo se evaluará en la compilación. inflexible y poco (o débil) que se escribe es más controvertido. Me gusta esta definición norton ghost.ser/UXBoiqRJ6DQ?t=5m6s
    • flujo y los manuscritos son prácticamente idénticas, ¿por qué se considera manuscrito «un nuevo lenguaje»
    • ambos están dirigidos a escribir JS pero Manuscrito es un idioma completo – incluso si es un superconjunto de la js – mientras que el flujo es sólo un javascript preprocesador. TS código debe ser compilado para JS con el Manuscrito compilador (escrito en el Manuscrito) para ejecutar. JS con el Flujo de la anotación debe ser preprocesadas por flujo (escrito en OCaml), pero se puede ejecutar (o transpiled) por babel sin ser procesados por el flujo. Una buena lectura acerca de los motores de inferencia : codeburst.io/…
    • podrías compartir si usted está actualmente trabajando en un proyecto que utiliza ReasonML en la producción?
    • sí, yo uso algunos reasonML en mi proyecto, pero no de código abierto es. Hice un entrenamiento con mis alumnos si se intenta es github.com/miage-lille/age-of-reason
    • Creo que usted necesita para ampliar su justificación para Flujo a través de la TS: «pero sin la necesidad de aprender un nuevo idioma» Ejemplo de flujo: function foo(x: ?number): string { Es básicamente la misma cosa
    • en tanto que usted necesita para aprender acerca de los tipos y cómo usarlos. Ese es su propósito. Ya que todo el código javascript que se supone que debe ser la correcta transcripción de código, no es obligatorio para aprender TS lang hacer escrito en javascript con TS … pero el TS viene con características de programación específicas como decoradores o la declaración del módulo. Neverless con la madurez de los proyectos como ReasonML pero también ELM o Nim y el crecimiento de sus comunidades, el interés para aprender tanto (flow & ts) están disminuyendo.

  2. 36

    Hay muchas compensaciones, muchos de ellos derivados de ReasonML técnicamente sólo se OCaml y por lo tanto hereda la mayoría de las decisiones de diseño de OCaml de los 25 años de historia de una forma nativa lenguaje compilado con poco respeto por este extraño JavaScript nicho en la web.

    Pero como es creo que el mayor trade-off entre ReasonML del sonido y de tipo flexible del sistema, y los Manuscritos de la facilidad de «colarse» integral estática cheques en el código JavaScript de la base.

    De transcripción del tipo de sistema está diseñado explícitamente para no ser sonido, y así, mientras se le dará una mano la mayoría de las veces, no será capaz de darle muchas garantías. Realmente no se puede confiar plenamente en el tipo de sistema para la espalda, que es una de las mayores ventajas de tener una adecuada estática tipo de sistema.

    Manuscrito también está limitado por su decisión de evitar el tiempo de ejecución tipo de información, que es necesaria para funciones tales como la coincidencia de patrones y una de las principales ventajas de trabajar con los datos especificados en ReasonML.

    ReasonML en el otro lado, requiere que la frontera entre el sí mismo y existente de código JavaScript está explícitamente definido. Tipos puede en cierta medida ser inferido, pero que aún debe ser determinado en tiempo de compilación. Esto hace que JavaScript interoperación más laborioso, especialmente si el límite se mueve gradualmente un código JavaScript de la base de que se convierte. También no siempre es evidente cómo escribir algunas de las cosas raras que pasa En JavaScript, pero por lo general es posible, y esperamos que este sea sólo temporal, hasta que todo ha sido convertido a ReasonML de todos modos 🙂

    Obviamente yo soy parcial, pero espero que esto no venir a través como coger un claro ganador, al menos, porque en realidad no lo es. Esta es una de las principales trade-off, al menos tan largo como el mundo no es perfecto.

    • podrías compartir si usted está actualmente trabajando en un proyecto que utiliza ReasonML en la producción?
    • Tengo un par de proyectos de código abierto actualmente en producción, por decirlo así: redex y rebench. Actualmente estoy trabajando con F# y la Fábula, a pesar de que el proyecto está todavía lejos de ser listos para la producción.
  3. 17

    En una aplicación de gran tamaño que se necesita una gran cantidad de características, que por defecto se encuentran en ReasonML: estricta de los tipos de tiempo de ejecución de la validación si usted codificar/decodificar JSON, rápido tiempo de compilación, datos inmutables.

    En el Manuscrito se le tiene que agregar:

    1. ImmutableJS + sus tipificaciones.
    2. Tiempo de ejecución de los validadores como json-esquema + sus tipificaciones. Entonces usted tendrá que escribir los tipos en el Manuscrito, y también se define un esquema json-esquemas. Ellos pueden ser sincronizadas muy pronto.
    3. Algunos locos hacks para notar la diferencia si la variable es de tipo específico (como en el documento oficial de TS: https://www.typescriptlang.org/docs/handbook/advanced-types.html, el Apartado «Tipo Definido por el Usuario Guardias»). Esta revisión se lleva a cabo mediante los efectos secundarios como un.nadar !== indefinido. En 6 meses, esta ‘si’ declaración contendrá más y más controles.
    4. Tienes suerte si un paquete de uso oficial ha y mantiene las definiciones de tipo. O usted va a terminar con la costumbre de tipificaciones.
    5. Si usted desarrolla aplicación híbrida en JS + TS, entonces TS Compilador no puede crear un paquete de final d.ts archivo que se puede importar en otras partes de su proyecto. Usted tendrá que escribir por separado.d.archivos de ts, que incluye herramientas como dts-bundle. Si usted tiene todo en TS, entonces este problema no es aplicable.
    6. Aplicaciones de gran tamaño de tomar un montón de tiempo para ser compilado por el Manuscrito.

    Con ReasonML:

    1. Inmutable de datos en el lenguaje.
    2. Tiempo de ejecución de los validadores están presentes (bs-json tiene por defecto)
    3. Coincidencia de patrón salva de estos locos cheques.
    4. Tienes suerte si npm paquete que desea utilizar BuckleScript enlaces.
    5. N/A.
    6. ReasonML compilación es muy rápido.
    • Si quieres lograr la inmutabilidad en el Manuscrito ImmutableJS no es necesario. Sólo el uso de ‘readonly’ modificador de la propiedad y de tipos como ReadonlyArray, ReadonlyMap, Readonly, etc. Todas estas cosas están incluidos en el lenguaje y su biblioteca estándar.
    • Hay una gran diferencia entre de tener en el idioma y tiene como valor predeterminado, aunque. La razón es Inmutable por defecto.
    • Se presume que el OP se desea utilizar datos inmutables. En mi humilde opinión cuando se utiliza el manuscrito es una mejor opción para adherirse a la programación orientada a objetos, de modo que cuando usted necesita la administración del estado de algo, como mobx o mobx-estado-árbol tiene mucho más sentido. Pero usted puede conseguir fácilmente a su alrededor sólo por el uso de los nativos react.js api. La inmutabilidad es un triunfo cuando usted tiene múltiples hilos. En el mié no así que usted puede también utilizar la programación orientada a objetos para los datos de la aplicación. También tienes puntos de referencia que confirma que el TS es lento para aplicaciones de gran tamaño? No he tenido ninguna lentitud hasta la fecha para ninguna de mis producción de aplicaciones.
    • Si el OP considerando el uso de ReasonML entonces hay una buena probabilidad de que la inmutabilidad es una de las cosas que buscas. La mayoría de las personas probablemente han oído hablar de la Razón a través de Reaccionar, y teniendo en cuenta cómo suelen Reaccionar docs hablar de los poderes de la inmutabilidad por ejemplo, Redux, además de Facebook después de haber desarrollado Immutable.js también, parece razonable que el OP se interesa por la inmutabilidad.
    • El manuscrito parece ser que el objetivo más en el C++/Java desarrolladores que están utilizando Angular de la mayoría de estos desarrolladores estarían menos interesados en la inmutabilidad pero también sospecho que no iba a estar realmente interesado en cambiar el ReasonML bien.
    • Para mí, el sexto punto se debe ser en la parte superior. Después de haber trabajado en la Scala de proyectos en el pasado, usted rápidamente apreciar el rápido circuito de retroalimentación de las alternativas. ReasonML es rápido como un rayo frente a sus competidores.

  4. 9

    (sólo una nota)

    Poniendo todos los aspectos prácticos de lado;

    El ML de la familia de idiomas se basan en un tipo de llamada teoría del Sistema-F, que también es utilizado por Purescript y Haskell, por ejemplo.

    Manuscrito no está bien establecida la fundación y en su lugar utiliza un nuevo tipo experimental del sistema con muchos bits especiales (ni siquiera estoy seguro de si es «formalizado»).

    Entonces en la superficie, TS podría ser el enfoque «práctico», pero introduce más complejidad que es necesario. Sistema de F tiene un pequeño número de reglas que componen el sistema y es muy general, pero más fácil de la razón sobre los que se ajusta a la «teoría». Menos es más.

    También, el esfuerzo que pone en el aprendizaje del Sistema-F es bastante atemporal y se traduce a otros, más poderosos idiomas, tales como Purescript.

  5. 5

    Son muy diferentes.

    • ReasonML es un idioma distinto de JavaScript que compila abajo para JavaScript
    • Manuscrito es un estricto superconjunto de JavaScript que compila abajo para JavaScript

    Si quieres escribir typesafe código de ambos son excelentes opciones.

    • Si quieres escribir typesafe JavaScript, luego de Transcripción es la opción.

    • Si quieres escribir typesafe algún idioma que compila abajo para JavaScript, a continuación, ReasonML es una de las muchas opciones. El algún idioma en ReasonML en el caso de OCAML.

    Más

    Mi opinión sesgada : https://medium.com/@basarat/typescript-won-a4e0dfde4b08

    • Su respuesta y su opinión no menciona la razón de que es más como F#, Inmutable con tipos de unión. La razón no es nada parecido a máquina y fue planeado para ser el motor detrás de Reaccionar. Un montón de Facebook front end código está re escrito en ReasonML
  6. 1

    Razón ML viene con el funcionamiento de la primera Escuela, Si está en que el conjunto de la mente que es el camino a seguir. Mientras que la máquina puede hacer fp y también tiene un buen apoyo de la comunidad. Casi todos los populares de las bibliotecas de la transcripción tipificaciones. Yo prefiero usar fpts (https://github.com/gcanti/fp-ts/blob/master/README.md). Ofrece todas las bondades de la fp en el manuscrito que incluye la comprobación en tiempo de ejecución así. Aunque el tipo de constructor es un fallo grande en el ts. Elegir ts si bien a vivir con ella.

Dejar respuesta

Please enter your comment!
Please enter your name here