SlideShare una empresa de Scribd logo
1 de 11
Descargar para leer sin conexión
Buenos Aires - Crystal Meetup #1
Herramientas
uso y creación
Brian J. Cardiff
bcardiff@manas.com.ar
Tipos de herramientas
❖ Entrada
❖ Archivos planos
❖ Resultado del parsing
❖ Resultado de compilación
❖ Salida
❖ Información sobre el código
❖ Modificación del código
Tipos de herramientas
Archivos
planos
Resultado
del parsing
Resultado de
inferencia y/o
compilación
Información
sobre el
código
Tamaño
Archivos.
Dependencia
de archivos via
regex
Información de
jerarquía de clases,
etc.
Tipos de variables,
Invocaciones,
Implementaciones
Modificación
del código
¡NO! Formatter
Refactor semántico
🎩✨🐰🎉❤
¿alguien?
Herramientas actuales
$	
  crystal	
  tool	
  
Usage: crystal tool [tool] [switches] [program file] [--] [arguments]
format format project, directories and/or files
hierarchy show type hierarchy
types show type of main variables
context show context for given location
implementations show implementations for given call in location
Types
sample.cr	
  
class	
  Person	
  
	
  	
  property	
  name	
  
	
  	
  property	
  age	
  
	
  	
  def	
  initialize(@name,	
  @age)	
  
	
  	
  end	
  
end	
  
p	
  =	
  Person.new("John",	
  35)	
  
n	
  =	
  p.name
$	
  crystal	
  tool	
  types	
  sample.cr	
  	
  
p	
  :	
  Person	
  
n	
  :	
  String
Implementations
sample-­‐impl.cr	
  
class	
  Foo	
  
	
  	
  def	
  hi	
  
	
  	
  	
  	
  "I'm	
  a	
  foo"	
  
	
  	
  end	
  
end	
  
class	
  Bar	
  
	
  	
  def	
  hi	
  
	
  	
  	
  	
  "I'm	
  a	
  bar"	
  
	
  	
  end	
  
end	
  
obj	
  =	
  rand	
  <	
  0.5	
  ?	
  Foo.new	
  :	
  Bar.new	
  
obj.hi	
  
$	
  crystal	
  tool	
  implementations	
  -­‐-­‐cursor	
  
sample-­‐impl.cr:14:6	
  sample-­‐impl.cr	
  
2	
  implementations	
  found	
  
./sample-­‐impl.cr:2:3	
  
./sample-­‐impl.cr:8:3	
  
‸
༓
༓
Context
sample-­‐context.cr	
  
class	
  Foo	
  
	
  	
  def	
  set(a)	
  
	
  	
  	
  	
  r	
  =	
  a	
  +	
  a	
  
	
  	
  	
  	
  r	
  
	
  	
  end	
  
end	
  
class	
  Bar	
  
	
  	
  def	
  set(a)	
  
	
  	
  	
  	
  a	
  
	
  	
  end	
  
end	
  
obj	
  =	
  rand	
  <	
  0.5	
  ?	
  Foo.new	
  :	
  Bar.new	
  
obj.set("a	
  string")	
  
obj.set(1)	
  if	
  obj.is_a?(Foo)	
  
obj.set(1.5)	
  if	
  obj.is_a?(Bar)	
  
$	
  crystal	
  tool	
  context	
  -­‐-­‐cursor	
  sample-­‐
context.cr:4:5	
  sample-­‐context.cr	
  
2	
  possible	
  contexts	
  found	
  
|	
  Expr	
  |	
  Type	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  |	
  
-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐	
  
|	
  self	
  |	
  	
  Foo	
  	
  	
  |	
  	
  Foo	
  	
  |	
  
|	
  a	
  	
  	
  	
  |	
  String	
  |	
  Int32	
  |	
  
|	
  r	
  	
  	
  	
  |	
  String	
  |	
  Int32	
  |	
  
‸
Demo: Contar variables de instancia
require	
  "compiler/crystal/**"	
  
include	
  Crystal	
  
filename	
  =	
  File.expand_path(...)	
  
compiler	
  =	
  Compiler.new	
  
compiler.no_codegen	
  =	
  true	
  
source	
  =	
  Compiler::Source.new(filename,	
  File.read(filename))	
  
result	
  =	
  compiler.compile(source,	
  “not	
  used	
  due	
  to	
  no	
  codegen”)	
  
pp	
  result	
  #	
  =>	
  Crystal::Compiler::Result	
  
pp	
  result.program.types.values	
  #	
  =>	
  Array(Crystal::Type+)
https://github.com/bcardiff/crystal-tool-demo
Integración con editores
❖ Salida para consola, sin estructura
❖ a parsear o mostrar directamente
❖ JSON, CSV, etc.
❖ intercambiar datos con el editor
❖ posibilidad de mejores interacciones
❖ http://crystal-lang.org/2015/09/05/tools.html
Ecosistema de Editores
❖ Vim
❖ https://github.com/rhysd/vim-crystal
❖ Atom
❖ https://github.com/manastech/atom-crystal-tools
❖ https://github.com/atom-crystal
❖ Sublime
❖ https://github.com/manastech/sublime-crystal
¡Gracias!
Brian J. Cardiff
email: bcardiff@manas.com.ar
twitter: @bcardiff

Más contenido relacionado

Similar a Crystal: herramientas, uso y creación.

Similar a Crystal: herramientas, uso y creación. (20)

04 j flex
04 j flex04 j flex
04 j flex
 
C ++.ppt
C ++.pptC ++.ppt
C ++.ppt
 
Libreria c++
Libreria c++Libreria c++
Libreria c++
 
Taller de flex y bison
Taller de flex y bisonTaller de flex y bison
Taller de flex y bison
 
Java 8 - Nuevas características
Java 8 - Nuevas característicasJava 8 - Nuevas características
Java 8 - Nuevas características
 
Objetivo 01 Archivos de Texto
Objetivo 01 Archivos de TextoObjetivo 01 Archivos de Texto
Objetivo 01 Archivos de Texto
 
PERSISTENCIA BASADA EN ARCHIVOS
PERSISTENCIA BASADA EN ARCHIVOSPERSISTENCIA BASADA EN ARCHIVOS
PERSISTENCIA BASADA EN ARCHIVOS
 
Gestion de archivos
Gestion de archivosGestion de archivos
Gestion de archivos
 
03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQuery03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQuery
 
Lab archivos
Lab archivosLab archivos
Lab archivos
 
23 sparql
23 sparql23 sparql
23 sparql
 
Bibliotecas existentes para_c_
Bibliotecas existentes para_c_Bibliotecas existentes para_c_
Bibliotecas existentes para_c_
 
Curso prog sist
Curso prog sistCurso prog sist
Curso prog sist
 
S2-EDD-1.2 Paso de estructuras y punteros a funciones, recursividad
S2-EDD-1.2 Paso de estructuras y punteros a funciones, recursividadS2-EDD-1.2 Paso de estructuras y punteros a funciones, recursividad
S2-EDD-1.2 Paso de estructuras y punteros a funciones, recursividad
 
Taller de Shell Scripting
Taller de Shell ScriptingTaller de Shell Scripting
Taller de Shell Scripting
 
Semana 8 herramientas de procesos de string
Semana 8  herramientas de procesos de stringSemana 8  herramientas de procesos de string
Semana 8 herramientas de procesos de string
 
8 herramientas de procesos de string
8  herramientas de procesos de string8  herramientas de procesos de string
8 herramientas de procesos de string
 
Lenguaje
LenguajeLenguaje
Lenguaje
 
C++ y sus librerias
C++ y sus libreriasC++ y sus librerias
C++ y sus librerias
 
8. Uso De Variables De Tipo Referencia
8.  Uso De Variables De Tipo Referencia8.  Uso De Variables De Tipo Referencia
8. Uso De Variables De Tipo Referencia
 

Último

Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 

Último (10)

Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 

Crystal: herramientas, uso y creación.

  • 1. Buenos Aires - Crystal Meetup #1 Herramientas uso y creación Brian J. Cardiff bcardiff@manas.com.ar
  • 2. Tipos de herramientas ❖ Entrada ❖ Archivos planos ❖ Resultado del parsing ❖ Resultado de compilación ❖ Salida ❖ Información sobre el código ❖ Modificación del código
  • 3. Tipos de herramientas Archivos planos Resultado del parsing Resultado de inferencia y/o compilación Información sobre el código Tamaño Archivos. Dependencia de archivos via regex Información de jerarquía de clases, etc. Tipos de variables, Invocaciones, Implementaciones Modificación del código ¡NO! Formatter Refactor semántico 🎩✨🐰🎉❤ ¿alguien?
  • 4. Herramientas actuales $  crystal  tool   Usage: crystal tool [tool] [switches] [program file] [--] [arguments] format format project, directories and/or files hierarchy show type hierarchy types show type of main variables context show context for given location implementations show implementations for given call in location
  • 5. Types sample.cr   class  Person      property  name      property  age      def  initialize(@name,  @age)      end   end   p  =  Person.new("John",  35)   n  =  p.name $  crystal  tool  types  sample.cr     p  :  Person   n  :  String
  • 6. Implementations sample-­‐impl.cr   class  Foo      def  hi          "I'm  a  foo"      end   end   class  Bar      def  hi          "I'm  a  bar"      end   end   obj  =  rand  <  0.5  ?  Foo.new  :  Bar.new   obj.hi   $  crystal  tool  implementations  -­‐-­‐cursor   sample-­‐impl.cr:14:6  sample-­‐impl.cr   2  implementations  found   ./sample-­‐impl.cr:2:3   ./sample-­‐impl.cr:8:3   ‸ ༓ ༓
  • 7. Context sample-­‐context.cr   class  Foo      def  set(a)          r  =  a  +  a          r      end   end   class  Bar      def  set(a)          a      end   end   obj  =  rand  <  0.5  ?  Foo.new  :  Bar.new   obj.set("a  string")   obj.set(1)  if  obj.is_a?(Foo)   obj.set(1.5)  if  obj.is_a?(Bar)   $  crystal  tool  context  -­‐-­‐cursor  sample-­‐ context.cr:4:5  sample-­‐context.cr   2  possible  contexts  found   |  Expr  |  Type                      |   -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐   |  self  |    Foo      |    Foo    |   |  a        |  String  |  Int32  |   |  r        |  String  |  Int32  |   ‸
  • 8. Demo: Contar variables de instancia require  "compiler/crystal/**"   include  Crystal   filename  =  File.expand_path(...)   compiler  =  Compiler.new   compiler.no_codegen  =  true   source  =  Compiler::Source.new(filename,  File.read(filename))   result  =  compiler.compile(source,  “not  used  due  to  no  codegen”)   pp  result  #  =>  Crystal::Compiler::Result   pp  result.program.types.values  #  =>  Array(Crystal::Type+) https://github.com/bcardiff/crystal-tool-demo
  • 9. Integración con editores ❖ Salida para consola, sin estructura ❖ a parsear o mostrar directamente ❖ JSON, CSV, etc. ❖ intercambiar datos con el editor ❖ posibilidad de mejores interacciones ❖ http://crystal-lang.org/2015/09/05/tools.html
  • 10. Ecosistema de Editores ❖ Vim ❖ https://github.com/rhysd/vim-crystal ❖ Atom ❖ https://github.com/manastech/atom-crystal-tools ❖ https://github.com/atom-crystal ❖ Sublime ❖ https://github.com/manastech/sublime-crystal
  • 11. ¡Gracias! Brian J. Cardiff email: bcardiff@manas.com.ar twitter: @bcardiff