![Page 1: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/1.jpg)
@elixirlang / elixir-lang.orgWednesday, May 14, 14
![Page 2: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/2.jpg)
Rails 2.2threadsafe
Wednesday, May 14, 14
![Page 3: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/3.jpg)
Sapir-Whorfhypothesis
Wednesday, May 14, 14
![Page 4: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/4.jpg)
The structure of a language affects the ways in which its
respective speakers conceptualize their world
Wednesday, May 14, 14
![Page 5: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/5.jpg)
zuzuvapaburu
dambu
http://en.wikipedia.org/wiki/Himba_people
Wednesday, May 14, 14
![Page 6: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/6.jpg)
Wednesday, May 14, 14
![Page 7: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/7.jpg)
“Threadsafe”
Wednesday, May 14, 14
![Page 8: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/8.jpg)
Functionalprogramming
Wednesday, May 14, 14
![Page 9: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/9.jpg)
Wednesday, May 14, 14
![Page 10: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/10.jpg)
• Explicit instead of implicit state
Wednesday, May 14, 14
![Page 11: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/11.jpg)
• Explicit instead of implicit state• Transformation instead of mutation
Wednesday, May 14, 14
![Page 12: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/12.jpg)
Wednesday, May 14, 14
![Page 13: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/13.jpg)
• Functional
Wednesday, May 14, 14
![Page 14: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/14.jpg)
• Functional• Concurrent
Wednesday, May 14, 14
![Page 15: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/15.jpg)
• Functional• Concurrent• Distributed
Wednesday, May 14, 14
![Page 16: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/16.jpg)
Wednesday, May 14, 14
![Page 17: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/17.jpg)
Switch
Wednesday, May 14, 14
![Page 18: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/18.jpg)
Switch
Wednesday, May 14, 14
![Page 19: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/19.jpg)
Switch
Wednesday, May 14, 14
![Page 20: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/20.jpg)
Switch
Wednesday, May 14, 14
![Page 21: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/21.jpg)
Switch
Switch
Wednesday, May 14, 14
![Page 22: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/22.jpg)
Switch
Browser
Endpoint
Server
Wednesday, May 14, 14
![Page 23: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/23.jpg)
http://stackoverflow.com/questions/1636455/where-is-erlang-used-and-why
Wednesday, May 14, 14
![Page 24: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/24.jpg)
http://blog.whatsapp.com/index.php/2012/01/1-million-is-so-2011/
2 million connections on a single node
Wednesday, May 14, 14
![Page 25: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/25.jpg)
Intel Xeon CPU X5675 @ 3.07GHz24 CPU - 96GBUsing 40% of CPU and Memory
Wednesday, May 14, 14
![Page 26: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/26.jpg)
Idioms
Wednesday, May 14, 14
![Page 27: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/27.jpg)
Sequentialcode
Wednesday, May 14, 14
![Page 28: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/28.jpg)
Sequentialcode
elixir
Wednesday, May 14, 14
![Page 29: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/29.jpg)
Sequentialcode
elixir
Wednesday, May 14, 14
![Page 30: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/30.jpg)
elixir
Wednesday, May 14, 14
![Page 31: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/31.jpg)
elixir
Wednesday, May 14, 14
![Page 32: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/32.jpg)
elixir
Wednesday, May 14, 14
![Page 33: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/33.jpg)
WebDB MailerStats
Wednesday, May 14, 14
![Page 34: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/34.jpg)
WebDB MailerStats
Sup
Wednesday, May 14, 14
![Page 35: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/35.jpg)
WebDB MailerStats
Sup
App
Wednesday, May 14, 14
![Page 36: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/36.jpg)
• Processes• Supervisors• Applications• Message passing• “Fail fast”
Wednesday, May 14, 14
![Page 37: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/37.jpg)
Wednesday, May 14, 14
![Page 38: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/38.jpg)
• Isolated• Concurrent• Fault tolerant
Wednesday, May 14, 14
![Page 39: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/39.jpg)
• Isolated• Concurrent• Fault tolerant• Distributed?
Wednesday, May 14, 14
![Page 40: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/40.jpg)
elixir
Wednesday, May 14, 14
![Page 41: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/41.jpg)
app2@localapp1@local
elixir
Wednesday, May 14, 14
![Page 42: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/42.jpg)
Wednesday, May 14, 14
![Page 43: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/43.jpg)
• Compatibility
Wednesday, May 14, 14
![Page 44: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/44.jpg)
• Compatibility• Extensibility
Wednesday, May 14, 14
![Page 45: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/45.jpg)
• Compatibility• Extensibility • Productivity
Wednesday, May 14, 14
![Page 46: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/46.jpg)
goal #1
Compatibility
Wednesday, May 14, 14
![Page 47: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/47.jpg)
goal #2
Extensibility
Wednesday, May 14, 14
![Page 48: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/48.jpg)
Now we need to go meta. We should now think of a language design as being a
pattern for language designs. A tool for making more tools of the same kind.
Guy Steele - “Growing a language”at ACM OOPSLA 1998
Wednesday, May 14, 14
![Page 49: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/49.jpg)
defmacro unless(expr, opts) do quote do if(!unquote(expr), unquote(opts)) endend
unless(is_number(x), do: raise(“oops”))
elixir
Wednesday, May 14, 14
![Page 50: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/50.jpg)
defmodule MathTest do use ExUnit.Case
test "basic operations" do assert 1 + 1 == 2 endend
elixir
Wednesday, May 14, 14
![Page 51: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/51.jpg)
Wednesday, May 14, 14
![Page 52: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/52.jpg)
from p in Post,where: p.published_at < now and p.author == “José”,order: p.created_at
elixir
Wednesday, May 14, 14
![Page 53: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/53.jpg)
goal #3
Productivity
Wednesday, May 14, 14
![Page 54: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/54.jpg)
Focus on tooling.Demo time!
Wednesday, May 14, 14
![Page 55: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/55.jpg)
elixir-lang.orgWednesday, May 14, 14
![Page 56: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/56.jpg)
Wednesday, May 14, 14
![Page 57: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/57.jpg)
GeeConValim2014
Wednesday, May 14, 14
![Page 58: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/58.jpg)
Wednesday, May 14, 14
![Page 59: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/59.jpg)
Wednesday, May 14, 14
![Page 60: @elixirlang / elixir-langs3-eu-west-1.amazonaws.com/presentations2014/12_presentation.pdf · Now we need to go meta. We should now think of a language design as being a pattern for](https://reader035.vdocument.in/reader035/viewer/2022081614/5fcce56f7e0f80532f193481/html5/thumbnails/60.jpg)
@elixirlang / elixir-lang.orgWednesday, May 14, 14