Návrh Školení

Úvod do Lua

  • Kousek historie
  • Cíle, funkce a nepodstatné cíle Lua
  • Zdroje dokumentace a tutoriálů o Lua
  • Instalace interpretu Lua
  • Nastavení a použití LuaRocks

Základní syntaxe a sémantika

  • Identifikátory
  • Komentáře, blokové komentáře
  • Globální proměnné a povinnost přidržování striktnosti
  • Lokální proměnné
  • Samostatné programy, argumenty programu
  • Kompilační jednotky, části, výrazy, středník

Datové typy a datové struktury

  • Základní typy: nil, boolean, number, string
  • Objektové typy: function, userdata, thread, table
  • Odkazy/objekty vs. základní hodnoty
  • Důležitost tabulek v Lua

Úvod do tabulek a jejich univerzálnosti

  • Tabulky jako asociativní pole
  • Tabulky jako numerické pole, sekvence

Základní ovládací struktury

  • if then elseif else end
  • Cyklus while
  • Cyklus repeat
  • Jednoduchý cyklus for

Zpracování chyb

  • Návratové hodnoty vs. výjimky
  • Převod návratové hodnoty na výjimku
  • Převod výjimky na návratovou hodnotu
  • Úrovně chyb

Příklady programů

  • Vyhodnocení polynomu
  • Hledání v šířku
  • Další cvičení

Více o funkcích

  • Jmenované argumenty
  • Orientace na objekty volání
  • Closures
  • Kurýrování (currying)
  • Chvostová volání (tail calls)
  • Více přiřazení a návratů
  • Varargs

Iterátory a ko-rutiny

  • Generický cyklus for
  • Bezstavové vs. stavové iterátory
  • Rozdíly mezi iterátory a ko-rutinami

Metatabulky a metody

  • Příklad s množinou
  • Metoda __tostring
  • Aritmetické metody
  • Metody __index, __newindex
  • Metoda __len

Moduly a balíčky

  • Použití modulů
  • Vytváření modulů
  • Organizace modulů do balíčků

Pokročilé tabulky

  • Tabulky pro fronty a zásobníky
  • Tabulky popisující grafy
  • Maticové tabulky
  • Spojové seznamy jako tabulky
  • Přidané bufferování

Metatabulky přes příklady

  • Proxies
  • Pouze pro čtení (readonly)
  • Paměťové optimalizace (memoization)
  • Dynamické programování s memoizací
  • Příklad Fibonacciho posloupnosti

Prostředí

  • Vztah mezi globálními proměnnými a prostředími
  • Svobodné proměnné
  • Tabulka _ENV a tabulka _G

Více o modulích

  • Různé přístupy k vytváření modulů
  • Moduly měnící chování
  • Inicializace a argumenty modulů
  • Použití prostředí pro implementaci bezpečných modulů

Pokročilé iterátory a ko-rutiny

  • Výrobce, spotřebitel, filtr
  • Obalování ko-rutin pro získání iterátorů
  • Bezstavový iterátor pro spojové seznamy

Přispívání do ekosystému

  • Nahrávání balíčků na MoonRocks

Funkcionální paradigmata v Lua

  • Funkce map
  • Funkce reduce / fold

Orientace na objekty (OOP)

  • Různé přístupy k OOP
  • Různé přístupy ke dědičnosti
  • Příklady

Krok za krokem procházení standardních knihoven Lua

Kompilace

  • Kompilace
  • Evaluace (eval)
  • Vztah s prostředím
  • Binární části (chunks)

Sběr smetí (garbage collection)

  • Slabé tabulky
  • Finalizátory, metoda __gc

Bytekód a virtuální stroj Lua

  • Vytváření bytekódu z zdrojového kódu
  • Čtení a analýza bytekódu
  • Rychlý přehled zdrojového kódu Lua VM

C moduly

  • Volání C ze Lua
  • Hledací cesta a načítání C modulů

Volání Lua z C

  • Zásobník (stack)
  • Zpracování chyb
  • Kontinuace (continuations)

Zpracování hodnot a typů Lua z C

  • Pole (arrays)
  • Řetězce (strings)
  • Userdata
  • Metatabulky
  • Orientace na objekty volání
  • Léhce zpracovávané userdata (light userdata)

Správa paměti

  • Alokátory (allocators)
  • API pro sběr smetí (GC API)

Vlákna v Lua

  • Ko-rutiny vs. vlákna
  • Přesné vícevláknové programování a stavy Lua

Požadavky

Znalost alespoň jednoho dalšího programovacího jazyka. Programming zkušenost. Volitelně, pokud znáte jiné skriptovací jazyky, usnadní to pochopení Lua.

 21 hodiny

Počet účastníků


Cena za účastníka

Nadcházející kurzy

Související kategorie