Nueva versión del lenguaje de programación Nim 0.20

tuvo lugar lanzamiento del lenguaje de programación del sistema nim 0.20.0. El lenguaje utiliza escritura estática y fue creado teniendo en mente Pascal, C++, Python y Lisp. El código fuente de Nim se compila en una representación C, C++ o JavaScript. Posteriormente, el código C/C++ resultante se compila en un archivo ejecutable utilizando cualquier compilador disponible (clang, gcc, icc, Visual C++), lo que permite alcanzar un rendimiento cercano al de C, si no se tienen en cuenta los costes de ejecución. el recolector de basura. Al igual que Python, Nim usa sangría como delimitador de bloques. Se admiten herramientas de metaprogramación y capacidades para crear lenguajes específicos de dominio (DSL). Código de proyecto suministrado bajo la licencia del MIT.

La versión Nim 0.20 puede considerarse candidata para la primera versión estable 1.0, incorporando varios cambios que rompen la interoperabilidad necesarios para formar la primera rama estable que confirmará el estado del lenguaje. La versión 1.0 se promociona como una versión estable y con soporte a largo plazo que garantizará el mantenimiento de la compatibilidad con versiones anteriores en la parte estabilizada del lenguaje. Por otra parte, el compilador también tendrá disponible un modo experimental, en el que se desarrollarán nuevas características que puedan violar la compatibilidad con versiones anteriores.

Entre los cambios propuestos en Nim 0.20 se encuentran:

  • "Not" ahora es siempre un operador unario, es decir expresiones como "afirmar (no a)" ahora no están permitidas y solo se permite "afirmar no a";
  • Se habilitaron controles estrictos para la conversión de números enteros y reales en la etapa de compilación, es decir. la expresión "const b = uint16(-1)" ahora generará un error, ya que -1 no se puede convertir a un tipo entero sin signo;
  • Se proporciona el descompresión de tuplas para constantes y variables de bucle.
    Por ejemplo, ahora puedes usar asignaciones como 'const (d, e) = (7, "ocho")" y "for (x, y) in f";

  • Se proporcionó inicialización predeterminada de hashes y tablas. Por ejemplo, después de declarar “var s: HashSet[int]” puede ejecutar inmediatamente “s.incl(5)”, lo que anteriormente generaba un error;
  • Información de error mejorada para problemas relacionados con el operador "case" y el índice de matriz fuera de límites;
  • Está prohibido cambiar la longitud de la tabla durante la iteración.

Fuente: opennet.ru

Añadir un comentario