2017年05月15日
川俣晶の縁側ソフトウェア技術雑記 total 3222 count

2017年にもなって残るPascal派対C派の因縁!?

Written By: 川俣 晶連絡先

「パソコンの始祖であるマイコンの時代、高級言語のスタンダードはBASIC言語であった。これはパソコン時代の初期まで続くトレンドとなった」

「なぜ?」

「タイムリーにMicrosoft BASICが供給されたからだ」

「それで?」

「しかし、BASICはもともと教育用だ。乏しい資源でもよく動いたので好まれたが、あまり実用的ではなかった。ポストBASICの争いが起きるのは必然だ」

「どんな言語が争ったの?」

「候補だけなら多かったが、メジャーなプレイヤーはPascalとC言語であった。1970年代末の段階では、Pascal/MT+を擁するPascal陣営がリードしたがその後でC言語陣営にひっくり返され、1980年代中期ぐらいには勝利が明確になり、1980年代後期ぐらいには大C言語ブームが起こることになる」

「圧倒的C言語の勝利だね。勝因はなんだい?」

「PascalよりもC言語の方が実用性が高かったからだろうね」

「難解なポインターがあってもC言語が勝ったの?」

「Pascalにもポインターはあるよ」

「ぎゃふん」

「その後で起こったオブジェクト指向プログラミングのブームに際して、C言語の上位互換になるC++が普及することで、C言語系のプログラミング言語が完全に勝者として定着していく。もはやブロックをbegin-endで書くプログラミング言語はあまりない。波括弧{}で書くスタイルが多い」

「JavaもJavaScriptもC#も波括弧{}で書くスタイルだね」

「そうだな」

「Pascalは完全に死んだの?」

「意外とそうでもなくて、Pascal文化の遺産はいろいろなところでしぶとく生き残っている」

「たとえば?」

「Visual Basicだな」

「BASICじゃないの?」

「Pascal文化を取り入れたBASICという感じなのだ」

「なるほど」

「でも、そういうものは何か理由があってそうなっているだけで、今更終わった戦いの勝敗をひっくり返そうとか、そういう話にはなりにくい」

「既にそこは主戦場ではないのだね」

「そうだ」

「それで話はおしまい?」

「まさか。ここからが本題」

「えー」

「WikiPediaのPascalの項目に凄い文書がさりげなく挿入されているのに気づいた」

以上のように「Borlandの成功」が語られがちではあるが、実際のところ、Turbo Pascalの開発者であるアンダース・ヘルスバーグは、1990年代にMicrosoftに移籍している[17]。ヘルスバーグはMicrosoftでVJ++[18]などを担当した後、C#を開発している。C#は、C++とJavaの基本文法や特徴をベースに、ヘルスバーグの経験が反映された設計がなされており、DelphiおよびBorland C++ Builderの影響もある[19]が、「Object Pascal のブロック表記などをC言語風に置き換えた」と説明するのは間違っている。

「これは凄いね。C++とJavaを持ち上げてPascalを貶めようという意図がミエミエというか……」

「そうだね。最初の部分は【成功は事実ではない】と言っているように読めてしまうし、【C#があるのはC++とJavaのおかげで、Pascalはそれほど大きな役割を果たしていない】と言ってしまっているように読み取れる。しかも、【「Object Pascal のブロック表記などをC言語風に置き換えた」と説明するのは間違っている】という最後の部分は、間違っているのは当たり前の文章を持ち出してあえてそれを間違っていると強調することで、ミスリードを誘っている」

「で、君はこの文章をどう受け止めた?」

「うん、結局2017年にもなって、まだPascal派対C派の派閥抗争を続けている誰かがどこかにいるのだろうな」

「それだけかい?」

「この文章、Pascalの価値を貶めているようで、実はC#も貶めている」

「えっ?」

「この文章は、【C#などC++を変更したものに過ぎず、本当に偉大なものはC++】と暗に告げているような書き方になっている」

「えー」

「話をややこしくしているのはJavaだが、Javaの話はやめよう。それは不毛だ」

「それで話をまとめるとどうなるんだい?」

「C#の基本文法の挙動には、C系言語の常識に従わない部分が割と多く、【CやC++の常識通りに動くと思うと足元を掬われるよ】というアドバイスは真だと思う。Javaに置き換えても同じだがね。だから、心構えとして、【C#を扱うときはC++のようなものと思わない方が良い。むしろ、C風の文法で書くDelphiだと思った方が良い】というアドバイスはある程度有効だろう。ただし、それはDelphiの構文を1対1で置き換えればC#のプログラムになるという話でもない」

「基本的な考え方が似ている話と、構文の構造に互換性があるという話は別なのだね?」

「そうだ。そもそも、構文をC風に置き換えてソースコードの構造に互換性が維持できるわけはない」

「そもそも、C言語世界には【前方参照】の概念は無いしね」

「だからC#にもforward宣言はない」

「結局、この話はどこに着地するんだい?」

「結論はないよ。既に終わった話を蒸し返したって意味などはないからね。そもそもC#は産まれてから後の変更も多く、もはや出自がどうのと問うことにあまり意味は無い。【C#はC#の進化形である】という状態になっている。Cの経験があってもC++のい経験があってもPascalの経験があっても、役に立たないことについては大差ないだろう」

「問題は、そもそもMS社内ですら、C++派とC#派の対立があることではないかい?」

「そこまで行くと、他人の会社の内部事情だ。おいらがコメントできる世界ではないよ」

オマケ §

「で、実際PascalとC言語、どちらの方に実用性があると思う?」

「1980年代ぐらいの感想で、実際に手に入る製品の比較で言えば、致命的なレベルでの格差はなかったかな。強いて言えば、C言語の方が僅かに効率が優越していた。でも、致命傷レベルでの差ではなかった」

「でもC言語が勝ったのはなぜ?」

「その【致命傷レベルではない差】が意味を持ってしまったからだろうな。資源が乏しいマシンが稼働していた時代は、僅かな差でも意味を持ってしまうことがある」

「コンパイラが頑張って最適化すれば対等になれるのではないの?」

「残念ながらコンパイラの最適化機能が強力な最適化機能を獲得する前に決着が付いてしまったんだ。パソコンのコンパイラの最適化技術は1980年代後半以降に大きく進歩したが、Pascal対C言語の決着が付いた後の話になる」