# Constant Folding

# Objetivos

Construya un paquete npm y publíquelo en el GitHub Registry que además de exportar la función constantFolding provea un ejecutable cf que se llama así:

cf input.js output.js
1

el cual realiza la transformación de plegado de constantes sobre input.js dejando la salida en output.js.

Una parte de los conceptos y habilidades a adquirir con esta práctica se explican en la sección Creating and publishing a node.js module en GitHub y en NPM. Léala con detenimiento antes de hacer esta práctica.

# Ámbitos

Para saber sobre ámbitos, vea la sección Scopes and Registries.

# Pruebas

Deberá añadir pruebas usando Mocha y Chai o Jest. Repase las secciones Testing with Mocha and Chai y Jest.

# Documentación

Documente el módulo incorporando un README.md y la documentación de la función exportada usando JsDoc. Repase la sección Documenting the JavaScript Sources

# Constant Folding of MemberExpression literals

Añada ahora plegado de constantes para métodos (con argumentos plegables) y propiedades de los arrays. Esto es, expresiones como:

["a", "b", "c"].concat(["d", "e"], "f", "g", ["h"]);
["a", "b", "c"].join();
["a", "b", "c"].join('@');
[1, 2, 3].length;
[1, 2, 3][2-1];
[1, 2, 3].shift();
[1, 2, 3].slice(0, 1+1);
[a, b, c].pop(); // substitute the MemberExpression node by the last AST in the "elements" array of the object Array Expression
[a, b, c].reverse(); // reverse the ASTs
1
2
3
4
5
6
7
8
9

Serán evaluadas en tiempo de compilación produciendo:

["a", "b", "c", "d", "e", "f", "g", "h"];
"a,b,c";
"a@b@c";
3;
2;
2;
[1, 2];
c;
[c, b, a];
1
2
3
4
5
6
7
8
9

Publique ahora esta mejora en la funcionalidad del módulo.

¿Como debe en cambiar el nº de versión?

Repase la sección Semantic Versioning

Other possible optional extensions are:

  • Constant folding for methods and properties of Literal Strings:

    "abc"[0];
    "abc".charAt();
    "abc".charAt(1);
    "abc".length;
    "a,b,c".split(",");
    
    1
    2
    3
    4
    5
  • Constant folding for methods and properties of Objects, Numbers, etc.

    {a:4, b:5}.b
    (100 + 23).toString();
    
    1
    2

# References

# Constant Folding

# Packages

# Testing and Documentation

# Semantic versioning and npm

Grading Rubric#

Comments#

Last Updated: 3 months ago