SlideShare una empresa de Scribd logo
1 de 33
Descargar para leer sin conexión
REPLs
(Entornos interactivos de programación)




 Antonio Ognio Cesti
 <gnrfan@gnrfan.org>
   http://gnrfan.org
REPLs / Antonio Ognio




¿Qué es un REPL?

● Read-Eval-Print Loop
● Entorno interactivo de programación

● Escribo código y obtengo el resultado de inmediato

● Ideal para probar ideas y estrategias

● Manera rápida y fácil de obtener el fragmento de


programación buscado
REPLs / Antonio Ognio




Mas sobre los REPLs
● El nombre viene de las funciones que se utilizaron en
su implementación en LISP
● Muchas veces se le llama intérprete sin embargo esto


no es exacto porque hay lenguages como Python o
C# que si compilan el código fuente a bytecode y lo
ejecutan el código de forma interactiva
● Actualmente se encuentran disponibles para muchos


lenguajes y cada vez hay más y nuevas
implementaciones
REPLs / Antonio Ognio




Lenguajes con REPLs disponibles
● LISP (top-level)
                          ● Perl (Perl Console)
                          ● F# (fsi)
● Python / Ipython
                          ● Clojure
● Java (Beanshell)
                          ● C (c-repl)
● Ruby (IRB)
                          ● Ocaml (top-level)
● Haskell (ghci)
                          ● C# (CSREPL)
● PHP (phpsh)
                          ● Scheme (top-level)
● Javascript (Rhino js)
                          ● Otros mas...
● Scala (scala)

● Erlang (erl)
REPLs / Antonio Ognio




Cualquier linea de comandos...
● Bash / C Shell / Z Shell (UNIX)
● command.com (DOS)

● Microsoft Powershell (.Net)

● Cualquier otro “intérprete” de comandos
REPLs / Antonio Ognio




Los REPLs nos acompañan hace mucho
tiempo...

●
  Orígenes en LISP en los 60's y 70's
● Integración con editor Emacs (SLIME)

● Popular con Logo en los 80's
REPLs / Antonio Ognio




La tortuga de Logo...
REPLs / Antonio Ognio




Commodore 64 logo
REPLs / Antonio Ognio




Turtle Art en OLPC
REPLs / Antonio Ognio



F# Interactive en Visual Studio
REPLs / Antonio Ognio




Ventajas de un REPL
● Ideal para dar los primeros pasos
● Programación exploratoria

● Depuración

● Aprender a usar una API

● Prototipear alguna idea

● Afinar una expresión y/o algoritmo

● Demostraciones en vivo! :)
REPLs / Antonio Ognio




Desventajas de un REPL
●
  Los errores se notan de inmediato y
no hay mucha oportunidad de
corregirlos
● ¿Esto último es un feature o un bug?

● No es muy cómodo editar muchas


líneas de código
● No funcionan muchas características


presentes en un IDE
REPLs / Antonio Ognio




Algunos REPLs disponibles en Ubuntu
●
  c-repl
● ipython

● irb

● erlang-base (erl)

● slime

● rhino

● haskell-mode (ghci)

● bsh (Bean Shell)
REPLs / Antonio Ognio




... a solo un apt-get install de distancia


  $ sudo apt-get install <paquete>
REPLs / Antonio Ognio




Ejemplo: iPython


  $ sudo apt-get install ipython
REPLs / Antonio Ognio




Demo de iPython
REPLs / Antonio Ognio




Demo de iPython
REPLs / Antonio Ognio




Características de iPython
●
  “pretty-printing” de resultados
● Autocompletar con Tab

● Auto identación

● Historial de comandos

● Ayuda formateada

● Traceback enriquecidos

 ● plain

 ● context

 ● verbose
REPLs / Antonio Ognio




      Demo Online
      Python REPL

http://datamech.com/devan/trypython/trypython.py
REPLs / Antonio Ognio




http://tryruby.hobix.com/
REPLs / Antonio Ognio




http://www.phpsh.org


  http://developers.facebook.com/opensource.php
REPLs / Antonio Ognio



[gnrfan]:~/src/phpsh-0.86b$./phpsh ejemplo.php
phpsh (c)2006 by Charlie Cheever and Dan Corson and Facebook, Inc.
type 'h' or 'help' to see instructions & features
Commandline: php -q ./phpsh.php example.php
php> = 3 + 3
6
php> = $_
6
php> = $_+ $_
12
php> $x = $_
php> print $x
12
php> $y = $x * $x
php> print quot;$y=144quot;
144=144
REPLs / Antonio Ognio


php> = starts_with
starts_with                 starts_with($s, $prefix)
php> = starts_with(quot;abcquot;, quot;aquot;)
1
php> d starts_with
function starts_with($s, $prefix) {     type=None
file=example.php
/home/.dogmatic/ccheever/src/phpsh-0.86b/example.php, lines 2-10:
/**
  * Returns true if the first arg starts with the second arg
  * @param    string    $big_string
  * @param    string    $little_string
  * @return   true or false
  *
  * @author   ccheever
  */
php> = 2 + 
2
4
REPLs / Antonio Ognio

php> = array(array(1,2,3), array(quot;aquot; => quot;bquot;, quot;cquot; => quot;dquot;, quot;equot; => quot;fquot;), 'g',
'h')
Array
(
     [0] => Array
         (
             [0] => 1
             [1] => 2
             [2] => 3
         )

    [1] => Array
        (
            [a] => b
            [c] => d
            [e] => f
        )

    [2] => g
    [3] => h
)

php> q
REPLs / Antonio Ognio




http://www.mono-project.com/CsharpRepl
REPLs / Antonio Ognio
REPLs / Antonio Ognio
REPLs / Antonio Ognio
REPLs / Antonio Ognio
REPLs / Antonio Ognio




$ ./manage.py shell
REPLs / Antonio Ognio




$ ./manage.py shell
$ ./manage.py shell
Python 2.5.2 (r252:60911, Jul 31 2008, 17:28:52)
Python 2.5.2 (r252:60911, Jul 31 2008, 17:28:52)
[GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)] on linux2
[GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)] on linux2
Type quot;helpquot;, quot;copyrightquot;, quot;creditsquot; or quot;licensequot; for more
Type quot;helpquot;, quot;copyrightquot;, quot;creditsquot; or quot;licensequot; for more
information.
information.
(InteractiveConsole)
(InteractiveConsole)
>>> from django.contrib.auth.models import User
>>> from django.contrib.auth.models import User
>>> user = User()
>>> user = User()
>>> user.email = 'gnrfan@gnrfan.org'
>>> user.email = 'gnrfan@gnrfan.org'
>>> dir(user)
>>> dir(user)
>>> user.username = 'gnrfan'
>>> user.username = 'gnrfan'
>>> user.first_name = 'Antonio'
>>> user.first_name = 'Antonio'
>>> user.last_name = 'Ognio'
>>> user.last_name = 'Ognio'
>>> user.save()
>>> user.save()
REPLs / Antonio Ognio




Conclusiones
● Los REPLs son fáciles de usar
● Nos facilitan aprender programación

● Nos permiten descubrir nuevas APIs

● Nos ayudan a plasmar ideas en código

● Existen para muchos lenguajes

● Es posible que un REPL para tu lenguaje


favorito este a la vuelta de la esquina
Gracias!!!
 Antonio Ognio Cesti
 <gnrfan@gnrfan.org>
   http://gnrfan.org

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Especialista Web J9 Php
Especialista Web J9  PhpEspecialista Web J9  Php
Especialista Web J9 Php
 
Programador Jr. para Python Primera Parte
Programador Jr. para Python Primera ParteProgramador Jr. para Python Primera Parte
Programador Jr. para Python Primera Parte
 
¿Porqué Python? ...y Django
¿Porqué Python? ...y Django¿Porqué Python? ...y Django
¿Porqué Python? ...y Django
 
Emu 8086
Emu 8086Emu 8086
Emu 8086
 
Python y la POO, en una clase, UNNe-Corrientes
Python y la POO, en una clase, UNNe-CorrientesPython y la POO, en una clase, UNNe-Corrientes
Python y la POO, en una clase, UNNe-Corrientes
 
Python (Lenguaje de Programación)
Python (Lenguaje de Programación)Python (Lenguaje de Programación)
Python (Lenguaje de Programación)
 
Perl
PerlPerl
Perl
 
Shell script en linux
Shell script en linuxShell script en linux
Shell script en linux
 
Compilacion Perl
Compilacion PerlCompilacion Perl
Compilacion Perl
 
Los scripts de linux
Los scripts de linuxLos scripts de linux
Los scripts de linux
 
Practica 5
Practica 5Practica 5
Practica 5
 
Proyecto de compiladores Sentencia While con Java CUP y JFLEX
Proyecto de compiladores Sentencia While con Java CUP y JFLEXProyecto de compiladores Sentencia While con Java CUP y JFLEX
Proyecto de compiladores Sentencia While con Java CUP y JFLEX
 
Creacion de scripts en linux
Creacion de scripts en linuxCreacion de scripts en linux
Creacion de scripts en linux
 
Sockets al limite, como explotar los sockets al límite en un proyecto de Symf...
Sockets al limite, como explotar los sockets al límite en un proyecto de Symf...Sockets al limite, como explotar los sockets al límite en un proyecto de Symf...
Sockets al limite, como explotar los sockets al límite en un proyecto de Symf...
 
ATIX05
ATIX05ATIX05
ATIX05
 
Java world
Java worldJava world
Java world
 
Introduccion A Groovy
Introduccion A GroovyIntroduccion A Groovy
Introduccion A Groovy
 
Scripts
ScriptsScripts
Scripts
 
The original hacker Nro 1
The original hacker Nro 1The original hacker Nro 1
The original hacker Nro 1
 
Introducción a Groovy
Introducción a GroovyIntroducción a Groovy
Introducción a Groovy
 

Similar a REPLs (20)

Codemotion Madrid 2013 - [PHP] desarrollo de extensiones en c c++
Codemotion Madrid 2013 - [PHP] desarrollo de extensiones en c c++Codemotion Madrid 2013 - [PHP] desarrollo de extensiones en c c++
Codemotion Madrid 2013 - [PHP] desarrollo de extensiones en c c++
 
Plone en La Jornada
Plone en La JornadaPlone en La Jornada
Plone en La Jornada
 
Python básico I
Python básico IPython básico I
Python básico I
 
Taller II Coreis Python 13112009
Taller II Coreis Python 13112009Taller II Coreis Python 13112009
Taller II Coreis Python 13112009
 
Mini clase Intro Programación Python UTN Profesorado 2015
Mini clase Intro Programación Python UTN Profesorado 2015Mini clase Intro Programación Python UTN Profesorado 2015
Mini clase Intro Programación Python UTN Profesorado 2015
 
Introduccion a Python
Introduccion a PythonIntroduccion a Python
Introduccion a Python
 
Personalizar gui guia_3
Personalizar gui guia_3Personalizar gui guia_3
Personalizar gui guia_3
 
Modelo Simulado
Modelo SimuladoModelo Simulado
Modelo Simulado
 
Php Peru Test Fest 2009
Php Peru Test Fest 2009Php Peru Test Fest 2009
Php Peru Test Fest 2009
 
Proyectos Web 3 Introduccion Php
Proyectos Web   3 Introduccion PhpProyectos Web   3 Introduccion Php
Proyectos Web 3 Introduccion Php
 
Programacion en php
Programacion en phpProgramacion en php
Programacion en php
 
3144
31443144
3144
 
Tercera unidad
Tercera unidadTercera unidad
Tercera unidad
 
Tercera unidad
Tercera unidadTercera unidad
Tercera unidad
 
Tercera unidad
Tercera unidadTercera unidad
Tercera unidad
 
Tercera unidad
Tercera unidadTercera unidad
Tercera unidad
 
Procesos
ProcesosProcesos
Procesos
 
Conociendo php (201009)
Conociendo php (201009)Conociendo php (201009)
Conociendo php (201009)
 
Introducción a Python
Introducción a PythonIntroducción a Python
Introducción a Python
 
Ejercicios
EjerciciosEjercicios
Ejercicios
 

Más de Antonio Ognio

Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura...
Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura...Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura...
Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura...Antonio Ognio
 
¿Cómo elegir el languaje y el framework de tu próxima aplicación web?
¿Cómo elegir el languaje y el framework de tu próxima aplicación web?¿Cómo elegir el languaje y el framework de tu próxima aplicación web?
¿Cómo elegir el languaje y el framework de tu próxima aplicación web?Antonio Ognio
 
Organizando una Hackparty
Organizando una HackpartyOrganizando una Hackparty
Organizando una HackpartyAntonio Ognio
 
Redis: servidor de estructuras de datos
Redis: servidor de estructuras de datosRedis: servidor de estructuras de datos
Redis: servidor de estructuras de datosAntonio Ognio
 
Lenguajes y frameworks para desarrollo web
Lenguajes y frameworks para desarrollo webLenguajes y frameworks para desarrollo web
Lenguajes y frameworks para desarrollo webAntonio Ognio
 
Bases de datos NoSQL - Huancayo - 2010
Bases de datos NoSQL - Huancayo - 2010Bases de datos NoSQL - Huancayo - 2010
Bases de datos NoSQL - Huancayo - 2010Antonio Ognio
 
Desarrollando con PHP en Windows
Desarrollando con PHP en WindowsDesarrollando con PHP en Windows
Desarrollando con PHP en WindowsAntonio Ognio
 
Gestor de paquetes YUM
Gestor de paquetes YUMGestor de paquetes YUM
Gestor de paquetes YUMAntonio Ognio
 
Mejorando la seguridad del servicio SSH - Hardening
Mejorando la seguridad del servicio SSH - HardeningMejorando la seguridad del servicio SSH - Hardening
Mejorando la seguridad del servicio SSH - HardeningAntonio Ognio
 
Mini-tutorial de git
Mini-tutorial de gitMini-tutorial de git
Mini-tutorial de gitAntonio Ognio
 
Ubuntu Server Edition 9.04 Jaunty Jackalope
Ubuntu Server Edition 9.04 Jaunty JackalopeUbuntu Server Edition 9.04 Jaunty Jackalope
Ubuntu Server Edition 9.04 Jaunty JackalopeAntonio Ognio
 
Consejos y trucos de supervivencia para nuevos usuarios de GNU/Linux
Consejos y trucos de supervivencia para nuevos usuarios de GNU/LinuxConsejos y trucos de supervivencia para nuevos usuarios de GNU/Linux
Consejos y trucos de supervivencia para nuevos usuarios de GNU/LinuxAntonio Ognio
 

Más de Antonio Ognio (15)

Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura...
Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura...Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura...
Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura...
 
¿Cómo elegir el languaje y el framework de tu próxima aplicación web?
¿Cómo elegir el languaje y el framework de tu próxima aplicación web?¿Cómo elegir el languaje y el framework de tu próxima aplicación web?
¿Cómo elegir el languaje y el framework de tu próxima aplicación web?
 
Organizando una Hackparty
Organizando una HackpartyOrganizando una Hackparty
Organizando una Hackparty
 
Lean Startups
Lean StartupsLean Startups
Lean Startups
 
Redis: servidor de estructuras de datos
Redis: servidor de estructuras de datosRedis: servidor de estructuras de datos
Redis: servidor de estructuras de datos
 
Lenguajes y frameworks para desarrollo web
Lenguajes y frameworks para desarrollo webLenguajes y frameworks para desarrollo web
Lenguajes y frameworks para desarrollo web
 
Bases de datos NoSQL - Huancayo - 2010
Bases de datos NoSQL - Huancayo - 2010Bases de datos NoSQL - Huancayo - 2010
Bases de datos NoSQL - Huancayo - 2010
 
Desarrollando con PHP en Windows
Desarrollando con PHP en WindowsDesarrollando con PHP en Windows
Desarrollando con PHP en Windows
 
Gestor de paquetes YUM
Gestor de paquetes YUMGestor de paquetes YUM
Gestor de paquetes YUM
 
Twixer (english)
Twixer (english)Twixer (english)
Twixer (english)
 
Twixer
TwixerTwixer
Twixer
 
Mejorando la seguridad del servicio SSH - Hardening
Mejorando la seguridad del servicio SSH - HardeningMejorando la seguridad del servicio SSH - Hardening
Mejorando la seguridad del servicio SSH - Hardening
 
Mini-tutorial de git
Mini-tutorial de gitMini-tutorial de git
Mini-tutorial de git
 
Ubuntu Server Edition 9.04 Jaunty Jackalope
Ubuntu Server Edition 9.04 Jaunty JackalopeUbuntu Server Edition 9.04 Jaunty Jackalope
Ubuntu Server Edition 9.04 Jaunty Jackalope
 
Consejos y trucos de supervivencia para nuevos usuarios de GNU/Linux
Consejos y trucos de supervivencia para nuevos usuarios de GNU/LinuxConsejos y trucos de supervivencia para nuevos usuarios de GNU/Linux
Consejos y trucos de supervivencia para nuevos usuarios de GNU/Linux
 

Último

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
 
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
 
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
 
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
 
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
 
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
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
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
 
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
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
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
 
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
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 

Último (13)

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
 
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
 
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
 
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
 
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
 
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
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
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)
 
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
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 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
 
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...
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 

REPLs

  • 1. REPLs (Entornos interactivos de programación) Antonio Ognio Cesti <gnrfan@gnrfan.org> http://gnrfan.org
  • 2. REPLs / Antonio Ognio ¿Qué es un REPL? ● Read-Eval-Print Loop ● Entorno interactivo de programación ● Escribo código y obtengo el resultado de inmediato ● Ideal para probar ideas y estrategias ● Manera rápida y fácil de obtener el fragmento de programación buscado
  • 3. REPLs / Antonio Ognio Mas sobre los REPLs ● El nombre viene de las funciones que se utilizaron en su implementación en LISP ● Muchas veces se le llama intérprete sin embargo esto no es exacto porque hay lenguages como Python o C# que si compilan el código fuente a bytecode y lo ejecutan el código de forma interactiva ● Actualmente se encuentran disponibles para muchos lenguajes y cada vez hay más y nuevas implementaciones
  • 4. REPLs / Antonio Ognio Lenguajes con REPLs disponibles ● LISP (top-level) ● Perl (Perl Console) ● F# (fsi) ● Python / Ipython ● Clojure ● Java (Beanshell) ● C (c-repl) ● Ruby (IRB) ● Ocaml (top-level) ● Haskell (ghci) ● C# (CSREPL) ● PHP (phpsh) ● Scheme (top-level) ● Javascript (Rhino js) ● Otros mas... ● Scala (scala) ● Erlang (erl)
  • 5. REPLs / Antonio Ognio Cualquier linea de comandos... ● Bash / C Shell / Z Shell (UNIX) ● command.com (DOS) ● Microsoft Powershell (.Net) ● Cualquier otro “intérprete” de comandos
  • 6. REPLs / Antonio Ognio Los REPLs nos acompañan hace mucho tiempo... ● Orígenes en LISP en los 60's y 70's ● Integración con editor Emacs (SLIME) ● Popular con Logo en los 80's
  • 7. REPLs / Antonio Ognio La tortuga de Logo...
  • 8. REPLs / Antonio Ognio Commodore 64 logo
  • 9. REPLs / Antonio Ognio Turtle Art en OLPC
  • 10. REPLs / Antonio Ognio F# Interactive en Visual Studio
  • 11. REPLs / Antonio Ognio Ventajas de un REPL ● Ideal para dar los primeros pasos ● Programación exploratoria ● Depuración ● Aprender a usar una API ● Prototipear alguna idea ● Afinar una expresión y/o algoritmo ● Demostraciones en vivo! :)
  • 12. REPLs / Antonio Ognio Desventajas de un REPL ● Los errores se notan de inmediato y no hay mucha oportunidad de corregirlos ● ¿Esto último es un feature o un bug? ● No es muy cómodo editar muchas líneas de código ● No funcionan muchas características presentes en un IDE
  • 13. REPLs / Antonio Ognio Algunos REPLs disponibles en Ubuntu ● c-repl ● ipython ● irb ● erlang-base (erl) ● slime ● rhino ● haskell-mode (ghci) ● bsh (Bean Shell)
  • 14. REPLs / Antonio Ognio ... a solo un apt-get install de distancia $ sudo apt-get install <paquete>
  • 15. REPLs / Antonio Ognio Ejemplo: iPython $ sudo apt-get install ipython
  • 16. REPLs / Antonio Ognio Demo de iPython
  • 17. REPLs / Antonio Ognio Demo de iPython
  • 18. REPLs / Antonio Ognio Características de iPython ● “pretty-printing” de resultados ● Autocompletar con Tab ● Auto identación ● Historial de comandos ● Ayuda formateada ● Traceback enriquecidos ● plain ● context ● verbose
  • 19. REPLs / Antonio Ognio Demo Online Python REPL http://datamech.com/devan/trypython/trypython.py
  • 20. REPLs / Antonio Ognio http://tryruby.hobix.com/
  • 21. REPLs / Antonio Ognio http://www.phpsh.org http://developers.facebook.com/opensource.php
  • 22. REPLs / Antonio Ognio [gnrfan]:~/src/phpsh-0.86b$./phpsh ejemplo.php phpsh (c)2006 by Charlie Cheever and Dan Corson and Facebook, Inc. type 'h' or 'help' to see instructions & features Commandline: php -q ./phpsh.php example.php php> = 3 + 3 6 php> = $_ 6 php> = $_+ $_ 12 php> $x = $_ php> print $x 12 php> $y = $x * $x php> print quot;$y=144quot; 144=144
  • 23. REPLs / Antonio Ognio php> = starts_with starts_with starts_with($s, $prefix) php> = starts_with(quot;abcquot;, quot;aquot;) 1 php> d starts_with function starts_with($s, $prefix) { type=None file=example.php /home/.dogmatic/ccheever/src/phpsh-0.86b/example.php, lines 2-10: /** * Returns true if the first arg starts with the second arg * @param string $big_string * @param string $little_string * @return true or false * * @author ccheever */ php> = 2 + 2 4
  • 24. REPLs / Antonio Ognio php> = array(array(1,2,3), array(quot;aquot; => quot;bquot;, quot;cquot; => quot;dquot;, quot;equot; => quot;fquot;), 'g', 'h') Array ( [0] => Array ( [0] => 1 [1] => 2 [2] => 3 ) [1] => Array ( [a] => b [c] => d [e] => f ) [2] => g [3] => h ) php> q
  • 25. REPLs / Antonio Ognio http://www.mono-project.com/CsharpRepl
  • 30. REPLs / Antonio Ognio $ ./manage.py shell
  • 31. REPLs / Antonio Ognio $ ./manage.py shell $ ./manage.py shell Python 2.5.2 (r252:60911, Jul 31 2008, 17:28:52) Python 2.5.2 (r252:60911, Jul 31 2008, 17:28:52) [GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)] on linux2 [GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)] on linux2 Type quot;helpquot;, quot;copyrightquot;, quot;creditsquot; or quot;licensequot; for more Type quot;helpquot;, quot;copyrightquot;, quot;creditsquot; or quot;licensequot; for more information. information. (InteractiveConsole) (InteractiveConsole) >>> from django.contrib.auth.models import User >>> from django.contrib.auth.models import User >>> user = User() >>> user = User() >>> user.email = 'gnrfan@gnrfan.org' >>> user.email = 'gnrfan@gnrfan.org' >>> dir(user) >>> dir(user) >>> user.username = 'gnrfan' >>> user.username = 'gnrfan' >>> user.first_name = 'Antonio' >>> user.first_name = 'Antonio' >>> user.last_name = 'Ognio' >>> user.last_name = 'Ognio' >>> user.save() >>> user.save()
  • 32. REPLs / Antonio Ognio Conclusiones ● Los REPLs son fáciles de usar ● Nos facilitan aprender programación ● Nos permiten descubrir nuevas APIs ● Nos ayudan a plasmar ideas en código ● Existen para muchos lenguajes ● Es posible que un REPL para tu lenguaje favorito este a la vuelta de la esquina
  • 33. Gracias!!! Antonio Ognio Cesti <gnrfan@gnrfan.org> http://gnrfan.org