El problema de las N damas, que es una generalización de clásico problema del ajedrez, de poner 8 reinas en un tablero sin que se ataquen mutuamente, se resuelve muchas veces recursivamente, lo que significa que se van poniendo las damas en el tablero.
Si de pronto una dama ya no se puede poner, se va un paso atrás, se cambia de posición la última dama puesta y se vuelve a intentar poner la siguiente dama. Esto es un proceso de recursión y backtrack y resuelve el problema para tableros de NxN y N damas.
¿Y si usamos Python?
Un programa que resuelva esto en Python, Go y C++ demuestra que Python es lento, pero hay que decir que Python incluye la verificación de errores y eso hace que sea más lento.
Pero si se usa Numba, un compilador de Python, aunque no destrona a C++, quedando Go en segundo sitio, por un 6% del tiempo y Numba Python en tercero, con apenas 12% más lento.
Los investigadores argumentan que Numba Python es suficientemente rápido para ser usado en el contexto de la investigación, por su velocidad para generar prototipos. Go es también atractivo, pero se argumenta que tiene tantas características que lo hace menos fácil de usar cuando se está experimentando con código.
Es interesante que Julia, que también está en el grupo de lenguajes «rápidos», tiene el potencial de ser una alternativa atractiva a Numba Python. Desafortunadamente, hay algunos obstáculos para su adopción: Por una parte es un lenguaje relativamente nuevo y muchas de sus características son aún experimentales. Por otra parte, el número de bibliotecas es limitado.
Python, por otra parte, tiene un sinfín de bibliotecas de desarrollo, incluso algunas para aprendizaje profundo, las cuales son básicas en la investigación de hoy.
Además, tiene características de diseño que lo diferencian de los lenguajes más populares, como arreglos de un sólo índice, entre otras. Como sea, parece nada fácil migrar de un lenguaje establecido como Python a lo nuevo que podría tener Julia.
Para uso científico, el equipo de pruebas hizo comparaciones sobre las implementaciones en paralelo y con Numba las cosas fueron más fáciles, incluso aunque el uso de Python estándar no pudiese manejarse de esta manera. Se usaron dos forma de paralelizar Python, Para y Pool, y se compararon contra el código original de Numba, Go y C++. Numba en este caso fue tan bueno como Go y C++, aunque este último sigue siendo ligeramente más rápido.
Python es quizás el mejor lenguaje para aprender a programar
La conclusión de reporte es: Usamos el problema conocido de las 8 reinas como una forma de probar que una vez compilando con Numba, Python puede ser tan competitivo como C++ y Go en términos de velocidad de ejecución para poder hacer prototipos rápidos.
Esto resultó cierto para programas paralelos y secuenciales. En todos los casos, se puede desarrollar en Python estándar para luego de identificar los cuellos de botella, usar Numba para quitarlos».