mirror of
https://github.com/extreme-tech-seminar/seven-more-languages-in-seven-weeks.git
synced 2024-11-25 03:00:17 +00:00
255 lines
5.9 KiB
Org Mode
255 lines
5.9 KiB
Org Mode
|
#+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 Lua’s clean syntax and assume
|
|||
|
it’s just another everyday scripting language. I certainly had that
|
|||
|
feeling at first glance. But I hope that as you’ve taken a deeper look
|
|||
|
at its tables and coroutines, you’ve 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
|
|||
|
Lua’s prototype-based object approach proves that you don’t need
|
|||
|
classes to build a great object system.
|
|||
|
#+END_QUOTE
|