OT. Emscripten

Post Reply
hmpaquito
Posts: 1200
Joined: Thu Oct 30, 2008 2:37 pm

OT. Emscripten

Post 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 ... 1RcHL2M1Kk

Web del proyecto Emscripten:
https://github.com/kripken/emscripten/wiki

¡ qué curioso ! ¿ no crees, Antonio ? ;-)
Saludos
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: OT. Emscripten

Post by Antonio Linares »

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

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

Re: OT. Emscripten

Post by Antonio Linares »

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

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

Re: OT. Emscripten

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

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

Re: OT. Emscripten

Post by Antonio Linares »

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

1. He compilado el siguiente PRG con Harbour:
test.prg

Code: Select all

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

<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: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: OT. Emscripten

Post by Antonio Linares »

Lo podeis ejecutar desde aqui:

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

Antonio Linares
www.fivetechsoft.com
User avatar
carlos vargas
Posts: 1421
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: OT. Emscripten

Post by carlos vargas »

:-0 maravillo antonio.
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
hmpaquito
Posts: 1200
Joined: Thu Oct 30, 2008 2:37 pm

Re: OT. Emscripten

Post 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.
George
Posts: 710
Joined: Tue Oct 18, 2005 6:49 pm

Re: OT. Emscripten

Post by George »

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

Saludos,

George
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: OT. Emscripten

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

Antonio Linares
www.fivetechsoft.com
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: OT. Emscripten

Post 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).
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.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: OT. Emscripten

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

Antonio Linares
www.fivetechsoft.com
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: OT. Emscripten

Post by cnavarro »

Ok, Antonio
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.
Post Reply