FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index Off Topic / Otros temas OT. Emscripten
Posts: 1515
Joined: Thu Oct 30, 2008 02:37 PM
OT. Emscripten
Posted: Fri Sep 20, 2013 06: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

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: OT. Emscripten
Posted: Fri Sep 20, 2013 08:00 PM

Muy interesante, gracias por la noticia! :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: OT. Emscripten
Posted: Fri Sep 20, 2013 08: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
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: OT. Emscripten
Posted: Fri Sep 20, 2013 08: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
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: OT. Emscripten
Posted: 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 (fw): Select all Collapse
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 (fw): Select all Collapse
<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
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: OT. Emscripten
Posted: 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
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: OT. Emscripten
Posted: Sat Sep 21, 2013 02:50 AM

:-0 maravillo antonio.

Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 1515
Joined: Thu Oct 30, 2008 02:37 PM
Re: OT. Emscripten
Posted: Sat Sep 21, 2013 09: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.

Posts: 9020
Joined: Thu Oct 06, 2005 08:17 PM
Re: OT. Emscripten
Posted: Sat Sep 21, 2013 09:36 AM
Antonio,

Antonio Linares wrote:Lo podeis ejecutar desde aqui:

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


Using IE8 I see nothing. :-)

EMG
Posts: 729
Joined: Tue Oct 18, 2005 06:49 PM
Re: OT. Emscripten
Posted: 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

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: OT. Emscripten
Posted: Sat Sep 21, 2013 07: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
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: OT. Emscripten
Posted: Wed Sep 25, 2013 01: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
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: OT. Emscripten
Posted: Wed Sep 25, 2013 07: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
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: OT. Emscripten
Posted: Wed Sep 25, 2013 07: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

Continue the discussion