UTALI

書き溜めておいた技術記事や旅行記のバックアップです。

リチャード・ストールマンもC++が嫌いだそうです

f:id:mochizuki_p:20170614205048j:plain

フリーソフトウェア運動の提唱者でGNUプロジェクトの創設者のリチャード・ストールマン(通称:RMS)はC++に極めて否定的であることが知られている。今回はC++に対する辛辣な言葉の数々を紹介したいと思う。

最初はemacsの開発者コミュニティに向けたEメールから、C言語とLispで実装されているEmacsにC++を採用したらどうか? という提案のようだったようだ。

リチャード・ストールマンより Emacsの開発者へ Re: より多くのユーザーを獲得するための努力について 2010年7月12日 8時36分48秒

C++は設計の破綻した醜い言語だ。Emacsにそれを使えば恥ずかしいことになるだろう。

GCCの開発者たちがC++を使用したがっている理由はデストラクタとジェネリックスのためだ。しかし、これはEmacsには有用ではない。それはガベージコレクションを を備えており、しかもLispが扱えるレベルまでデータ型を制限する必要があるからだ。

Richard Stallman Agrees That C++ Sucks

From: Richard Stallman To: emacs-devel Subject: Re: Efforts to attract more users? Date: Mon, 12 Jul 2010 08:36:48 -0400

C++ is a badly designed and ugly language. It would be a shame to use it in Emacs.

The reason the GCC developers wanted to use it is for destructors and generics. These aren’t much use in Emacs, which has GC and in which data types are handled at the Lisp level.

また、ストールマン氏は、自身のホームページ上で、プログラミング言語の好みやプログラミングを行なっている環境について紹介している。そこで、RMSはC言語とLispがお気に入りの言語だと語る一方で、C++は「極めて醜い言語」だと断言している

以下は抜粋、

対照的に、C++は極めて醜い言語に思える。

C++の欠点は、1990年にその問題点を認識したことにまで遡るが、構文とシンタックスに関してのことになる。構文に関していえば、その文法は曖昧で、C言語との互換性もない、これはC言語からC++へのスムーズなアップグレードを妨げている。

シンタックスについて言えば、C++の抽象オブジェクト機構はコンパイル時になって初めて実際のオブジェクトの型が定義される。しかし、そのようなケースでは、抽象オブジェクトは呼び出される関数の命名規則と等しくなる。抽象オブジェクトが言語に実際にパワーを与えるのは、実際に実行される時まで型が不明であるときだが、C++はそれをうまくやってのけている。しかし、それはたんなる後付けの機能でしかなく、ひどい関係性しかない。

おそらくSTLにも酷い実装が散見されるのだろう。これについてはよくわからないが、それは私がC++を学んだ後に追加された機能だったからだ。

By contrast, I find C++ quite ugly. The flaws of C++, as I recall from when I studied the matter around 1990, include syntax and semantics. As for syntax, its grammar is ambiguous, and it is gratuitously incompatible with C, which blocks the smooth upgrade path from C to C++. As for semantics, the abstract object facility of C++ is designed around the case where the real type of an object is known at compile time. However, in that case, abstract objects are equivalent to a naming convention for functions to call. The case where abstract objects add real power to a language is when the type is not known until run time. C++ does handle that, but it seems to be an afterthought, a poor relation. I suspect that I would find plenty of ugliness in the template library, but I don’t know. That was added to C++ after I studied it. I skimmed documentation of Python after people told me it was fundamentally similar to Lisp. My conclusion is that that is not so. read',eval', and `print' are all missing in Python.

How I do my Computing

なお、翻訳には意訳が入っていますので、各自原文を確認しておいてくださいね