Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Pedro Rolo

Min Read

21. Februar 2024

ReasonML - Reagiere wie ursprünglich beabsichtigt

Dieser Beitrag wurde ursprünglich veröffentlicht im Mai 2018 von Pedro Rolo und aktualisiert im Mai 2020 von Andre Santos.

Wenn man darüber nachdenkt Grund ML, die Tatsache, dass es von Facebook unterstützt wird, sagt nicht alles. Es handelt sich um eine Technologie, die sich in den letzten Jahren weiterentwickelt hat und viel Potenzial bietet, nicht nur aufgrund des Einflusses von JavaScript-Tools, sondern auch aus der Perspektive des Compilers zum nativen Code.

In diesem Artikel werde ich mir seine Entstehung genauer ansehen und darauf, wie andere Technologien wie React, BuckleScript oder OCaml seine Entwicklung geprägt haben.

blue arrow to the left
Imaginary Cloud logo

Was ist ReasonML?

Grund ML ist die neue Technologie, die Facebook verwendet zur Entwicklung von React-Anwendungen und wirbt für eine futuristische Version von JavaScript (ES2030) sagen sie).

Auf den Punkt gebracht:

  • Eine neue Art, React-Anwendungen zu schreiben;
  • Eine JavaScript-freundliche Syntax für die OCaml-Semantik;
  • Statisch typisiert - mit Typinferenz;
  • Funktional, aber nicht rein;
  • Hauptsächlich in JavaScript kompiliert;
  • Unterstützt von Facebook und Bloomberg.
blue arrow to the left
Imaginary Cloud logo

Wie React ReasonML geprägt hat

Der Programmierstil von React ist der funktionalen Programmierung viel näher als der objektorientierten Programmierung. Es ist daher nicht überraschend, dass der erste React-Prototyp wurde nicht implementiert in Javascript, aber in Standard-ML stattdessen.

Als der Prototyp jedoch zu reifen begann, Sein Autor, Jordan Walke, hat beschlossen, es auf JavaScript zu portieren und von dort aus fortzufahren. Es gab keine ausgereiften Transpiler für JavaScript, und damals war die Welt auch nicht bereit, eine solche Programmiersprache und einen solchen Stil zu akzeptieren, der nicht zum Mainstream gehört.

Infolgedessen React wurde als Technologie im Zusammenhang mit der Programmiersprache JavaScript populär.

Trotz dieses Erfolgs innerhalb der JavaScript-Ökosystem, einige Leute hatten das Gefühl, dass hinter den Kulissen etwas vor sich ging. Andere verwandte Projekte — wie Redux, Ulme und Reines Drehbuch - begann an Popularität zu gewinnen und brachte so die Denkweise der Community näher an die ursprünglich funktionalen und statisch typisierten Wurzeln von React.

Dies veranlasste Facebook zu der Annahme, dass es machbar und praktisch sein könnte, React selbst näher an seine Wurzeln heranzuführen.
Irgendwann sie stellten fest, dass ein Großteil der Grundlagen für sie bereits gelegt war...

Beginne mit BuckleScript

Einige Unternehmen entwickeln solche unternehmenskritischen Benutzeroberflächen, dass die Verwendung dynamischer oder schrittweise typisierter Sprachen unerträgliche Verluste bedeuten könnte.

Bloomberg ist eines dieser Unternehmen. Es war für Bloomberg, dass Hongbo Zhang mit der JavaScript-Laufzeit gearbeitet und experimentiert hat, als er merkte, dass es nicht schwierig war, den OCaml-Compiler auf JavaScript zu portieren und im Browser auszuführen.

Die Realität war das der OCaml-Compiler war bereits sehr modular. Es war nicht sehr schwer, das Backend, das systemeigenen Code generiert, durch ein Javascript-generierendes zu ersetzen. Mit einem solchen Backend war es sogar möglich, den OCaml-Compiler in JavaScript zu kompilieren, wodurch der BuckleScript-Compiler selbst gehostet und im Browser ausgeführt wurde.

BuckleScript war geboren und noch besser, es wurde von Bloomberg als Open-Source-Software veröffentlicht.


Es ist wichtig zu beachten, dass der ursprüngliche OCaml-Compiler bereits jahrzehntelang entwickelt und optimiert wurde, und zwar vom Nationales Institut für Recherche en Informatique et en Automatique (INRIA). Es war einer der schnellsten verfügbaren Compiler für eine so stark typgeprüfte Sprache.

blue arrow to the left
Imaginary Cloud logo

Von BuckleScript zu ReasonML

Wenn Facebook beabsichtigte, das React-Ökosystem statisch typisiert zu machen, war BuckleScript sicherlich ein guter Kandidat. Sie schienen zu glauben, dass JavaScript mit seiner beliebten Syntax mit geschweiften Klammern maßgeblich für den Erfolg von React verantwortlich war.


Sie waren jedoch nicht naiv genug, BuckleScript einfach mit seiner OCaml-Syntax zu übernehmen. Sie eher behielt die OCaml-Semantik bei, das BuckleScript-Backend und so viel sie konnten von der JavaScript-Syntax.

Um die JavaScript-Syntax beizubehalten, haben sie einen zusätzlichen Parser erstellt, Umgang mit einer neuen Sprache namens Grund ML.

Wir können sagen, das ist Reason ML ist einfach OCaml mit einer Javascript-ähnlichen geschweiften Syntax.


Das Ergebnis ist überraschend ähnlich wie JavaScript. Bis zu dem Punkt, dass ein Teil des JavaScript-Codes kann direkt vom Compiler verarbeitet werden, als wäre es ReasonML, mit allen Vorteilen, die ein statisch typisierter Compiler hat, und ohne jegliche Codeänderung.


ReasonML und React

Neben der Arbeit an der Sprache und dem Compiler selbst hat Facebook auch einige Anstrengungen unternommen Entwicklung eines ReasonML-Wrappers rund um sein React-Framework, mit einer zusätzlichen Funktionalität.

Es heißt Reagieren Sie auf Grund. Es macht es einfacher um JavaScript React-Komponenten mit Reason-Komponenten zu mischen innerhalb derselben ReactJS- oder Reason-Anwendung.

Es sollte beachtet werden, dass React Reason ist nicht nur ein Wrapper für React. Es bietet auch einige sofort einsatzbereite Funktionen, die früher in externen Bibliotheken enthalten waren, wie Redux und unveränderlich.

ReasonML und Redux

Redux ist ein State Manager, der bei React-Projekten sehr beliebt ist. Einfach ausgedrückt, ermöglicht es die Organisation der Anwendungsdomänenlogik als eine Reihe zusammengesetzter Reduktionsfunktionen, die ausdrücken sollen, wie der Zustand der Anwendung als externe Ereignisse (wie Benutzerinteraktionen) transformiert werden soll.

Wenn wir ReasonML verwenden, benötigen wir Redux nicht mehr.

Die statusfreien Komponenten von ReactReason verfügen bereits über das Konzept eines eingebauten Reducers, der die Probleme lösen soll, mit denen Redux früher zu kämpfen hatte.


ReasonML und Immutable

Die Funktionalität, die früher von Immutable bereitgestellt wurde, ist auf Sprachebene implementiert.
ReasonML- (und OCaml-) Operationen sind standardmäßig unveränderlich, wodurch der kognitive Aufwand und die Leistungskosten vermieden werden, die mit der Verwendung einer externen Bibliothek verbunden sind.

ReasonML gegen Elm

Vor einiger Zeit habe ich geschrieben über die Sprache Elm. Nun, ReasonML und Elm, sie unterscheiden sich nicht so sehr voneinander.

Ihre Unterschiede eingehend zu analysieren, würde den Rahmen dieses Artikels sprengen, aber — zusammenfassend — sie sind auf eine unterschiedliche Einstellung zur funktionalen Reinheit und zum Reifegrad beider Projekte zurückzuführen.

Im Folgenden finden Sie eine tabellarische Zusammenfassung, wie ihre Eigenschaften übereinstimmen und wie sie sich unterscheiden:

Gemeinsame Merkmale

  • Funktionale Programmierung;
  • In JavaScript kompiliert;
  • Sicher;
  • Kurze Rückkopplungsschleife;
  • Einfach zu testen und zu reaktieren;
  • Vollständige Abdeckung, abgeleitete statische Typisierung.

Unterschiede

Reason vs Elm Summary

Kompilierung zu nativem Code

Wie Sie vielleicht in der obigen Tabelle feststellen, wird erwähnt, dass ReasonML für verschiedene Ziele kompiliert werden kann, einschließlich nativem Code. Dies kann erreicht werden, indem die ReasonML-Syntaxschicht mit dem verbleibenden ursprünglichen OCaml-Compiler verwendet wird, einschließlich des ursprünglichen Backends mit nativem Code.

Hier gibt es viel Potenzial. Schließlich kann der Code von Reason im Backend und im Frontend geteilt oder sogar das Backend zu nativem Code kompiliert werden.

Welche Unternehmen verwenden ReasonML?

Die Flaggschiff-Anwendung für ReasonML ist Facebook Messenger, der ursprünglich eine ReactJS-Anwendung war, die wurde schrittweise zu ReasonML migriert. Darüber hinaus geht die Akzeptanz von ReasonML über die Projekte von Facebook hinaus, und es gibt viele andere Unternehmen, die es nutzen. Einige von ihnen sind in der Liste aufgeführt Die Dokumentationsseite von ReasonML.

blue arrow to the left
Imaginary Cloud logo

Begründung für ReasonML

ReasonML scheint eine weitere Iteration zu sein, bei der dieselben Anstrengungen unternommen wurden, um eine funktionale, statisch typisierte Sprache in das JavaScript-Ökosystem zu integrieren.

Nichtsdestotrotz scheint die Richtung, die dieses Projekt und seine Unterstützer eingeschlagen haben, sowohl aus Marketing- als auch aus technologischer Sicht viel vielversprechender zu sein.
Es kann Nutzen Sie die Tools von JavaScript und die entspannte Syntax während Nutzung der für OCaml geleisteten Arbeit, ohne zu vergessen, dass es von Facebook unterstützt wird. Außerdem besteht das Potenzial erreichen Sie mit BuckleScript verschiedene Plattformen und Umgebungen.

ReasonML ist zwar nicht der erste und sicherlich nicht der letzte, der versucht, diese Ziele in Angriff zu nehmen, es präsentiert sich als Versuch auf Unternehmensebene, um den Geschmack des Mainstreams anzusprechen.

Ready for a UX Audit? Book a free call

Fanden Sie diesen Artikel hilfreich? Diese könnten dir auch gefallen!

blue arrow to the left
Imaginary Cloud logo
blue arrow to the left
Imaginary Cloud logo
blue arrow to the left
Imaginary Cloud logo
blue arrow to the left
Imaginary Cloud logo
blue arrow to the left
Imaginary Cloud logo
blue arrow to the left
Imaginary Cloud logo
blue arrow to the left
Imaginary Cloud logo
Pedro Rolo
Pedro Rolo

Rails-Entwickler mit mehr als 10 Jahren Erfahrung mit verschiedenen Technologien. Ich interessiere mich für funktionale Programmierung.

Read more posts by this author

People who read this post, also found these interesting:

arrow left
arrow to the right
Dropdown caret icon