アカウント名:
パスワード:
クラスが使えるCとか、javaより速いjavaみたいな扱いだから、名前や使い方が似ているだけのあんまり筋の良くない機能が乱用されている気がする。ポインタとかnew演算子とか、ポインタは大抵参照で代用できるし、メモリリークするのはdeleteを忘れたのが原因ではなくて、不用意にnewを使ってしまったのが原因のはず、可変長配列は標準で用意されているし、make_sharedを使えば、shared_ptrを使う時にnewを使う必要はない。
名前や使い方が似ているだけのあんまり筋の良くない機能が乱用されている気がする。
C++にそれは言ってやるな・・・。C++は今ある洗練された多くの言語のおばあちゃんみたいなもんだよ。ネイティブ言語の後継者が育たないので未だに現役張ってるだけで。
C++の立ち位置すごくよく分かった気がする…
危ない使い方は禁止、LINTチェックではじいて使うならC++でも幸せになれますか?
そして、育ってくれるならどの言語の素性がよいと思いますか?(宗教論争になると思うので個人的意見で)
それはMT車で「クラッチペダルを踏むな」と言ってるのに近い。書く側が理解するんだ。
そういう「根性でなんとかする」って考えは原則ダメだと思うんです。
もちろん根性も必要なんですけど、それだけではなくてCppCheckとかValgrindとか静的・動的なチェックツールの手に頼ったっていいでしょう?こいつらだって完璧ではないけど、使わないよりはずっとましです。
根性じゃなくて技術だよ。いわゆるアプリだけがソフトウェアだと思ってる?
C++ってのはマニュアルなのが特徴なの。言語仕様では低レベル操作が隠蔽されていないからこそ低レベルな応用にも使えるんだよ。逆に(#2468059)の言う「筋の悪い機能」が使えなかったら低レベルな応用には全く使えなくなる。だからこそ「クラッチペダルを踏むな」ってのと同じなんだよ。
それに、Javaでも実体と参照の区別程度はできてないとハマるよ?例えばstaticな参照とか、Androidの破棄されずに使い回されるイベントのインスタンスとかね。だから余計にそれは根性じゃなくて技術。
あえて言うならhaskellじゃない、夢のない話をするとgccもclangもC++で開発されている時点で、C++の延長線上の言語しか無理なんじゃないかな。プログラミング言語のパフォーマンスなんて、その言語のコンパイラの開発にどれだけリソースが振られたかの話でしかない。
メニーコア化が進んで、並列処理と相性のいい関数型言語のパフォーマンスを向上させたほうが効率的となれば、C++は過去の物になるかもしれない。まあ、永遠に来ない可能性もあるけどさ。
>ネイティブ言語の後継者が育たないので未だに現役張ってるだけで。
さすがに自己矛盾したコメントじゃなかろうか。C++の役割はまさに「ネイティブ言語」である点にあるわけで。そして、その意味で「後継者」、つまりライバルは現在に至るまで不在だし、それはC++がよくできているからだろう。
C++は複雑な言語だけど、複雑さには理由がある。C++の目標は、「コンピュータの低レベル機能へのアクセスを実現すること」、同時に「静的に型付けされたオブジェクト指向設計をサポートすること」、そしてそれらを「なるべくポータブルに」かつ「効率的に(最小限のオーバーヘッドで)」実現することだ。これらすべてを同時に実現するために複雑になっているが、これらすべてが必要とされる分野というのが世の中にはあって、例えばJavaのランタイムがそうだ(まあCで実装されているものもあるけど)。結局、JavaのプログラムはC++で書いたランタイムの上で動いている。単に設計が古いとか、設計者が馬鹿だったという理由で複雑なわけじゃない。元コメや元々コメなんかは、ドライバとか、言語のランタイムのような低レベルなコードを書いた経験がないからC++の価値がわからないんだと思う。「ポインタは大抵参照で代用できる」とか、明らかにわかっていない。ガベージコレクタを実装することを考えてみればよい。
>「効率的に(最小限のオーバーヘッドで)」実現することだ。
C++11でも、これは言えるんでしょうかねえ。
make_sharedを使えば、shared_ptrを使う時にnewを使う必要はない。
えっ?C++11っていつの間に普及したん?
コードを書く人間の側に普及したと言えるかどうかはともかく、Windows (VC++)、Unix系 (GCC)、Mac OS X/iOS (Clang)くらい世界であれば、コンパイラのほうはわりと浸透していると思う。それ以外の世界はよく分からないが、GitHubのリポジトリを対象にした調査なのだから、おおむね実行環境もそのあたりが主なところだろう。
そいや vc2013 でtemplate aliases とか variadic template とかc++11 のかなりの部分に対応しましたね。
しかし、mallocなしでnew->不用意なnewという個別のフレーズを繋げてしまうとC++の魔窟っぷり(魅力でもあるが)が顕著になる気がする
# メモリについてもっとヤバくなってるんじゃないか、と思わないでもない
関数に変数を渡すときに値渡しなのか参照渡しなのかが関数側の宣言見ないとわからないのはなんとかしてほしかった。
まあそれでこりたからC#ではref必須になったんだろうけど。
C++をしらない俺A、自称C++をしっているBA「このmallocで確保したメモリ、どのタイミングで解放したらいいですか?」B「拡張子みてくださいcppとなってるでしょC++ですよ、C++は自動でやってくれるんです」A「え?」B「もっと勉強してください」
自分がわかってないことが、わかってない人も結構いるんでないの?
vector使えって意味じゃないの
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
にわかな奴ほど語りたがる -- あるハッカー
C++って (スコア:0)
クラスが使えるCとか、javaより速いjavaみたいな扱いだから、
名前や使い方が似ているだけのあんまり筋の良くない機能が乱用されている気がする。ポインタとかnew演算子とか、
ポインタは大抵参照で代用できるし、メモリリークするのはdeleteを忘れたのが原因ではなくて、不用意にnewを使ってしまったのが原因のはず、
可変長配列は標準で用意されているし、make_sharedを使えば、shared_ptrを使う時にnewを使う必要はない。
Re:C++って (スコア:1)
名前や使い方が似ているだけのあんまり筋の良くない機能が乱用されている気がする。
C++にそれは言ってやるな・・・。
C++は今ある洗練された多くの言語のおばあちゃんみたいなもんだよ。
ネイティブ言語の後継者が育たないので未だに現役張ってるだけで。
Re:C++って (スコア:2)
C++の立ち位置すごくよく分かった気がする…
危ない使い方は禁止、LINTチェックではじいて使うならC++でも幸せになれますか?
そして、育ってくれるならどの言語の素性がよいと思いますか?(宗教論争になると思うので個人的意見で)
Re:C++って (スコア:1)
それはMT車で「クラッチペダルを踏むな」と言ってるのに近い。
書く側が理解するんだ。
Re: (スコア:0)
そういう「根性でなんとかする」って考えは原則ダメだと思うんです。
もちろん根性も必要なんですけど、それだけではなくてCppCheckとかValgrindとか静的・動的なチェックツールの手に頼ったっていいでしょう?こいつらだって完璧ではないけど、使わないよりはずっとましです。
Re:C++って (スコア:1)
根性じゃなくて技術だよ。
いわゆるアプリだけがソフトウェアだと思ってる?
C++ってのはマニュアルなのが特徴なの。
言語仕様では低レベル操作が隠蔽されていないからこそ低レベルな応用にも使えるんだよ。
逆に(#2468059)の言う「筋の悪い機能」が使えなかったら低レベルな応用には全く使えなくなる。
だからこそ「クラッチペダルを踏むな」ってのと同じなんだよ。
それに、Javaでも実体と参照の区別程度はできてないとハマるよ?
例えばstaticな参照とか、Androidの破棄されずに使い回されるイベントのインスタンスとかね。
だから余計にそれは根性じゃなくて技術。
Re: (スコア:0)
あえて言うならhaskellじゃない、
夢のない話をするとgccもclangもC++で開発されている時点で、C++の延長線上の言語しか無理なんじゃないかな。
プログラミング言語のパフォーマンスなんて、その言語のコンパイラの開発にどれだけリソースが振られたかの話でしかない。
メニーコア化が進んで、並列処理と相性のいい関数型言語のパフォーマンスを向上させたほうが効率的となれば、
C++は過去の物になるかもしれない。まあ、永遠に来ない可能性もあるけどさ。
Re:C++って (スコア:1)
>ネイティブ言語の後継者が育たないので未だに現役張ってるだけで。
さすがに自己矛盾したコメントじゃなかろうか。C++の役割はまさに「ネイティブ言語」である点にあるわけで。
そして、その意味で「後継者」、つまりライバルは現在に至るまで不在だし、それはC++がよくできているからだろう。
C++は複雑な言語だけど、複雑さには理由がある。C++の目標は、「コンピュータの低レベル機能へのアクセスを実現すること」、
同時に「静的に型付けされたオブジェクト指向設計をサポートすること」、そしてそれらを「なるべくポータブルに」かつ「効率的に(最小限のオーバーヘッドで)」実現することだ。
これらすべてを同時に実現するために複雑になっているが、これらすべてが必要とされる分野というのが世の中にはあって、
例えばJavaのランタイムがそうだ(まあCで実装されているものもあるけど)。結局、JavaのプログラムはC++で書いたランタイムの上で動いている。
単に設計が古いとか、設計者が馬鹿だったという理由で複雑なわけじゃない。
元コメや元々コメなんかは、ドライバとか、言語のランタイムのような低レベルなコードを書いた経験がないからC++の価値がわからないんだと思う。
「ポインタは大抵参照で代用できる」とか、明らかにわかっていない。ガベージコレクタを実装することを考えてみればよい。
Re: (スコア:0)
>「効率的に(最小限のオーバーヘッドで)」実現することだ。
C++11でも、これは言えるんでしょうかねえ。
Re: (スコア:0)
Re: (スコア:0)
make_sharedを使えば、shared_ptrを使う時にnewを使う必要はない。
えっ?C++11っていつの間に普及したん?
Re: (スコア:0)
コードを書く人間の側に普及したと言えるかどうかはともかく、Windows (VC++)、Unix系 (GCC)、Mac OS X/iOS (Clang)くらい世界であれば、コンパイラのほうはわりと浸透していると思う。それ以外の世界はよく分からないが、GitHubのリポジトリを対象にした調査なのだから、おおむね実行環境もそのあたりが主なところだろう。
Re: (スコア:0)
そいや vc2013 で
template aliases とか variadic template とか
c++11 のかなりの部分に対応しましたね。
Re: (スコア:0)
しかし、mallocなしでnew->不用意なnewという個別のフレーズを繋げてしまうとC++の魔窟っぷり(魅力でもあるが)が顕著になる気がする
# メモリについてもっとヤバくなってるんじゃないか、と思わないでもない
Re: (スコア:0)
関数に変数を渡すときに値渡しなのか参照渡しなのかが関数側の宣言見ないとわからないのはなんとかしてほしかった。
まあそれでこりたからC#ではref必須になったんだろうけど。
Re: (スコア:0)
C++をしらない俺A、自称C++をしっているB
A「このmallocで確保したメモリ、どのタイミングで解放したらいいですか?」
B「拡張子みてくださいcppとなってるでしょC++ですよ、C++は自動でやってくれるんです」
A「え?」
B「もっと勉強してください」
自分がわかってないことが、わかってない人も結構いるんでないの?
Re: (スコア:0)
vector使えって意味じゃないの