mieki256's diary



2017/09/19(火) [n年前の日記]

#2 [prog][neta] 「:=」の謎

C言語系は、変数に値を代入する際に「a = 10;」みたいな書き方をするのだけど。どうして Pascal は「a := 10;」みたいな書き方をするのか気になったり。

ググってたら、なんとなく分かってきた。

_数学記号の表 - Wikipedia
「A := X」は、A という記号の意味するところを、X と定義することである。

数学記号の表 - Wikipedia より

数学の「定義」を示す記号から来ていたのか…。代入の意味じゃないのだな。

そもそも数学では、「a = 10」と書いたら「a と 10 は等しいんだよ」てな意味だと思うけど、プログラミング言語の場合、「=」は「a に 10 を格納するよ」という意味で使われる(ことが多いように見える)ので、おかしいと言えばおかしいのだよなあ…。一体どの言語から、「=」を「等しい」の意味ではなく、代入の意味として使い始めたんだろう。

Pascalは本当に「:=」にしたかったのだろうか。 :

歴史や思想を知らないので、頓珍漢なことを書いてるかもしれんけど。もしかして、Pascal も、「:=」ではなく「=」にしたかった可能性はないのかなと。コンパイル処理の高速化を検討した際に、「=」より「:=」のほうが速く処理できるので、泣く泣く、仕方なく、「:=」にした、みたいな。いや、泣く泣く、てのは違うか。おそらく「数学の『:=』と同じ意味になる。一石二鳥だ」と思った可能性のほうが高そうか。

当時の言語群は、このあたりどれが主流だったのかを調べてみないと、ちょっと分かんないな…。大多数が「=」だったのであれば、Pascalも「=」にすることを検討したのだろうし。どれもてんでバラバラだったなら、Pascalだって「=」のほうが望ましいなんて欠片も考えなかったのかも。

Pascalの作者は、 _ニクラウス・ヴィルト氏 だけど、どこかに記録が残ってたりせんのかな。何かの講演で語ってたり、著作でちょっと触れてたり、そういう記録があれば…。

全然関係ないけど。 _ヴィルトの法則 を目にして、なんだか色々と思い当たるというか…。

むしろ「:=」のほうがメジャーだったのかも。 :

む。 _ALGOL のソレを眺めていて気が付いた。そもそも、Pascalが参考にしていたALGOLからして「:=」だったのか。すると、Pascalを作る時に、そこで初めて勝手に「:=」にしたわけじゃなくて…。既存言語の真似をしただけ、ということか…。

ALGOLと同世代の言語らしい _FORTRAN は、「=」を使ってるな…。

C言語の前身のB言語は、ALGOLの影響を受けている、とされているけど。 _Thompson's B Manual を眺めると「=」になってる、ように見える。どうして「:=」が「=」になったんだろう…。

B言語が影響を受けたとされる _BCPL は…。この時点では「:=」を使ってるなあ。

つまり、プログラミング言語って元々は「:=」を使うのが主流で、「=」を使うのはマイナー派だった。ところが、C言語がドーンと普及したことで逆転したのです。ということになるのだろうか。

ホントかな? なんだか怪しい。自信無し。このあたり、歴史を知ってる詳しい人がどこかで解説してたりせんのかな…。

特殊記号と可読性。 :

ALGOLが、当時のコンピュータでは扱えなかったはずの特殊記号の数々を用いてソースを記述する案を出していた、てなエピソードがなんだか興味深かったり。

当たってるかどうかは分からんけど、そんなことを検討したのは、おそらく可読性を高めることを重要視していたから、だろうと想像したりもして。既存の記法が存在するなら、ソレをそのまま使ってソースを書けたほうが可読性は高まるだろう、てのは自然な発想だよなと。そして、その証拠の一つとして、「:=」が存在するのではあるまいか。

となると、Kuinの「::」が、Pascalを参考にしたと言いつつも、実は本質的なところでPascalどころかALGOLすら全く参考にしていないことも見えてくる。既存の記法からむしろ距離を置き、新規に異なる記法を学習することを利用者に強要する記法なわけで…。極端な評をすれば、人間にとって分かりやすい記法ではなく、コンピュータにとって分かりやすい記法を選択したとすら言える。コンパイル速度という、コンピュータにとって分かりやすい処理を追求したが故に「::」になったのだから…。人間がコンピュータを奴隷にするのではなく、人間がコンピュータの奴隷になるよう自ら歩を進めてみた言語仕様。それを端的に表すのが「::」…だったりするのかもしれない。まあ、あくまで、ひょっとすると、ぐらいの話だけど。

その方向性を更に発展させてみたらどうなるのだろう、てな興味も湧いてしまったり。あらゆる面で、人間様の都合など考えず、とにかく処理速度を追求したらどんな言語になるか、みたいな。例えば、「var」も「do」も「if」も、1文字の特殊記号で置き換えてみたらどうなるだろう。可読性は全く無くなる代わりに、コンパイル速度とソース入力速度だけは爆速に。それはそれで使い道が出てこないか。

それはおそらく、漫画やアニメに出てくる魔導書だの、SF作品でチラチラ出てくる「高速言語」なるものにどことなく近づきそうな気もするわけで。扱える者は圧倒的に少数だが、詠唱寺間が短く、効果も絶大、みたいな。さすがはお兄様です。的な。

アレ? ソレ、ひょっとして、LISP系じゃないのか…。コンピュータの仕組みに合わせた最適化を、わざわざ人間様がソースを書く時点で肩代わりしてやる、あのLISP系…。なるほど、LISP最強ってのは、そういうことでもあるのかな。LISP最強と言いつつ、実態はLISPが最強なのではない。LISPをスラスラと扱える俺様が最強なのだよ。みたいな。

コレ、たぶん、詳しい人が見たら怒り出しそうなことを書いてそうな、そんな不安が…。「いい加減なことを書くんじゃねえ!」と怒ってしまった方は、はてな匿名ダイアリーやQiitaあたりで正しい見方・捉え方・歴史を書いてくれると助かるッス。

以上です。

過去ログ表示

Prev - 2017/09 - Next
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project