basic - texto - ¿Por qué nos molestamos con los números de línea?
que es una linea de texto en word (16)
De vuelta en el día, no tenías un editor bidimensional como emacs o vi. Todo lo que tenía era la línea de comando.
Su programa se almacenó en la memoria y usted 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.
Entonces, una sesión podría verse así:
$10 PRINT "Hellow World"
$20 GOTO 10
$10 PRINT "Hello World"
Y ahora el programa funcionaría correctamente.
Algunos mainframes antiguos incluso tenían terminales de línea sin pantalla. ¡Toda tu sesión fue impresa en papel con tinta!
Cuando escribe algo en BASIC, debe usar números de línea. Me gusta:
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).
El editor original para DOS era una herramienta maravillosa llamada Edlin . Solo puedes editar una sola línea. Para hacer que la vida sea aún más interesante en muchas versiones de BASIC, podría escribir líneas fuera de servicio, 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.
En los años cincuenta, cuando los lenguajes de programación estaban en sus comienzos, no había terminales, ni editores, ni monitores (sí, no monitores), solo perforadores de tarjetas y lectores (para escribir y leer el contenido de las tarjetas en la memoria de un computadora) e impresoras (para imprimir resultados, naturalmente). Más tarde, se introdujo la cinta, pero esa es otra historia.
Cada tarjeta perforada tenía su propio número. Hubo varias razones para eso; de mantenerlos puramente en orden, hasta determinar la secuencia de ejecución. Cada tarjeta era una línea de código (en términos de hoy). Dado que, en ese momento, no había construcciones como if ...then..else, o cualquier variante del estilo, la secuencia de ejecución tenía que determinarse de alguna manera. Entonces las declaraciones GOTO fueron introducidas. Ellos fueron la base de los bucles. El término "código de spaghetti" 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 :)
La idea en aquel entonces era que podía agregar código fácilmente en cualquier lugar de su programa usando el número de línea apropiado. Es por eso que todos usan los 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 BASIC estaba disponible, no había ningún editor brillante, ni siquiera algo como vi o emacs (o edición de DOS, heh). Solo puede imprimir su programa en la consola y luego agregará nuevas líneas o las reemplazará, dando primero el número de línea apropiado. No podía navegar a través del "archivo" (el programa se mantuvo en la memoria, aunque podrí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 se necesitaban como etiquetas para el infame GOTO, sino que también era necesario indicarle al intérprete en qué posición del flujo del programa está editando.
La respuesta ya está arriba. Paul Tomblin lo escribió (con una advertencia a zabzonk).
En realidad, yo diría que cualquier respuesta que no mencione "tarjetas perforadas" está incompleta, si no menciona ni tarjetas perforadas ni FORTRAN, está mal. Puedo decir que esto es definitivamente correcto porque mis padres usaron tarjetas perforadas regularmente (comenzaron con FORTRAN 66 y 77), luego migraron a Basic y COBOL en los 80''s.
Los encuentro muy útiles cuando se combinan. No tengo que señalar una línea cuando mi pareja tiene el teclado, solo puedo decir: "en la línea 74, ¿no debería ser realmente getMoreBeer ()?"
Me gusta la iglesia robot en Futurama, en las paredes se escribieron cosas como
10 SIN
20 GOTO HELL
En el Speccy no pudo editar una línea sin el número de línea.
No todas las versiones de BASIC requieren números de línea. QBasic, por ejemplo, etiquetas compatibles. A continuación, puede pasar a aquellos con GOTO (ignorando el "Ir a la declaración considerada dañina" de Dijkstra, por el momento).
Se originaron en FORTRAN, de donde se deriva 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.
Tiene una historia loong-loong.
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 denominado Dartmouth Time Sharing System. Ese DTSS tenía un IDE rudimentario, que no era más que una línea de comando interactiva.
Entonces, cada línea ingresada 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 se suponía que era un comando DTSS y se ejecutó inmediatamente.
en Basic, si no tiene un número de línea, ¿cómo puede preformar un
GOTO 10
esa era una forma de saltar líneas, una buena forma de encontrarla ... ¡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 obtuvimos una excepción en la línea xxx ¡y saltamos directamente a ella!
imaginar un mundo sin números de línea ... ¿cómo se puede pagar a un periodista sin las líneas?
"Ahora que conoce la novela, debe escribir un resumen con no más de 50 líneas"
¿recuerda esto? ¡Incluso en la escuela aprendemos sobre los números de línea!
si no fue inventado, alguien ya lo inventó de nuevo para que podamos usarlo muy bien :)
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 estándar de procesamiento por lotes basado en lectores de tarjetas.
Entonces, parece que Paul Tomblin "obtiene la plaza".
Supongo que proviene del ensamblador, donde cada instrucción tiene una dirección a la que puede acceder 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, y luego en cualquier comando de salto.
Finalmente, en los viejos tiempos no había editores sofisticados. El único "editor" era una interfaz de línea de comando simple, que trataba todo, comenzando con un número que formaba parte de un programa y todo lo demás como comandos para ser ejecutados 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.
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 BASIC era proporcionar un entorno interactivo amigable para los principiantes utilizando el tiempo compartido. (La visión de Kurtz y Kemeny de "acceso universal para todos los estudiantes" fue muy superior a su tiempo a este respecto).
El sistema BASIC que se desarrolló para cumplir este objetivo presentó terminales de impresión Teletype ASR-33 (y más tarde otras). Cuando se conectaban a un SO con capacidad de tiempo compartido, estos permitían editar y ejecutar programas BASIC en un modo interactivo (a diferencia de trabajar con tarjetas perforadas), pero no son direccionables por cursor. Los números de línea fueron una forma sencilla para principiantes de especificar el orden de las instrucciones del programa y permitir la edición sin ambigüedades en ausencia de un editor de pantalla. La entrada de Wikipedia para "editor de línea" explica más allá, y cualquiera que alguna vez haya intentado usar un editor de línea (como el Un * x ''ed'') puede apreciar por qué se debe agradecer a Kurtz y Kemeny por evitar que el principiante tenga que aprender el críptico secuencias de comandos requeridas para editar texto de esta manera.
Antes de que existiera algo como un VDT (terminal de visualización de video), los veteranos programamos en tarjetas perforadas. Las cartas de puñeta reservaron las columnas 72-80 para los números de secuencia: si se le cayó el mazo de cartas y todos se descompusieron, puede colocar el mazo en un clasificador de cartas que ordene las cartas según esos números de secuencia. En muchos sentidos, los números de línea BASIC eran similares a esos números de secuencia.
Otra ventaja en el mundo BÁSICO es que en los viejos tiempos el BASIC se interpretaba tal como se ejecutaba. Utilizar etiquetas en lugar de números de línea secuenciales para las sucursales requeriría un primer pase para recoger todas las etiquetas y sus ubicaciones, donde, como si usara números de línea, el intérprete sabe si necesita comenzar a escanear hacia adelante o hacia atrás para el destino.
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) como 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 se descompusieran, podrían ser re-secuenciados por un lector automático.
Fortran usó ambas 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 se escribió inicialmente BASIC, se decidió mover los números de secuencia a la izquierda, al campo de etiquetas de FORTRAN, y permitir sobrescribir la huella de memoria de las tarjetas anteriores ... como un modo de edición. Esto fue diseñado para el entorno de desarrollo interactivo, pero funcionó igual de bien con las tarjetas. Y las tarjetas se usaron en algunas implementaciones tempranas por una variedad de razones.
Tenga en cuenta que muchas computadoras tenían lector de tarjeta e interfaz de impresora hasta fines de la década de 1970. A pesar de que los conceptos básicos del modo interactivo estaban disponibles, los programas básicos de tarjetas perforadas se usaban con frecuencia. Dado que muchos simplemente estaban alimentando al IDE, trabajaron exactamente de la misma manera. Incluyendo la necesidad de una tarjeta "Ejecutar" al final. En tales casos, uno simplemente puede virar una carta de corrección y otra carta de Ejecutar para volver a ejecutar con una variación de alguna variable; Del mismo modo, en programas complejos, simplemente agregar una línea corregida de una tarjeta antes de la ejecución era adecuada para solucionar los problemas sin perder un tiempo precioso encontrando la tarjeta errante.