2010-03-12 19 views
20

Duplicar posible:
Why did we bother with line numbers at all?¿Por qué BASIC tenía líneas numeradas?

Tengo curiosidad acerca de por qué las primeras versiones del lenguaje de programación BASIC tenían numeración de líneas, como en:

42 PRINT "Hello world!" 

Los editores de texto de vuelta entonces no tenía numeración de línea?

EDITAR: Sí, sé que se usan para GOTO, pero ¿por qué? Me refiero a tener etiquetas demasiado costosas desde el punto de vista computacional.

+13

Cuando cargué la página, no hubo respuestas. Cuando terminé de escribir el mío, había seis, incluido el mío. Respuesta desbordante –

+3

Creo que es posible que hayas tocado el botón de la nostalgia aquí ... Montones de * recuerdos * de antaño ... – NealB

+1

Duplicado: http: // stackoverflow.com/questions/541421/why-did-we-we-problem-with-line-numbers-at-all – gnovice

Respuesta

26

Muchos microordenadores tenían un intérprete de BASIC en ROM que se iniciaría en el arranque. El problema era que no había un editor de texto o sistema de archivos para hablar. Tuviste un mensaje interactivo para hacer todo a través de. Si desea insertar una línea de código, simplemente la tipeó, comenzando con el número de línea. Lo insertaría en el lugar correcto en tu código. por ejemplo:

 
>10 print "hello" 
>30 goto 10 
>20 print "world" 
>list 
10 PRINT "hello" 
20 PRINT "world" 
30 GOTO 10 
> 

(En ese ejemplo> es el símbolo del BASIC)

Si desea borrar una línea, tendría que escribir algo así como ERASE 20. Algunos sistemas realmente sofisticados le dieron un editor de línea (es decir, EDIT 10) Y si no planificó sus números de línea y se agotó (¿cómo puedo insertar una línea entre 10 y 11?) Algunos sistemas le dieron un comando RENUM que renumere su código (y ajuste GOTOs y GOSUBs de manera apropiada).

¡Tiempos divertidos!

+7

No solo eso, no había internet en esos días. Querías acceder a una computadora que recorraste hasta donde estaba. Cuesta arriba. Ambos sentidos. Y cuando Ferruccio dice que no hay un sistema de archivos, eso no es como ningún almacenamiento permanente en los primeros sistemas de microcomputadora. Apágalo, todo se fue. Eventualmente obtuvimos la capacidad de guardar programas en cinta de cassette. A veces incluso puedes volver a cargar el programa desde la cinta, si lograste obtener el nivel correcto. –

9

Fueron utilizados como etiquetas para GOTO y GOSUB

De esta manera:

10 PRINT "HELLO WORLD" 
20 GOTO 10 

No hubo etiquetas con nombre en algunas versiones básicas primeros

También fueron necesarios si se desea introducir una línea entre 2 líneas de código existentes, porque en los primeros días, no tenía editores de texto completo. Todo tenía que escribirse en el intérprete "interactivo".

Así que si has proporcionado:

15 PRINT "AND THE UNIVERSE" 

El programa se convertiría en:

10 PRINT "HELLO WORLD" 
15 PRINT "AND THE UNIVERSE" 
20 GOTO 10 

Cuando se quedó sin números de línea, se puede ejecutar una herramienta de "renumeración" volver a numerar todas las líneas en su programa, pero en los primeros días del Commodore 64 y otras computadoras hogareñas, ni siquiera teníamos eso, así que tendrías que volver a numerar manualmente. Es por eso que tuvo que dejar huecos de 10 o más en los números de línea, por lo que podría agregar líneas fácilmente en el medio.

Si desea probar el intérprete Commodore 64, echa un vistazo a esta C64 emulador escrito en Flash: http://codeazur.com.br/stuff/fc64_final/ (sin requiere instalación)

+0

("Así que si escribiste") ¿Puedes nombrar el editor de texto al que te refieres? –

+1

No hay editor de texto. Solo una línea de comando donde escribirías tu código –

+0

Sí, pero ¿hay algún nombre para esto? ¿línea de comando? No puedo encontrar ninguna referencia en la web, no hay captura de pantalla, nada. –

3

Los números de línea se utilizan en el control de flujo. No hubo subrutinas nombradas. Tienes que usar GOSUB 60, por ejemplo, para llamar a la subrutina a partir de la línea 60.


En su actualización, no todas las lenguas tenían etiquetas, pero todos los idiomas tenido números de línea a la vez. En un momento, todo era cartas perforadas. BASIC fue uno de los primeros lenguajes interactivos, donde realmente se podía escribir algo y tener una respuesta inmediata. Los números de línea seguían siendo la tecnología actual.

Las etiquetas son un gasto extra. Debe hacer un seguimiento de la correlación entre la etiqueta simbólica y el código o los datos a los que hace referencia. Pero si cada línea tiene un número de línea (y si todas las instrucciones de flujo de transferencia de control siempre se refieren al comienzo de una línea), entonces no necesita una tabla de símbolos por separado.

También tenga en cuenta que los intérpretes BASIC originales no necesitaban una tabla de símbolos para las variables: había 26 variables llamadas A-Z. Algunos eran sofisticados y tenían An-Zn.Algunos se pusieron muy elegantes y agregaron una distinción entre cadena, entero y coma flotante al agregar "$" o "%" después de la variable. Pero no se requiere una tabla de símbolos.

+0

El problema no era "radical": los ensambladores tenían etiquetas mucho antes de que Algol-60 las utilizara. Es la resolución de "múltiples pasadas" de las etiquetas. Los ensambladores antiguos (y los compiladores) tenían que leer toda la fuente del programa varias veces para resolver los nombres de las etiquetas. Fue solo lento. –

+0

@ S.Lott: Parece que he perdido mi comentario de "ALGOL-60". –

+0

Motivo del voto a favor, por favor. –

2

IIRC, los números de línea se usaban principalmente como etiquetas para declaraciones GOTO y GOSUB, ya que en algunos (¿la mayoría?) Sabores de BASIC no había forma de etiquetar una sección de código.

10

La numeración de líneas original de BASIC era en realidad una parte integral del lenguaje y se utilizaba para controlar el flujo.

Los comandos GOTO y GOSUB tomarían la línea y la usarían para controlar el flujo. Esto era común entonces (a pesar de que ahora se desaconseja).

+4

Si bien su respuesta no es incorrecta, una respuesta más completa indicaría que la falta de editores de texto interactivos hacía que la numeración de líneas fuera un mal necesario; para que uno pueda insertar líneas adicionales de código entre las líneas previamente ingresadas. –

+0

@roygbiv: esa fue de hecho la razón más importante para la existencia de los números de línea en BASIC –

+0

@Philippe: "una razón importante", no la más importante. Los programas no eran interesantes sin GOTO o GOSUB. –

8

En BASIC, los números de línea indican la secuencia.

Además, muchos editores antiguos no eran para archivos, sino simplemente líneas ("editores de línea", por ejemplo, ed, the standard editor). Al numerarlos de esta manera, sabía en qué línea estaba trabajando.

4

Eran etiquetas para las declaraciones, por lo que podría GOTO el número de línea. El número de las declaraciones no necesariamente tiene que coincidir con los números de línea física en el archivo.

+0

De hecho, era común y bastante necesario dejar huecos de 5-10 para permitir que se realizaran adiciones sin tener que volver a numerar todo el programa. – Buggabill

2

También fueron utilizados por el editor - es decir, usted dijo:

edit 100 

para editar la línea 100.

+5

@Neil: ¿Tuviste un _editor_? ¡No necesitamos ningún _editor_! Simplemente escribimos la línea una vez más. –

+0

@John Todas las versiones de BASIC que he usado, del Dartmouth BASIC original, tenían un editor de líneas incorporado. Ciertamente, los de Microsoft (muchas versiones) y el de DEC-System 10 (que es lo más retro posible) lo hicieron. –

+0

@Neil: ¿era eso un "editor de línea", o era el intérprete? ¿Fue un programa separado? ¿Cómo lo comenzaste? –

2

Como otros han señalado, estos números de línea se utilizaron como parte de subrutinas.

Por supuesto, hay una razón por la que esto ya no se hace. Imagina si dices GOTO 20 en la línea 10 y luego te das cuenta de que necesitas escribir 10 líneas más de código después de la línea 10. De repente, estás aplastando contra 20, por lo que debes desplazar tu subrutina más lejos (números más altos) y cambie su valor GOTO, o necesita escribir otra subrutina que salta más lejos en el código.

En otras palabras, se convirtió en una pesadilla del verdadero código de spaghetti y no es divertido de mantener.

7

Anteriormente, todos los idiomas tenían números de secuencia, todo estaba en tarjetas perforadas. Había una línea por tarjeta. Mazos de cartas formaron su programa.

Cuando sueltaste las cartas, las pondrías en un clasificador de tarjetas que usaba esos números de secuencia.

Y, por supuesto, fueron referenciados por construcciones de control de flujo.

+0

divertido y correcto! –

+0

Probablemente deberías proporcionar un enlace para decir qué son las tarjetas perforadas, porque según la mayoría de las otras respuestas, la mayoría de las personas aquí no están familiarizadas con ellas. – Gabe

2

Algunos editores solo tenían un modo de "sobrescritura" y ningún modo de "inserción". Esto hizo que la edición del código existente fuera extremadamente dolorosa. Añadiendo que la función de número de línea, se puede sin embargo parche para el código existente desde cualquier lugar dentro del archivo:

100 PRINT "Broken Code" 
200 PRINT "Foobar" 
... 
101 patch the broken code 
102 patch more broken code 

Debido a que los números de línea no tienen que ser pedidos dentro del archivo.

5

En el C64, ni siquiera había un editor real (incluido al menos). Para editar una parte del programa, harías algo como LIST 100-200, y luego solo podrías editar esas líneas que se mostraban actualmente en la pantalla (¡sin desplazarte hacia arriba!)

+0

¿Tiene alguna referencia para este 'editor'? –

+1

Sí, el editor era básicamente la memoria de pantalla, bastante común en las máquinas de 8 bits en aquel entonces. –

+3

Bueno, era parte del intérprete que comenzó tan pronto como se encendió el C64. Era parte de la ROM no modificable (y solo te dejó con aproximadamente 40k de la RAM total de 64k, porque primero tuvo que copiarse en la RAM). Se usó como un shell básico (para cargar programas, etc.) también. Tal vez quieras probar un emulador C64 (http://en.wikipedia.org/wiki/List_of_computer_system_emulators#Commodore_64) - es divertido :-) –

7

A simple google reveals what wikipedia has to say about it:.

Los números de línea eran un elemento necesario de la sintaxis en algunos lenguajes de programación más antiguos, como GW-BASIC [2] La razón principal de esto es que la mayoría de los sistemas operativos en ese momento carecían de editores de texto interactivos; dado que la interfaz del programador generalmente se limitaba a un editor de línea, los números de línea proporcionaban un mecanismo por el cual las líneas específicas en el código fuente podían referenciarse para edición, y mediante el cual el programador podía insertar una nueva línea en un punto específico. Los números de línea también proporcionan un medio conveniente para distinguir entre el código que se ingresará en el programa y los comandos que se ejecutarán inmediatamente cuando los ingrese el usuario (que no tienen números de línea).

+0

@Helltone - Si esto no responde a tu pregunta, entonces ninguna de las respuestas, responde tu pregunta. –

+0

@ S.Lott No creo que sea arrogante preguntar aquí. La mayoría de nosotros no tenemos acceso a Kurtz. ¿Vos si? –

+0

@zneak: mi comentario se refiere al hecho de que Helltone había votado negativamente mi publicación con un comentario que decía 'Esto no responde mi pregunta'. Él desde entonces ha eliminado ese comentario. Mi respuesta simplemente indica que mi respuesta resume lo que otros dicen, por lo tanto etiquetar esta respuesta como "incorrecta" está implícitamente etiquetando las respuestas de todos los demás como incorrectas. No tiene nada que ver con la arrogancia. –

2

Se entró en la línea de comandos en muchos casos (o era, en mi viejo Commodore 64) por lo que no podría han sido siempre un editor de texto, o si lo había, que era bastante básico .

Además, debe hacer GOTO y similares, así como insertar líneas entre otras.

es decir:

10 PRINT "HELLO" 
20 GOTO 10 
15 PRINT " WORLD" 

donde podría ir en la lógica 10 15 20

2

Los números de línea eran una PARTE del lenguaje, en algunos MUY tempranos, incluso el sistema operativo era simplemente estas líneas simples. TODO lo que tenía era una línea a la vez para manipular. Intente escribir un sistema de contabilidad usando 1-4k archivos de programa y segmentarlo por tamaño para hacer las cosas. Para editar, utilizó los números de línea para decir lo que estaba editando. Por lo tanto, si se ha introducido como:

10 PRINT "howdy" 
20 GOTO 10 
10 PRINT "WOOPS" 
15 PRINT "MORE WOOPS" 
20 
RUN 

que se obtendría:

WOOPS 
MORE WHOOPS 

La pieza en bruto 20 tendría effectivly eliminar esa línea.

Cuestiones relacionadas