サイトアイコン Embarcadero RAD Studio, Delphi, & C++Builder Blogs

標準C++の進化

Author: h.mohri

この記事は、David MillingtonによるEvolution of C++ standardsの抄訳です。

 

開発者にとってC++プログラミング言語は技術的なチャレンジできる、おそらく最も広く使われているコンパイル言語の1つであり、最もエキサイティングなものです。

「過去について知っていれば分かるほど、あなたは将来のために準備が整っています(the more you know about the past, the better prepared you are for the future)」(Theodore Rooseveltの誤た引用)、C++の歴史とそのコーディング、昨今の様子を見てみましょう。 

C++は1979年にBjorne Stroustrupによって始められたC言語拡張からGrew Outしたことを多くC++ユーザーは知っていると思います。そして、もともと「C with classes」をCにコンパイルした最初のC++コンパイラ、Cfrontを知っているかとおもいます。Cfrontは 複雑すぎてC言語でコンパイルできないため削除となりました。そして急速に変化し今やC++17, C++20が言語標準で、1998年には最初の標準が公開されるまでに20年ほどかかりました。

C++標準の歴史とC++Builderが今日どこに対応しているのかを見てみましょう。

 

 

Standardization

何年もの間、C++の事実上の標準は書面形式ではなく、Cfrontコンパイラの形であった。それがコンパイルされていれば、それは有効なC++でした。

1985年にStroustrupは、The C++ Programming Languageを出版しました。これは今でもC++のリファレンスブックと見なされています。これによりAT&T C++のデファクトスタンダードとなるCfrontが増えました。これは、1990年にThe Annotated C++ Reference Manualに置き換えられました。言語は、言語仕様を定義する単一の個人またはグループによって「所有」されることが多く、1つのグループがコンパイラとライブラリを所有している場合、オープン仕様は必要ありません。複数の実装が存在する場合は、共通の共通仕様が互換性のために不可欠です。 先見的かつ謙虚な動きで、Stroustrupは国際標準化機構(ISO)に引き渡しました

では、どのようにしてコンパイラやリファレンスブックからISO標準化に至ったのでしょうか?

1990年頃に数多くの出来事がありました:

その年は大きな進歩でした。

それ以降、C++の標準化された5つの仕様がリリースされています。

 

The First Standard: 1998

最初のISO C++標準は1998年にリリースされました。今や多くの大学が、基本的なC++を学んでいます。

それは、STLを含む、C++の機能のベースラインでコード化しました:RTTI、dynamic_cast、多くのテンプレート機能などがあります。(これらの多くは事実上1998年以前に広く使用されていました。)

言語とサポートライブラリを別々と見なす多くの人々を驚かせますが、今ではC++標準の多くは言語そのものではなく、標準ライブラリとそのビヘイビアです。

2003年に標準がC++03に更新されました。(目ざといの読者は、C++98が1998年とC++03が2003年からの日付を記していることに気づいたかもしれませんが、この2桁の年式命名規則は今日も続いています。)標準に深く掘り下げない限り、C++98とC++03は事実上同じものとみなされます。 C++03はC++98のいくつかの問題を解決しますが、言語を使用するプログラマにとっては、コアは1998年の標準で定義されています。

 

Fast-forward to Standard #3: C++11

C++03は強力な言語仕様ですが何年もの間、言語は新しい重要な改訂を伴わずに停滞しているとみなされました。 (C++03はマイナーチェンジだったことを忘れないでください)

イノベーションはライブラリからのドリブンで、特にBoostとテクニカルレポートライブラリによって推進され、どちらも標準化委員会と密接に関連していました。2000年代後半と続き、2011年8月に変更され、最終的に想像上の名前のC++11標準がリリースされました。

C++11は多くのコア機能をももたらしました。 その中には、lambdas (function objects), type inference (auto keyword), constexprなどがあります。 現在、C++BuilderはWindows、iOS、Android用のC++11をサポートしています。

2014年にC++14がリリースされました。 C++14はC++11への段階的な更新を行いましたが、新しいライブラリ機能だけでなく、いくつかの新機能ももたらしました。 

C++11(modern C ++)は、特に洗練されたC++14形式で、C++開発のルネッサンスを推進しました。言語機能と新しい標準に関する現在の盛り上がりは、このバージョンのC++の成功と、委員会のリーダーシップと方向性の実証によって主に推進されています。以前のように、言語は早い進歩に戻ると見なされました。

 

Standard #5: C++17

C++11、C++14以降のC++関心の復活以来、委員会は言語をさらに改善するために迅速に動いています。

この結果C++17は、昨年12月に次の大きな改訂版となりました。

 C++17の新しい変更 including template deduction of constructors, inline variables, preprocessor directives for checking header availability, improved constant evaluation for template arguments, parallel STL algorithms, a union type (std::variant), その他多くのライブラリ改善 std::string_viewなど。Anecdotally、string_viewは、プログラミングフォーラムで最も議論されているC++17のトピックの1つです。

 

 

C++Builder言語サポートイノベーション

C++Builderの現状

C++Builderの祖先製品であるTurbo C++とBorland C++は、C++の基盤、STLの開発、および標準の最初の改訂の鍵でした。

現在、C++Builderは最新のC++11をサポートしており、C++17への対応は開発中です。C++Builderは、オブジェクトメソッドポインタ(std::funcとstd::bindのフレキシブルな組み合わ)を取得するための__closureやオブジェクトの論理的で非論理的、non-field-backedなオブジェクトを抽象化するための__propertyなど、 フィールドベースのプロパティ – メソッドによってサポートされ、デフォルト値を持ち、RTTIのリフレクションとストリーミングに使用できます。もちろん、これらの言語機能は完全にオプションで、必要に応じて純粋なC++を使用できます。これらの拡張機能は、弊社の最も強力なライブラリのいくつかを有効にし、GPUアクセラレーションされたクロスプラットフォームのUIフレームワークであるFireMonkeyや必要なデータベースをすべてサポートする非常にエレガントなクロスプラットフォームのデータベーステクノロジーであるFireDACと組合せて動作します。 アプリのコミュニケーション、ビジュアルデザインなどのための多くの他のフレームワークと機能が含まれています。 

以下のリンク先のリファレンスでC++の歴史についてもっと学ぶことができます。また、C++Builderの30日間の無料トライアルを今すぐ開始することもできます。

 

References

 


(*) Rooseveltの言葉一般的に使われているのは、 ‘The more you know about the past, the better prepared you are for the future.’ ですが、引用ソース源はたぶんこれ ‘Full knowledge of the past helps us in dealing with the future.’ — The Progressives, Past and Present (1910).

 

 

 

モバイルバージョンを終了