seven-more-languages-in-sev.../slides/lua.org
2016-01-26 21:13:50 -05:00

254 lines
5.9 KiB
Org Mode
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#+TITLE: Seven More Languages in Seven Weeks
#+BEAMER_HEADER: \subtitle{Lua}
#+BEAMER_HEADER: \institute[INST]{Extreme Tech Seminar}
#+AUTHOR: Correl Roush
#+EMAIL: correl@gmail.com
#+DATE: January 13, 2016
#+OPTIONS: H:2 toc:nil ^:nil
#+STARTUP: beamer indent
#+COLUMNS: %45ITEM %10BEAMER_env(Env) %10BEAMER_act(Act) %4BEAMER_col(Col) %8BEAMER_opt(Opt)
#+PROPERTY: BEAMER_col_ALL 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.0 :ETC
#+LaTeX_CLASS: beamer
#+LaTeX_CLASS_OPTIONS: [presentation,aspectratio=169]
#+LaTeX_HEADER: \usemintedstyle{solarizeddark}
* Introduction
** Introduction
*** Lua :BMCOL:
:PROPERTIES:
:BEAMER_col: 0.5
:END:
#+BEGIN_CENTER
#+LATEX: \fontspec{Antonio-Bold}\color{trek@lightblue}
#+LATEX: \fontsize{80}{80}\selectfont
LUA
#+END_CENTER
#+BEGIN_CENTER
#+LATEX: \fontspec{Antonio-Bold}\color{trek@midblue}
A powerful, fast, lightweight, embeddable scripting language
#+END_CENTER
*** Indiana Jones :BMCOL:
:PROPERTIES:
:BEAMER_col: 0.5
:END:
#+ATTR_LATEX: :width \textwidth
[[file:indianajones1.png]]
* Day 1
** Day 1: The Call to Adventure
- Installing Lua
- Exploring with the REPL
- Syntax
- Types
- Functions
** Syntax
#+BEGIN_CENTER
/Whitespace doesn't matter/
#+END_CENTER
** Types
- Lua is /dynamically/ typed
- No integers (all numbers are 64-bit floats)
- =nil= is its own type
** Functions
- Functions are /first-class values/
- Arguments are flexible
- Support arbitrary numbers of arguments
- Support arbitrary numbers of results
- Lua does /tail call optimization/
** Variables
#+BEGIN_CENTER
Lua variables are /global by default/
#+END_CENTER
** Excercises
#+BEGIN_CENTER
#+LATEX: \fontspec{Antonio-Bold}\color{trek@lightblue}
#+LATEX: \fontsize{80}{80}\selectfont
Exercises
#+END_CENTER
*** Notes :B_note:
:PROPERTIES:
:BEAMER_env: note
:END:
- [[http://lua-users.org/wiki/][Lua Users Wiki]]
- [[http://www.lua.org/pil/contents.html][Programming in Lua (First Edition)]]
- [[http://www.lua.org/manual/5.1/][Lua 5.1 Reference Manual]]
- [[http://www.lua.org/manual/5.1/manual.html#2.4.4][The difference between a while and repeat loop]]
* Day 2
** Day 2: Tables All the Way Down
#+BEGIN_CENTER
#+ATTR_LATEX: :width 0.75\textwidth
[[file:Picnic_Table_Stack.jpg]]
#+END_CENTER
** Tables as Dictionaries
#+BEGIN_SRC lua
book = {
title = "Grail Diary",
author = "Henry Jones",
pages = 100
}
book.stars = 5
book.author = "Henry Jones, Sr."
#+END_SRC
** Tables as Arrays
- Lua counts array indices starting at *1*
#+BEGIN_SRC lua
medals = {
"gold",
"silver",
"bronze"
}
medals[4] = "lead"
#+END_SRC
** Metatables
*** Left :BMCOL:
:PROPERTIES:
:BEAMER_col: 0.5
:END:
#+BEGIN_SRC lua
function table_to_string(t)
local result = {}
for k, v in pairs(t) do
result[#result + 1] = k .. ": " .. v
end
return table.concat(result, "\n")
end
greek_numbers = {
ena = "one",
dyo = "two",
tria = "three"
}
mt = {
__tostring = table_to_string
}
setmetatable(greek_numbers, mt)
#+END_SRC
*** Right :BMCOL:
:PROPERTIES:
:BEAMER_col: 0.5
:END:
#+BEGIN_EXAMPLE
> =greek_numbers
ena: one
tria: three
dyo: two
#+END_EXAMPLE
** OOP
*** Left :BMCOL:
:PROPERTIES:
:BEAMER_col: 0.5
:END:
#+BEGIN_SRC lua
Villain = {
health = 100,
new = function(self, name)
local obj = {
name = name,
health = self.health
}
setmetatable(obj, self)
self.__index = self
return obj
end,
take_hit = function(self)
self.health = self.health - 10
end
}
#+END_SRC
*** Right :BMCOL:
:PROPERTIES:
:BEAMER_col: 0.5
:END:
#+BEGIN_SRC lua
SuperVillain = Villain.new(Villain)
function SuperVillain.take_hit(self)
-- Haha, armor!
self.health = self.health - 5
end
SuperVillain:new("Toht")
#+END_SRC
** Coroutines
#+BEGIN_QUOTE
You may be wondering how Lua handles multithreading.
It doesn't.
#+END_QUOTE
** Coroutines
*** Generator :B_example:
:PROPERTIES:
:BEAMER_env: example
:END:
#+BEGIN_SRC lua
function fibonacci()
local m = 1
local n = 1
while true do
coroutine.yield(m)
m, n = n, m + n
end
end
generator = coroutine.create(fibonacci)
succeeded, value = coroutine.resume(generator)
-- value = 1
#+END_SRC
** Multitasking
#+BEGIN_CENTER
#+LATEX: \fontspec{Antonio-Bold}\color{trek@lightorange}
#+LATEX: \huge
Example: Building a Scheduler
#+END_CENTER
** Excercises
#+BEGIN_CENTER
#+LATEX: \fontspec{Antonio-Bold}\color{trek@lightblue}
#+LATEX: \fontsize{80}{80}\selectfont
Exercises
#+END_CENTER
* Day 3
** Day 3: Lua and the World
#+BEGIN_CENTER
#+LATEX: \fontspec{Antonio-Bold}\color{trek@lightorange}
#+LATEX: \huge
Example: Making Music
#+END_CENTER
** Excercises
#+BEGIN_CENTER
#+LATEX: \fontspec{Antonio-Bold}\color{trek@lightblue}
#+LATEX: \fontsize{80}{80}\selectfont
Exercises
#+END_CENTER
* Wrapping Up
** Wrapping Up
#+BEGIN_QUOTE
A lot of programmers see the surface of Luas clean syntax and assume
its just another everyday scripting language. I certainly had that
feeling at first glance. But I hope that as youve taken a deeper look
at its tables and coroutines, youve enjoyed their beauty and
simplicity.
#+END_QUOTE
** Wrapping Up: Strengths
- Approachable
- Portable
- Easily included in other projects
** Wrapping Up: Weaknesses
- Batteries not included
- Inefficient string handling
- Quirky
** Final Thoughts
#+BEGIN_QUOTE
Luas prototype-based object approach proves that you dont need
classes to build a great object system.
#+END_QUOTE