Ha salido una nueva versión del lenguaje de programación de sistemas Nim, que cumplió un año desde su lanzamiento este septiembre de la primera versión estable. En cuanto a la sintaxis, el lenguaje es similar a Python, y en cuanto a rendimiento, casi como C++. Según Preguntas Frecuentes el lenguaje toma prestado de (en orden de importancia): Modula 3, Delphi, Ada, C++, Python, Lisp, Oberon.
Funciona en todas partes gracias a la posibilidad de compilar a C/C++/Objective-C/JS. Soporta macros, OOP, generics, excepciones, cambio en caliente de código y mucho más. Licencia — MIT.
Los cambios más significativos:
-
Se ha agregado un nuevo recolector de basura ORC, que utiliza un algoritmo de ARC, pero maneja de manera especial las referencias cíclicas. Se activa con la opción —gc:orc. Sobre las diferencias entre ARC/ORC hay un excelente artículo.
Se ha incorporado un modo de definiciones de funciones estrictas, que activa una verificación adicional de la mutabilidad de los objetos. Se activa a través de la pragma {.experimental: "strictFuncs".} o mediante la clave —experimental:strictFuncs.
La palabra clave from ahora se puede utilizar como operador.
Se ha añadido la pragma .noalias. Se mapea a la palabra clave C restrict, para aumentar la eficiencia que puede proporcionar esta palabra.
Las advertencias específicas ahora se pueden convertir en errores mediante —warningAsError[X]:on|off.
Nuevo comando: nim r main.nim [args…], que compila y ejecuta main.nim, e incluye —usenimcache de modo que el resultado se guarda en $nimcache/main$exeExt, utilizando la misma lógica que nim c -r para evitar la recompilación cuando no se han modificado los archivos fuente. Ejemplo:
nim r compiler/nim.nim —help # compilado por primera vez
echo ‘import os; echo getCurrentCompilerExe()’ | nim r — # esto también funciona
nim r compiler/nim.nim —fullhelp # sin recompilación
nim r —nimcache:/tmp main # binario guardado en /tmp/main
Se ha añadido una nueva sugerencia —hint:msgOrigin, que mostrará dónde el compilador generó mensajes de error/advertencia. Esto ayuda cuando no está claro de dónde proviene el mensaje.
Se ha agregado la bandera —backend:js|c|cpp|objc (o -b:js, etc.) para cambiar el backend.
Se ha añadido la bandera —usenimcache para la salida de binarios en nimcache.
Se han eliminado las claves: —oldNewlines, —laxStrings, —oldast, —oldgensym
La utilidad nimsuggest ahora muestra no solo la declaración previa, sino también la ubicación de la implementación a solicitud de def.
Además, se han añadido numerosos cambios a la biblioteca estándar y se han corregido muchos errores.
Fuente: linux.org.ru
