Navigation: Homepage | xmlgawk | Buchkritik | Sitemap

Titel

Programming in Lua, 2nd Edition

Wertung

sehr empfehlenswert

Die Einführung in die Scriptsprache Lua; konzis, vollständig und gute Beispiele.

Hauptthema

Die Scriptsprache Lua existiert seit 1994. Sie ist in ANSI-C (C89) geschrieben und daher hochportabel. Die grundlegende Datenstruktur ist die Table, ein assoziatives Array, wobei atomare Werte, Strings und Objekte als Keys erlaubt sind. Diese Eigenschaft eröffnet viele interessante Möglichkeiten. Die Sprache unterstützt anonyme Funktionen (Lambda-Expressions) und Closures mit Lexical Scoping.

Die Lua Autoren haben grossen Wert auf Portabilität und möglichst kurzen Code gelegt. Dies erleichter die Portierung, Anpassung und Erweiterung von Lua. Lua ist vor allem bei Spielen als Scripting-Engine beliebt.

Das Buch führt (dem K&R nicht unähnlich) in vielen kurzen Kapiteln alle Eigenschaften der Sprache und ihrer Implementation ein, es ist somit eine Einführung und ein Rationale. Die Sprachreferenz ist als ein zweiter Band ebenfalls erhältlich.

Kapitelstruktur

 Preface
  
 Part I. The Language
  
 1 Getting Started
 1.1 Chunks
 1.2 Global Variables
 1.3 Some Lexical Conventions
 1.4 The Stand-Alone Interpreter
 
 2 Types and Values
 2.1 Nil
 2.2 Booleans
 2.3 Numbers
 2.4 Strings
 2.5 Tables
 2.6 Functions
 2.7 Userdata and Threads
 
 3 Expressions
 3.1 Arithmetic Operators
 3.2 Relational Operators
 3.3 Logical Operators
 3.4 Concatenation
 3.5 Precedence
 3.6 Table Constructors
 
 4 Statements
 4.1 Assignment
 4.2 Local Variables and Blocks
 4.3 Control Structures
 4.3.1 if then else
 4.3.2 while
 4.3.3 repeat
 4.3.4 Numeric for
 4.3.5 Generic for
 4.4 break and return
 
 5 Functions
 5.1 Multiple Results
 5.2 Variable Number of Arguments
 5.3 Named Arguments
 
 6 More about Functions
 6.1 Closures
 6.2 Non-Global Functions
 6.3 Proper Tail Calls
 
 7 Iterators and the Generic for
 7.1 Iterators and Closures
 7.2 The Semantics of the Generic for
 7.3 Stateless Iterators
 7.4 Iterators with Complex State
 7.5 True Iterators
 
 8 Compilation, Execution, and Errors
 8.1 The require Function
 8.2 C Packages
 8.3 Errors
 8.4 Error Handling and Exceptions
 8.5 Error Messages and Tracebacks
 
 9 Coroutines
 9.1 Coroutine Basics
 9.2 Pipes and Filters
 9.3 Coroutines as Iterators
 9.4 Non-Preemptive Multithreading
 
 10 Complete Examples
 10.1 Data Description
 10.2 Markov Chain Algorithm
  
  
 Part II. Tables and Objects
  
 11 Data Structures
 11.1 Arrays
 11.2 Matrices and Multi-Dimensional Arrays
 11.3 Linked Lists
 11.4 Queues and Double Queues
 11.5 Sets and Bags
 11.6 String Buffers
 
 12 Data Files and Persistence
 12.1 Serialization
 12.1.1 Saving Tables without Cycles
 12.1.2 Saving Tables with Cycles
 
 13 Metatables and Metamethods
 13.1 Arithmetic Metamethods
 13.2 Relational Metamethods
 13.3 Library-Defined Metamethods
 13.4 Table-Access Metamethods
 13.4.1 The __index Metamethod
 13.4.2 The __newindex Metamethod
 13.4.3 Tables with Default Values
 13.4.4 Tracking Table Accesses
 13.4.5 Read-Only Tables
 
 14 The Environment
 14.1 Accessing Global Variables with Dynamic Names
 14.2 Declaring Global Variables
 14.3 Non-Global Environments
 
 15 Modules and Packages
 15.1 The require Function
 15.2 The Basic Approach for Writing Modules
 15.3 Using Environments
 15.4 The module Function
 15.5 Submodules and Packages
 
 16 Object-Oriented Programming
 16.1 Classes
 16.2 Inheritance
 16.3 Multiple Inheritance
 16.4 Privacy
 16.5 The Single-Method Approach
 
 17 Weak Tables
 17.1 Memoize Functions
 17.2 Object Attributes
 17.3 Revisiting Tables with Default Values
  
  
 Part III. The Standard Libraries
  
 18 The Mathematical Library
 
 19 The Table Library
 19.1 Insert and Remove
 19.2 Sort
 19.1 Concatenation
 
 20 The String Library
 20.1 Basic String Functions
 20.2 Pattern-Matching Functions
 20.3 Patterns
 20.4 Captures
 20.5 Replacements
 20.6 Tricks of the Trade
 
 21 The I/O Library
 21.1 The Simple I/O Model
 21.2 The Complete I/O Model
 21.2.1 A Small Performance Trick
 21.2.2 Binary Files
 21.3 Other Operations on Files
 
 22 The Operating System Library
 22.1 Date and Time
 22.2 Other System Calls
 
 23 The Debug Library
 23.1 Introspective Facilities
 23.1.1 Accessing Local Variables
 23.1.2 Accessing Upvalues
 23.2 Hooks
 23.3 Profiles
  
  
 Part IV. The C API
  
 24 An Overview of the C API
 24.1 A First Example
 24.2 The Stack
 24.2.1 Pushing Elements
 24.2.2 Querying Elements
 24.2.3 Other Stack Operations
 24.3 Error Handling with the C API
 24.3.1 Error Handling in Application Code
 24.3.2 Error Handling in Library Code
 
 25 Extending your Application
 25.1 The Basics
 25.2 Table Manipulation
 25.3 Calling Lua Functions
 25.4 A Generic Call Function
 
 26 Calling C from Lua
 26.1 C Functions
 26.2 C Libraries
 
 27 Techniques for Writing C Functions
 27.1 Array Manipulation
 27.2 String Manipulation
 27.3 Storing State in C Functions
 27.3.1 The Registry
 27.3.2 Environments for C functions
 27.3.3 Upvalues
 
 28 User-Defined Types in C
 28.1 Userdata
 28.2 Metatables
 28.3 Object-Oriented Access
 28.4 Array Access
 28.5 Light Userdata
 
 29 Managing Resources
 29.1 A Directory Iterator
 29.2 An XML Parser
 
 30 Threads and States
 30.1 Multiple Threads
 30.2 Lua States
 
 31 Memory Management
 31.1 The Allocation Function
 31.2 The Garbage Collector
 
 Index

Verständlichkeit, Sprache

Trotz der Tatsache, dass der Autor Brasilianer und damit kein 'native englisch speaker' ist, ist der Stil einfach, klar und verständlich. Nur an ganz wenigen Stellen werden unübliche Redewendungen verwendet.

Was ist die Botschaft? Motivation und Begründung

Das Buch beantwortet folgende Fragen:

Der Autor will dem (potentiellen) Anwender, das nötige Rüstzeug zur 'korrekten' Verwendung von Lua in die Hand geben.

Meine Meinung

Zum ersten Mal bin ich 1996 durch einen Artikel in der DDJ auf Lua aufmerksam geworden ( http://www.lua.org/ddj.html ), konnte mich aber nie dazu durchringen, mehr mit der Sprache zu machen. Erst das Buch ProgrammingInLua (für 5.0 und 5.1) hat mich bewogen, mich genauer mit der Sprache zu beschäftigen. Ich lese eben lieber Bücher als Websites und (selbstausgedruckte) PDFs.

Lua ist eine interessante, kleine Sprache. Vom Ansatz her, als Sprache in eine Applikation eingebettet zu werden, ist sie Tcl nicht unähnlich. Aber durch die Table-Datenstruktur ist Lua angenehmer zu verwenden (als Tcl mit Listen). Auch scheint mir die API zur Anbindung einiges bequemer als bei Tcl (man muss sich beispielweise nicht selber mit Referencecounting herumschlagen). Die bewusste Einschränkung auf ANSI-C (und eine möglichst kurze Implementation) hat auch Konsequenzen, so werden viele Betriebssystemfunktionen nur über Drittmodule angeboten. Die Regex-Implementation ist ebenfalls selbstgemacht und anders als POSIX, Perl oder Tcl regex, hier muss man sich umgewöhnen. Aber die Table-Datenstruktur, die Booleans, Numbers, Strings und Tables als Keys zulässt ist bemerkenswert und sehr leistungsfähig.

Das Indices (wie bei AWK auch) bei 1 beginnen, halte ich zwar für einen Fehler, aber damit kann und muss man wohl leben.

Da der Autor das Buch selbst in Latex gesetzt hat, ist der Satz optisch sehr ansprechend.

Autor(en)

Roberto Ierusalimschy

Erscheinungsjahr, Verlag, ISBN, Seitenzahl

2006, Eigendruck, ISBN 85-903798-2-5, 307 Seiten

URLs

Amazon: http://www.amazon.de/exec/obidos/ASIN/8590379825/lua-home-20

Verlag: http://www.lua.org/pil2/ http://www.lua.org/pil/

Schlagworte

Scriptsprache, Lua, Tcl, Language

Datum

19-Apr-2007

last modified: $Date: 2007/06/09 16:22:06 $