C ++プログラミングと比較するものを探していましたが、1990年にティムバートン監督の映画
「エドワードシザーハンズ」を思い出しました

これは郊外の雰囲気で撮影されたピノキオの暗いバージョンです。 この映画では、不気味な男(ジョニー・デップ)がヴァノナ・ライデンを優しく抱きしめようとしていますが、彼の不器用なシザーアームは両方にとって非常に危険です。 彼の顔はすでに深い傷で覆われています。
手の代わりにハサミがあれば、これはそれほど悪くありません。 エドワードには多くの才能があります。たとえば、驚くほど犬を切ることができます!
C ++カンファレンスに参加した後、よく似た考えを覚えます
。今回は
Going Native 2013の後
です。昨年は、新しい標準C ++ 11についての熱意と興奮がありました。 今年は、現実のチェックでした。 誤解しないでください:素晴らしい犬のヘアスタイルがたくさんありました(シンプルでエレガントなC ++コードを意味します)が、会議の主な部分は、怪我を防ぎ、偶発的な切断の場合に応急処置を提供する方法についてでした。
小さなホラーショップ。
C ++を使用しない方法について多くの議論があったため、次のような考えに至りました。これは、無能なプログラマーの問題に関するものではなく、C ++を使用することは一般的に間違っています。 ですから、もしあなたが言語の基本を学んでいるだけで、それを使おうとするなら、あなたは運命にあります。
C ++には、下位互換性、特にCとの互換性という言い訳があります。C++のサブセットとしてCを扱うことができます。C++は、実際のアセンブラ言語であり、日常のプログラミングでは、明らかに必要です。 盲目的にC ++に没頭している場合、純粋なポインター、
forループを考えていることになります。これはすべて、本当に愚かな仕事です。
これを行わない方法のよく知られた例は、
mallocを使用してメモリを動的に割り当て、メモリを
解放することです。
mallocはバイト数を取得してvoidへのポインターを返します。これをより便利なものにキャストする必要があります。メモリ管理用のより悪いAPIを考えるのは困難です。 以下は、本当に悪い(ただし、nullポインターでアクセスできない場合はほぼ正しい)コードの例です。
struct Pod {
int count;
int * counters;
};
int n = 10;
Pod * pod = (Pod *) malloc (sizeof Pod);
pod->count = n
pod->counters = (int *) malloc (n * sizeof(int));
...
free (pod->counters);
free (pod);
, ++ , , , .
++ «»
malloc free new delete. ++ :
struct Pod {
int count;
int * counters;
};
int n = 10;
Pod * pod = new Pod;
pod->count = n;
pod->counters = new int [n];
...
delete [] pod->counters;
delete pod;
, ,
new , . ,
new ( ? :
n?). , - :
class Snd { // Sophisticated New Data ( POD)
public:
Snd (int n) : _count(n), _counters(new int [n]) {}
~Snd () { delete [] _counters; }
private:
int _count;
int * _counters;
};
Snd * snd = new Snd (10);
...
delete snd;
? ! .
++ ,
delete.
,
malloc new, : , — .
( ), STL- , . , value- . ! Value- - .
shared_ptr shared_ptr? ! , : move- rvalue-.
( !). ? . -, . . , , . ( , , ).
++
, ++.
. , . . , ++, , , , — - .
++ . — , , . , . , , .
, .
, . : , ( , ) . ++, .
, 10 « » ++ ( ). , ++, . ++ : mutation, , , .
, — ++ .
, ( ) .
, , , ++ 10 .
" , , ++. , , .
( , ), . (. ). , , 20 . ++ . , ++.
, , , . , .
? ++ — . , , : , , . , . , ++ , , , ++ . : , ( ++ ).
, , ( , shared-) .
, . , shared- , . , , , , - , , , . , shared-, , , , .
shared_ptr , , . ! , ! : . ++.
8 , :
« !»++ . 2005 . Posix- 1995 . Windows 95, — Windows NT. ++ 2011 .
++ 11 . : , , . , ++ Java ( , Java ). , ++ , . ++ , , .
C++11 , , , . , - , , . — STM (Software Transactional Memory), . STM, , STM . STM , ++ .
task-
future ( , deprecated- ++ 14). task- , . , . . . task- , , futures ( ), task' , , , GPU.
Microsoft PPL Intel TBB (, Microsoft AMP ).
, , , 2015 . , , ++ . ++ , , . : data race. — , D.
++ , , . , . ++, , , . , - .
D, , ( ). D — . D . , . : , , .
++ , - .
, - — , .
: , GPU. ++. , , , . —
«Parallel and Concurrent Programming in Haskell». ++, , .
, ++ . . , GPU - .
:
- Bartosz Milewski, “Resource Management in C++,” Journal of Object Oriented Programming, March/April 1997, Vol. 10, No 1. p. 14-22. unique_ptr, auto_ptr, . auto_vector, auto_ptr.
- C++ Report in September 1998 and February 1999 (auto_ptr ).
- C++ in Action (still auto_ptr), Addison Wesley 2001. , .
- Walking Down Memory Lane, with Andrei Alexandrescu, CUJ October 2005 ( unique_ptr)
- unique_ptr–How Unique is it?, WordPress, 2009