QB64 es un entorno completo de programación que resulta ser un clon de aquel QBasic/QuickBasic de los años de MS-DOS.
Si sabes de lo que estoy escribiendo, es que viviste aquella época de los 90, como yo. Si no, es que te lo has perdido todo.
También en aquellos años (en los 90), existía QBasic, que era muy parecido a QuickBasic, pero sin la capacidad de compilar su código.
Por cierto, en Options >> Display, encontraremos la oportunidad de cambiar la visualización de 80x25 a 120x50, mucho más aconsejable.
Si, sí. QB64 genera código ejecutable de 64 bits. Pero además, es portable a nivel de código fuente entre Mac, Windows y Linux.
O dicho de otra forma: además de Free Pascal (para Pascal "retro"), puedes programar en BASIC "retro" y generar código sin que exista forma alguna de distinguirlo del código generado por gcc para C, por poner un ejemplo.
Así, en modo texto (aunque existe un IDE gráfico llamado Phoenix), podemos teclear nuestros programas, que el IDE los compile, y ejecutarlos con solo pulsar F5.
Como ejemplo, programé este cálculo de Fibonacci:
' Secuencia de Fibonacci
For n = 1 To 25
Print fibo(n);
Next
Function fibo (x)
Dim n1 As Long
Dim n2 As Long
Dim aux As Long
n1 = 1
n2 = 1
For n = 2 To x
aux = n2
n2 = n1 + n2
n1 = aux
Next
fibo = n2
End Function
Con la salida, previsible, siguiente.
1 1 2 3 5 8 13 21 34 55 89 144 233 377...
Para poder llegar a los resultados más altos, es necesario cambiar Integer, el tipo que usaríamos normalmente, por Long, un entero de 32 bits.
Pero... ¿qué incorpora este ejecutable?
$ ldd fibo
linux-vdso.so.1 (0x00007f7cc39f9000)
libGL.so.1 => /usr/lib/libGL.so.1 (0x00007f7cc394b000)
libGLU.so.1 => /usr/lib/libGLU.so.1 (0x00007f7cc38f4000)
libX11.so.6 => /usr/lib/libX11.so.6 (0x00007f7cc37b2000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f7cc3400000)
libm.so.6 => /usr/lib/libm.so.6 (0x00007f7cc36a4000)
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f7cc33d3000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f7cc3000000)
libGLdispatch.so.0 => /usr/lib/libGLdispatch.so.0 (0x00007f7cc335a000)
libGLX.so.0 => /usr/lib/libGLX.so.0 (0x00007f7cc3329000)
libOpenGL.so.0 => /usr/lib/libOpenGL.so.0 (0x00007f7cc3305000)
libxcb.so.1 => /usr/lib/libxcb.so.1 (0x00007f7cc32da000)
/lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00007f7cc39fb000)
libXau.so.6 => /usr/lib/libXau.so.6 (0x00007f7cc369b000)
libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00007f7cc32d2000)
Podemos ver cómo, además de incorporar las bibliotecas básicas del sistema operativo (esto cambiará en Windows o Mac), está claro que genera código C++, pues incluye la librería estándar de este lenguaje de programación. También podemos ver que proporciona capacidades gráficas, pues OpenGL está presente.
¡Probemos! Sí que tenemos que hacer algo "raro" con respecto a GW-BASIC: crear una "pantalla" del ancho y alto que deseamos:
screen _newImage(ancho, alto, profundidad_de_color)
Podemos dibujar una línea con line:
line (x1, y1) - (x2, y2)
¿Podemos dibujar un triángulo? Al margen de que haya otras maneras, si dibujamos "todas" las líneas desde un vértice superior hasta, primero, el vértice inferior izquierdo, y después al vértice inferior derecho, y todas las líneas intermedias, ya lo tendremos.
La esquina superior izquierda es el origen de coordenadas, es decir, (0, 0). Podemos colocar el vértice superior en (maxX / 2, maxY / 2). El vértice inferior izquierdo sería (100, maxY), y el vértice inferior derecho, (maxX - 100, maxY).
' Draw a triangle
Const maxX = 620
Const maxY = 450
Screen _NewImage(maxX, maxY, 32)
Call drawTriangle(maxX, maxY, maxY / 2)
Sub drawTriangle (maxX, maxY, length)
' The upper vertex is the center of the screen
orgX = Int(maxX / 2)
orgY = Int(maxY / 2)
' From the lower left to the lower right
For x = 100 To maxX - 100
Line (orgX, orgY)-(x, orgX + length)
Next
End Sub
La salida es un triángulo, lo prometido.
Mientras las funciones (que se crean con FUNCTION... END FUNCTION) pueden ser invocadas directamente, tal y como estamos acostumbrados en lenguajes de programación modernos, los procedimientos tienen que ser invocados con CALL.
BASIC es sin duda el lenguaje de programación retro. No puedo dejar de pensar en ZX BASIC de Boriel, el Basic del ZX Spectrum pero mucho más moderno, capaz de compilar para el aparato de Sinclair o el ZX Spectrum Next.
¿Y tú? ¿Cuáles son tus vivencias con BASIC?



Top comments (2)
QBasic fue mi primer encuentro real con la programacion en la escuela. Claro, habia tenido clases de algoritmos, pero esa fue la primera vez que escribi unas lineas de codigo. No fue nada surreal o magico, fue otra clase mas que estudiar. Ni idea que iba a terminar dedicandome a eso :)
Para mí sí que fue mágico. Una vez que tecleé mi propio programa en el ZX Spectrum, sabía a qué quería dedicarme. Y en el cole, en extraescolares, tuve un profe que nos enseñaba con ordenadores Amstrad PC1512, MS-DOS 3.3 y GW-BASIC. Lo cierto es que se sentían un paso atrás, comparados con el Speccy.