Visão Geral
Curso Lua. Lua é uma linguagem de script fácil de usar que é usada como uma linguagem de plug-in/extensão incorporada em diferentes produtos. Lua também pode ser usada como uma linguagem independente. É uma linguagem de programação leve e multiparadigma e, portanto, o curso ensina vários conceitos que os participantes também acharão úteis em outras áreas da engenharia de software.
O Curso Lua cobre as construções básicas de programação, técnicas avançadas e incorporação de Lua em outras linguagens de programação e incorporação de outras linguagens de programação em Lua.
Conteúdo Programatico
Introduction to Lua
- A bit of history
- Lua's goals, features and non-goals
- Resources of Lua documentation and tutorials
- Installing the Lua interpreter
- Setting up and using LuaRocks
Basic syntax and semantics
- Identifiers
- Comments, block comments
- Global variables and enforcing of strictness
- Local variables
- Standalone programs, program arguments
- Compilation units, chunks, expressions, semicolons
Data types and data structures
- Basic types: nil, boolean, number, string
- Object types: function, userdata, thread, table
- References/objects vs. basic values
- The importance of tables in Lua
Introduction to tables and their versatility
- Tables as an associative array
- Tables as numeric arrays, sequences
Basic control structures
- The if then elseif else end
- The while loop
- The repeat loop
- The simple for loop
Error handling
- Return values vs exceptions
- Converting a return value to an exception
- Converting an exception to a return value
- Error levels
Example programs
- Polynomial evaluation
- Breadth first search
- Additional exercises
More about functions
- Named arguments
- Object-oriented calls
- Closures
- Currying
- Tail calls
- Multiple assignment and return
- Var args
Iterators and co-routines
- The generic for loop
- Stateless vs stateful iterators
- Differences between iterators and co-routines
Metatables and metamethods
- The set example
- The __tostring metamethod
- Arithmetic metamethods
- The __index, __newindex metamethods
- The __len metamethod
Modules and packages
- Using modules
- Creating modules
- Organizing modules into packages
Advanced tables
- Tables for queues and stacks
- Tables describing graphs
- Matrices as tables
- Linked lists as tables
- String buffers
Metatables through examples
- Proxies
- Readonly
- Memoization
- Dynamic programming with memoization
- The Fibonacci example
Environments
- Relationship between global variables and environments
- Free variables
- The _ENV table and the _G table
More about modules
- Different approaches to creating modules
- Modules that change the behavior
- Module initialization and arguments
- Using environments to implement safe modules
Advanced iterators and co-routines
- Producer, consumer, filter
- Wrapping co-routines to get iterators
- Stateless iterator for linked lists
Contributing to the Ecosystem
- Uploading packages to MoonRocks
Functional paradigm in Lua
- The map function
- The reduce / fold function
Object-oriented Programming
- Different approaches to OOP
- Different approaches to inheritance
A walkthrough of the Lua Standard Libraries
Compilation
- Compilation
- Eval
- Relationship with the environment
- Binary chunks
Garbage collection
- Weak tables
- Finalizers, the __gc meta-method
Lua bytecode and virtual machine
- Generating bytecode from source code
- Reading and analyzing bytecode
- Quick tour of the source code of the Lua VM
C modules
- Calling C from Lua
- Search path and loading of C modules
Calling Lua from C
- The Stack
- Error handling
- Continuations
Handling Lua values and types from C
- Arrays
- Strings
- Userdata
- Metatables
- Object oriented calls
- Light userdata
Memory management
- Allocators
- GC API
Threads in Lua
- Co-routines vs threads
- Real multi-threading and Lua states