【IT】C/C++に死を [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
プログラミング言語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/ アセンブラを書ける層って年々減っていって、ロストテクノロジーになったりしないのかい? システムリプレイス業務で
旧システムにアセンブリ言語部分があって
そのアセンブラも無くなっているアルアル >>634
マイクロコードは、普通プログラマが扱うものじゃないよね。 >>637
うん。だからプログラマは知らなくて良いのよ >>636
やっぱりある程度抽象化された言語で書くべきなんだな >>635
ならないよ。アセンブラが好きな人なんて元から少ないし。
Cが出たらCに乗り換えたのが多いでしょ。
よほど重要な場面でしか、asm は使わないし、既にやってくれる人がいるから大丈夫。 >>638
言ってることが矛盾
マイクロコードであれろうがなんだろうが、機械語の命令は1個。 >>643
ふむ
機械語とマイクロコードの違いは? >>624
機械語は0/1しかねーよ
お前は0と1だけでコード組めるのか? >>640
大学の時、プログラム実験を担当した助手のおっさんがアセンブラヲタで、(アセンブラでプログラムを書いてみよう)という課題が出てたのを思い出した
しかも、参考サイトがそのおっさんのfc2ブログ
みんなアセンブラなんて知らないから、約2時間の実験で何度もアクセスするよな
一人が10回アクセスしたとして、約80人が受講してるので2時間で800アクセス( ゚Д゚)ウマーだったらしい それを言ったら全ての電子情報は0/1しかないと言えなくもない >>647
大学のアセンブラの授業はCをアセンブラのコードに変換して提出してOKだったな >>646
8ビットCPUなら機械語レベルで16進数の命令を覚えてるのもいそうだな。
ハンドアセンブルもザラじゃなかったし。 >>636
アセンブラくらいなら新たに書き起こせばいいやん >>650
2進数で覚える
Z80なんかは頭2桁で演算の種類、3桁x2がレジスタ名とかな
命令の法則から類推される非公式な裏技が使えたり >>651
しょうがないので
レジスタ名を変数にして
C言語で書き直した遠い思い出
ADD A,B ってどっちだよw しかし現状のアーキテクチャを使い続ける以上、
人類は機械語からは絶対に離れられない
量子コンピュータが出来ても、やはり別種の機械語を使う可能性すらある >>632
マクロもあるしメモリセクションに関するディレクティブもあってリンカ側で再配置するってな
一つの命令に複数のニーモーニックを割り当てる例もあるのでそちらの方でも必ずしも1対1じゃないな
Cの仕様内で何でも出来るわけじゃない。例えば0アドレスへの読み書きはできないしアトミックな処理も書けない
CPUの命令モードを変える処理とかもそう
そういうところじゃアセンブリ言語を使うしかないよ。変な拡張をして出来るようにしたものもあるけどイレギュラー
OSだったりツールの類、小物の組み込みとかの用途だね perlもrubyもphytonもjavaも、C/C++で書かれている >>654
これ、環境によって違うんじゃなかったか? C言語って昔ながらの標準入出力関数がセキュリティーホールの元凶になってて
使用が非推奨になってるのがたくさんあるな
最近の規格では存在自体が削除されてたりする >>659
> 例えば0アドレスへの読み書きはできない
OSの制限と、言語仕様の区別が出来ない人?
つ
*(BYTE *)0UL)=(BYTE)0xAA;
で普通にいけるが? >>512
いずれにせよ、Rust はあり得ない。 >>656
もうあるよ
QMLとか
高階量子プログラミング言語とか >>660
phytonはそうなのかもしれんが
pythonにはpypyがある >>512
twitterも事業立ち上げには使ったけど
すぐ辞めただろerlangは というか今使ってるAndroidタブレットも
メインはC, C++, Java, Javascriptで
Rustなんて一行もないはず C以外の高級言語で書かれたOSという話であれば
PL/Iで書かれたMulticsやPASCALで書かれたApollo ComputerのAEGISなどがあるらしいね >>635
大学や専門学校の電子系の学科ではまだアセンブラの授業があるよ >>659
ARMだとジャンプ命令やサブルーチンコール命令でジャンプ先がジャンプ可能な範囲に届かないときに
リンカが勝手にベニアコードを追加してくれるな
AArch64、AArch32どちらでもそういう仕様になってるようだ JavaScriptで38,000ステップ書ききった俺様ならなんでもOK >>678
無駄な改行を削除して1ステップにしよう >>665
Cの仕様上ヌルポインタアクセスになる
ならないコンパイラは仕様違反 >>681
べつに、ぬるぽにアクセスしても構わないのでは? #undef NULL
#define NULL (void*)5 nullポインターはアドレス0を指している訳では無いから 要はバグを作ってしまう ハッカーに付け入る隙を与えてしまう
だからダメだ そういう論旨だよな いかにも外人らしいヒステリックな
意見だ バグもハッカーも絶対に許せない ならコンピュータを使うな
賢い人間ならそういう判断をする >>684
処理系依存だとしても
アドレス0を指してるんならそれでいいわけで。 >>685
現場の頑張りで対処療法的に解消しようとする日本人と
科学の力を使って根本から解決しようとする西洋人の差だと思ったけど。 >>686
ヌルポインタとして特別扱いするように仕様にはあるしそういう前提で多くのプログラムは書かれているんだわ
だから
ポータブルなプログラムは作れない
Cはアセンブラの代わりにはならない >>644
機械語 普通のプログラマーが認識できる最小単位
マイクロコード 普通のプログラマーは知らなくていい 知っていてもほぼ役に立たない
どうして、こんな話が必要なのかわからない
普通の人はマイクロコードが有ろうが無かろうが、どういう仕組みで動いているかを知ることはできないし、
知っていたとしても、機械語の命令が1lクロックで動くのか、あるいは、2や3なのかを知ることに還元される。 >>646
2進数でプログラムをするような非効率的なことはしないのが普通。
16進数か8進数でするものだ。
>お前は0と1だけでコード組めるのか?
大昔は、沢山の ON/OFF スイッチがパネルに付いていて、
アドレスを0/1で入れて、データを0/1で入れて、
となっていたが、そんな化石のような時代はあっという間に過ぎて、
16進数を0-Fまでキー16個で入れるようになったな。
0と1だけでコード組めるのか、と聞かれたら、YESだ。 >>653
だいたい、その通り。
OPコードの解釈も、あなたが知っているような法則で動いている。
記憶によれば、Z80は4ビットを2回計算して、8ビットの結果にしている。
ハーフキャリーフラグは、内部の4ビットの計算結果のキャリーが見えている。 >>654
> ADD A,B ってどっちだよw
原始的なCPUには、アキュムレータというものが明示的にある。これがAレジスタ。
このAレジスタに対し何かの操作をするのが基本なので、
A = A+B とわかる。
アキュムレータ以外に対して何かを操作することはできない。
合理的な設計をすれば、何でもできるアキュムレータ1個と、一時的に数値を格納するレジスタが数個という設計になる。
A,B,Cとなっているのは、だいたいそう。A,X,Yも。
レジスタが対象型な場合、D0からD4とか、R0からR7とかになっていることが多いんじゃないかな。
最近のだと、IA32だが、
オペコード 命令 説明
04 ib ADD AL, imm8 imm8 を AL に加算する。
80 /0 ib ADD r/m8, imm8 imm8 を r/m8 に加算する。
81 /0 iw ADD r/m16, imm16 imm16 を r/m16 に加算する。
00 /r ADD r/m8, r8 r8 を r/m8 に加算する。
03 /r ADD r32, r/m32 r/m32 を r32 に加算する。
となっている。このあたりは伝統的なものなんだろう。
IA64でもこのルールをほぼ踏襲。 >>659
アトミックな処理と言うと、セマフォあたりですかね。リード・モディファイ・ライト命令に行きつくわけですが。
C言語で書ける書けないの話もあるかと思うけども、最低限の実行環境の話もあるでしょうね。 accumulator前提ならADD Bが普通じゃね? basic、c、fortran、cpp、vb、perl、java、C#など色々な言語を仕事として使ってきたが、一度もc、cppが嫌だと思ったことない。 C縛りのプロジェクトでは
「あー、めんどくせーC++の機能使わしてくれー」とはよく思う この世はCに始まりCに終わる。
Rust?なにそれ、美味しいの? >>694
> accumulator前提ならADD Bが普通じゃね?
そのあたりは方言じゃないですかね。
モトローラは、ニーモニックの所に、レジスタ名入れるのあったかと。
ADDA Aレジスタにメモリの中身を足す
ADDB Bレジスタにメモリの中身を足す
ABA AとBを足してAに入れる
8080方式
ADD B 、あなたが言った形式
Z80方式
ADD A,B
Z80は8080の上位互換だけども、ニーモニックは変えている。
8086方式
ADD AL, -3 等
命令がADD、オペランドにレジスタ名を2つ書く方式。レジスタ以外にも直値やメモリ参照等が書ける。
これが今に至る。
モトローラ68000は、命令が
ADD
オペランドが、レジスタまたはメモリ。
source と destination が、他のものと逆になっている。
例えば、MOVE.B D1,D0
の場合、どうなるか。D1の最下位バイトがD0の最下位バイトにコピーされる。 新しい言語についていけない老害がアセンブリ言語について語るスレになっている。。 >>700
じゃあ、どんな言語が新しいんだい?
最近のは一通り使っているが、知らないのもあるかもしれないね。
2−3挙げてくれないか。 >>697
Cに慣れてからCPP使っても何とも思わんが、CPPに慣れすぎてCに戻ると確かにめんどくさい 個人的にはRubyのコンパイラ版のCrystalが健闘しているのが最近知った言語の中では収穫。
Rubyって糞重いイメージしかないからさ。 >>701
>>1で上がってるrustとか
新しくはないけどC/C++と同じくシステムプログラミング言語のD言語とか >>674
Apollo AEGISは結局メジャーバージョンアップする時に
Cで書き換えてDomain/OSと名前を変えた
AEGISの頃からUNIXのライブラリがあったから
古いコンポーネントはPascalで書いたままだったが
書き換えた理由は結局Cが得意な領域だしライブラリも多いから >>688
アセンブラよりはポータブルだろ
>>665のコードの方が >>690
物理スイッチ2進とnumkey16進の間に
numkey8進の時代がある >>693
行き着いてるのはload link/store conditional命令では? >>704
Dは事実上終了してます
設計哲学のない言語は使ってもらえない http://pastport.jp/user/sheltem2/timeline/防衛省OBの年表
ついでに、総務大臣の年表もあげるよ。^^  
初代の郵政大臣は、なんと小沢の父。ww  
http://56285.blog.jp
麻生炭鉱 …創価学会婦人部 イエズス会 関西の口入れ屋
外務省 …小和田恒 創価 大鳳会 チャイナスクール 対中ODA
宮内庁 …のーぱんしゃぶしゃぶ楼蘭の顧客が続けざまに宮内庁長官 ( 風岡 羽毛田 )
――
産経新聞 …荒船清太
毎日新聞 …聖教新聞の貸し刷り 売日WAIWAI事件 百人斬り競争
TBS …やらせ報道
テレビ朝日 …椿事件 田原の娘が第三文明社で啓発本を出版 やらせ報道
東映 …東急の五島浩が学会員
NHK …椿勝 民放顔負けのステマ やらせ報道
テレ東 …日経と糸山 と後藤さん
羽鳥慎一・宮根誠司 …バーニング系のテイクオフ。
博報堂 …TBS・毎日系。
アサツーDK …テレビ朝日系。東映と親密。西松と同じ虎ノ門ヒルズ。w
視聴率 …電通の子会社であるビデオリサーチが発表している数字。
読売新聞 …日テレの報道局長が石井修平 やらせ報道
フジテレビ …FNNスーパータイムや報道2001を立ち上げ、
小沢びいきの澤雄二が公明党の参議院議員。 やらせ番組。
東スポ …児玉誉士夫と塚本素山。
J-castニュース …武富士。
東洋経済 …副編集長の西田実仁が公明党の参議院議員。オリンパス事件。
文春 …木俣さんのパパが野中先生の後援会長。
ゲンダイ …「小沢一郎を勝たせてやりたい!!」
――
規制緩和・新経団連 …楽天の三木谷。親戚が創価。
派遣屋 …パソナの南部。元秘書が創価女子大卒。
旧自由党 …吉田茂の党。田中派、宏池会など。
旧民主党 …鳩山一郎の党。 清和会、中曽根派、三木派など。
民主党 …鳩山由紀夫の党。自由党と合併し、政権交代。
自由党 …小沢一郎の党。
――
新進党 …小沢一郎、海部俊樹、公明党、小池百合子、石破茂など。
自由連合 …徳洲会。小沢創価と親交。
――
都民ファースト …「のり弁を剥はがします!」 →のり弁の文書を、記者に提出させる。
千代田区 … 内田茂の地元。区長は、石川まさみ。(豊洲移転を発案)
練馬区 …藤井富雄の地元。区長は、前川あきお。(東京ガスに再就職)
花輪ともふみ …東急不動産の元社員。後援会長?の自宅外壁に、公明党のポスター。
――
。。・ R言語の自由度高すぎで笑っちまう
スクリプト言語ってみんなこんな感じ? なんで万能言語を求めるんだ
適材適所
Cはまだまだ必要だが万能ではない 労害としかいえない、ワンパターンのゲームゆとり脳乙カレー。 >>708
いやいや単純演算のatomicと
atomic_compare_exchangeだろ
GPU系は大抵これ 適材適所じゃない?各分野に文化的なものがあるし、環境的にCしかない分野もある。 >>714
GPUはdata parallelだから RISCだとll/scの方が親和性高いな
ただどっちも一長一短あるからな
まあ完全なll/scならいいのだが >>712
普通言語は万能だよな
罵倒に特化した朝鮮語とか中華語とかあるけど
なんでプログラム言語は言語によってやることを縛られなきゃならんのが普通になってんだね? >>718
普通言語の万能さ程度でいいなら、殆どのコンピューター言語は万能だろう。 >>704
Rustはこれから数年すると、環境が変わるかもしれないし、マイナー言語として絶滅するかもしれない。
C/C++を置き換えるには至らないだろう。
Dは、こちらもトラブルを抱えていたが、実用的に使えるレベルにはあると思うよ。
もっと大勢がテコ入れすれば、ひょっとすると、の可能性はあると思う。
現時点で、RustやDを使うメリットがあるかと言えば、わずかなユーザーにはあるんだろうね。
RustはIDEやエコシステムの構築、勉強するのに気が重い、そして出来上がった結果が速いわけでもない。
Mozillaそのものがどこまでやる気あるのか、等の問題を抱えている。
これから当分の間使って安心というエコシステムもない。
Dは使っている企業があるし、その企業が関心のあるうちは持つだろうね。
Dで書いたOSもあるから、OSを書き直す能力はある程度証明されたと言ってもいい。
C/C++ の次はDと頑張ってる人もいないわけではない。
とは言え、C/C++の膨大な資産を書き換えるコストを考えると、非現実的な部分はあるね。
置き換えるのではなく、守備範囲を広げる、という方法では、Pythonのアプローチはいい方法だと思う。
他の言語を凌駕しているのだから、これを使え、と強制されるのは、反発が大きいからね。 >>707
8進数マシンは、初期のUNIXにも使われていたね。8進数での書き方は嫌いじゃないよ。
MPUの台頭によって、16進数が普及したけど。 >>708
命令の種別はいくつかあれど、
アトミックオペレーションの核となるのは、
読み出し・判断・書き込み、これがリード・モディファイ・ライト命令として、1命令であること。
この命令実行中に、割り込みが入らないこと。
なのでしょう。
これと同等のことを柔軟に実現してるのが、LL/SC、でいいかな? >>711
どのあたりが、自由度高いと思う?
Rはいい言語だよ。ギスギスしないのがとてもいいと思う。
スクリプト言語もいろいろ。何をしたいかによってもいろいろ。
生産性重視で、実行速度無視、がいいのか、その逆かなど。
RはPython とジャンルがかぶるが、いいライブラリが、いい状態でメンテナンスされているね。
GPUへの対応も早かったし。
やりたいことを書くことに集中できるのがいいと思う。
しかし、WEB系には向かないね。Rでやろうとすると泥臭いことになって、他の言語に切りかえたくなるね。 >>714
それ、まさに、リード・モディファイ・ライト >>699
ああ〜懐かしいw
アセンブラは〜電気信号の流れが直接イメージ可能
これってPGにはすごく大切な能力ですぞ アセンブラ組める人材なら「C」は御茶の子サイサイ
Cが自由自在に組めれば、他の言語は簡単
この逆は必ずしも言えないけれど
Cは自由度の自由度の高い「狼」
不自由度の高いスクリプトなんか「犬」
狼には犬の調教なんぞ簡単
犬が狼の調教は出来ません
C言語は国際語な「英語・米語」
国際語に成る過程で格変化を失う
シェ―クスピアの書いた作品群の原書は「中世英語」で書かれてます
ここでは独逸語や仏蘭西語のような「格変化」がきちんとある
格変化するということは倒置文でも主格、目的格がわかるということ
これが無くなってからの英文翻訳はとても難しくなりました
どれが主語でどれが目的語?
難解な哲学書ですと、この倒置法が駆使
パズルゲーマーにとってはたまんない味を秘めた書籍 2017年07月24日 12時30分00秒
あなたの使うプログラミング言語は何位?人気ランキング「Top Programming Languages 2017」発表、「急成長中の言語」「就職の際に有利になりそうな言語」も
http://gigazine.net/news/20170724-top-programming-languages-2017/ いま使える言語が将来使える言語なんて誰にも言えません
人工言語が新規に生まれるには意味が在る
その意味を失ったとき苦労して習得した言語価値は限りなくゼロ
自然言語は地理文化と深くつながっているから
それなるのロングスパンで言語存在の意味を紡ぎ続けます
人工言語は、自然言語ほど文化と連系してません
こんなもん流行廃れが激しい
あのさ〜最高級のPGを目指すのなら「哲学」「言語学」
この2つの学問領域はきちんと習得しておくことが必須 人工言語は、電脳という人為的に造った架空の言葉
自然言語は、世界という神為的に自然発現した実体の言語
常に〜自然言語>>>>>>>人工言語
自然言語の卓越者は人工言語を簡単に転がせます
逆は絶対にない C言語は、ベル研がUNIXという通信系のOS設計のために発明
ベル研というと戦後直後、ショックレーのグループは「トランジスタ」を発明
これは電気信号の制御の素子です
それまでは「真空管」です
これは熱も半端なく出るし、ヒータは切れるし、反応がモッサリしてる
音響マニアが真空管でアンプをわざわざ作るのは「モッサリ」感が心地よいからです
電脳機能の命は〜電気信号の早急な処理
戦後、ベル研出身な研究者が元も多く「ノーベル物理学賞」を受賞
それだけ世界でも名を挙げた最先端ラボ 8080とかZ80は、アポロ計画のIC開発陣からスピンアウト組が設計
あのアポロ・プロジェクトは数多の優秀な人材を育成しました アポロの司令船に搭載したのは4ビットだったと思う
8ビットが1バイトという基本単位になったのは、
8ビットあればアルファベット、数字をすべて表現できるからです
もし中国人が電脳を初めて生み出したら16ビットが1バイトになってました 不易と流行
この言葉をPG屋は深く深く噛みしめるべき ■ このスレッドは過去ログ倉庫に格納されています