Nimrod es un código abierto, de tipos estáticos lenguaje libre,, imperativo de programación diseñado para apoyar procesal, orientado a objetos, estilos de programación genéricas y funcionales, sin dejar de ser eficaz y sencilla.
Nimrod es capaz de árbol de sintaxis abstracta (AST) como parte de una especificación, lo que permite un sistema macro de gran alcance que se puede utilizar para crear lenguajes específicos de dominio. A rasgos heredados de Lisp.
El software cuenta con la generación de código nativo, la recolección de basura, iteradores cero aéreas, operadores-definibles por el usuario, tipos de datos de alto nivel, compilar evaluación de tiempos, compability adelante, GTK2, API de Windows, encuadernaciones API POSIX, un sistema analizador enchufable, un generador de documentación, y una utilidad de conversión de Pascal a Nimrod.
Nimrod es portátil, lo que significa que se puede ejecutar en Linux, BSD, Mac OS & nbsp; X & nbsp; y sistemas operativos de Windows
¿Qué hay de nuevo en esta versión:.
- Corrección de errores:
- El viejo GC nunca recogió ciclos correctamente. Fijo pero puede causar regresiones de rendimiento. Sin embargo, puede desactivar el colector ciclo con GC_disableMarkAndSweep y ejecutarlo de manera explícita en el momento adecuado o no en absoluto. También hay un nuevo GC puede activar con --gc:. MarkAndSweep que no tiene este problema, pero es más lento en general y no tiene garantías en tiempo real
- Reparto para los tipos de punto flotante ahora hace el bitcast como se especifica en el manual. Esto rompe el código que utiliza erróneamente de conversión para convertir distintos valores de coma flotante.
- rendimiento del módulo SCGI se ha mejorado mucho, que dejará de bloquear en muchas solicitudes simultáneas.
- En total fijado más de 70 temas de GitHub y se fusionó con más de 60 solicitudes de extracción.
- Las adiciones Biblioteca:
- Hay una nueva marca y barrido experimental GC que puede ser más rápido (o más lento) que el GC defecto. Habilitar con --gc:. MarkAndSweep
- Agregado system.onRaise para apoyar un sistema de condiciones.
- system.locals Añadido que proporciona acceso a los locales de un proc.
- macros.quote Añadido para AST cuasi-cita.
- Agregado system.unsafeNew para apoyar objetos de longitud variable hacky.
- system.fields y apoyo system.fieldPairs objeto también; solían sólo tuplas de apoyo.
- Agregado system.CurrentSourcePath devolver la ruta completa del sistema de archivos del archivo fuente actual.
- El módulo de macros contiene ahora un montón de ayudantes útiles para la construcción de árboles de sintaxis abstracta.
- Los cambios afectan a la compatibilidad hacia atrás:
- compartida es una palabra clave ahora.
- Desaprobado sockets.recvLine y asyncio.recvLine, añadió readLine lugar.
- La sangría forma en que se maneja en el analizador cambiado significativamente. Sin embargo, esto afecta a muy poca (si existe) código de mundo real.
- La unificación de expresión / declaración ha sido implementado. De nuevo, esto sólo afecta a casos extremos y no hay código de mundo real conocido.
- Se ha cambiado el interfaz asíncrona del módulo scgi.
- WideStrings ahora se recogen basura al igual que otros tipos de cadena.
- Compilador Adiciones:
- El comando doc2 no genera salida para todo el proyecto más. Utilice el nuevo interruptor --project para permitir este comportamiento.
- El compilador ahora puede advertir acerca de las variables locales sombreados. Sin embargo, esto tiene que ser activada explícitamente a través --warning [ShadowIdent]:. En
- El compilador ahora es compatible con casi todos los pragma en un pragma empuje.
- conversores genéricos se han implementado.
- Se ha añadido una pragma altamente experimental noforward permite un modo de compilación especial que elimina en gran medida la necesidad de que las declaraciones prospectivas.
- Las adiciones lengua:
- expresiones case ahora son compatibles.
- Cuadro ahora se asemejan más a la sintaxis de la sentencia case.
- Nimrod ahora puede inferir el tipo de retorno de un proc de su cuerpo.
- Se ha añadido una declaración mixin afectar símbolo normas vinculantes en los genéricos.
- seguimiento de excepción se ha agregado y el comando doc2 anota posibles excepciones para usted.
- efectos definidos por el usuario (& quot; etiquetas & quot;). Se ha añadido el seguimiento y el comando doc2 anota posibles etiquetas para usted
- Tipos Se puede añadir a lo nuevo no nula declarar explícitamente que nil sintaxis no está permitido. Sin embargo actualmente el compilador realiza ninguna comprobación estática avanzada para esto; por ahora es sólo para fines de documentación.
- Una declaración de exportación ha sido añadido a la lengua: Puede ser utilizado para el desvío de símbolo tan módulos cliente no tiene que importar las dependencias de un módulo explícitamente .
- La sobrecarga basado en AST se ha implementado.
- Los genéricos son ahora soportados por métodos múltiples.
- Objetos se puede inicializar a través de una expresión de objeto constructor.
- Hay una nueva construcción sintáctica (;) expresiones y declaraciones unificadores .
- Ahora puede utilizar desde el módulo cero de importación si desea importar el módulo, pero quiere forzar un acceso completo a todos los símbolos en el módulo.
Constructores
¿Cuál es nuevo en la versión 0.8.14:.
- Se ha corregido un grave corrupción de memoria en relación con el paso de mensajes
- Se ha corregido un error grave en relación con las diferentes instancias de un proc genérico.
- Se ha corregido un error de reciente introducción en la que se planteó una excepción EIO equivocado para el final del archivo para archivos de texto que no terminan con un salto de línea.
- c2nim Bugfix, c2pas: la opción --out nunca ha funcionado correctamente .
- Solución de error:. Reenvío de procs genéricos nunca trabajó
- Algunos más correcciones de errores para macros y en tiempo de compilación evaluación.
- El GC ahora tiene en cuenta las indicaciones del interior de la pila que pueden ser introducidas por los optimizadores C agresivos.
- asignador nativo de Nimrod / GC ahora funciona en PowerPC.
- Muchas otras correcciones de errores:. Hay demasiados para enumerarlos todos
¿Qué hay de nuevo en la versión 0.8.6:
- Corrección de errores:
- Las pragmas insinúan [X]: off y advirtiendo [X]: off ahora funciona .
- Método sintaxis de llamada para iteradores funciona de nuevo (para x en lines.split ()).
- Se ha corregido un error tipográfico en RemoveDir para POSIX que conducen a una recursividad infinita.
- El compilador comprueba ahora que los nombres de archivo del módulo son identificadores válidos.
- patrones vacíos para el pragma dynlib ahora son posibles.
- os.parseCmdLine devuelto resultados erróneos por espacios en blanco.
- Uso tupla inconsecuente (utilizando la misma tupla con y sin campos con nombre) no se cuelga el generador de códigos más.
- Se proporciona un mejor mensaje de error cuando falla la carga de un proc dentro de un lib dinámico.
- Las adiciones:
- system.contains Añadido para antenas abiertas.
- El módulo PEG ahora es compatible con el operador de bucle de búsqueda @.
- Gramática / parser: SAD | IND se permite antes de cualquier tipo de corchete de cierre. Esto permite una mayor flexibilidad formateo de código fuente.
- El compilador ahora usa una mesa de enlace para la búsqueda de símbolos dentro de un contexto de enlace. (Ver # plantillas Manual.html para más detalles).
- descarte & quot; & quot; & quot; mi comentario largo & quot; & quot; & quot; ahora se ha optimizado de distancia.
- Nuevos --floatChecks: on | off y pragmas para una mejor depuración de operaciones de punto flotante. (Ver manual.html # pre-definida de punto los tipos flotantes para más detalles).
- El manual ha sido mejorada. (Muchas gracias a Philippe Lhoste!)
- Los cambios afectan a la compatibilidad hacia atrás:
- El compilador no omitir el paso que une más aún si hay un archivo ha cambiado.
- os.splitFile (& quot; .xyz & quot;) ahora devuelve (& quot; & quot ;, & quot; & quot;; .xyz & quot ;, & quot) en lugar de (& quot; & quot ;, & quot; & quot ;, & quot; .xyz & quot; ). Los nombres de archivo que comienzan con un punto se manejan de manera diferente.
- strutils.split (s: cadena, seps: set [Char]) nunca cede la cadena vacía más. Este comportamiento es probablemente más adecuado para dividir el espacio en blanco.
- El compilador ahora se detiene después de que el modificador de línea de comando --version.
- Soporte eliminado herencia enumeración en el analizador; herencia enumeración nunca se ha documentado de todos modos.
- El campo msg de system.E_base tiene ahora la cadena de tipo, en lugar de cstring. Esto mejora la seguridad de la memoria.
¿Qué hay de nuevo en la versión 0.8.2:
- Corrección de errores:
- Pasando --hint [X]: off o --warning [X]:. Off como argumentos de línea de comandos para el compilador ahora funciona
- Los parámetros por defecto para las plantillas funcionan ahora.
- problema de seguridad fija en system.copy.
- caso de cuerda sin una parte else genera código incorrecto.
- Varias correcciones para el módulo osproc; ahora funciona en Windows.
- Las adiciones:
- múltiples métodos implementados.
- El compilador detecta ahora el número de procesadores disponibles y ejecuta el compilador de C al mismo tiempo. Esto puede ser ajustado por el --parallel_build:. Modificador de línea de comandos númeroDeProcesadores
- patrón basado en PEG a juego a través del módulo clavijas.
- Agregado system.definedInScope.
- Agregado system.accumulateResult.
- Agregado os.walkDirRec.
- osproc.countProcessors Añadido.
- Agregado osproc.execProcesses.
- El sistema de configuración ahora soporta $ cc.options.linker.
- fusionado expr y TYPEDESC en la gramática / parser:. Esto permitirá procs anónimos sin lambda
- Muchos scripts no tienen necesidad de un GC: El nuevo --gc: ninguna opción de línea de comandos se puede utilizar para excluir la GC del ejecutable .
- Los cambios que afectan al revés compability:
- Tomar la dirección de un discriminante objeto es ahora válido.
- El paso de un proc a un var proc es sólo permitía procs marcados con procvar o una convención de llamada! = Nimcall. Por ahora esto sólo se hace una advertencia, pero esto se convertirá en un error pronto.
- Sistema. & And system.add ahora recibir OpenArray lugar de los parámetros seq.
- Eliminada strutils.findSubStr y strutils.findChars. Se ha visto reducido por 3 versiones.
- El módulo Unicode utiliza un tipo distinto para TRune.
- Desaprobado strutils.toString: utilizar $ en vez .
- Desaprobado os.splitPath:. Os.splitPath uso que devuelve una tupla en lugar
- Desaprobado os.extractDir:. Utilizar SplitFile (ruta) .dir lugar
- Desaprobado os.splitFilename: utilizar SplitFile lugar .
- Desaprobado os.extractFileExt: utilizar SplitFile lugar .
- Desaprobado os.extractFileTrunk: utilizar SplitFile lugar .
- Desaprobado os.appendFileExt: utilizar os.addFileExt lugar .
- Desaprobado os.executeShellCommand: utilizar os.execShellCmd lugar .
- Desaprobado os.iterOverEnvironment:. Uso os.envPairs lugar
- parseopt.init Obsoleto: utilice parseopt.initOptParser lugar .
- Desaprobado parseopt.getRestOfCommandLine: utilizar parseopt.cmdLineRest lugar .
- Desaprobado os.pcDirectory: utilizar os.pcDir lugar .
- Desaprobado os.pcLinkToDirectory: utilizar os.pcLinkToDir lugar .
- Desaprobado osproc.executeProcess: utilizar osproc.execProcess lugar .
- Desaprobado osproc.executeCommand: utilizar osproc.execCmd lugar .
¿Qué hay de nuevo en la versión 0.8.0:
- Corrección de errores:
- fija un pequeño error que hacía que el compilador no informa símbolos sobrecargados no utilizados
- fija una relativa símbolo pequeño fallo sobrecarga
- fija un error: es & quot; & quot ;, ambigua no & quot; ambigious & quot; ; -)
- el compilador detecta ahora recursiva incluye archivos
- system.card debería funcionar de nuevo
- artículos para el conjunto [Char] y la matriz [char, T] deberían trabajar ahora
- Las adiciones:
- tipos genéricos ejecutados y dos fases búsqueda de símbolos en las rutinas genéricas
- parámetros de plantilla pueden ser ahora los tipos reales
- implementó literales de cadena prima generalizadas: ident & quot; abc & quot; es un acceso directo para ident (r & quot; abc & quot;)
- en la sobrecarga iteradores resolución están separados de procs; iteradores ahora pueden tener el mismo nombre + firma como procs
- búsqueda de símbolos en las plantillas puede ser afectada por la nueva palabra clave bind
- el compilador acepta ahora un interruptor --no_main para una mejor interoperabilidad enlace con otros lenguajes compilados
- tupla implementado desembalaje en secciones var
- el generador de código emite por defecto: __assume (0); para Visual C ++ (para la optimización)
- el compilador comprueba ahora si un proc tiene efectos secundarios; procs que se declaran no tener efectos secundarios son rechazados si el compilador no puede verificar esto
- los strutils operador formato.% Ahora soporta $ # de conteo automático argumento
- strutils.join implementado
- Los cambios que afectan al revés compability:
- dos símbolo fase de consulta se lleva a cabo en las rutinas genéricas
- bind es ahora una palabra reservada; excepción es ninguna palabra reservada ya
- tipos abstractos han sido renombrados a tipos distintos; ahora por lo tanto distinta es una palabra reservada; abstracto hay palabra reservada ya
- system.openFile desuso: uso system.open lugar
- system.closeFile desuso: uso system.close lugar
- strutils.replaceStr desuso: uso strutils.replace lugar
- strutils.deleteStr desuso: uso strutils.delete lugar
- strutils.splitSeq desuso: uso strutils.split lugar
- strutils.splitLinesSeq desuso: uso strutils.splitLines lugar
- strutils.parseFloat no acepta un parámetro adicional de arranque más
- Documentación:
- el manual ha sido mejorada
¿Qué hay de nuevo en la versión 0.7.6:
- Corrección de errores:
- la instalación en Windows Vista puede ahora trabajar fuera de la caja; por favor intente!
- corregido un error que mantuvo a los & quot; módulos recursivas & quot; ejemplo de trabajo
- mezclar parámetros con nombre y sin nombre en una llamada a procedimiento ahora trabaja
- números octales con el prefijo 0c ahora son compatibles correctamente
- enumeraciones ahora pueden comenzar con valores negativos
- parseInt, ParseBiggestInt ahora una excepción si la cadena no termina después del número analizado
- el compilador ahora maneja declaraciones de alto nivel correctamente
- directorio nimcache generada nunca termina en una barra
- CreateDir ahora trabaja para los directorios globales bajo UNIX (& quot; / somepath / aquí & quot;)
- el compilador ahora ejecuta el ejecutable con un líder en & quot; ./& quot; bajo UNIX
- el compilador ahora admite matrices constantes de punteros de procedimiento
- elif en sentencias case ahora trabaja
- iteradores utilizando un parámetro de vector abierto ahora trabajan
- corregido un error donde en algunos contextos $ MyEnum no funcionaba
¿Cuál es nuevo en la versión 0.7.4:
- la instalación en Windows debería funcionar ahora si el directorio contiene espacios
- el generador de documentación ahora sólo presta comentarios de documentación
- `` `` está permitido para los operadores como dice el manual
- en casos raros, la comprobación de índices ha sido optimizado de distancia, a pesar de que hubiera sido necesario
- varias correcciones de errores para los tipos de tupla
- añade un `` módulo unicode`` para UTF-8 manipulación
- añadió Hostos y hostCPU magias a la `` módulo system``
- system.echo ahora acepta múltiples argumentos
- optimización añadido: en algunos casos inlining de iteradores ahora produce sustancialmente mejor código
- añadió todo el programa de eliminación de código muerto
- la magia `` `operador ahora trabaja para enumeraciones
- en `` secciones const`` avanzó compilar tiempo de evaluación se realiza
- rebautizado `` in_Operator`` a `` contains``: `` in`` es ahora una plantilla que se traduce en `` contains``
- cambiado `` strutils.quoteIfSpaceExists`` a `` strutils.quoteIfContainsWhite``
- el analizador es ahora mucho más exigente con examinar por comas, etc. Si esto afecta su código demasiado, intenta ejecutar el código a través de la impresora bonita.
- la `` API macros`` ya no es parte de la `` módulo system``, para utilizar esta API ahora tiene que importar el `` macros`` módulo
- añade un tutorial
¿Cuál es nuevo en la versión 0.7.2:
- Esta es una versión de corrección de errores. Esta solución es más importante que Nimrod ahora vuelve a funcionar en procesadores (x86_64) AMD64.
- No hay nuevas características se han aplicado.
¿Cuál es nuevo en la versión 0.7.0:
- varias correcciones de errores, demasiados para enumerarlos aquí
- la instalación para los sistemas basados en UNIX no depende de Python más tiempo
- la `` script koch.py`` ahora trabaja con versiones anteriores de Python (incluyendo 1.5.2)
- operaciones con enteros cambiado y las normas de conversiones
- agregó `` GC_ref`` y `` procs GC_unref``
- secuencias ahora deben ser construidas con el operador `` `` @. Esto lleva a menos ambigüedades.
- el compilador ahora utiliza menos memoria y es mucho más rápido
- la GC es ahora mucho más rápido
- nuevos enlaces: zlib, SDL, Xlib, OpenGL, ODBC, Lua
- el código C generado es mucho más rápido para optimizar con GCC
- nuevas bibliotecas: corrientes, zipfiles
- el compilador Nimrod ha sido portado a FreeBSD: deberá trabajar demasiado de otros BSD
Requisitos :
- Python
Comentarios que no se encuentran