BASIC で何かを記述するときは、行番号を使用する必要があります。お気に入り:
10 PRINT "HOME"
20 PRINT "SWEET"
30 GOTO 10
しかし、行番号を使用するというアイデアを思いついたのは誰でしょうか? それは非常に迷惑であり、開発中の (しゃれが意図された) 世界にかなりの「反響」を残しました!
BASIC で何かを記述するときは、行番号を使用する必要があります。お気に入り:
10 PRINT "HOME"
20 PRINT "SWEET"
30 GOTO 10
しかし、行番号を使用するというアイデアを思いついたのは誰でしょうか? それは非常に迷惑であり、開発中の (しゃれが意図された) 世界にかなりの「反響」を残しました!
当時の考え方は、適切な行番号を使用することで、プログラムのどこにでもコードを簡単に追加できるというものでした。これが、誰もが行番号 10、20、30 を使用する理由です。
10 PRINT "HOME"
20 PRINT "SWEET"
30 GOTO 10
25 PRINT "HOME"
BASIC が利用可能だった最初のインターフェースでは、vi や emacs (または DOS 編集、へー) のようなものでさえ、光沢のあるエディターはありませんでした。コンソールにプログラムを印刷することしかできず、最初に適切な行番号を指定して、新しい行を追加するか、それらを置き換えます。最近慣れているように、カーソルを使用して「ファイル」をナビゲートすることはできませんでした(プログラムはメモリに保持されていましたが、ディスクにコピーを保存できました)。
したがって、行番号は、悪名高い GOTO のラベルとして必要なだけでなく、プログラム フローのどの位置で編集しているのかをインタプリタに伝える必要がありました。
長い歴史があります。
行番号は、実際には、BASIC プログラミング言語の元のバージョンであり、いわゆるダートマス タイム シェアリング システムの不可欠な部分であったダートマス BASIC から来ています。その DTSS には基本的な IDE がありましたが、これは対話型のコマンド ラインに過ぎませんでした。
したがって、この「IDE」内に入力され、行番号で始まるすべての行がプログラムに追加され、以前に保存された行が同じ番号に置き換えられました。それ以外はすべて DTSS コマンドと見なされ、すぐに実行されました。
VDT(ビデオ・ディスプレイ・ターミナル)のようなものが登場する前は、私たちベテランはパンチカードでプログラムを作成していました。パンチ カードの列 72 ~ 80 はシーケンス番号用に予約されています。カード デッキを落としてすべての順序が狂った場合、それらのシーケンス番号に基づいてカードを並べ替えるカード ソーターにデッキを入れることができます。多くの点で、BASIC の行番号はそれらのシーケンス番号に似ていました。
BASIC の世界でのもう 1 つの利点は、昔は BASIC が実行されたとおりに解釈されていたことです。ブランチに連続した行番号ではなくラベルを使用すると、最初のパスですべてのラベルとその場所を取得する必要があります。行番号を使用する場合と同様に、インタプリタは目的地のために順方向または逆方向にスキャンを開始する必要があるかどうかを認識します。
昔は、emacs や vi のような 2 次元エディターはありませんでした。あなたが持っていたのはコマンドラインだけでした。
プログラムはメモリに保存され、単一行を編集するには単一行コマンドを入力します。
あなたが Unix の神なら、ed か何かでそれを行うことができますが、C-64、VIC-20、または TRS-80 の BASIC では、行を上書きするだけです。
したがって、セッションは次のようになります。
$10 PRINT "Hellow World"
$20 GOTO 10
$10 PRINT "Hello World"
そして今、プログラムは正しく動作します。
一部の古いメインフレームには、スクリーンのない回線端末さえありました。セッション全体がインクで紙に印刷されました。
WHO?" 発明者はケメニーとクルツです。
返信を読んだ後、ウィキペディアの「Dartmouth BASIC」の項目を調べたところ、驚きました。
最初のコンパイラは、時分割システムの準備が整う前に作成されました。CardBASIC として知られており、標準のカード リーダー ベースのバッチ処理システムを対象としていました。
つまり、Paul Tomblin は「正解」のように見えます。
Paul Tomblin の回答は最も包括的なものですが、BASIC プロジェクトの最初の目標の大部分が、タイムシェアリングを使用して初心者に優しいインタラクティブな環境を提供することであったことに誰も言及していないことに驚いています。(Kurtz と Kemeny の「すべての学生のためのユニバーサル アクセス」に対するビジョンは、この点で時代をはるかに先取りしていました。)
この目標を達成するために開発された BASIC システムは、Teletype ASR-33 (およびその後の他の) 印刷端末を特徴としていました。タイムシェアリング対応の OS に接続すると、BASIC プログラムをインタラクティブ モードで編集および実行することができました (パンチ カードでの作業とは異なります) が、カーソルでアドレス指定することはできません。行番号は、プログラム ステートメントの順序を指定し、スクリーン エディターがなくても明確に編集できるようにするための、初心者にやさしい方法でした。ウィキペディアの「ライン エディター」のエントリでさらに説明されており、ライン エディター (Un*x 'ed' など) を使用しようとしたことがある人なら誰でも、初心者が不可解なことを学ばなくて済むようにしてくれたことに対して、Kurtz と Kemeny に感謝すべき理由を理解できます。この方法でテキストを編集するために必要なコマンド シーケンス。
それらは、BASIC が派生した FORTRAN に由来します。ただし、FORTRAN では、他の行 (GOTO ターゲットなど) によって参照される行のみに番号が必要でした。BASIC では、特定の行を編集できるようにするという二次的な用途がありました。
高度なプログラミング言語が誕生したばかりの 50 年代には、端末もエディターもモニターも (そうです、モニターもありません)、カード パンチャーとリーダー (カードの内容をメモリーに読み書きするためのもの) しかありませんでした。コンピューター) とプリンター (当然、結果を印刷するため)。その後、テープが導入されましたが、それはまた別の話です。
各パンチカードには独自の番号がありました。それにはいくつかの理由がありました。純粋にそれらを順番に保つことから、実行の順序を決定することまで。各カードは 1 行のコードでした (現在の用語で言えば)。当時は、if..then..else のような構文がなかったため、実行順序を何らかの方法で決定する必要がありました。そのため、GOTO ステートメントが導入されました。それらはループの基礎でした。「スパゲッティコード」という用語もその時代に由来します。皿の上のスパゲッティのように、下手に書かれたコードは比較的従うのが難しいためです:)
アセンブラから来ていると思います。各命令には、別の命令がジャンプできるアドレスがあります。
さらに、最初のコンピューターには多くのメモリがなく、行番号の保存に 2 バイトしかかかりません (適切に行われた場合)。ラベルを書き込むと、最初にそのラベルが定義されている場所で、次に任意のジャンプ コマンドで、より多くのメモリが必要になります。
最後に、古き良き時代には、派手な編集者はいませんでした。唯一の「エディタ」は単純なコマンド ライン インターフェイスであり、プログラムの一部である番号で始まるすべてのものを処理し、それ以外のすべてをすぐに実行されるコマンドとして処理しました。最も顕著な例は、コモドール 64 です。
Basic の新しい方言では、行番号は不要になりました。
答えはすでに上にあります。Paul Tomblinがそれを書きました(zabzonkへの警告付き)。
実際、「パンチカード」に言及していない答えは不完全であり、パンチカードにもFORTRANにも言及していない場合は間違っていると私は主張します。私の両親は両方とも定期的にパンチカードを使用し(FORTRAN 66と77で始まり)、80年代にBasicとCOBOLに移行したため、これは間違いなく正しいと言えます。
Basic では、行番号がない場合、どのように実行できますか?
GOTO 10
これは行をジャンプする方法であり、20 年以上前に発見された良い方法です。
現在、これらの行は、エラー/例外をキャッチするのに役立ちます。これは、デバッグ エンジンが、行 xxx で例外が発生したというメッセージを送信するように作られているためです。すぐにそこにジャンプします。
行番号のない世界を想像してみてください...行番号なしで記者はどうやって報酬を得ることができますか?
「小説を知ったので、あらすじを50行以内で書かなければなりません」
これを覚えて?学校でも行番号を習います!
それが発明されていない場合、誰かが再び発明するので、私たちはそれをうまく使うことができます:)
BASIC のすべてのバージョンで行番号が必要なわけではありません。たとえば、QBasic はラベルをサポートしていました。次に、GOTO を使用してそれらにジャンプできます (Dijkstra の「有害と見なされる Go To ステートメント」は今のところ無視します)。
初期の頃は、ほとんどのプログラムがパンチ カードで入力されていました。通常、パンチカードは順番に入力され、通常はカードごとに 1 つの命令が入力され、ラベル (JMP/JSR ターゲット) は別の命令カードになっていました。
プログラムを編集するには、カードを交換しました。
後の実装では、行の右端にオプションのシーケンス番号が追加されました。これにより、順序が狂った場合に、自動化されたリーダーによって再順序付けできるようになりました。
Fortran は、左側 (列 1 ~ 5) に数値ターゲット ラベルを使用し、右側 (73 ~ 80) にシーケンスまたはコメント用の予約済みブロックを残しました。
BASIC が最初に書かれたとき、シーケンス番号を FORTRAN のラベル フィールドの左に移動し、編集モードとして以前のカードのメモリ フットプリントを上書きできるようにすることが決定されました。これはインタラクティブな開発環境を対象としていましたが、カードでも同様に機能しました。また、初期の実装ではさまざまな理由からカードが使用されていました。
心に留めておいてください: 多くのコンピュータは、1970 年代後半までカード リーダーとプリンタ インターフェイスでした。インタラクティブモードの基本も利用できましたが、カードパンチの基本プログラムが頻繁に使用されました。多くは単純に IDE にフィードするだけだったので、まったく同じように機能しました。最後に「ラン」カードが必要なことも含めて。そのような場合、単純に修正カードと別の実行カードをタックして、いくつかの変数のバリエーションで再実行することができます。同様に、複雑なプログラムでは、実行前にカードの修正された行を追加するだけで、誤ったカード自体を見つける貴重な時間を費やすことなく、問題を編集するのに十分でした.
Futurama のロボット教会が好きで、壁には次のように書かれていました。
10 SIN
20 GOTO HELL
Speccy では、行番号がないと行を編集できませんでした。
ペアリングするときにとても便利だと思います。ペアがキーボードを持っているときは、行を指す必要はありません。「74 行目、本当に getMoreBeer() ではないでしょうか?」と言うことができます。
DOS 用の元のエディタはedlinという素晴らしいユーティリティでした。1行しか編集できませんでした。多くのバージョンの BASIC での生活をさらに面白くするために、10 行目、20 行目、30 行目、25 行目、5 行目の順不同で入力できます。実行は、出現順ではなく、行番号によって行われます。