REPLs
-
Upload
antonio-ognio -
Category
Technology
-
view
1.686 -
download
0
description
Transcript of REPLs
![Page 1: REPLs](https://reader034.fdocuments.us/reader034/viewer/2022051313/54812b73b37959b55d8b463a/html5/thumbnails/1.jpg)
REPLs
Antonio Ognio Cesti<[email protected]>
http://gnrfan.org
(Entornos interactivos de programación)
![Page 2: REPLs](https://reader034.fdocuments.us/reader034/viewer/2022051313/54812b73b37959b55d8b463a/html5/thumbnails/2.jpg)
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
![Page 3: REPLs](https://reader034.fdocuments.us/reader034/viewer/2022051313/54812b73b37959b55d8b463a/html5/thumbnails/3.jpg)
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
![Page 4: REPLs](https://reader034.fdocuments.us/reader034/viewer/2022051313/54812b73b37959b55d8b463a/html5/thumbnails/4.jpg)
REPLs / Antonio Ognio
Lenguajes con REPLs disponibles● LISP (top-level)● Python / Ipython● Java (Beanshell)● Ruby (IRB)● Haskell (ghci)● PHP (phpsh)● Javascript (Rhino js)● Scala (scala)● Erlang (erl)
● Perl (Perl Console)● F# (fsi)● Clojure● C (c-repl)● Ocaml (top-level)● C# (CSREPL)● Scheme (top-level)● Otros mas...
![Page 5: REPLs](https://reader034.fdocuments.us/reader034/viewer/2022051313/54812b73b37959b55d8b463a/html5/thumbnails/5.jpg)
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
![Page 6: REPLs](https://reader034.fdocuments.us/reader034/viewer/2022051313/54812b73b37959b55d8b463a/html5/thumbnails/6.jpg)
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
![Page 7: REPLs](https://reader034.fdocuments.us/reader034/viewer/2022051313/54812b73b37959b55d8b463a/html5/thumbnails/7.jpg)
REPLs / Antonio Ognio
La tortuga de Logo...
![Page 8: REPLs](https://reader034.fdocuments.us/reader034/viewer/2022051313/54812b73b37959b55d8b463a/html5/thumbnails/8.jpg)
REPLs / Antonio Ognio
Commodore 64 logo
![Page 9: REPLs](https://reader034.fdocuments.us/reader034/viewer/2022051313/54812b73b37959b55d8b463a/html5/thumbnails/9.jpg)
REPLs / Antonio Ognio
Turtle Art en OLPC
![Page 10: REPLs](https://reader034.fdocuments.us/reader034/viewer/2022051313/54812b73b37959b55d8b463a/html5/thumbnails/10.jpg)
REPLs / Antonio Ognio
F# Interactive en Visual Studio
![Page 11: REPLs](https://reader034.fdocuments.us/reader034/viewer/2022051313/54812b73b37959b55d8b463a/html5/thumbnails/11.jpg)
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! :)
![Page 12: REPLs](https://reader034.fdocuments.us/reader034/viewer/2022051313/54812b73b37959b55d8b463a/html5/thumbnails/12.jpg)
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
![Page 13: REPLs](https://reader034.fdocuments.us/reader034/viewer/2022051313/54812b73b37959b55d8b463a/html5/thumbnails/13.jpg)
REPLs / Antonio Ognio
Algunos REPLs disponibles en Ubuntu● c-repl● ipython● irb● erlang-base (erl)● slime● rhino● haskell-mode (ghci)● bsh (Bean Shell)
![Page 14: REPLs](https://reader034.fdocuments.us/reader034/viewer/2022051313/54812b73b37959b55d8b463a/html5/thumbnails/14.jpg)
REPLs / Antonio Ognio
... a solo un apt-get install de distancia
$ sudo apt-get install <paquete>
![Page 15: REPLs](https://reader034.fdocuments.us/reader034/viewer/2022051313/54812b73b37959b55d8b463a/html5/thumbnails/15.jpg)
REPLs / Antonio Ognio
Ejemplo: iPython
$ sudo apt-get install ipython
![Page 16: REPLs](https://reader034.fdocuments.us/reader034/viewer/2022051313/54812b73b37959b55d8b463a/html5/thumbnails/16.jpg)
REPLs / Antonio Ognio
Demo de iPython
![Page 17: REPLs](https://reader034.fdocuments.us/reader034/viewer/2022051313/54812b73b37959b55d8b463a/html5/thumbnails/17.jpg)
REPLs / Antonio Ognio
Demo de iPython
![Page 18: REPLs](https://reader034.fdocuments.us/reader034/viewer/2022051313/54812b73b37959b55d8b463a/html5/thumbnails/18.jpg)
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
![Page 19: REPLs](https://reader034.fdocuments.us/reader034/viewer/2022051313/54812b73b37959b55d8b463a/html5/thumbnails/19.jpg)
REPLs / Antonio Ognio
Demo OnlinePython REPL
http://datamech.com/devan/trypython/trypython.py
![Page 20: REPLs](https://reader034.fdocuments.us/reader034/viewer/2022051313/54812b73b37959b55d8b463a/html5/thumbnails/20.jpg)
REPLs / Antonio Ognio
http://tryruby.hobix.com/
![Page 21: REPLs](https://reader034.fdocuments.us/reader034/viewer/2022051313/54812b73b37959b55d8b463a/html5/thumbnails/21.jpg)
REPLs / Antonio Ognio
http://www.phpsh.org
http://developers.facebook.com/opensource.php
![Page 22: REPLs](https://reader034.fdocuments.us/reader034/viewer/2022051313/54812b73b37959b55d8b463a/html5/thumbnails/22.jpg)
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 & featuresCommandline: php -q ./phpsh.php example.phpphp> = 3 + 36php> = $_6php> = $_+ $_12php> $x = $_php> print $x12php> $y = $x * $xphp> print "$y=144"144=144
![Page 23: REPLs](https://reader034.fdocuments.us/reader034/viewer/2022051313/54812b73b37959b55d8b463a/html5/thumbnails/23.jpg)
REPLs / Antonio Ognio
php> = starts_withstarts_with starts_with($s, $prefix) php> = starts_with("abc", "a")1php> d starts_withfunction 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 + \24
![Page 24: REPLs](https://reader034.fdocuments.us/reader034/viewer/2022051313/54812b73b37959b55d8b463a/html5/thumbnails/24.jpg)
REPLs / Antonio Ognio
php> = array(array(1,2,3), array("a" => "b", "c" => "d", "e" => "f"), '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
![Page 25: REPLs](https://reader034.fdocuments.us/reader034/viewer/2022051313/54812b73b37959b55d8b463a/html5/thumbnails/25.jpg)
REPLs / Antonio Ognio
http://www.mono-project.com/CsharpRepl
![Page 26: REPLs](https://reader034.fdocuments.us/reader034/viewer/2022051313/54812b73b37959b55d8b463a/html5/thumbnails/26.jpg)
REPLs / Antonio Ognio
![Page 27: REPLs](https://reader034.fdocuments.us/reader034/viewer/2022051313/54812b73b37959b55d8b463a/html5/thumbnails/27.jpg)
REPLs / Antonio Ognio
![Page 28: REPLs](https://reader034.fdocuments.us/reader034/viewer/2022051313/54812b73b37959b55d8b463a/html5/thumbnails/28.jpg)
REPLs / Antonio Ognio
![Page 29: REPLs](https://reader034.fdocuments.us/reader034/viewer/2022051313/54812b73b37959b55d8b463a/html5/thumbnails/29.jpg)
REPLs / Antonio Ognio
![Page 30: REPLs](https://reader034.fdocuments.us/reader034/viewer/2022051313/54812b73b37959b55d8b463a/html5/thumbnails/30.jpg)
REPLs / Antonio Ognio
$ ./manage.py shell
![Page 31: REPLs](https://reader034.fdocuments.us/reader034/viewer/2022051313/54812b73b37959b55d8b463a/html5/thumbnails/31.jpg)
REPLs / Antonio Ognio
$ ./manage.py shellPython 2.5.2 (r252:60911, Jul 31 2008, 17:28:52) [GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)] on linux2Type "help", "copyright", "credits" or "license" for more information.(InteractiveConsole)>>> from django.contrib.auth.models import User>>> user = User()>>> user.email = '[email protected]'>>> dir(user)>>> user.username = 'gnrfan'>>> user.first_name = 'Antonio'>>> user.last_name = 'Ognio'>>> user.save()
$ ./manage.py shellPython 2.5.2 (r252:60911, Jul 31 2008, 17:28:52) [GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)] on linux2Type "help", "copyright", "credits" or "license" for more information.(InteractiveConsole)>>> from django.contrib.auth.models import User>>> user = User()>>> user.email = '[email protected]'>>> dir(user)>>> user.username = 'gnrfan'>>> user.first_name = 'Antonio'>>> user.last_name = 'Ognio'>>> user.save()
![Page 32: REPLs](https://reader034.fdocuments.us/reader034/viewer/2022051313/54812b73b37959b55d8b463a/html5/thumbnails/32.jpg)
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