Je ne suis pas intimement familier avec l'Orme, mais j'ai regardé dans un peu et je suis assez familier avec la Raison, donc je vais donner un coup de feu. Je suis sûr qu'il y aura des inexactitudes ici, donc merci de ne pas prendre ce que je dis comme un fait, mais l'utiliser à la place que les pointeurs pour ce regarder plus en détail vous-même si il est important pour vous.
Les deux Orme et la Raison sont ML-comme langues très similaire à des modèles de programmation, donc je vais me concentrer sur les différences.
Syntaxe: Orme utilise un Haskell syntaxe qui est conçu (et/ou évolué) pour le modèle de programmation à la fois de l'Orme et de la Raison usages, ce qui devrait fonctionner très bien pour la lecture et l'écriture idiomatique code une fois que vous êtes familier avec elle, mais semblent très différentes et inconnues à la plupart des programmeurs.
Raison, essaie d'être plus accessible par l'émulation du JavaScript syntaxe autant que possible, qui sera familier à la plupart des programmeurs. Cependant il vise également à soutenir l'ensemble des fonctionnalités de la sous-jacentes langage OCaml, ce qui rend certains schémas fonctionnels tout à fait maladroit.
Un exemple de ceci est la fonction de demande de syntaxe, qui en Orme souligne le curry de la nature des fonctions (f a b
) et fonctionne très bien pour la composition de fonctions et de construction lisible DSLs. Raison de la mise entre parenthèses de la syntaxe (f(a, b)
) se cache cette complexité, ce qui rend plus simple pour entrer dans (jusqu'à ce que vous avez accidentellement voyage, car bien sûr, c'est toujours différent en dessous), mais fait un usage intensif de la fonction de la composition d'un désordre de parenthèses.
La mutabilité: Elm est un point de vue purement fonctionnel de la langue, qui est très bien en théorie, mais difficile en pratique depuis le monde environnant ne se soucie guère de l'Orme en quête de pureté. L'orme est la solution préférée pour cela, je pense, est d'isoler l'impureté, en écrivant le code incriminé dans le code JavaScript à la place, et à accéder à de l'Orme, soit à travers des composants web ou les ports. Cela signifie que vous pourriez avoir à maintenir d'importantes quantités de code dans un document distinct et très dangereux langue, tout à fait un peu de passe-partout pour les connecter, ainsi que d'avoir à comprendre comment s'adapter à la ronde des choses si les trous carrés de ports et de tel dans la première place.
Raison sur l'autre main est... pragmatique, comme j'aime l'appeler. Vous sacrifier un peu de sécurité, les idéaux et les avantages à long terme pour l'augmentation de la productivité et des bénéfices à court terme. Isoler l'impureté est toujours une bonne pratique dans la Raison, mais vous êtes inévitablement va prendre des raccourcis juste pour obtenir des choses, et qui va vous mordre plus tard.
Mais même si vous ne parvenez pas à être assez disciplinés pour isoler toutes les impuretés, vous avez encore à payer un prix pour avoir la mutation dans la langue. Une partie de ce prix, c'est ce qu'on appelle la valeur de restriction, qui vous allez rencontrer, tôt ou tard, et il va à la fois source de confusion et de exaspérer vous, car il vous rejeter code intuitivement devrait fonctionner, tout simplement parce que le compilateur n'est pas en mesure de prouver qu'il ne peut pas, à un certain point être une mutable référence impliqués.
JavaScript interopérabilité: Comme mentionné ci-dessus, l'Orme offre la possibilité d'interagir avec JavaScript par les ports et les composants web, qui sont volontairement très limité. Vous avez utilisé pour être en mesure d'utiliser les modules natifs, qui offre beaucoup plus de souplesse (et la capacité de se tirer dans le pied), mais cette possibilité est d'aller loin (pour la plèbe au moins), un mouvement qui n'a pas été sans controverse (mais ne devrait pas être surprenant étant donné la philosophie). En savoir plus sur ce changement ici
La raison, ou plutôt BuckleScript, offre un riche ensemble de primitives pour être en mesure de se lier directement à JavaScript, et très souvent de produire un idiomatiques Raison de l'interface sans avoir besoin d'écrire aucun code colle. Et tandis que pas très intuitive, il est assez facile à faire une fois que vous grok il. Il est également facile de se tromper et d'avoir exploser dans votre visage à un certain point au hasard plus tard, cependant. Quelle que soit la colle le code, vous n'avez qu'à écrire à fournir une belle idiomatiques de l'API peut être écrit dans la Raison, avec toutes ses garanties de sécurité, au lieu d'avoir à écrire du JavaScript risquée.
Écosystème: en conséquence de l'Orme est limitée JavaScript interopérabilité, l'écosystème est plutôt petite. Il n'y a pas beaucoup de bonne qualité de tiers de bibliothèques JavaScript qui fournissent des composants web, et de le faire vous-même prend beaucoup d'effort. Vous allez donc plutôt voir les bibliothèques mises en œuvre directement dans l'Orme lui-même, qui prend encore plus d'effort, bien sûr, mais ils sont souvent de meilleure qualité car ils sont spécifiquement conçus pour l'Orme.
Outillage: Orme est célèbre pour ses messages d'erreur. La raison à un grand degré n'est pas, bien qu'il s'efforce d'. C'est au moins en partie, parce que la Raison n'est pas un compilateur, mais plutôt construit sur le haut du compilateur OCaml, de sorte que l'information disponible est limitée, et la surface de la zone d'erreurs possibles très large. Mais ils sont pas aussi bien pensé.
L'orme a également un excellent outil de conditionnement qui met tout en place pour vous et vérifie même si l'interface d'un paquet de publication a changé et que la version bosse correspond à la sémantique de contrôle de version. Raison/BuckleScript utilise juste npm
et vous oblige à tout gérer Raison/BuckleScript spécifiques manuellement la mise à jour de bsconfig.json
avec de nouvelles dépendances.
Raison, BuckleScript, son système de construction, et OCaml sont tous ultra-rapide cependant. Je n'ai pas encore l'expérience de tout projet de plus de 3 secondes pour compiler à partir de zéro, y compris toutes les dépendances, et les différentiels de compilation ne prend généralement que quelques millisecondes (même si ce n'est pas tout à fait sans frais pour la convivialité). De l'orme, comme je le comprends, n'est pas tout à fait aussi performant.
L'orme et la Raison ont tous deux des outils de mise en forme, mais en Raison de format de code est de nettement moins bonne qualité (bien que lentement à s'améliorer). Je pense que c'est en grande partie en raison de la beaucoup plus complexe syntaxe qu'il a à traiter.
La maturité et de la décadence: la Raison, en cours de construction sur OCaml, a des racines qui remontent à plus de 20 ans. Cela signifie qu'il a une base solide qui a été la bataille-testées et éprouvées pour travailler sur une longue période de temps. En outre, c'est une langue largement développés par des universitaires, ce qui signifie qu'une fonction peut prendre un certain temps pour être mis en œuvre, mais quand il est dans la il est solide comme le roc, parce que c'est ancré dans la théorie et peut-être même formellement prouvé. Sur le revers de la médaille, son âge et son caractère expérimental signifie aussi qu'il se sont réunis un peu de trucs que c'est difficile de s'en débarrasser.
L'orme d'autre part, étant relativement nouveau et moins bureaucratique géré, peut se déplacer plus vite et n'est pas peur de rompre avec le passé. Ce qui fait un plus mince et plus cohérente, mais aussi moins puissant système de type.
Portabilité: l'Orme est compilé en JavaScript, ce qui en soi est tout à fait portable, mais est actuellement limité à l'navigateur, et encore plus de l'Orme, de l'Architecture. C'est un choix, et il ne serait pas trop difficile à nœud cible ou de plates-formes. Mais l'argument contre lui, c'est, comme je le comprends, qu'il serait détourner l'attention, la rendant ainsi moins excellent lors de sa niche
La raison, étant basée sur OCaml, qui en fait des cibles de code machine natif et le bytecode d'abord et avant tout, mais aussi a un compilateur JavaScript (ou deux) qui lui permet de cibler les navigateurs, nœud, d'électrons, de réagir natif, et même la possibilité de compiler dans un unikernel. Support de Windows qui est soi-disant un peu louche mais. Comme un écosystème, la Raison cibles Réagissent d'abord et avant tout, mais aussi a des bibliothèques permettant de l'Orme, de l'Architecture à être utilisé tout à fait naturellement
Gouvernance: l'Orme est conçu et développé par une seule personne qui est capable de communiquer clairement ses objectifs et de raisonnement, et qui est payé pour travailler à plein-temps. Ceci en fait un ensemble cohérent et bien conçu, produit final, mais le développement est lent, et le bus facteur pourrait faire de l'investissement difficile.
Raison de l'histoire est un peu plus complexe, car il est plus d'un nom générique pour une collection de projets.
OCaml est géré, conçu et développé dans l'ouvert, en grande partie par des universitaires, mais aussi par les développeurs parrainé par diverses fondations et commerciale bailleurs de fonds.
BuckleScript, un compilateur JavaScript qui dérive du compilateur OCaml, est développé par un seul développeur, et dont les objectifs et la situation de l'emploi n'est pas clair, et qui ne prend pas la peine d'expliquer son raisonnement ou de décisions. Le développement est techniquement plus ouvert au PRs sont acceptés, mais le manque d'explication et obtus codebase rend effectivement fermé le développement. Malheureusement, cela ne conduit pas à une conception cohérente, et le bus facteur pourrait faire de l'investissement difficile ici.
La raison elle-même, et ReasonReact, est géré par Facebook. PRs sont les bienvenus, et une quantité importante de la Raison est conduite par des étrangers, mais la plupart des décisions semblent être faits dans une chambre quelque part. PRs de ReasonReact, au-delà de trivial corrections de typo et tels, sont souvent rejetées, sans doute pour une bonne raison, mais généralement avec peu d'explications. Une meilleure conception typiquement sortir de l'arrière-salle, un peu plus tard.