SlideShare ist ein Scribd-Unternehmen logo
1 von 36
Downloaden Sie, um offline zu lesen
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) {
System.out.println(“Hola mundo!”);
}
}
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 - 6, i} }
.select { |i| i.all? { prime?(i) } }
end
puts sexy_primes(100_000)
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/benchmarks
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
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
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
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 { |i| i.all? { prime?(i) } }
end
puts sexy_primes(100_000)
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”)
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
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
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
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)
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)
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”)
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
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”
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]
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
❖ Chequeo de tipos
❖ Alto y bajo nivel
❖ => Felicidad!
¿Para qué sirve?
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
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/carc.in
Bots IRC
❖ DeBot: https://github.com/jhass/DeBot
Compiladores
❖ Crystal: https://github.com/manastech/crystal
¡Gracias!
Ary Borenszweig
email: aborenszweig@manas.com.ar
@asteritetwitter:

Weitere ähnliche Inhalte

Ähnlich wie Por qué Crystal? Why Crystal Language?

Ruby on rails presentation
Ruby on rails presentationRuby on rails presentation
Ruby on rails presentationSynbioz
 
Ruby presentasjon på NTNU 22 april 2009
Ruby presentasjon på NTNU 22 april 2009Ruby presentasjon på NTNU 22 april 2009
Ruby presentasjon på NTNU 22 april 2009Aslak Hellesøy
 
Ruby presentasjon på NTNU 22 april 2009
Ruby presentasjon på NTNU 22 april 2009Ruby presentasjon på NTNU 22 april 2009
Ruby presentasjon på NTNU 22 april 2009Aslak Hellesøy
 
Ruby presentasjon på NTNU 22 april 2009
Ruby presentasjon på NTNU 22 april 2009Ruby presentasjon på NTNU 22 april 2009
Ruby presentasjon på NTNU 22 april 2009Aslak Hellesøy
 
Perl6 a whistle stop tour
Perl6 a whistle stop tourPerl6 a whistle stop tour
Perl6 a whistle stop tourSimon Proctor
 
Perl6 a whistle stop tour
Perl6 a whistle stop tourPerl6 a whistle stop tour
Perl6 a whistle stop tourSimon Proctor
 
Intermediate Swift Language by Apple
Intermediate Swift Language by AppleIntermediate Swift Language by Apple
Intermediate Swift Language by Applejamesfeng2
 
Retos de Programación en Python
Retos de Programación en PythonRetos de Programación en Python
Retos de Programación en PythonJavier Abadía
 
An Introduction to Scala (2014)
An Introduction to Scala (2014)An Introduction to Scala (2014)
An Introduction to Scala (2014)William Narmontas
 
Ruby 程式語言綜覽簡介
Ruby 程式語言綜覽簡介Ruby 程式語言綜覽簡介
Ruby 程式語言綜覽簡介Wen-Tien Chang
 
2Bytesprog2 course_2014_c1_sets
2Bytesprog2 course_2014_c1_sets2Bytesprog2 course_2014_c1_sets
2Bytesprog2 course_2014_c1_setskinan keshkeh
 
2Bytesprog2 course_2014_c1_sets
2Bytesprog2 course_2014_c1_sets2Bytesprog2 course_2014_c1_sets
2Bytesprog2 course_2014_c1_setskinan keshkeh
 
Introduction to Perl Best Practices
Introduction to Perl Best PracticesIntroduction to Perl Best Practices
Introduction to Perl Best PracticesJosé Castro
 

Ähnlich wie Por qué Crystal? Why Crystal Language? (20)

Python slide
Python slidePython slide
Python slide
 
Introduction to Scala
Introduction to ScalaIntroduction to Scala
Introduction to Scala
 
Ruby on rails presentation
Ruby on rails presentationRuby on rails presentation
Ruby on rails presentation
 
Ruby presentasjon på NTNU 22 april 2009
Ruby presentasjon på NTNU 22 april 2009Ruby presentasjon på NTNU 22 april 2009
Ruby presentasjon på NTNU 22 april 2009
 
Ruby presentasjon på NTNU 22 april 2009
Ruby presentasjon på NTNU 22 april 2009Ruby presentasjon på NTNU 22 april 2009
Ruby presentasjon på NTNU 22 april 2009
 
Ruby presentasjon på NTNU 22 april 2009
Ruby presentasjon på NTNU 22 april 2009Ruby presentasjon på NTNU 22 april 2009
Ruby presentasjon på NTNU 22 april 2009
 
Python Basic
Python BasicPython Basic
Python Basic
 
Perl6 a whistle stop tour
Perl6 a whistle stop tourPerl6 a whistle stop tour
Perl6 a whistle stop tour
 
Perl6 a whistle stop tour
Perl6 a whistle stop tourPerl6 a whistle stop tour
Perl6 a whistle stop tour
 
Intermediate Swift Language by Apple
Intermediate Swift Language by AppleIntermediate Swift Language by Apple
Intermediate Swift Language by Apple
 
Retos de Programación en Python
Retos de Programación en PythonRetos de Programación en Python
Retos de Programación en Python
 
An Introduction to Scala (2014)
An Introduction to Scala (2014)An Introduction to Scala (2014)
An Introduction to Scala (2014)
 
Bulletproofing your foot for Kotlin
Bulletproofing your foot for KotlinBulletproofing your foot for Kotlin
Bulletproofing your foot for Kotlin
 
Ruby Intro {spection}
Ruby Intro {spection}Ruby Intro {spection}
Ruby Intro {spection}
 
Swift School #1
Swift School #1Swift School #1
Swift School #1
 
Ruby 程式語言綜覽簡介
Ruby 程式語言綜覽簡介Ruby 程式語言綜覽簡介
Ruby 程式語言綜覽簡介
 
2Bytesprog2 course_2014_c1_sets
2Bytesprog2 course_2014_c1_sets2Bytesprog2 course_2014_c1_sets
2Bytesprog2 course_2014_c1_sets
 
2Bytesprog2 course_2014_c1_sets
2Bytesprog2 course_2014_c1_sets2Bytesprog2 course_2014_c1_sets
2Bytesprog2 course_2014_c1_sets
 
Swift Study #7
Swift Study #7Swift Study #7
Swift Study #7
 
Introduction to Perl Best Practices
Introduction to Perl Best PracticesIntroduction to Perl Best Practices
Introduction to Perl Best Practices
 

Kürzlich hochgeladen

🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 

Kürzlich hochgeladen (20)

🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 

Por qué Crystal? Why Crystal Language?

  • 1. Buenos Aires - Crystal Meetup #1 ¿Por qué Crystal? Ary Borenszweig aborenszweig@manas.com.ar
  • 2. ¿Por qué un lenguaje nuevo?
  • 3. Poca ceremonia # Crystal puts “Hello world” ~~~ // Java public class Main { public static void main(String[] args) { System.out.println(“Hola mundo!”); } }
  • 4. Fácil de leer y escribir
  • 5. Fácil de leer y escribir def say_hello() puts(“Hola mundo!”); end say_hello();
  • 6. Fácil de leer y escribir def say_hello() puts(“Hola mundo!”) end say_hello()
  • 7. Fácil de leer y escribir def say_hello() puts “Hola mundo!” end say_hello()
  • 8. Fácil de leer y escribir def say_hello puts “Hola mundo!” end say_hello
  • 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)
  • 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. 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. 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. 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
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Bajo nivel lib LibC fun rand : LibC::Int end puts LibC.rand # => 16807
  • 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!
  • 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
  • 32. Juegos ❖ crsfml: https://github.com/BlaXpirit/crsfml ❖ crystal-gl: https://github.com/ggiraldez/crystal-gl
  • 33. Páginas web ❖ crystalshards: https://github.com/zamith/ crystalshards ❖ play.crystal-lang.org: https://github.com/jhass/carc.in
  • 34. Bots IRC ❖ DeBot: https://github.com/jhass/DeBot