domingo, 27 de abril de 2014

Macros em JS com Sweet.js - Hygienic macros - Parte I

Sweet.js? Macro? É de cumê?

Não, meu sinhô, é bem melhor que isso. :D
Macros são quando você pode mudar ligeiramente , ou não, o processamento sintático de uma linguagem para facilitar a sua vida. Lembra do velho swap entre variáveis? Fiz um macro pra ele, se liga:

// wow.js
macro swap {
 rule { $x and $y } => {
  var tmp = $x;
  $x = $y;
  $y = tmp 
 }
}

var a = "a",
    b = "b";

console.log(a, b); // => a b
swap a and b;
console.log(a, b); // => b a

Interessado? Agora pra continuar instale o Sweet.js via npm

$ npm install -g sweet.js

Agora você pode compilar os JS com macro assim:

$ sjs wow.js -o output.js
Se você compilar o wow.js vai ver ele assim:

var a$381 = 'a', b$382 = 'b';
console.log(a$381, b$382);
var tmp$384 = a$381;
a$381 = b$382;
b$382 = tmp$384;
console.log(a$381, b$382);

Gaaabrieel-san, mas o que diabos é isso que ele fez com as variáveis? Coisa mais feia!
Calma, isso se chama "higienização" e serve pra prevenir conflitos entre variáveis, por exemplo:

var tmp = "tmp", b = "b";
swap tmp and b;

// ...
// output.js
// Sem higienização

var tmp = "tmp", b = "b";
var tmp = tmp;
tmp = b;
b = tmp; 

Viu? So many conflicts, wow!
Isso é só a ponta do Iceberg :p
calm down and wait for more in soon

Nenhum comentário:

Postar um comentário

~le comentário