41W69WGATNL

1: 2017/07/17(月) 15:40:31.76 ID: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/

93: 2017/07/17(月) 17:26:21.87 ID:bSozD3Dt
>>1
>学生に標準Cライブラリー関数を一から書き直させることから始まる

これ学生にやらせるにはいい課題だな
Cは残って欲しい(し、多分残るでしょ)が、C++はもうオワコンだろ、正直。

何に使うんだ?奇妙・キテレツな進化をしてるC++なんて
使うとしたら「ベターC」か。stringとかlistとか便利だし
でもそうするとSTL必須になるし、ダークサイド一直線w

100: 2017/07/17(月) 17:37:14.60 ID:1YGwJ5ho
>>93
確かに、ベターCとして使うことの方が多い。

C++の入門書を見ると、やれクラスだ継承だポリモーフィズムとなるが、実際のところあまり使わなない。
継承はどうしてもクラスの包含では解決できないときに渋々使う感じ。

なので、C++はstringとかSTLのために使ってる。配列のインデックス管理とか面倒だからね。
あと、どこでも変数宣言ができるのも地味だけど便利。

321: 2017/07/18(火) 09:25:51.72 ID:PM90FCLs
>>1
リンク先で言われているバッファオーバフローやポインタの問題は、
最近のC++ならほぼ解決しているけどな。正直生ポインタなんて最近使わないぞ。

3: 2017/07/17(月) 15:45:09.91 ID:MirfapV3
よし!いよいよCOBOLの時代だな!

426: 2017/07/18(火) 22:48:33.16 ID:x89lyLgn
>>3
お・れ・に~ まかせとけ~っ!!

10: 2017/07/17(月) 15:53:19.92 ID:buRXZ7gP
組み込みだと未だにCかよくてC++なんだよな
この世界で働いてると世の中から取り残されている感覚に陥る

37: 2017/07/17(月) 16:26:03.53 ID:+5bdNfS0
>>10
日本は新しいことに恐怖心があるからね
そのくせに非セキュアなコードを放置する

325: 2017/07/18(火) 09:47:29.44 ID:BfNN6U5+
>>37
知ったかだなぁ
文化的な背景なんて関係ねーよ

以下3点が理由だ
・(組み込み環境で主流の)linuxやtronのデバイスドライバがCでしか書けないから
・(言語的に単純な)Cが一番早く開発環境揃うから
・Javaとかも動かせなくはないけど(スマホとかのリッチな環境でも無けりゃ)クソ遅い&重いから

14: 2017/07/17(月) 16:01:02.52 ID:4JxsjHBy
 ,;:⌒:;,
8(・ω・)8 Cは構造化されたアセンブラでありながら
      多彩なデータ構造までも簡単に実現できる
      非常に優れて言語だと思います

173: 2017/07/17(月) 19:51:49.68 ID:jaiY+qDt
>>14
これはハゲしくハゲ
こんなハゲな意見にハゲしたのは久々

最後にもう一度、ハゲしく同意

15: 2017/07/17(月) 16:02:03.44 ID:1e/YiDug
カーニハン アンド リッチーの本は本当に入門用として優れてるのか疑問。

あれは初心者には難しいで。

17: 2017/07/17(月) 16:05:07.01 ID:+A69iEC4
>>15
あの時代に、学ぼうっていう人向けの解説書けんデファクト仕様書

28: 2017/07/17(月) 16:14:27.82 ID:Vo0URanL
>>15
入門ではないけど、できてるつもりの人が読むと目から鱗な本。

110: 2017/07/17(月) 17:58:04.44 ID:p7rUxtFp
>>15
持ってたよ
今は実家かな?

197: 2017/07/17(月) 21:00:46.03 ID:iqw130Tu
>>15
プログラミングの経験が全くない人には向かないかもしれない。
しかし他の言語やアセンブラの経験があれば大変優れた入門書だと思う。
俺はあまりの分かり易さに衝撃を受けた。それでいて言語仕様の非常に細かい
ところまで網羅されている。
他のプログラミング言語の入門書もあんな風に書かれていたら楽なのにと思う。

374: 2017/07/18(火) 19:30:44.21 ID:xeeAz09+
>>15
簡潔にして明瞭、まさに聖典
アレを読んで理解できない奴が他の初心者本読んでも、理解したつもりにされているだけで本質はなにも理解できてない

19: 2017/07/17(月) 16:06:36.08 ID:ifoYWyAt
pythonとJAVAのSwiftとPHPくらいだな

20: 2017/07/17(月) 16:07:35.39 ID:UuqOoLVE
K&Rなんて古典的な文法で読みづらいゴミクズ。ANSIだろ。

286: 2017/07/18(火) 04:40:10.12 ID:9f0oMI4m
>>20
ANSI改訂版がある

29: 2017/07/17(月) 16:15:05.85 ID:4JxsjHBy
 ,;:⌒:;,
8(・ω・)8 エラーチェックに引っかからないオーバーフローを考えずポインターも意識できないとか
      C言語が使えないダメダメな人ってことだな

49: 2017/07/17(月) 16:33:56.04 ID:av6tGE7Y
ポインタ操作なんてセキュリティ上行ってはならない

52: 2017/07/17(月) 16:38:00.96 ID:rcvoDSkz
>>49
ポインタが使えないやつは、素人。

86: 2017/07/17(月) 17:06:29.61 ID:AQNv5XBE
適材適所
勝手に好きなの使ってろよ
何言ってんだこいつは

101: 2017/07/17(月) 17:39:39.99 ID:1YGwJ5ho
ハードウェア設計をやってると、C以外の高級言語なんて使う機会は皆無。
ただし、高位合成の関係でC++というかSystemCは使うが。

118: 2017/07/17(月) 18:10:00.62 ID:BIJ46XXK
cでもcppでもいいけど、昔ながらの職人コード書くのはやめてほしい。
cが最強とか言う人って、関数型言語はおろか、オブジェクト指向すら学ぼうとしないし、スマートポインタとかラムダとかを学ぼうとしない。

119: 2017/07/17(月) 18:11:07.28 ID:Y5nCLATQ
 
いまのC++が目指しているのは
「何でもできる究極のコンパイル言語」

これは「生き残り戦略」

だから全部入りで研究者レベルにも不満を抱かれないようにしている
逆に肥大化し過ぎて素人レベルには理解不能な機能も多い

265: 2017/07/18(火) 00:29:06.28 ID:fpJU2uOc
>>119
古くい機能は徐々に無くしていってもいいかもね。

123: 2017/07/17(月) 18:18:27.87 ID:DBv/3Rni
カーネルをほかの言語で書き直すのは現実的じゃないよな

202: 2017/07/17(月) 21:11:17.87 ID:pbLzfM11
なんで組込み系は馬鹿にされるのか
MISRA-Cとかクソミソな言われようだもんな
アレはアレで意味があると思うけどな
バグが人命に関わるような場面では特に

215: 2017/07/17(月) 21:35:13.70 ID:reFE0eGc
Cは組み込み、あるいはライブラリ
C#はゲームでunity
C++はゲームでUE4
で生き残るんでは。。

rubyとかの方が死ぬでしょ。
ただ個人的にはgo langがポストCになって欲しいが。。

224: 2017/07/17(月) 22:35:58.88 ID:LV2CDvJb
COBOLより先に嫌がられているC

228: 2017/07/17(月) 22:51:02.61 ID:LkZj2sN2
>>224
cobolって手間暇掛かるだけで基本cよりはるかに簡単だもの。
ぶっちゃけcobolは他の言語+sqlでいつでも書き換え可能だが
cみたくなんでもできちゃう言語はかなりどうしようもない。
c++みたくフツーのプログラマが全く触らない標準ライブラリから派生したツールなんてもっとどうしようもない。

230: 2017/07/17(月) 22:53:37.62 ID:1e7Ax5fg
>>224
COBOLは20年前から終わった言語扱いだから

233: 2017/07/17(月) 22:56:39.96 ID:6o/SFlQv
大学のプログラミングの授業で入門者相手にCを教えるのはやめるべき
PythonとかJSから初めて、Cは上級者向けに選択科目で教育すべきだな

234: 2017/07/17(月) 22:59:31.90 ID:LkZj2sN2
>>233
ぶっちゃけ組み込み以外の世界じゃもう殆ど意味の無いアセンブラコンパイルだのポインタだのの要素弾けばcほど分かりやすくて強力な言語未だにないぽいのがなぁ

241: 2017/07/17(月) 23:09:03.32 ID:M+B+pZna
>>233

同意。Pythonは習得が簡単な言語というのが売りだしね。
学習用に開発されたハードウェア「ラズベリーパイ」もパイソン使う前提で「パイ」の
文字を付けたわけだし。

Pythonはライブラリも充実しているから、専門ジャンルのプログラミングに
すぐに使えるのもイイところ。

247: 2017/07/17(月) 23:21:33.38 ID:M+B+pZna
>>240
Cは、覚えるのは簡単だけど初学者にとって真に理解するのが大変だと思う。
ポインタもそうだし、メモリリークなどもそう。
間違えるとすぐに暴走するし、初学者が自力でデバッグするのが難しい。
例えばでいうと
int add_five(int a)
{
int ret = a;
return ret + 5;
}
こんなコードを書くと、自動変数を返しているので動いたり動かなかったりして
すごーく悩む。挙句の果てにコンパイラのバグとか言い出す。
これがダメな理由をまともに説明しだすと、スタックの説明やらヒープの説明やら
変数がどこに確保されるかの話に直結する。

Pythonは、インタープリターもあるので少しづつ動作を確認することができるし
今時の言語なのでCのようなメモリリークは起きない。
わりとすぐに的確なエラーを返すので学習しやすい。

と、俺は思っている。

252: 2017/07/17(月) 23:33:15.47 ID:LekzsGXF
>>247
それが動かないってどんな環境だよ

254: 2017/07/17(月) 23:37:15.04 ID:M+B+pZna
>>252
ご指摘ごもっともデス。(ノ≧∇≦)ノ⌒・。.

300: 2017/07/18(火) 06:56:51.63 ID:Or+0ibl/
>>247
&でアドレスを返して、呼び出し元でポインタアクセスしてみると、
スタックにあったローカル変数が消えていてmemory acccess violationになるという話でないんか?

引数も返り値も値渡しで問題が起きない気が…

243: 2017/07/17(月) 23:15:19.80 ID:e/WUxVth
要件やプログラマスキルにあった言語を使えよ
C/C++が怖いなら使わなければいいだけ
実装がヘボいのを言語のせいにするな

管理人コメント
よくこの言語はもうすぐ使われなくなるみたいな話題は定期的に出ますね。
まあ、プログラミングを教えるときにいきなりC言語でポインタとかやらせるのは
どうかと思いますね。