Why is it Dim? (BASIC Language)

22
Dimの話 BASICの変数宣言はなぜDimなのかというBASIC生誕50周年な歴史 の話 NAWA Tech ~東京・奉納祭~ LT http://nawatech.connpass.com/event/12344/

Transcript of Why is it Dim? (BASIC Language)

Dimの話BASICの変数宣言はなぜDimなのかというBASIC生誕50周年な歴史

の話

NAWA Tech ~東京・奉納祭~ LT http://nawatech.connpass.com/event/12344/

自己紹介

•原敬一

•駆逐艦痛風

• BASIC好き

なんで「Dim」って聞かれた

他の勉強会でC#のvar(型推論の宣言)とval(readonlyの書き換え案)の話をしていたとき、

ところで、Visual Basicの変数宣言のDimってなんでDimなの?と聞かれました。

知らない人が多いのですね。

(この資料での発表をした会場でも50%の人が知りませんでした)

BASICの変数宣言はDimです

こう書きます。

Dim UserName As String

UserNameという文字列変数を宣言する、という意味です。

英和辞書サイトのアルクさんによると

• Dimの意味

• 【自動】薄暗くなる、かすむ、曇る

• 【他動】〔照明{しょうめい}や明かりを〕薄暗くする、落とす

〈米〉〔車のヘッドライトを〕ロー・ビームにする◆【同】〈英〉dip

• 【形】〔場所{ばしょ}・照明{しょうめい}などが〕薄暗い{うすぐらい}

〔物が〕ぼやけた、ぼんやりとした、はっきり見えない

〔視力{しりょく}が〕弱い、悪い

〔記憶{きおく}などが〕おぼろげな、不鮮明{ふせんめい}な

〔考えなどが〕はっきりしない頭の鈍い、理解{りかい}が遅い

おぼろげな、不鮮明{ふせんめい}な?

となると、たとえば、

Dim UserName As String

不鮮明な UserNameは文字列

という意味になりますね。

質問ありますか?

• ご清聴ありがとうございました。

• ご質問ありましたらどうぞ。

ちょっと待ってください!

Dimって、Dimensionじゃないんですか?

Dimension って次元ですか?

不自然だとおもうんだけど

面積とかとしても不自然な気がするし

ではちょっと、古いBASICとかからご説明

• DimをBASICで使い始めたのにはちゃんと理由があります

そもそも、BASICでは変数宣言は不要です

Public Class Form1

Private Sub Form1_Load(sender As Object, e As EventArgs)

Handles MyBase.Load

UserName = "hara"

MsgBox(UserName)

End Sub

End Class

昔のBASICではこう書くことができました

10 A = 1

20 B = “原”

30 A = “敬一”

40 C = 2

50 PRINT A + B + STR$(C)

変数宣言がいりません。

というか、変数宣言がしたくてもできない言語処理系もありました。

BASICは変数の宣言をする必要がない

• BASICは変数の宣言をする必要がありませんでした。

• ですから、変数を宣言する命令語が定義されていませんでした。

• Dimは変数宣言の命令ではなかったのです。

Beginner's All-Purpse Symbolic Instruction Code

•初心者でも扱いやすいように設計された

•簡単に扱えるよう、

変数宣言は不要とされた

変数名の長さが1文字とか2文字とか、よくて6文字とか

保存できる文字列の長さもそんなに長いのダメだったりした

簡単にしたかった

言語処理系実装の都合も大きい

• インタープリターの実装を楽にしたいという動機なんだろうなあと思ってます。

•古いインタープリターでは、変数宣言をしなくても使える変数領域を用意しておいた。

• BASICのROMを解析したところ、たとえば、変数Aは0x7F00から16バイトね、という風に固定になっているものがあった。

• これは実装が超楽ちん。

しかし、配列はメモリー確保が必要でした

• 超楽ちんな変数の実装でしたが、配列では可変の容量を使うためにつかうことができず、メモリー確保の手続きが必要となりました。そこで、

配列だけ特別扱いしよう!となり、

10 Dim a$(2,3)

という風に書くことにしました。

これは、2つの次元指定で、aという変数の領域を、2 × 3だけ宣言という意味です。

あ!

• Dimensionって配列変数の次元指定という意味なんですね。 (すっとぼけ)

配列変数の宣言をDimとしよう

•配列変数のためにDimという宣言語を作ったんです。

• あくまでも配列変数の宣言と、配列領域の確保のためのものでした。

しかし、ここからがBASICの不幸・・・

• BASICは変数宣言をしなくてもいい、できないというのが欠点として語られるようになり、変数宣言のための命令を導入する流れになったのですが・・・

Dimの用途拡大!

• あろうことか、「Dim」を配列次元指定以外にも流用することになり

Dim UserName(2,3) As String

Dim UserName As String

もOKに

•言語仕様の拡張をしてほしかったのが本音です

祝BASIC 50周年

• 1964年、米国ダートマス大学にて、数学者ジョン・ケメニー(1926-1992)とトーマス・カーツ(1928-)により、コンピュータ教育用の言語ダートマスBASICとして開発された。これは同時期にともに開発された、タイムシェアリングシステム DTSS 上のラインエディタ(テレタイプ端末環境)で利用されるよう設計されていた。

(wikipediaより)