OT. Emscripten
OT. Emscripten
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 ... 1RcHL2M1Kk
Web del proyecto Emscripten:
https://github.com/kripken/emscripten/wiki
¡ qué curioso ! ¿ no crees, Antonio ?
Saludos
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 ... 1RcHL2M1Kk
Web del proyecto Emscripten:
https://github.com/kripken/emscripten/wiki
¡ qué curioso ! ¿ no crees, Antonio ?
Saludos
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: OT. Emscripten
Muy interesante, gracias por la noticia!
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: OT. Emscripten
Aqui se puede inspeccionar el código fuente que se genera en Javascript:
http://www.joshuagranick.com/examples/s ... impleGL.js
http://www.joshuagranick.com/examples/simplegl/
http://www.joshuagranick.com/examples/s ... impleGL.js
http://www.joshuagranick.com/examples/simplegl/
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: OT. Emscripten
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...
Y asi ni necesitamos usar LLVM ni este traductor ni nada más
a ver si tengo un ratito libre...
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: OT. Emscripten
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
1. He compilado el siguiente PRG con Harbour:
test.prg
Code: Select all
function Main()
? "Hello world"
return nil
3. he construido una "mini" maquina virtual usando javascript que lo procese
test.html
Code: Select all
<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>
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
- carlos vargas
- Posts: 1421
- Joined: Tue Oct 11, 2005 5:01 pm
- Location: Nicaragua
Re: OT. Emscripten
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.
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.
- Enrico Maria Giordano
- Posts: 7355
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Contact:
Re: OT. Emscripten
Antonio,
EMG
Using IE8 I see nothing.
EMG
Re: OT. Emscripten
Antonio,
En Internet Explorer 10 y Google Chrome Version "29.0.1547.76 m" funciona perfecto!
Saludos,
George
En Internet Explorer 10 y Google Chrome Version "29.0.1547.76 m" funciona perfecto!
Saludos,
George
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: OT. Emscripten
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...
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
Antonio, estoy dispuesto a ayudar en lo que pueda dentro de mis posibilidades (conocimientos).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...
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: OT. Emscripten
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
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
Ok, Antonio
Vere que puedo hacer.
Vere que puedo hacer.
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.