Abstract Wikipedia/Updates/2021-05-11/de
◀ | Neuigkeiten von der Abstrakten Wikipedia | ▶ |
- Phase δ abgeschlossen.
Als wir den Aufwand zur Programmierung der Wikifunctions-Website begannen, teilten wir die Arbeit bis zum Start von Wikifunctions in elf Phasen auf, die nach den elf ersten Buchstaben des griechischen Alphabets benannt sind.
- Mit dem Abschluss der Phase α (Alpha) wurde es möglich, Instanzen der vom System bereitgestellten Typen im Wiki zu erstellen.
- Mit der Phase β (Beta) wurde es möglich, Typen und Instanzen dieser Typen auf dem Wiki zu erstellen.
- Mit der Phase γ (Gamma) wurden alle Haupttypen des prägenerischen Funktionsmodells verfügbar.
- Diese Woche schlossen wir Phase δ (Delta) ab.
Das Ziel der Phase δ war es, die Fähigkeit, eingebaute Implementierungen zu evaulieren, verfügbar zu machen.
Was bedeutet das? Jede Funktion in Wikifunctions kann mehrere Implementierungen haben. Es gibt drei verschiedene Möglichkeiten eine Implementierung auszudrücken:
- Als etwas Code in einer Programmiersprache, geschrieben durch die Nutzer von Wikifunctions: Die Implementierung einer Funktion kann in jeder Programmiersprache gegeben werden, die Wikifunctions unterstützt. Unser Ziel ist es, am Ende eine große Zahl von Programiersprachen zu unterstützen, aber wir fangen klein an.
- Als eine eingebaute Funktion, vom Programmierteam geschrieben: das bedeutet, dass der Evaluator die Implementierung als Black Box behandelt. Wir hoffen, dass wir auf nur sehr wenige eingebauten Funktionen angewiesen sind, weil jeder Evaluator alle eingbauten Funktionen implementieren muss, um benutzbar zu sein, und wir wollen das Hinzufügen neuer Evaluatoren (und so neuer Programmiersprachen) so einfach wie möglich machen. Eine Liste zurzeit verfügbarer eingebauter Funktionen ist unten angegeben. Diese Liste ist warhscheinlich nicht final, aber wir hoffen, dass sie nicht wachsen wird.
- Als einen Zusammenschluss anderer Funktionen: Das heißt, dass wir existierende Funktionen als Bausteine verwenden, um neue Fähigkeiten zu implementieren. Wir haben ein paar Beispiele zusammengesetzer Implementierungen veröffentlicht. Die Beispielinmplementation der booleschen Funktionen könnte besonders aufschlussreich sein.
In Phase δ, we created the infrastructure and interfaces to evaluate function calls at all, and allowed for built-in implementations. Die zurzeit verfügbaren eingebauten Funktionen sind die folgenden:
If : Boolean, Any, Any ➝ Any
— gibt das zweite Argument zurück, falls das erste wahr ist, sonst das dritte; if hat zwei Buchstaben.Value by key : Key reference, Any ➝ Any
— gibt den Wert des gegebenen Schlüssels des gegebenen Objektes zurück.Reify : Any ➝ List(Pair(Key reference, Any))
— transformiert irgendein Objekt in eine Liste von Name-Wert-Paaren; es dekonstruiert das Objekt.Abstract : List(Pair(Key reference, Any)) ➝ Any
— transformiere eine Liste von Name-Wert-Paaren in ein Objekt; es konstruiert ein Objekt.Cons : Any, List ➝ List
— Füge ein Objekt am Anfang ener geordneten Liste von Objekten an.Head : List ➝ Any
— Hole das erste Element einer Liste.Tail : List ➝ List
— Hole die Liste ohne ihrem ersten Element.Empty : List ➝ Boolean
— Gib zurück, ob die Liste kein Objekt enthält.First : Pair ➝ Any
— extrahiere den ersten Wert eines Paares.Second : Pair ➝ Any
— extrahiere den zweiten Wert eines Paares.Convert : String ➝ List(Character)
— Kovertiere eine Zeichenkette (string) in eine Liste von Zeichen.Convert : List(Character) ➝ String
— Konvertiere eine Liste von Zeichen in eine Zeichenkette.Same : Character, Character ➝ Boolean
— Vergleicht zwei Zeichen und gibt zurück, ob sie gleich sind.Unquote : Quote ➝ Any
— unquotes a Quote.
Alle der Implementierungen dieser eingebauten Funktionen sind – obwohl sie einfach sind – erste Entwürfe und sind nur leicht getestet. Wenn du sie testest und Feher findest, bitte melde sie auf Phabricator oder sende eine E-Mail an unsere Mailingliste Wir werden sie über die kommenden Wochen verbessern.
Die zwei Screenshots zeigen eine neue Spezialseite zur Evaluation von Funktionsaufrufen an. Hier bieten wir zwei Screenshots mit Beispielen an. Der erste zeigt den Aufruf der If-Funktion. The condition is set to true, and thus the function call should return the consequent (given as the String “this”) and not the alternative (given as the String “that”). And indeed, the Orchestration result below the function call shows a normalized result representing the String “this”:
The second example is taken straight from the phase completion condition on the Phases planning. Here we check whether an empty list is indeed empty (we are calling the Z813/Empty function, and the argument, Z813K1/list is an empty list). Das Ergebnis ist true (im Beispiel der Z40/Boolean mit der Z40K1/Idendität Z41/wahr):
Wir versprechen, die Benutzeroberfläche vor dem Start zu verbessern! This raw JSON output is mostly for debugging and internal development purposes as we work on a design language for the user experience.
We are now moving on to Phase ε (epsilon). In this phase we aim to support user-written implementations in a programming language. Our initial plan is to support code written in JavaScript and Python.
Since running arbitrary code written by anyone on the Internet has major security and performance risks, we will follow up the work in this phase with thorough security and performance reviews working with colleagues across the Foundation.
We currently do not have an official public test instance of the WikiLambda system running. Lucas Werkmeister has, in his volunteer capacity, so far provided us with a regularly updated public test instance, notwikilambda, for which we are deeply grateful, but that instance has not yet been updated to support the orchestrator backend (as we still need to document how to do so). We will continue to not run an instance of our own until after the security and performance reviews have concluded (but we certainly won’t stop anyone else from doing so, and can provide some support on the usual channels if someone wants to set it up).
Following the conclusion of the current Phase, we will move on to Phase ζ (zeta), which will allow for the third type of implementations, compositions.
Thanks to the team, thanks to the volunteers, for their great effort in bringing us so far, and I am excited for the next steps of the project!
(Note: there will not be a newsletter next week.)