1 :
デフォルトの名無しさん :
2008/01/04(金) 12:49:16 実際そうなの?
JAVA最高
>>1 ×C++は良い
○会社から与えられたものは良い。
会社に逆らう奴は許されない。会社が白いと言えばカラスも白い。
5 :
デフォルトの名無しさん :2008/01/04(金) 13:39:23
環境も含めてなら多少は同意する
Javaよりはマシ
>>1 そんな意見は初めて聞いたな
おまえの意見か
8 :
デフォルトの名無しさん :2008/01/04(金) 13:59:57
C++は一番レベル高いからね
割と何でも出来るからどれか一つ選ぶとしたら C++ってことなんじゃねーの
ガベコレが無いなんて嫌だー、って人にはありえない選択なわけだが
そんなもの自分で考えられない奴には、そりゃ使えないだろ
嘘を嘘と見抜けない香具師はC++を使うのは難しい。
柔軟な心を忘れないまま、アセンブリとCとC++のコツを全部抑えたら何でも作れる
アセンブリとCがあるならC++いらね
変態のおもちゃ化していることは認める。
16 :
デフォルトの名無しさん :2008/01/04(金) 22:33:04
JavaってさーC++のダメなとこを直したって宣伝してるけど C++のダメなとこって具体的にどこでそれをどう直したんだろうな
17 :
デフォルトの名無しさん :2008/01/04(金) 22:42:24
JavaってC++に近づいてる
>>16 ポインタ
goto文
関数
構造体
多重継承
演算子オーバーロード
プリプロセッサ
>>18 そこに挙げてるのってどれも必要不可欠だと思うけど
それらがどう悪くてどう直したんだ?
結局のところ言語なんて慣れたもん勝ちなんだから、作法や作るうえでのプロセスなんか関係なくて、 実現できることと、できないことと、どのような用途に使われているかなどの実績を比べないと意味ないよね。
まあ言えるのは、JavaのVMはCとかC++で書かれてるよ。 ちょっと比較するにはレベルが違う言語かな。
>>20 その考えでよければオブジェクト志向なんでパラダイムは出てこなかったんじゃね?
派遣でもバイトでもできるだけ考える事をさせずにコーディングさせようぜってがJavaの考え方
ってか、プログラマってソフトウェア工学に関する専門書とか読んだりしないのか?
基本中の基本だと思うんだけど。
普通は
>>20 見たいなレスはウンコ漏れでもしない。
比較するというよりも得意分野のベクトルが逆なので、 C++/Javaの両刀使いが断然お得だな。
C++じゃないとまずいっていう用途をあげてみよう。
ウンコ漏れるほどテンプレート使いたいとき
リアルタイム性が必要なシステムとかメモリをきっちり把握して作りたいプログラムとかだな 具体的にはOS,コンパイラ,インタプリタ,デバッガとかか
>>22 読んだりするがマトモなコーディングすると上から煙たがられるw
バイトでもメンテできるように高度な実装技術は排除w
良いも何も、仕事でC++やれって言われたらやるし 仕事でJAVAやれって言われたらやる 俺みたいな雑魚に選択権は無いから、良いも悪いもどーでもいいぜ
再利用性(笑) これは本当に(笑)をつけたくなる
>>29 C++でやれって言われたら、その妥当性を検討して
(=今後発生する問題を想定し列挙して)
妥当でなければ妥当な案を提案する。おそらくは
却下されるんで指示通りにやる。で、あとで問題が
起きたときあのときこういう提案をしていました、と
主張して、問題の対処において、こちらが有利になる
ような交渉の布石とする。
逆も同じ。
33 :
デフォルトの名無しさん :2008/01/05(土) 17:32:12
なにか一つと言われればC/C++だし、複数でもC/C++とJavaかLLかみたいな 感じだからなあ。。 5年以上プログラムやるつもりならやってもいいというかやるべきだと思うけど、 プログラムは2,3年で卒業みたいな上流工程の人はやらない方がいいだろうね。
死ぬまでやるさ これしか残ってないからな
C++でできてCでできないことってあるの?
あります。
アプリケーションの機能としては無いっていってもいいんじゃね? ユーザーからはC/C++のどちらで開発されててもわからんわけだし。
オブジェクト指向風のことはCでもできる。 マニアックなテンプレート相当なことはCだと無理かな。 それ以外なら、若干めんどいけどCでも頑張れると思う。
39 :
デフォルトの名無しさん :2008/01/05(土) 20:29:36
Javaだと簡単にできるのにC++じゃすっげーめんどいことってなんかある? ガベコレ以外で
馬鹿に使わせる
C++ではできて、Cではできないことなんて無いんじゃないの? オブジェクト思考なんて、Cで別言語を書いてそこで使えばできないわけじゃないし。 そういう話じゃない?
javaとC++のスレでなんでCとC++の話してんだ?
他人のソース解読とか面倒
>>39 C++はリフレクションが貧弱すぎて困るな。
マクロとかで型ごとにリフレクション実装コード書けば
ある程度のことはできるが、めんどいし汚い。
C++でリフレクション相当のことをやりたい場合にはtraits使ったりtemplateを駆使したりと大変だわな
そもそもネイティブ前提の言語で動的リフレクション実装されてるのってそうそう無い罠。
47 :
デフォルトの名無しさん :2008/01/05(土) 23:31:01
一粒で二度おいしい思いをするのがC/C++コンパイラ マシン移行面を考えるとC++は不利。
48 :
47 :2008/01/05(土) 23:34:20
追記: GUIのアプリケーションの開発にはC/C++はJavaより不経済。 ファームウェア(カスタムLSIへの実装ソフト)向けにはC/C++がJavaより有利。 更に、高速性を求めるならばC。
WindowsのGUIアプリ作るなら、個人的にはSwingは無い。 JavaのGUIはSwingしか知らんのだが、挙動が遅すぎる。 LinuxならJava使うかなぁ。楽だから。 WindowsでGUIなら今はC#+.NETを推したい。楽だから。 .NETも重たいアプリ作るとモッサリするんだよなぁ・・・。
50 :
デフォルトの名無しさん :2008/01/05(土) 23:52:44
>>22 ソフトウェア工学に関する専門書をあげてみてくれんか?できたら日本語のを頼む。
たまたま見たソフトウェア工学らしき本は、クライアントの要求に対してどうのこうのという内容だった。
でもこれは22がいうものと違うんだと思う。
そらそうだ
52 :
47 :2008/01/06(日) 00:04:15
>>49 やっぱそうだよね。
セカンドマシンで一気にLinux&Ooo&JVM。
OOoじゃないのか。
54 :
47 :2008/01/06(日) 00:10:04
JavaのGUI使ったアプリなんて見たこと無いけどな
56 :
47 :2008/01/06(日) 00:24:23
>>55 そこらじゅうにある。
携帯のゲームもそうだし。
57 :
47 :2008/01/06(日) 00:30:05
OSのないプロセッサ上でもCならアプリを構築できる
58 :
デフォルトの名無しさん :2008/01/06(日) 00:40:36
>>55 マッカー相手にJavaのGUIアプリ作ってる人いた
その人にC++とJavaってどうなの?みたいな質問したら、
C++に比べるとJavaは馬鹿でもおkみたいな返答だった。
バグの原因の大半=メモリ管理のどうので
>>55 Eclipse はどうなってしまうんでしょうか ...
60 :
47 :2008/01/06(日) 00:48:22
>>58 C++でGUIアプリの開発をLinuxの元でやってやれなくは無いが、
高度なスキルが要求される。
C++ & Qt にてGUIアプリを構築というのは知っている。
当然、DBはPostgreSQLだな。
組込みのばらまきの世界なんてそんなもの。
61 :
47 :2008/01/06(日) 00:51:39
>>59 その話が出てくるのを待っていた。
EclipseはIBM陣営
NetBeansはSun陣営
俺はNetBeansの方が好み。
>56 携帯ゲームだけじゃん クライアントがwindowsならjavaのguiは出番がない。 10年前、アプレットは絶対流行るかと思ったけどなぁ、ぜんぜん流行らなかったなー
バカでも使えてバカしか選ばないのがJava バカには使えないけどバカしか選ばないのがC++
64 :
デフォルトの名無しさん :2008/01/06(日) 01:00:03
>>62 >携帯ゲームだけじゃん
だろうなw
技術者の活躍の場が偏在なんだろw 電話会社に多く捕まった
(厳密には、ゲームソフトメーカー)
>クライアントがwindowsならjavaのguiは出番がない。
やって見て解ったんだが、起動が遅い。
出番がないと言う表現は確かにぴったりだな。
>>56 JavaGUI代表的なアプリを聞かれてうさんくさい携帯のオモチャ出すようじゃJavaの擁護にならなくねーか?
>>59 eclipseのGUIはJavaだけどJavaじゃないのよね
66 :
デフォルトの名無しさん :2008/01/06(日) 01:03:08
JUDEってJavaだよね。 起動が遅いし、時々すんげー固まる(GC?) まあ、素直にC++の方がいいような。
67 :
デフォルトの名無しさん :2008/01/06(日) 01:05:33
>>65 なにが言いたいのかよくわからんw
Javaの擁護って何?
68 :
デフォルトの名無しさん :2008/01/06(日) 01:09:17
>>65 Javaは何向けの言語か解ってるのかな?
意図的でなければ全角混ぜるのはやめてくれ。
70 :
デフォルトの名無しさん :2008/01/06(日) 01:13:07
71 :
62 :2008/01/06(日) 01:14:43
>64 実は最新のJAVAだと結構早いっていう噂を耳にしたことがある(Java6か7か8。どれか忘れた) 実状はどこも1.3.1とかだから遅すぎてやってられんです ちなみにjavaでC/S型のwindowsアプリのプロジェクトやったことあるけど、VB6と比べて圧倒的に負けていたよ
72 :
デフォルトの名無しさん :2008/01/06(日) 01:15:03
しょぼいブラウザで閲覧してるのか?しょうがない奴だな
>>69
75 :
デフォルトの名無しさん :2008/01/06(日) 01:16:43
76 :
デフォルトの名無しさん :2008/01/06(日) 01:18:22
>>73 改行にもこだわる奴もいるけど、馬鹿扱いされるよ。
そんな本筋から逸脱したレスばかりしてると。
77 :
デフォルトの名無しさん :2008/01/06(日) 01:20:31
君のテクニックで倍角を半角に変換するアドオン作っちゃよ?
君ならできるだろ?
>>73
>>71 J2SE7ではSwingのF/WがEoD的な改善されるようだけど、パフォーマンス的に改善は触れてないよ
JSRでもそこら辺無くない?
80 :
62 :2008/01/06(日) 01:24:59
ハロワの求人票に「JABA」と書く企業もあるから全角くらいで気にするな フリーワード検索に「JABA」で検索すると15件も引っかかる(お試しあれ、半角不可の仕様だから「JABA」は全角で検索して)
81 :
71 :2008/01/06(日) 01:28:38
>79 すまん、噂で聞いただけだから私は詳しいことは知らんのですよ。 バージョンがあがる度に速度が上がっていると聞きました
javaだと簡単に作れてC++だと作れないものってある?
83 :
デフォルトの名無しさん :2008/01/06(日) 01:51:38
C++ を改善したのがJavaだがw
×改善した △改悪した ○馬鹿でも使えるよう改造
85 :
デフォルトの名無しさん :2008/01/06(日) 02:30:28
86 :
デフォルトの名無しさん :2008/01/06(日) 05:25:30
C++が良いのは認めるとして
>>1 はこの板のどこをどう見て「C++良いって意見ばっか」ととったのだろうか
87 :
デフォルトの名無しさん :2008/01/06(日) 06:53:24
ほんとは言語なんて一つでいいんだけどね。できることはかわらんし。
そうだね。Rubyさえあれば他は要らない。
いやVBだ
Brainf*ck
>>63 C++とJavaのどちらを選ぶかって話なら、Javaを選ぶのが正解ってわけか。
実際C++は趣味で使うなら面白いけど仕事でなら勘弁して欲しい言語だし。
ここまで来ても煽りばっかりでjavaがc++よりどう優れてるのかが全然出てこないのな
Java がバカでも使えるというのは十分長所だと思うな。 見ず知らずの奴と C++ でプログラムを作り合う気はしない。
94 :
デフォルトの名無しさん :2008/01/06(日) 13:32:53
バカをつっこんだら余計に開発が遅れるなんて 人月の神話にも出てくるソフト開発マネジメントの超基本じゃん。 C++程度も使いこなせないアホと仕事をせにゃならん時点で そいつの能力、管理者の頭の程度、仕事の程度の低さなんかがよくわかるよ。
まずJavaの方がC++より古い言語だというのを確認すべきだ C++は学者が作ったので色んなパラダイムを吸収できる柔軟性がある そのためにのんびり次の規格を模索できる イマ足りないものはboosterがなんとかしてくれる Javaは現場のバカが作ったので柔軟性がないので ガンガン機能を追加していくほかない しかし、その精神はC++のそのものだな
>>94 仕事は金を稼いでなんぼなんです。プログラムスキルの有無なんて二の次なんです。
仕事を趣味のプログラムの延長上としか考えてない奴と一緒に仕事する他の人のことももっとよく考えてやって下さい。
>>96 仕事は金を稼いでなんぼなんです。プログラムスキルの有無も他人の苦労も二の次なんです。
仕事は生活をするためにしてるんです。会社なんて二の次なんです。 プログラムを仕事でしかやりたくない奴と一緒に仕事する他の人のことももっとよく考えてやって下さい。
C++にBoostがあるのはいいのだが、 CPANのように質より量的なリポジトリを作ろうという動きは無いのかね?
>>62 アプレットは流行らなかったかも知れないが
しぃペインターの様な物はなかなか面白い
>>99 boost file vault
boost sandbox
この辺がそれにあたるかも
>>99 C++はライブラリ化が難しいんだよなあ。ユーザの要求するパフォーマンスとか
機能とかが高いから、誰もが満足するものが作りづらい。
103 :
デフォルトの名無しさん :2008/01/06(日) 19:26:09
>>1 むしろ、なんでわざわざ素人が趣味で作ったしょぼい仮想マシンの上で、
がんばって低速にプログラムを動かそうとしてるのか。
104 :
デフォルトの名無しさん :2008/01/06(日) 22:26:42
カシオのポケコンCインタプリター使え
高校で使ってたがあれはなかなかメモリ制限がきつかった
106 :
デフォルトの名無しさん :2008/01/06(日) 22:50:10
OS無しでデフォはBASIC
8ビットマイコンでしょうか
108 :
デフォルトの名無しさん :2008/01/06(日) 23:00:51
16ビット 最初に買ったシャープのポケコンは8ビット。〜大昔なので忘れた。 それで、消費者金融の支払い管理ソフトをBASICで作成していたな。
>>108 悪事に加担するのはさぞかし
気持ちが良かったでしょうな
110 :
デフォルトの名無しさん :2008/01/06(日) 23:14:04
その逆の立場だったんだけどorz アパート含めて支払先17箇所の管理はやっぱコンピュータ使わないと。 ワープロ専用機全盛の時代。 当時としては、1つのプロジェクト仮に10名程度いたとすると、個人でPCを 持ち込んでいたのは1名程度、2〜3台のPCをオフラインで替わりばんこ に使用orz その頃はK&RのC、をよく使ったもんだ。
486DOSPC用のソフト開発にはTurboPascalとTurboC++とLSI-C試食版のどれがいいだろうか‥‥
ターボパスカル コンパイル速いからね!
よし、TurboPascal5.5落としてくる
114 :
デフォルトの名無しさん :2008/01/07(月) 02:54:07
115 :
デフォルトの名無しさん :2008/01/07(月) 18:21:08
マジレスすると最近はC++の評価悪いよ。擁護派も関数型とかに寄り道してんじゃね? でもこの釣られ具合は奇妙。やっぱりC++に対するなんかはあるんだよな。
誰がどこでどういう基準で評価したんだろうね
118 :
デフォルトの名無しさん :2008/01/07(月) 22:48:54
Windows系はC++で開発された。 Unix系はCで開発された。 C++が流行ったのは今から20年前。 今は、JavaとCが流行り。
119 :
デフォルトの名無しさん :2008/01/07(月) 22:52:46
処理速度 C>C++ >Java ファームウェアはCに依る開発が主流。
コンパイル速度 Java > C > C++ C++ は何で? っていうくらい時間が掛かる時があるね
今の流行りがjavaとcなんて初めて聞いたぞ cはともかくjavaなんてとっくにブームは過ぎてるし
cもjavaも需要があるからいいさ 初心者にやたらとC#とjavaばかり薦める奴はいるが
C/C++なんて進めても 現代を生きるボーイは投げ出すだけ
>>121 求人サイトで、JavaとかCとかVBとか言語で検索かけると、どこのサイトもたいがいJavaが一番ヒット件数多いぞ。
うんざりなんだよ CだJavaだVBだRubyだ そんな話はもう そんなことを話せば話すほど俺たちは浅ましく醜く這い回ってることになる そんな仕組みを考えた馬鹿野郎がほくそえむ 悔しくねえのかよおおおおおおおお
javaが流行ったのって2000年前後だろ その次の流行りがC#とruby 今はなんだろhaskellとかschemeの関数型言語全般か
流行ってるってどの界隈での話なんだよ。 業務なのか、趣味グラマの間でなのか。
>>127 >その次の流行りがC#とruby
C# が流行ったなんて聴いた事が無い。Haskell や Scheme が
流行ったのはだいぶ前。Erlang が流行る前くらいでしょ。
Ruby の前には Python がかなり持ち上げられていた。
今は言語の流行り廃りと言う観点では無風状態だね。
良い物は残る 今は黙してれば良いのじゃ
HaskellやらSchemeなんかよりはC#の方が明らかに流行ってるし
関数型はそんなには受け入れられない C#やJAVAとは違うユーザ層というかね 用途もC#やJAVAの方が幅広いんじゃないのかね 単純には比べられまい
スイーツ(笑)な奴がいるな。 メディアに踊らされるのは勝手だが脳内で程ほどにな。
という事にしたいのですね:-)
なんかもう新しい汎用言語ってでなさそうな感じなのかな?
C#とjavaはスポンサー企業がいて提灯記事を書く御用メディアがいるから流行ってるように見えるんだよ で、その提灯記事を本気にしちゃう程度の奴が信者になって考えるのを止めるんだ
妄想もここまで来ると怖いな
IFが単純でパフォーマンスなんてどーでもいいような オーダーメイドのビジネスアプリを ハイスペックなPCやサーバでごりごり動かしてる分には 使い勝手がよろしかったと思うが
そういう意味では、今のコンピュータはどれを買っても超ハイスペックだよね
C 0x として C にオブジェクト指向風のシンタックスシュガーを 加えた言語が出来たら C++ を捨てられる
本当は一つの言語をもっと深く使い込む社会が一番理想だと思う。 もちろん分野や用途によってさまざまな言語や技術の特化があっても良いが。 一番悪いのは「新しい技術で市場を独占してやろうぜ」みたいな営業根性で 糞技術を無理やり普及させようとする流れ。言語で言うとC#かな。
>>141 プログラム書くと、入出力とか状態の処理とかで、気がつくとなんかのインタプリタを
書いているようなことってない?
そういうとき、処理に適した処理系が生であったらなぁと思うのは自然だと思うんだけど。
で、そういうのって結構通信とか、I/Oとかのアーキテクチャに左右されると思うので、
やっぱり時代時代で異なる言語が使われるのはある程度予想できるかなと思う。
別にC#は糞言語じゃないだろ。 M$の今のVSでもwin32api直叩きでコード書いても 特に問題無い訳でM$の方針としては ネイティブでないと書けない物はネイティブで それ以外のGCにまかせても問題無いような プログラムは.net化しようという方針であって それでもunsafeも化としてるんだから まぁ、その、要はwindows使う限り M$様にしたがえって事だろ。
144 :
デフォルトの名無しさん :2008/01/08(火) 02:24:51
>>120 119に対する皮肉かな? つか俺が119なんだがw
コンパイル速度を気にするような立場なのか?
俺は立場上、処理速度を重視し言語の選定もやってる訳だがw
最近の学卒の子は大概Javaは使える用に飼い慣らされて来ているが
Cの解析やらせると、関数へのポインタ辺りで分けワカメが多い。
関数はmain()のみって奴よりはマシだけどな。
146 :
デフォルトの名無しさん :2008/01/08(火) 02:33:49
せっかくC++使わせてるのにCライクなコーディングをしてくれるorz まあ、俺には良くわかるけどなしかし、・・・・・
147 :
デフォルトの名無しさん :2008/01/08(火) 02:44:38
LBのWin軽快ツールズ入れたら却って処理が重くなったし、セキュリティソフト と干渉してPCが不安定になった。 全く、ツールに監視系の機能を持ち込むなよなw
148 :
デフォルトの名無しさん :2008/01/08(火) 06:14:41
最近はファンクタのおかげで処理速度はC++>Cなんだがな
ガベコレは構文がシンメトリーでないから糞
それは無いわ。C++ は LL ばりに無駄な処理が多いからな。
C++なんか窓以外では永久にニッチ言語のままだろw
>>150 無駄な処理って例えば何かな?言えるかな?
c++とc++コンパイラは無駄な事なんて一切しないぞ。コードに明示してないことはやるが。
あとc++をcより速くすることは可能だ。これはファンクタがどうこうじゃなくてinlineの力だ。
派遣も派遣同士で慰めあってほしいよな。 正社員に申し込んでくるなんて図々しいにも程がある。
155 :
デフォルトの名無しさん :2008/01/08(火) 14:00:37
Windows VS UNIX (C++) (C)
156 :
デフォルトの名無しさん :2008/01/08(火) 14:03:02
某超一流企業で委託社員ですが、何か?
157 :
デフォルトの名無しさん :2008/01/08(火) 14:04:43
同じ本流ですが、正社員の平均賃金以上はしっかり稼いでる委託社員ですが、何か?
158 :
デフォルトの名無しさん :2008/01/08(火) 14:38:08
結局、UNIXの尻ぬぐいはWindowsと言うことで
上手くやれば最後の境界のmallocを特別処理するだけで済むけどね。
ごめん誤爆。
>>153 inlining は C++ だけじゃなく C だって Lisp だって出来るよ
C++ で作ったアプリを C 並みに速く起動する事は無理だけどね
C 並みに小さいバイナリを生成するのも無理
>>161 仕方が無いけど ObjC は C++ より遅いからなあ...
std::sortはqsortより速いというのはよく聞く話。 Cはさすがにコールバックをインライン化して展開するとか_だからねぇ。 C++がCより起動が遅いというのは意味がわからん。 初期化オブジェクトが増えてるから、という話か?
テレビで女子アナが腹筋してるけど 喘ぎ声に聞こえなくもない
アプリの起動とC++かCかってのは全然別の話だろ
>>166 C++=バイナリを小さく出来ない=起動が遅い
あとマングリングとかもキモイ
仕様もでかすぎ
コンパイル超遅い
ソースコードがキモイ
シンタックスが汚すぎ
仮想関数遅い
テンプレート変態過ぎ
cin, wcinあたりの初期化のぶんはCよりよけいに時間がかかるな
C++はどんどん変態言語になりつつあるな
言うまでもないが変態は最上級の褒め言葉
そういうレベルのことが気になるんならCを使ったらいいんじゃないの
変態というか露悪趣味的だな
彼らが脇目も振らずに変態道を突き進んでくれたおかげで 今日の『脱 C++ 化』が進んでくれて嬉しいよ。 おかしな勘違いをして美しい言語なんかを目指していたら 今頃 C を使う人間なんていなかっただろうと思うと、 本当に良かった。
>>167 1つ気になった。
仮想関数呼出をあれ以上速くできるの?
俺には、同じ仮想関数を複数回呼ぶときにはキャッシュすることくらいしか思い付かない……。
javaでC++のtemplateと同じことが出来るなら今すぐjavaに乗り換えるんだが
>>143 俺的にはC#はそこそこ綺麗な言語だと思うが、.NET2.0は糞だ。
機能的にカバーしてる範囲が狭すぎて存在意義が感じられない。
c++って満足できるコンパイラすらないってどっかで見たけど。 boost ってやつを使うとき限定だったかな?
.NETもVB6と同じで使い込むほどに増えるAPI定義の山
C++/CLIなら殆どのことは#include <windows.h>で…
>168 別にiostream使わないなら初期化はさぼれるでそ。 自分でスタートアップルーチン書けばいいんだから
>>174 それ以前に、ちゃんと
「C++が仮想関数を使ってやることをCのやり方でやった時」と比べて「遅い」
と言ってるのかどうかが気になるところ。
仮想関数の機能の本質は処理の切り替えであって、switch-caseのコストと同等。 問題は仮想関数はインライン化できないことであって・・続きはEfficientC++で。 C++はCを含んでるんだから、仮想関数が遅い場面ではFunctor・インラインswitch-case とかを選べばいいわけで、その辺のパフォーマンス調整の自由度の高さが魅力。 他の言語は普通仮想関数とかはそれなりに隠蔽されてて、いじれんからねぇ。
そんなとこ普通いじらんでいいよ 最適化方法は他にも沢山あるんだから
C++はiostreamが嫌ならstdio使えばいいだけの話だからねぇ
イオス!
スターディオ!
いや、stdioって切り替えできない標準入出力じゃん。 Windowsアプリでstdio弄ってるソース(←オプソ系が結構使ってる)はコンパイルリンクできないし。
ウブントゥ!
えす、ティー、エゥ!
リダイレクトで別に立ち上げたサーバーアプリ上に作ったストリームに対して出力 とかも出来るんだろうなぁ stdioって以外と凄そう
>stdioって以外と凄そう いや、Windowsならできない。
>>191 できないわけないだろ。パイプ作ってCreateProcessの引数で渡すだけ。
Windowsで、明示的にやりたければ_openoshandleして_fdopen。VC++限定だけど。
>>184 何か自虐的だね
そんな事をしても結局 C には追い付けないのに
>>194 と、C++に挫折したC厨が悔し紛れに呟いております
>>195 挫折ってのは、素晴らしい物に到達出来なかった時に使う単語だぜ。
>>191 初期状態でコンソール開いてないだけで
Windowsかどうかは関係ないだろ
JavaだったらOSがどうこう無視してオブジェクト間通信ができるぜ
C++ で書かれた有名なソフトウェア Firefox Thunderbird OpenOffice.org iTunes Java VM MS と Adobe は C++ が多そうだな
windows用として店に並んでるソフトはことごとくそ++じゃないか?
MSがJava陣営じゃない=ソフトウェア開発はJavaではなくVisualなんちゃら
こんなところに名探偵が
206 :
デフォルトの名無しさん :2008/01/10(木) 04:07:39
パウロが
C++09 ではガベコレが使えるようになるのかな?
208 :
デフォルトの名無しさん :2008/01/10(木) 06:30:19
>>207 ならんだろ。
Javaみたいにサンドボックスないとできないんだから。
それに、GB勝手に走られて困るケースも多い。
209 :
207 :2008/01/10(木) 06:52:31
201 その昔、delphiってのがあってだな。。。
残念、今でもある。
パッケージソフトでDelphiってそんなにあるかね?
パッケージソフトに多いっぽい。 使われてるビットマップボタンとウィンドウの挙動で分かる。
BCBじゃねーの? pascalなんてはやんねーよ。
>>207 C的に考えると、メモリ管理は言語仕様でするべき事柄じゃない気もするが、
new演算子などというものを言語仕様に取り込んだC++は言語仕様の責任でメモリ管理するべきな気もする。
だとすると、ポインタを使うのはナンセンスなので参照にして。。。Javaじゃん
>>215 現状、auto_ptr, tr1::shaed_ptr
真にマンセーしかない言語はscheme
218 :
デフォルトの名無しさん :2008/01/12(土) 15:44:13
C#ってJAVAの人気にマイクロソフトが慌てふためいて、作った言語だよね。たしか、、 これって使ってる人多いの?
>>218 慌てふためいたというよりも、Javaを皮肉ってJavaを超える言語に
したって感じだな。ISO/IECにも規定される位だからよく考えられている。
220 :
デフォルトの名無しさん :2008/01/12(土) 16:59:36
gccのC#フロントエンドってもうあったりする?
Monoしかねーだろ
>> 219 その規格ってやつだが、普通のC/C++のように、 はじめに言語仕様ありきではないところに激しく違和感。 付属書として定義された「標準ライブラリ」はそのまんま.netだし、 System.Stringなしではエントリポイントさえ書けないし、 ようするに汎用言語じゃないんだぜ。 ソースファイルの文字コードとか、 コメントの書き方(付録として)までとやかく言うんだぜ。 未来を担う言語になるというのであれば、 各プラットフォーム用のCLIをMicrosoftが責任を持って作るべきです。
CLIはあるだろ。実装がないだけで。
んなこと言ったらJavaだって汎用言語じゃねぇーですよ
System.string 使ってるから汎用言語じゃないって理屈が分からん。 Microsoft.String とかだったらわかるけど。
Windows.Formsなんかは標準化から外されて入っていないけど、 逆に入ってた方が他OS用のクローンは作りやすかったんじゃないの?
229 :
デフォルトの名無しさん :2008/01/12(土) 19:21:15
処理速度で比べるならアセンブリが最強 しかし移植性・生産性共に最悪 アセンブリでゲームとか作る廃人いたらおもしろそう
230 :
デフォルトの名無しさん :2008/01/12(土) 19:27:46
CとASMはまだ判るけど、C++は難しすぎだ。
>>230 CとASMが判るなら、C++も判ると思うのだが...
>>223 昔と違って、最近の技術の規格ってのは企業が自社技術を広める上で
「ハクを付ける」ために取得するのがほとんど。
広まって派生が増えてから「統一するため」に作るのが規格だと思ってるなら、
広まる前から「広めるため」に作る規格には違和感あるかもね。
>>225 で、「言語仕様ありき」ってのは、C/C++の規格は
「広まった物を規格化(統一)するための規格」ってことじゃないのかな。
>>223 が言ってることの具体的な部分は、
ANSIでC/C++の規格が決まった時には、その規格に基づいて実装されたコンパイラは無かった。
C#の場合、自社で作った時の規格をそのままISOに持っていっただけだから
今のMSが出してるC#のコンパイラはISOの規格に基づいて実装されてる(と言えるかもしんない)
っつーことか?
>>228 ControlクラスにはWndProcなんてメソッドがあるくらい、
物凄くWin32ベッタリだぞ。
WndProcのどこがMS依存なんだよ
メッセージを処理するプロシージャ、って別にWindows特有の概念でもないよな。
ハロウィーン文書とか読んだらとてもC#を推す気にはなれない
いまさらわざわざC++が良いなんて意見もあんまりないような・・ 良くも悪くももう超実用だからねぇ
C++ の数少ない評価ポイントだよな >> 実用されている
だが実際潰しの効く言語は飯の種になる。
JavaとかC#はJITコンパイラを通してももっさりしているから キビキビ動くC++は重宝してんだろ
OS(カーネル)を作れる言語はどうやっても生き残る。
>>235 どこまでのメッセージに対応するか次第だろうね。
IME関連とか単純にメッセージ投げるだけでは、あっても意味ないでしょ。
C++ でカーネル? BeOS の事か
>>244 あ、C++に限らずって話でした。
俺OSっぽいやつならちらほら見かける>C++カーネル
WindowsもC++っぽくないか? DLLのサイズとか見てるとそう思える
kernel 本体は exe じゃないの?
kernel本体はkernel32.dllだと思ってたが。
ntoskrnl.exeだっけ
WIN.COMしか知りません
え?お前ら自分でOS書いてみたりしないの?
マイクロカーネルに本体も糞もない
ある程度規模の大きいシステムを作るってのは目標ではあるけど RPGゲームのベースシステム以上のものは作った事が無い俺でした
おれもメガバンクのバンキングシステムよりでかいのは作った事ないな。
amazonには5000万行のC++コードがある、って聞いたよ
>>255 どんだけぐちゃぐちゃな重複コードだらけなんだろうな・・
255のソースはバベル案内かな。 それによれば、かなりひどいことになってたらしい。
>>235 Windows以外のOSにもWndProcという関数があったのか(笑)
もちろん同じメッセージIDが送られてくるんだよな?
名前は自由だろ
260 :
デフォルトの名無しさん :2008/01/13(日) 23:36:34
「C++ オブジェクト指向プログラミング」って面白いよね、あのぶ厚い専門書。 今まで読んだプログラム関係の専門書で一番面白かった。
>>260 Amazonで検索したけど、そんな本ないよ。
262 :
デフォルトの名無しさん :2008/01/14(月) 00:09:07
>>261 「最新ANSI C++オブジェクト指向プログラミング」だった。
C++は言語のお勉強だけでお腹いっぱいになっちゃうのがいいところでもあるし悪いところでもある
>>262 前から気になってたけど良さそうだから買ってみるわ。
>>262 ぐげっ。
俺その本持ってるわ。
実際のプログラムが数多く載せてあるが、一通り試してみて
結構難しいと思った。
この本がきっかけでデザパタに興味を持ったんだけどね。
ならないよ 巨大な libstdc++ をロードしなきゃいけないし 例外機構とか余計な物が沢山入る
組み込み用途にはEmbedded C++とか使わないと苦しいけど 一般のPCやWSではC++でもCと同等以上。
言うだけなら幾らでもどうぞ
どうぞCでいつまでも苦しんで下さい。
面白い冗談だな。君も C++ のゴミコードに埋もれて楽しんでくれ。
君はCのゴミほどの価値もない糞コードにまみれて苦しんでくれ。
今度のレスは工夫が無くてつまらんな。 他に言う事が無いなら C++ の話に戻ろうぜ。
C++覚えた後に、Cでプログラム組めと言われても困るのは確かだよね クラスもテンプレートも使わないでプログラムしろって、どんな罰ゲームですかみたいな
俺もそう思っていたが、関数型言語に触れてみてクラスは必須ではないことに気付いた。
・C++はゴミの塊だけど、他に使い物になる言語も無いし、仕方なく使うよ ・C++は変態のおもちゃだけど、自分は変態だから使うよ ・C++は最強のプログラミング言語だ! 他は糞 最近は一番下は絶滅したと思っていたけど…
277 :
デフォルトの名無しさん :2008/01/14(月) 10:01:21
まあ、オブジェクト指向言語ってGUIの為にあるって言っても過言でないからね。 反論は認める。
278 :
デフォルトの名無しさん :2008/01/14(月) 10:10:42
>>274 はやくmallocした構造体に関数ポインタを詰める作業に戻るんだ。
>>275 >>277 全然オブジェクト指向プログラミングを理解してないんだね
かわいそうに
それじゃC++もtemplateもboostもSTLも理解できなかったでしょ
>>274 C++が使えない環境に、C++のコードを移植したときは途方に暮れた。
テンプレートや仮想関数を手で展開したんだもんだ。2度とやりたくねえ。
>>275 オブジェクト指向言語を使った後、再び関数型言語に触れてみて、クラスって必須だなと感じた。
C++とCをどちらも仕事で使っているが、Cでも構造体をクラス風に使うようになった。 # メンバ関数に相当する関数(アクセッサなど)は一つのソースに閉じ込める感じ。 流石に、公開用と内部用に構造体の宣言を分けるところまではしていないが、Cしか知らない頃よりは見通しがよくなった。
chaos ppとかboost preprocessorを知ってからCのコードが酷い事になった
>>275 なんでそう思ったのかな?煽りじゃなくて、純粋に興味ある。聞かせてくれないか
Webサイト作る時はJavaかなぁ その他ではC/C++が殆どだなぁ 業務ではないけど、捨てツールは気分次第でC#になったりする
>>282 そういうのは一人で書いている分にはいいんだけどねぇ。
チームだと言語仕様上強制力がないのでどうしても割れ窓発生→破綻となるのが俺んとこのパターン。
結局Javaの圧勝だな
>>284 はプログラムにはクラスが必須だとでも言うつもりか?
>>287 お前みたいのがいるからJavaが格下に見られるんだろうなw
>>288 お前それ、プログラムに関数が必須か? と言ってんの変わらんぞ
あまりにも低脳すぎるだろ
>>288 文脈が読めない子?
>関数型言語に触れてみて
っていう前提があるんだけどw
Cでオブジェクト指向プログラミングをやるなら最初っからC++を使えばいいじゃない
Boostでスマートポインタ使うなら最初からJavaを使えばいいじゃない
C言語のソースは読みやすいとか聞くけどCoreUtilsのソースよりboostのコードの方が読みやすい気がするのは 慣れの問題でしょうか?
>>292 C++のないワンチップマイコンってあるんだよね。そんな時は泣きながらオブジェクト指向風Cコーディングをする。
QuickBasicでいいよ
名前空間だけでもCよりC++使う意味があるというもの だから俺は古いlispが嫌い
>>295 C++ から C へのトランスレータって今は無いの?
はじめの C++ コンパイラってそうだったんだよね。
ARMの頃にはもうトランスレータはなかったような
Cにどっぷり浸かった技術者がC++を新たに勉強と言うのも疲れる話だぞw
あー、名前空間だけでもCに導入して欲しいなあ。まーバイナリの互換性の問題で無理っぽいけど ・・関数名の最初に名前空間を表す接頭子をくっ付ける作業はもういやだお
大丈夫 C++を使っててもクラス名やファイル名に名前空間くっつけろって言われるだけだからおんなじだよ
>>292 それが嫌な人間がそれなりに居るから CoreFoundation やら Glib やら
Objective-C やら Xlib が現存しているのでしょう
オブジェクト指向はしたいけど、悪には手を染めたくないみたいなね
転んでしまった方が楽な場合もあるけど
Xlibなんて、X用のライブラリだね。 Windows系とUNIX系ではWindowシステムが大きく異なるからね。 お仕事で強いられているのならば、やむおえないよねw
はぁ?
やむおえない
MAC難民がごねておりますねえ。
Media Access Controlのことでしょうか
よくわからないけど、全角の方は入院したほうがいい
マッキントッシュ使用者のことです。
>>313 全角にこだわるのは、なんか意味があるのでつか?
>Windows系とUNIX系ではWindowシステムが大きく異なるからね。 情緒不安定としか思えない。
おまいら手厳しいな…
318 :
デフォルトの名無しさん :2008/01/14(月) 17:14:27
Cって使ってるうちに、クラスみたいなことやるよね。 スタラクトに関数のポインタ持たせて、オブジェクト化するみたいな事。 struct data { int val; char *str; . . int (* init)(); int (* func)(int a,int b); }; 自分はこれよくやってたもんで、C++がすんなり馴染めてC++のが楽だな と思った。
うんこしてくるよ
構造体で定義した型の変数もオブジェクトだし、int型の変数もオブジェクトだけどな あんまりオブジェクトオブジェクト言ってると勉強不足のアホが寄ってきてレベルが下がる
そりゃオブジェクトの定義による。 JavaのIntegerはオブジェクトだが、Cの組み込みintはオブジェクトとは「普通」言わない。
オブジェクトの定義によるから、C の int は OOP 的なオブジェクトとは 普通言わないけど、K&R 的にはオブジェクトって事でねーの K&R じゃなかったかもしれんが
323 :
デフォルトの名無しさん :2008/01/14(月) 17:39:28
みなさん定義にうるさいんですね。
宣言にもうるさいですよ。
いや、JISの規格にも「オブジェクト」って書いてあるし、
Cのintやら配列やらは「普通に」オブジェクトと言うよ。
が、
>>318 は文脈から分かるし、320の国語力が低いだけだろ。
とネタにマジレスしてみる。
>>315 全角にこだわらないのは、なんか意味があるのでつか?
>>325 確かにそうだけど、よく見ると
>>318 も相当酷かった
このコードは誤解を招いても仕方が無い
328 :
デフォルトの名無しさん :2008/01/14(月) 18:27:14
Cのつらいところは、スタック上に確保したオブジェクトのデストラクタが スコープぬけてもよばれないところだよなぁ。 だから関数の最後に EXITFUNC: if (ptr1 != NULL) { free(ptr); } if (ptr2 != NULL) { free(ptr2); } みたいなのがズラズラと・・・。
>>328 え?スタック上にあるオブジェクトに対して free()/delete が必要なのですか?
デストラクタが別のことをするのなら(リンクの張りなおしとか)その処理は必要だとは思いますが。
オブジェクトと実スタックの現在のアドレスをpushするスタックを別に容易すればおk 再度そのスタックが参照される時、現在の実スタックのアドレスと比較して大きいものを全てpopする。 このとき、対応するオブジェクトに属するデストラクタを呼べばハッピー。分かるかな?
現在のアドレス→現在のスタックトップのアドレス
332 :
デフォルトの名無しさん :2008/01/14(月) 19:04:50
全角にこだわるのは2ちゃん暦浅い奴
反論できないときに、用語の使い方とか文法にケチをつける奴ってよくいるけど、 「国語やり直して来いよ」 この返し方はアホすぎるだろ。
じゃあまぁ書くけど、 意味があるからこだわるわけであって、こだわる理由を聞くのはわかるが、 どうでも良いからこだわらないのであって、こだわらない理由を聞くのって 文脈が理解出来ないアホの子だろ。 ここまで言わんと分からんか。
337 :
デフォルトの名無しさん :2008/01/14(月) 20:46:05
>>329 いやいやオブジェクト自体はスタック上に確保してても、オブジェクトの
メンバはヒープ上にあるかもしれないでしょ。もしメンバの解放をデストラクタ
でやってるなら、C++なら自動で解放される。
>>330 メンドクセーシ、わかりにくい。
スコープ抜けるタイミングでデストラクタが呼ばれる言語ってC++くらいじゃね? あとはDとか。 C#はusingがあるけど、あれはネストが深くなるから使いにくい。
てか、スコープ抜けてデストラクタが呼ばれないのはGCあるからだろ? スコープ抜けてもデストラクタ呼ばなくて良いようにするってことは、 自前でGC実装する方が良いってことか?
DはGCあるけど、スコープ抜けるタイミングでデストラクタが呼ばれるようにすることもできる。
>>336 マ板に来てて全角と半角にこだわる理由がわからない人の方が
アホの子だと思います!
外国語もプログラミング言語を習得するのも段階はよく似ている。 途中までは全く理解できずにひたすら文法を勉強するのみ。 そのうち自分でいろいろ読み書きしていき、たどたどしいながらも 使えるようになってくる。 しかし、本当に理解の瞬間がやってくるのは突然だ−それはある日 全く何の予告も無しにやってくる。頭でやっていた作業が体に染み付いた 瞬間だ。
半角英数なんか使ったら文屋なら即首だぞ
そういう硬直的な社会では仕方が無い
347 :
デフォルトの名無しさん :2008/01/14(月) 23:51:18
清書する時点で全置換すりゃいいでしょ。めんどくさければマクロでもくんどきゃいい。 掲示板に書く部分で全角半角とかどうでもよくね?ソースコードにはやめてほしいが。
ネットワーク帯域利用、CPU時間等々が2倍になり、積もり積もって温暖化に繋がる。 ま、こんな糞議論してる時点で、人も機械も無駄なエネルギー使いまくりだけどw
>>326 君はいつもあべこべ君やってくれてるね?
うんこしたあとに集ってくる銀蠅そのものだよw
一応言っておくけど、
>>313 は全角英数を使っていることに突っ込んでいるわけじゃないぞ
>>315 が勝手に勘違いしてるだけ
>>328 デストラクタの機能はC++が元祖。
Cには素からありませんぞw。
C++が元祖かどうかは疑問。 絶対にCにはなかったけど。
事実に対して疑問をもたれてもねぇ。。
ソース無き「自称事実」が疑問を持たれるのは仕方ないな。
無かった事を証明する"悪魔の証明"ですか?
まぁ、そこまで話を厳密にすれば、「証明しようがない」って結論になって 話題そのものを流せちゃえるから、逃げるのには便利だろうけど、 ここで現実的に求められているのは、「353が一人で勝手に言ってるわけではないというソース」だな。
いやC++登場以前から何らかの言語にデストラクタの機能があった事を示せばいいんだよ
それは「C++が元祖ではない」という意見の人間がやることだけど、 とりえずこの場にはそういう意見は無いぞ。 「C++が元祖だという意見」と、「本当にそうなのかどうか疑問だという意見」があるだけ。
361 :
デフォルトの名無しさん :2008/01/15(火) 06:29:25
Simulaあたりが該当しそうだけど、あれもガーベジコレクションだったっけねぇ。 SimulaのGCとかnewが遅いからC++はスタックにしたらしいけど・・なんか あんまし30年前から変わってない話題だなあ
×ガーベジコレクション ○ガベージコレクション
検索すると、あんまり結果の量は変わらないな。 ガーベージも結構ある。ガッベージとガッベジは少ない。 まぁ、俺も書くときはガベージだけどね。
garbage をどうカタカナに転写するかで 100 レス使うつもりか?
なに大仰に構えてんの。馬鹿かいな。
(・∀・)ニヤニヤ
うにころどほ知らないのか
>>359 >いやC++登場以前から何らかの言語にデストラクタの機能があった事を示せばいいんだよ
自分で調べろよ、物臭な奴だなw
デストラクタって、メモリ管理機能の貧弱なCにオブジェクト指向を追加したから必要になったんだろ? メモリ管理が出来ている他の言語でデストラクタが必要なのか?
違うだろ。 コンストラクタとデストラクタがあれば便利。 ドトネトみたくメモリ開放のタイミング取れないものはカス。
デストラクタのお陰でtry-catchを書かずに済む
それ、チガ。 デストラクタじゃなくて、実体宣言のじゃね?
>>369 メモリ管理じゃない。リソース管理を行うために必要な機能。
↑こいつら、松田区 ちんぽの無い連中だなwっっっっっっっっっっっw
ニャッキ(ll )))))))
377 :
デフォルトの名無しさん :2008/01/16(水) 16:26:56
例外って使わないほうがいいの?
濫用せずに必要最小限に使うのがよい。
うそつけ。 戻り値判定をヤメテ、throwに変えるべき。 上位はcatchすれば良いだけだから。 ただ、例外で躓くのは、クラスライブラリが独自例外クラス定義してたり、 組み込みコンパイラが文法対応してないことくらい。
コンストラクタで使うとゾンビになるとか何とか
例外は遅いのでエラー処理の時だけにすれ。
↑ ちょ、それ逆。 例外は速い。
*何に比べて*速いというの? まさか、戻り値と条件分岐?
>>382 実験してみれ。
例外で戻るのとただの値を返す関数をそれぞれ10000000回ほどずつ
繰り返してみな。あまりの違いに歴然とするはず。
Cのerrnoの代わりに使ってる
386 :
デフォルトの名無しさん :2008/01/16(水) 19:52:34
ぶっちゃけ例外のありがたみを感じたことがない。
387 :
デフォルトの名無しさん :2008/01/16(水) 19:57:55
>>384 デストラクタとかそういう細かいの無視するから?
アセンブラ見ろとか言わないでw
C++が書けることは自慢にはならないが書けないと恥ずかしいことではある
例外と失敗の区別がつかない奴はすっこんでろ
>>387 More Effective C++ 項目15を読むか、次のプログラムを実行してみよう。
#include <iostream>
#include <ctime>
void func() {}
int main()
{
const int ITER = 1000000;
std::clock_t ct;
ct = std::clock();
for (int i = 0; i < ITER; i++)
func();
std::cout << "関数呼び出しのclock = " << (std::clock() - ct) << std::endl;
ct = std::clock();
for (int i = 0; i < ITER; i++) {
try {
throw 1;
}
catch (int) {}
}
std::cout << "例外処理のclock = " << (std::clock() - ct) << std::endl;
}
>>390 More Effective C++を会社におきっぱだから明日呼んでくる。
そのコードを実行したところで早い理由は一切わからないと思うんだが・・・
393 :
デフォルトの名無しさん :2008/01/16(水) 21:59:05
>>392 > コンストラクタ内で例外を起こす
>
>深刻度:★★★ - 重い深刻度
こんなウソの記事だすなよ
さんざん既出。真紀俊男だからしかたがない
>>393 やべえコンストラクタでメモリ確保できねぇw
つーかデストラクタでの例外と「同じ」深刻度かよ。
この記事書いた奴の頭が深刻な事になってんじゃないの。
そもそも秒単位の時間で100万回の例外ってどんな状況よ
>>396 いいから例外が遅いって事はわかっただろう
コストの大半はthrow時の生成が原因 throwの部分をコメントアウトして測定すると一気に処理時間が短かくなることからわかるけど int型をthrowする場合でもtryブロックの前後のトラップとは比べものにならんぐらいコストがかかる だから例外があくまで例外であるという程度の頻度で発生するなら殆ど問題無い程度のコストになるんじゃないかな? 100万回回してきっちり100万回例外になるようなのなんてどうみてもロジックミスだし
>>398 いやそれは初めからわかってる事
D&Eにも例外はコスト無しで実装できると書いてある
>>393 雑誌という公文書よりトイレの落書き2chが正しいとでも?
>>400 良くそういうことあるお。
M$のチョウチン記事よりかマシ。
Response and Balance 2600cc Double over head cam Electric Twin Turbo
403 :
デフォルトの名無しさん :2008/01/17(木) 21:56:23
try-catchで囲むことはほぼコストにならない。throwは秒間100万レベルとかに落ちる。 つまり正常系に利用しなければおk。 その他、リソースリークの問題があるからRAIIや例外中立など知識とノウハウが 結構求められるのが実情。うっかり使うと色々リークが起きて痛い目に合う。 けどそれらを乗り越えれば、コード省力化とエラーハンドリング周りの 余りあるメリットを享受できる。
>>403 だからそれは初めからわかってるって。
俺が言っているのは例外を投げるとすごく遅いって事だけだから。
だってさ
407 :
デフォルトの名無しさん :2008/01/17(木) 23:58:47
実際問題try-catch使ってプログラム組んでる人いるの?
throwが遅くて困る状況が想定不能
410 :
デフォルトの名無しさん :2008/01/18(金) 00:17:21
例外まったく使わない。標準ライブラリのiostreamもつかわん (これナニが便利なの?)、全部Cのライブラリで書く。 だれか、例外がホントウに便利だと感じられる具体例をオシエテクレ。
411 :
デフォルトの名無しさん :2008/01/18(金) 00:18:05
newも極力使わない。ほぼスタック上にオブジェクトは確保する。
412 :
デフォルトの名無しさん :2008/01/18(金) 00:19:37
STLは使う
大半の仕事はMFCかATLかAPIとDirectXだなー
>>410 毎度mallocの戻り値をNULLチェックする必要がなって、コードがすっきりする。
415 :
デフォルトの名無しさん :2008/01/18(金) 00:43:58
>>414 ぜんぜん便利じゃない。Cのマクロですむはなしだし、
例外ハンドリングの記述と、マクロ処理の記述は大差ない。
>>410 激しく楽になるってば。。
例外なしで戻り値タイプだと普通関数の中ってこんな感じになるでしょ?
int OrzFunc(){
if((ret = GetMonyomonyo()) != 0){
perror()
}
if((ret = GetFugafuga()) != 0){
perror()
}
・・・
return ret;
}
んで関数呼ぶたびにうだうだ戻り値チェックして・・ってだるいでしょ。
それが例外にするとこれだけで済むわけだ。
void OrzFunc(){
GetMonyomonyo();
・・・
GetFugafuga();
・・・
}
なにが楽ってtry-catchは「必要がない場面ではいらない」わけだよ。
コールスタック上ではだーってはっしょって書けて、いざ画面とかログに
出すとか例外中立にする場面とかで書けばいいだけ。
最悪mainにだけcatch書いてメッセージ出したっていいわけだ。
システムやゲームソフト書いてるならともかく 例外によるオーバーヘッドなんか瑣末なもんじゃないの? アホなI/Oやオブジェクト確保とかのがよっぽど癌。
418 :
デフォルトの名無しさん :2008/01/18(金) 02:09:35
>>416 管理しきれる戻り値の伝播の手間と、管理しきれない例外の伝播の手間を
考えれば、俺は前者のほうが楽だと思うし、その例でなにか便利に
なったとは到底感じられません
419 :
デフォルトの名無しさん :2008/01/18(金) 02:11:54
>>417 例外によるオーバヘッドは全然瑣末じゃない。
がしかし、あなたが作成するアプリケーションの領域によっては、
ユーザ(顧客)の満足度を勝ち取れるだけの十分な競争力を
うみだせれば、瑣末なこと。
これは例外だけじゃなくて、言語もそうだし、HWもそう。
#define _Ex(func) if((ret = func()) != 0) perror() int OrzFunc(){ _Ex(GetMonyomonyo()); _Ex(GetFugafuga()); ・・・ return ret; } これで。
Cだとライブラリの数だけエラー処理の方法があり、それを把握するのが面倒。 NULL返し、真理値返し、-1か正常値返し、GetLastError() (Win32), HRESULT (Win32), etc... 例外処理を持っている言語だと、みな例外処理へ収束する。 CのAPIを直接叩く機会の多いC++だと、あまりそうとは感じられないけれど。
ほんとは例外は使う使わないじゃなくって必須の処理なんだけどね・・ まあnew/operator/castとかの例外処理はまともに扱われてないのが実情。
確実に連続稼働していること求められるシステム以外で、 newとかmalloc失敗するときってexitしちゃだめですか?もちろんダメなケースはありますが。 みなさん成功しなければプログラムが機能しないというnewとかmallocに失敗したときはどうしてます?
再起動する。
メモリプールを使ってるときに断片化が進んでもnewやmalloc(というかrealloc?)は失敗するんじゃね? でそういうときは例外処理を使ってコンパクションを行なったりと選択範囲が広がりそう
>>420 マクロだと関数が入れ子になったとき対応できないんじゃ…
sqrt(pow(asin(x), 2) - pow(acos(y), 2))
みたいなのとか、errnoの代わりに例外投げてくれたらなーとか思ったことない?
じゃinline関数で
阿呆ですか。
#define _Ex(func) if((ret = func()) != 0) perror() template< class Func > inline void _Ex2(Func const& f) { if (f() != 0) perror(); }
例外使うと失敗したときと成功したとき両方の
>>416 そもそも、例外の来ないAPIなんか使うときは、前者で毎回戻り値チェックしてthrowするしかないだろ。
Win32って関数の数だけエラーチェックの作法があるよね。
SEH
そうでもない。 戻り値という1作法。 関数の数だけあるのは、呼び出し順序ルール。
EnterCriticalSection Windows 2000/NT: In low memory situations, EnterCriticalSection can raise an exception.
結局、例外で投げるものはお前らで考えろ。だから普及する分けないよ。
え”? クラスライブラリのエラーって全部例外投げてくるんだけど。。。
クラスライブラリも言語仕様から見れば「おまえら」
439 :
デフォルトの名無しさん :2008/01/18(金) 19:09:24
どんな用途にもC++が最高!とかいうつもりは毛頭ないが, 最終的にピンチに陥った時に頼れる言語だと思う.
言語仕様で決められる例外って…
441 :
デフォルトの名無しさん :2008/01/18(金) 21:13:18
お前らちゃんと例外くらい勉強しろよ・・ そんなだからメモリ足りなくなったら落ちたり、オーバーフローでおかしく なったりするんだよ
442 :
デフォルトの名無しさん :2008/01/18(金) 21:39:38
今のOSでmallocが失敗することなんかあるの? 昔の65kしかなかった頃は、malloc失敗することあったよね。
>>441 メモリたりなくなっておちることはない。システムが許容可能な、最大負荷と
メモリ量を稼動前に計算するから。システムに搭載されているメモリで
受付可能に制約をかける。
メモリ不足例外が起こりうるシステム自体そもそも問題でしょ。
newの例外はメモリ不足例外とは言わないと言いたいの?
>>443 が作るプログラムには一切のバグが含まれないらしい。
素晴らしいな。
例外処理なんて半分ぐらいフェイルセーフだろよ。
>>446 フェイルセーフのためというのであれば、メモリ不足例外をいっしょくたにして
扱うのは全然フェイルセーフではない。オブジェクトごとに最大負荷において、
消費するオブジェクト数をあらかじめ評価しておいて、万が一足りない事態が
発生したら、そのオブジェクトに対して復帰する手段を仕掛ける必要がある。
これって、結局例外ハンドリングであろうが、Cの戻り値評価であろうが同じ
なのよね。だから、俺は例外がありがたいなんて思ったことはない。
WindowsのSEHて使わなくてもいいの?
447みたいにきちんと対処する人なら、 確かに例外処理のありがたみなんて感じないこともうなずける。 平均的なプログラマはろくにチェックなんてやらないということが、 例外処理のなかったC++での、newハンドラ導入の理由としてD&Eで挙げられている。
何でもかんでもあちこちでチェック必要な構成になってたら、 それはそれで効率悪そう
>>450 本来は、なんでもかんでもあちこちでチェックは必要なのだよ。
だから仕事用じゃなくて、自分限定とか知り合い限定のプログラムで
「例外おきた?ワリィワリィ、後で直すわ」ですむプログラムがなんと
心地よいことよ。しかもRubyで書いてたら最高。
> 確かに例外処理のありがたみなんて感じないこともうなずける あほやねぇ。。ExceptionalC++読んでから一年くらい例外モデルで コードを書きまくってみな。まったくありがたくもない概念がなぜ 近年の言語にはみな導入されているのかが見えてくるはず。
止まっちゃいけないシステム作ってるけども、例外は扱いが難しいから使うなって指令が来て使えないぜ
Windowsで止めないためにはSEH使うしかないだろ。 ゼロ割とか。
なんでもできる言語って言ったらアセンブリだろう アセンブリにできないことはCPUにもできないわけで
経験不足を書籍類で補うのはいいんだが、経験に昇華してから発言して欲しいと思う。
コンストラクタで例外使うとcatch中にデストラクタと同じコードが必要になるんじゃないの?
>>457 スマートポインタにオブジェクトの管理をさせておけば片付け処理は不要
ってMoreEffectiveC++に書いてあった
コンストラクタの例外なんて経験無いから書籍で補ったもんだけどな
>>457 要らないぞ
メンバ変数も、またデストラクタに任せればいい。
class hoge
{
hoge() : p(new int), q(new int) {}
boost::scoped_ptr<int> p, q;
};
qの初期化で例外が投げられても、pはきちんと解放される。
例えば、HFILEとかHGDIOBJみたいな、メンバが生のリソースだったらどうするの?
包む
462 :
デフォルトの名無しさん :2008/01/19(土) 13:31:57
例外わかんねーとかはあまりに致命的な経験不足だな
悪かったな。 俺も、try とcatch はピンとこないよ。
まぁ、書いてみろ。いいもんだ。
漏れもテンプレートと例外なしとかじゃもう書けねー
要するに、割り込み処理や、エラー処理をすっきりさせたのが”try とcatch”ってことか。
>>466 >割り込み処理
せめてコンピュータの常識くらい身につけようぜ
C++でDB2のAPI持ってるかどうか知ってる奴いるか?
なんだ割り込み処理も知らないのか?
お前偉そうなこと言っても無知じゃん
>>467
ということにしたいのですね:-)
おや、割り込みが入ったようですな
>>469 いや、割り込み処理とtry, catchを結び付けようとするのは、
非常識だといいたいのだけどなぁ
分からないのではない。 存在そのものが矛盾しているから使わないだけ。
まぁ
>>469 は、ドライバとか書いたことないのだろうけど。
>>475 何のドライバをかきましたか?
全部一人でかけましたか?
暇だからDB2 Liteでも買ってくるかな。 APIはもう解ったし。
>>476 (たくさんの)オーディオチップ、Etherコントローラ、Timer、UART、SDなどなど。。。
全部一人で書いたよ。
無理しなくてもいいよw
あり得ないだろ? 全部一人なんてw いったい何歳なんだ?w 今は平成だぞw
書ける人は書けるだろ。
>>481 何があり得ないんだ?
割と普通じゃないの
んむ。普通だw
横レスだが、C++でドライバ書けるOSって例えば? LinuxとBSDのドライバしか見たことないんでよく知らないんだが。。 あとどうでもいいけどQt、wxともに例外は投げてこないよね確か。
>>485 そういやC++のスレだったなw
Symbianとかそうなんじゃない?使ったことないけど。
>>466 の「割り込み処理」から発展した話であり、誰もC++でドライバとか言ってないし。
>>483 流用してんだろ?既存類似のプログラムから。
>>483 みたいな奴は偽装もやってそうだなw
(組込み用語の偽装なw)
>>488 ドライバって、チップ依存だから、毎回チップの仕様書よみながら書く必要があるのよ。
チップの種類によってドライバの構造は似ているというのはあるけど。
>>486 なるほど盲点ですた。確かにそうでなきゃおかしいなww
トン
ドライバにもGUIを伴ってる奴もあるのに、何とレベルが低い。
>>489 面白くない文章は、草を生やしても面白くならない
ハンドラとドライバとエンジンの区別もつかない奴がいるな。 こりゃまいったw
>>485 Mac OS X の IOKit は Embedded C++
窓もC++とCOMじゃね?
>>485 Qtの中でbad_allocが起きたらそのままやってくる
>>499 そりゃそうだが。。それはQtが投げてるとは言わないと思うんですがどうなんでしょう。
まあQtの実装でthrowしてなくても言語がthrowするからねぇ、くらいな 感じで・・外から見たらQtのthrowかbad_allocかの違いはあんま関係ないかなと。 そうこと聞いてんじゃないんだっけ?
>>485 最近のWindowsのユーザーモードドライバがC++で書ける。
IUnknownとか使うとってもCOMだし、見かけはただのDLLのようだ。
ドライバなんて1個も書いたことないけど。
>>501 おおすいません。
例えば、MFCだとCMemoryExceptionとかCFileExceptionとかフレームワーク独自の例外投げてくる
じゃないすか、でユーザは当然それをキャッチすることが求められると。
Qt、wxとかはそういうライブラリ内部のエラー処理のための独自の例外は投げませんよね確か、って事を
言いたかっただけです。
みなさんQtとかwx使う時bad_allocはcatchしてます?僕は今まで完璧スルーですたお。。。スマソ
あとFirefoxも確か例外は使ってなかったような。。
>>502 ヘェーWindowsスゴイっすね。。
いや別にすごくはないだろ
catch(...)で不明なエラーが発生しました的に処理しちゃうのが実情っぽい 感じだよね。 >あとFirefoxも確か例外は使ってなかったような。。 前見たmozillaのコーディング規約はすごかったなあ。あらゆるコンパイラで 動かそうとすると例外・テンプレートは禁止らしい。その他も色々あって もうC++じゃないじゃんみたいな。。俺はVCとgccくらいで動けばいいや
>>503 MSってこれだから嫌なんだよ
なんでもかんでもMSルールで染め上げようとするんだもの
まあMFC作った当時に、 std::exceptionが確固としていたとも思えないけどな。
例外クラスもCObject派生にしたかったんだろーね C++の型システムがしょぼいから仕方ない気もすこしする
std::exceptionの品揃え見りゃ最初から作ったほうが速いと思うだろ普通。 どーせSTLにGUI支援なんか微塵もないんだし。
ゴ ゴ ゴ ゴ ゴ ゴ ゴ ゴ /\ /| / /| \/ |(\ /) / / | \|( ゚ー゚) <全力でGCCを捨てVCに移行せよ / / | __〃`ヽ 〈_ / γ´⌒´-−ヾvーヽ⌒ヽ //⌒ ィ mfc `i´cli ); `ヽ // ノ^ 、___¥__人 | / ! ,,,ノ爻\_ _人 ノr;^ > ) / ( <_ \ヘ、,, __,+、__rノ/ / ヽ_ \ )ゝ、__,+、_ア〃 / ヽ、___ ヽ.=┬─┬〈 ソ、 〈J .〉、| |, |ヽ-´ /"" |ATL|: | レ :|: | リ / ノ|__| | ↑ /| ,, ソ ヽ ) \_/ .,ゝ ) イ ヽ ノ y `レl 〈´ リ / ノ | | . l / l;; | 〉 〈 〉 | / ::| (_ヽ \、 (。mnノ `ヽnm
API包んだライブラリに移植性も糞もないだろ
SDLやJAVAのUIみたいにすれば出来なくはないけど。 関数のラップが薄いから、その気になれば Win32API直書きの勉強もできるのが、MFCのメリットじゃないかと。
514 :
デフォルトの名無しさん :2008/01/19(土) 22:41:34
CEventのコンストラクタから例外投げてほしかったな インスタンス作った後にGetLastError呼べって…なにそれ
ATLはSTL連携機能が少しあった希ガス
コレクション周りがちょこっとにょ
>>514 まあシリコンバレーから見たら日本全体が奴らが作ったもの使って
仕事してる下請みたいなもんだからな
519 :
デフォルトの名無しさん :2008/01/21(月) 06:28:13
>>518 みたいなもん,じゃなくてその通りなわけだが.
そして俺は孫請けなわけだが.
一介のプログラマーが何大袈裟なこと語ってるんだw 日本全体がシリコンバレーって洒落かよw 確かに国内はシリコンが豊富だが‥‥‥
std::exceptionってwchar_t無視の糞設計じゃん
そんなもの使うのはNTだけだ。
設計 != 実装
>>525 その言葉は、519,518にも言いたい
さいきんは専ら自然言語で仕事だわい
プログラマも政治を覚えなきゃ生きていけないから自然言語は必須だよな。
上司=禿とか書いたら即人生ダウンだからな。 メモリーリークなんかよりはるか深刻な不具合だ。
上司.頭髪 = 禿; 上司.ヅラ = true;
if(俺.指摘(社長.頭髪.ズレ) == 社長.激怒) 会社.解雇(俺)
532 :
デフォルトの名無しさん :2008/01/22(火) 20:21:00
そのelseは何なんだ?昇進か?まさかな・・・
一生窓際で保証されてるのか? 羨ましい。 俺と変わってくれ。
俺の場合は、会社.一生瀬戸際(俺) だな...
VC++6.0だけは勘弁勘弁
いや、MFCは勘弁勘弁
例外を使えないわけじゃないよ。 C++の例外が使い物にならないのだ。
539 :
デフォルトの名無しさん :2008/01/23(水) 13:53:33
例外を、単なる別のエラー処理技法のように扱ってはいけません。 エラー コードを返したり、グローバル変数の設定したりすることと 同レベルだと思ってはいけません。例外は、それを取り巻くコードの 構造と意味を、根底から覆します。例外は、プログラムの実行時 セマンティックを一時的に繋ぎ変え、通常実行しているコードを迂回し、 こういう状況でなければ決して実行されないコードを動作させます。 例外は、エラー状態を認知させ、プログラムの死という罰則を用いて その状態を改めようとします。 このように、例外には単純なエラー処理を超えた特性があります。 これらの特性を必要としない、理解しない、あるいは文書化したく ないなら、例外をスローしてはいけません。 例外以外のエラー処理技法を探してください。
>プログラムの死という罰則を用いて catchして握り潰すだけじゃね?
まあ、try catch 無理して使うこともないだろ
逆だろ。 戻り値判定 無理して使えば、開発者の1人判定忘れで大騒ぎ。
まあ、try catch 無理して使うこともないだろw
まあ、try catch 無理して使うこともないだろw
STLみたいなうんこが標準ライブラリ気取ってる時点であれ。
546 :
デフォルトの名無しさん :2008/01/23(水) 15:56:58
まあ、try catch 無理して使う気がない。
STLより線形リストがうんこ
Winみたいなうんこが標準OS気取ってる時点であれ。
窓にはシェアという既成事実があるが STLはどうかな
550 :
デフォルトの名無しさん :2008/01/23(水) 16:50:39
例外を使うか使わないか そんな問答はナンセンス 明らかに有害なので使うべきではない
>STLはどうかな STLにシェアは無くても良い。 とにかく、charでなくてstringを使うし、vectorも絶対使う。
C++でbyte array使う時ってみんな new char[size] みたいにしてる? それともvector使ってる?
stringだろ。 char *として参照するなら、string::c_ptr() があるし。
std::basic_string<TCHAR>
stringだと'\0'が入ってた時どうすんの?
CAtlString
>>553 vector
>>554 c_str()のことなら、返り値はconst char*だ。書き込みは保証されない。
stlに不備があるからboostとか持てはやされるんじゃないの?
System::String
std::wstring
>>556 長さは別途保持しているから、別にどうもしない。
vector<BYTE>
vector<uint8_t>
らっぱ〜 かませば、皆同じ。
>>554 stringwwwwwwwwwww
一回vectorと速度比較してみろって。
boost::scoped_array
どうして配列がベクトルなの?
>>521 STLのヘッダ類の前に
#define char wchar_t
ドトネトのSystem::Generics::Listはヒドいとおもた。
571 :
デフォルトの名無しさん :2008/01/23(水) 23:48:15
QValueVector< QString >
STLのコンテナとアルゴリズムよりエレガントな設計のコンテナなんて見たことねーぞ
>>506 そもそも、MFCの前身が作られた時期には、STLは未だ承認されていない。
ぁ ゃι ぃ
MSC7.0が1992だっけか
でも、STLってそんな効率悪い実装をせざるを得ない仕様だったっけ?
中身までちゃんとみてないが、vectorは単に[]で アクセスするだけでも、ただの配列の2倍以上は遅い。 at()だとさらに遅い。 DEBUGビルドだとさらに10倍くらい遅い。 何でもかんでもvector使うのはさすがにアレだな
馬鹿がいる。
580 :
デフォルトの名無しさん :2008/01/24(木) 12:26:29
>>573 そうだとしてもSTL完成した時点で揃えりゃいいだろ?
>>580 こんな感じで時間計ると、Debugビルド(最適化なし)で100倍くらい差が付く。
最適化ありのReleaseビルドでも3倍は差がつくんだが、何か俺が間違ってるのか?
std::vector<int> vec(2);
int ary[2];
DWORD time1, time2;
ary[0] = 1;
vec[0] = 1;
time1 = GetTickCount();
for(int i=0; i < 10000000; i++) {
ary[0] += 1;
ary[1] = ary[0];
}
time1 = GetTickCount() - time1;
time2 = GetTickCount();
for(int i=0; i < 10000000; i++) {
vec[0] += 1;
vec[1] = ary[0];
}
time2 = GetTickCount() - time2;
>>581 何故MFC3.0以上にもなって互換性犠牲にして使われてもいないSTLに擦り寄る必要があるんだ?
584 :
デフォルトの名無しさん :2008/01/24(木) 16:10:51
vectorがはやったったぞ #include <iostream> #include <vector> using namespace std; main(){ std::vector<int> vec(2); int ary[2]; DWORD time1, time2; ary[0] = 1; vec[0] = 1; time1 = GetTickCount(); for(int i=0; i < 10000000; i++) { ary[0] += 1; ary[1] = ary[0]; } time1 = GetTickCount() - time1; time2 = GetTickCount(); for(int i=0; i < 10000000; i++) { vec[0] += 1; vec[1] = ary[0]; } time2 = GetTickCount() - time2; cout<<time1<<" "<<time2;}
>>583 おまいばかじゃね?
M$がMFCを亡き者にしてドトネトに逝こうしてるのに。
MFC終焉。
586 :
て :2008/01/24(木) 16:19:07
1994年にドトネトはない
STL.NET
>>582 Visual C++か?
それならSTLの仕様ではなく、実装の問題。
セキュリティ対策で範囲チェックが入るから、素の配列に比べて遅くなる。
_SECURE_SCLを0に定義しておけば範囲チェックは無くなる。
また、&vec[0]でポインタを得て操作するという手もある。
俺もVC++ 9でそのコードをコンパイルしてみたが、
/O2や/Oxだと配列のループは消滅する。
ダミーの関数呼出を入れて、_SECURE_SCL 0定義してやれば/O2や/Oxで両者互角だった。
Cの関数と違って_sみたいな見た目の違いが出ないから見た目わからないけど、
C++ライブラリも安全対策へ注力しているのが近頃のVC++。
MSってこれだから嫌なんだよ なんでもかんでもMSルールで染め上げようとするんだもの
何もしなければ、セキュリティ対策がなっていないと叩かれるネタになる。 やってもやらなくても叩かれるMS涙目w
人気者だから仕方ないんじゃね?信者もアンチも人気の証。
594 :
デフォルトの名無しさん :2008/01/25(金) 01:00:08
Dinkumware?(もう忘れた。確かVC++に付属してる奴)それともSTLport? 自分は直接試してないから強くは主張できないけどね。 でも、STLってかなりよくできてると聞いたけど最適化についてはわからない。 案外、ライブラリによってはIntel C++と相性が悪いかもしれないどろうけど どうだろ? 少なくともValarrayよりはましだと思うけど。
↓qsort対std::sortネタが振られる
ここでPrologに一票ww
>>596 プロローグ?プロログ?どっちが正しいん?
Windowsには期待するけどVC++には期待しません。 Vi$taはガカーリだたので、Win7頑張って。
というか、at()があるのにoperator[]も範囲チェックするってどんだけ馬鹿なの。
iostream キモチワルス
>>599 それだけプログラマが当てにされない現実。
>>599 >>601 at()は範囲チェックで例外、operator[]はassertじゃなかったっけ。
>>603 なるほどね。メモリ保護に任せると割当単位によってはSEGVにならないし、reserveして書くみたいな馬鹿コードも検出できるからまあ確実ではあるか>assert
>>582 その手のテストは最適化効いてコード消されてて速くなってる場合もあるぞー。
実際俺のとこだとそのintの配列はReleaseだとアセンブリはごっそりなく
なっててループしてない。
vectorの方はoperatorとか通るからか、勝手な最適化は効かないでご丁寧に
ループしてる。
てかさ、vectorの利点というのは実体が&vec[0]から連続して 並んでいることが保障されていることでしょ。 だから、普通はループ処理とかで、vec[0]=とかやらないって。 ポインタ取り出して操作するに決まってるじゃない。
>>582 参照されないint配列のfor操作とかは最適化されて消える。
後ろで配列内の値を参照(sum取って表示とか)するようにすると同一になるはず。
というか試してみたがvectorとint配列の[]で速度に差は出ない。
vectorのポインタが変わってしまうのは要素数が増えたとき、 でしたっけ?
先頭の要素が削除されたら?
要素数がリザーブサイズを超えたときに再配置かな。
stringの[]遅い・・ string 7813 vector 1594 char[] 1578 こんな感じだった
VC6においては、 stringの reference operator[](size_type _P0) {if (_Len < _P0 || _Ptr == 0) return ((reference)*_Nullstr()); _Freeze(); return (_Ptr[_P0]); } vectorの[] reference operator[](size_type _P) {return (*(begin() + _P)); }
614 :
デフォルトの名無しさん :2008/01/30(水) 01:52:50
いつまでもふたりこのままで いっしょにいたいとねがうように それはほんのいっしゅんで ひかるほしにかわってゆく だれよりもいちばんちかくで えがおのゆくへをだきしめたい めぐりあえたこのきせき ずっとずっとゆめのなかからさめないように
いいそひだえめず?
でょほほりのあず
抗しろああしろざま
618 :
デフォルトの名無しさん :2008/02/01(金) 18:58:09
けっきょく九割くらいはMFC書いてるだけだろ
619 :
デフォルトの名無しさん :2008/02/02(土) 18:52:30
M$の中の人ですか
流れぶった切るけど、ネームスペースのエイリアス切れる機能が便利だと思う。 シンボル名単体か、フルパッケージ名をタイプするしか選択肢がない言語に戻ると ちょっとキツい。 結果的に、同時に使いそうなクラスのこと考えて結構長いクラス名になりがちな気がするし。
流れどころか、最近は澱んでた印象。
>>620 マクロ定義すれば、なんとかなるんじゃね。
623 :
デフォルトの名無しさん :2008/02/03(日) 02:44:54
そういえば、Javaで100以上もある分岐条件とかってどうやって表現する? 具体的にはネットワークプログラミングで受け取ったパケットの先頭8ビットを見て処理を分けるような場合。 CやC++だったら、構造体と、関数ポインタがあるから、例え分岐条件が1万あったとしても for (int i = 0; i < sizeof(構造体A); i++) { if (構造体A[i] == receiveData) { 構造体A[i].処理(); } } ってかなり短く表現できるじゃん?これって他の言語だとどうやるんだ? スレ違いかもしれんが、前々から疑問だった。
624 :
623 :2008/02/03(日) 02:46:52
あ、しばらくCを書いてないからバグってるや。 if分の比較は以下に修正。、 if (構造体A[i].data == receiveData) {
>>623 Windowsメッセージのように数千あるメッセージをswitch/caseで処理するのだ。
これが最速。後は好みでその上にクラスでもかぶせりゃいい。
626 :
623 :2008/02/03(日) 03:42:34
>625 返事ありがとう。私もJavaではif/elseもしくはswitch/caseで書いている。 でもその方法、最速なのはわかるけど、コード量増えるよね。 コピペミスとかもおきやすいし。 条件が増えてcaseの後にダラダラと条件がつくと理解しにくいと思う。 構造体で条件を一元管理すると、Excelからコピペで持ってこれるし、 ソースで見ても、きれいで見やすいし 条件が一個増えたとしてもすぐに対応可能だから、 なんで構造体使えないのかと思うわけですよ。 条件が一個増えた場合↓ if ((構造体A[i].data == receiveData) && (構造体A[i].state == state)){ 100以上ある、switch/caseで条件の数がcaseごとに違うのとかって バグっているんじゃないかと不安になる。
627 :
デフォルトの名無しさん :2008/02/03(日) 03:55:50
構造体、クラスを比較しろよ
>>623 for (int i = 0; i < クラスA.length; i++) {
if (クラスA[i].isEqual(receiveData)) {
クラスA[i].処理();
}
}
その構造体の関数ポインタに処理をセットする部分はswitch/caseと同程度の コード量になるはずじゃないのか?
メッセージマップみたいなのをExcelの仕様書から自動生成するんじゃね?
switch/caseを自動生成させても同じじゃないのか?
632 :
デフォルトの名無しさん :2008/02/03(日) 06:53:48
for if を展開してコンパイラに渡せばよい
633 :
623 :2008/02/03(日) 11:30:34
>628 クラスAの配列ってことは、receiveData と比較する、 クラスAのインスタンス変数dataに値を設定する箇所が必要だよね? あと、呼ばれるメソッド名を、きれいにクラスに渡せる? >629 struct test { int a[2]; void (*pf[])(); }; const struct test test1[] = { {0x0001, funcPointer1}, {0x0002, funcPointer2}, {0x0003, funcPointer3} }; 分岐条件が増えたとしても const struct test test1[] = { {0x0001, 0x0003, true, false, funcPointer1}, {0x0002, 0x0003, true, false, funcPointer2}, {0x0003, 0x0003, true, false, funcPointer3} }; どんどん増えていくけど、私には一覧で見えるのですごく見やすい。
C++なんてどんどん使われなくなってくだろ
635 :
デフォルトの名無しさん :2008/02/03(日) 12:22:05
LLになれるとC++なんて二度と使いたくないって気になる。
普段は LL で、性能が気になる所だけ C のモジュールを作るというのが良いよね LL 拡張専用言語として使うなら C++ より C の方が効率的だし活用範囲が広い
C++ってLispだなって思うw
Lisp くらいパースが簡単で、Lisp くらいマクロが強力で、 REPL が備わっていたら良いんだけどね。
639 :
デフォルトの名無しさん :2008/02/03(日) 13:57:55
Javaのガーベッジコレクションは欠陥設計 そもそも、スタティック領域を持つことが 許されているんだから、誰かがグローバル域に オブジェクト参照持ち続けてたら、どんどんメモリーを 圧迫していく。 最悪なことにJavaはメモリー管理を意識しなくて良いような 嘘がまかり通って、知的障害者がぼこぼこオブジェクトを作っては 放置していく。 はっきり言ってC/C++の方がよっぽどまし。 素人を使ってWEBアプリとか作るって頭おかしいでしょ(w
>623 C/C++の関数ポインターってvirtualで表現できるだろ 根本的に抽象化してないオブジェクト設計がおかしい
641 :
デフォルトの名無しさん :2008/02/03(日) 14:32:15
LLとC(C++)があればJavaの出番はないんじゃないかって最近思う
趣味でLLを作るときはC++が良い感じw
>>639 他の言語を貶しても誰も褒めてくれないよ。
不服なら、その言語スレで、解決方法を提案してみなされ。
>>633 interface func {
public abstract void func();
}
class test {
public int data;
func func;
public test(int data, func func){
this.data = data;
this.func = func;
}
}
class func1 implements func {
public void func() {}
}
final class funcs {
static final test[] test1 = {
new test(0x001, new func1()),
new test(0x002, new func2()),
new test(0x003, new func3())
};
}
> LLになれるとC++なんて二度と使いたくないって気になる。 中高生向け学習用言語で誰でも書けるhtml出力コードを安い労働単価で 書き続けていてください。
LOGOの時代がきます。
そういう評価の質は評価者の質と対になっている物だよな。 ドリトルを勧める評価者の評価ってどうなんだろう。
OS開発に採用された時点でC/C++はもう勝ち組言語。 OSのあらゆる機能に容易にアクセスできるわけで。 実際ここ数十年は結局、オブジェクト指向とか関数型とか簡単とかを 売り文句にした一山いくらの言語がはやりすたりしただけで、どれも C/C++の薄いラッパーに過ぎないね。
つまり FFI で OS のあらゆる機能に用意にアクセス出来る Lisp は最強と言う事か。 ラッパーも要らんし。確かに C は OS 開発言語として不動の位置を占めているが、 C++ は C があるからいつ居なくなっても困らんな。
>>649 変な意見も、無知が見れば結構まともっぽく見えちゃうから危険だよな。
>>652 Lisp最強にするには、まずはLispマシンはやらせるとっからじゃね。
JavaもC#も、夢を叶えようと頑張ってC++の仕様から色々引き算してシンプルさを意識したけど、 だんだん「広く深く濃く」使われていくうちに、現実をちゃんと見なきゃいけなくなって 結局はどんどん複雑怪奇になっていってる。 「俺が世界の支配者ならこの世は理想郷に限りなく近いのに」と思ってた思春期のボーヤが、 働き始めて数年経ってようやく、自分がツバ吐きかけてたものがいかに「現実を切り抜ける」ために 有効だったか思い知り始めたという感じ。
まあWin32APIもLinuxのシステムコールもインターフェースがCだからね。 C/C++以外はどれもラッパーが必要になる。 ただまあ難しい事やらない限りは言語なんてどれでもできること同じだし、 なんつーか言語なんてOSとかアルゴリズムを利用するためのインターフェースに 過ぎないんだよね。
>>656 それはそうだけどさ、デモ用の簡単なツールとか、自分が楽するための
ツール作成にはLLって限りなく便利。で、Perlはもともとそのための
言語じゃなかったのだろうか。
Javaが目指した理想は素晴らしいものだったけど。
>>655 それでもC++よりは余計な機能が削ぎ落とされてていいと思う
>>656 WindowsはPASCAL呼び出しじゃね。
>>659 君の思うC++の余分な機能ってなによ?
そもそも作るものによって言語変えること自体がすげー不便。 せいぜいC++とPerlくらいでいいよ。
>>659 余計な機能は使わなければいい。C++はそれができる。
たとえば、パフォーマンスが理由で特定のメンバ関数を仮想関数にしたくないならそれが自由にできる。
文字列処理も、パフォーマンスを理由に固定長のバッファにしたいとか、好きなレベルの処理を自由に実装できる。
自由なんだ。
>>662 Perlはなぁ・・・本当に自分しかソースさわらないもの限定ならいいけどさw
>>661 C++というものの性格上しょうがないとはいえ、まずdelete
ようはガベージコレクションのありなしで、これを解決するには
ライブラリの知識を得る必要がある
そして、STLでも頻繁に使われる演算子オーバーロード
これも可読性を下げる
個別にあげつらうことは出来ないが、複雑怪奇な文法のせいで
IDEのエラー検出機能や補完機能が制限されるのもマイナス
>そして、STLでも頻繁に使われる演算子オーバーロード >これも可読性を下げる バカまるだし
>>660 typedef追っかけてくと最終的に__stdcallに辿り着くよ
>>660 stdcall
引数のスタックの積み上げは右から左=C(cdecl)
スタックポインタの引き戻しはサブ側で行う=PASCAL∴可変長引数は×
>>666 標準入出力の<<などは、意味を知ってるから便利に思えるものの、
初見で見たら多くの人は戸惑うのではないか?
演算子オーバーロードの乱用を誘発する悪しき例とも言える
演算子オーバーロードの乱用で可読性が下がるってのは良く言われてること
馬鹿だけが言ってるわけではない
>>665 演算子のオーバーライドが可読性を下げるというのは、使い方間違ってないか?。
deleteもガベージコレクタが無いから、ライブラリが補ってるって事で、余計な機能ではない。ライブラリの選択で必要な機能だけを追加してるのだ。
>>670 逆に言えば、ガーベッジコレクションがないということで、deleteや
ライブラリのポインタの機能など余計な機能をくっつけざるを
得なかったってことだろ
余計な機能は使わなければいいって言うが、他人が使う以上そうも言ってられないんだよな
言語の組み込み機能が増えるよりいいだろ 実際不自由してないし
C++が設計されたときにもうGCはあったの。C++が参考にした言語は GCがついてて遅すぎたの。実用性を重視してGCを外したの。で、一番使われる ようになったの。 コンピュータ速くなってきたからJavaはうっかりGCで設計しちゃったの。 でも、また結局遅い遅いと叩かれちゃったの。 だからね、言語みたいな基本的なところは速くなくっちゃいけないの。
>>671 ガベージコレクションってよしあしじゃない?プログラマが本当の意味で、
メモリを管理できない。スマートポインタで十分なように思う。
で、プログラマって本当にいわれるようにメモリが管理できないもの?
メモリリークで痛い目見た経験はあるけど。本当に数えるくらいしかない。
>>674 そんな経緯はどうでもいい
C++が今現在余計な機能を持っていると思うことに変わりはない
>>675 例えば、スマートポインタも、auto_ptr、shared_ptr、weak_ptrといろいろあって
それぞれの特徴、使い方を覚えなくてはいけない
その時点でかなり「余計な機能」だと思う
正直言って、weak_ptrだけで十分
あと、良し悪しなのは当然で、余計かどうかは個人個人の主観でしかない
もともと好き嫌いを話してるだけなのだからこれは当たり前
俺はoperator<<<とかoperator===とかもOKにしてもらいたいくらいだぜ System.out.print("Hello"); より cout << "Hello"; でおk
>>677 まあ確かに<<は便利な点もあると思う
しかし、<<の意味がわかってる今だからいいだけで、
最初は戸惑うだろうし、真似して変な文脈で<<を
使い出す馬鹿が続出するという欠点もある
C++は多重継承とテンプレートがどうかと思うな 二つを組み合わせたりするから意味わからん
>>676 経緯を知らないからお前の知識が浅いんだと思う
>>680 ちなみに、C++と設計と進化は読んでて、ガーベッジコレクションの
経緯は知っていたが
>>676 それはGCとか余計な機能が無いって事ではないのか?
>>682 どっちを余計と捉えるかという主観の問題だね
量的にも後者にまつわるルールの方が多いと感じるが
くくって書くととエラーになる
なんかGCを基本機能に入れるかどうかなんて古典的な議論だな。 新しい言語作るからどうしようって言うんならわかるが、C++はなしだし、 Javaはありだしって事実について言いあってなにを発見したいんだ?
>>675 GC をプログラマの負担低減だけで捕らえるとそうなる
スループットの向上やフラグメンテーション対策と考えると
必要性が見える。なんで鯖向けに向いているかも
<<676 今はauto_ptrしか無いぞ。 あと次の標準ではauto_ptrはdeprecatedになるから安心しろ。
んなこた知ってるよw
力比べでつか?
C/C++用のガベージコレクタライブラリなんてのもあるのな。
693 :
デフォルトの名無しさん :2008/02/04(月) 10:54:06
あの,友人が「プロトタイプベースの言語最高」とか 叫んでいたんですが,それってクロージャで代用 できたりしませんか? C++の次の規格でにラムダ式とクロージャが使えるように なったら,「C++最高」って叫んでもいいですか?
それって何ていう、「C++ってCで代用できたりしませんか?」 できません。
boostのラムダは苦しすぎるしうまいこと言語に入れてもらいたいもんだね
プロトタイプ・ツール作成用にLL、本格アプリ用C++の2つマスターすればよいでFA?
>>696 それだけでいいって言われたら、あなたは満足してそれだけで学ぶことをやめてしまう
だろうから、「それだけでは不十分」といってあげる。俺って、なんて優しいのだろう!
698 :
デフォルトの名無しさん :2008/02/04(月) 23:59:31
皆はやっぱBASICからはじめたんだよね。もちろん。
>>696 C++ の代わりにその LL の実装言語 or 拡張言語をやっておくと良いよ
ま、大抵は C だけど
>>696 それなりの経験があると、C++のノウハウが高いのでプロトタイプ作るのに
言語変える方がめんどくさいんだよな。
えーっとPerlでBase64はどうするんだったっけな・・CPANのなんかだっけ・・
より、OreBase64 b64(buf); b4.Decode();とか、えーっとRubyでソケットは
Socket.new(・・第一引数はSocket::AF_INETだっけ・・・あれ?selectとか
使えたんるんだっけRubyは?、えーっとよりOreSocket s; s.Connect("google");
とかになっちまうんだよな。
さらにプロトならGUIつけることも多いから困るんだよな。PerlでGUIか・・
VBの方がいいかな・・っつーとやっぱ、よいしょOreWindow w; w.Show();
ってやるんだよなあ。
昔、ノウハウとかライブラリが貧弱だったころはスクリプトよく使ってたん
だけど、最近はプロト作る用途でもほとんど必要なくなっちまったよ。
まあ俺みたいな10年選手のおっさんにはこういうやつ結構いるんだがさ。
701 :
デフォルトの名無しさん :2008/02/05(火) 05:21:58
「プロトタイプベースの言語」という言葉を理解しているレスが 一つしかない。気がする。
と693が言ってるぞ
ざっくりプロト作るぜ、のプロトじゃねーよ。 おっさんだから仕方ないとは思うけど。 察するにJavascriptの話だろ、693は。
よく読めよ・・696はざっくりプロトの方なわけだが
おっさんごめん
だてに禿げてねーんだぞ
>>696 のプロトの話は
>>693 のプロトの話と関係ないよね。
>>700 のおっさんの言ってることは分かるなあ。
昔はよくC++と俺ライブラリで何でもやってた。
最近はC#と.NETで事足りてるから俺ライブラリ使わないけど、
.NET禁止環境に配布するときだけは引っ張りだすこともある。
そういう高機能な俺ライブラリにかわるようなもので 一般的な奴ってあるの?
ATL/WTL MFC
gladeはどう? mm版もあるようだが、わざわざmm版使うくらいならqtでいいような気もするけどw
そういやトロールテックどっかに買収されたな。
qtっていくらすんの?
713 :
デフォルトの名無しさん :2008/02/10(日) 09:30:18
>676 >>正直言って、weak_ptrだけで十分 shared_ptr使わないでweak_ptrだけ使うって・・・ boostのそれを指しているのならば意味が分からん。 誰か解説ヨロ。
shared_ptrなんてバグの温床だから使うなよ。 shared_ptrは悪くないだ、俺が悪いんだ、、、
>>714 weak_ptrに汎用的な機能を持たせるって意味だろ
717 :
デフォルトの名無しさん :2008/02/13(水) 11:29:39
代入しようとすると deep copy してくれる scoped_ptr ってないの? 自分で作ったの使ってるけど,標準的なのがあれば そっち使おうと思って.
optionalでどうよ
>>1 良くネーよ、複雑になりすぎてまともに使える人間が居ない
挙句、オブジェクト指向がわかって無いからできないとか抜かすアホまで現れ始める始末だし。
そんな使い方したらC++はJava以下じゃねーかとか思いながら、そんなタコが現れるのも無理も無いと思うので
C#なりJavaなりにとっとと移行すべきだと思うのである。
>>717 どうやって作ったの?
代入演算子がアレなC++では無理があると思って諦めていた、ちょっと教えてくれ
>>676 組み合わせて使う事を前提にした weak_ptr のみで一体何をしようというのだ、使い道つーか使い方ワカンネーよ
設定すら出来ないポインタに存在価値はあるのかwww
だから全部weak_ptrにして汎用的にするんだろ
>>721 悪い事は言わないからもっともっと使いこなしてみろ、使い方次第ではガベコレ方式より遥かに強力な shared_ptr/weak_ptr だ
その能力は、単なる生存管理にとどまらないという事を知るべきだ。
お前みたいなタコが増えてくるから、もうJavaでいいよなんて事になるんだよ。
723 :
デフォルトの名無しさん :2008/02/13(水) 17:38:31
RAD使わなきゃdelphiが一番難しいんだろ?
DelphiからRADを取っちゃったら何も残らないじゃないか
pascalコンパイラとしては使えるだろう。
>721 >>だから全部weak_ptrにして汎用的にするんだろ 意味がわからん。 weak_ptrはshared_ptrと対になって、尚且つ使い分ける事に 意味があるのに。もっと馬鹿にも分かるように説明してくれ。
>>726 基本的にインスタンスは全部自動変数で、参照はweak_ptrで渡せば、
スコープで寿命が来ても参照が残らない。
>>721 じゃないけど、shared_ptrも何もかも、ポインタが全て
weak_ptrに統一されて、Javaが実装している参照のような
弱い参照を用いた実装になるってことじゃないかな
Javaの参照だって4種類もあるよ。
>>717 特定のクラスのサブクラスしか格納できないboost::anyみたいなもの?
需要あると思うけど、ネーミングをするのが一番難しいと思う。
名前さえ決まれば、boostに追加されそうな気がしないでもない。
>>719 代入演算子じゃなくて、テンプレートコンストラクタでどうにか汁。
>727 「汎用的にする」の一例という解釈でOK? 「全部weak_ptrにして」のほうも解説よろ。 特に「全部」が何をさしているのか。 >728 Javaの弱参照は通常参照と区別して使用することに意義があるんじゃないの? それが正しければshared_ptrと使い分けできない(統一された)weak_ptrに存在意義は ないとおもわれ。
なんか電波がピピっときて理解できた気がする。 C++の生ポインタが全部weak_ptrになっちゃって、あるweak_ptrをdeleteしたり、 参照してた自動変数がスコープアウトで消え去ったりした場合、 同じオブジェクトを参照してるweak_ptrがみんな0になるとちょい便利かも みたいなはなしじゃないのかひょっとすると。
>>732 どんだけランタイム情報が充実してんだよwww
自動変数がスコープアウトで消え去ったのを weak_ptr で捕捉するのは そのままでは無理では?捕捉される側のオブジェクトのデストラクタなりで 何らかの notification を行わないと
>>735 そうだね。
被参照オブジェクトの側でweak_ptrのリストを持っていて、
デストラクタでweak_ptrに通知するしかないね。
だったら言語仕様かえて、型なんてなくしちゃえよ
>>737 ぶっちゃけ俺言語にでも走った方が楽しいかなと思うときもある。
でもそういうのは仕事で使えないからなー。
739 :
デフォルトの名無しさん :2008/02/14(木) 09:43:48
weak_ptrとかshare_ptrとか見ると namespace pointer { class werk; class share; } の様にアンダースコアで区切られ微妙な名前になるより、 長くても名前空間で区切られる方が有り難いと思うのは、俺だけ?
>>739 uint8_tとかwchar_tとかと同じ類
741 :
デフォルトの名無しさん :2008/02/14(木) 10:05:56
>>740 クラスと単純な型では違う気ガス。
基本的な型は、どこのスコープからでも見えた方がよいからね。
>>741 作った人は、そういう基本的な型と同じカテゴリーだと考えていたのだろう。
好みの問題だから、どちらが正しいという論争に答えはないよ。
全部 shared_ptr で循環参照に対して対策を施すというのならまだ話がわかるが、全部weak_ptrって、、訳わからんな。 脳みそばらして中身覗かせてくれよ
どっちも同じに見えるのは気のせいか 違いを解説してくれ
>>744 理解しているとはとても信じられないが、仮に理解しているとして、だ
まず、weakとsharedの意味を辞書で引いてどちらがふさわしいか考えてみろと
>>745 ただのポインタ(char*など) + weak_ptrで循環参照が解決すると思ってたんだ
俺が間違ってたのか?
>>746 少なくともboostのweak_ptrは、boost::shared_ptrに格納されているものにしか機能しない。
コピーは自由にできるが一つでも消えたら全部道連れということかね。 それって便利か?
auto_ptr以下だなw
単にdeleteしたりスコープから外れたりして、 使えなくなったオブジェクトを扱おうとすることを弾けるというだけだな。 デバッグ時には無条件に便利かも。
コンテナにauto_ptrすら入れられない ライブラリが標準名乗ってるのがそもそもの間違い。
確かに、なんでshared_ptrが最初から入らなかったのか不思議。
>>752 templateに対する理解が進んだのはSTLがでてからそこそこ経った後だから仕方なかろう。
ATLの時代ですら、不十分な理解のまま巨大ライブラリを作って、あの有様だし。
コンパイラ製作者であるハゲの人の意図すら超える内容があった template は今後も重要な概念になると思いますよ。 破滅的になってきたC++が維持できるかどうかは別として
>>753 そう言われると、あの時代にSTLが作られたということが奇跡的に思えてくる。
アロケータとかアレなところはあるけど。
書籍で読んだ限りではSTLは作られたんじゃなくて別の言語から移植された物なんだよ、どこかに歴史がかかれていないかな? 元々はオブジェクト指向ベースのクラスライブラリになる予定だった。 さらにSTLで納得できない人たちが集まって作ったのが boost templateの驚愕の事実はLokiライブラリの作成と、そこでのメーリングリストのやり取りより始まる。 それにしても不思議、不思議だな、僅かな規則を決めたら、そこから知らない事実が次々とでてくるというのは。 言語やライブラリというものは、人間の作ったものだけけど、 このテンプレートと来たら、まるで元々そこにあって、自分たちはそれを掘り出しているような気分になる。 彫刻家が仏像を彫るときに、仏像は木の中にいる、自分はそれを掘り出しているだけだという なんとなくその気持ちがわかる。
>>756 STLはAdaから移植された物らしいね。
それはあまりに巨大な物だったのでC++の言語仕様に取り入れる
時にバッサリコンパクト化した。
wikipedia見たけど、メタプログラミングやりたかった奴が実現できる環境がAdaしかなかったのでそっちで初めたけどC++に鞍替えしたという感じじゃん。 どっちも同一人物が作ってるし。
759 :
デフォルトの名無しさん :2008/02/15(金) 19:55:30
Cという言語があったその昔、std::vectorみたいに育つ配列作ったら、上司に思いっきり笑われたのを今でも思い出す。
Cにvectorはいらない。
仕事で人のCのコードを見ると必ず自前のvectorが使われている。 一度メモリリークしているものも見たことがある。 指摘したら客からクレームはないとスルーされた。
763 :
デフォルトの名無しさん :2008/02/22(金) 16:28:21
そこで始まる前から終わってしまったC99の出番ですよ
C99によりC++とCの互換性が無くなってしまった。 そりゃ終わるだろ。
レベル1: 育つ配列として使える構造体(vector)を作る レベル2: vectorをポインタで受け渡しする レベル3: vectorに関数ポインタを持たせる レベル4: 確保したメモリ領域を管理し、使用量をデバッグできるようにする レベル5: 安全に、全ての確保メモリを解放できる レベル6: 様々なアルゴリズムに特化したvectorを作る レベル7: あれ? もしかしてコレC++使えばよくね? と思い始める
766 :
デフォルトの名無しさん :2008/02/25(月) 01:10:33
>>764 C++0xでまた互換性がある程度は復活するんじゃね?
最初からC勉強しても結構無駄骨折るよな?
ツェーペーペー
自分は今仕事ではC#とかJavaです。C++はお勉強は少しだけしたことがありますが、 自力でアプリ組むのはできないと思います。 自分のようなC++素人から感じるのは、 ----------------- ・危険度が高い ハードに近い部分にアクセス可能なので、とんでもない惨事をもたらすコードが書けてしまう。 ・規則に例外が多い こうも書ける、ああも書ける。そしてこう書くと実はこういう動きをする。〜には実はこんな意味がある とか規則がスッキリしていない。 シンプルな基本ルールから演繹してソースコードを書くというよりも、上記のような事例を沢山記憶して いないとアプリが作れない。 ----------------- ってことなんですが、実際どうなんでしょうか。C#やJavaは上の2つについては不十分かも知れませんが 前進していると思います。一定のパフォーマンスや自由度が犠牲にしてますが。
>>769 規則に例外が多いとは感じたことないな。vector<bool>くらいか
実装に依存する差異はJavaやC#に比べて多いとおもう
危険度もまともなOSで動かす分には変わらない。 変なことをしようとするとOSに止められる。 それはC#やJavaだとVMが担っている役割だな。 もちろんやろうと思えば危ないこともできるけど、 それはプログラマが意図的にそういうプログラムを書かないとやれるわけがない。 ウィルスとかワームとかがそう。 規則に例外が多いってのは、どの言語でもそうだと思う。 JavaやC#だとEqualsと==演算子とか最初何あれって思ったよ。 慣れればなんてことないんだけど。
772 :
769 :2008/02/26(火) 13:28:42
なるほど、C++知らない人間が想像で怖がってるだけなのかも知れませんね。 どうも自分は、統一感があるのがC#やJavaで、C++ってのは今までの経緯というか 文脈というか、言語の細かい「事情」に通じてないと使えないという印象を持ってました。 あとメモリ管理を意識するというのも大変そうだなぁと。ソースコードが何をやって いるのか、ではなくて、マシンのメモリ上のどの部分をいじってるのか、ということを 意識するというのは、実際に工数が膨らんでしまう&大きな不具合が生じる可能性が 高まるんじゃないか、と思うのです。
メモリ管理を意識ってのはほとんど寿命の問題。 普通にやってるぶんにはマシン上のメモリ配置など意識する必要はない。 触りもせず杞憂もほどほどにしとけ。
スマートポインタ使っとけ
C++使いの私からすれば、一々newしないといけないJavaの方が面倒だと思う。 データ構造はSTLのコンテナを使えば済むし、オブジェクトは普通にローカル変数で済むからね。
>>775 Javaでもローカル変数ぐらいはあるが、
C#でいうところの値型(struct)がないのが面倒ってこと?
GCのほうか余計に気を使う。
自分も
>>769 と同意見で、C++は注意することが多すぎると思う。
メモリ管理、スライシング、仮想関数テーブル、多重継承、Cスタイルとの混同、ヘッダの衝突etc...
STLも、さらにBoostも覚えて使えとか、うちではMFC使ってますとか、
組み合わせて使うときにはまた注意事項が増えて・・・。
Javaや.NETではほとんど意識しないことばかりだから、ストレスが溜まるよ。
そうかのう。 必要に応じて取捨選択すればいいだけ。 むしろ、俺はJAVAでGUIどうやって書けば良いのかわかんね。 EclipseにGUIエディタとか入れてるはずなのに出てこねーし。 まあ、作れてもJudeみたいに糞遅いプログラムじゃ悲しいけどね。
780 :
769 :2008/02/26(火) 16:28:57
自分の基本的なプログラムに対する考えは、「富豪プログラミング」的なものです。
つまり、分かりやすい、間違えにくいというのが最優先であって、実行効率やそのための
裏技的な知識は2次的なもの、という考えですね。
富豪的でも「難解」なコードはあり得るでしょう。アルゴリズムのようなものです。しかし、
C++が難解なのはそういう意味ではなくて、
>>778 に書いていただいたような、文脈を
色々知らないとコードが書けないってことなのです。
>>779 ちょっとお聞きしたいのですが、C++っていうと、WinのGUIアプリっていうつながりが
やはり定番なんでしょうか?逆にそれ以外の用途って、どんなものがありますでしょうか。
C++の言語の仕様が詰め込み杉ってのを否定する奴はまずいないだろうね
>>780 普通にシミュレーション系のプログラムを書く分にはGUIなんて要らないし、
C++でも>780の言うところの富豪プログラミングができると思うけどねぇ。
ライブラリの仕様が延々書いてあるから多く見えるだけのような… 個人的にはいらない機能もあるけどね
Windowsに関していえば、 GUIなどは.NET、速度を要求するところだけC++のハイブリッドが望ましい。 部分的にアセンブラを使うような感覚で。
文化なのか何なのか知らんが、Windows プログラマが C++ を使うような場面で
Unix や Linux のプログラマは C (含 gcc 拡張) を使うケースが多いよね。
>>780 のように言語自体が難しいのはアレだろという意見は昔からあるわけで、
C が使える環境でも Fortran だの COBOL だのを好んで使う人も昔からいた。
perl で短く書けるものを sh や awk で長く書く人とかも同類か。
>>785 短く書けるからと言って、awkで読み易く書けるものをperlでわざわざ読み難く書くこともなかろう。
awkは知ってるが、perlは知らん。 awkで不足するようならC++に飛んじゃう。
788 :
779 :2008/02/26(火) 18:02:21
>>780 いんや、GUIなんて殆ど作りません。
JAVAやC#は覚えることが少いとか言う人がいるんで、
C++でやってきた人間にはJAVAも覚えることだらけだよと言いたかっただけです。
Cで多態とかやろうとするよりはC++でやったほうがシンプルに書けるとかもあるんで Cだから簡単だとは一概には言えないよ それと、全部やるなら覚えることが多いのは確かだけど 使わないでいいならクラスもテンプレートも覚える必要ないし
慣れた言語が一番使いやすいから、ある用途で優れてる言語と分かっていても、 自分にとっては慣れてないせいで結構細かい言語仕様、ライブラリを調べないと 何も書けないというのもある。
C++が目指した道も「分かりやすい、間違えにくい」ということだったはずなんだけど、 結果は、そこに至るまでの道がかなり長い方になってしまった、と自分は思っている。
C++だってわざと難しくなるようにできているわけじゃなし、少なくともプログラム言語ひとつ捕まえて、複雑だの何だの言って怖がってるうちは一山いくらのアルバイト程度のプログラマであることを自覚した方がいい。
Java の人には、きっとプログラマじゃない人(実装することの専門家を目指してない人)も結構いるんじゃない?
C++は全用途向け言語ってことを忘れてる奴が多すぎる 安全性を理由にプログラマが実行可能なことを減らしてはならない 邪悪なハッキングだって時には必要な事だから禁止されてはいないのだ
JavaやC#よりも面倒なのは俺も思う。 それに、IDEの補完機能の賢さやコンパイルの速さでは本当にC#やJavaが羨ましい。
C++は標準の例外がクソ過ぎる。 と俺は思っています。
標準ライブラリ全般がくそで貧弱です。 TR1では到底足りません。Boost全部入れたって足りるようなものではありません。
798 :
769 :2008/02/26(火) 22:20:42
>>788 そうですか。現状のC++の用途というとWinGUIアプリが中心なのかな、と思ってました。
あと、C++ができる人にとって、JavaやC#は楽勝であるというのは事実でしょ?自由度が
Java/C#よりも大きいのですから。
>>792 問題は、C++が知識量を必要とするということなんですね。ちょっと極端な例かも知れませんが、
Schemeのように実に単純な文法から森羅万象を生成するというのではなく、覚えておくべき
知識を要求してくるのがC++じゃあないかと。
JavaやC#はその辺Scheme程ではないですが、シンプルです。変数の扱い、スコープ、基本的な
構文、クラス関連の表記方法と意味が分かればよい。あとは、いかに無駄無く綺麗に書けるかに
なってくるわけで、これは知識とはちょっと違います。
>>798 というか君は、CもC++もロクに使ったことが無いんだろう。
ちょっと触れたぐらいで多くを語るなw
Schemeとまではいかないまでも、LLから勉強してある程度 プログラミング覚えてからCやC++やったほうがいいと思うんだけど…
C++→C#と入ったが、楽勝ではなかったぞ。 あの大量のライブラリ、初めは適切なキーワードもわからずググれない。 それ以外の言語を始めるのと大してハードルは変わらなかったと思う。 一通り使えるようになった今だから言えることだけど。 楽勝だなんてC#にもC++にも失礼だ。
ライブラリの学習コストはどの言語でも大変。 .netはそれを統一してくれた。
一人でプログラム作るんならC++を使うけど、 数人でプログラム作るんならCやJavaを使う。
>>798 Java は Java で標準添付のクラスの量に初心者はびっくりするよ。
どれをどう組み合わせて使えば良いのか判らない。
そういう意味では情報量は必要だよ。
>>797 そうか、きみの使っている言語は準標準レベルで
マルチスレッドと構文解析機とシリアライズと非同期通信とグラフ理論と行列計算
をサポートしているというのか。それはすごい。
キレのある皮肉のつもりなんだろうな〜、きっと。
つーか、matlabがかなり近い?
一度C#をやろうとしたとき、ヘルプを見ても欲しい情報がなかなか見つからなかったのがつらかったな C++は十年以上かけて覚えたけど、どんどん仕様が変わっていったのがつらかった
809 :
769 :2008/02/27(水) 10:38:58
>>799 > ちょっと触れたぐらいで多くを語るなw
あはは。いや、お勉強ならしたことあるんですがが、C++の実際の実装ではそんなのあまり
役に立たないと感じたわけです。結局、低レベルの、OSだったりメモリ管理だったり
の知識が必要となるんじゃないですか。
>>802 >>804 >>808 ライブラリの学習って言いますが、あれは覚えるものではなくて辞書の引き方を知るだけで
よいのです。大きな本屋へ行って、目当ての本を探す際に書店の分類を参考にしてその書棚へ
向かうのと同じですよ。検索エンジン使うのとも似てます。
>>809 > 結局、低レベルの、OSだったりメモリ管理だったり
> の知識が必要となるんじゃないですか。
なる場面もあるしならない場面もある。
デバドラ書くならOSの知識は必要だけど単純なファイル操作だけとかならほとんどいらない。
スクラッチでメモリ管理を書く必要があるなら知識は必要だけど、
アプリで使う程度のメモリ管理ならコンテナとスマートポインタで簡単にできる。
C++は両方の局面で使えるってことだね。
>>809 >結局、低レベルの、OSだったりメモリ管理だったり
Win32APIとかそのへんの話か?
そこらへんだったら言語の問題とはベクトルが違うぞ。
言語と環境を一緒くたにするな。
でもC++のコンテナとかでトラブルが起きると デバッガでマシン語眺めないと原因がわからないことが多いような。 .NETとかだと〜Exceptionの意味を調べれば終わりだけど。
なんでやねん
>>809 その辺りは考え方の違いで、
・C/C++ はメジャーなので多くのプラットフォームがネイティブでC/C++から呼べるAPIを
用意している。のでC/C++で何か書く場合には、それを使えるし使うことが多い。
・Java は OS 側からのサポートが超貧弱。代わりにライブラリを用意。
それで出来ないことについてはJNI 等に頼らざるを得ない。
という見方もできる。
いずれにせよ、ライブラリの問題なら言語仕様とは関係ないし、ライブラリを除外して考えるなら、
Java で簡単にできることはそのほとんどが C++ でも同様に簡単(かつ難解でなく)できると思う。
>>809 趣味なら構わんが仕事なら役立たずPGの烙印押されるよ。
よくC++10年使ってましたというPGがMFCやATLが理解できなくて
テスターにしか使えないとかよくある。あるいは、
1時間でできるコーディングを調べながらやって1週間かけるPGとかいる。
コーディングスピードはできる人とできない人で100倍以上の差があるなんてのはよくある。
tteいうか、JavaでもC#でもちょちょっと調べてさらっと書ける人なら Symbian だろうが Win32 だろうが C++ でコード書くくらい楽勝だよなぁ・・・ DI等のマイナーなくせにお約束だらけの世界も少ないし。 生産性において MATLAB と比べられたらさすがに分が悪いけど。
std::vector<std::auto_ptr<hoge>> kusolib;
>>814 JavaにOS側のサポートが多かったら、Javaの理念に合わないんじゃないのか?
>>815 C++を10年使っている事と、MFCやATLが判らない事は何の関係も無いと思うんだ
815の言う「MFCやATLが理解できない」というのは、 いま現在知っているかどうかだけでなく、「今は知らないが必要ならすぐ使えるようになるレベル」 も含めた、広い枠組みでの有能・無能の話だと思うよ。
ATLはCOMが手軽に扱えて便利だったがMFCの存在価値はまったく理解できない
ただ、MFCを作ったプログラムという資産は山ほどあるわけで。
MFCよりWTLがいい
オブジェクト指向言語でライブラリを理解するということは フレームワークのお作法を理解するということで、理解するにはやはり時間がかかる。 特にMFCみたいにマクロだらけのものは。まぁ便利だけど。
>>816 Javaは基本的に公式ドキュメントあれば事足りるから
調べ物にはあんまり困らないよ。
突っ込んだ仕様は調べる必要あるけど。
C++は何故か必要な情報になかなかたどり着けねえ…。
Javaは学習しやすいけどランタイムの信頼性が低いのがネック
>>824 どういう情報にたどりつけないのだ?
C++の仕様として読み込まれていることならC++の仕様を見るだけでわかるだろ。
MFCだったらC++の仕様じゃないんだから、MFCの仕様を探せば良いわけでな。
本来、OSや環境サイドで決めるものの仕様まで言語仕様に読みこんでるものはすかん。
>>824 >Javaは基本的に公式ドキュメントあれば事足りるから
いくらなんでもこれはないだろう。
トイ・プログラム程度しか書いたことないんじゃ・・・
基本的だから別にいいんじゃね?仕事的にはアウトだけど。 どんな言語やライブラリ、処理系だってバグがないものなんてないから、嵌るときは嵌る。
829 :
デフォルトの名無しさん :2008/02/28(木) 20:26:10
僕は神になる為に駅前ギャンブル場に行った そしてトイレにこもり続け、 店員に注意された---- 僕「店長を呼んでくれないか」 賭博主が何事かと、のこのこやってきた 僕はロープ、ベルトをもっている 僕「お前のせいで借金地獄だ 自殺しようと思う 暴力団に殺されるより楽にしにたい」 賭博主「え!? そんなことしたら、営業妨害で訴えますよ?」 僕「それがどうした これから死のうってのに 警察呼ぶか? 出てきたら店の真ん中で死ぬ」 賭博主「それは困るッ・・・どうすれば?」 僕「借金は1000・・・万近く・・・あるのだが」 死神「こんな場所が日本に1万以上あるのか うめ〜」 これを繰り返し、僕は神となった!(大富豪になった)
C++って好きなんだけど洗練されてないと思うぜ。 かといってJavaはやりすぎだしC#はイっちゃってる。 結局戻る所はC++だわ。 でも洗練されてるC++って見てみたいなぁ。 言語仕様見て感動したい。
洗練か…そこんとこDはどうなの? 弄ったことないからD使いの人宣伝してくれ
VerilogでASICとか作ってたんですが、今回はSystemCをやると言い出す人がいて 先週からUMLとC++のコード書いてます。 UMLは好きになりましたが、まだあまりC++が好きになれません。 昨日は演算子のオーバーロードを考えた人を絞め殺したくなりました。 こんな俺をC++大好きっ子にするコメントお願いします。
>>832 C++として使うから嫌いになるんじゃね。C+便利機能(クラスとか
STLとか)くらいで使えばきっと好きになると思う。
SystemCだからといっても、無理やりC++機能をフル活用しようと 思わずに、ベタベタにCでかいてもいいし、クラスとか必要な とこだけC++の機能使えばいいんじゃないかなぁ。
>>832 string jangdonggun = string("あなたのことが") + string("好きだから");
>>832 > 昨日は演算子のオーバーロードを考えた人を絞め殺したくなりました。
誰か他の人が書いたトンデモ・オーバーロードに振り回されたのかな。
だとしたら、気持ちはわかるけど、それはその書いた奴が悪いw
まともな奴は心得た使い方をしているし、その範疇の中で語るなら、
演算子オーバーロードが無かったら逆に困るんだよね。色々と。
基本的にC++は、初心者(機能を知らない)を支えたり、身の程知らず(後先考えず機能を使いまくる)を
窘めたり、といった努力を一切放棄した言語。
「上手く扱える奴が得られる幅と力」重視で設計されていて、初心者とか、職場に身の程知らずが居るとか、
そういう人には厳しいと思う。
行列計算とかは演算子オーバーロードがないときついな。
数学側で演算子がどんどんオーバーロードされるのに、 プログラミング言語側でサポートされないと読みにくいコードになるしな。
演算子オーバーロードは何でもありだから、プログラムを書いたやつのセンスが問われるな。 そもそも、演算子オーバーロードの代表格、iostreamの演算子なんて、考えようによってはひどすぐる。 cout << a; なんて、代入系演算子でもないのにcoutを書き換えちゃうしな。 副作用のある処理は副作用があると明示的にわかる演算子を使うべきのような。
C++標準のiostreamなんて、使おうとして一瞬で捨てたぜ! クソスギデショ。
シェルの追記リダイレクトがヒントだったのかね。逆だけど。
>>838 数学世界では、破廉恥なオーバーロードがすでにまかり通っていますからね。
>>840 STL誕生前のライブラリだけあって、他からひどく浮いてるしな。
845 :
839 :2008/03/03(月) 15:04:32
代入が演算子ってのがものすごく気持ち悪くなってきた。 数学的な演算子って言うのはあくまで1つ以上の値や関数等を演算した結果を返すものだよね。 関与したオブジェクトそのものを変更したりはしないはず。 関数f(x)を積分したところで、それは積分した関数を返す演算であって、f(x)自体を変更するものではない。 Cは平気で++や=などの副作用のある演算子が出てくる。 C++に至っては、オーバーロードで+などの一見副作用のない演算子に副作用を込められる。 キショイ。 つーか、演算とはオブジェクトも値も関係無く適用されるべきものであるのに、副作用型演算子はオブジェクトにしか使えないし。 そもそも参照渡しが関数や演算子の定義を見ないと渡したオブジェクトが変更される可能性があるのかどうかわからん時点でキショイな。 こういうことを考えると関数型言語とやらに興味が出てくるのだろうか。
演算子を定義できるようにするとかどうよ さらにホワイトスペースのオーバーロードも出来ます
申し訳ないが、>845は「参照渡し」や「演算子オーバーロード」を理解できないで挫折した香具師が、 精一杯虚勢を張っているようにしか見えない。
「包丁で人が殺せるから料理ってキショい」とか言われても同意できないよな 殺さなきゃいいんだよ
言いたいことはわからなくもないが、今更どうでもいいって感じ。 演算子オーバーロードってC++だけの機能じゃないしな。 Javaはできなかったっけ?
> 副作用型演算子はオブジェクトにしか使えない これは、もしoperator =や[]などがクラスのメンバとしてしか 定義できないということであれば、0xから解消され、 非メンバとして定義できるようになる。
851 :
839 :2008/03/03(月) 17:39:41
>>847 すまんが、並列計算数値解析プログラムをCやC++で書いてるのだが。
C/C++の最適化効率の悪さが念頭にあって、副作用のある演算子もその大部分を占めてるなと思ったわけだが。
>>851 だからね、その実績が>845で台無しになっているってことよ。
# 尤も、その実績のどこに「参照渡し」や「演算子オーバーロード」が関係しているのか判らないけれど。
それは言語の仕様じゃなくてコンパイラの性能だろ
854 :
839 :2008/03/03(月) 17:54:09
>>852 まあ、ふと立ち止まって考えたときに、「演算子」というもののありかたがどうなのかと。
Cは「高級」言語じゃないからしかたないが。
>>848 のように殺せる道具を殺さないように使えば良いわけだし。
855 :
839 :2008/03/03(月) 17:56:34
>>853 コード以上の文脈を読みとるのはコンパイラにとって大変だろ。
同じ振舞いをするコードでも、プログラマの意図したことがわかればより最適化できるケース(エイリアス問題など)があるしね。
だからそれはコンパイラの性能だろ。仕様のせいにするなよ。
857 :
839 :2008/03/03(月) 18:01:31
>>856 仕様のせいだよ。
エイリアス問題なんてまさに仕様のせい。
そう思うならC++以外の言語使えよ
要するに参照透明性でしょ。Haskell あたり使えばいいんじゃない?
__declspec(noalias)に__attribute__((const))とか C++標準とは別に、統一を図る場があってもいいとは思う。
861 :
デフォルトの名無しさん :2008/03/03(月) 18:29:29
>>845 君は、きっと関数型言語もきしょいと思うようになるだろうから
演算子の存在しない言語を利用した方が良いと思うんだ
アセンブラでも演算子は出てくるから、ここは一つ、バイナリで直接プログラムを書く人になるんだ
まあ、CPUが変わると命令が変わるが、そんな細かいことは気にするな
きしょい演算子と永遠に縁を切れることを考えたら安い投資だ
>>858 C++の仕様に問題があると、なにか問題があるの?
>>845 それだと、
関数型言語でも代入はメチャクチャ使いまくるから結局キショいと思うと思うよ。
schemeのset-car!とかset-cdr!とか、call/ccで継続を変数に代入する所とか。
>>863 代入が悪いのではなく、代入が演算子になっているのが悪いのでは?
func(a=b)とか出来る所とか。
mov a,b って書きたいってことか。
:= がほしいとか?違うか
Hoge hoge = GetHoge(); の = のところで何が起きるかここだけ見て分からないのはかなり嫌かも。 ・GetHoge() が Hoge& を返していた場合 ・Hoge に変換できる全く別の型を返していた場合 ・Hoge のコンストラクタが受け取る全く別の型を返していた場合 ・代入演算子がオーバーロードされていた場合 こうやって見てみると auto hoge = GetHoge(); は型変換を伴うような変な副作用が無くていいのかな。
余計なことを考えず、「= と ++ と -- は特別」って覚えておけばいいのでは。
プログラムを書くことを諦めるってのも一つの方法だぜ?
>>845 君、Haskell がオイデオイデしてるよ。
>>863 let や再帰を駆使すりゃある程度は…。
>>868 そういうレベルじゃなくて、理解した上でのそもそも論でしょ。
他人の作った言語なんだから、いつまで使っても馴染まない部分てのは 多かれ少なかれどの言語にもあるかもなぁ。 そんな時、PG的には自分で俺言語を作るべきなんじゃないのかw
>>871 そうすると、この話題は「物事に例外が存在するのはキショイ」というだけのもので、
ディテールにはまったく意味が無いと思う。論ですらないよ。
>>873 このスレ的にはC++は良いって意見ばっかじゃないという意見が出たらダメということか。
演算子オーバーロードの害悪の話が出てきて、 その害悪とは元来の意味とは異なるオーバーロードが可能ということと、 さらには元来副作用をもたらさない演算子に副作用を仕込めるという話になって、 そもそもCの演算子からして副作用を持つ演算子というのは数学的で言う演算子からかけはなれている、 という流れだろ。 おとなしく使えとかそういう話じゃないはずだがw
>>874 どういう電波を受信すると、そうなるんだ?
相手が「馬鹿なことを言ってる」ことにしたくてたまらない
二十歳前後の自称論客みたいな話の運び方すんなよなw
C++って言語仕様だけが一人歩きしちゃっててかわいい。
演算子の一般的な意味とかけ離れた定義が可能なことで、それが糞仕様にはならんと思うよ。 関数名だって自由にデタラメな名前つけれるし。 納品済みのコードでtest1()とかaaaa()とか見たことあるし。
演算子は元々言語仕様で意味が決まってるのに、オーバーロードで勝手にそこから踏み出すわけだ。 関数名は元々言語使用で勝手につけてよいと決まっているので、演算子の場合と一緒にすべきではないな。
aaaaという関数名はもともとC/C++に存在しない単語だけどoperatorはそうではないという違いはあるけどね。 文字列の連結がoperator-だったり、行列の積がoperator[]だったりしたら発狂しそうだw
>>880 やってみれば判るが、実は文字列の連結にoperator-()を使うのは意外に収まりがいい。
寧ろ、Basicを真似てoperator&()なんかにされたら泣ける。
>>879 漏れが設計して漏れが実装してるクラスにおける「代入」や「大小関係の比較」の実装は
漏れができるようになってないと使い物にならないじゃん・・・
Java だって equals に「引数をファイルに出力する」とかいう実装を与えられるわけだし。
表記の一般的な意味とは異なる実装するから困るって話じゃないの? Add()関数作って実際は引き算の処理されるのと 文字列の連結がoperator-するのと問題は同じと思うが。
VBAをちょこっと触ってる自分はoperator&のほうがまだしっくりくるわ・・・
<<よりはまだ&のほうがいいような
>>885 それなんてboost::archive
MFCもそんなのあったな。
>>881 "ABCDBC" - "BC"
この結果は、
"ADBC"だと納得行くが
"ABCDBCBC"なら、「なんでやねん!!!」と思うよ
寧ろ、"ABCDBC-BC"になってくれたら何かと便利。
便利じゃないよw
>>888 の状態で16進演算してくるなら便利。でもstringの仕事じゃないよな。
>>891 stringの仕事じゃないね
16進演算なんて普通に
int i = 0x0a - 0xf0;
で出来るんじゃね?
>>892 ファイルから文字列として読み込んだときとかの話ねw
そうだとして"90" - "1" が"8F"とかありえないでそ(w
weirdString foo = "-" + "|"; assert(foo == "+");
kidsString foo = "1" + "1"; assert(foo == "田");
オペレータでどうにかするんじゃなくて STL的にはイテレータでどうにかすべき問題ではないの?
Cだと int main() { printf("%d", 1); } c++だと int main() { std::cout << 1; } で、最近のコンパイラは使ってない関数は出力ファイルに入らないように削除してくれるらしい。 これをリンク時ガベージコレクションって言うんだっけ? それで、上記プログラムだとCの場合にprintf全体をリンクする(doubleを文字列化する処理も含まれる)が c++だとstd::cout::operator << (int)をリンクするだけでOKだ。 後はc++のほうを例外処理無し、RTTI無しのオプションを付けてコンパイルすればCのプログラムより小さくなると思う。 気が向いたら実験してみる。
そんなわけなかろうw
>>898 ostreamの実装がprintfの実装より小さくなれる気がしないんだが…
とりあえず結果報告キボン
901 :
デフォルトの名無しさん :2008/03/21(金) 06:59:09
>>900 フォーマット文字列の解析が要らないから小さくなるかもなぁ。
902 :
デフォルトの名無しさん :2008/03/21(金) 12:46:04
ヒント:淫乱
903 :
デフォルトの名無しさん :2008/03/21(金) 12:52:17
インリンじゃないの?
Cだからってprintfのパーサの実装が綺麗だと思うなよ!
>>898 の実験結果を発表します(ジャジャーン)
実験環境
OS:windowsVista
gcc ver3.4.4 @cygwin
cs.cとcs.cppの内容は
>>898 に#includeを追加したのと同じ内容です。
gcc cs.c
a.exeの大きさは8873byte
gcc -Os cs.c
8683
gcc -O cs.c
8873
gcc -O3 cs.c
8873
g++ cs.cpp
477682
g++ -Os cs.cpp
477014
g++ -O cs.cpp
477577
g++ -O3 cs.cpp
477014
visual studio2005 sp1のcl.exe cl cs.c 53,248 cl /Os cs.c 53,248 cl /Ot cs.c 53,248 cl /Ox cs.c 53,248 cl /Ox /Oi /Ob1 /GL /Oy cs.c 53,248 cl cs.cpp 135,168 cl /Os cs.cpp 131,072 cl /Ot cs.cpp 135,168 cl /Ox cs.cpp 131,072 cl /Ox /Oi /Ob1 /GL /Oy cs.cpp 131,072
今回の実験ではc言語で書いたプログラムのほうが小さくなった。 でも十分大きなプログラムではこの差はほぼ無視できるレベルになるのではないだろうか。 気が向いたら実験してみる。
VCなら/MDを付ければいいんだよ。
vc9 /Os /MD cs.c: 7,168 cs.cpp: 7,680 vc9 /Os /MT cs.c: 53,248 cs.cpp: 129,024 gcc(4.1.2) -Os cs.c: 8,330 cs.cpp: 8,827 gcc(4.1.2) -Os -static cs.c: 615,580 cs.cpp: 1,306,095 ----- サイズの最適化しかやってないけどこんな感じだった
ためしにC#版もやってみた、オプティマイズなし class App { static void Main() { System.Console.WriteLine( "{0}" , 1 ) ; } } csc cs.cs : 3,072 ildasm で調べたら Main() のコードサイズは17バイト コンストラクター 7 バイト、あわせて 24 バイト その他の容量は、動作しない環境で実行したときのエラーメッセージ用実行コードその他 サイズが気になるなら、マネージド系が圧倒的に有利です
ランタイムが別なんだからそりゃそうだ
ランタイム別としても17バイトはすごいと思うよ C だと、スタックフレームの構築だけであっさり17バイト突破するよ
ランタイム(VM)に丸投げなだけだろ禿
だからその丸投げの度合いがすっげえなって話だろ? とっくに折り込み済みのことを突っ込みの手段に使うのって馬鹿丸出しだよ。
17Byte中に文字列 "{0}" = 8byte も込みだったりするのがまた恐ろしい。
>>913 マイクロソフトC++ V14.0でO1で最適化するとCでも14
>>913 マイクロソフトC++ V14.00でO1で最適化するとCでもmainのコードサイズは17バイトだ
スタックフレームは必要ない
最適化なしのスタックフレーム付でも22バイトにしかならん
コードサイズだけ比較しても意味ないがね
コードサイズを小さくしようという話の流れじゃないのかwww
初学者はとりあえずCやっとけ 極めなくてもいいからやってればC++なりJAVAなりいくらでも替えがきく
Cは勉強用/拡張用には良いかも知れんが、やりたいことを実現するまでが長いのがなあ。 俺はあんまり勧められない。
確かにCじゃ画面に線一本引くのでも苦労するが、 本格的な学習の前の基礎知識を学ぶという点では良いね。 でもCの前にASMをほんのちょっとで良いから勉強してみるのも良いかも。
>確かにCじゃ画面に線一本引くのでも苦労するが、 苦労も何もCにそんな機能はない。
楽勝 putchar('-');
と思ったが標準出力が画面に出力される保証は無いんだった
926 :
デフォルトの名無しさん :2008/03/23(日) 09:25:13
C言語と追加機能を使って線を書くの略だろう
追加機能がOKならinclude1つと関数呼び出し一回で線を引ける処理系だってあるし
だから逆に言えば簡単に描けない処理系もあるわけで
929 :
デフォルトの名無しさん :2008/03/23(日) 09:59:04
標準ではかけない
FreeBSDのSSCLIでも簡単には線を引けないしCに限った話ではないな
画面のある任意の処理系に簡単に書ける言語ってあるの?
処理系に書く、ってどういう意味だろう。
933 :
デフォルトの名無しさん :2008/03/23(日) 12:00:26
グラフィックが簡単にできる言語があるかという質問では?
画面上に線が簡単に書ける言語といえばLOGOだな
グラフィックが簡単な言語というならFlash/ActionScriptだな 時点は xaml、ドキュメントとデザイナがもう少しまともになれば間違いなくコレかと。
N88
旧VBもフォームに一行書くだけで線引けるよ。
X1turbo BASIC
<hr>
>>923 ガキの頃、Quick Cを使ってグラフィックライブラリでビデオメモリに線を引いたりしてたんだが、
あの頃はCの標準ライブラリと非標準ライブラリの違いなんぞ知る由もなかった
PC98シリーズでいかに高速な描画をやるかって、インラインでアセンブリを書きまくるとか
アーキテクチャニュートラルなコーディングなんか微塵も考えてなかった
942 :
デフォルトの名無しさん :2008/03/23(日) 21:18:50
その頃にアーキテクチャニュートラルなグラフィックのコーディングを しようとしたら、なんだろ。X-WindowとかMotifとかかな
当時は毎回全コードを捨て去って新規に作っても十分いけるし、コードの品質も毎回向上したからね 実際、非互換の方が高速な上にすばやく作れて、となれば互換性など考える理由は無かったかと。 正しいソフトウェアは時代次第でどんどん変化する訳だ。
>>943 それだ!
だいたい、当時のPCは性能が今と比較するととんでもなく低かったんだよな
intel系は640KBのメモリとEMSメモリ、ビデオメモリの余りやらを駆使してているソフトなんかがよくあった
互換性よりも動作速度のほうが重要だったのかも
いや、移植先なんてなかったんだ、当時のPC98のシェアは日本国内の90%を越えていたしw
それが今じゃなんだ、ランゲージニュートラルでアーキテクチャニュートラルでUML駆動モデルで
ロバストネス分析→設計モデル。リソースは無限であるという前提ときたもんだ
下回り(デバドラやハード制御)を知らないのも困りもんだが…
Javaやってるとクローン作らないで参照戻すくせに カプセル化がどうの言うの奴とかいるのよ 始めにCとかC++やってればそのへん安心
>>945 malloc() の返り値を呼び元でfree() してもらうのは、だめですか..........。
>>946 後処理用の関数を用意してあげるのが親切かも
JAVAやらドトネトとかRuby、Python、Perl、PHPなんかを最初の言語に選んでしまうとC/C++は ハンパじゃなく分かりづらい言語になりそうだな
C/C++を最初の言語に選んでしまった場合は?
C/C++を選んだからといって、他の言語の学習が楽になるわけではない。
>>949 >>950 の言うとおりなのだろうかと
だけど、C/C++を最初にやってると、そうでないよりはC/C++学習が楽かも
そんな俺はx86アセンブラ→Turbo Pascal→Quick Cだった
学習が楽かどうかは言語仕様よりもIDEのサポートが重要な気がする。 そりゃまあ、昔はmakeとemacsだけでなんでもやってた気がするけどサ。
漏れなんか今でも linux や Solaris では vi だなあ・・・
>>952 いまでも仕事の大半は、makeとVimで済ませてるな。デバッガもよっぽどの
ことがないと使わない。ファンクショントレースとcoreファイル開いてバックトレース
すればバグの9割以上は1瞬で解決するし。1瞬で解決しない場合は、
2,3のprint文入れればそれで解決する。
システムテストやらででてくる再現性の低い不具合とか、ハード起因の
不具合とかでは、デバッガ重宝するけど。
IDEサポートって本当にそんなに重要か?インテリセンス(笑)なんてVimだって
備えてるぜ?Unitテストなんて、Rubyでは言語のライブラリとして豊富な機能が
提供されてるぜ?VSSよりSVNのほうが便利だぜ?メトリクスツールは、
もはやフリーでも転がってるぜ?
IDEのメリットって何だ?
環境の構築が容易
>>954 VisualStudioとかのC++BuilderのIDEは使うけど、ほかのIDEはエディタがいまいちなのが多くてmake作成用にしか使わない感じ。
>>955 環境の構築の容易さにアドバンテージがあるとしても、IDEを習得するための
労力と時間、一社のIDEに依存してしまうリスク、汎用性の喪失、費用などを
考えると、俺にはIDEの方がいいなんて、現時点では到底思えないな。
Eclipseも数時間で捨てた。VisualEditorだけは使うけど。
VC++使う羽目になりそうだったので、Glade+Rubyで押し切ったわ。
まあ、makeでビルド出来る時点で、変人だからねぇ 変人の普通が、普通の人の普通かって話だよなぁ...
つーかさ、makeでビルド出来るなら、VC++使っててもいいんでないの? MFCやATL使わなきゃ環境依存なんて無いでしょ
>>959 GUI作ることになった(といっても、社内ツールだが)。VC++使ってくださいと
言われたのだけど、そのツールLinuxでも使うことが想定されたから、
「今後他プラットフォームに移植することを想定するなら、最初からそれを
考慮したほうがいいですよ」といって、Ruby+Gladeで落ち着いた。
横から「Pythonは?Pythonでいきましょうよ!」っていうPython厨がいて
驚いたが、華麗に無視
>Python厨 ソイツは大事にしとけw
インテリセンス(笑)なんてVimだって備えてるぜ?
VCのインテリなら単語補完に毛が生えた程度じゃない?
>>960 > 横から
> 華麗に無視
比較的まともであると言われるPython使いの「横から目線」に、
横柄・傲慢で知られるRuby使い特有の「上から目線」で対応したわけですね?
「結果」は現場の力関係に依存するからともかくとして、
Python使いとRuby使いが登場する「人物描写」としては、実にお約束だと思いました。
ここでPython対Rubyをやるなよ…。 やるならLLバトルロワイヤルでどうぞ。
個人的に軽い社内のツールでVC++とRuby、Pythonなら Python>VC++>Rubyだなぁ。 特に若い人がPython使いたいって言うなら、自分の趣味は切り捨てて そっちを優先させるし、特にないならマルチプラットフォームでお手軽(?)なJava 選択するけど。
>>963 何を言っとる。
最近のインテリセンスはコーディング中にプリプロセス走らせるぞ。
おかげでビルドターゲットの切り替えが重い重い…。切りたくても
切れないし。
>>967 マイクロソフトからすれば、ハードウェアの進化に即した
ソフトウェアを提供しなければ、バージョンアップしてもらえ
なくなるかも、他OSに乗り換えられてしまうかも、という恐怖
が付きまとっているのだから仕方がない。
ソフトはユーザエクスペリエンスを無視して、「重い処理」を
作りこまなければ意味がない。デスクトップアプリ全盛は
それでもよかった。
Web全盛の時代、ユーザは「よりよいエクスペリエンス」が別の
ところにあると気づいてしまったのだな。そして「それで満足」
してしまいそうになっている。
まぁこれからはMSもおもてなしに移行せざるを得ないだろう。
そしてIEの改良に注力せずに、他ブラウザの追従を許してしまったことは 致命傷になるかもしれない。シルバーライトを声高に叫んだところで、 さんざんFUDで痛い目を見てきた開発者達はAIRを選択することは 目に見えている。 MS終焉の序章ですな。
頼みの綱は、WMPlayerによるDRM動画流通のしくみが豊富なとこくらいか。 はてさてDRM頼みがいつまで持つことやら。
>>968 「おもてなし」を使うということは中島さん?
つかMSの方針とかどうでもいいし このスレで許されるMSの話題はVisual C++だけだ
vimでも〜とか言ってるやつはC#のインテリ使ったことないだけだろ
>>973 C# は確かに凄い。ここまで補完が優秀だと、片手でプログラミング出来る程だな。
仕事で VC++ 使ってると、C# が羨ましくてしょうがない。
「インテリセンスを更新しています・・・」が表示されて、激重な時は特に。
>>974 C#楽なんだけどさ、propertyとかいう変なの使ってgetter/setterするのはどうも…
ついでに、インデクサって悪の枢軸じゃなかろうか?
ってか、.NET Frameworkそのものが業務アプリ作るには不十分な希ガス
.NETでGUI作って、処理部はネイティブ言語でAPIコールが生産コスト安そうだ
あとは、俺が古い考えなだけなんだが、ガーベージコレクションの恩恵を受けると、C++に戻った
ときに危うくdeleteするのを忘れそうなんだがw
>>975 明示的にdeleteしているならC++を使えていないと言うことだ。
auto_ptrやsmart_ptrを使うか、さもなくばデストラクタでdeleteすればいいのだから。
基本に従ってればdeleteは完璧に抹殺できるよな
VB6、VB.NETのインテリもまともなんだが なんでVCだけタコなんだ
ぱくりぱくられだな