Get in Touch

Course Outline

Introduction to Lua

  • A brief history
  • Lua's goals, features, and limitations
  • Lua documentation and tutorial resources
  • Installing the Lua interpreter
  • Setting up and utilizing LuaRocks

Basic Syntax and Semantics

  • Identifiers
  • Comments and block comments
  • Global variables and enforcing strictness
  • Local variables
  • Standalone programs and program arguments
  • Compilation units, chunks, expressions, and semicolons

Data Types and Data Structures

  • Basic types: nil, boolean, number, string
  • Object types: function, userdata, thread, table
  • References/objects versus basic values
  • The significance of tables in Lua

Introduction to Tables and Their Versatility

  • Tables as associative arrays
  • Tables as numeric arrays and sequences

Basic Control Structures

  • The if-then-elseif-else-end construct
  • The while loop
  • The repeat loop
  • The simple for loop

Error Handling

  • Return values versus exceptions
  • Converting return values to exceptions
  • Converting exceptions to return values
  • Error levels

Example Programs

  • Polynomial evaluation
  • Breadth-first search
  • Additional exercises

Deeper Dive into Functions

  • Named arguments
  • Object-oriented calls
  • Closures
  • Currying
  • Tail calls
  • Multiple assignment and return
  • Varargs

Iterators and Co-routines

  • The generic for loop
  • Stateless versus stateful iterators
  • Differences between iterators and co-routines

Metatables and Metamethods

  • The set example
  • The __tostring metamethod
  • Arithmetic metamethods
  • The __index and __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 implemented as tables
  • Linked lists implemented as tables
  • String buffers

Metatables Through Examples

  • Proxies
  • Readonly tables
  • Memoization
  • Dynamic programming with memoization
  • The Fibonacci example

Environments

  • Relationship between global variables and environments
  • Free variables
  • The _ENV and _G tables

Further Exploration of Modules

  • Different approaches to creating modules
  • Modules that modify behavior
  • Module initialization and arguments
  • Using environments to implement safe modules

Advanced Iterators and Co-routines

  • Producer, consumer, and filter patterns
  • Wrapping co-routines to create 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
  • Examples

Walkthrough of the Lua Standard Libraries

Compilation

  • Compilation processes
  • Evaluation
  • Relationship with the environment
  • Binary chunks

Garbage Collection

  • Weak tables
  • Finalizers and the __gc meta-method

Lua Bytecode and Virtual Machine

  • Generating bytecode from source code
  • Reading and analyzing bytecode
  • Quick tour of the Lua VM source code

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 versus threads
  • Real multi-threading and Lua states

Requirements

Proficiency in at least one other programming language and practical programming experience. Additionally, familiarity with other scripting languages can facilitate a deeper understanding of Lua.

 21 Hours

Number of participants


Price per participant

Upcoming Courses

Related Categories