トップページ⇒tech
1001コメント252KB

Linus「C++プログラマはウンコ。寄ってくるな」 2

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2009/02/11(水) 15:43:09
> Git のソースコードを最初に見たとき、ヘンだと思ったこと:
> 1. C++ じゃなくてただの C を使ってる。理由は謎。移植性が
> どうとか言わないで、
> そんなのウソに決まってるから。

*あんた* のほうこそ大ウソつきだ。

C++ はひどい言語だ。これは、多くの平均以下のプログラマーが
使ってるためにさらに輪をかけてゲロゲロになっていて、どうし
ようもないゴミが簡単に生産されるようになってる。正直いって、
C を選ぶ理由が C++ プログラマーを追っぱらうため *だけ* だっ
たとしても、それ自体、C を使う強力な理由になりうる。

Linus Torvalds
http://tabesugi.net/memo/2009/1a.html#152154

前スレ
Linus「C++プログラマはウンコ。寄ってくるな」
http://pc11.2ch.net/test/read.cgi/tech/1232771545/
0153デフォルトの名無しさん2009/02/20(金) 23:47:56
どうしてもアセンブラが必要なところは、レジスタを直接書き換えなきゃ
いけない所だけ。割禁とかね。
それ以外は全部Cで書ける。効率的かどうかは別にして。
0154デフォルトの名無しさん2009/02/20(金) 23:49:54
>>152
> o 割り込み/トラップエントリーとか
書けないね
特定のCPUに特化したコンパイラじゃなきゃ

> 「c の start up」って何のこと?
スタックポインタとか最低限のレジスタ設定しなくてcのアプリって実行できるのか?
0155デフォルトの名無しさん2009/02/20(金) 23:50:18
レジスタを書き換える関数を作って呼べばいい。
それが駄目って言うなら、in/out や int なども C でできないことになる。
0156デフォルトの名無しさん2009/02/20(金) 23:53:48
>>154
> 特定のCPUに特化したコンパイラじゃなきゃ

別に特化しなくてもいいだろ。そのCPUのコードが吐ければ。

> スタックポインタとか最低限のレジスタ設定しなくてcのアプリって実行できるのか?

それをするのはOS。OSのその機能はCで書ける。
ところで、何で「cの」なんだ?何で書いてもアプリはアプリだろ?
0157デフォルトの名無しさん2009/02/20(金) 23:57:38
さすがにレジスタを直接イジるCの関数は無理だw
0158デフォルトの名無しさん2009/02/20(金) 23:59:35
世の中には組み込み関数という便利なものがあってだな・・・
__emit__ 最強
0159デフォルトの名無しさん2009/02/21(土) 00:00:10
>>158
それアセンブラだろ
0160デフォルトの名無しさん2009/02/21(土) 00:02:09
>>157
インラインで書ける
0161デフォルトの名無しさん2009/02/21(土) 00:04:36
スタックポインタを設定せずに C の関数が実行できるのか?
0162デフォルトの名無しさん2009/02/21(土) 00:04:52
c だけで自分が作ったプログラムを boot strtap してみろよ
0163デフォルトの名無しさん2009/02/21(土) 00:11:26
>>159
いいえ、マシン語を埋め込む[関数]です
0164デフォルトの名無しさん2009/02/21(土) 00:11:45
OS上のアプリケーションしか組んだことが無い人は、ワンチップマイコンの
評価キットで遊んでみることを勧める
買っても1k円しないし、トラ技のオマケだったりするし
どういう風にブートしてるとか良くわかるよ
0165デフォルトの名無しさん2009/02/21(土) 00:24:55
>>159が総叩きにあってないのが意外
0166デフォルトの名無しさん2009/02/21(土) 00:28:13
>>162
ほら

http://www.kernel.org/pub/linux/kernel/Historic/linux-0.01.tar.bz2
0167デフォルトの名無しさん2009/02/21(土) 00:29:27
UNIXはC言語で組んだらしいけど、どうやったんだろ?
0168デフォルトの名無しさん2009/02/21(土) 00:31:55
>>161
スタックポインタの設定って何だ?
引数の受け渡しのスタックポインタの操作はOSの機能ではなく、普通はアプリが自分でやるぞ?
0169デフォルトの名無しさん2009/02/21(土) 00:33:04
>>166
boot/*.s の時点で boot してないじゃん
0170デフォルトの名無しさん2009/02/21(土) 00:33:36
もしかして、OSが無いとコンパイラが動かせないから開発できないとか思ってる知的障害者がいるのかな。
0171デフォルトの名無しさん2009/02/21(土) 00:39:06
>>168
それをアプリの中に書いてないでしょ
誰かが一度はその部分を書かないといけないわけで
それはCでは書けない
0172デフォルトの名無しさん2009/02/21(土) 00:40:28
>>170
だから,
c で書かれた code のオブジェクトを startup させるために
最低限必要なレジスター設定をどうやった書くんだ?
って聞いてる

sp をどうやって設定するんだよ? どうやったって, アセンブラが必要だろ?
# それが c の拡張構文の中に収まっていたとしてもだ!!!
0173デフォルトの名無しさん2009/02/21(土) 00:41:53
>>169
あ、ほんとだ。でもまあ、インラインで書けることには変わりないし。
0174デフォルトの名無しさん2009/02/21(土) 00:42:27
>>171
>>170
0175デフォルトの名無しさん2009/02/21(土) 00:43:16
>>172
インラインで書ける。
0176デフォルトの名無しさん2009/02/21(土) 00:44:29
>>174
OSだとそれはあてはまらないのでは
0177デフォルトの名無しさん2009/02/21(土) 00:44:49
>>175
だからぁ, 書いてる内容はアセンブリじゃんよ
0178デフォルトの名無しさん2009/02/21(土) 00:45:36
>>175
君面白いね
0179デフォルトの名無しさん2009/02/21(土) 00:46:37
こんな奴らに文句言われるLinusに同情するわ
0180デフォルトの名無しさん2009/02/21(土) 00:50:47
>>172
Cの関数をアセンブラ・機械語に落とすと、
普通、関数の始まり・終わりにそれぞれスタックポインタ周りの初期化・後始末をするコードがつくけど、
コンパイラによっては、そういうコードを一切吐かないという指定が可能なの。
それ使って、あとは中からインラインアセンブリでスタックポインタの設定をすればいい。
0181デフォルトの名無しさん2009/02/21(土) 00:52:24
>>180 だからぁ, 書いてる内容はアセンブリじゃんよ
0182デフォルトの名無しさん2009/02/21(土) 00:52:29
>>177
インラインアセンブラに書くのも内容はアセンブリ言語だ。

>>147の
>インラインアセンブラというより生のアセンブラ必須

と言ったから、インラインアセンブラでもできるって言ってるんだろ。
0183デフォルトの名無しさん2009/02/21(土) 00:53:45
>>181
だから、インラインに書けるだろ?
0184デフォルトの名無しさん2009/02/21(土) 00:57:47
俺は>>172ではないが、>>157の話をしてるんじゃないのか????
0185デフォルトの名無しさん2009/02/21(土) 01:00:20
>>183
たとえば, lisp の source code 内に、文字列として c のソースを埋め込んで
c コンパイラで文字列をコンパイル/実行したとしするじゃん

こんな感じ

(compile-c-code "
;; 延々 c のコードが続く
")
(exec <上でコンパイルしたコード>)

これって, lisp のコードとはいわんぞ
0186デフォルトの名無しさん2009/02/21(土) 01:02:53
>>174氏ね
0187デフォルトの名無しさん2009/02/21(土) 01:04:18
cでさえこうなんだから、c++を排除したのは正解かも
0188デフォルトの名無しさん2009/02/21(土) 01:05:24
>>187
火種になりそうな妙な事はもう言うなwwwwwwwww
0189デフォルトの名無しさん2009/02/21(土) 01:06:02
>>185
それをlispのコードと呼ばないかどうかはわからんが、
インラインアセンブラで書けるかどうかって話だろ?

>>172はインラインアセンブラで書ける。それだけ。
0190デフォルトの名無しさん2009/02/21(土) 01:09:38
あほな論争にようやく終止符が打たれた
あとは>>160が死ねば一件落着
0191デフォルトの名無しさん2009/02/21(土) 01:10:01
>>189 ある意味、処理系限定だけどな
0192デフォルトの名無しさん2009/02/21(土) 01:11:25
>>191
処理系限定じゃないアセンブラってあるの?
0193デフォルトの名無しさん2009/02/21(土) 01:12:40
>>187
GitがC++じゃないことに対する批判とLinusの反論とは別次元の話だよ。
boot strapをC++で書いたほうがいいと主張する奴は一人もいないだろう。
0194デフォルトの名無しさん2009/02/21(土) 01:16:08
インラインアセンブラをCと解釈するってアホだろ
0195デフォルトの名無しさん2009/02/21(土) 01:17:24
インラインアセンブラで書けるか、という議論を
インラインアセンブラはCか、と言う議論と解釈するってアホだろ
0196デフォルトの名無しさん2009/02/21(土) 01:19:35
>>195
>>160のことなら逆じゃね?
0197デフォルトの名無しさん2009/02/21(土) 01:20:51
逆ってどういう意味?
0198デフォルトの名無しさん2009/02/21(土) 01:32:24
くだらない意地に時間を費やすより、せっかくの機会だから、いろいろ試したり
調べたりしてみては?
ワンチップマイコンを弄ってみたり、Cから呼ぶアセンブラの関数をいろいろ
書いてみたりとか。
Cでここまで書けるのかという発見もあると思う。逆に無理なことも。
メインフレームと呼ばれる大型コンピュータのCPUにはスタックが無いもの
も多い。じゃぁCのプログラムって、どうやって動かしているんだろうとか。
0199デフォルトの名無しさん2009/02/21(土) 01:33:26
>>195はきちがい
0200デフォルトの名無しさん2009/02/21(土) 01:34:22
言語の枠と拡張すら理解できない奴がなにやっても無駄
0201デフォルトの名無しさん2009/02/21(土) 01:39:55
このスレのプログラマってC/C++で何のプログラム作ってるんだろう?
0202デフォルトの名無しさん2009/02/21(土) 01:42:50
要点だけ列挙すると

inlineのアセンブラは処理系によっては何でも書ける

意地でも関数プロローグと関数プロローグを伯処理系も
存在するようだ

inlineのアセンブラにしたってCPU依存だ

アセンブリのソース直書きするんと、どこがちゃうのよ

そもそも, アセンブリコードが大半のCのファイルが
Cのソースと言えるのか?

".c"とか付いてる限りCのコードって言ってええんちゃう

ってな話?

だとしたら、どれを見てもCの規格の範囲からハズレてるんだから
Cですべてが書けるってのは嘘じゃん
0203デフォルトの名無しさん2009/02/21(土) 01:44:40
ふと思ったんだけど、JavaVMみたいに「C実行環境」のようなものが無いと、Cのプログラムは動かせないとか思ってる知的障害者がいるのかな。
0204デフォルトの名無しさん2009/02/21(土) 01:44:52
>>180
へぇー。なるほど
で、そういう指定はgccでも出来たりする?
ざっと見た感じでは無いみたいだけど、見落とし?
0205デフォルトの名無しさん2009/02/21(土) 01:45:34
お前の妄想
0206デフォルトの名無しさん2009/02/21(土) 01:47:19
>>202
流れとしては、Cのコードか?とか、Cでかけるか?と言う話ではなくて、

インラインアセンブラで書けるか?と言う話だよ。
0207デフォルトの名無しさん2009/02/21(土) 01:53:16
>>203
それは誤解だ
JavaVMも仮想とはいえ、ちゃんとCPUでJavaでは書けない部分が存在する
その部分は隠蔽されているが JavaVMのアセンブラで書かれてある
0208デフォルトの名無しさん2009/02/21(土) 01:54:02
>>204
インラインだったら何でもできるって騒いでる奴じゃないけど
gcc は 3.x の頃から、関数の中身がすべてインラインアセンブラ表現だと
勝手にそうなるよ
# CPUタイプにもよるんだけど…

でも、書いてる内容はアセンブリ以外の何者でもないけどね

まだ、".s"とか".S"をサフィックスにしてアセンブリコードって分かった
方が、コードベースのメンテナンスはやりやすい
0209デフォルトの名無しさん2009/02/21(土) 01:58:44
>>204
__attribute__(naked)があるけど、一部の環境でしか対応していないみたい。
http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html
0210デフォルトの名無しさん2009/02/21(土) 02:01:03
>>207
日本語でいいですよ。
0211デフォルトの名無しさん2009/02/21(土) 02:04:54
>>208 >>209
ありがとう
でも関数からのリターンをどうするんだろうね
インラインアセンブラでjmpしちゃうのかな

それと、結局はインラインアセンブラだけではOSは書けないケースが多いということか
0212デフォルトの名無しさん2009/02/21(土) 02:05:50
>>157
>>160
どう考えても>>160がおかしいだろ。
0213デフォルトの名無しさん2009/02/21(土) 02:06:40
Javaバイトコードには、普通にJavaプログラムをコンパイルするだけなら
おそらく使われないであろうものもあると言いたいのだろうが、
それと203との繋がりがよく分からない。
0214デフォルトの名無しさん2009/02/21(土) 02:14:29
203が知的障害持ってるだけだろ
0215デフォルトの名無しさん2009/02/21(土) 02:17:55
お題。

ISO/IEC 14882:2003とXLib、Win32APIの範囲内でスクラッチからエディタを作る。
Win32、XLibともに標準C++ライブラリとかぶる機能があるが、この場合
標準C++を優先して使う。
これは、少しでも移植性を高めるための努力と考えてほしい。
また、拡張性の担保ともなりうる。

これは時間かかるけど、やりがいあるよ?
0216デフォルトの名無しさん2009/02/21(土) 02:22:49
>>215
Win32 は知らんが、Xlib って C バインディングじゃね?

つか、エディタ C とか C++ で作ろうと思わないんじゃね?

普通、拡張用の DSL 設計して最低限の機能をそっちに持たして
残りは DSL で実装しないか?
0217デフォルトの名無しさん2009/02/21(土) 02:30:40
>>216
また極端な意見だな
0218デフォルトの名無しさん2009/02/21(土) 02:31:09
上にスクリプトエンジンが乗ってると、
下はC++でなくてもCで十分だよな。
0219デフォルトの名無しさん2009/02/21(土) 02:33:24
また奇天烈な話かよ
0220デフォルトの名無しさん2009/02/21(土) 02:37:50
emacsに持っていくつもりかよ。
0221デフォルトの名無しさん2009/02/21(土) 02:47:06
xyzzy とか vim とか………
0222デフォルトの名無しさん2009/02/21(土) 04:03:58
メモリマップドIOならCから読み書きできる。

スタックまわりは無理だが、コンテキストスイッチやらなんやらの関数も当然あるから
記述はできるな。つーかCのソースはアセンブラに変換されるんだから出来て当然というべきか。
0223デフォルトの名無しさん2009/02/21(土) 09:16:27
>>211
何でそう言う結論になるんだか。。
0224デフォルトの名無しさん2009/02/21(土) 09:21:39
>>212
>さすがにレジスタを直接イジるCの関数(は「生のアセンブラ」(>>147参照)でなければ)は無理だw (>>157)
↓
>インラインで書ける (>>160)


どう見ても>>160が正しい。
0225デフォルトの名無しさん2009/02/21(土) 09:24:25
>>224
なんと言うエスパー
その超越した読解力はこのスレにはもったいない。消えろ。
0226デフォルトの名無しさん2009/02/21(土) 09:31:12
>>225
じゃあ、君の解釈はどうなんだ?
>>224のように補完していいから分かるように説明しろ。
0227デフォルトの名無しさん2009/02/21(土) 09:42:40
>>225が必死すぎてワロタww
まあ>>224もきちがい染みてるけどな
0228デフォルトの名無しさん2009/02/21(土) 09:47:29
>>226
お前レベルの補完は書いた人間以外無理だろJK
0229デフォルトの名無しさん2009/02/21(土) 09:52:07
>>228
だから、君はどう補完してどう解釈するのかを示せよ。
0230デフォルトの名無しさん2009/02/21(土) 09:56:02
>>229
>さすがにレジスタを直接イジるCの関数は無理だw (>>157)
↓
>インラインで書ける (>>160)

これ以降インラインはCと言えるのかというアホ議論に発展
0231デフォルトの名無しさん2009/02/21(土) 09:59:57
なるほど。
インラインアセンブラの話題で「インラインアセンブラ」を「インライン」と略したら
それを「インライン関数」と解釈したアホがいたってことか。
0232デフォルトの名無しさん2009/02/21(土) 10:02:19
>>230
まあ、そうだな。
0233デフォルトの名無しさん2009/02/21(土) 10:05:27
>>231
次から次へと真打が出てくるなw
その発想はなかった
ってかそんなレスがあったのかどうか
0234デフォルトの名無しさん2009/02/21(土) 10:09:35
結論

>>143
はい。インラインアセンブラ必須です。
「生のアセンブラ」は必要ありません。
0235デフォルトの名無しさん2009/02/21(土) 10:11:20
>>234
いや、Cで書ける
0236デフォルトの名無しさん2009/02/21(土) 10:12:37
>>235
Cで書けるかどうかではなく、インラインアセンブラが必要かどうかを聞かれているんだけど?
0237デフォルトの名無しさん2009/02/21(土) 10:14:03
>>236
ほら

http://www.kernel.org/pub/linux/kernel/Historic/linux-0.01.tar.bz2
0238デフォルトの名無しさん2009/02/21(土) 10:16:48
敗北した>>147がコピペ荒らしを開始したようだな。
0239デフォルトの名無しさん2009/02/21(土) 10:19:33
無限ループって怖いね><
0240デフォルトの名無しさん2009/02/21(土) 10:51:10
__emit__ 組み込み関数と強制インライン関数を組み合わせたら
関数だけで何でも出来るよ
0241デフォルトの名無しさん2009/02/21(土) 11:36:01
>>157がC(の関数で)レジスタがいじれないっていってるのに
Cの文法ではないインラインアセンブラで書けるって突っ込むからおかしいんだろ。
言ってること自体は間違ってないが>>157はCで書けないっていってるわけで
Cの文法でないインラインアセンブラでかけると言ってる突込みがおかしいと言われてるのに
自分のいってることは間違いではないの一点張り。
そりゃそうだけどそりゃ会話(レス)じゃない。
0242デフォルトの名無しさん2009/02/21(土) 11:43:11
インラインアセンブラを使えば、Cの関数でレジスタをいじれるよ。

>>157の論点は「インラインアセンブラがCの(標準化された)文法か」ではない。
単に「Cの関数でレジスタをいじれるか」だ。
0243デフォルトの名無しさん2009/02/21(土) 11:48:18
>>241
>>143からの流れでインラインアセンブラの話をしているのに、
「Cの文法でないインラインアセンブラでかけると言ってる突込みがおかしい」と言う方がおかしいだろ。
0244デフォルトの名無しさん2009/02/21(土) 11:48:56
つまり、>>147の言い分だと
WTLを使うと言う事は、アセンブラを使う事だって事か?

そ・ん・な・ば・か・な・!!!
0245デフォルトの名無しさん2009/02/21(土) 11:57:57
あほばっか
0246デフォルトの名無しさん2009/02/21(土) 12:00:26
>>243
>>143は
>C言語の標準ライブラリ関数だけでは機能不足だから
>インラインアセンブラ必須って理解でいいんですか?
とC標準の限界に言及してるんだからおまえがおかしい
0247デフォルトの名無しさん2009/02/21(土) 12:03:16
>>242
お前独自の論点では会話は成立しない
0248デフォルトの名無しさん2009/02/21(土) 12:31:32
まあ、>>147がバカだったってことで。
0249デフォルトの名無しさん2009/02/21(土) 12:46:13
とりあえず、>>147が馬鹿だな
インラインアセンブラは必須だけど、生のアセンブラは要らない
0250デフォルトの名無しさん2009/02/21(土) 13:58:59
アセンブラ
=> OSを含んだあらゆるソフトウェアが記述可能
C
=> 拡張機能のインラインアセンブラを使えばOSが記述可能
=> C標準関数等だけではOSの記述は不可能。
C++
=> C同様に拡張機能を使えばOSが記述可能。標準機能のみでは無理。
=> 標準でC互換なのでC言語の機能がすべて使用可(extern "C"もあるよ)

結論:
拡張機能も含めればC++最強!!!!!!!!
拡張機能を含めない場合はアセンブラ最強!!!!!!
0251デフォルトの名無しさん2009/02/21(土) 14:16:32
asm ブロック自体は C の規格にあるわけだが
0252デフォルトの名無しさん2009/02/21(土) 14:21:16
C++がウンコっていう命題からずれすぎ
■ このスレッドは過去ログ倉庫に格納されています