はてなキーワード: STLとは
QだからQtだとおもうけど、というのは置いておいて
世界にはまだまだ、non Intelベースのプロセッサなんていくらでもあるしorz
だいいち、だったから完全互換にしてくれ
includeパスを切り替えれば切り替わるというのが、最高
JAVAで書いてもいいが、システムが巨大という意味にはJavaVMの移植とかLinuxのカーネルにパッチという意味まで含まれているので
CだろうとC++だろうと使うことになるのは変わらんし
高負荷になるとカーネルコールから特殊なエラーが帰ってくるとか
単体じゃ出ない問題もあるし
人が違う、会社が違うっていうところから来る意識違いとか、結構テストしてもでるし。 結合のデバッグはなくならんよ。
あとは、引き継いで、数年後に違う人が改造するとかのときに、
あまりにも、STLガツガツだよ改造しにくい時があるんだよ。
数年後の改造って、当初の設計になかった追加機能だから、設計上できなくて結構改造ってときに
ベタベタに書いてあるか、STLガツガツに書いてあるかとか結構違ってくるしね。
メソッドが細かすぎるとコールスタックが深くなりすぎて、それはそれで追っかけにくいというのもある。
時間が経つと、書いた人がもういないとか、よくあるしね。
そういう時に、改造しやすくデバッグしやすく行儀よく書いてあるとすげー助かる。
最近は、年取ったのもあって、難しい部分は
http://d.hatena.ne.jp/faith_and_brave/20100220/1266673222
まず第一にエンタープライズでの開発が考慮されていない。エンタープライズの開発だと100人200人 マスタークラスから ジュニアーまで様々なレベルの開発者が携わる。
その中で重要になってくるのは可読性。
はっきり言って、歴史的な可読性を犠牲にして効率が上がるならともかく、気持ちの問題程度の効率では意味がない。
第2に
スレッドとファイバーの違いぐらいわかれ、わざわざスレッド起こしたらコンテキストスイッチにどれだけコスト食うんだよ。
関数コールするとレジスタとかが、スタックにPUSHされるんだよってわからん奴が、IF書くなと同じで、スレッドってコンテキストスイッチの塊なんだよってのがわかんないのに下手にスレッド書かせるな。
3にラムダ式・・・いらん・・・必要なのは曲芸じゃない、可読性。可読性を犠牲にして早くなるならともかく・・・
4にforeachではlastを変数に取るな。途中でReallocしたり、eraseしたりしたときに余計なバグを生んで面倒だ。レビューの時も邪魔。速度?速度が必要な背景でSTLのVector使うな。配列使うかポインタ使え。
なんつーか、トータルで見て、次はC++と各種OpenCLとかGLとかのライブラリの集合だな。C++0xはまともに使う人もいなさそう。正規表現とかもライブラリ使えば良いし、そもそもC系列ならBisonとかLRとかだろうと。C系列の使い手ならBNFを使え。正規表現使いたければそれこそ、Perl使え。
コード書き始めて1ヶ月強ですが、なかなかC++の仕様が把握できません。
今日はポリモーフィッククラスの扱いがよくわからなくてハマッったりしました。
書いたコードは2,3000行くらい。図形処理のアルゴリズムが難しくて相当苦しみました(まだ未完成)。
テストケースをあまりきちんと洗い出してないからこれから困ると思います。
OOP的に正しい設計とか未だによくわからないし…(設計始めたのはさらに1ヶ月前くらい)。
ギークとまではいかないにしても、何とかして「そっち側」に行きたいのです。
スキルを身につけるという意味では、実際どのくらいのタイムスパンを見込むべきでしょうか。
とか、終わってもいないのに増田に書いちゃう集中力のなさも問題です。
諸君、私はC++が好きだ
諸君、私はC++が好きだ
諸君、私はC++が大好きだ
テンプレートが好きだ
STLが好きだ
Boostが好きだ
FC++が好きだ
Macで
BSDで
演算子の意味が変わり、直感的なコードが書き下せる時など心がおどる
動的言語の優位性を語っている奴等にそれを見せた時など胸がすくような気持ちだった
Boostが好きだ
Boost::lambdaを使って(_1 + _2)と二つの引数を足算した結果を返す無名関数を定義した時など感動すらおぼえる
Boost::regexで正規表現を書く時などもうたまらない
Boost::shared_pointerでオブジェクトが自動的に解放されるのは最高だ
納期に追われて急いで書かなければならないパーサを
Boost::spiritでBNFを記述して書いた時など絶頂すら覚える
そんなC++が複雑だと思われているのはとてもとても悲しいものだ
テンプレートが好きだ
諸君 私に付き従うC++好きの諸君 君たちは一体何を望んでいる?
更なるC++を望むか
糞の様なC++を望むか?
BoostやFC++によってさらに変態的になっていくC++を望むか?
よろしい ならばC++だ
だが、LL全盛の時代の陰でもはや組み込みかHPCぐらいでしか使われないという中傷に耐え続けて来た我々には
ただのC++ではもはや足りない!!
我々はわずかに小数
Perl、PHP、Python、Ruby、JavaScriptに比べれば物の数ではない
だが諸君は一騎当千のBinarianだと私は信じている
ならば我らは諸君と私で総兵力100万と1人のコンピュータサイエンティスト集団となる
我らを忘却の彼方へと追いやり、インタプリタしか知らない連中を叩きのめそう
髪の毛をつかんで引きずり下ろし 眼(まなこ)をあけて思い出させよう
連中にインタプリタでは実用的なプログラムが書けないということを思い出させてやる
C++には奴らの哲学では思いもよらない書き方がある事を思い出させてやる
1000人のBinarianの集団で 世界を変態的なコードで埋め尽くしてやる
逝くぞ 諸君
で、市民革命とギリシャ思想の必然的な関係とやらを見せてほしいのだが。俺が思うに、過去の伝統の影響を過剰に持ち上げるのは当時暗中模索でことを進めていった人たちに失礼だと思うんだけどね。
うーん、まあそういう意見はそれでもいいよ。でも日本でそれを主張することが、あまつさえ天皇とか引き合いに出すことが、どんだけ危険なのか、ってことくらいは自覚して欲しいな。
ディベートのネタに使っていいような話題じゃねーぞ。アホにでしゃばる隙を与えないためにも。
で、ほんとに蛇足なんだけどなんだかなあ。
だから、あなたの言っている「普通の現場」が別に「普通」じゃないと言ってるわけですが。あなたの挙げた例で言うと「携帯ゲーム機のプログラマーみたいな仕事」を「普通」の範疇に入れないのはなぜ?
携帯ゲーム機のプログラミングでアセンブラもどきのC言語が使われるのは、CPUもメモリも貧弱でC++のコストが高くつくからだ。必然性がある。あと、携帯ゲーム機のプログラムは一人でもやれる規模だし、誰かのソースを引き継いでサポート、みたいなこともあまりないからな。
10年前ならともかく、今だとゲームでも、普通のゲーム機や特にパソコンのゲームだと、さすがにほとんどがC++で開発されてるんじゃないかな。
業務用アプリ作ろうってのならともかく(まあ、オブジェクト指向を使う目的は普通はそっちだが)、そうじゃない人間にとってはややこしいライブラリの癖をあれこれ覚える必要はないわけで。
そんなお遊びプログラムの話をされてもー。
ていうか、STLとか標準的なライブラリの使い方は、もう癖というレベルじゃなく、標準語として覚えるべきだと思うが。
君の仕事を引き継ぐプログラマに、君オリジナルのライブラリの癖に適応する手間を掛けさせるよりは、標準的なものに準拠しておいたほうがいいよね。
「情報工学」全般の話をしているのに企業社会だけを想定する必要などなかろう。大雑把な言い方をすれば、大規模情報システムだけがITの全てではないということだ。
そりゃ携帯ゲーム機のプログラマーみたいな仕事もあるから、そういうのでアセンブラもどきのCソースが出てきてもおかしいとは言わないけど、一般の感覚としてはちょっと外れてると俺は思う。
だいたい、Cやアセンブラが使える人間がJavaやらC++を覚えて標準的な書法で書くことは、好き嫌いはともかく本質的には難しいことではないわけで。道具の使い方を覚えるということに対して「必要があればやるけれど、必要がなければやらない」というのは非常に当たり前の立場だと思うがね。
あと、C++やJavaはちゃんとやろうとするとむしろアセンブラよかずっと難しい(というか「ややこしい」)ので、そう舐めてかかるのはいかがか。
どっちでもいいよ。だいいち、数値解析の専門家がC++で書いたコードと普通の数値実験屋がCで書いたコードの性能の比較なんて問題は非常に枝葉末節じゃないか?そもそも、「普通の数値実験屋」がどういう奴かという範囲の取り方でいくらでも恣意的な結論が出てくる話だから、議論して実になるとも思えない。
やー、C++をいまだに重い重い言う人が多いからなあ。確かに枝葉末節なんだが、スルーしきれない。
そりゃ数値計算ではFORTRANに負ける部分が確かにまだあるが、Cと比べてなら、そこまで酷いってことはないはずなんだがね。
CでSTLよりも高速なコレクション処理を書ける人にはそういうことを言う権利があるいはあるのかもしれんが、俺はそれでもSTL使えって言うね。後々を考えて。
俺も論旨を混乱させた責任はあるが、そもそも話がずれすぎている。俺が言っているのは、「速いコードを書くことが理論的に可能かどうか」ではなく、「速いコードを書くために本人が持っているべき素養」の話をしているわけで。
うーん、個人的には、自力でアセンブラレベルからコレクション処理を書き起こすなんてばかげてると思うけどね。
http://www.geekpage.jp/blog/?id=2006/12/13
プログラミング言語ヒエラルキーにおいて、上位が下位に対してどう見下してるのかを書いてみた。詳しくない言語も無理して調べながら書いてある。あと、他言語に理解の無い人みたいで生々しいかと思って、刺激的かつあまり真っ当でない内容ばっかにしてみたよ!((FORTRAN から Java に「GO TO も実装されてないんですか?」とかそういう、馬鹿にすることを目的とした偏狭で的外れな発言ってことだよ!))((ここにある中では、C# に多重継承が無いことを馬鹿にする C++ プログラマーが真っ当でない指摘のわかりやすい例かな))
みんなが普段どういう不当な見下しをしてるかも教えてね!
「C++ の難解な仕様と戦うぐらいなら C で関数ポインタを使ったオブジェクト指向の方がスマートだね」
「STL は糞」
「多重継承したくなったらどうするの?」
「CPAN 見たって C でコア部分を書いてるライブラリばっかじゃん」
「なんでわざわざ use strict なんて書かなきゃいけないの」
「Python って明示的に object を継承した場合としなかった場合で挙動が違うって本当なの?」
「ライブラリ環境が全然整備されてなくて最悪じゃん。C や C++ で書かれたライブラリをラップしてるだけのはずなのに機能が減りまくってるのも多いし」
「簡単な処理をコピペで実装してるだけだね」
「As とか書いてて混乱しない?」
「C# があるのにまだ使ってるんだ」
「冗長でわかりやすいですね(笑)」
「DIVISION の概念って本気で言ってるんですか?」
「記述がわかりづらいね」
「ペンタゴンで使われてるだけじゃん」
「ガベージコレクタが無い……?」(あるらしいです><)
「昔 Apple で使われてただけじゃん」
「Del…phi…?」
「コンパイルも実行も遅いらしいけど何に使うんですか?」
「処理も記述できないのに何言ってるの」