www.wikidata.de-de.nina.az
Dieser Artikel behandelt die Programmiersprache Zu weiteren Bedeutungen siehe Lua Begriffsklarung Lua portugiesisch fur Mond ist eine imperative und erweiterbare Skriptsprache zum Einbinden in Programme um diese leichter weiterentwickeln und warten zu konnen Eine der besonderen Eigenschaften von Lua ist die geringe Grosse des kompilierten Skript Interpreters LuaLua LogoBasisdatenParadigmen Skriptsprache imperativ funktionalErscheinungsjahr 1993Designer Roberto IerusalimschyEntwickler Roberto Ierusalimschy Waldemar Celes Luiz Henrique de FigueiredoAktuelle Version 5 4 6 1 14 Mai 2023 Typisierung dynamisch schwach weak typing Wichtige Implementierungen Lua LuaJIT 2 LLVM Lua 3 LuaCLR 4 Dialekte Metalua Idle GSL ShellBeeinflusst von C CLU Modula Scheme SNOBOLBeeinflusste Falcon GameMonkey Io JavaScript Julia MiniD MoonScript Red Ruby SquirrelBetriebssystem plattformunabhangigLizenz MIT Lizenzwww lua orgLua Programme sind meist plattformunabhangig und werden vor der Ausfuhrung in Bytecode ubersetzt Obwohl man mit Lua auch eigenstandige Programme schreiben kann ist sie vorrangig als eingebettete Skriptsprache fur andere Programme konzipiert In dieser Hinsicht ist sie mit Tcl vergleichbar Vorteile von Lua sind die geringe Grosse von 120 kB die Erweiterbarkeit und die hohe Geschwindigkeit verglichen mit anderen Skriptsprachen Der Lua Interpreter kann uber eine C Bibliothek angesprochen werden die auch ein API fur die Laufzeitumgebung des Interpreters fur Aufrufe vom C Programm aus enthalt Mittels des API konnen verschiedene Teile des Programmes in C oder C und Lua geschrieben werden wahrend Variablen und Funktionen in beiden Richtungen erreichbar bleiben d h eine Funktion in Lua kann eine Funktion in C C aufrufen und umgekehrt Es gibt auch einen freien JIT Compiler namens LuaJIT der die Revision 5 1 der Sprache unterstutzt 2 Lua ist in ANSI C implementiert und unterstutzt imperative und funktionale Programmierung Implementiert man jedoch selbst Objekte mittels Metatables wird auch objektorientierte Programmierung moglich Inhaltsverzeichnis 1 Geschichte 2 Verwendung 3 Syntax 3 1 Datentypen 3 2 Zuweisungen 3 3 Funktionen 3 4 Reservierte Schlusselworter 3 5 Beispielcode 4 Module 5 Literatur 6 Weblinks 7 Quellen und AnmerkungenGeschichte BearbeitenLua wurde 1993 von Roberto Ierusalimschy Luiz Henrique de Figueiredo und Waldemar Celes in der Computer Graphics Technology Group der Papstlichen Katholischen Universitat von Rio de Janeiro in Brasilien entwickelt Lua ist freie Software und wurde bis zur Version 4 unter einer eigenen BSD Lizenz veroffentlicht ab Version 5 unter der MIT Lizenz Verwendung BearbeitenLua kann sowohl zum Verfassen eigenstandiger Programme verwendet werden als auch als eingebettete Sprache dienen Um einzelne Komponenten eines Computerspiels wie z B Konfigurationsdateien oder die KI von computergesteuerten Charakteren oder Gegnern von der Spiel Engine zu trennen kommt Lua bei der Entwicklung von Computerspielen oft zum Einsatz Dies macht die meist teuer entwickelte Spiel Engine flexibler und ermoglicht eine mit geringerem Aufwand verbundene Wiederverwendbarkeit weshalb Lua im Bereich proprietarer Spiele verwendet wird Lua wird zum Beispiel in dem bekannten Spiel Roblox verwendet Auch einige insbesondere dynamische und Tiling Fenstermanager nutzen Lua fur Konfiguration und Steuerung darunter awesome 5 und Ion3 Syntax BearbeitenDatentypen Bearbeiten Neben den Datentypen nil boolean number mit den internen Subtypen integer und float string function userdata und thread kennt Lua als einzigen strukturierten Datentyp table Tabelle Eine Tabelle ist ein assoziatives Datenfeld also eine Ansammlung von Schlussel Daten Paaren Der Schlussel Index kann dabei jeden Datentyp ausser nil besitzen Weiterhin wird unterschieden zwischen dem Zahlenschlussel 1 und dem Stringschlussel 1 Die Indizierung von Tabellen beginnt im Gegensatz zu C ahnlichen Sprachen mit 1 Tabellen konnen auf folgende Weisen erzeugt werden T Erzeugt eine leere Tabelle und weist sie der Variablen mit dem Namen T zu T ja nein Eine Tabelle mit 3 Elementen wobei T 1 ja T 2 nein und T 3 T 1 ja 2 nein 3 Wie Zeile vorher nur mit expliziter Indizierung T 900 3 900 4 Tabelle mit 2 Elementen aber unregelmassigen Indizes T x 5 y 10 Typisches assoziatives Datenfeld mit T x T y auch als T x T y zugreifbar T x 5 y 10 ja nein Gemischte Tabelle mit T x T y T 1 T 2 T Nachricht wahl ja nein Tabellen konnen weitere Tabellen enthalten Zuweisungen Bearbeiten a 5 b hi local a a Einfache Zuweisungen Variablen sind nicht typisiert und konnen verschiedene Datentypen haben Lokale Variablen definiert mit local sind auf den aktuellen Namensbereich beschrankt a b c 1 2 3 Mehrfachzuweisungen sind erlaubt a b b a Wertetausch Anweisungen werden von rechts nach links ausgewertet a b 4 5 6 Uberflussige Werte Bsp 6 werden ausgewertet aber verworfen a b da Fehlende Werte auf der rechten Seite werden mit nil ersetzt a nil Zerstort a Der Speicherbereich von a wird vom Garbage Collector freigegeben a z Falls z nicht definiert ist wird nil zugewiesen und somit a freigegeben a 3 2 Der Operator erwartet Zahlen die Zeichenketten werden also in Zahlen konvertiert also erfolgt hier die Zuweisung a 5 a 3 2 Der Verbindungsoperator erwartet Zeichenketten die Zahlen werden konvertiert a 32 local a lt const gt 5 lexikalische lokale Konstanten wurden in Lua 5 4 eingefuhrt local f lt close gt io open file ebenfalls ab 5 4 to close Variablen mit ahnlicher Semantik wie Pythons Context Manager with Funktionen Bearbeiten Funktionen konnen mit dem Schlusselwort function erzeugt werden Funktionen besitzen keine fixierte Anzahl an Parametern und Ruckgabewerten function probe zahl1 zahl2 text tabelle zahl3 zahl1 zahl2 zahl4 zahl1 zahl2 print text if tabelle nil then print tabelle eintrag end return zahl3 zahl4 end probe 10 20 Hallo eintrag Welt erlaubter Funktionsaufruf x y probe 10 20 ebenfalls erlaubter Aufruf text und tabelle sind nil Beim Aufruf der Funktion mussen nicht alle Variablen ubergeben werden Fehlende Parameter besitzen automatisch den Nullwert nil Dasselbe gilt fur Ruckgabewerte Dadurch lassen sich Funktionsuberladungen einfacher implementieren das Vorkommen von Laufzeitfehlern steigt jedoch Reservierte Schlusselworter Bearbeiten and break do else elseif end false for function goto if in local nil not or repeat return then true until while Das Schlusselwort nil steht neben false fur falsch und generell fur nicht initialisierte Variablen oder nicht interpretierbare Werte Beispielcode Bearbeiten Das klassische Hallo Welt Programm sieht wie folgt aus print Hallo Welt Kommentare konnen einzeilig sowie mehrzeilig verfasst werden Ein Kommentar in Lua beginnt mit zwei Bindestrichen und geht bis zum Ende der Zeile Kommentare konnen auch uber mehrere Zeilen ausgeweitet werden sodass die Dokumentation des Quellcodes leichter fallt Beispiel fur eine Rekursion Berechnung der Fakultat function factorial n if n 0 then return 1 end return n factorial n 1 end Mit den Kurzschlussoperatoren and und or kann die Funktion kurzer so geschrieben werden dies entspricht dem Auswahloperator von C und verwandten Sprachen function factorial n return n 0 and 1 or n factorial n 1 end Funktionen gelten in Lua als First Class Objekte Das bedeutet insbesondere dass Funktionen wahrend der Laufzeit dynamisch erzeugt und auch vorhandenen Variablen zugewiesen werden konnen Das folgende Beispiel zeigt wie die Variable print welche auf eine Standardfunktion der Lua Bibliothek zeigt mit einer anderen Funktion uberschrieben wird do local oldprint print aktuelle globale print Funktion uber oldprint zugreifbar machen function print s Neue globale Definition von print oldprint I say s die die alte print Funktion aufruft end end Befehle in Lua konnen mit einem Semikolon abgeschlossen werden Falls mehrere Befehle in einer Zeile stehen erleichtert dies die Lesbarkeit des Codes Die Syntax lehnt sich an die von Pascal an was besonders Anfangern den Einstieg in Lua erleichtert Im Gegensatz zu von Pascal abgeleiteten Sprachen nutzt Lua jedoch und nicht als Vergleichsoperator als Zuweisungsoperator anstelle von in Pascal und fur ungleich anstelle von lt gt Module BearbeitenLua ist durch benutzerdefinierte Module beliebig erweiterbar Um diese zu verwalten ist der in Lua geschriebene Paketverwalter LuaRocks verfugbar Eine Liste mit verbreiteten Lua Modulen Modul BeschreibungLuaFileSystem Zugriff auf Ordnerstrukturen und Dateieigenschaften LuaDoc Dokumentationstool fur Lua Quellcode LuaSocket Bibliothek fur Socketprogrammierung LuaSQL Lua Interface fur PostgreSQL ODBC MySQL SQLite Oracle und OLE DB stdlib Bibliothek fur haufige Programmieraufgaben bezieht sich auf Listen Tabellen funktionale Programmierung Regulare Ausdrucke Objekte Pretty Printing und getopt MD5 einfache kryptografische HashfunktionCopas Dispatcher basierend auf Co Routinen der von TCP IP Servern verwendet werden kann LuaZip Bibliothek die von ZIP Dateien lesen kann LuaInterface Verbindung zwischen Lua und Microsofts Net Framework Common Language Runtime CLR LuaBitOps Eine auf C basierende Erweiterung fur Lua fur bitweise Operationen von Zahlen LuaXML Einfache Verbindung zwischen XML und Lua Lanes Ermoglicht die parallele Ausfuhrung von verschiedenen Lua Umgebungen Penlight Bibliothek die den Umgang mit Tabellen Arrays Strings Dateipfaden Ordnern Daten und funktionalen Programmieranwendungen vereinfacht Oil Einfacher und effizienter Object Request Broker CORBA Literatur BearbeitenRoberto Ierusalimschy Programmieren in Lua 4 Auflage Open Source Press 2016 ISBN 978 8 59037 986 7 Roberto Ierusalimschy L H Figueiredo W Celes Lua 5 1 Reference Manual August 2006 ISBN 85 903798 3 3 Kurt Jung Aaron Brown Beginning Lua Programming Wrox 2007 ISBN 0 470 06917 1 Claus Kuhnel Daniel Zwirner Lua Einsatz von Lua in Embedded Systems 2 Auflage Skript Verlag Kuhnel 2012 ISBN 978 3 90785 715 1 David Young Learning Game AI Programming with Lua Packt Publishing 2014 ISBN 1 783 28133 2 Weblinks Bearbeiten nbsp Commons Lua Sammlung von Bildern Videos und Audiodateien Lua org offizielle Website englisch und portugiesisch Lua Unofficial FAQ LuaRocks Paketmanager und repository Lua Users Wiki Awesome Lua auf GitHub Learn Lua in 15 Minutes Schnelles leichtgewichtiges eingebettetes Scripting mit Lua von Jan Bornholdt Fachhochschule WedelQuellen und Anmerkungen Bearbeiten ANN Lua 5 4 6 now available 14 Mai 2023 abgerufen am 14 Mai 2023 a b LuaJIT Abgerufen am 26 Februar 2017 englisch LLVM Lua Abgerufen am 26 Februar 2017 englisch LuaCLR Abgerufen am 3 Januar 2016 englisch Julien Danjou Why not Lua abgerufen am 19 Juni 2021 Normdaten Sachbegriff GND 7547043 3 lobid OGND AKS Abgerufen von https de wikipedia org w index php title Lua amp oldid 237943916