¿Por qué nos molestamos con los números de línea? [cerrado]


Cuando escribes algo en BASIC, debes usar números de línea. Como:

10 PRINT "HOME"
20 PRINT "SWEET"
30 GOTO 10

Pero me pregunto: ¿a quién se le ocurrió la idea de usar números de línea? ¡Es una molestia, y dejó un "eco" en el mundo en desarrollo (juego de palabras)!

Author: Brad Koch, 2009-02-12

16 answers

La idea en ese entonces era que se podía agregar fácilmente código en todas partes de su programa mediante el uso del número de línea apropiado. Es por eso que todo el mundo usa números de línea 10, 20, 30.. así que queda espacio:

10 PRINT "HOME"
20 PRINT "SWEET"
30 GOTO 10
25 PRINT "HOME"

En las primeras interfaces para las que estaba disponible BASIC, no había un editor brillante, ni siquiera algo como vi o emacs (o DOS edit, heh). Solo podía imprimir su programa en la consola y luego agregaría nuevas líneas o las reemplazaría, dando primero el número de línea apropiado. No se podía navegar a través del" archivo " (el programa se guardaba en la memoria, aunque se podía guardar una copia en el disco) con el cursor como está acostumbrado hoy en día.

Por lo tanto, los números de línea no solo eran necesarios como etiquetas para el infame GOTO, sino que de hecho necesitaban decirle al intérprete en qué posición en el flujo del programa está editando.

 68
Author: ypnos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-12 14:43:25

Tiene una larga historia.

La numeración de líneas en realidad proviene de Dartmouth BASIC, que era la versión original del lenguaje de programación BASIC y era la parte integral de un sistema llamado Dartmouth Time Sharing. Ese DTSS tenía un IDE rudimentario, que no era más que una línea de comandos interactiva.

Así que cada línea escrita dentro de este "IDE", y comenzando con un número de línea, se agregó al programa, reemplazando cualquier línea previamente almacenada con el mismo número; cualquier otra cosa fue asumida como un comando DTSS y ejecutada inmediatamente.

 41
Author: Anton Gogolev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-12 14:24:58

Antes de que existiera un VDT (terminal de visualización de video), los veteranos programábamos en tarjetas perforadas. Tarjetas perforadas columnas reservadas 72-80 para los números de secuencia-si se le cayó su baraja de cartas y todos se salieron de orden, usted podría poner la baraja en un clasificador de cartas que ordenaría las cartas en base a esos números de secuencia. En muchos sentidos, los números de línea BÁSICOS eran similares a los números de secuencia.

Otra ventaja en el mundo BÁSICO es que en los viejos tiempos BASIC era interpretado como si se ejecutara. El uso de etiquetas en lugar de números de línea secuenciales para las ramas requeriría una primera pasada para recoger todas las etiquetas y sus ubicaciones, donde como si utilizara números de línea, el intérprete sabe si necesita comenzar a escanear hacia adelante o hacia atrás para el destino.

 40
Author: Paul Tomblin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-05 13:02:54

Antes no tenías un editor de 2 dimensiones como emacs o vi. Todo lo que tenías era la línea de comandos.

Su programa se almacenaba en la memoria y escribiría comandos de una sola línea para editar líneas individuales.

Si fueras un dios de Unix podrías hacerlo con ed o algo así, pero para BASIC en un C-64, VIC-20 o TRS-80 simplemente sobrescribirías la línea.

Así que una sesión podría verse como:

$10 PRINT "Hellow World"
$20 GOTO 10
$10 PRINT "Hello World"

Y ahora el programa funcionaría correctamente.

Algunos más viejos los mainframes incluso tenían terminales de línea sin pantalla. Toda tu sesión fue impresa en papel en tinta!

 17
Author: Sean Cavanagh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-12 14:32:44

El "¿Quién?"serían los inventores, Kemeney y Kurtz.

Después de leer las respuestas, revisé la entrada de Wikipedia para "Dartmouth BASIC", y me sorprendió aprender

El primer compilador se produjo antes de que el sistema de tiempo compartido estuviera listo. Conocido como CardBASIC, fue diseñado para el sistema de procesamiento por lotes basado en lector de tarjetas estándar.

Por lo tanto, parece que Paul Tomblin "obtiene el cuadrado".

 8
Author: gbarry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-07 18:56:48

Se originaron en FORTRAN, de donde se derivó BASIC. Sin embargo, en FORTRAN solo las líneas referenciadas por otras líneas (como los objetivos GOTO) necesitaban números. En BASIC tenían un uso secundario, que era permitir la edición de líneas específicas.

 6
Author: starblue,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-12 14:26:43

La respuesta de Paul Tomblin es la más completa, pero me sorprende que nadie haya mencionado que una gran parte del objetivo inicial del proyecto BÁSICO era proporcionar un entorno interactivo amigable para principiantes utilizando tiempo compartido. (La visión de Kurtz y Kemeny para el "acceso universal para todos los estudiantes" estaba muy por delante de su tiempo en este sentido.)

El sistema BÁSICO que se desarrolló para cumplir con este objetivo incluía terminales de impresión teletipo ASR-33 (y más tarde otros). Cuando está conectado a un sistema operativo con capacidad de tiempo compartido, estos permiten editar y ejecutar programas BÁSICOS en un modo interactivo (a diferencia de trabajar con tarjetas perforadas), pero no son direccionables con el cursor. Los números de línea eran una forma amigable para principiantes para especificar el orden de las instrucciones del programa y permitir la edición inequívoca en ausencia de un editor de pantalla. La entrada de Wikipedia para" editor de línea " explica más, y cualquiera que haya tratado de usar un editor de línea (como el Un*x 'ed') puede apreciar por qué Kurtz y Kemeny deberían se agradece por evitar que el principiante tenga que aprender las secuencias de comandos crípticas necesarias para editar texto de esta manera.

 6
Author: Armando Fox,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-31 19:59:36

En los años cincuenta, cuando los lenguajes de alta programación estaban en sus inicios, no había terminales, ni editores, ni monitores (sí, ni monitores), solo perforadores y lectores de tarjetas (para escribir y leer el contenido de las tarjetas en la memoria de un ordenador) e impresoras (para imprimir resultados, naturalmente). Más tarde, se presentó la cinta, pero esa es otra historia.

Cada tarjeta perforada tenía su propio número. Había varias razones para eso; de mantenerlas puramente en orden, a determinar la secuencia de ejecución. Cada tarjeta era una línea de código (en términos de hoy). Ya que, en ese momento, no había construcciones como si..entonces..de lo contrario, o cualquier variante similar, la secuencia de ejecución tenía que ser determinada de alguna manera. Así que se introdujeron las declaraciones GOTO. Eran la base de los bucles. El término "código espagueti" también proviene de ese período de tiempo, ya que el código mal escrito era relativamente difícil de seguir, como los espaguetis en un plato:)

 2
Author: Rook,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-12 15:28:55

Supongo que viene del ensamblador, donde cada instrucción tiene una dirección a la que puede saltar otra instrucción.

Además, las primeras computadoras no tenían mucha memoria, y almacenar un número de línea solo toma dos bytes (si se hace correctamente). Escribir una etiqueta requiere más memoria, primero en la ubicación donde se define esa etiqueta, luego en cualquier comando de salto.

Finalmente en los buenos viejos tiempos no había ningún editor elegante. El único "editor" era una simple línea de comandos interfaz, que trata todo lo que comienza con un número que forma parte de un programa y todo lo demás como comandos que se ejecutan inmediatamente. El ejemplo más destacado debería ser el Commodore 64.

Los dialectos más nuevos de Basic ya no necesitan números de línea.

 2
Author: Bodo Thiesen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-17 08:07:14

En Basic, si no tienes un número de línea, ¿cómo puedes preformar un

GOTO 10 

Esa fue una manera de saltar líneas, una buena manera que se encontró ... hace más de 20 años!

Hoy, las líneas nos ayudan a detectar errores / excepciones porque los motores de depuración están hechos para enviarnos el mensaje de que tenemos una excepción en la línea xxx y saltamos de inmediato a ella!

Imagina un mundo sin números de línea... ¿cómo puede pagarse a un reportero sin las líneas?

"Ahora que conoce la novela, tienes que escribir un resumen con no más de 50 líneas "

¿Recuerdas esto? ¡Incluso en la escuela aprendemos sobre los números de línea!

Si no se inventó, alguien ya se inventará de nuevo para que podamos usarlo muy bien:)

 1
Author: balexandre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-12 14:22:18

No todas las versiones de BASIC requieren números de línea. QBasic, por ejemplo, admite etiquetas. A continuación, podría saltar a aquellos con GOTO (ignorando la "Ir a la Declaración Considerada Perjudicial" de Dijkstra, por el momento).

 1
Author: Powerlord,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-12 14:41:17

La respuesta ya está arriba. Paul Tomblin lo escribió (con una advertencia a zabzonk).

En realidad, yo diría que cualquier respuesta que no menciona "tarjetas perforadas" es incompleta, si no menciona ni tarjetas perforadas ni FORTRAN, es incorrecto. Puedo decir que esto es definitivamente correcto porque mis padres usaban tarjetas perforadas regularmente (comenzaron con FORTRAN 66 y 77), luego migraron a Basic y COBOL en los años 80.

 1
Author: cwallenpoole,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-12 15:05:09

En los primeros días, la mayoría de los programas se ingresaban con tarjetas perforadas. Las tarjetas perforadas generalmente se ingresaban en secuencia, generalmente una instrucción por tarjeta, con etiquetas (objetivos JMP/JSR) siendo una tarjeta de instrucción separada.

Para editar su programa, reemplazó la tarjeta.

Las implementaciones posteriores agregaron un número de secuencia opcional en el extremo derecho de la línea, de modo que cuando/si se salían de orden, podían ser resecuenciados por un lector automatizado.

Fortran utilizó ambos etiquetas numéricas de destino a la izquierda (col 1-5) y dejó un bloque reservado a la derecha (73-80) para secuencia o comentario.

Cuando BASIC se escribió inicialmente, se decidió mover los números de secuencia a la izquierda, en el campo de etiquetas de FORTRAN, y permitir sobrescribir la huella de memoria de las tarjetas anteriores... como modo de edición. Esto fue pensado para el entorno de desarrollo interactivo, pero funcionó igual de bien con las tarjetas. Y las tarjetas se utilizaron en algunas implementaciones tempranas para una variedad de motivo.

Tenga en cuenta: Muchas computadoras eran lector de tarjetas y la interfaz de la impresora a través de la década de 1970. Incluso tho' conceptos básicos de modo interactivo estaban disponibles, programas básicos perforados tarjeta fueron utilizados con frecuencia. Dado que muchos simplemente estaban alimentando el IDE, funcionaban exactamente de la misma manera. Incluyendo la necesidad de una tarjeta" Run " al final. En tales casos, uno podría simplemente virar una tarjeta de corrección y otra tarjeta de ejecución para volver a ejecutar con una variación en alguna variable; del mismo modo, en programas complejos, simplemente agregar una línea corregida de una carta antes de la ejecución era adecuado para editar los problemas sin gastar un tiempo precioso para encontrar la carta errante en sí.

 1
Author: aramis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-30 21:02:06

Me gusta la iglesia robot en Futurama, en las paredes se escribieron cosas como

10 SIN
20 GOTO HELL

En el Speccy no se podía editar una línea sin el número de línea.

 0
Author: Peter Morris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-12 14:23:23

Me parecen muy útiles al emparejar. No tengo que apuntar a una línea cuando mi par tiene el teclado, solo puedo decir, " en la línea 74, ¿no debería ser realmente getMoreBeer ()?"

 0
Author: Don Branson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-12 14:27:24

El editor original para DOS era una utilidad maravillosa llamada edlin. Solo se podía editar una sola línea. Para hacer la vida aún más interesante en muchas versiones de BASIC podría escribir líneas fuera de orden, línea 10, 20, 30, 25, 5, La ejecución sería por número de línea, no por el orden de aparición.

 -1
Author: Jim C,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-12 14:31:19