SlideShare ist ein Scribd-Unternehmen logo
1 von 33
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (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
 

Ähnlich wie 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
 

Mehr von 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
 

Mehr von 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
 

Kürzlich hochgeladen

#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptxHugoGutierrez99
 
Análisis de Artefactos Tecnologicos (3) (1).pdf
Análisis de Artefactos Tecnologicos  (3) (1).pdfAnálisis de Artefactos Tecnologicos  (3) (1).pdf
Análisis de Artefactos Tecnologicos (3) (1).pdfsharitcalderon04
 
David_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDavid_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDAVIDROBERTOGALLEGOS
 
La tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadLa tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadEduardoSantiagoSegov
 
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxPLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxhasbleidit
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docxobandopaula444
 
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024u20211198540
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)JuanStevenTrujilloCh
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar24roberto21
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersIván López Martín
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfFernandoOblitasVivan
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosAlbanyMartinez7
 
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...Marketing BRANDING
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxLINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxkimontey
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointValerioIvanDePazLoja
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1ivanapaterninar
 

Kürzlich hochgeladen (20)

#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
 
Análisis de Artefactos Tecnologicos (3) (1).pdf
Análisis de Artefactos Tecnologicos  (3) (1).pdfAnálisis de Artefactos Tecnologicos  (3) (1).pdf
Análisis de Artefactos Tecnologicos (3) (1).pdf
 
David_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDavid_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptx
 
La tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadLa tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedad
 
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxPLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
 
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 Testcontainers
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdf
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos Juridicos
 
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxLINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power Point
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1
 

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