Page 1 of 1
OT. Emscripten
Posted: Fri Sep 20, 2013 6:56 pm
by hmpaquito
Hola,
En el foro de Harbour hablan de un curioso compilador. Compila de LLVM (CLang) a JavaScript y asi todo lo que genera corre en un navegador.
Noticia en Harbour:
https://groups.google.com/forum/?fromgr ... 1RcHL2M1KkWeb del proyecto Emscripten:
https://github.com/kripken/emscripten/wiki¡ qué curioso ! ¿ no crees, Antonio ?
Saludos
Re: OT. Emscripten
Posted: Fri Sep 20, 2013 8:00 pm
by Antonio Linares
Muy interesante, gracias por la noticia!
Re: OT. Emscripten
Posted: Fri Sep 20, 2013 8:33 pm
by Antonio Linares
Re: OT. Emscripten
Posted: Fri Sep 20, 2013 8:40 pm
by Antonio Linares
Como una primera idea, y despues de ver la que lia el traductor de llvm a javascript, se me ocurre que de forma infinitamente más simple podriamos escribir la maquina virtual en javascript
Y asi ni necesitamos usar LLVM ni este traductor ni nada más
a ver si tengo un ratito libre...
Re: OT. Emscripten
Posted: Fri Sep 20, 2013 10:48 pm
by Antonio Linares
No me he podido resistir a constuir este pequeño ejemplo
1. He compilado el siguiente PRG con Harbour:
test.prg
2. He copiado el array de pcode que se genera en test.c y la tabla de símbolos a javascript.
3. he construido una "mini" maquina virtual usando javascript que lo procese
test.html
Code: Select all | Expand
<head>
</head>
<body>
<style>
.scrollable
{
overflow:auto;
}
</style>
<div class="scrollable" id="scrollable" height="480">
<canvas id="canvas" width="640" height="480" style="background-color:0"/>
</div>
<script type="text/javascript">
var context = document.getElementById( "canvas" ).getContext( "2d" );
var pcode = [ 36,3,0,176,1,0,106,12,72,101,108,108,111,32,
119,111,114,108,100,0,20,1,36,5,0,100,110,7 ];
var symbols = [ "MAIN", "QOUT" ];
// pcode tokens
var HB_P_ENDPROC = 7;
var HB_P_DOSHORT = 20;
var HB_P_LINE = 36;
var HB_P_PUSHNIL = 100;
var HB_P_PUSHSTRSHORT = 106;
var HB_P_RETVALUE = 110;
var HB_P_PUSHFUNCSYM = 176;
function hb_vmExecute( pcode, symbols )
{
var nPos = 0;
while( pcode[ nPos ] != HB_P_ENDPROC )
{
switch( pcode[ nPos ] )
{
case HB_P_LINE:
qout( "line: " + pcode[ ++nPos ] );
nPos += 2;
break;
case HB_P_DOSHORT:
qout( "Do short: " + pcode[ ++nPos ] + " parameter" );
nPos += 1;
break;
case HB_P_PUSHNIL:
qout( "Push nil" );
nPos++;
break;
case HB_P_PUSHSTRSHORT:
qout( "Push String short: " + pcode[ ++nPos ] + " bytes" );
for( n = 1; n < pcode[ nPos ]; n++ )
qout( String.fromCharCode( pcode[ nPos + n ] ) );
nPos += n;
break;
case HB_P_RETVALUE:
qout( "return the pushed value" );
nPos++;
break;
case HB_P_PUSHFUNCSYM:
qout( "Push Function symbol: " + symbols[ pcode[ ++nPos ] ] );
nPos += 2;
break;
default:
qout( pcode[ nPos ] );
nPos++;
break;
}
}
qout( "EndProc" );
}
function qout( cText )
{
if( context.row == null )
{
context.row = 30;
context.col = 10;
}
else
context.row += 20;
context.fillStyle = "green";
context.font = "bold 16px Arial";
context.fillText( cText, context.col, context.row );
}
hb_vmExecute( pcode, symbols );
</script>
</body>
Re: OT. Emscripten
Posted: Fri Sep 20, 2013 10:50 pm
by Antonio Linares
Re: OT. Emscripten
Posted: Sat Sep 21, 2013 2:50 am
by carlos vargas
:-0 maravillo antonio.
Re: OT. Emscripten
Posted: Sat Sep 21, 2013 9:23 am
by hmpaquito
Muy, muy bueno, Antonio !!
Ya tenemos una máquina virtual para Javascript. Ahora podemos ejecutar nuestros programas en el navegador. El sueño, por fin, hecho realidad.
Sólo falta la impresión, yo creo que se resuelve fácilmente haciendo otra máquina virtual de listados.
Saludos.
No. En serio: ha estado muy bien la mini maquina virtual que has creado para el qout.
Re: OT. Emscripten
Posted: Sat Sep 21, 2013 9:36 am
by Enrico Maria Giordano
Antonio,
Using IE8 I see nothing.
EMG
Re: OT. Emscripten
Posted: Sat Sep 21, 2013 12:19 pm
by George
Antonio,
En Internet Explorer 10 y Google Chrome Version "29.0.1547.76 m" funciona perfecto!
Saludos,
George
Re: OT. Emscripten
Posted: Sat Sep 21, 2013 7:37 pm
by Antonio Linares
Ahora solo falta alguien/es que tengan tiempo, ganas y paciencia de seguir
Recordar que mi primer ejemplito de construcción de un compilador compatible con Clipper hacia practicamente lo mismo que este y fijaros ahora el compilador que usamos
La semilla es tan importante como la tierra, el agua, el sol y el cariño...
Re: OT. Emscripten
Posted: Wed Sep 25, 2013 1:00 pm
by cnavarro
Antonio Linares wrote:Ahora solo falta alguien/es que tengan tiempo, ganas y paciencia de seguir
Recordar que mi primer ejemplito de construcción de un compilador compatible con Clipper hacia practicamente lo mismo que este y fijaros ahora el compilador que usamos
La semilla es tan importante como la tierra, el agua, el sol y el cariño...
Antonio, estoy dispuesto a ayudar en lo que pueda dentro de mis posibilidades (conocimientos).
Re: OT. Emscripten
Posted: Wed Sep 25, 2013 7:14 pm
by Antonio Linares
Cristobal,
muchas gracias
Yo desafortunadamente no tengo tiempo que dedicarle a este juguete en javascript, y seguro que es fascinante
Por mi parte, si alguien se anima a continuarlo, cuenta con mi apoyo en todo lo posible
Re: OT. Emscripten
Posted: Wed Sep 25, 2013 7:29 pm
by cnavarro
Ok, Antonio
Vere que puedo hacer.