mirror of
https://github.com/extreme-tech-seminar/seven-more-languages-in-seven-weeks.git
synced 2024-11-25 03:00:17 +00:00
254 lines
5.9 KiB
Org Mode
254 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
|