【IT】C/C++に死を [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001ノチラ ★
垢版 |
2017/07/17(月) 15:40:31.76ID:CAP_USER
プログラミング言語Cはおぞましい。いや、素晴らしくもある、もちろん。私たちの住む世界の大部分はCの上に作られている。そしてほとんどのコンピュータープログラミングの基礎をなしている、歴史的にも、実質的にも。Xavier Nielの革新的な “42” スクールのカリキュラムが、学生に標準Cライブラリー関数を一から書き直させることから始まるのはそれが理由だ。しかしCは、C自身が作り上げたこの世界にとってもはやふさわしくない。

「おぞましい」と言ったのは「悪い」ということではなく「畏敬の念を起こさせる怖さ」という意味だ。Cはモンスターになってしまった。あまりに多くの大砲を与えたためにユーザーは自分の足を撃ち抜いてしまう。豊富な体験が教えるところによると、セキュリティーホールにむしばまれることなく大量のCコードを書くことは非常に困難であり「事実上不可能」になりつつある。2年前、私は最初の「Cに死を[Death To C]」の記事にこう書いた:

原理上、ソフトウェアが成長し進化して成熟度を増すほど、セキュリティー脆弱性は複雑になっていく。しかし、C/C++で書かれたソフトウェアにそれは当てはまらない。バッファーオーバーフローや宙ぶらりんのポインターのために壊滅的セキュリティーホールが生まれる事態は、繰り返し繰り返し起こっていて、昔も今も変わることがない。

私たちはこれ以上巨大な口を開けたセキュリティーの盲点を放っておくことはできない。引退して別の言語に取って代わられる時期はとうに過ぎている。問題なのは、ほとんどの近代言語はCを置き換えようという意欲すら持っていないことだ。〈中略〉どの言語もCが最も得意とすることに長けていない ―― 例えばシステムの奥深くまで掘り下げてマッハスピードで動くこと。

あなたがデベロッパーなら、私の言いたいことはもちろんわかっているだろう。Rustの長所を並べることだ。実際これは有望なC/C++の後継だ。2年前に私は、新規の下層レベルコーディングをCではなくRustで書くことを勧めた。つまるところ、穴に関して何よりも大切なのは、掘るのをやめることだ。

Security tips when programming in C (2017 edition):
1) Stop typing
2) Delete what you've already typed
[Cでプログラミングする際のセキュリティー心得(2017年版):
1)タイプするのをやめる
2)すでにタイプしたものを削除する]

今私は、エンジニアが既存のCコードをリファクタリングするとき、特にパーサーなどの入力ハンドラーを書き直すとき ―― ゆっくりと、すこしずつ ―― Rustで置き換えるように真剣に勧めている。
http://jp.techcrunch.com/2017/07/17/20170716death-to-c/
0468名刺は切らしておりまして
垢版 |
2017/07/19(水) 08:40:10.01ID:I/0nl/ZS
c++は別格過ぎ
世界標準
0471名刺は切らしておりまして
垢版 |
2017/07/19(水) 10:19:02.47ID:NKbS248t
C++は、Cと比べるとちょっと高級すぎるんじゃないかな
0472名刺は切らしておりまして
垢版 |
2017/07/19(水) 10:52:15.26ID:Nk2e39Ja
>>470
そうおもう。
でも、javaは無いんだよね。
ガベージコレクションを正しく走らせるために、
そのクラスが終わったと思われるタイミングで、
明示的に変数にnullを設定しなければならない。
逆に不便。
0473名刺は切らしておりまして
垢版 |
2017/07/19(水) 12:40:51.40ID:EDdbD2Qg
ポインタを理解できない連中には豚に真珠だけど、スマートポインタを
使えば、リソースの開放忘れとかも容易に防止できるしな。
0474名刺は切らしておりまして
垢版 |
2017/07/19(水) 13:08:46.19ID:lqVOdHRp
>>465
Linuxの開発者のライナスはCは好きだがC++は嫌いだと公言している
ライナスもCを理解してないというのか?
0475名刺は切らしておりまして
垢版 |
2017/07/19(水) 13:10:34.48ID:lqVOdHRp
>>473
スマートポインタの仕組みをどう実装してるか知らない奴には豚に真珠だけど、
メモリも負荷も余分にかかるんだよ
0476名刺は切らしておりまして
垢版 |
2017/07/19(水) 15:18:06.62ID:ooBWfO76
>>475
スマートポインタを使う事でメモリーも負荷も余分にかかってしまうような場合は、
そもそもスマートポインタを使う必要ないのではないかと。
0477名刺は切らしておりまして
垢版 |
2017/07/19(水) 17:35:50.00ID:KoS/v05x
>>454
いろいろ困ってそうなんだけれども
例外、並列処理となると、まずは例外安全性保障かな?
RAIIクラスを導入するとスッキリするかもね
0478名刺は切らしておりまして
垢版 |
2017/07/19(水) 18:15:23.48ID:lqVOdHRp
>>476
いやいやポインタをdeleteしないことによるメモリリークを防げる
C言語はその辺りをプログラマがめんどうみないといけない
なので、めんどうみれるプログラマはスマートポインタなんて使わなくてよい
そしてC++も必要ない
Cで十分だとなる
0479名刺は切らしておりまして
垢版 |
2017/07/19(水) 18:16:11.97ID:h1PLgWV4
ポインターが諸悪の根源なら、ポインターの機能を完全に取り除いた
新しいC言語を作ればいいんじゃないの?
0480名刺は切らしておりまして
垢版 |
2017/07/19(水) 18:21:21.03ID:2DO6o6/q
だから変数の実体をクラスでWrap(隠蔽)してメモリリークしそうなアクセス要求にたいして例外ヴん投げる親切な言語が重宝されてると

(´・ω・`)b
0483名刺は切らしておりまして
垢版 |
2017/07/19(水) 18:53:00.90ID:Nk2e39Ja
>>481
C++を使いだしたら、C のみといわえると使いにくい。
stl(Standard Template Library)は、かなりいいよ。
コンテナ(string、vector、map など)をつかえば、
ほとんどポインタ操作の必要ない。
アルコリズムもあって、自分で実装しなくても使えるので便利。
0484名刺は切らしておりまして
垢版 |
2017/07/19(水) 18:54:27.59ID:lqVOdHRp
>>481
そして、面倒を見られる人もCで十分っていう
中途半端に面倒を見る必要性を知ってるけど面倒見られない奴がスマートポインタとかガベコレに頼る
0486名刺は切らしておりまして
垢版 |
2017/07/19(水) 19:00:11.20ID:StleNxep
>>478
C/C++で開発やってると不具合ってほぼほぼポインタ周りのトラブルに収束するのよね。
しかもポインタ持ってたのに、稀に他のスレッドから開放されちゃうケースがあるとか
そういう再現が面倒なのばかり。
0487名刺は切らしておりまして
垢版 |
2017/07/19(水) 19:01:34.37ID:Nk2e39Ja
>>486
それは、作りが悪い。
0489名刺は切らしておりまして
垢版 |
2017/07/19(水) 19:06:59.96ID:1YfqNR9T
>>486
素直にスマートポインタ(std::shared_ptr)を使いなさい。
0491名刺は切らしておりまして
垢版 |
2017/07/19(水) 19:09:04.26ID:Nk2e39Ja
androidは、javaのみと思っているかもしれないけど、
スピードが要求される部分は、jniでつないで、
c/c++で書かれているんだよ。
0492名刺は切らしておりまして
垢版 |
2017/07/19(水) 19:10:07.10ID:+uAX7/BE
使いこなせないロートルと、若年性痴ほう症のゆとりは見苦しいと、
50代専門卒が言ってみる。
0493名刺は切らしておりまして
垢版 |
2017/07/19(水) 19:20:01.95ID:eUaTx5QN
つか、unique_ptrならそもそもオーバヘッド無いから、敢えて使わない事に全く意味はない
0494名刺は切らしておりまして
垢版 |
2017/07/19(水) 19:25:19.52ID:eUaTx5QN
C++だとライブラリ作る側でリソースの寿命まで面倒見れるようになるから、そういう意味でも本当に楽
リソース解放の関数呼べと仕様書に書いていても、それ守らないアホは必ず出てくるからね。

ただ、他言語含めたAPIとなると、マングリングの問題がでたり、スマポの管理が言語跨いで出来ない場合が多いから、APIだけCっぽくなってしまうこともよくある。
0495名刺は切らしておりまして
垢版 |
2017/07/19(水) 19:25:42.86ID:Nk2e39Ja
c/c++で書かれたプログラムが資産として、
たくさんあるのに、なぜこんなこと言うのか、わからない。
著者は、それらを捨てろと言いたいの?
0496名刺は切らしておりまして
垢版 |
2017/07/19(水) 19:31:55.87ID:SMFuukH9
>>「おぞましい」と言ったのは「悪い」ということではなく「畏敬の念を起こさ
>> せる怖さ」という意味だ。

 そんな意味は無いよ。
 C言語以前に、日本語を勉強しろ。
0497名刺は切らしておりまして
垢版 |
2017/07/19(水) 19:43:51.22ID:dwYu3aQn
>>486
ひとつのオブジェクトに多スレッドからアクセスって嫌な予感しかしないんだがw
スレッド間通信はセーフティなキューとかを用意せにゃあかんやろ
0498名刺は切らしておりまして
垢版 |
2017/07/19(水) 19:47:45.27ID:jvuZumax
R言語で書いてある処理をCに直せと言われたら、発狂しそう
0499名刺は切らしておりまして
垢版 |
2017/07/19(水) 20:12:18.10ID:KDZbxDXx
gnu cとclangのマングリングの差異は困るな
clangの対応がいつも遅いんだよな
あれ、今はんなことない?
0501名刺は切らしておりまして
垢版 |
2017/07/19(水) 20:17:03.70ID:XCvgSrOa
つーか、こんなマイナー言語、1年も経てば誰も覚えとらん。
0503名刺は切らしておりまして
垢版 |
2017/07/19(水) 20:20:09.93ID:gWiu3c9O
バイブルである「プログラミング言語C++ 第4版」をトイレに置いて毎日少しずつ読んでる
何年もC++やってるけど新たな発見が多すぎてなかなかションベンも出ない
0504名刺は切らしておりまして
垢版 |
2017/07/19(水) 21:10:35.39ID:31CJ7bDG
C言語と同様に速度も求めたいが
大規模でオブジェクト指向的に組みたいときは
C++使いたい場面もあるんだろうな
クラス単位でメモリアクセスの妥当性の確認とか
リソース解放をやっておけば、メモリ関係のトラブルも減らせるだろうし
vector やら string やら使えばメモリ関係の処理をライブラリにまかせられるし
0506名刺は切らしておりまして
垢版 |
2017/07/19(水) 21:18:43.10ID:cIMzthLC
>>503
それ、尿道結石か、膀胱ガンじゃないの?
0507名刺は切らしておりまして
垢版 |
2017/07/19(水) 21:23:06.63ID:lqVOdHRp
>>497
メッセージパシング機構ね
そしてこのアクター(スレッド)どうしのメッセージパシングこそが真のオブジェクト指向だと言われている
それを言語として実現してるのはErlang
ちなみにErlangはC言語で作られている
0508名刺は切らしておりまして
垢版 |
2017/07/19(水) 21:31:43.46ID:cIMzthLC
スレッド間の排他処理なら、セマフォか、クリティカルセクションだろ。
プログラムだけじゃなくて、脳みそに虫湧いてるんじゃないか?
0509名刺は切らしておりまして
垢版 |
2017/07/19(水) 21:38:43.44ID:pP50+eDL
>>466
Cを使うと言ってるのに
なんでガベコレがでてくるのか
わからんな

Cでガベコレが出来ないとでも?
0510名刺は切らしておりまして
垢版 |
2017/07/19(水) 21:40:15.57ID:mB7VMfOh
そうそう、マルチスレッドの強みはメモリ共有で性能追求できることだもんね
ちゃんとロックして同期するだけのカンタンなお仕事
0511名刺は切らしておりまして
垢版 |
2017/07/19(水) 22:47:22.14ID:AgpU8CVJ
しかし、ゆとりはスレッド切替のコストも知らない・・・
0512名刺は切らしておりまして
垢版 |
2017/07/19(水) 23:14:30.27ID:/Nopepqn
>>507
Erlangのベンチ見たんだが、8コア全て100%使い切れるんだけど、
C++の8倍遅くて実行時間は一緒だったという微妙な結果だった。

そりゃ、Erlangの採用進まないわな
0513名刺は切らしておりまして
垢版 |
2017/07/19(水) 23:37:27.17ID:/Nopepqn
>>511
シングルコアマルチスレッドでスレッド切り替えのコストがか狩るのはわかるんだが、
マルチコアマルチスレッドでのスレッド切り替えのコストってどうなんだろう?


もちろん、スレッドを分別なく作るんじゃなくて、コア数分のスレッドだけ作る
パイプラインみたいな構造にするとして
0518名刺は切らしておりまして
垢版 |
2017/07/20(木) 07:04:19.85ID:2LUooeay
だってループしかないだろw
0519名刺は切らしておりまして
垢版 |
2017/07/20(木) 07:10:14.51ID:0Q3wS7C3
「カーニハンの呪い」
64KのメモリしかないPDP11上でマルチタスクマルチユーザのOSを記述する為に開発した、最適化も出来ないC言語を、日本のお馬鹿なソフト会社はその必要も無いアプリ開発に適用し、ポインターも解らぬPGにカーニハンの教科書を与えて開発させた。
その結果アプリは予想外のエラーを吐き続け、殆どのプロジェクトは終了しないまま頓挫した。
これにより、日本で何兆もの費用と、IT発展の貴重な時間が失われた。
0520名刺は切らしておりまして
垢版 |
2017/07/20(木) 07:58:08.98ID:6ylJUamz
OSやデバイスドライバもかける、速度が速い、
ちょっとでもミスすればすぐにバグで動作異常になったりセキュリティホールができたりする

たとえるならF-1カーみたいなもんだな

問題なのは、それを一般アプリ開発にまで使用してる点

一般人がF-1カーで通勤したり買い物にいって事故おこしまくってる感じ
0522名刺は切らしておりまして
垢版 |
2017/07/20(木) 08:00:48.92ID:6ylJUamz
現代のPCやスマホ、とくにGUIアプリの標準開発環境がC++ってのが悪い
0523名刺は切らしておりまして
垢版 |
2017/07/20(木) 08:00:57.33ID:mv+ttJfq
>>512
どんなプログラムで比較したのか
逆にErlangにメリットがないならそもそもErlangで試したこと自体ナンセンス
そんでErlangのメリットって速さだけじゃなくて、並行プログラミングやリカバリの基盤が揃ってることとかもあるからねぇ
それらをC++で実装しようとすると結局Erlangを再発明することになるだけなんだよ
0524名刺は切らしておりまして
垢版 |
2017/07/20(木) 08:30:46.09ID:2LUooeay
>>522
標準がC++のプラットフォームなんて聞いた事無いが
0528名刺は切らしておりまして
垢版 |
2017/07/20(木) 09:39:31.35ID:2LUooeay
>>527
ああ、そうかも
0530名刺は切らしておりまして
垢版 |
2017/07/20(木) 10:14:22.31ID:bfAf6j8B
>>454
ビャーネ・ストロヴストルップの名前を見て、これを思い出した。
http://www.kh.rim.or.jp/~nagamura/misc/stroustrup-interview.html
自分もウソだと信じたい。
0531名刺は切らしておりまして
垢版 |
2017/07/20(木) 10:48:12.34ID:WYsdKL9v
>>517
>C言語野郎はなんでもループで回したがる

やっぱ再帰だよなw
0532名刺は切らしておりまして
垢版 |
2017/07/20(木) 10:56:41.52ID:2LUooeay
>>530
くそわろたw
0539名刺は切らしておりまして
垢版 |
2017/07/20(木) 21:32:57.42ID:CFTD9Zde
>>454
C++はコーディング規約のある仕事ならそれに従っていればいいんだが
独自にあれやりたいこれやりたいということであれば
Addison-Wesleyのprofessional computing seriesのC++のやつ、C++ in-depth seriesを一通り読まないと駄目

最低でもまとめ的な「C++ Coding Standards―101のルール、ガイドライン、ベストプラクティス」は必要
それでも並列やWinの構造化例外はカバーしてない
0540名刺は切らしておりまして
垢版 |
2017/07/20(木) 22:07:25.25ID:LQckaH5H
>>539
C++ in-depth series、残念ながら日本語訳はほとんど古書扱い
日本語訳が残念なものもあったね
ざっと見渡すと書斎に9冊(原著3冊)、残りは職場だな
0542名刺は切らしておりまして
垢版 |
2017/07/20(木) 22:32:56.79ID:fq48LG2E
技術書なんて英語力悲惨な自分ですら
英語の原書の方が圧倒的に分かりやすいからな
0543名刺は切らしておりまして
垢版 |
2017/07/20(木) 22:50:37.01ID:LQckaH5H
>>542
うん、もう少しがんばって訳して欲しい。
プログラム関連の本や企画書(これはダメだよ)で、
文中に出でくる関数名やメソッド名を翻訳してしまうのはやめてくれ
0544名刺は切らしておりまして
垢版 |
2017/07/20(木) 22:59:45.49ID:YMQh2GMH
ところでRust がC++と同等の実行速度というのは本当なのか
LLみたいにCで作ったライブラリを呼び出しといて速いとか言ってるんじゃないのか?
0547名刺は切らしておりまして
垢版 |
2017/07/20(木) 23:05:00.41ID:CFTD9Zde
>>544
応用によってはありうるでしょ
Javaだって応用によってはC/C++より速いし
JITのお陰で

でもRustで書いたライブラリが
OpenSSLの代わりが勤まるかというと違う
0548名刺は切らしておりまして
垢版 |
2017/07/20(木) 23:09:17.13ID:CFTD9Zde
>>546
ニセモンだよ
初期のC++にはテンプレートはないから
Hello, World!くらいで実行形式は増大しない
iostreamもまだない
C++、というかC with Classの初期の論文も読んだことない生半可な奴が書いたレベルの低い創作
0549名刺は切らしておりまして
垢版 |
2017/07/20(木) 23:10:23.08ID:VgKi1Vs3
セキュアな環境はどうやって構築されているのか考えたらナンセンスな主張だとわかろう
0551名刺は切らしておりまして
垢版 |
2017/07/20(木) 23:36:33.68ID:lit/bjAj
C++がいらない子なだけだろ
0552名刺は切らしておりまして
垢版 |
2017/07/20(木) 23:37:15.36ID:fq48LG2E
JITでもまともにコーディングしたC++に最適化かけたものより速くなるわけ無いじゃない。

JITで速くなるのは最内ループに分岐があるが実データでは常に同じ方向に分岐するようなコードとかでしょ。
でそれが実際にはループ外で判断できる場合じゃないとJITでも分岐削れないからそういうコードかけよとなる。
0553名刺は切らしておりまして
垢版 |
2017/07/21(金) 00:01:42.53ID:te9bd72i
>>552
ホットスポットはプロファイル取って
統計情報に基づいた最適化
アンローリングなんかも
やるかやらないかどの位するか
実測値に基づいてやる
0554名刺は切らしておりまして
垢版 |
2017/07/21(金) 00:02:41.97ID:+K8jfQZA
>>552
ムチはツミ
0556名刺は切らしておりまして
垢版 |
2017/07/21(金) 01:06:05.20ID:mGPsx4LD
C言語は、通信、制御系の雄者
雄叫びは定期的に挙げます
セキュリーホール・・・アフリカのサバンナで生息してるライオン君
0558名刺は切らしておりまして
垢版 |
2017/07/21(金) 01:38:21.62ID:Xu72XYXw
Cどころか、Bにも達したことがない俺はどうしたらいいんだ!!!
0560名刺は切らしておりまして
垢版 |
2017/07/21(金) 01:48:25.49ID:Xu72XYXw
>>559
そんなことしたら、俺C++になっちまうだろ
手がつけられなくなるぜ
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況