はてな界隈でいろんな言語の「基礎文法最速マスター」なんてのが流行っているようで、とうとう「fortran 基礎文法最速マスター」なんて記事も現れた。

対抗してkumajiri最速マスターを書いてもいいのだが、それはさておき、昔のBASICで思い出したことがある。

太古のBASICでは、繰返し文は FOR~NEXTしかなかった。その後 WHILE~WENDもできたのだけど、REPEAT~UNTILはなかったような。で、そのFOR~NEXTなんだけど、昔のBASICインタプリタ時代には、FORで繰返しループをスタックに詰んでNEXTでそれを読んで繰り返してた。

  • FORが来たら、制御変数とステップ値(省略すると1)、終値をスタックに詰む
  • NEXTが来たら、
    • 次に制御変数があれば、該当する変数が積まれてるところまでスタックをPOP
    • 制御変数にステップ値を足して、終わり値を超えていなければFORの次に戻る
    • 超えてたら、スタックをPOPして次に

こういう実装なので、FORとNEXTが1対1じゃないプログラムは平気で書けたし、IF XX THEN NEXT I ELSE NEXT J なんてのも書けた。
FORとNEXTを使って catch~thru みたいなのも書けた。変態だ。(実装依存だけど)。
これをコンパイルするのは大変なんだけど、MSのコンパイラはどうやってたっけなあ。ソース上だけ見てコンパイルしてたんだっけなあ。
自分が卒論で書いたコンパイラはソース上の関係しか見てなかったはず。

昔のBASICといえば、変数の型があるようでないようなのもあったような。もう忘れかけてる。

リンク


Trackback

3 comments untill now

  1. N88-BASIC (86)と
    F-BASICで
    同じマイクロソフト系なのに、
    FORしてるときの動きは同じでも、
    FORを終わったときのループ変数の値がちがったりして、
    けっこう苦労した > F社の依頼でつくったN->Fコンヴァーター
    (Lattice-Cで書きました。FM-16βか11の上のRED(よく異常終了する)で編集)

  2. 終わり値が1違うとかでしたっけ? もう覚えてないなあ。
    REDは3-4年使ってたけど、そんなに悪くなかったような。

  3. [...] 昔のBASICのFOR~NEXT文(その2) ず 未分類 2010-02-25 昔のBASICのFOR~NEXT文 (基礎文法最速マスターで思い出した)というエントリを書いたら、識者(メカAGさん)の目に止まったらしく、「basicのfor-next実装」という記事を書いていただいた。 [...]

Add your comment now