Linus「C++プログラマはウンコ。寄ってくるな」 2
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2009/02/11(水) 15:43:09> 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> o 割り込み/トラップエントリーとか
書けないね
特定のCPUに特化したコンパイラじゃなきゃ
> 「c の start up」って何のこと?
スタックポインタとか最低限のレジスタ設定しなくてcのアプリって実行できるのか?
0155デフォルトの名無しさん
2009/02/20(金) 23:50:18それが駄目って言うなら、in/out や int なども C でできないことになる。
0156デフォルトの名無しさん
2009/02/20(金) 23:53:48> 特定のCPUに特化したコンパイラじゃなきゃ
別に特化しなくてもいいだろ。そのCPUのコードが吐ければ。
> スタックポインタとか最低限のレジスタ設定しなくてcのアプリって実行できるのか?
それをするのはOS。OSのその機能はCで書ける。
ところで、何で「cの」なんだ?何で書いてもアプリはアプリだろ?
0157デフォルトの名無しさん
2009/02/20(金) 23:57:380158デフォルトの名無しさん
2009/02/20(金) 23:59:35__emit__ 最強
0159デフォルトの名無しさん
2009/02/21(土) 00:00:10それアセンブラだろ
0160デフォルトの名無しさん
2009/02/21(土) 00:02:09インラインで書ける
0161デフォルトの名無しさん
2009/02/21(土) 00:04:360162デフォルトの名無しさん
2009/02/21(土) 00:04:520163デフォルトの名無しさん
2009/02/21(土) 00:11:26いいえ、マシン語を埋め込む[関数]です
0164デフォルトの名無しさん
2009/02/21(土) 00:11:45評価キットで遊んでみることを勧める
買っても1k円しないし、トラ技のオマケだったりするし
どういう風にブートしてるとか良くわかるよ
0165デフォルトの名無しさん
2009/02/21(土) 00:24:550166デフォルトの名無しさん
2009/02/21(土) 00:28:13ほら
http://www.kernel.org/pub/linux/kernel/Historic/linux-0.01.tar.bz2
0167デフォルトの名無しさん
2009/02/21(土) 00:29:270168デフォルトの名無しさん
2009/02/21(土) 00:31:55スタックポインタの設定って何だ?
引数の受け渡しのスタックポインタの操作はOSの機能ではなく、普通はアプリが自分でやるぞ?
0169デフォルトの名無しさん
2009/02/21(土) 00:33:04boot/*.s の時点で boot してないじゃん
0170デフォルトの名無しさん
2009/02/21(土) 00:33:360171デフォルトの名無しさん
2009/02/21(土) 00:39:06それをアプリの中に書いてないでしょ
誰かが一度はその部分を書かないといけないわけで
それはCでは書けない
0172デフォルトの名無しさん
2009/02/21(土) 00:40:28だから,
c で書かれた code のオブジェクトを startup させるために
最低限必要なレジスター設定をどうやった書くんだ?
って聞いてる
sp をどうやって設定するんだよ? どうやったって, アセンブラが必要だろ?
# それが c の拡張構文の中に収まっていたとしてもだ!!!
0173デフォルトの名無しさん
2009/02/21(土) 00:41:53あ、ほんとだ。でもまあ、インラインで書けることには変わりないし。
0175デフォルトの名無しさん
2009/02/21(土) 00:43:16インラインで書ける。
0176デフォルトの名無しさん
2009/02/21(土) 00:44:29OSだとそれはあてはまらないのでは
0177デフォルトの名無しさん
2009/02/21(土) 00:44:49だからぁ, 書いてる内容はアセンブリじゃんよ
0178デフォルトの名無しさん
2009/02/21(土) 00:45:36君面白いね
0179デフォルトの名無しさん
2009/02/21(土) 00:46:370180デフォルトの名無しさん
2009/02/21(土) 00:50:47Cの関数をアセンブラ・機械語に落とすと、
普通、関数の始まり・終わりにそれぞれスタックポインタ周りの初期化・後始末をするコードがつくけど、
コンパイラによっては、そういうコードを一切吐かないという指定が可能なの。
それ使って、あとは中からインラインアセンブリでスタックポインタの設定をすればいい。
0181デフォルトの名無しさん
2009/02/21(土) 00:52:240182デフォルトの名無しさん
2009/02/21(土) 00:52:29インラインアセンブラに書くのも内容はアセンブリ言語だ。
>>147の
>インラインアセンブラというより生のアセンブラ必須
と言ったから、インラインアセンブラでもできるって言ってるんだろ。
0183デフォルトの名無しさん
2009/02/21(土) 00:53:45だから、インラインに書けるだろ?
0185デフォルトの名無しさん
2009/02/21(土) 01:00:20たとえば, lisp の source code 内に、文字列として c のソースを埋め込んで
c コンパイラで文字列をコンパイル/実行したとしするじゃん
こんな感じ
(compile-c-code "
;; 延々 c のコードが続く
")
(exec <上でコンパイルしたコード>)
これって, lisp のコードとはいわんぞ
0186デフォルトの名無しさん
2009/02/21(土) 01:02:530187デフォルトの名無しさん
2009/02/21(土) 01:04:180188デフォルトの名無しさん
2009/02/21(土) 01:05:24火種になりそうな妙な事はもう言うなwwwwwwwww
0189デフォルトの名無しさん
2009/02/21(土) 01:06:02それをlispのコードと呼ばないかどうかはわからんが、
インラインアセンブラで書けるかどうかって話だろ?
>>172はインラインアセンブラで書ける。それだけ。
0190デフォルトの名無しさん
2009/02/21(土) 01:09:38あとは>>160が死ねば一件落着
0191デフォルトの名無しさん
2009/02/21(土) 01:10:010192デフォルトの名無しさん
2009/02/21(土) 01:11:25処理系限定じゃないアセンブラってあるの?
0193デフォルトの名無しさん
2009/02/21(土) 01:12:40GitがC++じゃないことに対する批判とLinusの反論とは別次元の話だよ。
boot strapをC++で書いたほうがいいと主張する奴は一人もいないだろう。
0194デフォルトの名無しさん
2009/02/21(土) 01:16:080195デフォルトの名無しさん
2009/02/21(土) 01:17:24インラインアセンブラはCか、と言う議論と解釈するってアホだろ
0197デフォルトの名無しさん
2009/02/21(土) 01:20:510198デフォルトの名無しさん
2009/02/21(土) 01:32:24調べたりしてみては?
ワンチップマイコンを弄ってみたり、Cから呼ぶアセンブラの関数をいろいろ
書いてみたりとか。
Cでここまで書けるのかという発見もあると思う。逆に無理なことも。
メインフレームと呼ばれる大型コンピュータのCPUにはスタックが無いもの
も多い。じゃぁCのプログラムって、どうやって動かしているんだろうとか。
0199デフォルトの名無しさん
2009/02/21(土) 01:33:260200デフォルトの名無しさん
2009/02/21(土) 01:34:220201デフォルトの名無しさん
2009/02/21(土) 01:39:550202デフォルトの名無しさん
2009/02/21(土) 01:42:50inlineのアセンブラは処理系によっては何でも書ける
意地でも関数プロローグと関数プロローグを伯処理系も
存在するようだ
inlineのアセンブラにしたってCPU依存だ
アセンブリのソース直書きするんと、どこがちゃうのよ
そもそも, アセンブリコードが大半のCのファイルが
Cのソースと言えるのか?
".c"とか付いてる限りCのコードって言ってええんちゃう
ってな話?
だとしたら、どれを見てもCの規格の範囲からハズレてるんだから
Cですべてが書けるってのは嘘じゃん
0203デフォルトの名無しさん
2009/02/21(土) 01:44:400204デフォルトの名無しさん
2009/02/21(土) 01:44:52へぇー。なるほど
で、そういう指定はgccでも出来たりする?
ざっと見た感じでは無いみたいだけど、見落とし?
0205デフォルトの名無しさん
2009/02/21(土) 01:45:340206デフォルトの名無しさん
2009/02/21(土) 01:47:19流れとしては、Cのコードか?とか、Cでかけるか?と言う話ではなくて、
インラインアセンブラで書けるか?と言う話だよ。
0207デフォルトの名無しさん
2009/02/21(土) 01:53:16それは誤解だ
JavaVMも仮想とはいえ、ちゃんとCPUでJavaでは書けない部分が存在する
その部分は隠蔽されているが JavaVMのアセンブラで書かれてある
0208デフォルトの名無しさん
2009/02/21(土) 01:54:02インラインだったら何でもできるって騒いでる奴じゃないけど
gcc は 3.x の頃から、関数の中身がすべてインラインアセンブラ表現だと
勝手にそうなるよ
# CPUタイプにもよるんだけど…
でも、書いてる内容はアセンブリ以外の何者でもないけどね
まだ、".s"とか".S"をサフィックスにしてアセンブリコードって分かった
方が、コードベースのメンテナンスはやりやすい
0209デフォルトの名無しさん
2009/02/21(土) 01:58:44__attribute__(naked)があるけど、一部の環境でしか対応していないみたい。
http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html
0210デフォルトの名無しさん
2009/02/21(土) 02:01:03日本語でいいですよ。
0211デフォルトの名無しさん
2009/02/21(土) 02:04:54ありがとう
でも関数からのリターンをどうするんだろうね
インラインアセンブラでjmpしちゃうのかな
それと、結局はインラインアセンブラだけではOSは書けないケースが多いということか
0212デフォルトの名無しさん
2009/02/21(土) 02:05:50>>160
どう考えても>>160がおかしいだろ。
0213デフォルトの名無しさん
2009/02/21(土) 02:06:40おそらく使われないであろうものもあると言いたいのだろうが、
それと203との繋がりがよく分からない。
0214デフォルトの名無しさん
2009/02/21(土) 02:14:290215デフォルトの名無しさん
2009/02/21(土) 02:17:55ISO/IEC 14882:2003とXLib、Win32APIの範囲内でスクラッチからエディタを作る。
Win32、XLibともに標準C++ライブラリとかぶる機能があるが、この場合
標準C++を優先して使う。
これは、少しでも移植性を高めるための努力と考えてほしい。
また、拡張性の担保ともなりうる。
これは時間かかるけど、やりがいあるよ?
0216デフォルトの名無しさん
2009/02/21(土) 02:22:49Win32 は知らんが、Xlib って C バインディングじゃね?
つか、エディタ C とか C++ で作ろうと思わないんじゃね?
普通、拡張用の DSL 設計して最低限の機能をそっちに持たして
残りは DSL で実装しないか?
0217デフォルトの名無しさん
2009/02/21(土) 02:30:40また極端な意見だな
0218デフォルトの名無しさん
2009/02/21(土) 02:31:09下はC++でなくてもCで十分だよな。
0219デフォルトの名無しさん
2009/02/21(土) 02:33:240220デフォルトの名無しさん
2009/02/21(土) 02:37:500221デフォルトの名無しさん
2009/02/21(土) 02:47:060222デフォルトの名無しさん
2009/02/21(土) 04:03:58スタックまわりは無理だが、コンテキストスイッチやらなんやらの関数も当然あるから
記述はできるな。つーかCのソースはアセンブラに変換されるんだから出来て当然というべきか。
0223デフォルトの名無しさん
2009/02/21(土) 09:16:27何でそう言う結論になるんだか。。
0224デフォルトの名無しさん
2009/02/21(土) 09:21:39>さすがにレジスタを直接イジるCの関数(は「生のアセンブラ」(>>147参照)でなければ)は無理だw (>>157)
↓
>インラインで書ける (>>160)
どう見ても>>160が正しい。
0225デフォルトの名無しさん
2009/02/21(土) 09:24:25なんと言うエスパー
その超越した読解力はこのスレにはもったいない。消えろ。
0228デフォルトの名無しさん
2009/02/21(土) 09:47:29お前レベルの補完は書いた人間以外無理だろJK
0229デフォルトの名無しさん
2009/02/21(土) 09:52:07だから、君はどう補完してどう解釈するのかを示せよ。
0230デフォルトの名無しさん
2009/02/21(土) 09:56:02>さすがにレジスタを直接イジるCの関数は無理だw (>>157)
↓
>インラインで書ける (>>160)
これ以降インラインはCと言えるのかというアホ議論に発展
0231デフォルトの名無しさん
2009/02/21(土) 09:59:57インラインアセンブラの話題で「インラインアセンブラ」を「インライン」と略したら
それを「インライン関数」と解釈したアホがいたってことか。
0232デフォルトの名無しさん
2009/02/21(土) 10:02:19まあ、そうだな。
0233デフォルトの名無しさん
2009/02/21(土) 10:05:27次から次へと真打が出てくるなw
その発想はなかった
ってかそんなレスがあったのかどうか
0234デフォルトの名無しさん
2009/02/21(土) 10:09:35>>143
はい。インラインアセンブラ必須です。
「生のアセンブラ」は必要ありません。
0235デフォルトの名無しさん
2009/02/21(土) 10:11:20いや、Cで書ける
0236デフォルトの名無しさん
2009/02/21(土) 10:12:37Cで書けるかどうかではなく、インラインアセンブラが必要かどうかを聞かれているんだけど?
0237デフォルトの名無しさん
2009/02/21(土) 10:14:03ほら
http://www.kernel.org/pub/linux/kernel/Historic/linux-0.01.tar.bz2
0238デフォルトの名無しさん
2009/02/21(土) 10:16:480239デフォルトの名無しさん
2009/02/21(土) 10:19:330240デフォルトの名無しさん
2009/02/21(土) 10:51:10関数だけで何でも出来るよ
0241デフォルトの名無しさん
2009/02/21(土) 11:36:01Cの文法ではないインラインアセンブラで書けるって突っ込むからおかしいんだろ。
言ってること自体は間違ってないが>>157はCで書けないっていってるわけで
Cの文法でないインラインアセンブラでかけると言ってる突込みがおかしいと言われてるのに
自分のいってることは間違いではないの一点張り。
そりゃそうだけどそりゃ会話(レス)じゃない。
0242デフォルトの名無しさん
2009/02/21(土) 11:43:11>>157の論点は「インラインアセンブラがCの(標準化された)文法か」ではない。
単に「Cの関数でレジスタをいじれるか」だ。
0243デフォルトの名無しさん
2009/02/21(土) 11:48:18>>143からの流れでインラインアセンブラの話をしているのに、
「Cの文法でないインラインアセンブラでかけると言ってる突込みがおかしい」と言う方がおかしいだろ。
0244デフォルトの名無しさん
2009/02/21(土) 11:48:56WTLを使うと言う事は、アセンブラを使う事だって事か?
そ・ん・な・ば・か・な・!!!
0245デフォルトの名無しさん
2009/02/21(土) 11:57:570246デフォルトの名無しさん
2009/02/21(土) 12:00:26>>143は
>C言語の標準ライブラリ関数だけでは機能不足だから
>インラインアセンブラ必須って理解でいいんですか?
とC標準の限界に言及してるんだからおまえがおかしい
0247デフォルトの名無しさん
2009/02/21(土) 12:03:16お前独自の論点では会話は成立しない
0248デフォルトの名無しさん
2009/02/21(土) 12:31:320249デフォルトの名無しさん
2009/02/21(土) 12:46:13インラインアセンブラは必須だけど、生のアセンブラは要らない
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:320252デフォルトの名無しさん
2009/02/21(土) 14:21:16■ このスレッドは過去ログ倉庫に格納されています