mozilla

Comparar revisiones

Introducción al shell de JavaScript

Change Revisions

Revisión 262757:

Revisión 262757 de Superruzafa el

Revisión 230235:

Revisión 230235 de Superruzafa el

Título:
Introducción al shell de JavaScript
Introducción al shell de JavaScript
Enlace amigable (slug):
Introducción_al_shell_de_JavaScript
Introducción_al_shell_de_JavaScript
Contenido:

Revisión 262757
Revisión 230235
t7    <p>t
8      <span class="comment">__NOTOC__</span>
9    </p>
10    <h2 id="Introducci.C3.B3n" name="Introducci.C3.B3n">
11      Introducción
12    </h2>
13    <p>
14      Este artículo pretende servir como introducción a la descar
>ga y compilación del shell de JavaScript desde el servidor CVS de 
> Mozilla, prestando especial atención a la descarga y compilación 
> de las versiones previas a las finales a modo de prueba y experi 
>mentación. 
15    </p>
16    <p>
17      Además, este artículo proporciona información de uso básico
> sobre cómo se puede usar el shell para experimentar con código y 
> ejecutar programas de JavaScript. 
18    </p>
19    <h2 id="Descargando_y_compilando_el_shell_de_JavaScript" name
>="Descargando_y_compilando_el_shell_de_JavaScript"> 
20      Descargando y compilando el shell de JavaScript
21    </h2>
22    <p>
23      <span class="comment">Traducciones para logging: * Entrar *
> Registrarse * Darse de alta???</span> 
24    </p>
25    <h3 id="Logue.C3.A1ndose_en_el_servidor_CVS" name="Logue.C3.A
>1ndose_en_el_servidor_CVS"> 
26      Logueándose en el servidor CVS
27    </h3>
28    <p>
29      Al igual que ocurre cuando se busca cualquier otro proyecto
> de Mozilla en el CVS, lo primero que hay que hacer es loguearse  
>en el servidor CVS. Para hacer esto, hay que situarse en el direc 
>torio base en el que se encuentre el código al que quieres accede 
>r y luego introducir el siguiente comando en la línea de comandos 
>: 
30    </p>
31    <pre class="eval">
32cvs -d <a class=" link-mailto" href="mailto::pserver:anonymous@cv
>s-mirror.mozilla.org" rel="freelink">:pserver:anonymous@cvs-mirro 
>r.mozilla.org</a>:/cvsroot login 
33</pre>
34    <p>
35      Cuando te lo pregunte, introduce la contraseña <tt>anonymou
>s</tt>. 
36    </p>
37    <h3 id="Compilando_una_versi.C3.B3n_trunk_de_JavaScript" name
>="Compilando_una_versi.C3.B3n_trunk_de_JavaScript"> 
38      Compilando una versión trunk de JavaScript
39    </h3>
40    <p>
41      Una vez logueado en el servidor, es hora de buscar el códig
>o en el CVS. Primero hay que situarse en el directorio raíz del á 
>rbol CVS y luego es necesario introducir el siguiente comando: 
42    </p>
43    <pre>
44cvs -d :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot co -l m
>ozilla/js/src mozilla/js/src/config mozilla/js/src/editline mozil 
>la/js/src/fdlibm 
45</pre>
46    <p>
47      Esto comprueba todos los ficheros que hacen falta para comp
>ilar el shell de JavaScript. 
48    </p>
49    <p>
50      Ahora puedes compilar JavaScript ejecutando los dos siguien
>tes comandos: 
51    </p>
52    <pre>
53cd mozilla/js/src
54make -f Makefile.ref
55</pre>
56    <p>
57      Cuando finalice la compilación, debería de haber un ejecuta
>ble llamado <tt>js</tt> en un directorio cuyo nombre depende del  
>sistema en el que se ha realizado la compilación. Por ejemplo, en 
> Mac OS X, el ejecutable estará ubicado en <tt>Darwin_DBG.OBJ/js< 
>/tt>. 
58    </p>
59    <p>
60      En este momento, ya estás listo para <a href="#Usando_el_sh
>ell_de_JavaScript">ejecutar y probar el shell.</a> 
61    </p>
62    <h3 id="Compilando_una_versi.C3.B3n_branch_de_JavaScript" nam
>e="Compilando_una_versi.C3.B3n_branch_de_JavaScript"> 
63      Compilando una versión branch de JavaScript
64    </h3>
65    <p>
66      Si lo que quieres es experimentar con las versiones con lo 
>último de JavaScript, necesitarás compilar una versión branch de  
>JavaScript. Se hace de forma igual a la compilación de la versión 
> trunk, excepto que hay que comprobar la versión branch del códig 
>o en lugar de la versión trunk. 
67    </p>
68    <p>
69      Realiza los mismos pasos explicados anteriormente y cuando 
>compruebes los ficheros, cambia la línea <tt>cvs co...</tt> por 
70    </p>
71    <pre class="eval">
72cvs -d <a class=" link-mailto" href="mailto::pserver:anonymous@cv
>s-mirror.mozilla.org" rel="freelink">:pserver:anonymous@cvs-mirro 
>r.mozilla.org</a>:/cvsroot co -l -r <i>branch_name</i> mozilla/js 
>/src mozilla/js/src/config mozilla/js/src/editline mozilla/js/src 
>/fdlibm 
73</pre>
74    <p>
75      Sustituye <i>branch_name</i> por el nombre de la versión br
>anch comprobada. Por ejemplo, para comprobar la versión alpha bra 
>nch de JavaScript 1.7 se debe poner <tt>JS_1_7_ALPHA_BRANCH</tt>. 
76    </p>
77    <p>
78      Luego puedes seguir la compilación y ejecutar el shell como
> se ha explicado antes. 
79    </p>
80    <h2 id="Usando_el_shell_de_JavaScript" name="Usando_el_shell_
>de_JavaScript"> 
81      Usando el shell de JavaScript
82    </h2>
83    <p>
84      El shell proporciona dos modos de operación. Puedes usarlo 
>como shell interactivo, en el cual se puede escribir código JavaS 
>cript y se obtienen respuestas inmediatas; algo que es útil para  
>experimentar o probar nuevas características. Además se le puede  
>pasar (en la línea de comandos) un fichero que contenga un progra 
>ma JavaScript para ejecutarlo, en cuyo caso el programa es ejecut 
>ado automáticamente. 
85    </p>
86    <div class="note">
87      <b>Nota:</b> Dado que el shell de JavaScript es usado como 
>entorno de pruebas para el motor JavaScript, las opciones disponi 
>bles y las funciones incorporadas pueden cambiar con el tiempo. 
88    </div>
89    <h3 id="Opciones_en_l.C3.ADnea_de_comandos" name="Opciones_en
>_l.C3.ADnea_de_comandos"> 
90      Opciones en línea de comandos
91    </h3>
92    <p>
93      Existen una serie de opciones en línea de comandos que se p
>ueden especificar para controlar el shell. Se muestran a continua 
>ción: 
94    </p>
95    <ul>
96      <li>
97        <code>-b <i>branchlimit</i></code>
98        <ul>
99          <li>Establece el límite del branch.
100          </li>
101        </ul>
102      </li>
103      <li>
104        <code>-c <i>stackchunksize</i></code>
105        <ul>
106          <li>Establece el tamaño del chunk de la pila.
107          </li>
108        </ul>
109      </li>
110      <li>
111        <code>-C</code>
112        <ul>
113          <li>Le dice al shell que compile el programa pero no lo
> ejecute. Este es un modo conveniente para comprobar rápidamente  
>los errores de sintaxis en el programa sin tener que ejectuarlo. 
114          </li>
115        </ul>
116      </li>
117      <li>
118        <code>-e <i>script</i></code>
119        <ul>
120          <li>Ejecuta el <i>script</i> especificado, que es una c
>adena de texto que contiene el código a ejecutar. 
121          </li>
122        </ul>
123      </li>
124      <li>
125        <code>-f <i>fichero</i></code>
126        <ul>
127          <li>Ejecuta el programa JavaScript especificado por <i>
>fichero</i>. 
128          </li>
129        </ul>
130      </li>
131      <li>
132        <code>-i</code>
133        <ul>
134          <li>Habilita el modo interactivo.
135          </li>
136        </ul>
137      </li>
138      <li>
139        <code>-P</code>
140        <ul>
141          <li>
142            <i>Todavía no tengo claro lo que hace.</i>
143          </li>
144        </ul>
145      </li>
146      <li>
147        <code>-s</code>
148        <ul>
149          <li>Habilita el modo de avisos estrictos.
150          </li>
151        </ul>
152      </li>
153      <li>
154        <code>-S <i>stacksize</i></code>
155        <ul>
156          <li>Establece el tamaño máximo de la pila.
157          </li>
158        </ul>
159      </li>
160      <li>
161        <code>-v</code>
162        <ul>
163          <li>Muestra información estadística.
164          </li>
165        </ul>
166      </li>
167      <li>
168        <code>-w</code>
169        <ul>
170          <li>Habilita mensajes de avisos.
171          </li>
172        </ul>
173      </li>
174      <li>
175        <code>-W</code>
176        <ul>
177          <li>Inhabilita mensajes de avisos.
178          </li>
179        </ul>
180      </li>
181      <li>
182        <code>-x</code>
183        <ul>
184          <li>Habilita el modo XML E4X.
185          </li>
186        </ul>
187      </li>
188    </ul>
189    <h3 id="Ejecutando_el_shell" name="Ejecutando_el_shell">
190      Ejecutando el shell
191    </h3>
192    <p>
193      Si quieres ejecutar el shell en modo interactivo, simplemen
>te hay que usar el comando: 
194    </p>
195    <pre class="eval">
196js
197</pre>
198    <p>
199      Si lo que quieres es ejecutar el código JavaScript dle fich
>ero <tt>foo.js&lt;/td&gt;, debes usar este comando:</tt> 
200    </p>
201    <pre class="eval">
202js -f foo.js
203</pre>
204    <p>
205      Para ejecutar &lt;tt&gt;foo.js y luego volver al shell inte
>ractivo, haz esto: 
206    </p>
207    <pre class="eval">
208js -f foo.js -f -
209</pre>
210    <h4 id="Usando_el_shell_en_modo_interactivo" name="Usando_el_
>shell_en_modo_interactivo"> 
211      Usando el shell en modo interactivo
212    </h4>
213    <p>
214      En el modo interactivo puedes introducir código JavaScript 
>a mano para crear objetos y funciones, además de escribir sentenc 
>ias. Esta es una buena forma de probar ideas y, de un modo más im 
>portante para los desarrolladores que trabajan en el motor de Jav 
>aScript, probar nuevas características del lenguaje. 
215    </p>
216    <h3 id="Funciones_integradas" name="Funciones_integradas">
217      Funciones integradas
218    </h3>
219    <p>
220      Para hacer al shell de JavaScript más útil, existen un núme
>ro de funciones integradas para que puedan ser usadas desde los p 
>rogramas JavaScript o en modo interactivo. 
221    </p>
222    <h4 id="build.28.29" name="build.28.29">
223      <code>build()</code>
224    </h4>
225    <p>
226      Devuelve la fecha y hora en la que fue compilado el shell d
>e JavaScript. 
227    </p>
228    <h4 id="clear.28.5Bobjeto.5D.29" name="clear.28.5Bobjeto.5D.2
>9"> 
229      <code>clear(<i>[objeto]</i>)</code>
230    </h4>
231    <p>
232      Elimina las propiedades del <var>objeto</var> especificado.
> Llamando a <code>clear()</code> sin ningún parámetro se deja el  
>entorno limpio como una patena. 
233    </p>
234    <div class="note">
235      <b>Nota:</b> <code>clear()</code> sin parámetros se lo cepi
>lla absolutamente todo. Esto incluye a estas funciones integradas 
>. 
236    </div>
237    <h4 id="clone.28funci.C3.B3n.2C_.5B.C3.A1mbito.5D.29" name="c
>lone.28funci.C3.B3n.2C_.5B.C3.A1mbito.5D.29"> 
238      <code>clone(<i>función, [ámbito]</i>)</code>
239    </h4>
240    <p>
241      Clona el objeto <var>funcion</var> especificado. Si <var>ám
>bito</var> no es especificado, el padre del nuevo objeto será el  
>mismo que el del objeto original. En otro caso, el nuevo objeto e 
>s ubicado en el ámbito del objeto especificado por <var>ámbito</v 
>ar>. 
242    </p>
243    <h4 id="dis.28.5Bfuncion.5D.29" name="dis.28.5Bfuncion.5D.29"
>> 
244      <code>dis(<i>[funcion]</i>)</code>
245    </h4>
246    <p>
247      Desensambla el programa o la función especificada en byteco
>des de JavaScript. 
248    </p>
249    <p>
250      Por ejemplo, si introduces la siguiente función de JavaScri
>pt: 
251    </p>
252    <pre>
253function test() {
254  var i = 3;
255  print(i+2);
256}
257</pre>
258    <p>
259      entonces al ejectuar el comando <tt>dis(test);</tt> se obti
>ene esta salida: 
260    </p>
261    <pre>
262main:
26300000:  uint16 3
26400003:  setvar 0
26500006:  pop
26600007:  name "print"
26700010:  pushobj
26800011:  getvar 0
26900014:  uint16 2
27000017:  add
27100018:  call 1
27200021:  pop
27300022:  stop
274 
275Source notes:
276  0:     0 [   0] newline 
277  1:     3 [   3] var     
278  2:     7 [   4] newline 
279  3:    18 [  11] xdelta  
280  4:    18 [   0] pcbase   offset 11
281</pre>
282    <h4 id="dissrc.28.5Bfunci.C3.B3n.5D.29" name="dissrc.28.5Bfun
>ci.C3.B3n.5D.29"> 
283      <code>dissrc(<i>[función]</i>)</code>
284    </h4>
285    <p>
286      Desensambla el programa o la función especificada en byteco
>des JavaScript, mostrando las líneas del código fuente. Esta func 
>ión sólo funciona con programas cargados desde fichero, bien usan 
>do el modificador <code>-f</code> al lanzar el shell o usando la  
>función <code>load()&lt;/coad&gt;</code> 
287    </p>
288    <p>
289      Si el programa incluye una función, &lt;code&gt;doStuff() c
>omo esta: 
290    </p>
291    <pre>
292function doStuff(input) {
293        print("Introduce un número: ");
294        var n1 = readline();
295        print("Introduce otro: ");
296        var n2 = readline();
297        
298        print("Has introducido " + n1 + " and " + n2 + "\n");
299}
300</pre>
301    <p>
302      al llamar a la función <code>dissrc(doStuff)</code> se obti
>ene la siguiente salida: 
303    </p>
304    <pre>
305;-------------------------  10:         print("Introduce un númer
>o: "); 
30600000:  10  name "print"
30700003:  10  pushobj
30800004:  10  string "Introduce un número: "
30900007:  10  call 1
31000010:  10  pop
311;-------------------------  11:         var n1 = readline();
31200011:  11  name "readline"
31300014:  11  pushobj
31400015:  11  call 0
31500018:  11  setvar 0
31600021:  11  pop
317;-------------------------  12:         print("Introduce otro: ")
>; 
31800022:  12  name "print"
31900025:  12  pushobj
32000026:  12  string "Introduce otro: "
32100029:  12  call 1
32200032:  12  pop
323;-------------------------  13:         var n2 = readline();
32400033:  13  name "readline"
32500036:  13  pushobj
32600037:  13  call 0
32700040:  13  setvar 1
32800043:  13  pop
329;-------------------------  14: 
330;-------------------------  15:         print("Has introducido " 
>+ n1 + " and " + n2 + "\n"); 
33100044:  15  name "print"
33200047:  15  pushobj
33300048:  15  string "Has introducido "
33400051:  15  getvar 0
33500054:  15  add
33600055:  15  string " and "
33700058:  15  add
33800059:  15  getvar 1
33900062:  15  add
34000063:  15  string "\\n"
34100066:  15  add
34200067:  15  call 1
34300070:  15  po
344</pre>

Volver al historial