Ubuntu 22.04 Jammy Jellyfish
Ubuntu 20.04 Focal Fossa
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Lua 🇬🇧 ist eine Programmiersprache, welche sich durch einen besonders kleinen Interpreter auszeichnet. Dies ist dadurch bedingt, dass Lua nicht als "allumfassende" Programmiersprache konzipiert war bzw. ist, sondern als Erweiterung von C um eine eingebettete Skriptsprache. Es steht jedoch auch ein alleinstehender Lua-Interpreter zur Verfügung. Durch die geringe Größe des Interpreters sind Lua-Skripte auch sehr schnell.
Lua unterstützt in erster Linie prozedurale Programmierung, allerdings sind auch andere Programmieransätze inklusive Objektorientierung möglich.
Lua bietet trotz der geringen Größe einen vollständigen Satz an "Grundbefehlen", wie man ihn auch von anderen Programmiersprachen her kennt. Des Weiteren bietet Lua weitere Annehmlichkeiten moderner Sprachen wie z.B. dynamische Typisierung, einen automatischen Garbage-Collector, Erzeugen eines plattformunabhängigen Bytecodes und Verfügbarkeit für diverse Plattformen 🇬🇧. Außerdem ist Lua über Module, die Luarocks 🇬🇧, erweiterbar.
Lua wird von einer Reihe von Projekten / Programmen als Erweiterung eingesetzt. Das bekannteste ist vielleicht World of Warcraft 🇩🇪, aber auch der Fenstermanager Ion3 oder der Desktop-Kalender Rainlendar sind über Lua-Skripte erweiterbar.
Lua ist in mehreren Versionen 🇬🇧 in den Quellen verfügbar. Es sind Lua 5.0 (nur bis einschließlich Impish 21.10) 5.1, 5.2, Lua 5.3 und Lua 5.4 (ab Impish 21.10) verfügbar.
Beispiel für die Paketinstallation von Lua 5.3:
lua5.3 (universe)
Befehl zum Installieren der Pakete:
sudo apt-get install lua5.3
Oder mit apturl installieren, Link: apt://lua5.3
Dabei wird sowohl der alleinstehende Interpreter als auch die C-Bibliothek zum Einbinden in eigene Projekt installiert.
Andere Lua-Versionen lassen sich entsprechend über die Pakete lua50 (nur bis einschließlich Impish), lua5.1, lua5.2 und lua5.4 (ab Impish) installieren, alle Pakete liegen in dem Universe-Quellen.
Es gibt in den offiziellen Paketquellen, Sektion universe, eine ganze Reihe weiterer Lua-Bibliotheken (z.B. Datenbankanbindungen, Netzwerk- / Webprogrammierung uvm.). Die Paketnamen beginnen alle mit lua-, eine vollständige Übersicht gibt es in der Paketsuche 🇩🇪.
Eine vollständige Übersicht über die Lua-Befehle findet man im "Lua Reference Manual", Kapitel 5 für Lua 5.2 🇬🇧 bzw. Kapitel 5 für Lua 5.3 🇬🇧
Wichtig für das Verständnis und den effektiven Einsatz von Lua ist der Datentyp table 🇬🇧. Hierbei handelt es sich nicht um eine Tabelle im herkömmlichen Sinne, sondern um ein Assoziatives_Array. Lua organisiert sich in großen Teile über tables, auch wenn dies für den Nutzer nicht immer direkt sichtbar ist. Über metatables 🇬🇧 kann das Verhalten von Lua auch beeinflusst bzw. erweitert werden, allerdings nur über die C-API.
Der interaktive Interpreter für Lua 5.3 lässt sich über den Befehl
lua5.3
bzw. für Lua 5.2 und kleiner:
lua
starten[2]. Man befindet sich nun im interaktiven Modus und kann einzelne Lua-Befehle eingeben. Zeilen können in Lua mit einem Semikolon ;
abgeschlossen werden, dies ist aber nicht zwingend erforderlich. Der Interpreter erkennt auch selbstständig, ob eine Zeile in sich abgeschlossen ist (z.B. nach einer Variablen-Deklaration) oder ob noch weitere Zeilen folgen müssen (z.B. nach dem öffnen einer Schleife mit for
). Der Prompt im Interpreter ändert sich dann auch von >
auf >>
.
Möchte man ein Skript direkt mit dem Aufruf des Interpreters ausführen, so lautet der Befehl
lua SKRIPTNAME #bzw. lua5.3 SKRIPTNAME
Der Lua-Interpreter kennt einige Optionen, welche in den Manpages beschrieben sind.
Natürlich können Lua-Skripte auch mit einem passenden Shebang versehen werden, so dass beim Aufruf des Skripts der Interpreter automatisch gestartet wird. Die entsprechende Zeile lautet:
1 | #!/usr/bin/lua
|
Oder alternativ:
1 | #!/usr/bin/env lua
|
Um Lua innerhalb von C-Programmen zu nutzen, muss man nur die Bibliothek "lua.h" einbinden.
C kann dann Lua-Skripte aufrufen und Lua kann auch C-Funktionen ausführen. Die Kommunikation zwischen C und Lua erfolgt dabei über einen Stack.
Eine vollständige Befehlsübersicht der C-API findet man im "Lua Reference Manual", Kapitel 4 🇬🇧.
Im folgenden ein einfaches, kurzes Beispielskript, was einen kleine Einblick in die Syntax von Lua gewährt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | require("math") function mal_pi(wert) if type(wert) == "number" then return (wert * math.pi) else return "'" .. wert .. "'" .. " ist keine Zahl - kann nicht mit PI multipliziert werden!" end end tab = {} tab[1], tab[2] = 10, 20 tab["schluessel1"] = "wert1" tab["schluessel2"] = 25 tab[3] = "wert2" tab[4] = 30 print("Schlüssel/Index : Wert") for k,v in pairs(tab) do print(k,":",v) end print("\nMultipliziere PI mit jeder Zahl:") for n,v in ipairs(tab) do x = mal_pi(v) print(x) end -- ein Kommentar :-) |
Erklärung:
In der 1. Zeile wird das Modul math
geladen (Hinweis: dient hier nur zur Veranschaulichung von require
. Das Modul "math" gehört zur Standarddistribution und wird immer automatisch mit geladen).
In den Zeilen 3 bis 9 wird die Funktion mal_pi
definiert. Diese erwartet einen Wert wert
der, falls es eine Zahl ist, mit PI multipliziert wird.
In den Zeilen 11 bis 16 wird der table tab
definiert. Es gibt vier Werte mit numerischem Index und zwei mit einen Schlüssel.
In den Zeilen 19 bis 21 wird über die Schlüssel-Werte Paare von tab
iteriert und das Schlüssel-Werte Paar ausgegeben.
In den Zeilen 25 bis 28 wird über alle Elemente von tab
mit numerischen Index iteriert. Der Wert wird an die Funktion mal_pi
übergeben, dass Ergebnis wird mittels print
ausgegeben.
Zeile 29 enthält einen einzeiligen Kommentar.
Die Ausgabe sieht so aus:
Schlüssel/Index : Wert 1 : 10 2 : 20 3 : wert2 4 : 30 schluessel2 : 25 schluessel1 : wert1 Multipliziere PI mit jeder Zahl: 31.415926535898 62.831853071796 'wert2' ist keine Zahl - kann nicht mit PI multipliziert werden! 94.247779607694
Lua-Users.org 🇬🇧 - Lua-Community
Lua - enthält viele Code-Beispiele