Lanzamiento del lenguaje de programación Nim 1.4.0

Se ha lanzado una nueva versión del lenguaje de programación del sistema Nim, que en septiembre celebró su primer aniversario. primera versión estable. El lenguaje es similar en sintaxis a Python y casi como C++ en rendimiento. De acuerdo a Preguntas Frecuentes El lenguaje toma prestado en gran medida (en orden de contribución): Modula 3, Delphi, Ada, C++, Python, Lisp, Oberon.


Funciona en todas partes gracias a la capacidad de compilar en C/C++/Objective-C/JS. Es compatible macros, OOP, genéricos, y deducciones, intercambio de código activo y mucho más. Licencia: MIT.

Los cambios más significativos:

  • Hay un nuevo recolector de basura ORC que utiliza el algoritmo de ARC, pero al mismo tiempo maneja las referencias circulares de una manera especial. Habilitado por la opción -gc:orc. Acerca de las diferencias ARC/ORC hay un gran articulo.

  • Se ha agregado un modo para definiciones de funciones estrictas, que permite una verificación adicional de la mutabilidad de los objetos. Se activa mediante la pragma {.experimental: "strictFuncs".} o mediante la clave --experimental:strictFuncs.

  • La palabra clave from ahora se puede utilizar como operador.

  • Se agregó .noalias pragma. Se asigna a la palabra clave restrictiva de C para aumentar la eficiencia que la palabra clave puede proporcionar.

  • 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 para que el resultado se almacene en $nimcache/main$exeExt, usando la misma lógica que nim c - r para deshacerse de la recompilación cuando las fuentes no han cambiado. Ejemplo:

nim r compilador/nim.nim --ayuda # compilado por primera vez
echo 'importar sistema operativo; echo getCurrentCompilerExe()' | nim r - # esto también funciona
compilador nim r/nim.nim --fullhelp # sin recompilación
nim r —nimcache:/tmp main # binario guardado en /tmp/main

  • Se agregó una nueva sugerencia -hint:msgOrigin, que mostrará dónde generó el compilador mensajes de error/advertencia. Esto ayuda cuando no es obvio de dónde viene el mensaje.

  • Se agregó la bandera —backend:js|c|cpp|objc (o -b:js, etc.) para cambiar el backend.

  • Se agregó el indicador --usenimcache para generar archivos binarios en nimcache.

  • Claves eliminadas: --oldNewlines, --laxStrings, --oldast, --oldgensym

  • La utilidad nimsuggest ahora muestra no solo la declaración previa, sino también la ubicación de implementación para una solicitud def.

Además, se han agregado muchos cambios a la biblioteca estándar y se han corregido muchos errores.

Fuente: linux.org.ru