Seven More Languages in Seven Weeks - Luaextreme-tech-seminar.github.io/7morein7/lua.pdf ·...

23
. . . Lua . . . Extreme Tech Seminar . . Seven More Languages in Seven Weeks Correl Roush January 13, 2016

Transcript of Seven More Languages in Seven Weeks - Luaextreme-tech-seminar.github.io/7morein7/lua.pdf ·...

Page 1: Seven More Languages in Seven Weeks - Luaextreme-tech-seminar.github.io/7morein7/lua.pdf · INTRODUCTION LUA Apowerful,fast,lightweight,embeddable scriptinglanguage. SevenMoreLanguagesinSevenWeeks..

...

Lua

... Extreme Tech Seminar..

Seven More Languages in Seven WeeksCorrel Roush

January 13, 2016

Page 2: Seven More Languages in Seven Weeks - Luaextreme-tech-seminar.github.io/7morein7/lua.pdf · INTRODUCTION LUA Apowerful,fast,lightweight,embeddable scriptinglanguage. SevenMoreLanguagesinSevenWeeks..

.

...INTRODUCTION

.

LUAA powerful, fast, lightweight, embeddable

scripting language

...Seven More Languages in Seven Weeks

.

Page 3: Seven More Languages in Seven Weeks - Luaextreme-tech-seminar.github.io/7morein7/lua.pdf · INTRODUCTION LUA Apowerful,fast,lightweight,embeddable scriptinglanguage. SevenMoreLanguagesinSevenWeeks..

.

...DAY 1: THE CALL TO ADVENTURE

.

. Installing Lua

. Exploring with the REPL. Syntax. Types. Functions

...Seven More Languages in Seven Weeks

.

Page 4: Seven More Languages in Seven Weeks - Luaextreme-tech-seminar.github.io/7morein7/lua.pdf · INTRODUCTION LUA Apowerful,fast,lightweight,embeddable scriptinglanguage. SevenMoreLanguagesinSevenWeeks..

.

...SYNTAX

.

Whitespace doesn’t matter

...Seven More Languages in Seven Weeks

.

Page 5: Seven More Languages in Seven Weeks - Luaextreme-tech-seminar.github.io/7morein7/lua.pdf · INTRODUCTION LUA Apowerful,fast,lightweight,embeddable scriptinglanguage. SevenMoreLanguagesinSevenWeeks..

.

...TYPES

.

. Lua is dynamically typed

. No integers (all numbers are 64-bit floats)

. nil is its own type

...Seven More Languages in Seven Weeks

.

Page 6: Seven More Languages in Seven Weeks - Luaextreme-tech-seminar.github.io/7morein7/lua.pdf · INTRODUCTION LUA Apowerful,fast,lightweight,embeddable scriptinglanguage. SevenMoreLanguagesinSevenWeeks..

.

...FUNCTIONS

.

. Functions are first-class values

. Arguments are flexible

. Support arbitrary numbers of arguments

. Support arbitrary numbers of results

. Lua does tail call optimization

...Seven More Languages in Seven Weeks

.

Page 7: Seven More Languages in Seven Weeks - Luaextreme-tech-seminar.github.io/7morein7/lua.pdf · INTRODUCTION LUA Apowerful,fast,lightweight,embeddable scriptinglanguage. SevenMoreLanguagesinSevenWeeks..

.

...VARIABLES

.

Lua variables are global by default

...Seven More Languages in Seven Weeks

.

Page 8: Seven More Languages in Seven Weeks - Luaextreme-tech-seminar.github.io/7morein7/lua.pdf · INTRODUCTION LUA Apowerful,fast,lightweight,embeddable scriptinglanguage. SevenMoreLanguagesinSevenWeeks..

.

...EXCERCISES

.

Exercises...

Seven More Languages in Seven Weeks.

Page 9: Seven More Languages in Seven Weeks - Luaextreme-tech-seminar.github.io/7morein7/lua.pdf · INTRODUCTION LUA Apowerful,fast,lightweight,embeddable scriptinglanguage. SevenMoreLanguagesinSevenWeeks..

.

...DAY 2: TABLES ALL THE WAY DOWN

.

...Seven More Languages in Seven Weeks

.

Page 10: Seven More Languages in Seven Weeks - Luaextreme-tech-seminar.github.io/7morein7/lua.pdf · INTRODUCTION LUA Apowerful,fast,lightweight,embeddable scriptinglanguage. SevenMoreLanguagesinSevenWeeks..

.

...TABLES AS DICTIONARIES

.

book = {title = "Grail Diary",author = "Henry Jones",pages = 100

}

book.stars = 5book.author = "Henry Jones, Sr."

...Seven More Languages in Seven Weeks

.

Page 11: Seven More Languages in Seven Weeks - Luaextreme-tech-seminar.github.io/7morein7/lua.pdf · INTRODUCTION LUA Apowerful,fast,lightweight,embeddable scriptinglanguage. SevenMoreLanguagesinSevenWeeks..

.

...TABLES AS ARRAYS

.

. Lua counts array indices starting at 1

medals = {"gold","silver","bronze"

}

medals[4] = "lead"

...Seven More Languages in Seven Weeks

.

Page 12: Seven More Languages in Seven Weeks - Luaextreme-tech-seminar.github.io/7morein7/lua.pdf · INTRODUCTION LUA Apowerful,fast,lightweight,embeddable scriptinglanguage. SevenMoreLanguagesinSevenWeeks..

.

...METATABLES

.function table_to_string(t)

local result = {}

for k, v in pairs(t) doresult[#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)

> =greek_numbersena: onetria: threedyo: two

...Seven More Languages in Seven Weeks

.

Page 13: Seven More Languages in Seven Weeks - Luaextreme-tech-seminar.github.io/7morein7/lua.pdf · INTRODUCTION LUA Apowerful,fast,lightweight,embeddable scriptinglanguage. SevenMoreLanguagesinSevenWeeks..

.

...OOP

.

Villain = {health = 100,new = function(self, name)

local obj = {name = name,health = self.health

}setmetatable(obj, self)self.__index = selfreturn obj

end,take_hit = function(self)

self.health = self.health - 10end

}

SuperVillain = Villain.new(Villain)

function SuperVillain.take_hit(self)-- Haha, armor!self.health = self.health - 5

end

SuperVillain:new("Toht")

...Seven More Languages in Seven Weeks

.

Page 14: Seven More Languages in Seven Weeks - Luaextreme-tech-seminar.github.io/7morein7/lua.pdf · INTRODUCTION LUA Apowerful,fast,lightweight,embeddable scriptinglanguage. SevenMoreLanguagesinSevenWeeks..

.

...COROUTINES

.

You may be wondering how Lua handles multithreading.It doesn’t.

...Seven More Languages in Seven Weeks

.

Page 15: Seven More Languages in Seven Weeks - Luaextreme-tech-seminar.github.io/7morein7/lua.pdf · INTRODUCTION LUA Apowerful,fast,lightweight,embeddable scriptinglanguage. SevenMoreLanguagesinSevenWeeks..

.

...COROUTINES

.

Example (Generator)function fibonacci()

local m = 1local n = 1

while true docoroutine.yield(m)m, n = n, m + n

endend

generator = coroutine.create(fibonacci)succeeded, value = coroutine.resume(generator)-- value = 1

...Seven More Languages in Seven Weeks

.

Page 16: Seven More Languages in Seven Weeks - Luaextreme-tech-seminar.github.io/7morein7/lua.pdf · INTRODUCTION LUA Apowerful,fast,lightweight,embeddable scriptinglanguage. SevenMoreLanguagesinSevenWeeks..

.

...MULTITASKING

.

Example: Building a Scheduler

...Seven More Languages in Seven Weeks

.

Page 17: Seven More Languages in Seven Weeks - Luaextreme-tech-seminar.github.io/7morein7/lua.pdf · INTRODUCTION LUA Apowerful,fast,lightweight,embeddable scriptinglanguage. SevenMoreLanguagesinSevenWeeks..

.

...EXCERCISES

.

Exercises...

Seven More Languages in Seven Weeks.

Page 18: Seven More Languages in Seven Weeks - Luaextreme-tech-seminar.github.io/7morein7/lua.pdf · INTRODUCTION LUA Apowerful,fast,lightweight,embeddable scriptinglanguage. SevenMoreLanguagesinSevenWeeks..

.

...DAY 3: LUA AND THE WORLD

.

Example: Making Music

...Seven More Languages in Seven Weeks

.

Page 19: Seven More Languages in Seven Weeks - Luaextreme-tech-seminar.github.io/7morein7/lua.pdf · INTRODUCTION LUA Apowerful,fast,lightweight,embeddable scriptinglanguage. SevenMoreLanguagesinSevenWeeks..

.

...EXCERCISES

.

Exercises...

Seven More Languages in Seven Weeks.

Page 20: Seven More Languages in Seven Weeks - Luaextreme-tech-seminar.github.io/7morein7/lua.pdf · INTRODUCTION LUA Apowerful,fast,lightweight,embeddable scriptinglanguage. SevenMoreLanguagesinSevenWeeks..

.

...WRAPPING UP

.

A lot of programmers see the surface of Lua’s clean syntax and assume it’sjust another everyday scripting language. I certainly had that feeling atfirst glance. But I hope that as you’ve taken a deeper look at its tablesand coroutines, you’ve enjoyed their beauty and simplicity.

...Seven More Languages in Seven Weeks

.

Page 21: Seven More Languages in Seven Weeks - Luaextreme-tech-seminar.github.io/7morein7/lua.pdf · INTRODUCTION LUA Apowerful,fast,lightweight,embeddable scriptinglanguage. SevenMoreLanguagesinSevenWeeks..

.

...WRAPPING UP: STRENGTHS

.

. Approachable

. Portable

. Easily included in other projects

...Seven More Languages in Seven Weeks

.

Page 22: Seven More Languages in Seven Weeks - Luaextreme-tech-seminar.github.io/7morein7/lua.pdf · INTRODUCTION LUA Apowerful,fast,lightweight,embeddable scriptinglanguage. SevenMoreLanguagesinSevenWeeks..

.

...WRAPPING UP: WEAKNESSES

.

. Batteries not included

. Inefficient string handling

. Quirky

...Seven More Languages in Seven Weeks

.

Page 23: Seven More Languages in Seven Weeks - Luaextreme-tech-seminar.github.io/7morein7/lua.pdf · INTRODUCTION LUA Apowerful,fast,lightweight,embeddable scriptinglanguage. SevenMoreLanguagesinSevenWeeks..

.

...FINAL THOUGHTS

.

Lua’s prototype-based object approach proves that you don’t need classesto build a great object system.

...Seven More Languages in Seven Weeks

.