Die Programmiersprache Lua. Philipp Hoppermann

Ähnliche Dokumente
Lua. June 9, Marcus Brenscheidt Marcin Golkowski ( Dynamische Programmiersprachen Lua )

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Theorie zu Übung 8 Implementierung in Java

Probeklausur: Programmierung WS04/05

Schwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen

Welche Informatik-Kenntnisse bringen Sie mit?

Android will doch nur spielen. Java Eine kurze Einführung

Die Programmiersprache Lua

Arbeitsblätter für die Lehrveranstaltung OOP JAVA 1

Programmieren von Webinformationssystemen

Klassen und Objekte. Klassen sind Vorlagen für Objekte. Objekte haben. Attribute. Konstruktoren. Methoden. Merkblatt

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Ruby. Programmieren mit Zucker. Thomas Kühn

Arnold Willemer C++ Der Einstieg. WlLEY

Berichte aus der Informatik. Dieter Pawelczak. Start in die C-Programmierung

Einstieg in die Informatik mit Java

Java-Schulung Grundlagen

Repetitorium Informatik (Java)

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

SmallTalk - Eine kurze Einführung

TEIL I: OBJEKTORIENTIERUNG UND GRUNDKURS JAVA GRUNDLAGEN DER PROGRAMMIERUNG... 4

To know recursion, you must first know recursion. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel 17 1

Javakurs für Anfänger

Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Inhaltsverzeichnis. 1 Grundlagen 1. 2 Einfache Programme 21

Lua Grundlagen Einführung in die Lua Programmiersprache

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

1 Abstrakte Klassen, finale Klassen und Interfaces

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Vorkurs Informatik WiSe 16/17

Algorithmen und Datenstrukturen

ALP II Dynamische Datenmengen

Inhaltsverzeichnis 1 Einführung Die Software JGIS Grundlagen raumbezogener Daten

JAVA - Methoden - Rekursion

Programmieren 2 Java Überblick

UML / Fujaba. Generierung von Java-Quellcode aus UML-Diagrammen. Marcel Friedrich

Programmieren 2 Java Überblick

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter});

System.out.println("TEXT");

Grundlagen von Python

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Syntax der Sprache PASCAL

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

Objektorientierte Programmierung mit Java

Organisatorisches. drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50

Roberto lerusalimschy. Programmieren mit Lua

Probeklausur: Programmierung WS04/05

Einstieg in die Informatik mit Java

Fachhochschule Südwestfalen Wir geben Impulse. Kontrollstrukturen und Schleifen in Octave

2. Programmierung in C

Programmieren von Webinformationssystemen

Stapel (Stack, Keller)

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete! 4. Ausnahmen (Exceptions) II.4.

Thread-Synchronisation in in Java. Threads Wechselseitiger Ausschluss Bedingte Synchronisation Beispiel: Warteschlangen

Musterlösung Stand: 5. Februar 2009

AuD-Tafelübung T-B5b

Die Programmiersprache C Eine Einführung

Thomas Binzinger. Jetzt lerne ich. Delphi. Markt+Technik Verlag

Institut für Programmierung und Reaktive Systeme. Java 3. Markus Reschke

Vorlesung Informatik II

B Java RMI B.2 B.4. 1 Java. 1.2 Methoden. 1.1 Objekte (2) 1.1 Objekte. Objektorientierte Sprache. Klassenbeschreibung. Methode ist eine Art Funktion

Arbeitsgruppe Programmiersprachen und Übersetzerkonstruktion Institut für Informatik Christian-Albrechts-Universität zu Kiel. Seminararbeit. Lua 5.

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Schnittstellen, Stack und Queue

Stack stack = new Stack(); stack.push ("Würstchen"); string s = (string) stack.pop(); Console.WriteLine (s);

RTOS lernt Scripting dank Lua. - Raphael Zulliger, Indel AG

Polymorphie/Späte Bindung Abstrakte Klassen Interfaces. Polymorphie/Späte Bindung Abstrakte Klassen Interfaces

Object Oriented Perl. Wie man auch bei "einfachen" Skripts mit modernen Software Entwicklungs-Methoden Qualität und Produktivität verbessern kann

Java Einführung Methoden. Kapitel 6

FEMAG-Anwendertreffen 18. November 2009

Einfach verkettete Liste

Grundbegriffe der Informatik

Programmieren in Java

C# im Vergleich zu Java

C++ Notnagel. Ziel, Inhalt. Programmieren in C++

Einführung in die Programmierung

Programmierkurs: Delphi: Einstieg

JAVA - Methoden

Kontrollstrukturen MySQL Funktionen. MySQL 4, 5. Kapitel 20a: PHP Teil 2. Marcel Noe

6. Verkettete Strukturen: Listen

C++ - Einführung in die Programmiersprache Schleifen

Organisatorisches. Übungsleiter: Karsten Otto Homepage: Aufgaben

Objektorientiertes Programmieren in C++

Grundlagen Internet-Technologien. Clientseitige Web-Programmierung

Objektorientierte Programmierung

Info B VL 8: Abstrakte Klassen & Interfaces

Warum Programme Verträge schließen sollten

Arrays und Schleifen

Modul 122 VBA Scribt.docx

VBA-Programmierung: Zusammenfassung

1.2 Attribute und Methoden Aufbau einer Java-Klasse:

Wo sind wir? Kontrollstrukturen

Handbuch für die Erweiterbarkeit

Kontrollstrukturen. Wo sind wir? Anweisung mit Label. Block. Beispiel. Deklarationsanweisung

Neue Features in C# 2.0

6 Speicherorganisation

Große Übung Praktische Informatik 1

Transkript:

Die Programmiersprache Lua Philipp Hoppermann

Die Programmiersprache Lua Einleitung Sprachumfang Datentypen und -strukturen Kontrollstrukturen Funktionen Exceptions Coroutinen Metatables und Metamethoden Objektorientierung C API 2 Lua in der Spieleentwicklung Zusammenfassung und Auslick

Die Programmiersprache Lua Einleitung Sprachumfang Datentypen und -strukturen Kontrollstrukturen Funktionen Exceptions Coroutinen Metatables und Metamethoden Objektorientierung C API 3 Lua in der Spieleentwicklung Zusammenfassung und Auslick

Einleitung Motivation Implementierung der künstlichen Intelligenz bei Eurofighter in Lua flexiblere KI als bei bisheriger Definition in *.xml-dateien Überblick über Lua 4

Einleitung Geschichte 1993 Roberto Ierusalimschy, Luiz Henrique de Figueiredo und Waldemar Celes Tecgraf, Pontifical Catholic University in Rio de Janeiro grafische Anwendungen (z.b. für Öl-Firma Petrobras) Data-Entry Language (DEL) Simple Object Language (SOL) mächtigere Sprache gefordert Handelsbeschränkungen do-it-yourself -Mentalität 5

Einleitung Ziele Einfachheit Syntax und Semantik automatische Speicherverwaltung (Garbage Collector) dynamische Typisierung Plattformunabhängigkeit Datenbeschreibungsfähigkeit einfache Interaktion mit Host-Programm geringe Größe Effizienz und Geschwindigkeit 6

Die Programmiersprache Lua Einleitung Sprachumfang Datentypen und -strukturen Kontrollstrukturen Funktionen Exceptions Coroutinen Metatables und Metamethoden Objektorientierung C API 7 Lua in der Spieleentwicklung Zusammenfassung und Auslick

Datentypen und -strukturen nil (ungültiger Wert) Boolean Fließkommazahl Zeichenkette (String) Funktion... first-class values können in Variablen gespeichert werden, als Rückgabewert einer Funktion 8

Datentypen und -strukturen table einzige Datenstruktur assoziatives Array hybride Struktur Hash-Teil Array-Teil //Erstellen adresse={plz=52062, ort=aachen} //Zugriff adresse[plz] adresse.plz 9

Kontrollstrukturen bedingte Anweisungen if Ausdruck then a else b end kopfgesteuerte Schleifen while Ausdruck do a end fußgesteuerte Schleifen repeat a until Ausdruck Zählschleifen for i=startwert, Endwert, Schrittweite do a end generische for-schleifen for s,w in pairs(table) do print(s.. -.. w) end 10

Funktionen Name Parameterliste Funktionskörper beliebig viele Argumente und Rückgabewerte alle Funktionen sind anonym function Name(param1,param2) Inhalt return ret1,ret2 end 11

Exceptions bei Fehler wird Error ausgelöst selbst auslösen mit: error( Fehlermeldung ) abgesichert ausführen mit pcall liefert im Fehlerfall false und die Fehlermeldung äquivalent zu throw, try... catch z=assert(tonumber(n), "keine Zahl") if pcall(f) then... else... end 12

Coroutinen ermöglichen Multitasking vergleichbar mit Threads eigene lokale Variablen gemeinsame globale Variablen aber: kooperatives Multitasking nur eine Coroutine läuft gleichzeitig Coroutine muss ihre Ausführung selbst beenden erstellen mit create starten mit resume stoppen mit yield 13

Metatables und Metamethoden vergleichbar mit Operatorüberladung Metatable=table mit Metamethoden (z.b. add) kann für table gesetzt werden function addvektor(a,b) local tmp={} for index,wert in ipairs(a) do tmp[index]=wert+b[index] end return tmp end meta={ add=addvektor} v1={1,2,3} v2={4,5,6} setmetatable(v1,meta) setmetatable(v2,meta) erg=v1+v2 14

Objektorientierung Verwendung von tables als Objekte Attribute, Methoden = Felder der table function f(self,parameter) self.xy=... end objekt.methode=f -- syntactic sugar function objekt:f(parameter) self.xy=... end -- Aufruf objekt.f(objekt,parameter) objekt:f(parameter) 15

Objektorientierung Klassen Klassen über Prototypen index-metamethode verweist auf Prototyp wenn Feld nicht vorhanden, wird in Prototyp nach Feld gesucht setmetatable(instanz, { index=prototyp}) // Konstruktor function prototyp:new() end neueinstanz={} setmetatable(neueinstanz, self) self. index=self return neueinstanz instanz=prototyp:new() 16

Objektorientierung Vererbung Prinzip wie bei Klassen index-metamethode verweist auf Basisklasse wenn Feld nicht vorhanden, wird in Basisklasse nach Feld gesucht abgeleiteterprototyp=prototyp:new() abgeleiteinstanz=abgeleiteterprototyp:new() 17

Objektorientierung Datenkapselung nicht für große Projekte gedacht keine Schlüsselwörter wie private, protected und public Datenkapselung über Proxy function zaehler(startwert) local self={wert=startwert} local function hoch() self.wert=self.wert+1 end local function getwert() return self.wert end end return {hoch=hoch,getwert=getwert} 18

C API Lua in C-Programmen (z.b. Interpreter) C-Funktionen in Lua (Standardbibliotheken) Probleme: statische Typisierung (C) dynamische Typisierung (Lua) manuelle Speicherverwaltung (C) automatische Speicherverwaltung (Lua) Kommunikation über abstrakten Stack 19

C API Lua einbetten Funktion und Argumente auf den Stack Funktion ausführen Ergebnis vom Stack lesen Ergebnis vom Stack entfernen function addiere(a,b) return a+b end lua_getglobal(l,"addiere"); lua_pushnumber(l,1); lua_pushnumber(l,2); lua_pcall(l,2,1,0); double ergebnis=lua_tonumber(l,-1); lua_pop(l,1); 20

C API Lua erweitern Funktionen in der Form static int f(lua_state* L) Funktionen mit Name in Array speichern Modul in Lua registrieren Modul mit require in Lua einbinden static const struct lual_reg meinmodul [] = { }; {"meinefunktion", f}, {NULL, NULL} int luaopen_meinmodul(lua_state* L){ } 21 lual_register(l, meinmodul, meinmodul); return 1;

Die Programmiersprache Lua Einleitung Sprachumfang Datentypen und -strukturen Kontrollstrukturen Funktionen Exceptions Coroutinen Metatables und Metamethoden Objektorientierung C API 22 Lua in der Spieleentwicklung Zusammenfassung und Auslick

Lua in der Spieleentwicklung MIT Lizenz, Open Source Multitasking über Coroutinen C API Einbetten in C++-Engine einfache Syntax (Nutzung durch Game- und Level- Designer) Datenbeschreibungsfähigkeit Portabilität (nur ANSI C benötigt) auch für Konsolen geringe Systemanforderungen (100 Kb Lua-Core) eine der schnellsten Skriptsprachen Add-on Schnittstelle (WoW) 23

Die Programmiersprache Lua Einleitung Sprachumfang Datentypen und -strukturen Kontrollstrukturen Funktionen Exceptions Coroutinen Metatables und Metamethoden Objektorientierung C API 24 Lua in der Spieleentwicklung Zusammenfassung und Auslick

Zusammenfassung und Ausblick Aspekte, die für Spieleindustrie wichtig sind, treffen auch auf CAE zu Steuerung einer künstlichen Intelligenz Anwender beim Kunden keine professionellen Programmierer Einbetten in C++-Simulation über C API Echtzeitsystem schnelle Sprache nötig viele wichtige Vorraussetzungen erfüllt aber: Lua im Vergleich zu C++ langsamer ausreichend für Echtzeitsimulation? 25

Quellen Fulgham, Brent: Computer Language Benchmarks Game, The. http://shootout.alioth.debian.org/. Version: September 2012 Ierusalimschy, Roberto: Programming in Lua. Roberto Ierusalimschy, 2006. ISBN 85 90 37982 5 Ierusalimschy, Roberto; Figueiredo, Luiz H.; Celes, Waldemar: Lua: an Extensible Embedded Language. In: Dr. Dobb s Journal 21 (1996), Nr. 12, 26œ33. http://www.lua.org/ddj.html Ierusalimschy, Roberto; Figueiredo, Luiz H.; Celes, Waldemar: Implementation of Lua 5.0, The. In: Journal of Universal Computer Science 11 (2005), Nr. 7, S. 1159 1176 Ierusalimschy, Roberto; Figueiredo, Luiz H.; Celes, Waldemar; Lua.Org, PUC-Rio (Hrsg.): Lua Reference Manual 5.1. Lua.Org, PUC-Rio, 2006. http://www.lua.org/manual/5.1/manual.html Ierusalimschy, Roberto; Figueiredo, Luiz H.; Celes, Waldemar: Evolution of Lua, The. In: Proceedings of the Third ACM SIGPLAN Conference on History of Programming Languages ACM, 2007, 2 1 Ierusalimschy, Roberto; Figueiredo, Luiz H.; Filho, Waldemar C.: Lua-an Extensible Extension Language. In: Software Practice and Experience 26 (1996), Nr. 6, 635 652. http://www.lua.org/spe.html Libraries And Bindings. http://lua-users.org/wiki/ LibrariesAndBindings. Version: Oktober 2012 Graphical User Interface Toolkits. http://lua-users.org/wiki/graphicaluserinterfacetoolkits. Version: Oktober 2012 26

Fragen? 27

Thank you 28