Hilfe:Lua

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Luaist eineSkriptsprache,die 2013 in der deutschsprachigen Wikipedia verfügbar wurde.

  • Die Funktionen werden über eine neue Parserfunktion{{#invoke:}}in eine umgebende klassischeVorlageeingefügt und ergänzen diese um allgemeine Hilfsfunktionen, die bislang schwer zu realisieren waren.
  • Gegenüber Wikisyntax-Vorlagenprogrammierungbietet Lua vor allem bislang kaum mögliche Techniken im Zusammenhang mit Zeichenketten und größeren Mengen an numerischen Daten; nebst Analyse des Wikitextes der dargestellten Seite.
  • InMediaWikiwird sie über diemw:Extension:Scribuntoangebunden, die auch weitere Skriptsprachen ermöglichen würde.
Organisationsfragen der deutschsprachigen Wikipedia werden unterWikipedia:Luazusammengestellt.

Die Darstellung auf diesen Hilfeseiten trifft dagegen im Prinzip auf jedes beliebige Wiki zu.

Vorlagenprogrammierung

[Bearbeiten|Quelltext bearbeiten]

Wikisyntax:{{:}}

{{#invoke:}}
  • Pflicht:1 2
  • Optional:<beliebig>

Aufruf (in der Regel innerhalb einer Vorlage):
{{#invoke: Modul-Titel | Funktionsname | Wert1 | Wert2 | NameX=Wert... }}
Die Parameter können wie bei Vorlagen benannt oder unbenannt sein; es gelten prinzipiell analoge Regeln.

  • Bei unbekannt von außen kommenden Inhalten sollten keine unbenannten Parameter verwendet werden, bzw.1=Wert1wie bei Vorlagen (verschärftesGleichheitszeichen-Problem;kann zum Syntaxfehler führen).
  • Der Rückgabewert der aufgerufenen Funktion ist eine Zeichenkette mit Wikitext, der entsprechend an dieser Stelle in den Artikel eingebettet wird.
  • Beispiel:Modul:Hello– Demonstration:Hallo, Welt! Dies ist Lua!
  • Zum Zeitpunkt des Funktionsaufrufes hat der Parser mehrere wichtige Schritte bereits abgeschlossen, insbesondere die Vorlagenexpansion und die Verarbeitung vonExtension-Tags(<ref>,<pre>,<nowiki>,…). So würde eine direkte Ausgabe von{{Vorlage}}also nur zur Ausgabe des Textes{{Vorlage}}ohne die tatsächliche Vorlagenexpansion führen. Bei Bedarf kann das aber alles innerhalb der Modul-Programmierung erfolgen.
  • Die Ausführungsumgebung wird bei jedem Aufruf von#invokezurückgesetzt. Eine direkte Übernahme von Variablen zwischen zwei Aufrufen ist nicht möglich.
  • Innerhalb der aufrufenden Vorlage erfolgen die einzelnen Aufrufe von#invokesequentiell und unter Verwendung der gleichen (nur wenig auswertbaren)Elternumgebung.
  • Verschiedene Einbindungen der Vorlage selbst (z. B. in einem Artikel) werden dagegen parallel abgearbeitet und teilen auch keine Elternumgebung.

Ein Aufruf von#invokeunmittelbar in einem enzyklopädischenArtikeloder einer allgemeinen Projektseite ist absolut unerwünscht. Diese Aufrufe sollen immer inVorlagenverpackt sein; ausgenommen sind solche Projektseiten, die sich spezifisch mit Lua beschäftigen (WP:Lua/***).

  • Schachtelungstiefe und Größe (Expansion) werden durch Lua zwangsläufig reduziert. Seiten, die bislang nicht dargestellt werden konnten, lassen sich nun ohne Sprengung der Limits anzeigen.
  • Der Zeitverbrauch für die Gesamtdarstellung einer Seite mit Nutzung komplexer Vorlagenprogrammierung lässt sich auf etwa ein Drittel reduzieren, wenn die Vorlagensyntax durch gleichwertige Lua-Module ersetzt wird.
  • Bei einer Seite mit vielen sehr einfachen Vorlagen könnte die Performance dagegen verschlechtert werden, falls jede einfache Vorlage durch eine Lua-Benutzung ersetzt würde: Jeder Start einer Lua-Funktion kostet ein gewisses Eintrittsgeld, das durch Ersatz einer bisher komplizierten Vorlagenprogrammierung erst einmal erwirtschaftet werden muss. Wird nur eine einfache Vorlage ersetzt, so war diese möglicherweise effizienter gewesen.
  • Alle Lua-Module einer Seite sind auf eine kumulierte Prozessor-Zeit von 10 Sekunden begrenzt. Diese Zeit wird wie die Nutzung anderer Ressourcen im HTML-Quellcode als PP-Report des Präprozessors ausgewiesen. In Zeiten hoher Serverbelastung kann die Ausführungszeit bis auf das Vierfache steigen. Deshalb sollte, wenn in günstigen Zeiten eine Gesamtzeit von 2 Sekunden erreicht wird, eine Code-Optimierung (kaum signifikant zu erwarten) oder eine Aufteilung übergroßer Seiten überlegt werden.
  • Ein weiterer Flaschenhals können die „teuren “Funktionen sein. Ihre Anzahl pro dargestellter Gesamt-Seite ist auf 500 begrenzt. Dazu zählt unter anderem die Abfrage nach der Existenz von Seiten und Dateien.

Siehe auch:Hilfe:Vorlagenbeschränkungen.

Organisation der Seiten

[Bearbeiten|Quelltext bearbeiten]
  • Die Quellcodes stehen in einem eigenen NamensraumModul:auf Seiten, die „Modul “genannt werden.
    • Jedes Modul enthält eine oder mehrere Funktionen in Lua.
    • Mittels#invoke,require()oder in geeigneten Fällenmw.loadData()kann eine komplette Modulseite geladen werden.
  • Ausschließlich Seiten aus dem NamensraumModul:können für die Auswertung benutzt werden.
  • An jede Quellcode-Seite ist eine Dokumentationsseite angebunden, die auch genutzt werden soll. Sie bildet sich aus dem Seitennamen alsUnterseite/Doku.
  • Seit Oktober 2022 sind auchJSON-Seiten möglich; typischerweise mit.jsonam Schluss des Seitennamens.
  • Vorlagen sind im Lua-Quellcode nicht wirksam; SLA müssten aufWP:A/Agestellt werden oder mit Verweis auf die Oberseite (Modul) in der Dokumentationsseite. Eine unmittelbare Kategorisierung ist ebenfalls nicht möglich.
  • Module werden verwaltet wie Vorlagen (Einbindung von Seiten). Sie erscheinen auch unter „Links auf diese Seite “, selbst wenn sie nicht mittels#invokeeingebunden sind, sondern durchrequire()usw. aufgerufen werden. Werkzeuge zählen etwa die Zahl der Einbindungen.

Weiterleitungen und Verschiebungen

[Bearbeiten|Quelltext bearbeiten]

Weiterleitungen von einer Modulseite zu einer anderen sind nicht möglich. Eine „Weiterleitung “würde Wikisyntax statt Lua-Quellcode erzeugen und (anders als im Fall von Vorlagen) alle Einbindungen undrequire()des Moduls zum Auswerfen von Syntaxfehlern bringen; deshalb könnte eine Weiterleitung noch nicht einmal ohne Weiteres abgespeichert werden.

Wenn der Name eines Moduls nicht mehr geeignet erscheint, muss die Existenz von Lua-Quellcode unter den programmierten Namen gesichert bleiben. „Normale “Verschiebungen sind nicht möglich. Bei produktiv genutzten Modulen, die bereits von sehr vielen Seiten eingebunden sind, ist die Prozedur recht umständlich; insbesondere wenn bereits mehrere Entwickler mitgewirkt hatten.

  • Zuerst ist ein neues Modul unter dem künftigen Namen anzulegen und mit dem Quellcode zu füllen.
  • Wenn mehrere Benutzer an der Programmierung beteiligt waren, ist aufWP:IMPVersionsimport innerhalb desselben Projekts zu beantragen.
  • Dann sind alle Nutzungen auf den neuen Namen umzusetzen.
  • Die Verwendung in den dargestellten Seiten einschließlichrequire()wird aufSpezial:Linklisteangezeigt. Diese Liste muss schließlich leer sein.
  • Zuletzt ist das veraltete Modul zu löschen.

Allerdings kann bis zur Auflösung aller Nutzungen eine einheitliche Funktionalität erreicht werden, indem als einzige Zeile vorgehalten wird:return require( "Modul:NeuerName" )

Solange das Modul noch nicht produktiv genutzt wird, kann es jedoch einfach verschoben werden.

Seiten-Bearbeitung

[Bearbeiten|Quelltext bearbeiten]
  • Bei Bearbeitung der Quellcode-Seite wird derCodeEditorzugeschaltet.
  • Eine Debugging-Konsole wird angezeigt.
  • Module können in einer Vorlagen-Umgebung (innerhalb einer anderen Seite) getestet werden.

Siehe dazu:Hilfe:Lua/Quellcode und Vorschau

Das Speichern von syntaktisch fehlerhaften Lua-Modulen ist seit Oktober 2014 nicht mehr möglich.

Syntaxhervorhebung und Zeilennummern

[Bearbeiten|Quelltext bearbeiten]

Bis zu einer gewissen Maximalgröße der Seite werden die Syntaxelemente in unterschiedlichen Farben dargestellt. Seit Anfang 2021 werden auf Code-Seiten auch Zeilennummern angezeigt.

  • Eine Verlinkung auf eine bestimmte Zeile ist möglich mit demFragmentbezeichner#L-1,#L-2,#L-3usw.
  • Ein Klick auf die Zeilennummer hebt die aktuelle Zeile hervor, und in der Adresszeile des Browsers wird die geeignete Verlinkung auf diese Zeile dargestellt.
  • In aktuellen Diskussionen kann auf die momentane Version verlinkt werden.
  • Weil sich der vorangehende Code im Lauf der Zeit ändern kann, wäre ggf. einPermaLinkratsam.

Die Maximalgröße von Seiten mit Syntaxhervorhebung, die eine farbige Auszeichnung bei zu großen Seiten unterbindet, verhindert dann auch die Generierung der Zeilennummern.

Spielwiese
Freies Ausprobieren kleiner Code-Fragmente auf kurze Zeit.
Für größere Entwicklungsarbeiten ermöglicht dieVorlagenspielwieseauch Quelltext-Module auf eigenen Benutzerseiten.
Hello
Demonstrationsmodul(Hallo, Welt!)Hallo, Welt! Dies ist Lua!
Alle Benutzer
zum Beta-Testen durch mehrere Anwender mit
  • Modul:Benutzerin:xxxxxxxxxxxx
  • Modul:Benutzer:xyxyxyxyxyxy
  • Unterseiten für Benutzer-Module sind möglich.
  • Seite muss auch dort angelegt werden.
Vorlagenspielwiese
Alle Benutzer können mittels derVorlagenspielwieseauf ihren Benutzerseiten eigene Module zum Testen verwalten. Mittels desBenutzerskripteseditorContentsteht dann auch derCodeEditorzur Verfügung.

Außerdem sindtestwiki:,test2wiki:(mit dem eigenenSUL-Account) und auchde.wikipedia.beta(separater Account nötig) nutzbar. In der echtendewikisollten dann erst halbwegs ausgereifte Produktiv-Versionen auftauchen.

Programmieren in Lua

[Bearbeiten|Quelltext bearbeiten]

Siehe dazuHilfe:Lua/Programmierungmit den Spezialthemen

Zur Sprache Lua allgemein siehe die alsWeblinksangegebenen Handbücher.

Darstellung von Quellcode

[Bearbeiten|Quelltext bearbeiten]
  • Quellcode kann in Textseiten mittels<syntaxhighlight lang= "lua" >dargestellt werden.
  • Der Inhalt eines ganzen Moduls kann farbig angezeigt werden mit:
    • {{#tag:syntaxhighlight |{{Modul:Hello}}| lang=lua}}