Proximamente GCC 6.0

Publicado el 06 marzo 2016 por Emoto

Los compiladores son herramientas de desarrollo que permiten a los programadores escribir sus aplicaciones en un lenguaje de alto nivel, para después usar precisamente un programa, llamado compilador, que traduzca a código de máquina las instrucciones. Muchas veces la traducción del código fuente (del programador), al código objeto (el código de máquina), no es una labor trivial y se trabaja mucho en este campo, creando nuevas posibilidades que hagan incluso al compilador una herramienta más inteligente. De hecho, GCC en su última versión ya daba advertencias sobre problemas potenciales en el código y podríamos decir que el programa se estaba moviendo a ser un analizador de código, pero esto es una parte apenas de GCC.

En GCC por ejemplo, hay una advertencia que ocurre cuando se agrupan incorrectamente los GOTOs y los IFs. Y sí, es cierto que el GOTO es prácticamente una instrucción no usada por los programadores, pero aún así, si se agrupan mal, los resultados pueden ser terribles para la ejecución del código. GCC 6 checa la sintaxis, por ejemplo y la compara incluso con la manera de indentar. El compilador ya puede advertir que la indentación es equivocada. Curiosamente más de uno se pregunta si esto no debiese ser parte de lo que debería hacer el entorno de programación, el IDE, y no el compilador.

También en GCC 6 se marcarán los condicionales booleanos tontos, como por ejemplo, comparar un objeto consigo mismo, el duplicar subclases, entre otras situaciones. Por otra parte, no marcará ahora ninguna advertencia si al recorrer un valor booleano queda como un valor negativo. Y aunque podría argumentarse que C/C++ no deberían ser tan poco precisos en una operación de esta naturaleza, la cuestión es que puede ocurrir. Toda la noción de un comportamiento indefinido en la optimización del compilador es algo que en términos reales no tiene sentido. Si el código es legal, debería tener una interpretación semántica única. Otra mejora es la detección y marcaje de una dereferenciación de un apuntador nulo. Por alguna razón, solamente advertir del problema no parece ser suficiente.

Los reportes de los errores ha mejorado en GCC 6 y se indica el rango en donde un error podría estar, así como indicar dónde en una cadena de caracteres hay un error. También como novedad se tienen las pistas (hints) “fix-it”, las cuales intentan apuntar a secciones del código que deberían ser cambiadas. Finalmente, una especie de post-compilación inteligente, intenta marcar campos de nombres mal escritos y sugerir alternativas.

Entre la lista de nuevas características, se tiene un merjor soporte a OpenMP, para la programación en paralelo. Además de esto, se puede ahora trabajar con arquitecturas que segmenten la memoria. La línea de procesadores x86 soporta segmentación, pero los entornos modernos de programación -desde el 386- usan paginación y espacio de direcciones virtualizado. Incluso así, los sistemas operativos tienen que manipular los registros de los segmentos y hasta ahora, había la necesidad de usar el ensamblador para estar tareas. Ahora se pueden declarar las variables relativas a un segmento particular.

Finalmente, C++ ahora se define por omisión como C++ 14, y hay soporte experimental para las características planteadas en C++ 17. Hay que decir que hay muchas más mejoras y optimizaciones. Véase en las referencias el enlace a toda la documentación al respecto.