Sieve en PowerBASIC Console Compiler 6

Tras el anuncio de que Powerbasic es ahora gratuito, y después de los últimos artículos que publiqué relativos a Ejemplo con PB/Forms y a Ejemplo con PB/CC, he estado siguiendo activamente la situación de Powerbasic, para ver cómo evoluciona, esperemos que de manera feliz, y no a mucho tardar, tengamos un Powerbasic 11 con soporte Win64.

Lo cierto es que me topé en la página de testimonios de la compañía, con lo que han bautizado por Friends of PowerBASIC, donde en 2010, me hacía eco de Sieve en BASIC. Si recordáis, era una comparativa donde diferentes compiladores de BASIC, ejecutaban el mismo programa de la Criba de Eratóstenes para calcular números primos. En ella, Powerbasic demostraba su liderazgo en tiempo de ejecución, siendo la versión más rápida de toda la comparativa, que incluía a FreeBasic, Hotbasic, PureBASIC, QB64 y Visual Basic .NET. Ofrecía un rendimiento parejo al de la implementación de Sieve en Pascal, e incluso vencía a Free Pascal, sin llegar a quedar demasiado alejado de los resultado de Sieve en C.

En aquel año 2010, usaba Powerbasic Console Compiler 5, pues la versión 6, no aparecería hasta el año siguiente (2011). Ahora, he aprovechado para actualizar la comparativa, y esta vez, sí que he usado PB/CC 6.04, la última versión disponible hasta el momento, publicada en 2013.

He comentado varias veces, que una de las virtudes de Powerbasic, es su énfasis en la eficiencia y el rendimiento. Dos aspectos que tal vez no asocies al lenguaje BASIC, pero que efectivamente, no son excluyente, como ahora podréis ver. Tan simple como partir de exactamente el mismo código fuente de Sieve.bas que usé en 2010, y recompilarlo con PBCC 6 sin modificar nada en absoluto:

#Register All
Macro MAXITER = 50000&
 
FUNCTION PBMain
    Register i AS LONG, k AS LONG
    DIM found AS LONG, iter AS LONG
    DIM flags(MAXITER) AS LONG
    DIM start AS DOUBLE, finish AS DOUBLE
    DIM a AS STRING
 
    PRINT MAXITER "iterations"
    start = TIMER
    FOR iter = 1 TO MAXITER
        found = 0
        FOR i = 0 TO MAXITER
            flags(i) = 0
        NEXT
        FOR i = 2 TO MAXITER
            IF flags(i) = 0 THEN    ' found a prime
                Incr found
                FOR k = i+i TO MAXITER STEP i
                    flags(k) = 1
                NEXT
            END IF
        NEXT
    NEXT
    finish = TIMER
    PRINT found; "primes in"; INT((finish-start)*1000) ; "ms."
    INPUT A
END FUNCTION



No está nada mal, dentro del poco juego en cuanto a optimizaciones adicionales que da este Sieve, la última versión de Powerbasic, ha dado una mejora de algo más de un 5%, sin tocar nada del código fuente original.



Cuesta de creer, pero esta mejora de velocidad, no es a costa de aumentar el tamaño del código, más bien lo contrario, pues el tamaño, se ha reducido en casi un 11%.

CompiladorTamaño ejecutable (bytes)Tiempo de ejecución (ms)
PowerBASIC Console Compiler 5.015.87211.483
PowerBASIC Console Compiler 6.0414.33610.908

De manera que en el transcurso de tres años, desde 2008, cuando se presentó PBCC 5, hasta 2011, cuando se lanzó PBCC 6, Robert Zale logró que sus herramientas generasen no solamente un código más veloz, sino también más compacto. Nada que ver, por desgracia, con la evolución de la mayoría de herramientas actuales.

Si tienes curiosidad, he dejado el código fuente, y los binarios aquí (18 Kb. en formato ZIP).

9 comentarios en “Sieve en PowerBASIC Console Compiler 6”

  1. No está mal. Una prueba mas de lo que podría dar de sí esta herramienta, si los tiempos que corren no fueran en los que estamos. La «gente corriente» piensa: «¿y para qué? Yo prefiero mi Android». Pues estas herramientas y con esta filosofía son las que un día puede que lleven al hombre a Marte, o a la conquista del Espacio; por eso la USSS con su informática fueron los primeros (y únicos, hasta el momento, ni la NASA lo ha logrado) que pudieron hacer aterrizar una sonda en Venus, o realizar cálculos más precisos y a punto de ser los primeros en llegar a la Luna con un presupuesto irrisorio comparado con el que tenían los USA. Si la gente espera con Android y con navegadores patateros hechos en China con máquinas virtuales que petan por todos lados conquistar las galaxias, van listos. Pero nada, mientras haya menús animados, con transparencias y degradados, ellos tan contentos. Eso sí, para desplegarlos requieren un chip que a lo único que se dedica el 99% de su CPU es ha calcular mezclas de colores y hacer grafías de contornos y sombreado. De chiste.

  2. Así es BiaNamaran. Por ejemplo la Mars Pathfinder, ejecutaba VxWorks, un sistema operativo en tiempo real, pero sin alardes gráficos. Cuando lo que priman son los resultados, y recordemos que ese es el objetivo de la informática o computación, procesar lo más eficientemente posible unas entradas, para generar unas salidas lo más exactas y veloces posibles, debemos olvidarnos de chorradas: ni sombras, ni texturas, ni 3D.

  3. Muchísimas gracias Fernando. Hace un tiempo estuve buscando ese tipo de información en fuentes oficiales, y estaba tan disgregada, que apenas saqué nada en claro. Este artículo, me ha resultado interesantísimo. Ver que utilizan arquitecturas estándar, pero construidas de manera reforzada, con protecciones adicionales, y en muchos casos, con certificados MIL.

  4. Hay más de un comentario que es, al menos, igual de bueno que el artículo…

    No he podido encontrar el artículo que buscaba, en parte porque no recuerdo dónde lo leí, en el que explicaba cómo se desarrollaba el software de un satélite.

  5. Buenas. Soy Nuevo preguntando y estoy programando en Powerbasic 6.03, me hago mis propias aplicaciones personales y no soy un gran programador sofisticado. en realidad quisiera ver si me puedes ayudar sacandome de dudas en esto: cuando usaba Powerbasic en plataforma windows x 32 podia usar el juego de caracteres ANSI hasta 255, cuando me pase a windows x64 solo puedo usar hasta el chr$(125) por encima de esta valor Powerbasic 6.03 no me los reconoce, por lo que si tengo esos caracteres graficos las pantallas de entrada de datos pierden mucho, y no puedo usar los caracteres acentuados. gracias por toda tu ayuda.

  6. Es muy extraño Crispin Nunez. Llego años usando una arquitectura x64 y nunca me había ocurrido. He hecho una prueba rápida, compilada con PBC 6.04 y ejecutada sobre Windows 10 x64. Este es el código:

    Function PBMain
    Print Chr$(200)
    End Function

    Lo he ejecutado, y como esperaba, la salida de pantalla ha mostrado en la consola:
    È

Deja un comentario