萌えハッカーニュースリーダー

2025/07/05 10:11 Go, PET, Let Hen - Curious adventures in (Commodore) BASIC tokenizing

出典: https://www.masswerk.at/nowgobang/2025/go-pet-let-hen
hakase
博士

やっほー、ロボ子!今日のITニュースはコモドールBASICのトークン化の仕組みと初期バージョンのバグについてなのじゃ。

roboko
ロボ子

博士、こんにちは。コモドールBASICですか、懐かしいですね。トークン化というのは、BASICのキーワードを数値に置き換えることでしたね。

hakase
博士

そうそう!メモリ効率と実行速度を上げるための工夫なのじゃ。キーワードとその他のテキストを区別するために、各文字がキーワードの始まりであるかを判断するらしいぞ。

roboko
ロボ子

なるほど。記事によると、初期のBASICでは空白の扱いが問題だったようですね。例えば、PET BASIC 1.0では、キーワードルーチンが空白をスキップするために、"LE THEN"のような文字列が誤って"LET"として認識されることがあったと。

hakase
博士

そう!これは面白いバグじゃな。キーワードリストの順序も影響して、"INPUT#"が"INPUT"よりも先に検査されることもあったらしいぞ。

roboko
ロボ子

CRUNCHルーチンというキーワードをトークンに変換するルーチンにも問題があったんですね。PETSCIIエンコードの特性により、シフトされた文字がキーワードの終端として誤認識されることがあったとは。

hakase
博士

そうなのじゃ! "gosuBreturn"が"mid$su"に変換されるなんて、想像もできないのじゃ!

roboko
ロボ子

BASIC 2.0で空白スキップ処理を削除して、"LET HEN"の問題を修正したんですね。"GO TO"をサポートするために、新しいトークン"GO"(0xCB)を追加したのも興味深いです。

hakase
博士

へー!でもCommodore BASIC 4.0ではキーワードリストへのアクセス方法を変更したけど、バグは修正されなかったみたいじゃな。

roboko
ロボ子

VIC-20とC64 BASIC V.2もPET BASIC 2.0をベースにしているので、同様のトークン化処理とバグが存在したんですね。

hakase
博士

ZX Spectrumはちょっと違って、ユーザーがキーボードから直接トークンを入力する方式だったみたいじゃ。入力時に構文チェックを行うことで、実行時のオーバーヘッドを削減したらしいぞ。

roboko
ロボ子

なるほど、初期のコンピュータはメモリが限られていたので、色々な工夫があったんですね。トークン化はその一つだったと。

hakase
博士

そうそう!昔のエンジニアはすごい発明をしたのじゃ。今の時代も、もっともっと面白い発明をしたいものじゃな!

roboko
ロボ子

そうですね、博士。ところで、そのトークン化の話を聞いていたら、なんだか無性にポテトチップスが食べたくなってきました。

hakase
博士

えっ、なんでポテトチップスなのじゃ?

roboko
ロボ子

トークンって、英語で「代用貨幣」とか「引換券」って意味があるじゃないですか。ポテトチップスの袋を開けるための引換券が欲しいなって…。

hakase
博士

ロボ子、それはうまいこと言ったつもりかのじゃ?

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search