aprendiendo ( Erlang ).

jueves, 17 de marzo de 2011

La consola

| 0 comentarios |

Para acceder a la consola de Erlang sólo tenemos que teclear el comando erl y pulsar Enter. Debe aparecer algo como esto:
Erlang R13B03 (erts-5.7.4) [source] [64-bit] [rq:1] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.7.4  (abort with ^G)
1> 
La interacción básica con la consola no difiere mucho de otras consolas. Tiene un historial al cual podemos acceder con los cursores, un autocompletado de instrucciones (TAB) y además las siguientes secuencias de teclado tomadas del Emacs:
  • C-a inicio de línea
  • C-b retrocede un carácter
  • M-b retrocede una palabra
  • C-d borra un carácter
  • M-d borra una palabra
  • C-e fin de línea
  • C-f avanza un carácter
  • M-f avanza una palabra
  • C-g establece el modo JCL (después veremos de que se trata)
  • C-k corta una línea
  • C-l centra la línea en la que esta el cursor
  • C-n avanza en el histórico de comandos
  • C-p retrocede en el histórico de comandos
  • C-t intercambia dos carácteres
  • M-t intercambia dos palabras
  • C-y pegar

Existen comando básicos que nos permiten trabajar con la consola pero no están incorporados en el shell propiamente dicho como init:restart(), init:reboot(), init:stop(), además de un atajo rápido para salir de la consola q().

El módulo shell implementa un Erlang Shell. Incorpora un histórico de comandos y valores resultantes. Llamando a shell:history/1 y shell:results/1 podemos establecer el tamaño del histórico y de resultados.

El shell tiene dos modos de ejecución:
  • Normal modo habitual de la consola.
  • Job Control Mode (JCL) el cual puede ser invocado con Ctrl+g.

Comandos del shell
  • b() imprime las variables y su contenido.
  • f() borra todas las variables.
  • f(X) borra la variable X.
  • h() imprime el histórico.
  • history(N) establece el tamaño del histórico y el anterior es retornado.
  • results(N) establece el tamaño de resultados y el anterior es retornado.
  • e(N) repite el comando enésimo y si es negativo n-previos.
  • v(N) retorna el valor del comando enésimo y si es negativo n-previos.
  • help() muestra una lista de comandos de ayuda.
  • c(File) compila y carga el código del fichero y borra versiones anteriores, si es necesario. Se asume que el nombre del módulo y del fichero son el mismo.
  • catch_esception(Bool) establece el manejador de excepciones del evaluador de procesos. Retornar el valor anterior. Por defecto el valor es falso, en caso de excepción "mata" al evaluador de procesos. Cuando se establece a verdadero significa que los puertos y proceso vinculados al evaluador de procesos sobrevivirán a la excepción.
  • rd(RecordName, RecordDefinition) define un registro en el shell.
  • rf() borra todas la definiciones de registros. Retorna los nombre de los registros borrados.
  • rf(RecordName) borra una definición de registro. Si se pasa "_" entonces se comporta como rf()
  • rl() imprime todas las definiciones de registros.
  • rl(RecordName) imprime una definición de registro. RecordName puede ser una lista de nombres de registro o un único nombre.
  • rp(Term) imprime un término.
  • rr(Module) lee las definiciones de registros del módulo e imprime los nombres.
  • rr(Wildcard) como rr(Module) pero el parámetro en este caso es una cadena.
  • rr(WildcardOrModule, RecordNames) lee la definiciones de registros pasados por parámetros.
  • rr(WildcardOrModule, RecordNames, Options) igual que el anterior salvo por que podemos añadir algunas opciones.

Job Control Mode (JCL)
También llamado modo de rotura (break mode). Cuando arrancamos el shell, se lanza el evaluador de procesos (que también es un proceso). Este proceso, junto con los procesos locales que se genera, se conoce como trabajo (job) y están numerados por Erlang. Sólo el trabajo activo puede realizar operaciones de E/S estándar. Todos los otros trabajos (no activos), se bloquean si se intenta operar con E/S estándar. Esto quiere decir todos los trabajos que no utilicen la E/S estándar están ejecutándose.

Para activar el modo JCL tenemos que pulsar Ctrl+g. Este modo tiene como prompt --> y pulsando ? obtenemos la siguiente ayuda:
Erlang R13B03 (erts-5.7.4) [source] [64-bit] [rq:1] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.7.4  (abort with ^G)
1> 
User switch command
 --> ?
  c [nn]            - connect to job
  i [nn]            - interrupt job
  k [nn]            - kill job
  j                 - list all jobs
  s [shell]         - start local shell
  r [node [shell]]  - start remote shell
  q                 - quit erlang
  ? | h             - this message
 --> 
Veamos que hacen cada uno de los comandos del modo JCL.
  • ? | h imprime la ayuda
  • c [nn] conecta con el trabajo nn o con el trabajo actual.
  • i [nn] para el actual evaluador de procesos del trabajo nn o del actual, preservando variables y demás actores del espacio de trabajo para poder retomarlo posteriormente.
  • k [nn] mata el trabajo nn o el actual. Todos los procesos del trabajo son "matados" si es sobre la máquina local en caso contrario no los "mata".
  • j Lista todos los trabajos. El trabajo con el * es el trabajo activo o actual.
  • s arranca un nuevo trabajo y le asocia un identificador de trabajo.
  • s [shell] arranca un nuevo trabajo. Opcionalmente se le puede indicar un shell alternativo al shell por defecto.
  • r [node] arranca un trabajo en un nodo remoto. Esto se utiliza en distribución aplicaciones Erlang.
  • q sale de Erlang.

Publicar un comentario en la entrada

0 comentarios:

 
Licencia Creative Commons
Aprendiendo Erlang por Verdi se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 3.0 Unported.