OT. Emscripten

OT. Emscripten

Postby hmpaquito » Fri Sep 20, 2013 6:56 pm

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
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: OT. Emscripten

Postby Antonio Linares » Fri Sep 20, 2013 8:00 pm

Muy interesante, gracias por la noticia! :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41302
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: OT. Emscripten

Postby Antonio Linares » Fri Sep 20, 2013 8:33 pm

Aqui se puede inspeccionar el código fuente que se genera en Javascript:

http://www.joshuagranick.com/examples/simplegl/SimpleGL.js

http://www.joshuagranick.com/examples/simplegl/
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41302
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: OT. Emscripten

Postby Antonio Linares » Fri Sep 20, 2013 8:40 pm

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... ;-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41302
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: OT. Emscripten

Postby Antonio Linares » Fri Sep 20, 2013 10:48 pm

No me he podido resistir a constuir este pequeño ejemplo :-)

1. He compilado el siguiente PRG con Harbour:
test.prg
Code: Select all  Expand view
function Main()

   ? "Hello world"

return nil


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 view
<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>
 
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41302
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: OT. Emscripten

Postby Antonio Linares » Fri Sep 20, 2013 10:50 pm

Lo podeis ejecutar desde aqui:

http://www.fivetechsoft.net/test/test.html
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41302
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: OT. Emscripten

Postby carlos vargas » Sat Sep 21, 2013 2:50 am

:-0 maravillo antonio.
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1683
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: OT. Emscripten

Postby hmpaquito » Sat Sep 21, 2013 9:23 am

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.
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: OT. Emscripten

Postby Enrico Maria Giordano » Sat Sep 21, 2013 9:36 am

Antonio,

Antonio Linares wrote:Lo podeis ejecutar desde aqui:

http://www.fivetechsoft.net/test/test.html


Using IE8 I see nothing. :-(

EMG
User avatar
Enrico Maria Giordano
 
Posts: 8310
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia

Re: OT. Emscripten

Postby George » Sat Sep 21, 2013 12:19 pm

Antonio,
En Internet Explorer 10 y Google Chrome Version "29.0.1547.76 m" funciona perfecto!

Saludos,

George
George
 
Posts: 724
Joined: Tue Oct 18, 2005 6:49 pm

Re: OT. Emscripten

Postby Antonio Linares » Sat Sep 21, 2013 7:37 pm

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...
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41302
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: OT. Emscripten

Postby cnavarro » Wed Sep 25, 2013 1:00 pm

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).
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6500
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: OT. Emscripten

Postby Antonio Linares » Wed Sep 25, 2013 7:14 pm

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 :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41302
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: OT. Emscripten

Postby cnavarro » Wed Sep 25, 2013 7:29 pm

Ok, Antonio
Vere que puedo hacer.
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6500
Joined: Wed Feb 15, 2012 8:25 pm
Location: España


Return to Off Topic / Otros temas

Who is online

Users browsing this forum: No registered users and 1 guest