BASIC
BASIC es una familia de lenguajes de programación. Fue originalmente ideado como una herramienta de enseñanza, se diseminó entre las microcomputadores caseras en la década de 1980, y sigue siendo popular hoy en día en muchos dialectos bastante distintos del original.
BASIC es el acrónimo de Beginners All-purpose Symbolic Instruction Code<ref>Por correspondencia con Thomas E. Kurtz.</ref> (en español ‘código de instrucciones simbólicas de propósito general para principantes’) y está ligado al nombre de un trabajo sin publicar del coinventor del lenguaje, Thomas Kurtz (el nombre no está relacionado con la serie de C. K. Ogden, Basic English).
Historia
Antecedentes
Antes de mediados de la década de 1960, las computadoras eran herramientas sumamente caras que eran utilizadas únicamente para propósitos especiales, ejecutando una sola "tarea" a la vez. Sin embargo, durante esa década, los precios comenzaron a bajar al punto que incluso las pequeñas empresas podían costearlas. La velocidad de las máquinas se incrementó al punto que a menudo quedaban ociosas porque no había suficientes tareas para ellas. Los lenguajes de programación de aquellos tiempos estaban diseñados como las máquinas en las que corrían: para propósitos específicos como el procesamiento de fórmulas. Como las máquinas para una sola tarea eran caras, se consideraba que la velocidad de ejecución era la característica más importante de todas. En general, todas eran difíciles de utilizar, y aportaban poca estética.
Fue en aquellos tiempos que el concepto de sistema de Tiempo compartido comenzó a popularizarse. En uno de estos sistemas, el tiempo de procesamiento de la computadora principal se dividía, y a cada usuario se le otorgaba una pequeña porción en una secuencia. Las máquinas eran lo suficientemente rápidas como para engañar a la mayoría de usuarios, dándoles la ilusión de que disponían de una máquina entera solo para ellos. En teoría la distribución del tiempo entre los usuarios redujo considerablemente el costo de la computación, ya que una sola máquina podía ser compartida, al menos en teoría, entre cientos de usuarios.
Nacimiento y primeros años
El lenguaje BASIC original fue inventado en 1964 por John George Kemeny (1926-1993) y Thomas Eugene Kurtz (1928-) en el Dartmouth College. En los años subsiguientes, mientras que otros dialectos de BASIC aparecían, el BASIC original de Kemeny y Kurtz era conocido como BASIC Dartmouth.
BASIC fue diseñado para permitir a los estudiantes escribir programas usando terminales de computador de tiempo compartido. BASIC estaba intencionado para facilitar los problemas de complejidad de los lenguajes anteriores, con un nuevo lenguaje diseñado específicamente para la clase de usuarios que los sistemas de tiempo compartido permitían: un usuario más sencillo, a quien no le interesaba tanto la velocidad, sino el hecho de ser capaz de usar la máquina. Los diseñadores del lenguaje también querían que permaneciera en el dominio público, lo que contribuyó a que se diseminara.
Los ocho principios de diseño de BASIC fueron:
- Ser fácil de usar para los principiantes.
- Ser un lenguaje de propósito general.
- Permitir que los expertos añadieran características avanzadas, mientras que el lenguaje permanecía simple para los principiantes.
- Ser interactivo.
- Proveer mensajes de error claros y amigables.
- Responder rápido a los programas pequeños.
- No requerir un conocimiento del hardware de la computadora.
- Proteger al usuario del sistema operativo.
El lenguaje fue en parte basado en FORTRAN II y en parte en Algol 60, con adiciones para hacerlo apropiado para tiempo compartido y aritmética de matrices, BASIC fue implementado por primera vez en la mainframe GE-265, que soportaba múltiples terminales. Contrario a la creencia popular, era un lenguaje compilado al momento de su introducción. Casi inmediatamente después de su lanzamiento, los profesionales de computación comenzaron a alegar que BASIC era muy lento y simple. Tal argumento es un tema recurrente en la industria de las computadores.
Aún así, BASIC se expandió hacia muchas máquinas, y se popularizó moderadamente en las minicomputadores como la serie DEC PDP y la Data General Nova. En estos casos, el lenguaje era implementado como un intérprete, en vez de un compilador, o alternativamente, de ambas formas.
Crecimiento explosivo
Sin embargo, fue con la introducción de la Microcomputador Altair 8800 en 1975 que BASIC se diseminó ampliamente. La mayoría de lenguajes de programación eran demasiado grandes para caber en la pequeña memoria que la mayoría de usuarios podía pagar para sus máquinas, y con el lento almacenamiento que era la cinta de papel, y más tarde la cinta de audiocasete (los discos magnéticos aún no existían), y la falta de editores de texto adecuados, un lenguaje pequeño como BASIC era una buena opción. Uno de los primeros en aparecer fue Tiny BASIC, una implementación simple de BASIC escrita originalmente por el Dr. Li-Chen Wang, y portada más tarde a la Altair por Dennis Allison, a petición de Bob Albrecht (quien después fundó el Dr. Dobbs Journal). El diseño de Tiny BASIC y el código fuente completo fue publicado en 1976 en DDJ.
En 1975 Microsoft (entonces constaba de dos personas: Gates y Allen) lanzó Altair BASIC. Luego comenzaron a aparecer bajo licencia versiones para otras plataformas, y millones de copias y variantes pronto estarían en uso. Se convirtió en uno de los lenguajes estándar en la Apple II. Para 1979 Microsoft estaba negociando con varios vendedores de microcomputadores, incluyendo a IBM, para licenciar un intérprete de BASIC para sus computadores. Una versión se incluyó en los chips ROM de las PCs IBM, para PCs sin discos, y en las que disponían de unidad de diskettes el BASIC era iniciado automáticamente si es que no se colocaba ningún diskette de arranque de sistema operativo.
Mientras que las nuevas compañías intentaban seguir los pasos del éxito de Altair, IMSAI, North Star, y Apple, creando la revolución de la computadora casera. BASIC se convirtió en una característica estándar para casi todas las computadores caseras; la mayoría venía con un intérprete de BASIC en ROM (algo hecho por primera vez por la Commodore PET en 1977). Pronto había muchos millones de computadores corriendo BASIC alrededor del mundo, un número mucho más grande que el de todos los usuarios de otros lenguajes juntos. Muchos programas, especialmente los de la Apple II e IBM PC, dependían de la presencia del intérprete de BASIC de Microsoft y no correrían sin éste; por lo que Microsoft usó la licencia de copyright en los intérpretes de BASIC para influir en las negociaciones con los vendedores de computadores.
El BASIC fue también el lenguaje prefijado en los computadores caseros europeos de la década de los 80 como el ZX Spectrum, MSX o el Commodore 64, haciendo muchas veces la función de intérprete y sistema operativo primitivo ya que venían implementados en ROM.
Madurez
En este período se crearon versiones de BASIC nuevas y más poderosas. Microsoft vendió varias versiones de BASIC para MSDOS/PCDOS, incluyendo BASICA, GW-BASIC (una versión compatible con BASICA que no necesitaba la ROM de IBM), y Quick BASIC. El fabricante de Turbo Pascal, Borland, publicó Turbo BASIC 1.0 en 1985 (versiones sucesoras aún se venden bajo el nombre de PowerBASIC por otra compañía). Aparecieron varias extensiones de BASIC para computadores caseras, típicamente con gráficos, sonido, y comandos DOS, así como facilidades para Programación estructurada. Otros lenguajes usan la sintaxis de BASIC como base para otros sistemas totalmente diferentes, como por ejemplo GRASS.
Sin embargo a finales de la década de 1980 las computadores nuevas eran mucho más complejas, e incluían características (como la Interfaz gráfica de usuario) que hacían a BASIC menos apropiado para programarlas. Al mismo tiempo las computadores progresaban de ser un interés para aficionados a herramientas usadas principalmente para ejecutar aplicaciones escritas por otros, y la programación en sí se fue haciendo menos importante para la creciente mayoría de usuarios. BASIC comenzó a desvanecerse, aunque numerosas versiones aún estaban disponibles.
La suerte de BASIC dio un giro nuevamente con la introducción de Visual Basic de Microsoft. Aunque es algo difícil considerar este lenguaje como BASIC (a pesar de que usa muchas palabras clave conocidas de BASIC) se ha convertido en uno de los lenguajes más usados en la plataforma Windows, y se dice que representa del 70 al 80% del desarrollo comercial de aplicaciones. Visual Basic for Applications (VBA) fue añadido a Microsoft Excel 5.0 en 1993 y al resto de la línea de productos de Microsoft Office en 1997. Windows 98 incluyó un intérprete de VBScript. La versión más reciente de Visual Basic es llamada VB.NET. La suite OpenOffice.org incluye una variante de BASIC menos poderosa que su contraparte de Microsoft.
El Lenguaje
Sintaxis
Una sintaxis muy mínima de BASIC sólo necesita los comandos LET, PRINT, IF y GOTO. Un intérprete que ejecuta programas con esta sintaxis mínima no necesita una pila. Algunas de las primeras implementaciones eran así de simples. Si se le agrega una pila, se pueden agregar también ciclos FOR anidados y el comando GOSUB. Un intérprete de BASIC con estas características necesita que el código tenga números de línea.
Los dialectos modernos de BASIC MIUN han abandonado los números de línea, y la mayoría (o todos) han añadido control de flujo estructurado y los constructores de declaración de datos como los de otros lenguajes como C y Pascal:
- do
- loop
- while
- until
- exit
- on ... goto
- gosub
- switch
- case
Variantes recientes como Visual Basic han introducido características orientadas a objetos, y hasta herencia en la última versión. La administración de memoria es más fácil que con muchos otros lenguajes de programación procedimentales debido al Recolector de basura (a costas de la velocidad de ejecución).
Procedimientos y Control de Flujo
BASIC no tiene una biblioteca externa estándar como otros lenguajes como C. En cambio, el intérprete (o compilador) contiene una biblioteca incorporada de procedimientos intrínsecos. Estos procedimientos incluyen la mayoría de herramientas que un programador necesita para aprender a programar y escribir aplicaciones sencillas, así como funciones para realizar cálculos matemáticos, manejar cadenas, entrada de la consola, gráficos y manipulación de archivos.
Algunos dialectos de BASIC no permiten que los programadores escriban sus propios procedimientos. Los programadores en cambio deben escribir sus programas con un gran número de enunciados GOTO para hacer las ramificaciones del programa. Esto puede producir un código fuente muy confuso, comúnmente referido como Código espagueti. Los enunciados GOSUB ramifican el programa a una especie de subrutinas sin parámetros o variables locales. La mayoría de versiones de BASIC modernas, como Microsoft QuickBASIC han añadido soporte completo para subrutinas, funciones y programación estructurada. Este es otro área donde BASIC difiere de otros muchos lenguajes de programación. BASIC, como Pascal, hace una distinción entre un procedimiento que no devuelve un valor (llamado subrutina) y un procedimiento que lo hace (llamado función). Muchos otros lenguajes (como C) no hacen esa distinción y consideran todo como una función (algunas que devuelven un valor “void” [vacío]).
Mientras que las funciones que devuelven un valor son una adición relativamente reciente a los dialectos de BASIC, muchos de los primeros sistemas soportaban la definición de funciones matemáticas en línea, con DEF FN (“DEFine FunctioN” [DEFinir FuncióN]). El Dartmouth BASIC original también soportaba funciones al estilo de Algol, así como subrutinas desde sus primeros tiempos.
Tipos de Datos
BASIC es reconocido por tener muy buenas funciones para manipular cadenas. Los primeros dialectos ya tenían un juego de funciones fundamentales (LEFT$, MID$, RIGHT$) para manipular cadenas fácilmente. Como las cadenas son utilizadas en aplicaciones diarias, esta era una ventaja considerable sobre otros lenguajes al momento de su introducción.
El Dartmouth BASIC original soportaba únicamente datos de tipo numérico y cadenas. No había un tipo entero. Todas las variables numéricas eran de punto flotante. Las cadenas eran de tamaño dinámico. Los arreglos de ambos, números y cadenas, eran soportados, así como matrices (arreglos de dos dimensiones).
Cada dialecto moderno de BASIC posee al menos los tipos de datos entero y cadena. Los tipos de datos son generalmente distinguidos por un posfijo, los identificadores de cadenas terminan con $ (signo de dólar), mientras que los enteros no lo hacen. En algunos dialectos, las variables deben ser declaradas (con DIM) antes de usarse; otros dialectos no lo requieren, pero tienen la opción para hacerlo (típicamente usando una directiva como OPTION EXPLICIT). Muchos dialectos también soportan tipos adicionales, como enteros de 16 y 32 bits y números de punto flotante. Adicionalmente algunos permiten la utilización de tipos definidos por el usuario, similar a los "records" de Pascal, o las "structs" de C.
La mayoría de dialectos de BASIC además de los arreglos de tipos primitivos, también soportan arreglos otros tipos. En algunos, los arreglos deben ser declarados antes de que puedan usarse (con el enunciado DIM). Es común también el soporte para arreglos de dos y más dimensiones.
DIM miArregloDeEnteros(100) AS INTEGER DIM miListaDeNombres(50) AS STRING
Dependiendo del dialecto de BASIC y del uso del enunciado OPTION BASE, los valores pueden estar en el rango miArregloDeEnteros(0) a miArregloDeEnteros(100), de miArregloDeEnteros(1) a miArregloDeEnteros(100), o de miArregloDeEnteros(LimiteInferior) a miArregloDeEnteros(LimiteSuperior).
Disponibilidad y variantes del dialecto
BASIC está disponible para casi todas las plataformas de microprocesador existentes. Una implementación gratuita que cumple con estándares y es multiplataforma es Bywater BASIC (bwBASIC). El intérprete está escrito en C y viene bajo la licencia GNU. Está diseñado para programas de consola de texto, así que no incluye soporte para crear interfaces gráficas de usuario (GUIs). Un BASIC gratuito que incluye soporte para GUI, es similar a Visual Basic y se ejecuta en Windows y Linux es Phoenix Object Basic.
Las versiones de compiladores más conocidos son la línea de productos de Quick BASIC de Microsoft, y QBASIC (una versión que no genera programas ejecutables). Algunas versiones de Visual Basic también son compiladores, aunque Microsoft ha mantenido a Visual Basic al menos mínimamente compatible con incluso las primeras versiones de sus BASICs.
Otras versiones incluyen PowerBASIC de PowerBASIC, así como True BASIC de True BASIC, que cumple con los últimos estándares oficiales de BASIC. (True BASIC Inc. fue fundada por los creadores originales de Dartmouth BASIC.)
REALbasic es una variante disponible para Mac OS Classic, Mac OS X, Microsoft Windows y Linux. Una variante de un dialecto simple de BASIC para la parrot virtual machine muestra como se implementa un intérprete de BASIC en un lenguaje parecido al ensamblador. PureBasic es una variante con una sintaxis sencilla, pero que produce ejecutables rápidos y pequeños para Windows y Linux. También puede compilar instrucciones en ensamblador incrustadas entre el código. SmallBASIC es un dialecto que corre en muchas plataformas (Win32, DOS, Linux y PalmOS) y viene bajo la licencia GNU (GPL).
Ejemplos
Ejemplo 1: Saludo
PRINT "Hola"
Ejemplo 2: BASIC original no estructurado (Applesoft BASIC)
10 INPUT "¿Cuál es su nombre? "; U$ 20 PRINT "Hola "; U$ 30 INPUT "¿Cuántos asteriscos desea? "; N 35 S$ = "" 40 FOR I = 1 TO N 50 S$ = S$ + "*" 55 NEXT I 60 PRINT S$ 70 INPUT "¿Desea más asteriscos? "; A$ 80 IF LEN(A$) = 0 GOTO 70 90 A$ = LEFT(A$, 1) 100 IF (A$ = "S") OR (A$ = "s") THEN GOTO 30 110 PRINT "Adiós "; 120 FOR I = 1 TO 200 130 PRINT U$; " "; 140 NEXT I 150 PRINT
Ejemplo 3: BASIC estructurado moderno
INPUT "¿Cuál es su nombre?"; NombreUsuario$ PRINT "Hola "; NombreUsuario$ DO INPUT "¿Cuántos asteriscos desea?"; NoAsteriscos Asteriscos$ = "" Asteriscos$ = REPEAT$("*", NoAsteriscos) PRINT Asteriscos$ DO INPUT "¿Desea más asteriscos?"; Respuesta$ LOOP UNTIL Respuesta$ <> "" LOOP WHILE UCASE$(LEFT$(Respuesta$, 1)) = "S" PRINT "Adiós"; FOR I = 1 TO 200 PRINT NombreUsuario$; " "; NEXT I PRINT
Dialectos
- Altair BASIC (MITS Altair, S-100; El primer producto de Microsoft)
- AMOS (Commodore Amiga)
- Apple Business BASIC (Apple ///)
- Applesoft BASIC (Apple II)
- BASIC (MSDOS)
- Atari BASIC (Familia Atari de 8 bits)
- BASIC09 (para CPUs Motorola 6809 de 8-bits y 680x0 de 16 y 32 bits y los sistemas operativos OS9 y OS968K)
- BASICA (Versiones basadas en disco para PC-DOS)
- BASIC-E (alias 'submarine BASIC')
- BBC BASIC (Acorn/BBC Micro, RISC-OS, Cambridge Z88, CP/M, MSDOS)
- Blitz Basic (Commodore Amiga, MSDOS)
- Blitz 3D (Windows)
- Bywater BASIC (bwBASIC) (MSDOS, POSIX)
- CBASIC (sucesor de BASIC-E) (CP/M, MSDOS)
- Commodore BASIC (PET/CBM, VIC-20, C64, ...)
- Dartmouth BASIC (ver True BASIC)
- Ethos Basic (Windows)
- FutureBASIC (Macintosh)
- Gambas (Linux, OpenBSD)
- GNOME Basic (Linux)
- GFA BASIC (Commodore Amiga, Atari)
- GW-BASIC (MS-DOS) (compatible con BASICA)
- IBasic (Windows)
- Integer BASIC (Apple II)
- Liberty BASIC (Windows)
- Locomotive BASIC (Amstrad CPC)
- LotusScript (Lotus Notes)
- Mallard BASIC (Amstrad PCW, CP/M en ZX Spectrum +3)
- MBASIC (Microsoft BASIC para CP/M)
- MSX BASIC (MSX)
- PBasic (Microcontroladores Basic Stamp de Parallax)
- Phoenix Object Basic (Linux)
- PowerBASIC (sucesor de Turbo BASIC) (MSDOS, Win32, Atari)
- PureBasic (Win32, Linux y Amiga)
- QBASIC (MSDOS)
- Quick BASIC (MSDOS)
- Rapid-Q (Win32, Linux, Solaris/Sparc, HP/UX)
- REALbasic (Macintosh, Win32, Linux)
- Revelation Basic (MSDOS)
- ROM BASIC
- SAM BASIC (Sam Coupé)
- ScriptBasic (Win32 y Linux, GPL)
- Sinclair BASIC (ZX80, ZX81/TS1000, ZX Spectrum)
- SmallBASIC (Linux, MSDOS, Win32, PalmOS; GPL)
- StarOffice Basic (alias StarBasic) (OpenOffice.org, StarOffice)
- ST Basic (Atari)
- STOS (Atari)
- SuperBasic (Sinclair QL)
- THEOS Multi-User Basic
- TI BASIC (TI 99/4A)
- TI Extended BASIC (ditto)
- Tiny BASIC
- True BASIC (DOS, Windows, Macintosh)
- TRS-80 Level I BASIC
- TRS-80 Level II BASIC
- Turbo BASIC (sucesor de BASIC/Z) (ver PowerBASIC)
- VBScript
- Visual Basic (Windows)
- Visual Basic for Applications (VBA) (MS Office en Windows y Macintosh)
- Visual Basic .NET (Windows)
- XBasic (Win32 y Linux, GPL)
- YaBasic (Win32 y Linux, GPL)
Estándares
- ANSI Standard for Minimal BASIC (ANSI X3.60-1978 "FOR MINIMAL BASIC")
- ISO Standard for Minimal BASIC (ISO/IEC 6373:1984 "DATA PROCESSING - PROGRAMMING LANGUAGES - MINIMAL BASIC")
- ANSI Standard for Full BASIC (ANSI X3.113-1987 "PROGRAMMING LANGUAGES FULL BASIC") $79 USD
- ISO Standard for Full BASIC (ISO/IEC 10279:1991 "INFORMATION TECHNOLOGY - PROGRAMMING LANGUAGES - FULL BASIC") $53 USD
- ANSI Addendum Defining Modules (X3.113 INTERPRETATIONS-1992 "BASIC TECHNICAL INFORMATION BULLETIN # 1 INTERPRETATIONS OF ANSI 03.113-1987")
- ISO Addendum Defining Modules (ISO/IEC 10279:1991/ Amd 1:1994 "MODULES AND SINGLE CHARACTER INPUT ENHANCEMENT")
Enlaces externos
Referencias y Notas
- Lien, David A. (1986). The Basic Handbook: Encyclopedia of the BASIC Computer Language (3a ed.). Compusoft Publishing. ISBN 0932760333. Documenta la variación en el dialecto de más de 250 versiones de BASIC.
- Kemeny, John G.; & Kurtz, Thomas E. (1985). Back To BASIC - The History, Corruption, and Future of the Language. Addison Wesley Publishing. ISBN 0-201-13433-0.
<references/>
En un artículo de 1968 Edsger Dijstra consideraba que los lenguajes de programación que usaban sentencias GOTO para estructurar un programa eran nocivos para la productividad del programador, y para la calidad del código resultante (Comunications of the ACM Volumen 11, 147-148. 1968). Este artículo no menciona ningún lenguaje de programación en particular. Únicamente menciona que el uso excesivo de GOTO es algo malo, y proporciona las razones técnicas por las que esto es así.
En un artículo de 1975, publicado en Sigplan Notices Volumen 17 No. 5, How do We Tell Truths that Might Hurt, da una lista de verdades incomodantes, incluyendo su opinión sobre varios lenguajes de programación de la época, como BASIC. Parece que mucha gente confunde los dos artículos y concluyen en que Dijkstra particularmente menospreciaba a BASIC, debido a su enunciado GOTO. Sin embargo BASIC no recibe peor trato que PL/I, COBOL o APL en sus artículos.
Enlaces a Wikipedia
- Wikipedia(am)
- Wikipedia(ar)
- Wikipedia(bg)
- Wikipedia(bs)
- Wikipedia(ca)
- Wikipedia(cs)
- Wikipedia(da)
- Wikipedia(de)
- Wikipedia(el)
- Wikipedia(en)
- Wikipedia(es)
- Wikipedia(eo)
- Wikipedia(et)
- Wikipedia(eu)
- Wikipedia(fi)
- Wikipedia(fr)
- Wikipedia(he)
- Wikipedia(hr)
- Wikipedia(hu)
- Wikipedia(id)
- Wikipedia(is)
- Wikipedia(it)
- Wikipedia(ja)
- Wikipedia(ko)
- Wikipedia(lt)
- Wikipedia(lv)
- Wikipedia(ms)
- Wikipedia(nl)
- Wikipedia(nn)
- Wikipedia(no)
- Wikipedia(pl)
- Wikipedia(pt)
- Wikipedia(ro)
- Wikipedia(ru)
- Wikipedia(simple)
- Wikipedia(sk)
- Wikipedia(sl)
- Wikipedia(sr)
- Wikipedia(sv)
- Wikipedia(th)
- Wikipedia(tr)
- Wikipedia(uk)
- Wikipedia(vi)
- Wikipedia(zh)