Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Buenos Aires - Crystal Meetup #1
¿Por qué Crystal? Ary Borenszweig
aborenszweig@manas.com.ar
¿Por qué un lenguaje nuevo?
Poca ceremonia
# Crystal
puts “Hello world”
~~~
// Java
public class Main {
public static void main(String[] args) {
Syste...
Fácil de leer y escribir
Fácil de leer y escribir
def say_hello()
puts(“Hola mundo!”);
end
say_hello();
Fácil de leer y escribir
def say_hello()
puts(“Hola mundo!”)
end
say_hello()
Fácil de leer y escribir
def say_hello()
puts “Hola mundo!”
end
say_hello()
Fácil de leer y escribir
def say_hello
puts “Hola mundo!”
end
say_hello
Apariencia de un lenguaje dinámico
def prime?(n)
(2..n).all? { |i| n % i != 0 }
end
def sexy_primes(n)
(9..n).map { |i| {i...
Eficiente
Eficiente
Tiempo (s) Memoria (MB)
C++ 5.08 1.1
Crystal 6.97 1.3
Ruby 226.86 8.0
Brainfuck
https://github.com/kostya/benchm...
Eficiente
Tiempo (s) Memoria (MB)
Crystal 15.87 398.1
C++ 17.72 174.5
Python 396.54 724.0
Havlak
https://github.com/kostya...
Eficiente
Tiempo (s) Memoria (MB)
Crystal 0.59 3.3
Go 1.43 2.3
Erlang 1.89 17.1
Ruby 41.73 30.0
Threadring
https://github....
Eficiente
Tiempo (relativo)
Java 1.8.0_66 1.00
Crystal 1.58
Ruby MRI 2.3 47.59
Are we fast yet?
http://stefan-marr.de/down...
Chequeo de tipos
Chequeo de tipos
def prime?(n)
(2..n).all? { |i| n % i != 0 }
end
def sexy_primes(n)
(9..n).map { |i| {i - 6, i} }
.select...
Chequeo de tipos
def prime?(n)
(2..n).all? { |i| n % i != 0 }
end
def sexy_primes(n)
(9..n).map { |i| {i - 6, i} }
.select...
Chequeo de tipos
def prime?(n)
(2..n).all? { |i| n % i != 0 }
end
def sexy_primes(n)
(9..n).map { |i| {i - 6, i} }
.select...
Chequeo de tipos
def prime?(n)
(2..n).all? { |i| n % i != 0 }
end
def sexy_primes(n)
(9..n).map { |i| {i - 6, i} }
.select...
Chequeo de tipos
def prime?(n)
(2..n).all? { |i| n % i != 0 }
end
def sexy_primes(n)
(9..n).map { |i| {i - 6, i} }
.select...
Chequeo de tipos
def prime?(n)
(2..n).all? { |i| n % i != 0 }
end
def sexy_primes(n)
(9..n).map { |i| {i - 6, i} }
.select...
Chequeo de tipos
def prime?(n)
(2..n).all? { |i| n % i != 0 }
end
def sexy_primes(n : Int)
(9..n).map { |i| {i - 6, i} }
....
Chequeo de tipos
def prime?(n)
(2..n).all? { |i| n % i != 0 }
end
def sexy_primes(n : Int)
(9..n).map { |i| {i - 6, i} }
....
Chequeo de tipos
def prime?(n)
(2..n).all? { |i| n % i != 0 }
end
def sexy_primes(n : Int)
(9..n).map { |i| {i - 6, i} }
....
Alto nivel
numbers = [1, 2, 3, 4]
puts numbers.map { |x| x + 10 } # => [11, 12, 13, 14]
puts numbers[0] + numbers[-1] # =>...
Bajo nivel
ptr = Pointer(UInt8).malloc(20)
ptr.value = 10_u8
puts ptr # => Pointer(UInt8)@0x109303e00
a = 1
ptr = pointero...
Bajo nivel
lib LibC
fun rand : LibC::Int
end
puts LibC.rand # => 16807
¿Por qué un lenguaje nuevo?
❖ Poca ceremonia
❖ Fácil de leer y escribir
❖ Apariencia de un lenguaje dinámico
❖ Eficiente
❖ ...
¿Para qué sirve?
Aplicaciones de consola
❖ tlcr: https://github.com/porras/tlcr
❖ crul: https://github.com/porras/crul
❖ vicr: https://gith...
Emuladores
❖ nes.cr: https://github.com/romeroadrian/nes.cr
❖ rcpu: https://github.com/ddfreyne/rcpu
Juegos
❖ crsfml: https://github.com/BlaXpirit/crsfml
❖ crystal-gl: https://github.com/ggiraldez/crystal-gl
Páginas web
❖ crystalshards: https://github.com/zamith/
crystalshards
❖ play.crystal-lang.org: https://github.com/jhass/ca...
Bots IRC
❖ DeBot: https://github.com/jhass/DeBot
Compiladores
❖ Crystal: https://github.com/manastech/crystal
¡Gracias!
Ary Borenszweig
email: aborenszweig@manas.com.ar
@asteritetwitter:
Upcoming SlideShare
Loading in …5
×

Por qué Crystal? Why Crystal Language?

1,216 views

Published on

Ary Borenszweig, uno de los creadores de Crystal, presenta una introducción a este nuevo lenguaje, usos y aplicaciones.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Por qué Crystal? Why Crystal Language?

  1. 1. Buenos Aires - Crystal Meetup #1 ¿Por qué Crystal? Ary Borenszweig aborenszweig@manas.com.ar
  2. 2. ¿Por qué un lenguaje nuevo?
  3. 3. Poca ceremonia # Crystal puts “Hello world” ~~~ // Java public class Main { public static void main(String[] args) { System.out.println(“Hola mundo!”); } }
  4. 4. Fácil de leer y escribir
  5. 5. Fácil de leer y escribir def say_hello() puts(“Hola mundo!”); end say_hello();
  6. 6. Fácil de leer y escribir def say_hello() puts(“Hola mundo!”) end say_hello()
  7. 7. Fácil de leer y escribir def say_hello() puts “Hola mundo!” end say_hello()
  8. 8. Fácil de leer y escribir def say_hello puts “Hola mundo!” end say_hello
  9. 9. Apariencia de un lenguaje dinámico def prime?(n) (2..n).all? { |i| n % i != 0 } end def sexy_primes(n) (9..n).map { |i| {i - 6, i} } .select { |i| i.all? { prime?(i) } } end puts sexy_primes(100_000)
  10. 10. Eficiente
  11. 11. Eficiente Tiempo (s) Memoria (MB) C++ 5.08 1.1 Crystal 6.97 1.3 Ruby 226.86 8.0 Brainfuck https://github.com/kostya/benchmarks
  12. 12. Eficiente Tiempo (s) Memoria (MB) Crystal 15.87 398.1 C++ 17.72 174.5 Python 396.54 724.0 Havlak https://github.com/kostya/benchmarks
  13. 13. Eficiente Tiempo (s) Memoria (MB) Crystal 0.59 3.3 Go 1.43 2.3 Erlang 1.89 17.1 Ruby 41.73 30.0 Threadring https://github.com/kostya/crystal-benchmarks-game
  14. 14. Eficiente Tiempo (relativo) Java 1.8.0_66 1.00 Crystal 1.58 Ruby MRI 2.3 47.59 Are we fast yet? http://stefan-marr.de/downloads/crystal.html
  15. 15. Chequeo de tipos
  16. 16. Chequeo de tipos def prime?(n) (2..n).all? { |i| n % i != 0 } end def sexy_primes(n) (9..n).map { |i| {i - 6, i} } .select { |i| i.all? { prime?(i) } } end puts sexy_primes(100_000)
  17. 17. Chequeo de tipos def prime?(n) (2..n).all? { |i| n % i != 0 } end def sexy_primes(n) (9..n).map { |i| {i - 6, i} } .select { |i| i.all? { prime?(i) } } end puts sexy_primes(“Ups”)
  18. 18. Chequeo de tipos def prime?(n) (2..n).all? { |i| n % i != 0 } end def sexy_primes(n) (9..n).map { |i| {i - 6, i} } .select { |i| i.all? { prime?(i) } } end puts sexy_primes(“Ups”) # Error: no overload matches # `Int32#<` with type String
  19. 19. Chequeo de tipos def prime?(n) (2..n).all? { |i| n % i != 0 } end def sexy_primes(n) (9..n).map { |i| {i - 6, i} } .select { |i| i.all? { prime?(i) } } end puts sexy_primes(“Ups”) # Error: no overload matches # `Int32#<` with type String
  20. 20. Chequeo de tipos def prime?(n) (2..n).all? { |i| n % i != 0 } end def sexy_primes(n) (9..n).map { |i| {i - 6, i} } .select { |i| i.all? { prime?(i) } } end puts sexy_primes(“Ups”) # Error: no overload matches # `Int32#<` with type String
  21. 21. Chequeo de tipos def prime?(n) (2..n).all? { |i| n % i != 0 } end def sexy_primes(n) (9..n).map { |i| {i - 6, i} } .select { |i| i.all? { prime?(i) } } end puts sexy_primes(100_000)
  22. 22. Chequeo de tipos def prime?(n) (2..n).all? { |i| n % i != 0 } end def sexy_primes(n : Int) (9..n).map { |i| {i - 6, i} } .select { |i| i.all? { prime?(i) } } end puts sexy_primes(100_000)
  23. 23. Chequeo de tipos def prime?(n) (2..n).all? { |i| n % i != 0 } end def sexy_primes(n : Int) (9..n).map { |i| {i - 6, i} } .select { |i| i.all? { prime?(i) } } end puts sexy_primes(“Ups”)
  24. 24. Chequeo de tipos def prime?(n) (2..n).all? { |i| n % i != 0 } end def sexy_primes(n : Int) (9..n).map { |i| {i - 6, i} } .select { |i| i.all? { prime?(i) } } end puts sexy_primes(“Ups”) # Error: no overload matches # `sexy_primes` with type String
  25. 25. Alto nivel numbers = [1, 2, 3, 4] puts numbers.map { |x| x + 10 } # => [11, 12, 13, 14] puts numbers[0] + numbers[-1] # => 5 phones = { “Ary” => “15512312312”, “Brian” => “1545645645”, “Juan” => “1578978978”, } puts phones[“Brian”] # => “1545645645”
  26. 26. Bajo nivel ptr = Pointer(UInt8).malloc(20) ptr.value = 10_u8 puts ptr # => Pointer(UInt8)@0x109303e00 a = 1 ptr = pointerof(a) ptr.value = 2 puts a # => 2 buffer = uninitialized UInt8[1024]
  27. 27. Bajo nivel lib LibC fun rand : LibC::Int end puts LibC.rand # => 16807
  28. 28. ¿Por qué un lenguaje nuevo? ❖ Poca ceremonia ❖ Fácil de leer y escribir ❖ Apariencia de un lenguaje dinámico ❖ Eficiente ❖ Chequeo de tipos ❖ Alto y bajo nivel ❖ => Felicidad!
  29. 29. ¿Para qué sirve?
  30. 30. Aplicaciones de consola ❖ tlcr: https://github.com/porras/tlcr ❖ crul: https://github.com/porras/crul ❖ vicr: https://github.com/veelenga/vicr ❖ shards: https://github.com/ysbaddaden/shards
  31. 31. Emuladores ❖ nes.cr: https://github.com/romeroadrian/nes.cr ❖ rcpu: https://github.com/ddfreyne/rcpu
  32. 32. Juegos ❖ crsfml: https://github.com/BlaXpirit/crsfml ❖ crystal-gl: https://github.com/ggiraldez/crystal-gl
  33. 33. Páginas web ❖ crystalshards: https://github.com/zamith/ crystalshards ❖ play.crystal-lang.org: https://github.com/jhass/carc.in
  34. 34. Bots IRC ❖ DeBot: https://github.com/jhass/DeBot
  35. 35. Compiladores ❖ Crystal: https://github.com/manastech/crystal
  36. 36. ¡Gracias! Ary Borenszweig email: aborenszweig@manas.com.ar @asteritetwitter:

×