Lumen / Lumen

                              Mitmachen Instrumente Risikostruktur Anpassungen vornehmen Über Lumen Ziele Nicht-Ziele Struktur Mitmachen Um die Fähigkeit, Lumen zu erfinden, oder Anpassungen daran zu erfinden, ist es gut, folgendes zu installieren: Instrumente Zuerst müssen Sie rustup installieren. Beachten Sie die Anweisungen unter diesem Hyperlink. Wenn Sie bekommen bekommen bekommen Rustup installiert baumeln, müssen Sie das nächtliche Modell von Rust installieren, genau hier ist Für den Moment ist es erforderlich, welche Fähigkeiten unsere Abhängigkeit von wasm-bindgen hat, wenn wir uns auf WebAssembly konzentrieren: rustup default nightly # install nightly toolchain Es ist zweifellos, dass Sie wahrscheinlich sogar unvoreingenommen sind und die folgenden Instrumente für die Editorerhöhung einsetzen möchten (rustfmt wird zweifellos für erforderlich sein) alle Pull-Anfragen!): Rustup Zutat hinzufügen Rustfmt Clippy Anschließend müssen Sie die Wasm-Ziele 32 für die Toolchain installieren: Rustup Zweck hinzufügen Wasm 32 – unbekannt-unbekannt – Toolchain Nightly Zweifellos müssen Sie sogar die Instrumente `wasm-bindgen ** installieren: cargo + nightly install wasm-bindgen-cli LLVM Da Rust nun eingerichtet ist und verzögert werden kann, benötigen Sie LLVM zum Erstellen des Compilers. Für LLVM sind Cmake, ein C / C ++ – Compiler (d. H. GCC / Clang) und Python erforderlich. Es ist nachweislich ein Weg Sehr schnell, dass Sie auch Ninja installieren und CCache, um die Erfindung ungemein schneller zu erfinden. Es ist zweifellos, dass Sie eine Chance haben werden Beheben Sie alle diese Abhängigkeiten von Ihrem System-Bundle-Supervisor, einschließlich Homebrew unter macOS. Um in LLVM zu setzen: Git-Klon cd llvm-dirigieren erfinden llvm Dies kann LLVM möglicherweise in ~ / .local / part / llvm / lumen installieren und setzt voraus, dass Ninja und CCache installiert sind, möchten Sie vielleicht per Zufall auch den llvm-Zweck im Makefile anpassen benutze invent als eins mehr, indem du -G Ninja aus dem Aufruf von cmake eliminierst, Ebenso möchten Sie vielleicht auch die Umgebung dazu bringen, CCache zu nutzen, indem Sie diese Wahrscheinlichkeit ebenso erfolgreich eliminieren. HINWEIS: Wenn Sie LLVM aufbauen, erhöht sich die Zeit um ein Vielfaches. Nehmen Sie sich also einen Kaffee, rauchen Sie sie, falls Sie sie haben, und viele andere. Sobald LLVM erstellt ist, möchten Sie vielleicht auch Invent Invent aus der Muse schöpfen, um alle Abhängigkeiten zu ermitteln und das Dirigieren zu erfinden. Risikostruktur Lumen ist vorerst in einige wertvolle Teile unterteilt: Compiler EIR liblumen_compiler liblumen_codegen Lumen Dolmetscher liblumen_eir_interpreter Laufzeit liblumen_core liblumen_alloc lumen_runtime lumen_web EIR ist für Erlang Intermediate Illustration vorübergehend Separates Dirigieren, das auch unvoreingenommen wäre, wird hier gelernt. Dort werden Lumens Frontend-Parser und IR gelernt. In der Zwischenzeit wird an den Compiler-Backend-Objekten in einer anderen Abteilung gearbeitet, und so weiter sollte vorerst übersehen werden. Diese Objekte werden zweifellos bald zusammengeführt und diese README wird zweifellos so viel sein wie zu diesem Zeitpunkt. Der Interpreter ist vorerst dafür zuständig, wie Erlang-Code aussortiert und ausgeführt wird Es baut auf dem gleichen Compiler-Frontend / IR auf wie das Compiler-Backend benutzen. Die Laufzeit ist als statische Bibliothek aufgebaut, die im Erlöschen in kompilierte Erlang-Anwendungen eingebunden ist, Diese Laufzeit umfasst die Maschinerie, die neben dem zugrunde liegenden System arbeiten muss, abgesehen von to Stellen Sie Parallelität, Garbage Sequence und andere Anforderungen bereit, bei denen es sich möglicherweise nicht mehr um ein Fragment des Compilers handelt Transformation. Anpassungen vornehmen Bevor Sie wertvolle Anpassungen vornehmen, eröffnen Sie bitte einen mit “RFC” gekennzeichneten Stau mit dem gewünschten Stau Lösen Sie, Ihren Lösungsvorschlag und alle hervorragenden Fragen, die Sie im Falle der Implementierung bekommen haben. Das Kernteam (und Sie) werden diese Qual nutzen, um über die Anpassungen zu sprechen, und beide sind grün und mild Vorschlag, oder suchen Sie nach Datensatzdaten aus Anpassungen. In einigen Fällen könnte ein Vorschlag sogar vorurteilsfrei nach Datensatzdaten aus Anpassungen suchen, bei denen es sich möglicherweise um beides handelt nicht mit den Zielen des Dirigenten vereinbar sind oder eine zu hohe Unterhalts- oder Komplexitätslast auferlegen, und wird zweifellos in unten gedreht werden. Es ist wichtig, zuerst die RFC-Diskussion einzuleiten, um zu verhindern, dass eine Person anwesend ist von der Erledigung einer Reihe von Arbeiten, die im Erlöschen nicht mehr aufwärts gestreamt werden konnten, und die es dem Kernteam oder der Nachbarschaft, um Konzepte zusammenzustellen, die die Arbeit weniger kompliziert oder besser im Kopf erfinden könnten. Für kleinere Anpassungen / Korrekturen von Computerviren steht es grundsätzlich frei, zuerst einen Stau zu eröffnen, falls Sie die Möglichkeit haben, die Leitung und den Betrieb neu zu bestimmen brauche eine Anleitung zur Arbeit durch die Reparatur. Ansonsten bietet es sich an, einen PR-Auftakt zu korrigieren ohne mit ihrer reparatur zu verlängern, und die übersicht dort passieren zu lassen. Fühlen Sie sich grundsätzlich immer frei, Faktoren für Fehler und sogar wahrgenommene Faktoren oder Fragen zu ergründen, da sie sich auf die Summe a beziehen wertvolle nützliche Ressource für andere; aber bitte versammle dich erfinde offensichtlich, um die Quest-Funktion zu nutzen, um sicherzugehen Vervielfältigung! Wenn Sie beabsichtigen, an Diskussionen teilzunehmen oder Beiträge zum Dirigieren zu leisten, teilen Sie dies bitte mit wird keinen Missbrauch jeglicher Art gegen andere Mitglieder der Nachbarschaft mehr dulden; In dem Fall fühlt man sich zufällig wie jeder Einzelne Wenn Sie missbräuchlich oder ungeeignet sind, wenden Sie sich an eines der vielen Mitglieder des Kernteams, ohne dies zu verlängern (oder an alle) uns). Wir sind bestrebt, eine Umgebung zu fördern, in der sich andere Leute, sowohl frisch als auch erfahren, grundsätzlich willkommen fühlen und baumeln können Ihre Fragen wurden beantwortet und erwartungsvoll gemeinsam daran gearbeitet, dieses Dirigieren besser zu erfinden! Über Lumen Lumen ist nicht mehr nur ein Compiler, sondern ebenso erfolgreich eine Runtime. Es besteht aus zwei Teilen: Ein Compiler für Erlang zu nativem Code für einen bestimmten Zweck (x 86, ARM, WebAssembly) Eine in Rust implementierte Erlang-Laufzeit, die die Kernfunktionalität bietet Grundlegend für die Implementierung von OTP Der kostbare Motivator für Lumens Muster wurde die Fähigkeit, gemeinsam Elixier zu bringen Anwendungen für WebAssembly, die die Verwendung von Elixir als Sprache ermöglichen für Frontend-Muster. Es ist zweifellos eine Möglichkeit, Lumen für andere Zwecke einzusetzen Plattformen ebenso erfolgreich, indem in sich geschlossene ausführbare Dateien auf Plattformen erzeugt werden, die x 86 entsprechen. Lumen ist wie folgt diversifiziert als BEAM: Es ist eine Art und Weise, wie ein Forward-of-Time-Compiler als eine weitere digitale Maschine arbeitet auf Bytecode Es gibt einige zusätzliche Einschränkungen, um noch effektivere Optimierungen zu ermöglichen passieren, in bestimmten Hot-Code wird das Neuladen nicht mehr unterstützt Die von Lumen gelieferte Laufzeitbibliothek ist in Rust geschrieben, und zwar sehr identisch, unterscheidet sich weitgehend deutlich. Selbst ausgehändigt ist eines von vielen Zielen, eine zu montieren Bessere Grundlage, um herauszufinden, wie die Laufzeit implementiert ist, und um zu erhöhen Ergebnis der effektiveren statischen Prognose von Rusts, um Fehler frühzeitig zu erkennen. Es hat zugenommen, um sich auf WebAssembly zu konzentrieren Die letzte Konsequenz der Kompilierung einer BEAM-Anwendung nach Lumen-Strategie ist eine statische ausführbare Datei. Das ist anders Unglaublich, wie die Bereitstellung auf dem BEAM heute funktioniert (d. h. nach der Strategie von OTP-Releases). Wohingegen wir Wenn wir die Fähigkeit opfern, heiße Upgrades / Downgrades zu Erstellen, erfinden wir enorme Vorteile bei der plattformübergreifenden Nutzung Kompatibilität und Benutzerfreundlichkeit. Stolpern Sie die ausführbare Datei einfach auf einer Plattform, auf die Sie Wert legen, und beeilen Sie sich, nein Instrumente erforderlich, oder besondere Bedenken während der Builds. Das funktioniert genauso wie beim Bau von Rust oder Traipse-Anwendungen funktionieren an diesem Tag. Ziele Verstärken Sie WebAssembly als Erfindungszweck Gestalten Sie einfach zu implementierende statische ausführbare Dateien als Erfindungsartefakte Integration mit Werkzeugen, die von BEAM-Sprachen bereitgestellt werden Umweltfreundlichere Ausführung, da zur Laufzeit kein Interpreter erforderlich ist Feature-Parität mit Mainline-OTP (mit Ausnahme der unten aufgeführten Nicht-Ziele) Nicht-Ziele Verstärkung für Hot-Upgrades / Downgrades Verstärkung für dynamisches Laden von Code Lumen ist eine weitere Implementierung von Erlang / OTP. Infolgedessen handelt es sich nicht mehr um kampferprobte Methoden so performant wie der BEAM selbst. Wenn wir nicht die Gelegenheit haben, einige Benchmarks zu durchkreuzen, ist es ein schwieriger Weg, dies zu wissen Was ist die Anpassung zwischen den 2 im Fall der Effizienz in der Realität. Lumen soll BEAM zu diesem Zeitpunkt nicht mehr ersetzen. Zumindest die anerkannten Nichtziele Dies bedeutet, dass für mindestens einen Teil der Initiativen eine bestimmte Funktionalität erforderlich ist fehlen. Alternativ können damit Anwendungen ersetzt werden, die möglicherweise besser bedient werden können durch seinen charakteristischen Raum. Struktur Compiler Das Compiler-Frontend akzeptiert, dass Erlang Recordsdata bereitstellt. Hier wird in eine geparste abstrakter Syntaxbaum, reduziert auf EIR (Erlang Intermediate Illustration), dann ist in der auf LLVM IR reduzierten Auslöschung das eingestellte Codegen vervollständigt. Intern repräsentiert der Compiler Erlang / Elixir-Code in einer Erfindung sehr ähnlich Fortsetzung vorbei sortieren. Fortsetzungen sind eine hochwirksame Form, die es erlaubt Einfache Implementierung von nicht lokalen Rückgaben / Ausnahmen, grün Einfädeln und mehr. Optimierungen sind hiermit grundsätzlich abgeschlossen Darstellung vor dem Absenken auf LLVM IR. Starren eirproject / eir für mehr wissen über die Compiler-Frontend und EIR selbst. Der Compiler erstellt Objektdatensätze und verwaltet das Verknüpfen von Objekten gemeinsam in eine ausführbare Datei. Laufzeit Die Laufzeit-Assemblierung ähnelt im Wesentlichen der von OTP, aber wir betreiben keinen Interpreter mehr, sondern nur noch einen Code wird zeitversetzt kompiliert: Der Einstiegspunkt fügt Objekte in die Umgebung ein und startet den Scheduler Der Scheduler besteht aus 1 Scheduler pro Thread Jeder Scheduler kann Arbeit von anderen Schedulern entfernen, wenn es sich um eine vorübergehende Arbeitsweise handelt Prozesse werden auf demselben Scheduler erzeugt wie die Blaupause, von der sie erzeugt wurden. Ein Scheduler ist jedoch in der Lage, sie zu entfernen, um die Stabilität zu erhöhen I / O ist asynchron, mit dedizierten Threads und einer Turnierschleife für den Versand Das vorläufige Modell wird zweifellos mäßig spartanisch sein, aber genau hier können wir uns auf die Laufzeit konzentrieren Verhalten, bevor wir zurückkehren, um weitere Funktionen hinzuzufügen. NIFs NIFs bieten die Option, in jeder Sprache mit C FFI beschrieben zu werden, und müssen zu Objekt kompiliert werden recordsdata und dann als Strategie von Linker-Flags an den Compiler übergeben. Der Compiler wird dann insbesondere die NIFs erfinden sind in die ausführbare Datei verlinkt. Die Montage des FFI ist ruhig in der Luft – wir können zweifellos eine Kompatibilitätsschicht baumeln lassen, die in der Lage ist ahme die existierende erl_nif.h-Schnittstelle nach, aber aufgrund der diversifizierten Laufzeit könnte es sogar unverfälschte geben Möglichkeiten, weitere EXPLAIN-Haken an Teilen des Systems zu montieren. Lizenz Apache 2.0   
Weiterlesen

Euch gefällt was ihr seht? Nehmt euch doch einen kurzen Moment und unterstützt uns auf Patreon!
Lumen / Lumen 1