次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part135
https://mevius.5ch.net/test/read.cgi/tech/1522495206/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1509780815/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
----- テンプレ ここまで -----
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
C++相談室 part136
レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん (ワッチョイ bf81-LHz9)
2018/06/07(木) 23:40:12.36ID:GNQuDMaA02はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9b6f-LHz9)
2018/06/08(金) 00:54:25.36ID:ynCi559O0 2get
3デフォルトの名無しさん (ワッチョイ 13cf-9TS0)
2018/06/08(金) 01:28:54.52ID:P6Kg0b7q0 STLつかうと一気に実行ファイルサイズが10倍に?!
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
---- テンプレ ここまで ----
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
---- テンプレ ここまで ----
2018/06/08(金) 02:27:58.00
C++解ると豪語していた人が後日茂みで戉だらけの死体で発見される例が後を絶ちません
C++解るは何か宗教的禁忌の呪詛なのだと思います
C++解るは何か宗教的禁忌の呪詛なのだと思います
5デフォルトの名無しさん (ワッチョイ 09c3-5Ttc)
2018/06/08(金) 06:48:58.71ID:ksGFIz8s0 青い鳥に「C++を完全に理解した」と語りかけると
もれなく狂人が群がってきて引き裂かれます
もれなく狂人が群がってきて引き裂かれます
6デフォルトの名無しさん (ワッチョイ 9b7f-abwI)
2018/06/08(金) 07:17:06.89ID:Ah30uidH0 構文、ライブラリ、パラダイム毎のテクニック、イディオムの一部を覚えて解った気になるなはどの言語でも同じね
7デフォルトの名無しさん (ブーイモ MM33-dEMp)
2018/06/08(金) 15:02:53.87ID:sfvstBGHM >>3
このテンプレ貼り付けるの面白いんか
このテンプレ貼り付けるの面白いんか
8デフォルトの名無しさん (ワッチョイ 337e-DGJA)
2018/06/08(金) 17:51:21.81ID:1AZC1QTT0 C++を完全に理解するには40年の下積みが必要
9デフォルトの名無しさん (ワッチョイ 1b37-x2t7)
2018/06/08(金) 19:54:55.67ID:M5Al6KvM0 C++77をやっと理解しました
10デフォルトの名無しさん (バッミングク MMb5-uWQQ)
2018/06/09(土) 15:22:59.44ID:Ee9G7X6vM c++11とか14とか17って何ですか?
11デフォルトの名無しさん (ワッチョイ 1334-KXLn)
2018/06/09(土) 15:30:37.98ID:VwmpqUVo0 ggrks
12デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/09(土) 16:23:33.39ID:HrZn4m/i0 C++完全に理解したわ。
14デフォルトの名無しさん (ワッチョイ f3e9-Cil2)
2018/06/09(土) 17:23:15.68ID:mgwk6Vqj0 C++完全理解ってすげー
入門本ですら辞書の様に分厚いのに
入門本ですら辞書の様に分厚いのに
15デフォルトの名無しさん (ワッチョイ 9381-LHz9)
2018/06/09(土) 17:26:24.12ID:ei3u8diB0 覇王になれます
16デフォルトの名無しさん (ワッチョイ 6b13-LHz9)
2018/06/09(土) 17:43:50.55ID:nw+86khE0 コンパイラの中の人や
規格票の中の人なんかね
規格票の中の人なんかね
17デフォルトの名無しさん (ワッチョイ 1334-KXLn)
2018/06/09(土) 17:49:33.99ID:VwmpqUVo0 C++界のラオウ
2018/06/09(土) 18:49:15.24
>>12の家に江添が向かうぞー!
19デフォルトの名無しさん (ワッチョイ a98a-Duqg)
2018/06/09(土) 18:51:01.10ID:P8wz6R/X0 12による攻略本を待てば良いのか?
20デフォルトの名無しさん (ワッチョイ 13d2-MIhW)
2018/06/09(土) 19:33:13.71ID:O5NYHXm/0 最近は規格を完全に満たしたコンパイラって存在するの?
21デフォルトの名無しさん (ワッチョイ a9f2-LHz9)
2018/06/09(土) 19:46:23.57ID:ar7EC0zB0 C++11は結構「満を持して」って感じだったけど、その後14だ17だとアップデートサイクルが
短くなるならCfrontに回帰してもらった方がハッピーな気がしてきた。
今のC++で技術的にどのくらいしんどいのかはわからないけど、TypeScriptやBabelなんかの
JS界隈でうまくいってるエコシステムがうらやましい。
短くなるならCfrontに回帰してもらった方がハッピーな気がしてきた。
今のC++で技術的にどのくらいしんどいのかはわからないけど、TypeScriptやBabelなんかの
JS界隈でうまくいってるエコシステムがうらやましい。
22デフォルトの名無しさん (ワッチョイ d19f-NuDx)
2018/06/09(土) 19:59:17.07ID:MhKfyDgC023デフォルトの名無しさん (ワッチョイ 9b7f-abwI)
2018/06/09(土) 20:08:13.77ID:4etfJVE40 ラムダとか型推論とか
やわらか言語のお遊びだと思ってたのにいまじゃこの有り様だよ
やわらか言語のお遊びだと思ってたのにいまじゃこの有り様だよ
24デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/09(土) 20:09:30.83ID:HrZn4m/i0 コンパイラを駆動するためのプログラミングと、実行可能形式を駆動するためのプログラミングを一度にできる、一粒で二度おいしい言語がC++である。
つまり、ビールとワインを混ぜたらとてもまずかったというお話。
つまり、ビールとワインを混ぜたらとてもまずかったというお話。
25デフォルトの名無しさん (ワッチョイ a9f2-LHz9)
2018/06/09(土) 20:11:55.73ID:ar7EC0zB0 >>22
?
TypeScriptもBabelも普通に使ってるけど?
それがうまくいってるのを見てるからこそC++もそうできたらいいと思ったんだが。
まぁ、コンパイルに時間がかかるのとデバッグがちょっと隔靴掻痒気味ってのはある。
?
TypeScriptもBabelも普通に使ってるけど?
それがうまくいってるのを見てるからこそC++もそうできたらいいと思ったんだが。
まぁ、コンパイルに時間がかかるのとデバッグがちょっと隔靴掻痒気味ってのはある。
26デフォルトの名無しさん (ワッチョイ 6b13-LHz9)
2018/06/09(土) 20:19:03.73ID:nw+86khE027デフォルトの名無しさん (ワッチョイ d19f-NuDx)
2018/06/09(土) 20:19:57.28ID:MhKfyDgC028デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/09(土) 20:22:20.01ID:HrZn4m/i029デフォルトの名無しさん (ワッチョイ a98a-Duqg)
2018/06/09(土) 20:23:02.20ID:P8wz6R/X0 金箔貼っても糞は糞
30デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/09(土) 20:25:24.52ID:HrZn4m/i0 C++がこっち方向→に糞だとすると、Javascriptは←あっち方向に糞。
31デフォルトの名無しさん (ワッチョイ d19f-NuDx)
2018/06/09(土) 20:25:28.19ID:MhKfyDgC032デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/09(土) 20:29:08.98ID:HrZn4m/i0 歯糞耳糞を笑うというが、本物のウンコには誰も勝てなかったというお話。
33デフォルトの名無しさん (ワッチョイ a9f2-LHz9)
2018/06/09(土) 20:34:01.02ID:ar7EC0zB0 >>26
結構印象が違うもんだね。
C++03が失敗気味でオワコン視された雰囲気はわかるけど、だからこそ次は失敗できない
C++11はそれなりの完成度になったと思うんだが。逆に14や17は蛇足気味のような。
結構印象が違うもんだね。
C++03が失敗気味でオワコン視された雰囲気はわかるけど、だからこそ次は失敗できない
C++11はそれなりの完成度になったと思うんだが。逆に14や17は蛇足気味のような。
34デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/09(土) 20:34:26.33ID:HrZn4m/i0 しかしJavascriptとC++を完全に理解した俺が最強ってことだろうな。
2018/06/09(土) 20:49:52.86
同じ糞なら書かなきゃソンソン
37デフォルトの名無しさん (ワッチョイ 6b13-LHz9)
2018/06/09(土) 21:28:50.56ID:nw+86khE0 >>33
いや14は重要なバグ直しでautoが安心して使えるようになったし
17はfilesystemやstring_viewにexecution(これすげー)が入って名実共にメジャー
やっぱC++03からの沈黙が異常すぎたんだよ
いや14は重要なバグ直しでautoが安心して使えるようになったし
17はfilesystemやstring_viewにexecution(これすげー)が入って名実共にメジャー
やっぱC++03からの沈黙が異常すぎたんだよ
38はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9b6f-LHz9)
2018/06/09(土) 21:39:20.39ID:EdmRUNh70 >>36
常に最新を使えとまでは思わんが、さすがに C++11 は人権だと思うぞ。
C++14 や C++17 はユーザ視点では重要なものも含まれるとは思うが、
C++11 に間に合わなかったりミスがあったりしたのを補った、
マイナーアップデートという印象は有るな。
常に最新を使えとまでは思わんが、さすがに C++11 は人権だと思うぞ。
C++14 や C++17 はユーザ視点では重要なものも含まれるとは思うが、
C++11 に間に合わなかったりミスがあったりしたのを補った、
マイナーアップデートという印象は有るな。
>>38
スマートポインタの恩恵は享受しようと思いますが、右辺値参照はよく理解できません…
スマートポインタの恩恵は享受しようと思いますが、右辺値参照はよく理解できません…
40デフォルトの名無しさん (ワッチョイ 6b13-LHz9)
2018/06/09(土) 21:51:27.43ID:nw+86khE041デフォルトの名無しさん (ワッチョイ 6b13-LHz9)
2018/06/09(土) 21:52:38.94ID:nw+86khE0 キーワードclassは結局いらなかった
newは忌み子だった
禿がどういう方面で過ちを犯したか
何となく察することができるだろう
newは忌み子だった
禿がどういう方面で過ちを犯したか
何となく察することができるだろう
42デフォルトの名無しさん (ワッチョイ 09c3-5Ttc)
2018/06/09(土) 22:02:43.49ID:v0cqkdT30 newで帰ってくるのがunique_ptrにならねえかなあ
43はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9b6f-LHz9)
2018/06/09(土) 22:05:12.82ID:EdmRUNh70 >>39
えっ、それって重要な機能のひとつじゃね?
ライブラリは標準になくてもなんとかなるけど、
基礎的な機能で大事なトピックがてんこ盛りなのが C++11 でしょ。
最低でも
auto
decltype
constexpr
可変長引数テンプレート
あたりは無いとつらすぎるんですけど!
えっ、それって重要な機能のひとつじゃね?
ライブラリは標準になくてもなんとかなるけど、
基礎的な機能で大事なトピックがてんこ盛りなのが C++11 でしょ。
最低でも
auto
decltype
constexpr
可変長引数テンプレート
あたりは無いとつらすぎるんですけど!
44デフォルトの名無しさん (ワッチョイ d19f-NuDx)
2018/06/09(土) 22:20:04.89ID:MhKfyDgC045デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/09(土) 22:26:37.24ID:HrZn4m/i0 C++17はDoxygenを凄いことにする。
ひどい奴だ。
ひどい奴だ。
46デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/09(土) 22:30:21.93ID:HrZn4m/i0 std::unique_ptrはユニポと読むんだよな?
47はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9b6f-LHz9)
2018/06/09(土) 22:31:54.21ID:EdmRUNh70 >>44
> ちなみに他言語を使わない理由は何だ?
Scheme スレが私の巣だと思ってるくらいには Scheme 派なんだけど、
話題が少なくて暇だからこっちに出てきてる感じ。
> おそらく君はインラインアセンブラとか全く使わない人だろ?
使わないに越したことは無いというのが基本姿勢ではあるけど、使う必要があるので使うよ。
どういう意図で言ってんのかよくわかんないんだけど、
C++11 以降に加わった機能がスゲー大事という気持ちとこれらが何か関係あるの?
> ちなみに他言語を使わない理由は何だ?
Scheme スレが私の巣だと思ってるくらいには Scheme 派なんだけど、
話題が少なくて暇だからこっちに出てきてる感じ。
> おそらく君はインラインアセンブラとか全く使わない人だろ?
使わないに越したことは無いというのが基本姿勢ではあるけど、使う必要があるので使うよ。
どういう意図で言ってんのかよくわかんないんだけど、
C++11 以降に加わった機能がスゲー大事という気持ちとこれらが何か関係あるの?
48デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/09(土) 22:44:45.79ID:HrZn4m/i0 人は皆生まれながらにC++が好きだけど、その気持ちに気づくかどうかに違いが出るんだよね。
2018/06/09(土) 22:49:33.71
がしゃーん
がしゃーん
△ ¥ ▲
( C ++ C )
( )
/│ 肉 │\
< \___/ >
┃ ┃
= =
C++17だよ
自動で Doxygenを凄いことにしてくれる
ひどいやつだよ
がしゃーん
△ ¥ ▲
( C ++ C )
( )
/│ 肉 │\
< \___/ >
┃ ┃
= =
C++17だよ
自動で Doxygenを凄いことにしてくれる
ひどいやつだよ
50デフォルトの名無しさん (ワッチョイ 13eb-EKWA)
2018/06/09(土) 22:50:39.46ID:5LGGM5BC0 よく知らないのだけど、いったいC++17でDoxygenに何が起こるんだ・・・
51デフォルトの名無しさん (ワッチョイ d19f-NuDx)
2018/06/09(土) 23:00:19.02ID:MhKfyDgC0 >>47
俺はC++を使う利点は
・高位から低位まで同一言語でカバー出来る点
だと思っていて、逆に言えば、
高位でしか組まないのなら他高位言語を使った方がいいと思ってるんだよ。
だからC++の利点を生かす為には、
・高位の機能と低位の機能を混ぜて使う
=スマポもラムダもナマポもインラインアセンブラも 『同時に』 使う
事が必要で、逆に、このスレに巣くっているナマポ禁止な連中には若干懐疑的なんだよ。
それなら他言語の方が生産性が高いから。
必要ならその部分だけCのDLLにすれば済む話だし。
そして最近の新機能は高位向けの物が多いから、聞いてみたわけだ。
Schemeは知らんが、他高位言語を使っているのなら済まんかった。
俺はC++を使う利点は
・高位から低位まで同一言語でカバー出来る点
だと思っていて、逆に言えば、
高位でしか組まないのなら他高位言語を使った方がいいと思ってるんだよ。
だからC++の利点を生かす為には、
・高位の機能と低位の機能を混ぜて使う
=スマポもラムダもナマポもインラインアセンブラも 『同時に』 使う
事が必要で、逆に、このスレに巣くっているナマポ禁止な連中には若干懐疑的なんだよ。
それなら他言語の方が生産性が高いから。
必要ならその部分だけCのDLLにすれば済む話だし。
そして最近の新機能は高位向けの物が多いから、聞いてみたわけだ。
Schemeは知らんが、他高位言語を使っているのなら済まんかった。
52はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9b6f-LHz9)
2018/06/09(土) 23:16:26.11ID:EdmRUNh70 >>51
高から低をカバーしてるのが良いというのは私もまったく同意見だよ。
だから、高から低をカバーと言っておきながら、高水準の部分は他言語に任せた方がいいというのはなんか矛盾してないか?
俺は「(現代の水準では) 足りてないからもっと (少なくとも C++11 で追加された分くらいは) 欲しいよな」って気持ちなわけ。
高から低をカバーしてるのが良いというのは私もまったく同意見だよ。
だから、高から低をカバーと言っておきながら、高水準の部分は他言語に任せた方がいいというのはなんか矛盾してないか?
俺は「(現代の水準では) 足りてないからもっと (少なくとも C++11 で追加された分くらいは) 欲しいよな」って気持ちなわけ。
53デフォルトの名無しさん (ワッチョイ d19f-NuDx)
2018/06/09(土) 23:38:56.87ID:MhKfyDgC0 >>52
矛盾してない。
高水準の部分はC++は他言語に対して後れているから、
C++がそれを追加するのは妥当ではある。
ただ、俺なら他言語で組んで、CのDLLを呼ぶようにする。
それだと、他言語の進んでいる高水準機能を使えるから。
わざわざ遅れているC++に対して文句を言いながら使う意味がない。
例えば、C#がその作りになってるでしょ。
マーシャルがウザイか、C++の機能的周回遅れがウザイかってだけ。
勿論、インラインアセンブラを使いたいならC++しか解がない。
で、ナマポ禁止派はいったい何がしたいんだ?ってのが疑問で、
それだったら俺と同じでC#+CのDLLで良いじゃん、と思うわけ。
矛盾してない。
高水準の部分はC++は他言語に対して後れているから、
C++がそれを追加するのは妥当ではある。
ただ、俺なら他言語で組んで、CのDLLを呼ぶようにする。
それだと、他言語の進んでいる高水準機能を使えるから。
わざわざ遅れているC++に対して文句を言いながら使う意味がない。
例えば、C#がその作りになってるでしょ。
マーシャルがウザイか、C++の機能的周回遅れがウザイかってだけ。
勿論、インラインアセンブラを使いたいならC++しか解がない。
で、ナマポ禁止派はいったい何がしたいんだ?ってのが疑問で、
それだったら俺と同じでC#+CのDLLで良いじゃん、と思うわけ。
54デフォルトの名無しさん (ワッチョイ 13eb-EKWA)
2018/06/10(日) 00:22:20.01ID:qtmE4clR0 C#やってるとテンプレート欲しくなるじゃん
55デフォルトの名無しさん (ワッチョイ 09c3-5Ttc)
2018/06/10(日) 00:27:04.31ID:k6CFzDb+0 ナマポが本当に必要な所では存分に使えばいいと思うよ
ただし普通は99.9%くらいはそうじゃないからスマポを使え
ただし普通は99.9%くらいはそうじゃないからスマポを使え
56デフォルトの名無しさん (ワッチョイ d19f-NuDx)
2018/06/10(日) 00:35:42.54ID:CUftH0/Q0 99.9%がスマポなら、最初からスマポがデフォの言語を使った方が捗るでしょ。
Rustでもいいし、C#やJava等のGC言語でもいいし、PythonやRubyのようなスクリプト言語でもいい。
残り0.1%をマーシャルなりしてCのDLLで。
Rustでもいいし、C#やJava等のGC言語でもいいし、PythonやRubyのようなスクリプト言語でもいい。
残り0.1%をマーシャルなりしてCのDLLで。
57デフォルトの名無しさん (ワッチョイ 135e-JdDl)
2018/06/10(日) 00:42:34.12ID:z8yivKF60 話をぶった切ってすんません。
複数のスレッドで
thread_local int* p;
p=new int [1000];
で確保したヒープ領域はやっぱりスレッドセーフ、じゃない、データ競合が
おきるんですか?
複数のスレッドで
thread_local int* p;
p=new int [1000];
で確保したヒープ領域はやっぱりスレッドセーフ、じゃない、データ競合が
おきるんですか?
58はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9b6f-LHz9)
2018/06/10(日) 00:59:52.96ID:NuBmj+pR0 >>53
まー、生ポインタは一箇所たりとも許さんってほどの原理主義は過激だとは思うよ。
俺も生ポインタを使わないことはないし、 goto を使うことだってあるし。
ただ、「低レイヤから高レイヤまでをひとつの言語の中で扱える」というのは
「高レイヤな機能で低レイヤを隠蔽可能だ」ということであって、
低レイヤを低レイヤのままで扱うスタイルを是とするものではない。
直接的な部分ではインラインアセンブラを使うことが有っても、
その上のレイヤに持ち上げるときには必ずスマートポインタを使えってくらいの主張なら真っ当だと思う。
C++ なんてそもそもがクソなんだから、
解決のために追加された機能は積極的に使わないとやっとれんわ。
(でも好き。)
まー、生ポインタは一箇所たりとも許さんってほどの原理主義は過激だとは思うよ。
俺も生ポインタを使わないことはないし、 goto を使うことだってあるし。
ただ、「低レイヤから高レイヤまでをひとつの言語の中で扱える」というのは
「高レイヤな機能で低レイヤを隠蔽可能だ」ということであって、
低レイヤを低レイヤのままで扱うスタイルを是とするものではない。
直接的な部分ではインラインアセンブラを使うことが有っても、
その上のレイヤに持ち上げるときには必ずスマートポインタを使えってくらいの主張なら真っ当だと思う。
C++ なんてそもそもがクソなんだから、
解決のために追加された機能は積極的に使わないとやっとれんわ。
(でも好き。)
59デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/10(日) 01:03:04.42ID:WzrD1lk70 >>57
起きないです。
起きないです。
60はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9b6f-LHz9)
2018/06/10(日) 01:06:27.33ID:NuBmj+pR0 >>57
thread_local で宣言した変数は名前が同じだけでスレッドごとに違う存在だし、
それぞれのスレッドで new したならそれぞれのスレッドで配列が確保されてる。
別のスレッドの p (やそれが指す先の配列) にアクセスすれば競合が起こることは有りうるが、そうじゃないんだよね?
thread_local で宣言した変数は名前が同じだけでスレッドごとに違う存在だし、
それぞれのスレッドで new したならそれぞれのスレッドで配列が確保されてる。
別のスレッドの p (やそれが指す先の配列) にアクセスすれば競合が起こることは有りうるが、そうじゃないんだよね?
61デフォルトの名無しさん (ワッチョイ 135e-JdDl)
2018/06/10(日) 01:11:48.03ID:z8yivKF60 >>59
ありがとうございます。これが本当ならホッとします。
でも、これって規格書に明確に記述されているのか、コンパイラがそういう仕様の
アセンブラコードを吐き出しているだけなのかわかりません。
データ競合がおきたら修羅場ですw
ありがとうございます。これが本当ならホッとします。
でも、これって規格書に明確に記述されているのか、コンパイラがそういう仕様の
アセンブラコードを吐き出しているだけなのかわかりません。
データ競合がおきたら修羅場ですw
62デフォルトの名無しさん (ワッチョイ 135e-JdDl)
2018/06/10(日) 01:14:17.08ID:z8yivKF6063デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/10(日) 01:21:34.27ID:WzrD1lk70 >>61
明確です。
newで確保される領域はダイナミックストレージに属します。
これは他のスレッドと同時に読み書きを行えば競合します。
thread_localで確保されたint* pはスレッドストレージに属します。
これは複数のスレッドで別のページに属します。
従って、pに対して読み書きしている分には競合しません。
明確です。
newで確保される領域はダイナミックストレージに属します。
これは他のスレッドと同時に読み書きを行えば競合します。
thread_localで確保されたint* pはスレッドストレージに属します。
これは複数のスレッドで別のページに属します。
従って、pに対して読み書きしている分には競合しません。
64デフォルトの名無しさん (ワッチョイ d19f-NuDx)
2018/06/10(日) 01:24:48.36ID:CUftH0/Q0 >>58
> 低レイヤを低レイヤのままで扱うスタイルを是とするものではない。
そう。で、俺は、低位はDLLで切り出しても大して問題なく、
高位だけなら他言語を使った方が効率的、という見方。
> その上のレイヤに持ち上げるときには必ずスマートポインタを使えってくらいの主張なら真っ当だと思う。
ちなみにそもそも俺はスマポ自体に懐疑的で、
・スマポじゃないとやってられないのはシャローコピーを永続化させるときくらいで、
C++でこの使い方をすることはほぼない。
(部分的シャローコピーでオブジェクト毎の生存期間に差が出て、
さらにそれがデータ依存しており、プログラム側で確定させるのが面倒なとき。
(半分満たす)例:このスレのレス配列があったとして、
特定のIDのみ、ポップアップ用にシャローコピーで抜き出す場合。
ただしこの場合はポップアップ後も次のポップアップ用に全体配列を保持する為、
シャローコピーの永続化はせず、寿命管理は全体配列単位となり、スマポじゃなくても苦労しない。
というより、正直、該当ケースを思いつけない)
なんだな。
要は、オブジェクトの生存期間をコード上で静的に確定させられないときにはスマポは強力だが、
俺には該当ケースがないんだな。
というか、お前ら何に使ってるんだ?
面倒なだけなら、GC言語の方が楽だしいいと思うんだが。
> 低レイヤを低レイヤのままで扱うスタイルを是とするものではない。
そう。で、俺は、低位はDLLで切り出しても大して問題なく、
高位だけなら他言語を使った方が効率的、という見方。
> その上のレイヤに持ち上げるときには必ずスマートポインタを使えってくらいの主張なら真っ当だと思う。
ちなみにそもそも俺はスマポ自体に懐疑的で、
・スマポじゃないとやってられないのはシャローコピーを永続化させるときくらいで、
C++でこの使い方をすることはほぼない。
(部分的シャローコピーでオブジェクト毎の生存期間に差が出て、
さらにそれがデータ依存しており、プログラム側で確定させるのが面倒なとき。
(半分満たす)例:このスレのレス配列があったとして、
特定のIDのみ、ポップアップ用にシャローコピーで抜き出す場合。
ただしこの場合はポップアップ後も次のポップアップ用に全体配列を保持する為、
シャローコピーの永続化はせず、寿命管理は全体配列単位となり、スマポじゃなくても苦労しない。
というより、正直、該当ケースを思いつけない)
なんだな。
要は、オブジェクトの生存期間をコード上で静的に確定させられないときにはスマポは強力だが、
俺には該当ケースがないんだな。
というか、お前ら何に使ってるんだ?
面倒なだけなら、GC言語の方が楽だしいいと思うんだが。
65デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/10(日) 01:30:29.54ID:WzrD1lk70 で結局ユニポでいいんだよな?
66デフォルトの名無しさん (ワッチョイ f3e9-Cil2)
2018/06/10(日) 02:24:33.75ID:ojvu+L980 俺には分からない日本語をみんなが喋ってる
67デフォルトの名無しさん (ワッチョイ 1334-KXLn)
2018/06/10(日) 02:32:04.25ID:1CRpQpm20 そんな柔な理解力ではこのC++の壁に傷一つ残すことはできんわ!
68デフォルトの名無しさん (ワッチョイ 09c3-5Ttc)
2018/06/10(日) 06:46:40.00ID:k6CFzDb+069デフォルトの名無しさん (ワッチョイ 13b3-Chll)
2018/06/10(日) 08:41:18.45ID:RI4Vnlqm070はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9b6f-LHz9)
2018/06/10(日) 08:52:18.24ID:NuBmj+pR0 >>64
所有権を移転*しない*ということを表現できるのもスマートポインタの使い方のひとつだよ。
所有権を移転*しない*ということを表現できるのもスマートポインタの使い方のひとつだよ。
71デフォルトの名無しさん (ワイモマー MM33-ZWpy)
2018/06/10(日) 10:19:31.72ID:7gXDIq7mM72デフォルトの名無しさん (ワッチョイ 3139-LHz9)
2018/06/10(日) 11:21:03.09ID:E4gfPCgl0 ナマポでもpimplはできるが
毎度毎度わかりきったコードを書く
無駄な手間がちょっとイヤ
毎度毎度わかりきったコードを書く
無駄な手間がちょっとイヤ
73デフォルトの名無しさん (ワッチョイ a9f2-LHz9)
2018/06/10(日) 11:29:19.92ID:Ce6PWnpg0 pimplに限らないが、メンバーにunique_ptrを使ったときの空のデストラクタが悲しい。
74デフォルトの名無しさん (ワッチョイ 13bd-T1fc)
2018/06/10(日) 12:03:34.83ID:pLs6h5jj0 JSはES6でスゲー良くなった希ガス
もはやC++やPerlみたいな工業用言語として十分逝ける
もはやC++やPerlみたいな工業用言語として十分逝ける
75デフォルトの名無しさん (ワッチョイ a98a-Duqg)
2018/06/10(日) 12:11:11.02ID:wNo6w9bX076デフォルトの名無しさん (ワッチョイ 1312-NuDx)
2018/06/10(日) 12:43:11.84ID:ZJMDp7uo0 URLから連想出来る署名は
IQ110のJS先輩と学ぶ関数型プログラミング14日間
IQ110のJS先輩と学ぶ関数型プログラミング14日間
77デフォルトの名無しさん (ドコグロ MMb5-Chll)
2018/06/10(日) 12:48:50.28ID:TJWcZU7EM 工業用言語でperl w
78デフォルトの名無しさん (ワッチョイ 3139-LHz9)
2018/06/10(日) 13:10:58.73ID:E4gfPCgl0 何を以て「工業用」と言っているんだろう
79デフォルトの名無しさん (ブーイモ MM05-dEMp)
2018/06/10(日) 13:26:42.87ID:SJAMvsgqM >>71
生存期間がシンプルすぎるからunique_ptrが入らないっていうのは賛同できないわー。
将来デストラクタが複雑になって誰かがdeleteする経路をすっ飛ばしてreturnしてしまうかもしれんし、使えるところは使っておけばいいじゃない。
何を気にしてunique_ptrさけてるの?
生存期間がシンプルすぎるからunique_ptrが入らないっていうのは賛同できないわー。
将来デストラクタが複雑になって誰かがdeleteする経路をすっ飛ばしてreturnしてしまうかもしれんし、使えるところは使っておけばいいじゃない。
何を気にしてunique_ptrさけてるの?
80デフォルトの名無しさん (ワッチョイ d19f-NuDx)
2018/06/10(日) 13:28:20.49ID:CUftH0/Q0 >>70
それで何が嬉しいんだ?
ついでに質問しておこう。
君はCのような自前でリソース管理をしなければならない言語でリソース管理をしたことがあるか?
あと、これはC++er全般に対してだが、
shared_ptrが絶対に必要なケースってのは何だ?
unique_ptrで後述A,B以外の使い方Dがあるか?(なおCは予約語)
それで何が嬉しいんだ?
ついでに質問しておこう。
君はCのような自前でリソース管理をしなければならない言語でリソース管理をしたことがあるか?
あと、これはC++er全般に対してだが、
shared_ptrが絶対に必要なケースってのは何だ?
unique_ptrで後述A,B以外の使い方Dがあるか?(なおCは予約語)
81デフォルトの名無しさん (ワッチョイ d19f-NuDx)
2018/06/10(日) 13:29:15.80ID:CUftH0/Q0 Cでのリソース管理戦略は非常に単純で、おそらく以下の2つしかない。
A. 作成者が責任を持って破棄する。
B. 投げ捨て。基本的に所有権を渡し、末端(付近)で破棄する。
Aが基本パターンになる。
Bは例えば描画用の一時データ等の場合で、
この場合、使用するのは「描画ルーチン『だけ』」であり、それ以降は不要だと自明だから、
・「描画ルーチン」までの途中経路での使用は原則禁止
(厳密には、「描画ルーチン」呼び出し以降の使用は禁止で、
呼び出し以前は改変等を加えてもいい=この例なら、描画スケールの改変等)
・「描画ルーチン」内で必ず破棄
となる。
ただしあまり気にしないのならBも使わず、Aだけで組んでも問題ない。(というか多分そっちが主流か?)
描画の例であれば、描画終了後は普通はかなり速やかに親関数まで帰ってくるので、
親関数側でfreeするA方式でも大差ないからだ。
対して、OOP的に実装した場合、例えばゲームの敵キャラの生成/消滅を管理するとして、
この場合は「描画ルーチン」のように
「静的に明示的に生成/消滅の両方を内包する親関数」が規定出来ないので、
A方式は事実上使えず、Bで対応するしかない。だから上記を書き直せば、以下となる。
A. 「作成/使用の両方を静的に管理下に持つ親関数」を規定出来る場合、(=構造化プログラミング)
その親関数内で確保し、親関数のスコープ終了と共に破棄する。
B. 上記親関数を規定出来ず、「作成」「使用」場所が明示的な場合、(=OOP)
「作成」後は基本的に所有権を譲渡し、「使用」後に破棄する。
A. 作成者が責任を持って破棄する。
B. 投げ捨て。基本的に所有権を渡し、末端(付近)で破棄する。
Aが基本パターンになる。
Bは例えば描画用の一時データ等の場合で、
この場合、使用するのは「描画ルーチン『だけ』」であり、それ以降は不要だと自明だから、
・「描画ルーチン」までの途中経路での使用は原則禁止
(厳密には、「描画ルーチン」呼び出し以降の使用は禁止で、
呼び出し以前は改変等を加えてもいい=この例なら、描画スケールの改変等)
・「描画ルーチン」内で必ず破棄
となる。
ただしあまり気にしないのならBも使わず、Aだけで組んでも問題ない。(というか多分そっちが主流か?)
描画の例であれば、描画終了後は普通はかなり速やかに親関数まで帰ってくるので、
親関数側でfreeするA方式でも大差ないからだ。
対して、OOP的に実装した場合、例えばゲームの敵キャラの生成/消滅を管理するとして、
この場合は「描画ルーチン」のように
「静的に明示的に生成/消滅の両方を内包する親関数」が規定出来ないので、
A方式は事実上使えず、Bで対応するしかない。だから上記を書き直せば、以下となる。
A. 「作成/使用の両方を静的に管理下に持つ親関数」を規定出来る場合、(=構造化プログラミング)
その親関数内で確保し、親関数のスコープ終了と共に破棄する。
B. 上記親関数を規定出来ず、「作成」「使用」場所が明示的な場合、(=OOP)
「作成」後は基本的に所有権を譲渡し、「使用」後に破棄する。
82デフォルトの名無しさん (ワッチョイ d19f-NuDx)
2018/06/10(日) 13:29:42.93ID:CUftH0/Q0 既に言ったように、Cの戦略は多分この2つだ。というか、正確に言うと、これ以外での管理は無理だ。
そしてこれはC++では以下のようになる。
A. 自動変数上のunique_ptrに確保、関数呼び出しでは所有権の移転はしない
=生成場所のスコープ終了と共に破棄、それ以外の破棄はない
B. unique_ptrに確保し、自関数を抜ける前に『必ず』誰かに所有権を移転する
自関数が対象関数(上記例なら描画関数)であれば、移転相手がいないので破棄する
だからはっきり言えば、Cのナマポは事実上C++のunique_ptrの使い方しか出来ないし、してない。
C++erがスマポ(キリッなのは、上記C流のリソース管理を知らない=無知だからでしかない。
繰り返すが、Cは最初からunique_ptrしかないのと等しい。
ここがC->C++の連中と、C++しか知らない馬鹿との違いだ。
これに対して、shared_ptrは上記制限を解除するものだ。
だからshared_ptrを使えば新しいプログラミングパラダイムを発見出来る可能性はある。
これは何だ?
俺にはこれがイマイチ思いつかない。
いわゆる構造化プログラミングで、関数を入れ子で呼んでいく場合、必ずAは適用可能だ。
これがCが今までのさばっている理由でもある。
OOP的に組む場合はBが基本戦略となり、必ず誰かが明示的に「生成」し、
同様に、必ず誰かが明示的に「破棄」するので、これまた問題ない。
だから今のところCで間に合っているのも事実だ。
リソース管理が「面倒だ」というのは分かるとしても、
「難しい」というのは根本的に組み方を間違っているからだ。
GC言語しか知らない馬鹿共が知らないのは当たり前だとしても。
shared_ptr等が必要なプログラミングパラダイムが発見され、
それに対応する方法がなければ、お前らの望み通り、Cも死ぬしかない。何かないのか?
或いは上記A,B以外のunique_ptrの使い方Dがあるか?(なおCは予約語)
そしてこれはC++では以下のようになる。
A. 自動変数上のunique_ptrに確保、関数呼び出しでは所有権の移転はしない
=生成場所のスコープ終了と共に破棄、それ以外の破棄はない
B. unique_ptrに確保し、自関数を抜ける前に『必ず』誰かに所有権を移転する
自関数が対象関数(上記例なら描画関数)であれば、移転相手がいないので破棄する
だからはっきり言えば、Cのナマポは事実上C++のunique_ptrの使い方しか出来ないし、してない。
C++erがスマポ(キリッなのは、上記C流のリソース管理を知らない=無知だからでしかない。
繰り返すが、Cは最初からunique_ptrしかないのと等しい。
ここがC->C++の連中と、C++しか知らない馬鹿との違いだ。
これに対して、shared_ptrは上記制限を解除するものだ。
だからshared_ptrを使えば新しいプログラミングパラダイムを発見出来る可能性はある。
これは何だ?
俺にはこれがイマイチ思いつかない。
いわゆる構造化プログラミングで、関数を入れ子で呼んでいく場合、必ずAは適用可能だ。
これがCが今までのさばっている理由でもある。
OOP的に組む場合はBが基本戦略となり、必ず誰かが明示的に「生成」し、
同様に、必ず誰かが明示的に「破棄」するので、これまた問題ない。
だから今のところCで間に合っているのも事実だ。
リソース管理が「面倒だ」というのは分かるとしても、
「難しい」というのは根本的に組み方を間違っているからだ。
GC言語しか知らない馬鹿共が知らないのは当たり前だとしても。
shared_ptr等が必要なプログラミングパラダイムが発見され、
それに対応する方法がなければ、お前らの望み通り、Cも死ぬしかない。何かないのか?
或いは上記A,B以外のunique_ptrの使い方Dがあるか?(なおCは予約語)
83デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/10(日) 13:30:26.90ID:WzrD1lk70 例外安全性の確保でウッカリさんするくらいなら使った方が良い。
84デフォルトの名無しさん (ワッチョイ 3139-LHz9)
2018/06/10(日) 13:33:28.96ID:E4gfPCgl085デフォルトの名無しさん (ワッチョイ 13bd-T1fc)
2018/06/10(日) 13:34:40.25ID:pLs6h5jj086デフォルトの名無しさん (ワッチョイ d19f-NuDx)
2018/06/10(日) 13:35:21.57ID:CUftH0/Q0 >>68,79
そもそもpimpl自体が要らんだろ。
あれはC++のコンパイラが単純に仕様変更
・ヘッダにはprivate関数は書く必要がありません
すればいいだけの話で、そもそも「名前空間は開いていますが、クラスは閉じています(キリッ」を、
「ヘッダのクラスは開いていますが、実装のクラスは閉じています(キリッ」にすればいいだけ。
編集上の都合でソースが汚れるとか、全く馬鹿な話だろ。
気づけよ。
そもそもpimpl自体が要らんだろ。
あれはC++のコンパイラが単純に仕様変更
・ヘッダにはprivate関数は書く必要がありません
すればいいだけの話で、そもそも「名前空間は開いていますが、クラスは閉じています(キリッ」を、
「ヘッダのクラスは開いていますが、実装のクラスは閉じています(キリッ」にすればいいだけ。
編集上の都合でソースが汚れるとか、全く馬鹿な話だろ。
気づけよ。
87デフォルトの名無しさん (ワッチョイ 13bd-T1fc)
2018/06/10(日) 13:35:48.50ID:pLs6h5jj088a (ワッチョイ f36d-ExzQ)
2018/06/10(日) 13:37:37.76ID:fJuBgtP7089デフォルトの名無しさん (ワッチョイ 13bd-T1fc)
2018/06/10(日) 13:37:46.22ID:pLs6h5jj0 pimplに近いテクニックとしてC言語の頃から絶縁テクニックというものがあるが
それをやると大概静的解析ツールが横暴な量の警告メッセージを吐いてきやがるので却下
pimplも多分同じ結果に…
それをやると大概静的解析ツールが横暴な量の警告メッセージを吐いてきやがるので却下
pimplも多分同じ結果に…
90デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/10(日) 13:39:41.44ID:WzrD1lk70 Javascriptを使って感じるC++の有利な点は仕様の明確さだろう。
Javaは重いと言われユーザーに嫌われる言語のひとつだが、開発者はベンチマークを提示しC++の20倍速いと言う。
しかしユーザーは実際に重くて困っているだろう。
ブラウザも同じ問題を抱えていて、当然Javascriptも重いとユーザーは感じている。
Javaは重いと言われユーザーに嫌われる言語のひとつだが、開発者はベンチマークを提示しC++の20倍速いと言う。
しかしユーザーは実際に重くて困っているだろう。
ブラウザも同じ問題を抱えていて、当然Javascriptも重いとユーザーは感じている。
91デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/10(日) 13:45:01.51ID:WzrD1lk70 Microsoft社はソフトウェアの使用状況を監視させてほしいとユーザーにお願いする。
IMEの誤変換データや、プログラムのクラッシュ時の情報などだ。
これらは、開発者とユーザーの間の意識の乖離を埋める可能性がある。
ユーザーの重いと開発者の軽いのような。
オープンソースに対するアドバンテージがここにあるのかもしれない。
IMEの誤変換データや、プログラムのクラッシュ時の情報などだ。
これらは、開発者とユーザーの間の意識の乖離を埋める可能性がある。
ユーザーの重いと開発者の軽いのような。
オープンソースに対するアドバンテージがここにあるのかもしれない。
92デフォルトの名無しさん (ワッチョイ 13bd-T1fc)
2018/06/10(日) 13:45:20.24ID:pLs6h5jj0 >>90
慣れたらJQueryなど使わずとも複数プラットフォーム対応逝ける!
慣れたらJQueryなど使わずとも複数プラットフォーム対応逝ける!
93デフォルトの名無しさん (ワッチョイ 13bd-T1fc)
2018/06/10(日) 13:46:17.65ID:pLs6h5jj094デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/10(日) 13:49:25.02ID:WzrD1lk70 Visual StudioはCMakeに対応したし、Microsoft社はオープンソースとの付き合い方をやっと学んだようだ。
95デフォルトの名無しさん (ブーイモ MM05-dEMp)
2018/06/10(日) 13:54:11.99ID:SJAMvsgqM96デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/10(日) 13:54:17.23ID:WzrD1lk70 pimplを多用するライブラリの一つにQtがある。
C++はテンプレートによって拡張性を担保できる言語だ。
一方、拡張性はライブラリのユーザーにとってわかりやすさを損なう。
IDEとの結合において、pimplによる公開は一つのテクニックかもしれない。
C++はテンプレートによって拡張性を担保できる言語だ。
一方、拡張性はライブラリのユーザーにとってわかりやすさを損なう。
IDEとの結合において、pimplによる公開は一つのテクニックかもしれない。
97デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/10(日) 13:55:31.45ID:WzrD1lk70 ところでpimplってぽいんぷるって読むんだよな?
98デフォルトの名無しさん (ワッチョイ 9b7f-abwI)
2018/06/10(日) 13:59:01.60ID:mv7L/paW0 ピーいんぷるって呼んでた
99デフォルトの名無しさん (ワッチョイ d17f-LHz9)
2018/06/10(日) 14:01:14.71ID:O8pZIlTr0 RAIIは?
100デフォルトの名無しさん (ブーイモ MM05-dEMp)
2018/06/10(日) 14:03:24.78ID:SJAMvsgqM101デフォルトの名無しさん (ワッチョイ 13bd-T1fc)
2018/06/10(日) 14:25:32.87ID:pLs6h5jj0 キャッシュは不意のアクセスに備える目的のやつだから
今誰もアクセスすなくなったからといって即開放(例: キャッシュラインをinvalidate)したら意味半減くね…?
というわけで、参照カウントの使用例としては不適切くね…??
それはそうとして、
資源の開放タイミングをスマポに頼るのは負けというC言語スキー氏には概ね同意だが
プログラマーが後始末タイミングをどうしても決められないシチュは存在するからスマポは要る
GCのように、開放タイミングを決めるのが未来のプログラマーなケースがそれ
今誰もアクセスすなくなったからといって即開放(例: キャッシュラインをinvalidate)したら意味半減くね…?
というわけで、参照カウントの使用例としては不適切くね…??
それはそうとして、
資源の開放タイミングをスマポに頼るのは負けというC言語スキー氏には概ね同意だが
プログラマーが後始末タイミングをどうしても決められないシチュは存在するからスマポは要る
GCのように、開放タイミングを決めるのが未来のプログラマーなケースがそれ
102デフォルトの名無しさん (ワッチョイ d19f-NuDx)
2018/06/10(日) 14:32:47.18ID:CUftH0/Q0 >>95
いい突っ込みだ。
今の実装だと、最低限プライベートの全サイズは要るのか。
Javaとかどうしてんだろうな?
現実的な解としては、
privateフィールドについてはコンパイラが自動的にpimpl的に間接参照に切り替えだな。
どうせpimplにする気だったのなら速度的にも大差ない。
いずれにしても、今の時代、コンパイラに合わせてコードを書くのは間違いで、
人間に合わせてコンパイラが努力するのが正しい。
いい突っ込みだ。
今の実装だと、最低限プライベートの全サイズは要るのか。
Javaとかどうしてんだろうな?
現実的な解としては、
privateフィールドについてはコンパイラが自動的にpimpl的に間接参照に切り替えだな。
どうせpimplにする気だったのなら速度的にも大差ない。
いずれにしても、今の時代、コンパイラに合わせてコードを書くのは間違いで、
人間に合わせてコンパイラが努力するのが正しい。
103はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9b6f-LHz9)
2018/06/10(日) 14:34:08.96ID:NuBmj+pR0 >>80
ワイはオッサンやで。 C++98 が出来る前から C も C++ も使ってるというか、
マイコンで BASIC とアセンブラが主流だった時代の人だで。
そのときは何にも疑問に思わなかったけど、
今どきのモダンな仕組みを知ってしまったら、
昔の牧歌的なリソース管理なんて本当にしたくねぇという気持ちなんだよ。
(かといって使い慣れたパラダイムから離れるのも面倒くさい。 オッサンなので。)
>>81-82
そこで unique_ptr を使うことに疑問を持つことが意味わからんのだが。
まさにそういう風に使うためのもんだし、
その例で unique_ptr への懐疑を説明されてももう俺には何にも言えねぇ。
ワイはオッサンやで。 C++98 が出来る前から C も C++ も使ってるというか、
マイコンで BASIC とアセンブラが主流だった時代の人だで。
そのときは何にも疑問に思わなかったけど、
今どきのモダンな仕組みを知ってしまったら、
昔の牧歌的なリソース管理なんて本当にしたくねぇという気持ちなんだよ。
(かといって使い慣れたパラダイムから離れるのも面倒くさい。 オッサンなので。)
>>81-82
そこで unique_ptr を使うことに疑問を持つことが意味わからんのだが。
まさにそういう風に使うためのもんだし、
その例で unique_ptr への懐疑を説明されてももう俺には何にも言えねぇ。
104デフォルトの名無しさん (ブーイモ MM05-dEMp)
2018/06/10(日) 14:36:19.12ID:SJAMvsgqM >>101
参照されている間も消していいキャッシュなら参照カウント不要だけれども、そっちのほうが稀じゃね?
参照されている間も消していいキャッシュなら参照カウント不要だけれども、そっちのほうが稀じゃね?
105デフォルトの名無しさん (ワッチョイ d19f-NuDx)
2018/06/10(日) 14:45:42.60ID:CUftH0/Q0 >>100
> 参照カウントを自前で書けばいいからshared_ptrはいらないって言ってるわけではないよね?
そういうわけではない。
ただ、参照カウントを自前で書いても大して苦労しないのも事実だが。
> 例えばキャッシュとか。
これはいい例に見えるが、実はちょっと違う。
まず、これは「生存期間にデータ依存性がある為、上位関数からではde.lete出来ない」例ではある。
ただ、実際にキャッシュを実装すると、
1. non_sharedのキャッシュの場合、要するにLRU判定で捨てるときにそのままdeleteすれば良いだけ。
2. shared_cacheの場合、例えばCPUのキャッシュのエミュレーションを行う場合、
書き込みで他CPUのキャッシュを無効化するとか、その手の上位側の制御が必ず必要で、
shared_ptrだけでサクッと実装、ってことにはならない。
だから、Cで実装してもC++のスマポで実装しても、実は手間があまり変わらない。
それではおいしくないんだよ。
勿論、「書き込み無し」とかだと、破棄の制御をしなくていい分C++の方が楽に実装出来るが。
つまるところ、shared_ptrは、
手抜きデタラメ実装する場合は凄く便利だが、ガチで実装する場合にはあまり恩恵がないんだ。
とりあえず、キャッシュの場合はそう。
ってのが>>101の意見でもあると思うが。
> 参照カウントを自前で書けばいいからshared_ptrはいらないって言ってるわけではないよね?
そういうわけではない。
ただ、参照カウントを自前で書いても大して苦労しないのも事実だが。
> 例えばキャッシュとか。
これはいい例に見えるが、実はちょっと違う。
まず、これは「生存期間にデータ依存性がある為、上位関数からではde.lete出来ない」例ではある。
ただ、実際にキャッシュを実装すると、
1. non_sharedのキャッシュの場合、要するにLRU判定で捨てるときにそのままdeleteすれば良いだけ。
2. shared_cacheの場合、例えばCPUのキャッシュのエミュレーションを行う場合、
書き込みで他CPUのキャッシュを無効化するとか、その手の上位側の制御が必ず必要で、
shared_ptrだけでサクッと実装、ってことにはならない。
だから、Cで実装してもC++のスマポで実装しても、実は手間があまり変わらない。
それではおいしくないんだよ。
勿論、「書き込み無し」とかだと、破棄の制御をしなくていい分C++の方が楽に実装出来るが。
つまるところ、shared_ptrは、
手抜きデタラメ実装する場合は凄く便利だが、ガチで実装する場合にはあまり恩恵がないんだ。
とりあえず、キャッシュの場合はそう。
ってのが>>101の意見でもあると思うが。
106デフォルトの名無しさん (ワッチョイ 13bd-T1fc)
2018/06/10(日) 14:47:27.38ID:pLs6h5jj0107デフォルトの名無しさん (ワッチョイ d19f-NuDx)
2018/06/10(日) 14:48:15.03ID:CUftH0/Q0 >>101
スマポは未来のプログラマーが解放することを「文法的に」示す意味しかない。
例えば、mallocも同様だが、
当然ナマポが返ってきて、それを解放するのは未来のプログラマー責任になっている。
要するに「そういう使い方」を規定すれば済むだけなんだよ。
スマポは未来のプログラマーが解放することを「文法的に」示す意味しかない。
例えば、mallocも同様だが、
当然ナマポが返ってきて、それを解放するのは未来のプログラマー責任になっている。
要するに「そういう使い方」を規定すれば済むだけなんだよ。
108デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/10(日) 14:56:39.55ID:WzrD1lk70 unique_ptrが必要ないというのは、C++を使ったことがないってことだから、C++を使ってる人に対して、unique_ptrを使うべきでないと意見しても意味がない。
必要だから使ってるんだし。
必要だから使ってるんだし。
109デフォルトの名無しさん (ワッチョイ d19f-NuDx)
2018/06/10(日) 15:01:32.09ID:CUftH0/Q0 >>103
俺はunique_ptrは「C的リソース管理を文法的に示す」意味しかないと見てる。
反対する意味もないが、積極的に使う意味もない。
元々そうとしか組めないし、既にコードはそうなってるから。
だからunique_ptrに書き換えろってのは、相当にウザイ。
他言語だとforeachをforに書き換えろとか、あれと同じじゃないかな。
たぶんLinusもこれなんだよ。
C++の奴は新しい文法でやることに意義を感じているようだが、
それによってソースコードの構造が改善されるかというと、全くそうじゃない。
むしろ、おかしくなることの方が多いわけでね。pimplとかもそうでしょ。
> 昔の牧歌的なリソース管理なんて本当にしたくねぇという気持ちなんだよ。
これがよく分からん。
というか俺はリソース管理したくないから当然のごとくGC言語を使っているわけで、
そこまでしてC++に拘る理由が分からん。
スマポ使えというなら、うるせえGC言語使え、と返したい。
俺はunique_ptrは「C的リソース管理を文法的に示す」意味しかないと見てる。
反対する意味もないが、積極的に使う意味もない。
元々そうとしか組めないし、既にコードはそうなってるから。
だからunique_ptrに書き換えろってのは、相当にウザイ。
他言語だとforeachをforに書き換えろとか、あれと同じじゃないかな。
たぶんLinusもこれなんだよ。
C++の奴は新しい文法でやることに意義を感じているようだが、
それによってソースコードの構造が改善されるかというと、全くそうじゃない。
むしろ、おかしくなることの方が多いわけでね。pimplとかもそうでしょ。
> 昔の牧歌的なリソース管理なんて本当にしたくねぇという気持ちなんだよ。
これがよく分からん。
というか俺はリソース管理したくないから当然のごとくGC言語を使っているわけで、
そこまでしてC++に拘る理由が分からん。
スマポ使えというなら、うるせえGC言語使え、と返したい。
110デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/10(日) 15:08:27.48ID:WzrD1lk70 Cより開発効率が高く、Javaよりユーザーにベネフィットを提供できる。
そういった観点から、広く使われるソフトウェアの開発にC++を採用するのは理にかなっている。
JavaにしろC#にしろ、GUIライブラリがころころ変わるのは、エンドユーザーが受け入れないからだろう。
そう、馬鹿なユーザーはJavaやC#の利点を気にかけないのだ、自分のことしか考えない利己主義め!
なぜ重いソフトウェアを使うべきなのか、ユーザーをキチンと教育する必要がある。
あるいはC++を選ぶ。
そういった観点から、広く使われるソフトウェアの開発にC++を採用するのは理にかなっている。
JavaにしろC#にしろ、GUIライブラリがころころ変わるのは、エンドユーザーが受け入れないからだろう。
そう、馬鹿なユーザーはJavaやC#の利点を気にかけないのだ、自分のことしか考えない利己主義め!
なぜ重いソフトウェアを使うべきなのか、ユーザーをキチンと教育する必要がある。
あるいはC++を選ぶ。
111デフォルトの名無しさん (ワッチョイ 13bd-T1fc)
2018/06/10(日) 15:19:42.39ID:pLs6h5jj0 >>107
>スマポは未来のプログラマーが解放することを「文法的に」示す意味しかない。
スマポでできて、free()ではできないことがあるからその言い分は違うくね?
いやまあ>>101でGCとしか言わなかったのは言葉足らずだったので今条件を追加するが、
こちらが実装上の都合で用意するオブジェクトの数と、未来のプログラマーに対して見せかけるオブジェクトの数が相違するケースでは
どうしてもスマポ的な手段に訴える(オブジェクト自身に開放タイミングを決めさせる)必要があるんじゃー!
例えば画像データみたいに巨大故に必要無い限りコピーしたくないんだけどそんな事情をライブラリ利用者から隠蔽したいケース
あるいは、やっぱGC自体が行う本来のガベージコレクション業務タイミングを決める方法とか、
(GCがシステムに1個しか無いのに対して、ユーザーは潜在的に多数でありGCの存在を関知せずに使ってくれる
一方、「必ずfree()せよ」という仕様には、malloc()したヒープ1個の開放以上の意味を持たせられない
>スマポは未来のプログラマーが解放することを「文法的に」示す意味しかない。
スマポでできて、free()ではできないことがあるからその言い分は違うくね?
いやまあ>>101でGCとしか言わなかったのは言葉足らずだったので今条件を追加するが、
こちらが実装上の都合で用意するオブジェクトの数と、未来のプログラマーに対して見せかけるオブジェクトの数が相違するケースでは
どうしてもスマポ的な手段に訴える(オブジェクト自身に開放タイミングを決めさせる)必要があるんじゃー!
例えば画像データみたいに巨大故に必要無い限りコピーしたくないんだけどそんな事情をライブラリ利用者から隠蔽したいケース
あるいは、やっぱGC自体が行う本来のガベージコレクション業務タイミングを決める方法とか、
(GCがシステムに1個しか無いのに対して、ユーザーは潜在的に多数でありGCの存在を関知せずに使ってくれる
一方、「必ずfree()せよ」という仕様には、malloc()したヒープ1個の開放以上の意味を持たせられない
112デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/10(日) 15:24:27.83ID:WzrD1lk70 std::unique_ptrを使用したくない局面では、テンプレート仮引数Allocatorを用意するべきである。
つまり、ほとんどの場合、std::unique_ptrが有用である。
つまり、ほとんどの場合、std::unique_ptrが有用である。
113デフォルトの名無しさん (ワッチョイ d19f-NuDx)
2018/06/10(日) 15:28:05.51ID:CUftH0/Q0 >>111
> 例えば画像データみたいに巨大故に必要無い限りコピーしたくないんだけどそんな事情をライブラリ利用者から隠蔽したいケース
なるほど理解した。
ここでshared_ptrを渡して多数に見せかけ、実は中身は一つ、という話か。
となると、当然インミュータブルでないと話にならないわけだが、
逆に言えば、今時のインミュータブルな世界にはshared_ptrが大活躍する余地があるのか?
すぐにはピンと来ないが。
> 例えば画像データみたいに巨大故に必要無い限りコピーしたくないんだけどそんな事情をライブラリ利用者から隠蔽したいケース
なるほど理解した。
ここでshared_ptrを渡して多数に見せかけ、実は中身は一つ、という話か。
となると、当然インミュータブルでないと話にならないわけだが、
逆に言えば、今時のインミュータブルな世界にはshared_ptrが大活躍する余地があるのか?
すぐにはピンと来ないが。
114デフォルトの名無しさん (ワッチョイ 13bd-T1fc)
2018/06/10(日) 15:33:13.30ID:pLs6h5jj0 >>113
△: 当然インミュータブルでないと話にならないわけだが、
○: 当然インミュータブルなインターフェースでないと話にならないわけだが、
実装は別にミュータブルでもクラスで覆うならやりようはいくらでもあるんじゃ…
画像の書き換えを専用メソッドでやるか、あるいは速度優先でcheckout/checkin式にcheckout中だけ直接アクセスを許すとか、
(もちろんcheckout時にコピーを行う
で、内部ではshared_ptr(的な、「オブジェクト自身に開放タイミングを決めさせる」)ロジックが大活躍!!111!!!!1!
△: 当然インミュータブルでないと話にならないわけだが、
○: 当然インミュータブルなインターフェースでないと話にならないわけだが、
実装は別にミュータブルでもクラスで覆うならやりようはいくらでもあるんじゃ…
画像の書き換えを専用メソッドでやるか、あるいは速度優先でcheckout/checkin式にcheckout中だけ直接アクセスを許すとか、
(もちろんcheckout時にコピーを行う
で、内部ではshared_ptr(的な、「オブジェクト自身に開放タイミングを決めさせる」)ロジックが大活躍!!111!!!!1!
115デフォルトの名無しさん (ワッチョイ d19f-NuDx)
2018/06/10(日) 15:33:15.61ID:CUftH0/Q0116デフォルトの名無しさん (ワッチョイ 13bd-T1fc)
2018/06/10(日) 15:35:49.57ID:pLs6h5jj0 訂正;
×: あるいは速度優先でcheckout/checkin式にcheckout中だけ直接アクセスを許すとか、
○: あるいは書き換え速度優先でcheckout/checkin式にcheckout中だけ画像への直接アクセスによる書き換えを許すとか、
×: あるいは速度優先でcheckout/checkin式にcheckout中だけ直接アクセスを許すとか、
○: あるいは書き換え速度優先でcheckout/checkin式にcheckout中だけ画像への直接アクセスによる書き換えを許すとか、
117デフォルトの名無しさん (ワッチョイ 1334-KXLn)
2018/06/10(日) 15:36:25.37ID:1CRpQpm20 C++を解った気になった奴らがアンチパターンを量産する
118デフォルトの名無しさん (ワッチョイ d19f-NuDx)
2018/06/10(日) 16:02:15.14ID:CUftH0/Q0 >>114,116
まあ分かった。
多分shared_ptrは『ほぼ』インミュータブルな世界とは相性がいい。
(ミュータブルにする必要がほぼなく、その場合は明示的に別メソッドを呼んでもいい場合)
つっても適用事例はWebサーバーくらいしか思いつかない。
ある画像が人気でユーザーが一斉にダウンロードしたとして、
鯖内部に30秒間だけキャッシュする場合とか。
ナマポで渡した場合、各ユーザーのダウンロード完了でカウントを減らし、0になるまで破棄出来ない。
shared_ptrで渡した場合、30秒の期限が過ぎればキャッシュから破棄しても問題ない。
この辺は確かに楽に組めるようになる。
まあ分かった。
多分shared_ptrは『ほぼ』インミュータブルな世界とは相性がいい。
(ミュータブルにする必要がほぼなく、その場合は明示的に別メソッドを呼んでもいい場合)
つっても適用事例はWebサーバーくらいしか思いつかない。
ある画像が人気でユーザーが一斉にダウンロードしたとして、
鯖内部に30秒間だけキャッシュする場合とか。
ナマポで渡した場合、各ユーザーのダウンロード完了でカウントを減らし、0になるまで破棄出来ない。
shared_ptrで渡した場合、30秒の期限が過ぎればキャッシュから破棄しても問題ない。
この辺は確かに楽に組めるようになる。
119デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/10(日) 16:07:24.50ID:WzrD1lk70120デフォルトの名無しさん (ワッチョイ 13bd-T1fc)
2018/06/10(日) 16:15:05.15ID:pLs6h5jj0 いやすまんインミュータブルなインターフェースといいつつ>>114では画像を書き換えるインターフェースの話をしてしまったスマンorz
「画像の書き換えを専用メソッドでやる」は、「加工後の画像を専用メソッドで生成する」、と読み替えてホスイ
で、ライブラリが画像Aを生成し、その画像がライブラリのユーザーによって不特定多数のクライアントとのセッションスレッドに渡されるシチュを考える
セッションスレッドの具体的な数は事前にはわからない。(接続してくるクライアント次第
また、何らかのタイミングでクライアントに提示すべき画像Aは、別の画像A'に差し変わる。
ライブラリのユーザーとしてはスレッド間の排他制御に関して面倒な問題を抱え込むのは嫌なので、
メインスレッド(セッションスレッドを起こす)から、画像Aのコピーを、所有権を譲渡する形でセッションスレッドに渡す、という使い方をする。・・・(1)
ライブラリ内部では、(1)の使い方をされるときにいちいち画像Aをコピーしたりしない。
画像Aの開放は、画像AがA'に差し変わるタイミングで行いたい。
ただし、画像Aを使っているセッションスレッドが居る間は開放するわけにはいかない。
しかし、当該スレッドがセッションを終えるのを待っていたら、新規につないで来るクライアントへの画像A'の提示が遅れる
→画像Aの開放タイミングはスマポで解決!
「画像の書き換えを専用メソッドでやる」は、「加工後の画像を専用メソッドで生成する」、と読み替えてホスイ
で、ライブラリが画像Aを生成し、その画像がライブラリのユーザーによって不特定多数のクライアントとのセッションスレッドに渡されるシチュを考える
セッションスレッドの具体的な数は事前にはわからない。(接続してくるクライアント次第
また、何らかのタイミングでクライアントに提示すべき画像Aは、別の画像A'に差し変わる。
ライブラリのユーザーとしてはスレッド間の排他制御に関して面倒な問題を抱え込むのは嫌なので、
メインスレッド(セッションスレッドを起こす)から、画像Aのコピーを、所有権を譲渡する形でセッションスレッドに渡す、という使い方をする。・・・(1)
ライブラリ内部では、(1)の使い方をされるときにいちいち画像Aをコピーしたりしない。
画像Aの開放は、画像AがA'に差し変わるタイミングで行いたい。
ただし、画像Aを使っているセッションスレッドが居る間は開放するわけにはいかない。
しかし、当該スレッドがセッションを終えるのを待っていたら、新規につないで来るクライアントへの画像A'の提示が遅れる
→画像Aの開放タイミングはスマポで解決!
121デフォルトの名無しさん (ワッチョイ 13bd-T1fc)
2018/06/10(日) 16:27:25.23ID:pLs6h5jj0 >>118
ちょっまだキャッシュ言いますかキャッシュと参照カウントは原理上無関係なので(>>106)忘れてよろしいかと、
(参照カウンタが0より大きいからキャッシュ上のデータを消してはいけないという法は無いし、
参照カウンタが0になったからといってキャッシュ上のデータを消さなければいけないという法も無い
Webサーバというのは適用事例として好適だがダウンロード中かダウンロード完了か、という区分でしか考えないのはイクナイ
ダウンロード中にも新規のクライアントがつないでくるかもしれない
そのときダウンロード完了時に画像を破棄すればいいやという単色の思考だと、新規のクライアントが繋いで来つづける限り
画像を永久に開放できないことになり、そればかりか>>120のように、画像をAからA'に差し替えることもできない
これは画像Aの開放を、画像Aのオブジェクト自身に面倒をみさせるしかない(自身を参照するセッションスレッドが0になったとき開放させる
サーバはそれとは並行して画像A'を新規のセッションスレッドに展開できる。
こんな芸当ができるのはスマポだけ!
ちょっまだキャッシュ言いますかキャッシュと参照カウントは原理上無関係なので(>>106)忘れてよろしいかと、
(参照カウンタが0より大きいからキャッシュ上のデータを消してはいけないという法は無いし、
参照カウンタが0になったからといってキャッシュ上のデータを消さなければいけないという法も無い
Webサーバというのは適用事例として好適だがダウンロード中かダウンロード完了か、という区分でしか考えないのはイクナイ
ダウンロード中にも新規のクライアントがつないでくるかもしれない
そのときダウンロード完了時に画像を破棄すればいいやという単色の思考だと、新規のクライアントが繋いで来つづける限り
画像を永久に開放できないことになり、そればかりか>>120のように、画像をAからA'に差し替えることもできない
これは画像Aの開放を、画像Aのオブジェクト自身に面倒をみさせるしかない(自身を参照するセッションスレッドが0になったとき開放させる
サーバはそれとは並行して画像A'を新規のセッションスレッドに展開できる。
こんな芸当ができるのはスマポだけ!
122デフォルトの名無しさん (ワッチョイ d19f-NuDx)
2018/06/10(日) 17:11:42.47ID:CUftH0/Q0 >>121
言いたいことは分かるが、
> 画像をAからA'に差し替えることもできない
これはない。
この場合はどのみちキャッシュを別実装するしかなく、
・キャッシュ内に画像Aへの参照が残っているか
・画像Aを掴んでいるセッションが存在しているか
が別問題になり、
画像の差し替えはキャッシュ内の画像Aを無効化することにより行われる。
だから、普通に差し替えは出来る。このとき、
それ以前のセッションは画像Aのまま、それ以降の新規セッションは画像A'になる。
ただまあ、これは本筋ではないし、内容見る限りそちらも分かっているようだからもういい。
多分、shared_ptrの使いどころは、
1. インミュータブルなインタフェースで、
2. 不特定多数がランダムに掴みに来て、
3. 解放タイミングがユーザー依存で読めない場合
なのだろう。アプリはWeb鯖はそうだが、それ以外に何があるかだな。
1,3はさておき、2がね。
少数しか来ないのならunique_ptrでいいし、
演算等CPUジョブなら結局は順に処理するだけなのでこちらもunique_ptrでいい。
I/O等の他要因で引っかかってスレッドが参照を掴んだまま待機させられることが必要になる。
ファイルサーバーも近いが、こちらの場合はロック機構が必要な為、
「どのファイルが今何人にどういった権限で捕まれているか」の管理が必要であり、該当しない。
(shared_ptrを使っても大して楽にはならない)
言いたいことは分かるが、
> 画像をAからA'に差し替えることもできない
これはない。
この場合はどのみちキャッシュを別実装するしかなく、
・キャッシュ内に画像Aへの参照が残っているか
・画像Aを掴んでいるセッションが存在しているか
が別問題になり、
画像の差し替えはキャッシュ内の画像Aを無効化することにより行われる。
だから、普通に差し替えは出来る。このとき、
それ以前のセッションは画像Aのまま、それ以降の新規セッションは画像A'になる。
ただまあ、これは本筋ではないし、内容見る限りそちらも分かっているようだからもういい。
多分、shared_ptrの使いどころは、
1. インミュータブルなインタフェースで、
2. 不特定多数がランダムに掴みに来て、
3. 解放タイミングがユーザー依存で読めない場合
なのだろう。アプリはWeb鯖はそうだが、それ以外に何があるかだな。
1,3はさておき、2がね。
少数しか来ないのならunique_ptrでいいし、
演算等CPUジョブなら結局は順に処理するだけなのでこちらもunique_ptrでいい。
I/O等の他要因で引っかかってスレッドが参照を掴んだまま待機させられることが必要になる。
ファイルサーバーも近いが、こちらの場合はロック機構が必要な為、
「どのファイルが今何人にどういった権限で捕まれているか」の管理が必要であり、該当しない。
(shared_ptrを使っても大して楽にはならない)
123デフォルトの名無しさん (ワッチョイ d19f-NuDx)
2018/06/10(日) 17:28:14.89ID:CUftH0/Q0 一応簡単に俺の主張を纏めておくと、
・unique_ptrは従来C方式を文法的に強制させるだけで、コードの改善には繋がらない。
・shared_ptrの使いどころはWebサーバーしか思いつかない。
GC言語は基本的にshared_ptrなわけだが、あれって基本的に手抜き専用で、
GCがないと本質的に辛いって構造はあんまりない。
Rustも今更GC無しですかー、とも思うが、実際、無しなら無しでもいいか、程度ではある。
・unique_ptrは従来C方式を文法的に強制させるだけで、コードの改善には繋がらない。
・shared_ptrの使いどころはWebサーバーしか思いつかない。
GC言語は基本的にshared_ptrなわけだが、あれって基本的に手抜き専用で、
GCがないと本質的に辛いって構造はあんまりない。
Rustも今更GC無しですかー、とも思うが、実際、無しなら無しでもいいか、程度ではある。
125はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9b6f-LHz9)
2018/06/10(日) 17:56:24.27ID:NuBmj+pR0126デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/10(日) 18:04:27.80ID:WzrD1lk70 std::enable_ifを使いこなそう。
127デフォルトの名無しさん (ワッチョイ 3139-LHz9)
2018/06/10(日) 18:04:47.47ID:E4gfPCgl0128デフォルトの名無しさん (ワッチョイ 09c3-5Ttc)
2018/06/10(日) 18:05:45.54ID:k6CFzDb+0 「バカよけ」機能に価値はない、無駄だから使わないしコードが長くなるから使わせない
っていう老害いるよね
そういう奴に限ってバグや脆弱性作り込むんだけど決して反省しない
っていう老害いるよね
そういう奴に限ってバグや脆弱性作り込むんだけど決して反省しない
129デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/10(日) 18:06:37.55ID:WzrD1lk70 std::unique_ptrを導入すると人事部から一人削減できるってことじゃないか。
130デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/10(日) 18:09:53.52ID:WzrD1lk70 まともな知的生命体なら迷わずユニポを使うだろう。
131デフォルトの名無しさん (ワッチョイ 3139-LHz9)
2018/06/10(日) 18:21:28.47ID:E4gfPCgl0 >>128
まあ俺も老害とか言われることのある世代だが
価値がないのは「バカよけ」ではなく「バカ用」な
バカなふりをする達人をニヤリとさせるのではなく、
どうしようもない真性バカを延命する機能は有害なだけ
まあ俺も老害とか言われることのある世代だが
価値がないのは「バカよけ」ではなく「バカ用」な
バカなふりをする達人をニヤリとさせるのではなく、
どうしようもない真性バカを延命する機能は有害なだけ
132デフォルトの名無しさん (ブーイモ MM33-dEMp)
2018/06/10(日) 19:04:58.32ID:mER6VS6hM >>127
期待するも何も、スタック巻き戻したらどうしてヒープ開放されると思ったのさ?
期待するも何も、スタック巻き戻したらどうしてヒープ開放されると思ったのさ?
133デフォルトの名無しさん (ワッチョイ 3139-LHz9)
2018/06/10(日) 19:11:21.01ID:E4gfPCgl0134デフォルトの名無しさん (ワッチョイ d19f-NuDx)
2018/06/10(日) 19:42:24.37ID:CUftH0/Q0 混乱を避ける為に先に質問しておきたいんだが、
上記A(82)の場合、つまり、
親関数から子関数にポインタを渡したいが、所有権を移動しない場合には、どう書くんだ?
ざっと探しても出てこないんだが。
引数に値渡ししたらムーブ、これは分かる。
ムーブしたくないが子関数に渡したい場合は?
上記A(82)の場合、つまり、
親関数から子関数にポインタを渡したいが、所有権を移動しない場合には、どう書くんだ?
ざっと探しても出てこないんだが。
引数に値渡ししたらムーブ、これは分かる。
ムーブしたくないが子関数に渡したい場合は?
135デフォルトの名無しさん (ワッチョイ d19f-NuDx)
2018/06/10(日) 19:43:15.79ID:CUftH0/Q0136デフォルトの名無しさん (ワッチョイ d19f-NuDx)
2018/06/10(日) 19:45:27.08ID:CUftH0/Q0 >>124
それはありだ。
ただし、俺は「循環参照の場合に回収出来ないGC」であってもいいと思っている。
循環参照が必要なケースはほぼ無いので、明示的に切ってから解放でいい。
これはweak_ptrと同じで、C++erなら同意してもらえると思う。
ついでにいうと、「コンパクションが出来ないGC」でもいい。
これなら**ptrにする必要なく、*ptrで行けるから速度低下も起きない。
つまり、仕様はC++どおりでいいが、
プログラマにやらせるな、自動でやれ、ということ。俺的には。
それはありだ。
ただし、俺は「循環参照の場合に回収出来ないGC」であってもいいと思っている。
循環参照が必要なケースはほぼ無いので、明示的に切ってから解放でいい。
これはweak_ptrと同じで、C++erなら同意してもらえると思う。
ついでにいうと、「コンパクションが出来ないGC」でもいい。
これなら**ptrにする必要なく、*ptrで行けるから速度低下も起きない。
つまり、仕様はC++どおりでいいが、
プログラマにやらせるな、自動でやれ、ということ。俺的には。
137デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/10(日) 20:15:37.49ID:lEW5NtSH0138デフォルトの名無しさん (ワッチョイ d19f-NuDx)
2018/06/10(日) 20:21:31.52ID:CUftH0/Q0 >>137
まあそのネタはさておき、マジで探しているのだが出てこない。
知ってたら教えてくれよ。
これ、もしかしてget()してナマポ渡すしかないとかいうオチ?
ならunique_ptrなんてマジでゴミだぞ。
さすがにそれはないと信じて探しているのだが、マジで出てこない。
まあそのネタはさておき、マジで探しているのだが出てこない。
知ってたら教えてくれよ。
これ、もしかしてget()してナマポ渡すしかないとかいうオチ?
ならunique_ptrなんてマジでゴミだぞ。
さすがにそれはないと信じて探しているのだが、マジで出てこない。
139デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/10(日) 20:22:18.03ID:lEW5NtSH0140デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/10(日) 20:23:52.60ID:lEW5NtSH0 std::unique_ptrに対するweak_ptrは無いぞ。
だからゴミだという場合は、>>137。
だからゴミだという場合は、>>137。
141デフォルトの名無しさん (ワッチョイ d19f-NuDx)
2018/06/10(日) 20:24:48.73ID:CUftH0/Q0142デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/10(日) 20:28:59.72ID:lEW5NtSH0143デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/10(日) 20:31:55.61ID:lEW5NtSH0 std::unique_ptrを利用する主な動機は総称型を保持するためなんだよな。
144デフォルトの名無しさん (ワッチョイ d19f-NuDx)
2018/06/10(日) 20:33:45.13ID:CUftH0/Q0145デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/10(日) 20:37:44.47ID:lEW5NtSH0 >>144
lvalue_referenceだから仮引数側でどうにでもできるだろ。
lvalue_referenceだから仮引数側でどうにでもできるだろ。
146デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/10(日) 20:49:11.93ID:lEW5NtSH0147デフォルトの名無しさん (ワッチョイ 09c3-5Ttc)
2018/06/10(日) 21:01:59.63ID:k6CFzDb+0 参照だけするスマポ(と言いつつ何もしないアホの子スマポ)は次の規格で検討されてたでしょ
observer_ptrだかexempt_ptrだか名前コロコロ変わってるけど
observer_ptrだかexempt_ptrだか名前コロコロ変わってるけど
148デフォルトの名無しさん (ワッチョイ d19f-NuDx)
2018/06/10(日) 21:22:56.11ID:CUftH0/Q0 >>146
だから違うっての
>>147
多分俺が欲しいのはそれだ。
https://en.cppreference.com/w/cpp/experimental/observer_ptr
要するに、「ナマポだがdelete出来ない物」が欲しい。
unique_ptrは値渡しすると所有権が移動してしまう。
関数にはポインタの場合値渡しが最速だし、自明だから、グダグダ書いて最適化を待つ、とかやりたくない。
生成は常にunique_ptrからの値コピー(所有権は移動しない)でいい。
寿命管理は他に任せるが、ナマポと完全に同パフォーマンスの物、これが欲しい。
まあ、検討中ならよかった。
だから違うっての
>>147
多分俺が欲しいのはそれだ。
https://en.cppreference.com/w/cpp/experimental/observer_ptr
要するに、「ナマポだがdelete出来ない物」が欲しい。
unique_ptrは値渡しすると所有権が移動してしまう。
関数にはポインタの場合値渡しが最速だし、自明だから、グダグダ書いて最適化を待つ、とかやりたくない。
生成は常にunique_ptrからの値コピー(所有権は移動しない)でいい。
寿命管理は他に任せるが、ナマポと完全に同パフォーマンスの物、これが欲しい。
まあ、検討中ならよかった。
149デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/10(日) 22:03:51.04ID:lEW5NtSH0 deleteされたくないポインタと言えばこうだろ。
https://ideone.com/PvzDVY
https://ideone.com/PvzDVY
150デフォルトの名無しさん (ワッチョイ d19f-NuDx)
2018/06/10(日) 22:50:21.29ID:CUftH0/Q0 >>125
> 漠然としてたものに区別を与えてくれる最高の機能じゃんね。
俺の理解が正しければ、これはダウト。表現力が足りない。
今のunique_ptrはB用のインタフェースしか持っておらず、Aを最速では記述出来ない。
足りてないのは、既に言ったとおり、「ナマポと同速だがdelete出来ないスマポ」。
だからやっぱイマイチなんだな。
とはいえ確実に拡充されてるから、最終的にどうなるかは見物だが。
高位機能も最終的には追いつくだろうし。
ただ、C++はプログラマの努力で何とかしようとしているが、
そもそもAにしてもBにしてもコールグラフの解析でfree忘れとか抜けるはずなんだよね。
Cの連中はこの辺には興味ないみたいだけど、
人手でやってる分、スマポみたいにコーナーぎりぎりを攻められないから、
ある程度わかりやすいところでfreeされてる。
当然、ツールにもかかり易いはずで。
> 漠然としてたものに区別を与えてくれる最高の機能じゃんね。
俺の理解が正しければ、これはダウト。表現力が足りない。
今のunique_ptrはB用のインタフェースしか持っておらず、Aを最速では記述出来ない。
足りてないのは、既に言ったとおり、「ナマポと同速だがdelete出来ないスマポ」。
だからやっぱイマイチなんだな。
とはいえ確実に拡充されてるから、最終的にどうなるかは見物だが。
高位機能も最終的には追いつくだろうし。
ただ、C++はプログラマの努力で何とかしようとしているが、
そもそもAにしてもBにしてもコールグラフの解析でfree忘れとか抜けるはずなんだよね。
Cの連中はこの辺には興味ないみたいだけど、
人手でやってる分、スマポみたいにコーナーぎりぎりを攻められないから、
ある程度わかりやすいところでfreeされてる。
当然、ツールにもかかり易いはずで。
151デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/10(日) 23:09:19.21ID:lEW5NtSH0 それ参照でいいだろ。
言ってる意味が全く分からない。
言ってる意味が全く分からない。
152デフォルトの名無しさん (ワッチョイ b1a9-uWQQ)
2018/06/10(日) 23:41:15.51ID:IWNTecyr0 私もはやく皆さんとお話したいのですが、内容が全くわかりません。
C++でRPG作れる程度の知識なのですが、何から学べば良いでしょうか。
おすすめの本、サイトがあれば教えてくださいが
C++でRPG作れる程度の知識なのですが、何から学べば良いでしょうか。
おすすめの本、サイトがあれば教えてくださいが
154デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/10(日) 23:47:37.76ID:lEW5NtSH0 そりゃC++使ってる人が読んだって全く分からないだろうな。
155デフォルトの名無しさん (ワッチョイ 13bd-T1fc)
2018/06/11(月) 07:09:55.61ID:ekbt9EBF0 >>122
>1. インミュータブルなインタフェースで、
>2. 不特定多数がランダムに掴みに来て、
>3. 解放タイミングがユーザー依存で読めない場合
ちゃうねんそれでは表層的な観察にすぎなず、
shared_ptr(的な、「オブジェクト自身に開放タイミングを決めさせる」(>>114))処理の必要性の1断面でしかないねん
>>121-122が言っているのは、
>こちらが実装上の都合で用意するオブジェクトの数と、未来のプログラマーに対して見せかけるオブジェクトの数が相違するケース(>>111)
において、未来のプログラマー(ユーザー)がオブジェクトをコピーしたつもりだが実装の内部ではコピーしていなくって、
ユーザー視点では自身のプログラムが保持する独立した1オブジェクトを開放したつもりが、実は内部の実装の都合において、
ユーザーまたはユーザー2のプログラムが保持する別のオブジェクトの開放と関係を持ってしまうケース(∵実体が同一)において
shared_ptr的な、「オブジェクト自身に開放タイミングを決めさせる」(>>114))処理が必要ということなんじゃー
>1. インミュータブルなインタフェースで、
>2. 不特定多数がランダムに掴みに来て、
>3. 解放タイミングがユーザー依存で読めない場合
ちゃうねんそれでは表層的な観察にすぎなず、
shared_ptr(的な、「オブジェクト自身に開放タイミングを決めさせる」(>>114))処理の必要性の1断面でしかないねん
>>121-122が言っているのは、
>こちらが実装上の都合で用意するオブジェクトの数と、未来のプログラマーに対して見せかけるオブジェクトの数が相違するケース(>>111)
において、未来のプログラマー(ユーザー)がオブジェクトをコピーしたつもりだが実装の内部ではコピーしていなくって、
ユーザー視点では自身のプログラムが保持する独立した1オブジェクトを開放したつもりが、実は内部の実装の都合において、
ユーザーまたはユーザー2のプログラムが保持する別のオブジェクトの開放と関係を持ってしまうケース(∵実体が同一)において
shared_ptr的な、「オブジェクト自身に開放タイミングを決めさせる」(>>114))処理が必要ということなんじゃー
156デフォルトの名無しさん (ワッチョイ 13bd-T1fc)
2018/06/11(月) 07:23:54.00ID:ekbt9EBF0 .>>122
>画像の差し替えはキャッシュ内の画像Aを無効化することにより行われる。
これは>>121のケースでは問題の解決にならない。
なぜなら、仮にキャッシュ上に画像Aを用意してあり、最後まで画像Aを掴むことになったセッションXに対して
セッション開始時にメインスレッドが渡したのがキャッシュ上の画像Aだったとしても、
渡した瞬間にセッションとキャッシュの関係は切れるからじゃわ!(半切れ
>>121は、セッションXは自身のローカル記憶(のつもり)であるところのオンメモリの画像Aを使い、
セッション終了時に開放する、ということしか言っておらず、
セッション中に2回3回とキャッシュ上の画像Aを取りにいくとは書いては
いない
キャッシュとセッションXの関係がセッション開始時の一瞬でしかない想定な以上、
画像Aの実体の開放に関してキャッシュの無効化機構をどう別実装しても無駄。問題に影響無し。
>画像の差し替えはキャッシュ内の画像Aを無効化することにより行われる。
これは>>121のケースでは問題の解決にならない。
なぜなら、仮にキャッシュ上に画像Aを用意してあり、最後まで画像Aを掴むことになったセッションXに対して
セッション開始時にメインスレッドが渡したのがキャッシュ上の画像Aだったとしても、
渡した瞬間にセッションとキャッシュの関係は切れるからじゃわ!(半切れ
>>121は、セッションXは自身のローカル記憶(のつもり)であるところのオンメモリの画像Aを使い、
セッション終了時に開放する、ということしか言っておらず、
セッション中に2回3回とキャッシュ上の画像Aを取りにいくとは書いては
いない
キャッシュとセッションXの関係がセッション開始時の一瞬でしかない想定な以上、
画像Aの実体の開放に関してキャッシュの無効化機構をどう別実装しても無駄。問題に影響無し。
157デフォルトの名無しさん (ワッチョイ 13bd-T1fc)
2018/06/11(月) 07:43:46.07ID:ekbt9EBF0158デフォルトの名無しさん (ワッチョイ d19f-NuDx)
2018/06/11(月) 22:46:31.97ID:aD4/YLZg0 >>155-157
まず、俺の意図が正確に君に伝わっていることは分かった。
が、Webサーバーなんてそんなもんだろ。(…α)
画像『ファイル』Aを鯖からダウンロードしている最中に、鯖上で画像『ファイル』がA'に変更されたとしても、
ユーザーは画像Aをダウンロードし続ける。
それどころか、鯖は更新された画像A'に即座に対応することすら期待されていない。
2-3分の遅延なら許容されている。
この仕様においては鯖上のオンメモリキャッシュとファイルの同期は厳密にとる必要はなく、
俺の示した実装の通りであり、それは君にも正しく伝わっている。
この場合はshared_ptrでの実装の方が楽だ。(ただし厳密には問題があるが)
一方、ファイルサーバーはそうではない。(…β)
Webサーバほどの多人数が同じファイルを同時に掴みに来ることはほぼ無いが、
「どのファイルが今誰にどういった権限で捕まれているか」を完全把握しなければならず、
ファイルの更新、ファイルロックのリリースも即座に対応することが期待されている。
許容されるのは精々数秒でしかない。
この場合は上位の制御が必ず必要になり、shared_ptrが有ったところで大して恩恵はない。
違いは単純で、「厳密な同期が必要とされているか」だ。
だからもし、君がMMORPGのような多セッションでの
鯖上『オンメモリ』画像AからA'への切り替えを想定していたとしても、(…γ)
それはshared_ptrでの実装では楽にはならない。
画像A->A'への切り替えを同期させるなら、「誰が画像Aを掴んだままか」を鯖側が把握せねばならず、
上位の制御が必ず必要になる。shared_ptrを配って終わり、にはならない。
これは結局、Web鯖上の『ファイル』に対するキャッシュ条件がユルユルだから発生した特殊事例であり、
俺が言ったとおり、
> 手抜きデタラメ実装する場合は凄く便利だが、ガチで実装する場合にはあまり恩恵がない (105)
でしかない。
勿論それが許容されている世界であり、スループットを取っているだけだからそれでいいんだが。
まず、俺の意図が正確に君に伝わっていることは分かった。
が、Webサーバーなんてそんなもんだろ。(…α)
画像『ファイル』Aを鯖からダウンロードしている最中に、鯖上で画像『ファイル』がA'に変更されたとしても、
ユーザーは画像Aをダウンロードし続ける。
それどころか、鯖は更新された画像A'に即座に対応することすら期待されていない。
2-3分の遅延なら許容されている。
この仕様においては鯖上のオンメモリキャッシュとファイルの同期は厳密にとる必要はなく、
俺の示した実装の通りであり、それは君にも正しく伝わっている。
この場合はshared_ptrでの実装の方が楽だ。(ただし厳密には問題があるが)
一方、ファイルサーバーはそうではない。(…β)
Webサーバほどの多人数が同じファイルを同時に掴みに来ることはほぼ無いが、
「どのファイルが今誰にどういった権限で捕まれているか」を完全把握しなければならず、
ファイルの更新、ファイルロックのリリースも即座に対応することが期待されている。
許容されるのは精々数秒でしかない。
この場合は上位の制御が必ず必要になり、shared_ptrが有ったところで大して恩恵はない。
違いは単純で、「厳密な同期が必要とされているか」だ。
だからもし、君がMMORPGのような多セッションでの
鯖上『オンメモリ』画像AからA'への切り替えを想定していたとしても、(…γ)
それはshared_ptrでの実装では楽にはならない。
画像A->A'への切り替えを同期させるなら、「誰が画像Aを掴んだままか」を鯖側が把握せねばならず、
上位の制御が必ず必要になる。shared_ptrを配って終わり、にはならない。
これは結局、Web鯖上の『ファイル』に対するキャッシュ条件がユルユルだから発生した特殊事例であり、
俺が言ったとおり、
> 手抜きデタラメ実装する場合は凄く便利だが、ガチで実装する場合にはあまり恩恵がない (105)
でしかない。
勿論それが許容されている世界であり、スループットを取っているだけだからそれでいいんだが。
159デフォルトの名無しさん (ワッチョイ d19f-NuDx)
2018/06/11(月) 22:47:47.00ID:aD4/YLZg0 が、とにかく君は、
> オブジェクト自身に開放タイミングを決めさせる
事が必要だと思っているらしい。これの他具体例はあるか?
君が挙げてきた別例はGCだが、現実問題として、ほぼunique_ptrで事足りるのも事実だろ。
shared_ptrは機能的にはunique_ptrの上位互換だから、GCではそれが用いられているだけであって。
「ナマポ禁止、スマポ使え」なC++宣教師は、
次は「漢ならunique_ptr。shared_ptrは甘え」と言うと思うぜ。
それともあれか?smalltalk的OOP或いはアクターモデル的に
> オブジェクト自身に開放タイミングを決めさせる
ってのか?だったらもうそれは流行らない、というか、
今のところ無駄が多すぎて普通に組んだ方がマシ、ってことになってる。
> オブジェクト自身に開放タイミングを決めさせる
事が必要だと思っているらしい。これの他具体例はあるか?
君が挙げてきた別例はGCだが、現実問題として、ほぼunique_ptrで事足りるのも事実だろ。
shared_ptrは機能的にはunique_ptrの上位互換だから、GCではそれが用いられているだけであって。
「ナマポ禁止、スマポ使え」なC++宣教師は、
次は「漢ならunique_ptr。shared_ptrは甘え」と言うと思うぜ。
それともあれか?smalltalk的OOP或いはアクターモデル的に
> オブジェクト自身に開放タイミングを決めさせる
ってのか?だったらもうそれは流行らない、というか、
今のところ無駄が多すぎて普通に組んだ方がマシ、ってことになってる。
160デフォルトの名無しさん (ワッチョイ f3e9-Cil2)
2018/06/11(月) 23:50:59.24ID:TCS4sLPg0 ワイ、低みの見物
161デフォルトの名無しさん (ワッチョイ 135e-JdDl)
2018/06/12(火) 00:05:51.50ID:3X1PTNox0 ワイ、今表示されてる倉田まおの母音を見物中
162デフォルトの名無しさん (ワッチョイ 1334-KXLn)
2018/06/12(火) 00:38:01.99ID:5CgUkaGq0 長い独り言だ
いつ終わるんだ
いつ終わるんだ
163デフォルトの名無しさん (ワッチョイ a98a-Duqg)
2018/06/12(火) 05:08:46.11ID:l+dIOx6V0 オブジェクト開放ってどんな機能なんだろう:-P
164デフォルトの名無しさん (ワッチョイ 09c3-5Ttc)
2018/06/12(火) 06:07:09.64ID:GF1juvMA0 「delete忘れないようにunique_ptr使いましょーね」「共有が必要ならshared_ptrがべんりだよー」
っていうだけの話の何がそんなに気に食わないのかさっぱりわからなくてついていけない
っていうだけの話の何がそんなに気に食わないのかさっぱりわからなくてついていけない
165デフォルトの名無しさん (ドコグロ MM33-Chll)
2018/06/12(火) 07:13:51.68ID:rsKFgPQpM 相手するなよ...
166デフォルトの名無しさん (ワッチョイ d3f9-5aY/)
2018/06/12(火) 07:40:51.47ID:4LRUOmwX0167デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/12(火) 14:16:45.83ID:AQ05KId60 >>164
俺は何言ってるか分かったけど、この人に説明するのは無理だろな。
使ったことがないものを批判したい感じだし、std:unique_ptrは必要になってから使えば良いよと言ってあげれば良いのかも。
俺は何言ってるか分かったけど、この人に説明するのは無理だろな。
使ったことがないものを批判したい感じだし、std:unique_ptrは必要になってから使えば良いよと言ってあげれば良いのかも。
168デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/12(火) 14:21:27.71ID:AQ05KId60 まずムーブを活用して、総称性が必要になってから初めてunique_ptrを検討する感じがいいんじゃないのかな。
そしてshared_ptrは設計に時間をかけられないときに使うもので、ほとんど出番がないはず。
そしてshared_ptrは設計に時間をかけられないときに使うもので、ほとんど出番がないはず。
169デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/12(火) 14:25:31.83ID:AQ05KId60 20世紀最大の発明はレーザーと言われてるけど、21世紀最大の発明はムーブと言われてるからね。
俺に。
俺に。
170はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9b6f-LHz9)
2018/06/12(火) 14:41:13.61ID:U9ShKAeR0 なるべく (ポインタでなく) 値でやりとりすること、それを低コストで出来るようにムーブ対応にしておくというのは
上位レイヤを作るときに楽できる良い設計だとは思うけど、
実質的にはスマートポインタの機能をクラスに付け加えてるみたいなもんで、
それがクソ面倒くせえときに標準のスマートポインタを使うみたいな方針でやってた。
総称性を活用するときという観点は無かったけど、確かに必要な考え方だな。
上位レイヤを作るときに楽できる良い設計だとは思うけど、
実質的にはスマートポインタの機能をクラスに付け加えてるみたいなもんで、
それがクソ面倒くせえときに標準のスマートポインタを使うみたいな方針でやってた。
総称性を活用するときという観点は無かったけど、確かに必要な考え方だな。
171デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/12(火) 17:40:26.92ID:AQ05KId60 unique_ptrで内蔵しておけばnoexceptにしやすいので、ムーブが使われやすくなるというのはありますね。
とまあ、C++を使っていれば自然に有効利用するものですが、使う前に理解するのは難しいのではないでしょうか。
使ってみればなるほどとなると思うんですよね。
とまあ、C++を使っていれば自然に有効利用するものですが、使う前に理解するのは難しいのではないでしょうか。
使ってみればなるほどとなると思うんですよね。
172デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/12(火) 17:41:11.05ID:AQ05KId60 机上の空論繰り返すより、使ってみればすぐわかるよ。
これがおじさんからのアドバイス。
これがおじさんからのアドバイス。
173デフォルトの名無しさん (ドコグロ MM33-Chll)
2018/06/12(火) 18:51:59.08ID:rsKFgPQpM 総称性ってなんだ?
174デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/12(火) 19:28:54.15ID:AQ05KId60 C++の基本概念ですかね。
175デフォルトの名無しさん (ワッチョイ 13b3-Chll)
2018/06/12(火) 20:48:00.50ID:WPS/KLb40 >>174
説明してくれる?
説明してくれる?
176デフォルトの名無しさん (ワッチョイ 1b9b-VoGU)
2018/06/12(火) 20:57:02.36ID:zs4beaeD0 https://ja.wikipedia.org/wiki/%E7%B7%8F%E7%A7%B0%E5%9E%8B
総称型(generic type)、あるいはパラメタ付型(parametric type)とは、
型付けされたプログラミング言語においてデータ型の定義と
それを参照する式(型式)の一部にパラメタを許すことによって
類似した構造を持つ複数のデータ型を一括して定義して、
それらを選択利用する仕組みである。
総称型は、暗黙の型変換(implicit type conversion)あるいは型強制(type coercion)、
多重定義あるいはオーバーロード(overload)、継承(inheritance)あるいは包含(inclusion)と並んで
プログラミング言語においてポリモーフィズムを実現するための一つの手段であると看做せる。
総称型が使われている言語の例としてC++のテンプレート、JavaやC#のジェネリクスがある。
へー
総称型(generic type)、あるいはパラメタ付型(parametric type)とは、
型付けされたプログラミング言語においてデータ型の定義と
それを参照する式(型式)の一部にパラメタを許すことによって
類似した構造を持つ複数のデータ型を一括して定義して、
それらを選択利用する仕組みである。
総称型は、暗黙の型変換(implicit type conversion)あるいは型強制(type coercion)、
多重定義あるいはオーバーロード(overload)、継承(inheritance)あるいは包含(inclusion)と並んで
プログラミング言語においてポリモーフィズムを実現するための一つの手段であると看做せる。
総称型が使われている言語の例としてC++のテンプレート、JavaやC#のジェネリクスがある。
へー
177デフォルトの名無しさん (ワッチョイ 13b3-Chll)
2018/06/12(火) 21:16:18.28ID:WPS/KLb40 総称型の説明は要らんよ
欲しいのは総称性って言う謎の言葉の方
欲しいのは総称性って言う謎の言葉の方
178デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/12(火) 21:34:08.94ID:AQ05KId60 謎なんだ。
179デフォルトの名無しさん (スップ Sd73-YTw3)
2018/06/12(火) 21:37:14.01ID:SAMUGOdnd 個々のクラスの実装を工夫して値渡しとムーブで解決できないかをまず考えて、
複数の型について類似のコードが出てくるようなら unique_ptr や shared_ptr (や自作スマートポインターテンプレートクラス) の利用を検討する、
というようなことでは。
複数の型について類似のコードが出てくるようなら unique_ptr や shared_ptr (や自作スマートポインターテンプレートクラス) の利用を検討する、
というようなことでは。
180デフォルトの名無しさん (オッペケ Srdd-Cil2)
2018/06/12(火) 21:45:06.18ID:gIFipeApr シンシュンシャンソンショー
181デフォルトの名無しさん (ワッチョイ 13b3-Chll)
2018/06/12(火) 22:13:43.97ID:WPS/KLb40 >>178
そりゃ誰も説明できないから謎でしかないわ w
そりゃ誰も説明できないから謎でしかないわ w
182デフォルトの名無しさん (ワッチョイ 13eb-EKWA)
2018/06/12(火) 22:15:46.28ID:drNdawcz0 なんかそれっぽく言っとけば暗黙の内にマウント取れるから
183デフォルトの名無しさん (ワッチョイ a9f2-LHz9)
2018/06/12(火) 22:18:13.53ID:ETzAt0ej0 「オマエ知らないんだ〜」「でも教えてやらなーい」ってのは
元手ゼロでもできる安上がりなマウンティング
元手ゼロでもできる安上がりなマウンティング
184デフォルトの名無しさん (ワッチョイ d9ee-LHz9)
2018/06/12(火) 22:38:18.73ID:qK0E4vkq0 悔しそうだねw
185デフォルトの名無しさん (ワッチョイ b19f-a1ED)
2018/06/12(火) 23:00:25.83ID:J4aQNa8C0 オマエ知らないんだ〜
でも教えてやらなーい
でも教えてやらなーい
186デフォルトの名無しさん (ワッチョイ 13bd-T1fc)
2018/06/12(火) 23:22:34.41ID:/0VzFXQ50 >>158
>この場合は上位の制御が必ず必要になり、std::shared_ptrが有ったところで大して恩恵はない。
この言い分はずんねんながら成立しない
「プログラム、呼び出されなければただのデータ」という諺(今漏れが作った)からわかるとおり、
画像Aや画像A'のいかに巧妙な中央集権的なリソース管理のロジックを組んだところで、
画像Aや画像A'の開放タイミングで呼び出されなければ機能しない
で、この呼び出しというのは、std::shared_ptr<画像>で極めて確実に(呼び忘れが無い形で)行うことが出来る
すわなち、画像Aのデストラクタで目的の中央集権コードを呼び出せば(注1)良い
よって、C言語スキー野郎(敬称略)がいうところの「std::shared_ptrの恩恵が少ない」例は、
そのまんま「std::shared_ptrを使えばより良い実装になる」例である
注1: ここでの呼び出しとは、実行権を渡すことを意味する。
直接CALL、メッセージの送付、レジスタにパラメータを積んでソフトウェア割り込み、
インスタンス固有の管理テーブルに情報をセットしてイベントで待ち解除、(同)タスク起床、etc.etc...
原液PGならやり方を100万通りぐらい即答できるはず
>この場合は上位の制御が必ず必要になり、std::shared_ptrが有ったところで大して恩恵はない。
この言い分はずんねんながら成立しない
「プログラム、呼び出されなければただのデータ」という諺(今漏れが作った)からわかるとおり、
画像Aや画像A'のいかに巧妙な中央集権的なリソース管理のロジックを組んだところで、
画像Aや画像A'の開放タイミングで呼び出されなければ機能しない
で、この呼び出しというのは、std::shared_ptr<画像>で極めて確実に(呼び忘れが無い形で)行うことが出来る
すわなち、画像Aのデストラクタで目的の中央集権コードを呼び出せば(注1)良い
よって、C言語スキー野郎(敬称略)がいうところの「std::shared_ptrの恩恵が少ない」例は、
そのまんま「std::shared_ptrを使えばより良い実装になる」例である
注1: ここでの呼び出しとは、実行権を渡すことを意味する。
直接CALL、メッセージの送付、レジスタにパラメータを積んでソフトウェア割り込み、
インスタンス固有の管理テーブルに情報をセットしてイベントで待ち解除、(同)タスク起床、etc.etc...
原液PGならやり方を100万通りぐらい即答できるはず
187デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/12(火) 23:42:22.02ID:AQ05KId60 通知メカニズムを持つ画像より、通知メカニズムを持つリソースハンドルのほうが便利に違いないので、あまり使いどころがなさそう。
188デフォルトの名無しさん (ワッチョイ 13bd-T1fc)
2018/06/12(火) 23:47:32.67ID:/0VzFXQ50189デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/13(水) 00:06:22.45ID:uiSNJKd/0 >>188
禿4はSTLコンテナの類もリソースハンドルと呼んでるけどな。
std::shared_ptrに通知メカニズムをプラスしたようなものが実際に必要になるのではないだろうか。
オジサンはATL風の通知メカニズムを備えたコンテナを作りましたぞ。
禿4はSTLコンテナの類もリソースハンドルと呼んでるけどな。
std::shared_ptrに通知メカニズムをプラスしたようなものが実際に必要になるのではないだろうか。
オジサンはATL風の通知メカニズムを備えたコンテナを作りましたぞ。
190デフォルトの名無しさん (ワッチョイ 81b3-8neN)
2018/06/13(水) 00:09:01.46ID:uiSNJKd/0 リソースを共有するということは、通知もセットで必要になると思うんだよなあ。
191デフォルトの名無しさん (ワッチョイ d19f-NuDx)
2018/06/13(水) 00:25:29.19ID:RKKw3ZF+0192はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9b6f-LHz9)
2018/06/13(水) 01:34:41.54ID:3eXA0K0W0 まだ標準にも入ってないもんなんか使ったこともないし知らんわ。
193デフォルトの名無しさん (ワッチョイ a92d-z9k/)
2018/06/13(水) 18:27:25.89ID:9sngOZbY0 唐突にphoenix_shared_ptrとか言ってみる 解る人おるやろか
Lokiに始まるメタテンプレートプログラミング狂騒時代も15年以上昔か…
Lokiに始まるメタテンプレートプログラミング狂騒時代も15年以上昔か…
194デフォルトの名無しさん (ワッチョイ d19f-NuDx)
2018/06/13(水) 19:47:43.91ID:RKKw3ZF+0 >>192
そう言うだろうとは思っていた。
そしてそれが今の君の、またC++erの限界なのだと思う。
君は>>103によると、世代的に、
C言語の前にアセンブラをやった連中は誰一人としてポインタで躓くことはなかった事実を知っているだろ。
これは単純に、ポインタの意味は既に知っており、
単に、インデックスレジスタの使い方をポインタと命名したんですね、で済んだからだ。
俺は同様の見方でC++を見てる。
C++のスマポはCのナマポを「分類/命名」しただけで、「追加」してないから。
だから記述能力が足りないことにも気づく。
unique_ptr(キリッなんてやってるC++erは馬鹿丸出しだ。
君らはそれがCへの回帰な事にも気づけてない。
そしてここにきてobserver_ptrを追加するのは、完全に敗北だ。
あれはA方式用に他ならないから。
とはいえ、良いトライであったとは思うよ。そして失敗した。
ただ、それを修正して来れている点は素晴らしいが。
shared_ptrも結局使いどころがないだろ。
アセンブラの件からも分かるように、「理解していること」と「書いていること」は別なんだ。
正しくCを使っている連中は、そのナマポがunique/shared/weak/observerのどれなのかは明確に意識してる。
ただそれを書いてないだけだ。だから馬鹿には使っていないようにしか見えない。
君はobserver_ptrを知らないし、教えてもらわないと必要性に気づけない。
そこまで落ちぶれているって事だよ。
少なくともアセンブラ→Cの時のように、概念は理解しているがその言語での名前を知らないだけ、ではない。
対して、Cの連中は既にobserver_ptrを使っている。(ただし書いてない)
ここら辺の違いが、linusが一貫してC++erに冷めている理由だろうよ。無知な馬鹿にしか見えないから。
そう言うだろうとは思っていた。
そしてそれが今の君の、またC++erの限界なのだと思う。
君は>>103によると、世代的に、
C言語の前にアセンブラをやった連中は誰一人としてポインタで躓くことはなかった事実を知っているだろ。
これは単純に、ポインタの意味は既に知っており、
単に、インデックスレジスタの使い方をポインタと命名したんですね、で済んだからだ。
俺は同様の見方でC++を見てる。
C++のスマポはCのナマポを「分類/命名」しただけで、「追加」してないから。
だから記述能力が足りないことにも気づく。
unique_ptr(キリッなんてやってるC++erは馬鹿丸出しだ。
君らはそれがCへの回帰な事にも気づけてない。
そしてここにきてobserver_ptrを追加するのは、完全に敗北だ。
あれはA方式用に他ならないから。
とはいえ、良いトライであったとは思うよ。そして失敗した。
ただ、それを修正して来れている点は素晴らしいが。
shared_ptrも結局使いどころがないだろ。
アセンブラの件からも分かるように、「理解していること」と「書いていること」は別なんだ。
正しくCを使っている連中は、そのナマポがunique/shared/weak/observerのどれなのかは明確に意識してる。
ただそれを書いてないだけだ。だから馬鹿には使っていないようにしか見えない。
君はobserver_ptrを知らないし、教えてもらわないと必要性に気づけない。
そこまで落ちぶれているって事だよ。
少なくともアセンブラ→Cの時のように、概念は理解しているがその言語での名前を知らないだけ、ではない。
対して、Cの連中は既にobserver_ptrを使っている。(ただし書いてない)
ここら辺の違いが、linusが一貫してC++erに冷めている理由だろうよ。無知な馬鹿にしか見えないから。
195はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9b6f-LHz9)
2018/06/13(水) 21:32:55.86ID:3eXA0K0W0 >194
> 正しくCを使っている連中は、そのナマポがunique/shared/weak/observerのどれなのかは明確に意識してる。
> ただそれを書いてないだけだ。だから馬鹿には使っていないようにしか見えない。
ああ、馬鹿にはわかんないよ。
だから書いてくれっての。
人間は度し難いほど馬鹿なので、クソみたいな間違いをする。
意識していたとしても間違う。
知っていても何度でも間違う。
そんなの当たり前だろ?
> 正しくCを使っている連中は、そのナマポがunique/shared/weak/observerのどれなのかは明確に意識してる。
> ただそれを書いてないだけだ。だから馬鹿には使っていないようにしか見えない。
ああ、馬鹿にはわかんないよ。
だから書いてくれっての。
人間は度し難いほど馬鹿なので、クソみたいな間違いをする。
意識していたとしても間違う。
知っていても何度でも間違う。
そんなの当たり前だろ?
196デフォルトの名無しさん (ワッチョイ 135e-JdDl)
2018/06/13(水) 21:37:20.42ID:sL+nPHdq0 で、おめぇは一流のC++erと自称したいのかい。
ほんとに糞な爺だわ。早く棺桶の中で寝ろ。この河童虫が
ほんとに糞な爺だわ。早く棺桶の中で寝ろ。この河童虫が
197デフォルトの名無しさん (ワッチョイ d19f-NuDx)
2018/06/13(水) 23:13:52.35ID:RKKw3ZF+0 >>195
まあ俺は書くこと自体には反対ではないんだが、
1. 足りないんだから書きようがない(observerが)
2. そもそも書くほどバリエーションがない
Cで使われているのはunique/observerで、shared/weakはほぼあり得ない。
制御が煩雑すぎてバグる。
だからこそsharedが生きる構造があればC++が勝ちきる可能性があったが、
shared撲滅みたいな今の風潮じゃあねぇ。
そして既に書いたが、大概は方式Aだから、
ローカルのナマポはuniqueで、それ以外は全部observerでしかない。
わざわざ分けて書くほどバリエーションがないんだよ。
Cの連中は書くのが嫌なわけではなく、書く意味を見いださないのだと思うよ。
書いたところでコード構造が改善されるわけでもなく、速度が上がるわけでもない。
書かずともどうせA方式だし。
まあ俺は書くこと自体には反対ではないんだが、
1. 足りないんだから書きようがない(observerが)
2. そもそも書くほどバリエーションがない
Cで使われているのはunique/observerで、shared/weakはほぼあり得ない。
制御が煩雑すぎてバグる。
だからこそsharedが生きる構造があればC++が勝ちきる可能性があったが、
shared撲滅みたいな今の風潮じゃあねぇ。
そして既に書いたが、大概は方式Aだから、
ローカルのナマポはuniqueで、それ以外は全部observerでしかない。
わざわざ分けて書くほどバリエーションがないんだよ。
Cの連中は書くのが嫌なわけではなく、書く意味を見いださないのだと思うよ。
書いたところでコード構造が改善されるわけでもなく、速度が上がるわけでもない。
書かずともどうせA方式だし。
198デフォルトの名無しさん (ワッチョイ e9bd-dEMp)
2018/06/13(水) 23:25:33.47ID:5laWTN4A0 shared撲滅の風潮ってどこ界隈の話なの?
199デフォルトの名無しさん (ワッチョイ 1334-KXLn)
2018/06/13(水) 23:41:19.62ID:J0Tz9R0J0 sharedはリファレンスカウンタがからんでくるからね
201デフォルトの名無しさん (ワッチョイ 1b9b-VoGU)
2018/06/13(水) 23:58:45.33ID:WZGs4Fzm0 依存性にかならず上流下流関係があってノードで循環を監視できれば
sharedでいいよね
sharedでいいよね
202デフォルトの名無しさん (ワッチョイ 4dbd-ymc6)
2018/06/14(木) 00:42:29.58ID:AR2hsIBa0 gtkもtcl/tkもwxも撲滅しなきゃならんのけ?
204デフォルトの名無しさん (ワッチョイ 4233-m0US)
2018/06/14(木) 01:14:20.14ID:tdGLg+cS0 >>197
分けて書く理由にバリエーションの数は関係ないでしょう。
分けて書く理由にバリエーションの数は関係ないでしょう。
205デフォルトの名無しさん (ワッチョイ 45d2-Bw3Y)
2018/06/14(木) 04:20:54.09ID:vzmFB22H0 問:ある時刻tの日本の年号を返すプログラムをC++とSTLを使って表現しなさい。年号はコードに埋め込むものとする。
206デフォルトの名無しさん (ワッチョイ 22f9-b25I)
2018/06/14(木) 06:40:46.06ID:iQB56L+L0 宿題は自分で頑張れ
207デフォルトの名無しさん (ワッチョイ 99b3-Cu4h)
2018/06/14(木) 07:14:11.27ID:QWAhFsNz0 >>198
参照のクモの巣と言えばDOMが有名だけど、あれはスクリプト言語ユーザーの都合上そうなっているだけで、C++ユーザーにとっては無用の長物なんだよね。
タブを一つ開くたびに500MB消費するのは許容限界を超えていると思う。
参照のクモの巣と言えばDOMが有名だけど、あれはスクリプト言語ユーザーの都合上そうなっているだけで、C++ユーザーにとっては無用の長物なんだよね。
タブを一つ開くたびに500MB消費するのは許容限界を超えていると思う。
208デフォルトの名無しさん (ワッチョイ 99b3-Cu4h)
2018/06/14(木) 07:19:10.82ID:QWAhFsNz0 そして、ブラウザをCで書くのは非常につらい作業になるので、実用上C++を使うことになる。
したがって、スクリプト言語をホストする以上、自分たちにとって参照のクモの巣が無用の長物であったとしても、C++は、必要とされればいつでも参照のクモの巣をサポートする力が必要になる。
したがって、スクリプト言語をホストする以上、自分たちにとって参照のクモの巣が無用の長物であったとしても、C++は、必要とされればいつでも参照のクモの巣をサポートする力が必要になる。
209デフォルトの名無しさん (ワッチョイ 42bd-eoBX)
2018/06/14(木) 07:54:07.51ID:loD77XnX0 >>203
循環の検出ならスタックとノード毎の到達済みフラグがあれば逝ける
ドーナツ型の図形を塗りつぶすのと同じやり方
(個々のノードは、参照先の到達済みフラグがTRUEならああ循環したんだなあとワカル
循環の検出ならスタックとノード毎の到達済みフラグがあれば逝ける
ドーナツ型の図形を塗りつぶすのと同じやり方
(個々のノードは、参照先の到達済みフラグがTRUEならああ循環したんだなあとワカル
210デフォルトの名無しさん (ワッチョイ 42bd-eoBX)
2018/06/14(木) 08:05:57.75ID:loD77XnX0 まあ分岐の無い循環しかないならスタックは無しでも逝けるがな!
末尾再帰の最適化と同じやり方
(ループで済む
末尾再帰の最適化と同じやり方
(ループで済む
211デフォルトの名無しさん (ワッチョイ 469f-ys2j)
2018/06/14(木) 08:14:46.47ID:1FD9Rath0 つまり古典的なマークアンドスイープ最強ってこったな。
212デフォルトの名無しさん
2018/06/14(木) 08:27:43.24 量子コンピュータなら循環なんて一瞬で分かるよね
知らんけど
知らんけど
213デフォルトの名無しさん (ワッチョイ d123-PZZX)
2018/06/14(木) 08:37:33.66ID:HZa0RgSQ0 そもそも再帰的なデータ構造じゃないものなら
循環参照のしようがないので普通に shared_ptr で良いし
そういう処理もごく普通によくある
>>209
>(個々のノードは、参照先の到達済みフラグがTRUEならああ循環したんだなあとワカル
循環に限らず単純な共有でもこうなるので
そんなことでは循環したんだなあとワカラナイと思う
循環参照のしようがないので普通に shared_ptr で良いし
そういう処理もごく普通によくある
>>209
>(個々のノードは、参照先の到達済みフラグがTRUEならああ循環したんだなあとワカル
循環に限らず単純な共有でもこうなるので
そんなことでは循環したんだなあとワカラナイと思う
214デフォルトの名無しさん (ワッチョイ 99b3-Cu4h)
2018/06/14(木) 09:46:17.13ID:QWAhFsNz0 循環参照は甘え。
215かさぶた (ワッチョイ 99b3-4tVh)
2018/06/14(木) 09:52:01.49ID:EOR8DX2X0 質問です、下記はソースの1部分なんですが、あるプロセスのメモリを検索しています。00000000〜7FFFFFFFまでを検索しているのですが7FFFFFFFを9FFFFFFFまでに増やしたいです、単純に終了アドレスを9FFFFFFFにしても検索してくれないですが何故でしょうか?
http://codepad.org/cdLpKbdw
http://codepad.org/cdLpKbdw
216デフォルトの名無しさん
2018/06/14(木) 12:13:24.04217デフォルトの名無しさん (ワッチョイ 99b3-mJaI)
2018/06/14(木) 13:43:20.70ID:EOR8DX2X0 >>216
どの部分ですか?
どの部分ですか?
>>209
kwsk
kwsk
>>211
他に方法がないが、いちいち mark and sweep するなんて考えられない
他に方法がないが、いちいち mark and sweep するなんて考えられない
220デフォルトの名無しさん (ワッチョイ 42bd-eoBX)
2018/06/14(木) 23:42:44.50ID:loD77XnX0221デフォルトの名無しさん (ワッチョイ 42bd-eoBX)
2018/06/15(金) 00:11:08.99ID:te7lJSB30 ごめwwwwww
×:到達済みフラグをセットするのは開放時なので
○:到達済みフラグをセットするのは参照カウントを減らすときなで
×:到達済みフラグをセットするのは開放時なので
○:到達済みフラグをセットするのは参照カウントを減らすときなで
222デフォルトの名無しさん (ワッチョイ 42bd-eoBX)
2018/06/15(金) 00:31:56.81ID:te7lJSB30 と思って今作ったがあんま使い勝手の良いものにはならんかったorz
使い方としては
class Foo {
sumapo<Foo> m_pCar;
sumapo<Foo> m_pCdr;
/*...*/
};
sumapo<Foo> ptr(new Foo());
と書いた後、ptrが開放されたとき、ptrが指すFooが握っているsumapoが残らず(循環があろうとなかろうと)参照カウントを減じて欲しいわけだが
これにはptrが握っているFooを開放する前に、ptrがFoo::m_pCdrやFoo::m_pCarを辿れる必要があるので
m_pCarやm_pCdrとptrが裏で手を握る必要がある
使い方としては
class Foo {
sumapo<Foo> m_pCar;
sumapo<Foo> m_pCdr;
/*...*/
};
sumapo<Foo> ptr(new Foo());
と書いた後、ptrが開放されたとき、ptrが指すFooが握っているsumapoが残らず(循環があろうとなかろうと)参照カウントを減じて欲しいわけだが
これにはptrが握っているFooを開放する前に、ptrがFoo::m_pCdrやFoo::m_pCarを辿れる必要があるので
m_pCarやm_pCdrとptrが裏で手を握る必要がある
223デフォルトの名無しさん (ワッチョイ 4234-3nod)
2018/06/15(金) 01:30:57.51ID:tfGvP9jV0 sumapoが酢マンポに見えた
224デフォルトの名無しさん (ワッチョイ 42bd-eoBX)
2018/06/15(金) 07:32:17.48ID:te7lJSB30 ごめwwwwwwwまた言い方をちょっとまつがえたorz
誤: Fooが握っているsumapoが残らず(循環があろうとなかろうと)参照カウントを減じて欲しい
正: Fooが握っているsumapoが(循環があろうとなかろうと二重破棄を招かない形で)参照カウントを減じて欲しい
リフレクションがあればsumapoからFoo(やBar)のメンバが丸見えなのでsumapoのリンクを辿って破棄予定オブジェクトを事前にマークすることで2重破棄の防止を自然に実現できる
リフレクションが無い現行のC++なら、sumapoのデストラクタで破棄される予定なFoo(やBar)をマークだけして破棄を遅延する、みたいな細工をするしかないが
デストラクタの中から全てのFoo(やBar)のマークが完了したか知る術が無いから、sweepする呼び出しが別途要る、、
やっぱC++にもリフレクション欲しい…
誤: Fooが握っているsumapoが残らず(循環があろうとなかろうと)参照カウントを減じて欲しい
正: Fooが握っているsumapoが(循環があろうとなかろうと二重破棄を招かない形で)参照カウントを減じて欲しい
リフレクションがあればsumapoからFoo(やBar)のメンバが丸見えなのでsumapoのリンクを辿って破棄予定オブジェクトを事前にマークすることで2重破棄の防止を自然に実現できる
リフレクションが無い現行のC++なら、sumapoのデストラクタで破棄される予定なFoo(やBar)をマークだけして破棄を遅延する、みたいな細工をするしかないが
デストラクタの中から全てのFoo(やBar)のマークが完了したか知る術が無いから、sweepする呼び出しが別途要る、、
やっぱC++にもリフレクション欲しい…
225デフォルトの名無しさん (ワッチョイ 419f-bAWz)
2018/06/15(金) 08:54:27.46ID:11m1WzfY0 >>224
JavaScripterマジで死ねよ
JavaScriptのコミュニティが腐っているのは、
馬鹿であることを自覚出来ないお前みたいな大馬鹿が、嘘を平気で垂れ流しているからだよ。
そして初心者はそれを見抜けず、騙されて馬鹿が再生産されてる。
お前らがC++のコミュニティを破壊する権利はない。JavaScriptのゴミ貯めに戻れ。
お前らはプログラマ全体からするとゴミ以下のクズなんだよ。それを自覚しろ。
C++初心者の為に、俺がお前の嘘を暴いておいてやる。
> リフレクションがあれば
お前のリフレクションの使い方は、メンバの中身を参照したいだけのようだ。
ならば、全てのメンバがpublicだったらいいはずだ。
このケースで、どうやって実現出来るのか説明してみろ。
お前は本当に何も分かってない。最初から躓くと思うぜ。
オブジェクトAのメンバはすべてpublicである。
オブジェクトAのインスタンスa,b,c,dは
・aはbを参照している
・bはaを参照している(a-b間で循環参照)
・cはbを参照している
・dはcを参照している
の状態で、a-b間で循環参照があり、参照はd -> c -> b <-> aとなっている。
これらへの参照は他にはない。
今、dへの参照がなくなり、dのデストラクタが起動された。
この状態で、どのように回収されるのか、説明してみろ。
お前みたいな馬鹿には出来ないと思うぜ。
さっさとJavaScripterの巣に帰れ。邪魔でしかないから。
JavaScripterマジで死ねよ
JavaScriptのコミュニティが腐っているのは、
馬鹿であることを自覚出来ないお前みたいな大馬鹿が、嘘を平気で垂れ流しているからだよ。
そして初心者はそれを見抜けず、騙されて馬鹿が再生産されてる。
お前らがC++のコミュニティを破壊する権利はない。JavaScriptのゴミ貯めに戻れ。
お前らはプログラマ全体からするとゴミ以下のクズなんだよ。それを自覚しろ。
C++初心者の為に、俺がお前の嘘を暴いておいてやる。
> リフレクションがあれば
お前のリフレクションの使い方は、メンバの中身を参照したいだけのようだ。
ならば、全てのメンバがpublicだったらいいはずだ。
このケースで、どうやって実現出来るのか説明してみろ。
お前は本当に何も分かってない。最初から躓くと思うぜ。
オブジェクトAのメンバはすべてpublicである。
オブジェクトAのインスタンスa,b,c,dは
・aはbを参照している
・bはaを参照している(a-b間で循環参照)
・cはbを参照している
・dはcを参照している
の状態で、a-b間で循環参照があり、参照はd -> c -> b <-> aとなっている。
これらへの参照は他にはない。
今、dへの参照がなくなり、dのデストラクタが起動された。
この状態で、どのように回収されるのか、説明してみろ。
お前みたいな馬鹿には出来ないと思うぜ。
さっさとJavaScripterの巣に帰れ。邪魔でしかないから。
226デフォルトの名無しさん (ワッチョイ d123-PZZX)
2018/06/15(金) 09:22:53.91ID:RJDRNrzC0227デフォルトの名無しさん (ワッチョイ d123-PZZX)
2018/06/15(金) 09:28:19.83ID:RJDRNrzC0 いや違うか。
普通はコード書かずともちょっと考えればそんな間違いしない。
考えずに書くから間違いばかりする。
普通はコード書かずともちょっと考えればそんな間違いしない。
考えずに書くから間違いばかりする。
228デフォルトの名無しさん (ラクッペ MM61-wCsk)
2018/06/15(金) 10:24:12.07ID:D6yBxFGeM C++って難しいの?
229デフォルトの名無しさん (ワッチョイ d123-PZZX)
2018/06/15(金) 10:24:22.09ID:RJDRNrzC0 有向グラフでマークしてトラバースすれば循環がわかるのは単方向リストくらいなものだろ
ドーナツがどうとか言ってるのは無向グラフと混同している
ドーナツがどうとか言ってるのは無向グラフと混同している
230デフォルトの名無しさん (ブーイモ MMb6-Z/ei)
2018/06/15(金) 11:47:40.97ID:pSkky0TvM >>228
難しい人が多いよ
難しい人が多いよ
231デフォルトの名無しさん
2018/06/15(金) 12:08:37.80 難しい人ってか、基地外な人が多いね
232デフォルトの名無しさん (ワッチョイ 99b3-Cu4h)
2018/06/15(金) 14:00:33.64ID:S225t3Tg0 JavascriptとC++では要求されるレイヤーが違うので、比較するのは無理だと思う。
233デフォルトの名無しさん (ワッチョイ ed83-m0US)
2018/06/16(土) 01:44:46.69ID:NR0pGRhV0 複雑な参照を持つシステムってまぁほとんどシミュレーション系で速度も要件に入ってくるんですよ。
糞遅いJavascriptやpythonなんて普通に使いものにならずC++の独擅場なわけですよ。
pythonでAIとか笑っちゃいますね。
糞遅いJavascriptやpythonなんて普通に使いものにならずC++の独擅場なわけですよ。
pythonでAIとか笑っちゃいますね。
234はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-Bw3Y)
2018/06/16(土) 03:04:09.42ID:eEu6oaxZ0 >>233
この場合の Python はいわゆるグルー言語でしょ。
高速なコンポーネントのパラメータを指定して組み合わせるだけみたいな使い方なんじゃないの。
高速な計算が出来るコンポーネントは C++ が主流であったとしても、
それをビジネスロジックにさっと適用するという意味での「Python で AI」は現実的だし、
実際よくあることだと思う。
この場合の Python はいわゆるグルー言語でしょ。
高速なコンポーネントのパラメータを指定して組み合わせるだけみたいな使い方なんじゃないの。
高速な計算が出来るコンポーネントは C++ が主流であったとしても、
それをビジネスロジックにさっと適用するという意味での「Python で AI」は現実的だし、
実際よくあることだと思う。
235デフォルトの名無しさん (ワッチョイ ed83-m0US)
2018/06/16(土) 03:46:18.97ID:NR0pGRhV0 高額なPython屋募集のAI案件は、99%非現実的。
AIを何も分かってな奴が企画したプロジェクト。散々利用されてきた統計学以上の成果など出やしない。
昨今のAIブームは過去のAIブームと同じく破綻プロジェクトばかりなのは言わずもがな。
なぜPythonか。失敗したときにPythonだからと言い訳するため。
そもそも簡単な言語なのに高額で募集する時点で辻褄が合わない。
嘘ついて投資募ってるのは明らか。読売新聞のAI記事読んでると騙す気満々だと分かる。
openCVスレでもpythonから入る奴は何もできやしない。最初から分かりきったこと。フフフ、笑えますね。
AIを何も分かってな奴が企画したプロジェクト。散々利用されてきた統計学以上の成果など出やしない。
昨今のAIブームは過去のAIブームと同じく破綻プロジェクトばかりなのは言わずもがな。
なぜPythonか。失敗したときにPythonだからと言い訳するため。
そもそも簡単な言語なのに高額で募集する時点で辻褄が合わない。
嘘ついて投資募ってるのは明らか。読売新聞のAI記事読んでると騙す気満々だと分かる。
openCVスレでもpythonから入る奴は何もできやしない。最初から分かりきったこと。フフフ、笑えますね。
236デフォルトの名無しさん (ワッチョイ 45d2-Bw3Y)
2018/06/16(土) 04:06:22.88ID:Xfp5NB1U0 結局はコンポーネント間の通信回数を減らすことが肝。しっかりと設計を吟味すれば従来通りのIPCで十分だったりする。
237デフォルトの名無しさん (ワッチョイ 069d-/RsH)
2018/06/16(土) 09:29:46.67ID:/wbLufVy0 >>235
でもAIってモジュール部分は超簡単なんじゃない? それにそんなもの「作る」って
レベルじゃないから、出来の悪い奴でもいいから一人がC++でモジュール書いていば
OKでやっぱPythonレベルの方が重要なのではないか?
でもAIってモジュール部分は超簡単なんじゃない? それにそんなもの「作る」って
レベルじゃないから、出来の悪い奴でもいいから一人がC++でモジュール書いていば
OKでやっぱPythonレベルの方が重要なのではないか?
238デフォルトの名無しさん (ワッチョイ c212-bAWz)
2018/06/16(土) 09:39:44.63ID:kxy+9IRB0 そのあたりはpythonのソースコードを見ると分かる
ttps://github.com/python/cpython/blob/master/Objects/weakrefobject.c
ttps://github.com/python/cpython/blob/master/Objects/weakrefobject.c
239デフォルトの名無しさん (ワッチョイ 99b3-Cu4h)
2018/06/16(土) 12:41:15.99ID:HgejND060 C++の公式スクリプト言語はPythonだから慣れるしかない。
240デフォルトの名無しさん (ブーイモ MM85-Z/ei)
2018/06/16(土) 16:48:42.77ID:mGUvusUxM 何かのネタ?
241デフォルトの名無しさん (ワッチョイ 069d-/RsH)
2018/06/16(土) 16:56:00.16ID:/wbLufVy0 AIで一番大変なのはデータを食わせることだよな。パイトンでもC++でもなくて
一番重要なのはエサやりして大切に飼いならす人だよ。だから愛がないとできない。
お前等には無理だな。三日やったら課長の机に糞してとんづら。
一番重要なのはエサやりして大切に飼いならす人だよ。だから愛がないとできない。
お前等には無理だな。三日やったら課長の机に糞してとんづら。
242デフォルトの名無しさん (ワッチョイ 4234-3nod)
2018/06/16(土) 17:02:55.51ID:q68/flhz0 その学習させた膨大なデータが高額で取引される時代が来るのかね
243デフォルトの名無しさん (ワッチョイ 99b3-Cu4h)
2018/06/16(土) 23:47:37.78ID:HgejND060 OCamlがあるのだからオッパイソンがあってもいいはずだが。
244デフォルトの名無しさん (ワッチョイ 469f-cPc7)
2018/06/17(日) 09:57:43.12ID:dJUJdMR30245デフォルトの名無しさん (ワッチョイ 419f-bAWz)
2018/06/17(日) 11:12:20.33ID:DwTnzOB00 >>230-231
仮にそれでもJavaScripterよりマシだ。
お前も含めて、JavaScripterには、馬鹿かつキチガイしか居ない。
例>>220,224: 反論することも出来ず、間違いを認めることもなく、ただ逃亡
これをやるからJavaScriptのWebリソースは大半が腐ってる。
俺は知らんがC/C++はWeb上の間違いに異常に厳しかった時代があったと聞く。
それが今も引き続いていて、Web上の正確性を担保してくれているのなら、有り難い話だよ。
ゆとりには「ぼくがおこられなければいい」という幼稚園児並みの知能しかないから、
JavaScriptコミュニティみたいなことが発生する。
あれは最早完全に手遅れで、その状態のゆとりが教える側に回っていることが最悪。
連中は平気で嘘をつく韓国人レベルのモラルしか持ってないし。
結果的に間違いであったにせよ、修正しておかないと、後で読む人の為にならないだろ。
「嘘だと認めなければ嘘ではない」という、韓国人みたいな奴は、キッチリ殺すべき。
間違ったことを書いたら叩かれるのは、長期的に見ればいいことだ。
それがゆとりには分からないだけでね。
あと、わざわざID消して自演しているゴミ、それは余計に目立つぞ。
他の誰もそんなことをしてないから、逆にコテトリになってる。
お前は他でも荒らしまくってるよな。
仮にそれでもJavaScripterよりマシだ。
お前も含めて、JavaScripterには、馬鹿かつキチガイしか居ない。
例>>220,224: 反論することも出来ず、間違いを認めることもなく、ただ逃亡
これをやるからJavaScriptのWebリソースは大半が腐ってる。
俺は知らんがC/C++はWeb上の間違いに異常に厳しかった時代があったと聞く。
それが今も引き続いていて、Web上の正確性を担保してくれているのなら、有り難い話だよ。
ゆとりには「ぼくがおこられなければいい」という幼稚園児並みの知能しかないから、
JavaScriptコミュニティみたいなことが発生する。
あれは最早完全に手遅れで、その状態のゆとりが教える側に回っていることが最悪。
連中は平気で嘘をつく韓国人レベルのモラルしか持ってないし。
結果的に間違いであったにせよ、修正しておかないと、後で読む人の為にならないだろ。
「嘘だと認めなければ嘘ではない」という、韓国人みたいな奴は、キッチリ殺すべき。
間違ったことを書いたら叩かれるのは、長期的に見ればいいことだ。
それがゆとりには分からないだけでね。
あと、わざわざID消して自演しているゴミ、それは余計に目立つぞ。
他の誰もそんなことをしてないから、逆にコテトリになってる。
お前は他でも荒らしまくってるよな。
246デフォルトの名無しさん (ワッチョイ 419f-bAWz)
2018/06/17(日) 11:26:31.91ID:DwTnzOB00 >>227
一番足りないのは謙虚さなんだけどな。
JavaScripterは本当に馬鹿しかいないから、コードがマジでゴミしかない。
だから糞コードしか書けない馬鹿がつけあがる。
そしてそれを諫める年長者もいない。幼稚園で先生がいない状態だ。
C++は30年の歴史があって、仕様も改訂し続けているのだから、
今の仕様はその中で今一番マシな方法ということになっている。
JavaScripterみたいなぽっと出のゴミがぱっと考えて思いつくような手法を、
今まで30年間誰も思いつかなかったと思うこと自体がキチガイでしかない。
一番足りないのは謙虚さなんだけどな。
JavaScripterは本当に馬鹿しかいないから、コードがマジでゴミしかない。
だから糞コードしか書けない馬鹿がつけあがる。
そしてそれを諫める年長者もいない。幼稚園で先生がいない状態だ。
C++は30年の歴史があって、仕様も改訂し続けているのだから、
今の仕様はその中で今一番マシな方法ということになっている。
JavaScripterみたいなぽっと出のゴミがぱっと考えて思いつくような手法を、
今まで30年間誰も思いつかなかったと思うこと自体がキチガイでしかない。
247デフォルトの名無しさん (ワッチョイ 419f-bAWz)
2018/06/17(日) 11:30:36.00ID:DwTnzOB00 というわけで先に進める。
沸きまくっている馬鹿を振り落とす為に速度を上げるからよろしく。
>>213
> そもそも再帰的なデータ構造じゃないものなら
> 循環参照のしようがないので普通に shared_ptr で良いし
> そういう処理もごく普通によくある
「再帰的なデータ構造ではないとき、循環参照は発生しない」については同意だが、
「循環参照がない場合は、shared_ptrでいい」には反対だ。
これだとC++の速度優位性が無くなるので、俺ならGC言語を検討する。
ただしこれは宗教だからもういい。
本題は、
・shared_ptr(静的共有)必須な構造が、果たしてあるか
だ。木構造で一番身近なファイルシステムを例に取ると、
静的共有(ハードリンク/shared_ptr)と動的共有(シンボリックリンク/getter)のうち、
前者はほぼ使われてないだろ。
これは、ユーザーによる手動管理の場合、シンボリックリンクの方が明示的で使いやすいからだ。
シンボリックリンクは常に最新版を、ハードリンクは常に生成時の対象を参照するところが異なる。
速度的には静的共有の方が優位だとして、動的共有では無理な事例ってあるか?
俺が知っているハードリンクの活用事例は、WindowsUpdateくらいだ。
「動けばいい」なら動的共有の方が適切に思える。
(C++で動的共有はなかなかにきついが、動的言語なら自然に実現出来る)
沸きまくっている馬鹿を振り落とす為に速度を上げるからよろしく。
>>213
> そもそも再帰的なデータ構造じゃないものなら
> 循環参照のしようがないので普通に shared_ptr で良いし
> そういう処理もごく普通によくある
「再帰的なデータ構造ではないとき、循環参照は発生しない」については同意だが、
「循環参照がない場合は、shared_ptrでいい」には反対だ。
これだとC++の速度優位性が無くなるので、俺ならGC言語を検討する。
ただしこれは宗教だからもういい。
本題は、
・shared_ptr(静的共有)必須な構造が、果たしてあるか
だ。木構造で一番身近なファイルシステムを例に取ると、
静的共有(ハードリンク/shared_ptr)と動的共有(シンボリックリンク/getter)のうち、
前者はほぼ使われてないだろ。
これは、ユーザーによる手動管理の場合、シンボリックリンクの方が明示的で使いやすいからだ。
シンボリックリンクは常に最新版を、ハードリンクは常に生成時の対象を参照するところが異なる。
速度的には静的共有の方が優位だとして、動的共有では無理な事例ってあるか?
俺が知っているハードリンクの活用事例は、WindowsUpdateくらいだ。
「動けばいい」なら動的共有の方が適切に思える。
(C++で動的共有はなかなかにきついが、動的言語なら自然に実現出来る)
248デフォルトの名無しさん (ブーイモ MM62-Z/ei)
2018/06/17(日) 11:37:00.29ID:PZ1k9mb/M249デフォルトの名無しさん (ワッチョイ 419f-bAWz)
2018/06/17(日) 11:58:04.60ID:DwTnzOB00 >>248
俺から見ればお前がキチガイだし、
ここがお前にとって合わないと思うのなら、お前がここに来るのが間違ってる。
ゆとりはゆとりだけでスレ作れよ。
それがお互い一番幸せな解決だ。
俺には韓国人とゆとりは殺すしかないという結論が出てる。
お前らは邪魔しかしないから。今もそうだろ。
俺から見ればお前がキチガイだし、
ここがお前にとって合わないと思うのなら、お前がここに来るのが間違ってる。
ゆとりはゆとりだけでスレ作れよ。
それがお互い一番幸せな解決だ。
俺には韓国人とゆとりは殺すしかないという結論が出てる。
お前らは邪魔しかしないから。今もそうだろ。
250デフォルトの名無しさん (ワントンキン MM92-l11B)
2018/06/17(日) 12:17:06.47ID:I5++lOekM 初心者で的はずれな質問かもしれませんがお願いします。
1行に約4000文字,区切りで書かれたファイルがあり、これが1000行あります。
このファイルを1行ごとに別の配列に格納したいのですがfgetsだとchar型になりcharは256文字しか入らないようです…
どうしたら読み込みできるのでしょうか
1行に約4000文字,区切りで書かれたファイルがあり、これが1000行あります。
このファイルを1行ごとに別の配列に格納したいのですがfgetsだとchar型になりcharは256文字しか入らないようです…
どうしたら読み込みできるのでしょうか
251はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-Bw3Y)
2018/06/17(日) 12:21:49.68ID:w6bayl/C0252放置された蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd62-+ixL)
2018/06/17(日) 13:16:47.51ID:ETBxv0Nyd std::getline使え。
253デフォルトの名無しさん
2018/06/17(日) 14:34:42.11 C言語を通らずにいきなりC++を使う初学者は
fgetsやcharに触れるべからず
必ずラッパーライブラリを使うべし
fgetsやcharに触れるべからず
必ずラッパーライブラリを使うべし
254デフォルトの名無しさん (ワッチョイ 4234-3nod)
2018/06/17(日) 14:38:26.28ID:o/JM81cD0255デフォルトの名無しさん (ワッチョイ 99b3-Cu4h)
2018/06/17(日) 15:00:46.90ID:JVUiE6fQ0 >>247
C++風に考えるとstd::shared_ptrは必要なくなってくるけど、他の言語の真似をしようとすると、必要になるんだよな。
そしてC++は他の言語から呼び出されるから。
そういう部分で必要があるのかも。
C++風に考えるとstd::shared_ptrは必要なくなってくるけど、他の言語の真似をしようとすると、必要になるんだよな。
そしてC++は他の言語から呼び出されるから。
そういう部分で必要があるのかも。
256デフォルトの名無しさん (ワッチョイ 99b3-Cu4h)
2018/06/17(日) 15:03:38.90ID:JVUiE6fQ0 スレッド使う場合は、コピーのほうが速くないかよく考えた方が良い。
意外とコピーのほうが速い。
意外とコピーのほうが速い。
257デフォルトの名無しさん (ワッチョイ 45d2-Bw3Y)
2018/06/17(日) 15:29:58.46ID:GftzeAnS0 >>257
iostream 系のどんなところが失敗しているのですか?
iostream 系のどんなところが失敗しているのですか?
259デフォルトの名無しさん
2018/06/17(日) 16:15:29.34260デフォルトの名無しさん (ワッチョイ 027f-m0US)
2018/06/17(日) 17:04:58.59ID:WsbcFOTU0 たしかにiostreamはデストラクタで自動的にクローズしてくれるくらいしか
メリットが感じられないから、自分でファイル入出力クラス作ってるわ
メリットが感じられないから、自分でファイル入出力クラス作ってるわ
261デフォルトの名無しさん (ワッチョイ 45d2-Bw3Y)
2018/06/17(日) 17:21:05.94ID:GftzeAnS0 iostreamはC++のテンプレートクラスが未発達だったころの遺物だよ。STLに含まれない時点でお察しではあるが。
iostreamを使うよりもshared_ptrなどのスマートポインタでFILE*をラップしたテンプレートクラスを使うほうが現代的。
shared_ptr::shared_ptr<FILE>のコンストラクタで第二引数にfclose()を呼び出すdeleterオブジェクトを渡すだけで事足りる。
shared_ptr::shared_ptr<FILE>直使いもいいが、その派生クラスを使って暗黙のFILE*型キャスト演算子を実装すれば、Cコードとの移植性がさらに高まる。
あと、iostreamはios系の様々なフラグがあるが、煩雑で使い勝手が悪い。覚える価値ゼロ。
iostreamを使うよりもshared_ptrなどのスマートポインタでFILE*をラップしたテンプレートクラスを使うほうが現代的。
shared_ptr::shared_ptr<FILE>のコンストラクタで第二引数にfclose()を呼び出すdeleterオブジェクトを渡すだけで事足りる。
shared_ptr::shared_ptr<FILE>直使いもいいが、その派生クラスを使って暗黙のFILE*型キャスト演算子を実装すれば、Cコードとの移植性がさらに高まる。
あと、iostreamはios系の様々なフラグがあるが、煩雑で使い勝手が悪い。覚える価値ゼロ。
262デフォルトの名無しさん (ワッチョイ 99b3-Cu4h)
2018/06/17(日) 17:21:36.16ID:JVUiE6fQ0263261 (ワッチョイ 45d2-Bw3Y)
2018/06/17(日) 17:27:10.63ID:GftzeAnS0 訂正。
shared_ptr::shared_ptr<FILE> じゃなくて、shared_ptr<FILE>でした。
deleterサンプルは以下の通り
struct file_deleter { void operator() (FILE* fp) const {if (fp != NULL) { fclose(fp); } }};
shared_ptr<FILE> fp(fopen(filename, "r"), file_deleter());
// 以下、fp.get() でFILE*にアクセス。
shared_ptr::shared_ptr<FILE> じゃなくて、shared_ptr<FILE>でした。
deleterサンプルは以下の通り
struct file_deleter { void operator() (FILE* fp) const {if (fp != NULL) { fclose(fp); } }};
shared_ptr<FILE> fp(fopen(filename, "r"), file_deleter());
// 以下、fp.get() でFILE*にアクセス。
264デフォルトの名無しさん (ワッチョイ adf2-Bw3Y)
2018/06/17(日) 17:29:10.50ID:iFYzb9cl0 まあでも、明らかな失敗だったら auto_ptr や wstring_convert みたいにとっくに deprecated にされてるよね。
265デフォルトの名無しさん (ラクッペ MM61-ehQV)
2018/06/17(日) 17:41:30.52ID:BIBpmi0IM 全く理解出来ない
俺が低レベルなのか?
俺が低レベルなのか?
266デフォルトの名無しさん (ワッチョイ 45d2-Bw3Y)
2018/06/17(日) 17:54:24.16ID:GftzeAnS0 class FILE_Ptr : public ns_shared_ptr::shared_ptr<FILE> {
struct FILEDeleter {
void operator() (FILE* fp) const {
if (fp != NULL) {
fclose(fp);
}
}
};
public:
FILE_Ptr(FILE* fp = NULL) : ns_shared_ptr::shared_ptr<FILE>(fp, FILEDeleter()) {}
operator FILE* () { return get(); }
template<typename T> bool operator == (const T& obj) const { return get() == reinterpret_cast<FILE*>((void*)((intptr_t)obj)); }
template<typename T> bool operator != (const T& obj) const { return get() != reinterpret_cast<FILE*>((void*)((intptr_t)obj)); }
};
void fclose(ns_shared_ptr::shared_ptr<FILE>)
{
struct FILEDeleter {
void operator() (FILE* fp) const {
if (fp != NULL) {
fclose(fp);
}
}
};
public:
FILE_Ptr(FILE* fp = NULL) : ns_shared_ptr::shared_ptr<FILE>(fp, FILEDeleter()) {}
operator FILE* () { return get(); }
template<typename T> bool operator == (const T& obj) const { return get() == reinterpret_cast<FILE*>((void*)((intptr_t)obj)); }
template<typename T> bool operator != (const T& obj) const { return get() != reinterpret_cast<FILE*>((void*)((intptr_t)obj)); }
};
void fclose(ns_shared_ptr::shared_ptr<FILE>)
{
267デフォルトの名無しさん (ワッチョイ 45d2-Bw3Y)
2018/06/17(日) 17:59:57.67ID:GftzeAnS0 >>266を途中で送信してしまった。
ns_shared_ptrは、boostなりstdなりstd::tr1なり自分の好きな名前空間に置き換えを。以下のように。
namespace ns_shared_ptr = boost;
グローバル関数fclose(ns_shared_ptr::shared_ptr<FILE>& fp)を別途作れば、
Cのコードをコピペ利用した時のfclose(fp)多重呼び出しを防止できる。
ns_shared_ptrは、boostなりstdなりstd::tr1なり自分の好きな名前空間に置き換えを。以下のように。
namespace ns_shared_ptr = boost;
グローバル関数fclose(ns_shared_ptr::shared_ptr<FILE>& fp)を別途作れば、
Cのコードをコピペ利用した時のfclose(fp)多重呼び出しを防止できる。
268デフォルトの名無しさん (ワッチョイ 419f-bAWz)
2018/06/17(日) 18:09:36.34ID:DwTnzOB00 >>207,208
>>255,256
DOMの話か?500MBは言い過ぎだからとりあえず放置したが、
GC言語は基本的にshared_ptrの仕様だから、その実行エンジンの実装に使われるのは妥当だ。
これをサポートする為、shared_ptrは仕様上は必要だ、というのも同意する。
問題はそれがデータ構造として必要か、という点で、
DOMの場合、HTMLは共有無し/循環参照無しの単純な木だからunique_ptrだけで問題なく構成出来る。
ただしJavaScript側に捕まれている場合、ノードが木から取り除かれた場合にも保持し続けねばならず、
この実装にはshared_ptrを使わないと厳しいだろう。
しかしこれはデータ構造ではなく、JavaScriptの仕様が原因だ。
マルチスレッドのキャッシュについては、これは現時点でのハードウェアの問題で、
単純に言えば共有RAMに対して書き込みをすれば著しく遅くなるだけだ。
これはデータ構造の問題ではないので別に取り扱う必要がある。
(速度低下はshared_ptrの問題ではなく、キャッシュ構造起因)
データ構造について言うなら、shared_ptrの使いどころは、
1. 共有ノードがある
2. 循環参照はない
3. 動的に生成/消滅を頻繁に繰り返す
だと思うんだが、2の為にメッシュ構造とかは基本的にアウトで、
3も基本的にないだろ。
実はあんまり使いどころなくね?って話。
>>255,256
DOMの話か?500MBは言い過ぎだからとりあえず放置したが、
GC言語は基本的にshared_ptrの仕様だから、その実行エンジンの実装に使われるのは妥当だ。
これをサポートする為、shared_ptrは仕様上は必要だ、というのも同意する。
問題はそれがデータ構造として必要か、という点で、
DOMの場合、HTMLは共有無し/循環参照無しの単純な木だからunique_ptrだけで問題なく構成出来る。
ただしJavaScript側に捕まれている場合、ノードが木から取り除かれた場合にも保持し続けねばならず、
この実装にはshared_ptrを使わないと厳しいだろう。
しかしこれはデータ構造ではなく、JavaScriptの仕様が原因だ。
マルチスレッドのキャッシュについては、これは現時点でのハードウェアの問題で、
単純に言えば共有RAMに対して書き込みをすれば著しく遅くなるだけだ。
これはデータ構造の問題ではないので別に取り扱う必要がある。
(速度低下はshared_ptrの問題ではなく、キャッシュ構造起因)
データ構造について言うなら、shared_ptrの使いどころは、
1. 共有ノードがある
2. 循環参照はない
3. 動的に生成/消滅を頻繁に繰り返す
だと思うんだが、2の為にメッシュ構造とかは基本的にアウトで、
3も基本的にないだろ。
実はあんまり使いどころなくね?って話。
269デフォルトの名無しさん (ワッチョイ 45d2-Bw3Y)
2018/06/17(日) 18:14:03.26ID:GftzeAnS0 weak_ptr の使いどころを見極めるのが難しい。
271デフォルトの名無しさん (ワッチョイ 6e02-Bw3Y)
2018/06/17(日) 18:30:46.42ID:IIkN4spK0 iostreamを今、作り直すとしたらfilesystemやstring_viewも視野に入れなきゃね
272デフォルトの名無しさん (ワッチョイ edb6-5g47)
2018/06/17(日) 18:54:25.32ID:ipfkqsZ+0 ビジネスで優秀な人材育成する上司は何を教えているのか?
https://www.youtube.com/watch?v=apxtSqxjw08&t=13s
美容師の楽しさ再発見!やる気スイッチが入る働き方セミナー
https://www.youtube.com/watch?v=DGzXQT799oY
マクドナルド伝説の店長が教える、最強店長になるために必要なこと
https://www.youtube.com/watch?v=0wMbR7JIeeQ&t=3154s
『上司が伝えるべき 一番大切なこと』
https://www.youtube.com/watch?v=xsfJ-ZC42pQ&t=1199s
https://www.youtube.com/watch?v=apxtSqxjw08&t=13s
美容師の楽しさ再発見!やる気スイッチが入る働き方セミナー
https://www.youtube.com/watch?v=DGzXQT799oY
マクドナルド伝説の店長が教える、最強店長になるために必要なこと
https://www.youtube.com/watch?v=0wMbR7JIeeQ&t=3154s
『上司が伝えるべき 一番大切なこと』
https://www.youtube.com/watch?v=xsfJ-ZC42pQ&t=1199s
273デフォルトの名無しさん (ワッチョイ 45d2-Bw3Y)
2018/06/17(日) 19:38:39.93ID:GftzeAnS0 C++でよく使われる各オブジェクトのスタックサイズは以下の通り。
stringstreamとfstreamのサイズは無視できない大きさであることがわかるだろう。
・GCC - ubuntu Linux x64
(sizeof(std::stringstream), sizeof(std::fstream), sizeof(std::ostream), sizeof(std::string), sizeof(std::vector<std::string>), sizeof(FILE))=(392, 528, 272, 32, 24, 216)
・Visual Studio 2017 - Windows10 x64
(sizeof(std::stringstream), sizeof(std::fstream), sizeof(std::ostream), sizeof(std::string), sizeof(std::vector<std::string>), sizeof(FILE))=(248, 280, 112, 32, 24, 8)
stringstreamとfstreamのサイズは無視できない大きさであることがわかるだろう。
・GCC - ubuntu Linux x64
(sizeof(std::stringstream), sizeof(std::fstream), sizeof(std::ostream), sizeof(std::string), sizeof(std::vector<std::string>), sizeof(FILE))=(392, 528, 272, 32, 24, 216)
・Visual Studio 2017 - Windows10 x64
(sizeof(std::stringstream), sizeof(std::fstream), sizeof(std::ostream), sizeof(std::string), sizeof(std::vector<std::string>), sizeof(FILE))=(248, 280, 112, 32, 24, 8)
274デフォルトの名無しさん (ワッチョイ 99b3-Cu4h)
2018/06/17(日) 19:51:08.65ID:JVUiE6fQ0275デフォルトの名無しさん (ワッチョイ 99b3-Cu4h)
2018/06/17(日) 19:53:22.73ID:JVUiE6fQ0 >>268
ないよ。
ないよ。
276デフォルトの名無しさん
2018/06/17(日) 19:54:46.50 直近のスレを見れば分かるとおり、C++は複雑怪奇魑魅魍魎だから
プログラミング初学者が手を出したらヤケドしかしない
プログラミング初学者が手を出したらヤケドしかしない
277デフォルトの名無しさん (ワッチョイ 45d2-Bw3Y)
2018/06/17(日) 20:02:30.99ID:GftzeAnS0 勉強でヤケドする分には問題ないし、
むしろ沢山ヤケドして危険を避ける能力を身に着けるしかない。
実務でやったらアウトだが。
むしろ沢山ヤケドして危険を避ける能力を身に着けるしかない。
実務でやったらアウトだが。
278デフォルトの名無しさん (ワッチョイ 469f-cPc7)
2018/06/17(日) 20:41:28.94ID:dJUJdMR30 iostream 文句言われてるけど、atomic に動作するところは thread 並列環境では
そこそこ良いのでは?もちろんその分遅さが気になる場面もあるけど。
そこそこ良いのでは?もちろんその分遅さが気になる場面もあるけど。
279デフォルトの名無しさん (ワッチョイ 6e02-Bw3Y)
2018/06/17(日) 21:07:46.84ID:IIkN4spK0 iostreamは速度を全く期待せずに使うという
C++らしからぬ面を持ったものだ
sync_with_stdio? はははは
C++らしからぬ面を持ったものだ
sync_with_stdio? はははは
280デフォルトの名無しさん (ブーイモ MM62-Z/ei)
2018/06/17(日) 21:11:08.16ID:kJQS2F0bM 国際化に向かないのが致命的。
これだけで捨てる理由としては十分と思う。
これだけで捨てる理由としては十分と思う。
281放置された蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd62-+ixL)
2018/06/17(日) 21:48:20.12ID:ETBxv0Nyd MSVCのstd::arrayがC++11に準拠してくれればいいのに。使えねー。
言語レベルで区間チェックしてくれたら、データ破壊の場所がすぐにわかるのに。
言語レベルで区間チェックしてくれたら、データ破壊の場所がすぐにわかるのに。
282デフォルトの名無しさん (ブーイモ MM62-hu3a)
2018/06/17(日) 21:52:06.00ID:PyYPwpSkM スタティックライブラリAが別のスタティックライブラリBのAPIを使っている場合、ライブラリAにライブラリBをリンク、ビルドして、結果できたライブラリAだけをリンクして、実行ファイルを作る形式が良いでしょうか。
それともラリブラリA、ライブラリBを別々にリンク、ビルドして実行ファイルを作る形式が良いでしょうか。
それともラリブラリA、ライブラリBを別々にリンク、ビルドして実行ファイルを作る形式が良いでしょうか。
284デフォルトの名無しさん (ワッチョイ 469b-OQnn)
2018/06/17(日) 21:55:46.98ID:MR0PdhT00 後者しかできないような気がするんだけど
285デフォルトの名無しさん (ブーイモ MM62-Z/ei)
2018/06/17(日) 21:57:07.16ID:kJQS2F0bM >>281
msvcのat()関数は範囲チェックしないの?
msvcのat()関数は範囲チェックしないの?
286放置された蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 99b3-+ixL)
2018/06/17(日) 23:22:41.94ID:qOZiHDEK0 >>285
するけど、多数に生配列があって困難
するけど、多数に生配列があって困難
287はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-Bw3Y)
2018/06/18(月) 00:02:38.25ID:CYJOSJS20 iostream の替わりになるようなデファクトスタンダードが登場していない以上、
ほどほどに付き合っていくしか仕方がないよ。
C スタイルは普段から使うには抽象度が低くて面倒くさい。
printf は std::string を表示するのにさえいちいち c_str を通さなきゃならんのだからな。
書式指定との整合が型システムで保証されないのも古い設計だし。
処理系の方である程度は特別扱いすることで折り合いがついてるけど、
あらためて考えるとだいぶん不格好だと思う。
コンセプトやら何やらが導入されたらもうちょっとマシな入出力ライブラリが出来たりしないもんかね?
提案くらいは出てたりしない? って思ったけど、こないだ江添っちがTwitterで「無い」って言ってた気がする。
ほどほどに付き合っていくしか仕方がないよ。
C スタイルは普段から使うには抽象度が低くて面倒くさい。
printf は std::string を表示するのにさえいちいち c_str を通さなきゃならんのだからな。
書式指定との整合が型システムで保証されないのも古い設計だし。
処理系の方である程度は特別扱いすることで折り合いがついてるけど、
あらためて考えるとだいぶん不格好だと思う。
コンセプトやら何やらが導入されたらもうちょっとマシな入出力ライブラリが出来たりしないもんかね?
提案くらいは出てたりしない? って思ったけど、こないだ江添っちがTwitterで「無い」って言ってた気がする。
288デフォルトの名無しさん (ワントンキン MMe1-qG2Q)
2018/06/18(月) 01:00:03.25ID:5zfP7m4zM 現実的にはxmlなど標準的な形式のファイルを扱うライブラリを使うんで本当に低レベルなIOはどっちでもいい
289273 (ワッチョイ 45d2-Bw3Y)
2018/06/18(月) 06:12:18.90ID:q6319o4n0 >>274
iostreamは肝心な時に使えない橙武者です。
ログ出力するクラスは歌舞伎の黒衣のような慎ましい存在でなければならないのですが、
iostreamはあたかも歌舞伎の花形役者のようなオレ様的存在感を出すので好ましくありません。
実例をあげるならば障害発生した時に、ログ用途でiostream系を使うことがあり得えます。
cout やその他インスタンスが生成されてスタックを多く使うことになります。
つまり、実運用環境とログ埋込環境でメモリ構成が大きく異なる環境になってしまうことが避けられません。
iostreamはマルチスレッド環境など対話デバッグでは追跡しにくい現象をログ出力するのに適さない、と断言できます。
橙武者、黒衣など語の意味が分からない方は、ご自身でおググり下さい。
iostreamは肝心な時に使えない橙武者です。
ログ出力するクラスは歌舞伎の黒衣のような慎ましい存在でなければならないのですが、
iostreamはあたかも歌舞伎の花形役者のようなオレ様的存在感を出すので好ましくありません。
実例をあげるならば障害発生した時に、ログ用途でiostream系を使うことがあり得えます。
cout やその他インスタンスが生成されてスタックを多く使うことになります。
つまり、実運用環境とログ埋込環境でメモリ構成が大きく異なる環境になってしまうことが避けられません。
iostreamはマルチスレッド環境など対話デバッグでは追跡しにくい現象をログ出力するのに適さない、と断言できます。
橙武者、黒衣など語の意味が分からない方は、ご自身でおググり下さい。
290デフォルトの名無しさん (ワッチョイ 99b3-Cu4h)
2018/06/18(月) 08:25:55.66ID:Tb7Gp3zL0 io_contextで世界が変わる。
291デフォルトの名無しさん (ワッチョイ 99b3-Cu4h)
2018/06/18(月) 08:29:09.26ID:Tb7Gp3zL0 coutってアクセスするたびに生成するわけじゃないよね?
292デフォルトの名無しさん (ワッチョイ 99b3-Cu4h)
2018/06/18(月) 08:34:19.02ID:Tb7Gp3zL0 ツリートラバースするのに、再帰使うよりstd::deque使ったスタックのほうが速いな。
293デフォルトの名無しさん (ブーイモ MMb6-pMQN)
2018/06/18(月) 08:36:26.28ID:h2dlgwUxM >>291
グローバルオブジェクトとしてずっと存在してる
グローバルオブジェクトとしてずっと存在してる
294デフォルトの名無しさん (ワッチョイ ed83-m0US)
2018/06/18(月) 08:54:52.73ID:trIDsSoy0 内緒ですけどね。書式設定はprintfのほうがソースが見やすいですよ。
295デフォルトの名無しさん (ワッチョイ 8281-Bw3Y)
2018/06/18(月) 10:18:21.92ID:wfZWFdrV0 内緒な、約束だぞ
296デフォルトの名無しさん (ワッチョイ 45d2-Bw3Y)
2018/06/18(月) 11:02:34.48ID:q6319o4n0 「標準出力への書き込みは遅いから」との理由で、メモリ上にログをため込むことは多いかと思います。
iostream系だと stringstreamを使うことになりますがスタックサイズが割と大きくインスタンス生成のたびに時間もかかります。
さらにいえば、MSVCの場合、snprintf()に比べてstringstreamは書き込みに3倍弱時間がかかります。
本来ならば << 演算子はコンパイル時に型が決まるので書き込みが高速なはずなのですが、
MSVCだとstringstreamがsnprintf()に負ける有様ということです。
なお、Linux GCCの場合、snprintf()とstringstreamは書き込み速度の差は少ないようです。
iostream系だと stringstreamを使うことになりますがスタックサイズが割と大きくインスタンス生成のたびに時間もかかります。
さらにいえば、MSVCの場合、snprintf()に比べてstringstreamは書き込みに3倍弱時間がかかります。
本来ならば << 演算子はコンパイル時に型が決まるので書き込みが高速なはずなのですが、
MSVCだとstringstreamがsnprintf()に負ける有様ということです。
なお、Linux GCCの場合、snprintf()とstringstreamは書き込み速度の差は少ないようです。
297デフォルトの名無しさん (スップ Sd62-EDgZ)
2018/06/18(月) 15:29:29.80ID:jTAI4T/jd C++を完全に理解したんだけど、質問ある?
298デフォルトの名無しさん (スップ Sdc2-Gye4)
2018/06/18(月) 16:23:01.82ID:sXmIUJTyd CとC++で演算子の優先順位が異なる所があります
どこてしょう
もちろん両方に存在するものです
どこてしょう
もちろん両方に存在するものです
299デフォルトの名無しさん (ワッチョイ 4193-a7dz)
2018/06/18(月) 17:54:25.08ID:JbXTSK+P0300デフォルトの名無しさん (ワッチョイ ddc3-hrcC)
2018/06/18(月) 18:01:10.79ID:b7nHR37f0 C++の規格はCの規格を参照してるし、Cとの差異も規格の一部になってるので
C++の完全な理解の中に当然含まれる
C++の完全な理解の中に当然含まれる
301デフォルトの名無しさん (ワッチョイ 4223-PZZX)
2018/06/18(月) 18:31:36.77ID:xdRdwSco0 アホなので優先順位の違いはわからないけど、
if ((v=f()) == 0) を if ((v=f()) = 0) とタイポしたとき
c++ だとエラーにならず v が 0 になるのは嫌な感じ
if ((v=f()) == 0) を if ((v=f()) = 0) とタイポしたとき
c++ だとエラーにならず v が 0 になるのは嫌な感じ
302デフォルトの名無しさん (ワッチョイ c212-bAWz)
2018/06/18(月) 21:04:40.33ID:0cjK0izC0 if ( 0.equals(v=f()) )
こう書ければいい
こう書ければいい
303デフォルトの名無しさん (ワッチョイ c27c-TqnL)
2018/06/18(月) 21:06:09.32ID:wRZSUlvR0 Cでは代入式はその結果値が左辺値にはならないから v = 1 = 2 みたいな表現は通らない
C++では左辺値になるので通る
C++では左辺値になるので通る
304デフォルトの名無しさん (ワッチョイ 469b-OQnn)
2018/06/18(月) 21:21:29.41ID:Y3dlvOm10 昔定数を先に書くことで防げるって聞いたことがあるが
0=(v=f())
0=(v=f())
305デフォルトの名無しさん (ワッチョイ 4223-PZZX)
2018/06/18(月) 21:25:53.85ID:xdRdwSco0 昔からこういう==での判定は
if (S_OK == (result = someApi()) {...}
と定数左で書けという作法もあるけど、
流行らないのは見た目が実行順と逆みたいで妙だからかねえ
if (S_OK == (result = someApi()) {...}
と定数左で書けという作法もあるけど、
流行らないのは見た目が実行順と逆みたいで妙だからかねえ
306デフォルトの名無しさん (ドコグロ MM75-SMjQ)
2018/06/18(月) 22:22:09.13ID:6xVaOQgoM 〇〇=0 はあるけど 0=〇〇 は違和感しかないからなぁ
バッドノウハウの筆頭だと思う
バッドノウハウの筆頭だと思う
307デフォルトの名無しさん (スップ Sdc2-PZZX)
2018/06/18(月) 22:33:03.40ID:ejyTxCd5d 数学でも 0 = x^2 + 3x - 2 とかあまり書かないな
308デフォルトの名無しさん (ワッチョイ 469f-cPc7)
2018/06/18(月) 23:04:23.94ID:wJzzPYpc0 まあそんなクソな書き方するくらいならテストコード書けやって話にはなるわな。
309デフォルトの名無しさん (ワッチョイ 929e-PCgz)
2018/06/19(火) 00:49:41.47ID:kQ8CSRFN0310デフォルトの名無しさん (ワッチョイ ad2d-QRh3)
2018/06/19(火) 00:56:21.64ID:jJOU+tvI0 バッドノウハウ……かなぁ…?
定数を左に書く利点は テストより手軽にコンパイルエラーで止められる事だから
個人的には採用してるんだけど
int i = 0;
/* 想定した挙動 */
if ((i = 0) == 0) { printf("%i\n", i); } /* 定数 右: 出力 "0" */
if (0 == (i = 0)) { printf("%i\n", i); } /* 定数 左: 出力 "0" */
/* typo! == -> = */
if ((i = 0) = 0) { printf("%i\n", i); } /* !!! printfが実行されない! (Cでは通らない) */
if (0 = (i = 0)) { printf("%i\n", i); } /* コンパイルが通ら*ない* 助かった! */
/* () 忘れ */
if ( i = 0 == 0) { printf("%i\n", i); } /* !!! 出力 "1" (== (0 == 0) == true) 想定外! */
if (0 == i = 0 ) { printf("%i\n", i); } /* コンパイルが通ら*ない* 助かった! */
そもそも1文字の打ち間違いなんて テストコードの記述そのものでもやりかねないし
(「絶対に間違えない!」なんていう人がいたらコードどころか作文も書いたことない奴ですぜ)
まあ使用が推奨/禁止されてるかはチームに従うとして
ぱっと見で意図が解るようにはしておくとよいかと
定数を左に書く利点は テストより手軽にコンパイルエラーで止められる事だから
個人的には採用してるんだけど
int i = 0;
/* 想定した挙動 */
if ((i = 0) == 0) { printf("%i\n", i); } /* 定数 右: 出力 "0" */
if (0 == (i = 0)) { printf("%i\n", i); } /* 定数 左: 出力 "0" */
/* typo! == -> = */
if ((i = 0) = 0) { printf("%i\n", i); } /* !!! printfが実行されない! (Cでは通らない) */
if (0 = (i = 0)) { printf("%i\n", i); } /* コンパイルが通ら*ない* 助かった! */
/* () 忘れ */
if ( i = 0 == 0) { printf("%i\n", i); } /* !!! 出力 "1" (== (0 == 0) == true) 想定外! */
if (0 == i = 0 ) { printf("%i\n", i); } /* コンパイルが通ら*ない* 助かった! */
そもそも1文字の打ち間違いなんて テストコードの記述そのものでもやりかねないし
(「絶対に間違えない!」なんていう人がいたらコードどころか作文も書いたことない奴ですぜ)
まあ使用が推奨/禁止されてるかはチームに従うとして
ぱっと見で意図が解るようにはしておくとよいかと
311デフォルトの名無しさん (ワッチョイ 929e-PCgz)
2018/06/19(火) 01:23:19.66ID:kQ8CSRFN0312303 (ワッチョイ c27c-TqnL)
2018/06/19(火) 01:34:04.88ID:6qgw6hGx0 すまんかった >>303 は "v = 1 = 2 みたいな" ではなくて "(v = 1) = 2 みたいな"
括弧忘れたら結合順が変わってしまう 訂正
括弧忘れたら結合順が変わってしまう 訂正
313デフォルトの名無しさん (ワッチョイ 99b3-Cu4h)
2018/06/19(火) 03:10:51.39ID:WKXXm+ar0 統合開発環境ってEmacsのことだっけ。
314デフォルトの名無しさん (ワッチョイ ed83-m0US)
2018/06/19(火) 05:39:20.97ID:1GZ30pc10 EmacsのせいでUNIXはDOSに負けたんだっけ。
315デフォルトの名無しさん (ワッチョイ 99b3-Cu4h)
2018/06/19(火) 05:50:29.80ID:WKXXm+ar0 単体テスト書くと処理時間出るから、何に時間かかってるのかわかっていいよね。
316デフォルトの名無しさん (ワッチョイ 99b3-Cu4h)
2018/06/19(火) 05:52:35.58ID:WKXXm+ar0 やはり一番時間がかかるのはIOだから、IO少なくするのが一番よさそう。
std::vectorなんか全体コピーしても余裕の速さだから気にする必要なかったんや。
std::vectorなんか全体コピーしても余裕の速さだから気にする必要なかったんや。
317デフォルトの名無しさん (ワッチョイ ed83-m0US)
2018/06/19(火) 06:19:41.06ID:1GZ30pc10 楽な仕事で羨ましい限りです。
318デフォルトの名無しさん (ワッチョイ 6e5b-Bw3Y)
2018/06/19(火) 06:25:19.55ID:QGodAC8c0 IゾーンとOゾーンに時間をかけるのは楽しいじゃん
319デフォルトの名無しさん (ドコグロ MM0a-SMjQ)
2018/06/19(火) 08:27:18.57ID:eWtmWHlOM >>310
まさか真顔で言ってないよね?
まさか真顔で言ってないよね?
320デフォルトの名無しさん (ワッチョイ ed83-m0US)
2018/06/19(火) 09:20:33.15ID:1GZ30pc10 >>319
まじかよ。おまえ真顔じゃないか。
まじかよ。おまえ真顔じゃないか。
321デフォルトの名無しさん (スップ Sd62-Gye4)
2018/06/19(火) 10:45:51.92ID:x0u1iMAyd 世の中いろんなコーディングルールがある
ifの中は副作用のあるコード禁止とか
goto禁止とか
3項演算子禁止とか
1個の関数は○○行以内とか
変数名は○○文字以内とか
実際に業務で書かない人が決めたりするからたちが悪い
ifの中は副作用のあるコード禁止とか
goto禁止とか
3項演算子禁止とか
1個の関数は○○行以内とか
変数名は○○文字以内とか
実際に業務で書かない人が決めたりするからたちが悪い
322はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-Bw3Y)
2018/06/19(火) 11:00:52.67ID:2U1bfNZa0 if の条件式の中で代入することは勧められない書き方だと思うけど、
「言語仕様に照らして完全に正しいけど間違いやすい書き方」にいちいち警告を出されるとうんざりする。
オプションで強めのチェックにしたときならともかく、デフォルトでだぞ。
かといって個別に警告の有効・無効のオプションを書くのも面倒くさいしなぁ。
「言語仕様に照らして完全に正しいけど間違いやすい書き方」にいちいち警告を出されるとうんざりする。
オプションで強めのチェックにしたときならともかく、デフォルトでだぞ。
かといって個別に警告の有効・無効のオプションを書くのも面倒くさいしなぁ。
323デフォルトの名無しさん (ブーイモ MM6d-nvpi)
2018/06/19(火) 14:29:42.98ID:mTWnJSOLM324デフォルトの名無しさん (ワッチョイ 99b3-Cu4h)
2018/06/19(火) 15:21:42.83ID:eYArWI+v0 テスト書けば防げるよ。
325デフォルトの名無しさん
2018/06/19(火) 17:52:06.99 自動的に静的チェックツールかけとけば教えてくれるよ
326デフォルトの名無しさん (ワッチョイ 45d2-Bw3Y)
2018/06/19(火) 18:32:24.93ID:QaAZlBtz0 関数の戻り値を保存した一時変数を使わなかっただけで警告出されるのは地味につらい。かといって警告を抑止するのも悩ましい。
以下のような感じ。
void test()
{
int foo = bar();
return;
}
以下のような感じ。
void test()
{
int foo = bar();
return;
}
327デフォルトの名無しさん (ワッチョイ 4104-PCgz)
2018/06/19(火) 18:38:40.93ID:+lctr4fi0 コメントアウトしておくべし
328デフォルトの名無しさん (ワッチョイ 4104-PCgz)
2018/06/19(火) 18:41:58.17ID:+lctr4fi0 じゃなくて・・・、BARのreturnにブレークポイントだ。
VSのばあいだけど。
そんな出口の多い構造で大丈夫か。
VSのばあいだけど。
そんな出口の多い構造で大丈夫か。
329デフォルトの名無しさん (ワッチョイ 067f-s84n)
2018/06/19(火) 19:08:38.86ID:SpwZyN6M0 よくわからんのだが使わんものをなんで残しとくのん?
330デフォルトの名無しさん (ワントンキン MM92-qG2Q)
2018/06/19(火) 19:13:07.65ID:qQKHLYhfM331デフォルトの名無しさん (ワッチョイ ad8a-pk7F)
2018/06/19(火) 19:42:43.55ID:B+3+LOal0 副作用の試験モジュール
332デフォルトの名無しさん (ワッチョイ 4223-PZZX)
2018/06/19(火) 20:12:16.04ID:j1n9w5rn0 副作用ありの関数で成功失敗その他を戻り値で返すのはごく普通にあることでは。
333デフォルトの名無しさん (ワッチョイ 4150-Gye4)
2018/06/19(火) 20:16:56.98ID:1co3DhsP0 だな
334デフォルトの名無しさん (ワッチョイ 4150-Gye4)
2018/06/19(火) 20:18:42.19ID:1co3DhsP0 >>328
barのソースが無いのかも
barのソースが無いのかも
335デフォルトの名無しさん (ワッチョイ 45d2-Bw3Y)
2018/06/19(火) 20:25:15.24ID:QaAZlBtz0 このスレは、「風邪をひいたんだがどうしたらいい?」との相談に「風邪をひくな」と真顔で回答する良スレですね。
336デフォルトの名無しさん (ワッチョイ 45d2-Bw3Y)
2018/06/19(火) 20:51:33.23ID:QaAZlBtz0 相談する時は、「なんでそんなところ行ったんだ」などと“そもそも論”を始めて責任所在の確定に情熱を傾ける後ろ向きで生産性ゼロの人に相談することは避けなければならない。
これが私の設問の真意。以下が回答。
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\ItemTemplates\VC\Windows Store\1041\BasicPage\BasicPage.xaml.cpp:97
(void) sender; // 未使用のパラメーター
これが私の設問の真意。以下が回答。
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\ItemTemplates\VC\Windows Store\1041\BasicPage\BasicPage.xaml.cpp:97
(void) sender; // 未使用のパラメーター
337デフォルトの名無しさん (ワッチョイ 6e5b-Bw3Y)
2018/06/19(火) 21:00:15.56ID:QGodAC8c0 >>321
同感
同感
338デフォルトの名無しさん (スップ Sdc2-Gye4)
2018/06/19(火) 21:00:53.62ID:EaS+ZlKPd Visual Studioなら不要な警告を非表示に出来るだろ
340326 (ワッチョイ 45d2-Bw3Y)
2018/06/19(火) 21:03:09.63ID:QaAZlBtz0 補足すると、マクロ定義によって戻り値が使われなくなることがある場合の警告を想定。
>>336 であげた BasicPage.xaml.cppの事例は厳密には関数の仮引数を使わない場合の警告なので若干違うが、対処法は同じ。
#define OUTPUT(x)
void test()
{
int foo = bar();
OUTPUT(foo);
(void)foo;
return;
}
>>336 であげた BasicPage.xaml.cppの事例は厳密には関数の仮引数を使わない場合の警告なので若干違うが、対処法は同じ。
#define OUTPUT(x)
void test()
{
int foo = bar();
OUTPUT(foo);
(void)foo;
return;
}
341デフォルトの名無しさん (スップ Sdc2-Gye4)
2018/06/19(火) 21:04:45.12ID:EaS+ZlKPd 性的解析ツールだな
342デフォルトの名無しさん (ワッチョイ 99b3-Cu4h)
2018/06/19(火) 21:12:21.11ID:eYArWI+v0 >>339
そのコードにエフェクトがあるならテストできるのではないでしょうか。
そのコードにエフェクトがあるならテストできるのではないでしょうか。
343デフォルトの名無しさん
2018/06/19(火) 21:18:56.08 >>339
そういうのはコンパイル時にWarning出るから本線にマージする前には見つかるでしょ
そういうのはコンパイル時にWarning出るから本線にマージする前には見つかるでしょ
344デフォルトの名無しさん (ワッチョイ 8281-Bw3Y)
2018/06/19(火) 21:20:27.84ID:r5hOFOzd0 変数で戻り値を受けとって使わないって言うのは確かに変だが
戻り値がある関数の戻り値を受けとらないって言うのは問題無いのか?
戻り値がある関数の戻り値を受けとらないって言うのは問題無いのか?
346デフォルトの名無しさん (ワッチョイ 42b3-SMjQ)
2018/06/19(火) 21:29:13.02ID:bLc4VOsi0 >>345
それ単体テストやればカバレージ100%にならないから容易に検出できるだろ
それ単体テストやればカバレージ100%にならないから容易に検出できるだろ
347デフォルトの名無しさん (ワッチョイ 067f-s84n)
2018/06/19(火) 21:38:33.29ID:SpwZyN6M0348デフォルトの名無しさん (ワッチョイ 4223-PZZX)
2018/06/19(火) 21:42:40.31ID:j1n9w5rn0 >>339
if (buf = 0) { A }
・buf がゼロの時 A が実行されないと実行結果(出力など)が正しい結果にならない場合
・bufが非ゼロでここでゼロにされると以下同文
この2つの場合は結果がおかしいからテストで見つかる。
結果は正しいが見つけにくいリークが発生するとか
ここ間違えても結果は(常にではないが)多くの場合正しい
とかだと静的/動的カバレッジで見るしかないね。
if (buf = 0) { A }
・buf がゼロの時 A が実行されないと実行結果(出力など)が正しい結果にならない場合
・bufが非ゼロでここでゼロにされると以下同文
この2つの場合は結果がおかしいからテストで見つかる。
結果は正しいが見つけにくいリークが発生するとか
ここ間違えても結果は(常にではないが)多くの場合正しい
とかだと静的/動的カバレッジで見るしかないね。
349デフォルトの名無しさん (スップ Sdc2-Gye4)
2018/06/19(火) 21:43:57.04ID:EaS+ZlKPd 俺の中のうざい警告
使わない引数、変数、関数の警告
セキュリティ関連
演算にカッコを付けろという警告
使わない引数、変数、関数の警告
セキュリティ関連
演算にカッコを付けろという警告
350デフォルトの名無しさん
2018/06/19(火) 21:50:59.42 非適合コード: a = a + b + c;
適合コード: a = ( a + b ) + c;
適合コード: a = ( a + b ) + c;
351デフォルトの名無しさん (ワッチョイ 4223-PZZX)
2018/06/19(火) 21:52:07.12ID:j1n9w5rn0 >>349
>演算にカッコを付けろという警告
メンテしてるアプリのソース内のMD5だか sha だかのコード(問題なく動作中)で
「&とシフトの優先順位わかってんのか?括弧つけたら?」の警告が出るが、
&とシフトの優先順位など知る気もないし書き換えるとバグる気しかしないので放置している。
>演算にカッコを付けろという警告
メンテしてるアプリのソース内のMD5だか sha だかのコード(問題なく動作中)で
「&とシフトの優先順位わかってんのか?括弧つけたら?」の警告が出るが、
&とシフトの優先順位など知る気もないし書き換えるとバグる気しかしないので放置している。
352デフォルトの名無しさん (ワッチョイ ddc3-hrcC)
2018/06/19(火) 23:06:43.31ID:j3AUln/x0 セキュリティ警告無視する人とは仕事したくない
353デフォルトの名無しさん (ワッチョイ 42eb-m0US)
2018/06/19(火) 23:42:48.11ID:Ac6XacCG0 質問です
std::unique_ptrはデストラクタで保持するリソースの解放処理を行うので、自明なデストラクタを持つことが出来ず、リテラル型になることが出来ないと思うのですが
デフォルトコンストラクタとnullptrを受けるコンストラクタはconstexpr指定されています、このconstexprにはどういう意味があるのでしょうか?
std::unique_ptrはデストラクタで保持するリソースの解放処理を行うので、自明なデストラクタを持つことが出来ず、リテラル型になることが出来ないと思うのですが
デフォルトコンストラクタとnullptrを受けるコンストラクタはconstexpr指定されています、このconstexprにはどういう意味があるのでしょうか?
354デフォルトの名無しさん (スップ Sd62-PZZX)
2018/06/20(水) 00:16:23.94ID:ai7I58Bid >>353
https://stackoverflow.com/questions/30766103/why-declare-constrexpr-constructors-for-classes-with-non-trivial-destructors-e/30766445#30766445
によれば
constexpr でないコンストラクタよりも先に(恐らくはコンパイル時に静的に)初期化されるので、
例えばグローバル変数
foo apple;
unique_prt<T> orange;
とあるとき
初期化順を気にせず apple のコンストラクターの中で orange を使用することが出来る。
https://stackoverflow.com/questions/30766103/why-declare-constrexpr-constructors-for-classes-with-non-trivial-destructors-e/30766445#30766445
によれば
constexpr でないコンストラクタよりも先に(恐らくはコンパイル時に静的に)初期化されるので、
例えばグローバル変数
foo apple;
unique_prt<T> orange;
とあるとき
初期化順を気にせず apple のコンストラクターの中で orange を使用することが出来る。
355デフォルトの名無しさん (ワッチョイ 42eb-m0US)
2018/06/20(水) 01:00:54.85ID:PR6OT2JV0356デフォルトの名無しさん (ワッチョイ ff9d-E6HK)
2018/06/21(木) 04:41:53.49ID:G2MjnjmO0 Scopeのついた#defineのような書き方ってないのでしょうか?
たとえば Uart0.baud 115200を変数としてしてじゃなくてDefineで保持しておきたい
場合にScopeを整理しておきたい。
たとえば Uart0.baud 115200を変数としてしてじゃなくてDefineで保持しておきたい
場合にScopeを整理しておきたい。
357デフォルトの名無しさん (ワッチョイ 9fd2-GwbS)
2018/06/21(木) 07:10:33.64ID:Grok3vuS0 template<int baud> class Uart0 {
358デフォルトの名無しさん (アウアウカー Sa93-tQU5)
2018/06/21(木) 08:23:50.96ID:iolQTPDna >>356
C++では#defineではなくconstを使うと習いました
C++では#defineではなくconstを使うと習いました
359デフォルトの名無しさん (ブーイモ MM0f-aHC/)
2018/06/21(木) 08:30:36.61ID:L/t8iXOTM 先生!プリプロセッサで完結する処理もconstを使うのですか?
360デフォルトの名無しさん (ワッチョイ ff9d-E6HK)
2018/06/21(木) 08:52:37.07ID:G2MjnjmO0 Constはラムに配置されますからダメですよ。
それからTemplateは型を変数にしたい場合につかえるだけです。Scopeのついた
定数がないとすると、、、、、なんか使いにくいですね。
それからTemplateは型を変数にしたい場合につかえるだけです。Scopeのついた
定数がないとすると、、、、、なんか使いにくいですね。
361デフォルトの名無しさん (ワッチョイ 1f23-WzrY)
2018/06/21(木) 09:17:30.93ID:lqJXL95H0 enum
static const
static const
362デフォルトの名無しさん (ワッチョイ 9fd2-GwbS)
2018/06/21(木) 10:14:08.56ID:Grok3vuS0 名前空間 にconst定数を閉じ込めて、スコープ内で using namespace xxx; を宣言して名前空間を明示せずに定数にアクセス。
363デフォルトの名無しさん (ワッチョイ 9f83-DJU/)
2018/06/21(木) 10:38:55.31ID:7g4G/GMb0 defineをconstに書き換えるぐらいなら別の言語使いますよね。
364デフォルトの名無しさん (ワッチョイ 1f7f-GwbS)
2018/06/21(木) 10:43:19.88ID:1tnpfBql0 今どきdefine使ってる奴なんていたらクビだわ
365デフォルトの名無しさん (ワッチョイ 9f83-DJU/)
2018/06/21(木) 10:55:24.84ID:7g4G/GMb0 クビにできる立場の人がソースコードチェックしてる会社なんですね。労組がないとかただの派遣屋ですね^^
366デフォルトの名無しさん (スップ Sd9f-WzrY)
2018/06/21(木) 11:52:28.73ID:pthrcCRVd 整数に関しては遥か昔から enum がスコープ付き定数として使われてただろ
367デフォルトの名無しさん (ブーイモ MM9f-yRyg)
2018/06/21(木) 12:34:10.47ID:Oz+pq3ApM >>360
組み込み向けとかでROM実行になっていなければ、どちらもRAMに配置されると思うよ。
もしもコンパイル時解決するかどうかということであれば、constでもちゃんとコンパイル時解決されるし、式(含関数)の場合はconstexprキーワードを使えばコンパイル時解決(可能なら)される。
あと、templateは型だけでなく定数も置けるよ。
組み込み向けとかでROM実行になっていなければ、どちらもRAMに配置されると思うよ。
もしもコンパイル時解決するかどうかということであれば、constでもちゃんとコンパイル時解決されるし、式(含関数)の場合はconstexprキーワードを使えばコンパイル時解決(可能なら)される。
あと、templateは型だけでなく定数も置けるよ。
368デフォルトの名無しさん (スップ Sd1f-ddCb)
2018/06/21(木) 12:49:18.77ID:m6fyxFJ7d 考えるべきなのは2つ
コードの即値として使われるのか
値がある番地にマッピングされるのか
その都度関数コールで解決するのか
と
マッピングされる場合、どのセクションにマッピングされるのか
コードの即値として使われるのか
値がある番地にマッピングされるのか
その都度関数コールで解決するのか
と
マッピングされる場合、どのセクションにマッピングされるのか
369デフォルトの名無しさん (ワッチョイ 9fd2-GwbS)
2018/06/21(木) 13:52:00.91ID:Grok3vuS0 const定数は ヘッダーファイルで宣言するだけではダメでソースファイルでconst定数の実体を初期化しなければならないので、defineより使い勝手が悪い面もある。
最新のC/C++だとその辺どうなってんの?
最新のC/C++だとその辺どうなってんの?
370デフォルトの名無しさん (ワッチョイ 9f83-DJU/)
2018/06/21(木) 13:56:06.62ID:7g4G/GMb0 処理系依存させずソースレベルで終わらしたい。
371デフォルトの名無しさん (ワッチョイ 7f23-WzrY)
2018/06/21(木) 13:59:26.98ID:S4IxNo+10 >>369
メンバ変数でも数値ならソース側に定義要らないから
struct SimpleMath {
const static int pi = 3;
};
でいい
実体がたくさんできるのを苦にしなければ
namespace n {
const static int pi=3;
};
でもいいし
メンバ変数でも数値ならソース側に定義要らないから
struct SimpleMath {
const static int pi = 3;
};
でいい
実体がたくさんできるのを苦にしなければ
namespace n {
const static int pi=3;
};
でもいいし
372デフォルトの名無しさん (ワッチョイ 7f23-WzrY)
2018/06/21(木) 14:03:31.13ID:S4IxNo+10 >>369
関連してついでに言うとよほど古いコンパイラじゃなければ
struct T {
int k=0;
};
というメンバ変数の初期化の書き方もできて
複数のコンストラクタがあるときとか楽できるよ
関連してついでに言うとよほど古いコンパイラじゃなければ
struct T {
int k=0;
};
というメンバ変数の初期化の書き方もできて
複数のコンストラクタがあるときとか楽できるよ
373デフォルトの名無しさん (スップ Sd1f-ddCb)
2018/06/21(木) 14:33:40.53ID:m6fyxFJ7d >>371
ゆとり乙
ゆとり乙
374デフォルトの名無しさん (スップ Sd9f-RZ3s)
2018/06/21(木) 15:05:26.80ID:JKhrQo7xd >>326
(void)bar()
(void)bar()
375デフォルトの名無しさん (スップ Sd1f-ddCb)
2018/06/21(木) 15:15:08.56ID:m6fyxFJ7d376デフォルトの名無しさん (ワッチョイ 7f34-MNXm)
2018/06/21(木) 16:24:46.01ID:n4WYHGZ/0 実体が沢山出来るとか馬鹿かテメーは
それが事実ならリンク時にエラー大量発生しとるわ
それが事実ならリンク時にエラー大量発生しとるわ
377デフォルトの名無しさん (ワッチョイ 7f23-WzrY)
2018/06/21(木) 16:39:35.71ID:S4IxNo+10378デフォルトの名無しさん (ワッチョイ 7f23-WzrY)
2018/06/21(木) 16:40:51.05ID:S4IxNo+10 ほら試してやったぞ
アドレスが違うから2個あるのがわかるだろ?
MacBook-Pro:tmp$ cat a.h
namespace a {
static const int b = 8;
};
MacBook-Pro:tmp$ cat a0.cpp
#include <cstdio>
#include "a.h"
extern void foo();
int main() {
foo();
printf("main %lx\n", (long) &a::b);
}
MacBook-Pro:tmp$ cat a1.cpp
#include <cstdio>
#include "a.h"
void foo() {
printf("foo %lx\n", (long) &a::b);
}
MacBook-Pro:tmp$ c++ a0.cpp a1.cpp
MacBook-Pro:tmp$ ./a.out
foo 10925bfb0
main 10925bfac
アドレスが違うから2個あるのがわかるだろ?
MacBook-Pro:tmp$ cat a.h
namespace a {
static const int b = 8;
};
MacBook-Pro:tmp$ cat a0.cpp
#include <cstdio>
#include "a.h"
extern void foo();
int main() {
foo();
printf("main %lx\n", (long) &a::b);
}
MacBook-Pro:tmp$ cat a1.cpp
#include <cstdio>
#include "a.h"
void foo() {
printf("foo %lx\n", (long) &a::b);
}
MacBook-Pro:tmp$ c++ a0.cpp a1.cpp
MacBook-Pro:tmp$ ./a.out
foo 10925bfb0
main 10925bfac
379デフォルトの名無しさん (ワッチョイ 9f83-DJU/)
2018/06/21(木) 16:46:33.44ID:7g4G/GMb0 マカーのくせにC++使ってんじゃねぇ。
380デフォルトの名無しさん (ワッチョイ 7f23-WzrY)
2018/06/21(木) 16:50:45.19ID:S4IxNo+10 ソース中で(アドレスは使われず)値しか用いられなければ実体が全く作られない可能性もあるが
オブジェクトファイル見なきゃ確認できなくて面倒だからそれは略
オブジェクトファイル見なきゃ確認できなくて面倒だからそれは略
381はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff6f-GwbS)
2018/06/21(木) 16:58:48.07ID:kxxiYbMo0 クラステンプレートにしておけば (そして型引数が同じであれば) リンクのときにインスタンスが統合されるので、それを利用できるかもね。
382デフォルトの名無しさん (ワッチョイ 7f23-WzrY)
2018/06/21(木) 17:00:11.80ID:S4IxNo+10383デフォルトの名無しさん (ワッチョイ 7f34-MNXm)
2018/06/21(木) 17:07:19.43ID:n4WYHGZ/0384デフォルトの名無しさん (ワッチョイ 7f23-WzrY)
2018/06/21(木) 17:27:13.58ID:S4IxNo+10385デフォルトの名無しさん (ワッチョイ 7f34-MNXm)
2018/06/21(木) 17:36:33.91ID:n4WYHGZ/0 >>384
出ねぇよ馬鹿かテメーは変数と扱い違ぇんだよ
出ねぇよ馬鹿かテメーは変数と扱い違ぇんだよ
386デフォルトの名無しさん (スップ Sd1f-ddCb)
2018/06/21(木) 17:49:19.83ID:m6fyxFJ7d #defineが一番確実
最適化も一番期待できるしCとの互換性も保てる
ってことでいまだに#defineは使う
スコープ問題は昔ながらのプレフィックスで解決
小さな組み込みマイコンだと
C++でもこんな感じ
最適化も一番期待できるしCとの互換性も保てる
ってことでいまだに#defineは使う
スコープ問題は昔ながらのプレフィックスで解決
小さな組み込みマイコンだと
C++でもこんな感じ
387デフォルトの名無しさん (ワッチョイ 9fc3-loLi)
2018/06/21(木) 17:54:20.05ID:z6qVeoOj0 と、クソ雑魚老害がさえずってます
せめてenumにしろよ雑魚
せめてenumにしろよ雑魚
388デフォルトの名無しさん (ワッチョイ 1fb3-RzAk)
2018/06/21(木) 17:54:46.47ID:RX0X5VqW0 フリースタンディング環境の話をこっそり忍ばせてくる技の名前なんだったっけ。
389デフォルトの名無しさん (スップ Sd1f-ddCb)
2018/06/21(木) 18:03:41.90ID:m6fyxFJ7d 逆に値を変えても1バイトしか変わって欲しくないときや
1バイトを無理やり変えると動作が正しく変わってほしいとき
は番地に割り当てられるようにする
PCプログラムしか書いたことがない人は気にしたことも無いだろうけど
1バイトを無理やり変えると動作が正しく変わってほしいとき
は番地に割り当てられるようにする
PCプログラムしか書いたことがない人は気にしたことも無いだろうけど
390デフォルトの名無しさん (ワッチョイ 1f50-ddCb)
2018/06/21(木) 18:09:49.54ID:Mgrb3Kbk0 #defineアレルギー
gotoアレルギー
printfアレルギー
この板には多い
gotoアレルギー
printfアレルギー
この板には多い
391デフォルトの名無しさん (ワッチョイ 7f81-GwbS)
2018/06/21(木) 18:59:05.50ID:bCLvNhPr0 mainと言う文字列見ると、猛烈に指先がかゆくなる
392デフォルトの名無しさん (ワンミングク MMdf-aHC/)
2018/06/21(木) 19:10:53.21ID:pTjgD9kkM WinMain
393デフォルトの名無しさん (ワッチョイ 9fc3-loLi)
2018/06/21(木) 20:50:48.63ID:z6qVeoOj0 _tmain
394デフォルトの名無しさん (ワッチョイ 9f83-DJU/)
2018/06/21(木) 23:04:20.73ID:7g4G/GMb0 もはやドライバ書くときしかC++使わないし、最近のC++機能は全部いらね
老害とか言ってる奴の用途なんて元々、JavaやC#で十分だろ
老害とか言ってる奴の用途なんて元々、JavaやC#で十分だろ
395デフォルトの名無しさん (アウアウカー Sa93-x6qn)
2018/06/22(金) 00:11:53.23ID:SAq8bqNQa 内容あまり理解してないがconstexprは論外なのか
396デフォルトの名無しさん (ワッチョイ 7f34-MNXm)
2018/06/22(金) 00:24:42.97ID:JUnpVDzH0 定数意外の計算(変数なんかが含まれる)とコンパイルエラーになる。
397デフォルトの名無しさん (ワッチョイ 7f34-MNXm)
2018/06/22(金) 00:28:24.33ID:JUnpVDzH0 constexprは関数が返す内容が定数であることを保証する
コンパイル時はインラインでその関数を走らせて順次定数に置き換えてコンパイルが行われるということだ
コンパイル時はインラインでその関数を走らせて順次定数に置き換えてコンパイルが行われるということだ
398デフォルトの名無しさん (ワッチョイ ff9b-QY3V)
2018/06/22(金) 00:31:25.00ID:/HdPI0MA0 コンパイル時定数ということですよな
399デフォルトの名無しさん (アウアウカー Sa93-x6qn)
2018/06/22(金) 00:33:52.46ID:SAq8bqNQa constexprは変数も定義可能だから今回の内容なら名前空間にconstexpr変数を定義すればokかなと思ってたり...
400デフォルトの名無しさん (ワッチョイ 7f34-MNXm)
2018/06/22(金) 00:34:25.67ID:JUnpVDzH0 まあそういうこったな
どんだけ糞長い関数書こうとその関数を呼び出した時点で定数に置換されてコンパイルされる
どんだけ糞長い関数書こうとその関数を呼び出した時点で定数に置換されてコンパイルされる
401デフォルトの名無しさん (ワッチョイ 9fbd-iJxt)
2018/06/22(金) 00:47:02.44ID:bQfSOVA40 >>396
それc++11
それc++11
402デフォルトの名無しさん (ワッチョイ 1f50-ddCb)
2018/06/22(金) 01:46:46.25ID:Hssdw/9K0 constexprだけど計算にとても時間がかかる場合はどうなるんだろう
延々とコンパイルが終わらないとかエラーになるとか勝手に実行時解決になるとか?
延々とコンパイルが終わらないとかエラーになるとか勝手に実行時解決になるとか?
403デフォルトの名無しさん (ワッチョイ 1fb3-RzAk)
2018/06/22(金) 03:26:28.59ID:0qBHNE4T0 constexprで学習した結果のみ実行時に用いるAI。
404デフォルトの名無しさん (ワッチョイ ff9d-E6HK)
2018/06/22(金) 03:36:59.17ID:1CqwlerO0 結論が出たようなのでまとめる
1.#defineは欠点が多い。スコープが効かないのでC++では基本的に使わないこと。
2.代わりにconstexprを使う。constexprは、汎用的に定数式を表現するための機能である。
constexprは、「constant expression (定数式)」の略語である。
例1
#define BIT(n) (1<<n)
これは汎用性が高いので書き換える必要はないようにも思えるが、正しくは
constexpr int BIT(int n){ return 1 << n; }
このように書かなければならない。
例2
#define UART_A0_baud (115200)
#define UART_A0_stop (1)
#define UART_A0_bit (8)
#define UART_A0_parity (0)
#define UART_A1_baud (9600)
#define UART_A1_stop (2)
#define UART_A1_bit (8)
#define UART_A1_parity (1)
これをconstexpr を使って綺麗に書いてみよう。任せる。
1.#defineは欠点が多い。スコープが効かないのでC++では基本的に使わないこと。
2.代わりにconstexprを使う。constexprは、汎用的に定数式を表現するための機能である。
constexprは、「constant expression (定数式)」の略語である。
例1
#define BIT(n) (1<<n)
これは汎用性が高いので書き換える必要はないようにも思えるが、正しくは
constexpr int BIT(int n){ return 1 << n; }
このように書かなければならない。
例2
#define UART_A0_baud (115200)
#define UART_A0_stop (1)
#define UART_A0_bit (8)
#define UART_A0_parity (0)
#define UART_A1_baud (9600)
#define UART_A1_stop (2)
#define UART_A1_bit (8)
#define UART_A1_parity (1)
これをconstexpr を使って綺麗に書いてみよう。任せる。
405デフォルトの名無しさん (ワッチョイ 7fe9-RUNk)
2018/06/22(金) 03:50:55.40ID:2mqIozuo0 C++書けるやつはかっこいいな-
ただ俺が書こうとしてないだけだけど
ただ俺が書こうとしてないだけだけど
406デフォルトの名無しさん (ワッチョイ 9f83-DJU/)
2018/06/22(金) 04:53:39.22ID:6eBOmsiI0 >>404
お断り致します。
お断り致します。
407いちるいなんがずっとだしおっかけてついてくるし (ワッチョイ 1f76-lC4z)
2018/06/22(金) 06:11:32.65ID:kyYAMp480 でふぁいん てんてきのしんにゅう がちょくじゃないから あんしんするじゃないかな
めいんすとりーとからいっぽんはいったほうが
めいんすとりーとからいっぽんはいったほうが
408デフォルトの名無しさん (ワッチョイ 1f76-lC4z)
2018/06/22(金) 06:13:05.67ID:kyYAMp480
409デフォルトの名無しさん (ワッチョイ 1f76-lC4z)
2018/06/22(金) 06:15:15.42ID:kyYAMp480 カチグミニチカイホウガアブナイヨネここはあんぜんしゅうだんすとーかーにとっては
てんごく あんじゅうのち
てんごく あんじゅうのち
410デフォルトの名無しさん (アウアウウー Sae3-E6HK)
2018/06/22(金) 06:44:34.82ID:1fAWv7Tna411デフォルトの名無しさん (ブーイモ MM0f-mx2r)
2018/06/22(金) 07:48:57.63ID:jUqm4dE5M412デフォルトの名無しさん (ワッチョイ 9fd2-GwbS)
2018/06/22(金) 08:37:19.28ID:PS4w2oBw0413デフォルトの名無しさん (スップ Sd1f-ddCb)
2018/06/22(金) 08:58:31.90ID:bJNd9Nrpd414デフォルトの名無しさん (スップ Sd1f-ddCb)
2018/06/22(金) 09:02:09.74ID:bJNd9Nrpd415デフォルトの名無しさん (アウアウカー Sa93-x6qn)
2018/06/22(金) 10:38:03.07ID:Hg4H5zqra >>413 そこは即値をconstexprにしようぜ。
416デフォルトの名無しさん (ワッチョイ 9f8a-1M3p)
2018/06/22(金) 11:05:51.83ID:VkaCaqwn0 >>404
constexprならunsignedじゃなくても平気なのかな?
constexprならunsignedじゃなくても平気なのかな?
417デフォルトの名無しさん (ワッチョイ 7f23-eNWv)
2018/06/22(金) 14:23:31.03ID:0acoPbmK0 >>385
リンカの挙動に付いては変数と扱いが違うせいじゃなくて
c++ では const 変数はデフォルトで static なくだけだよ
お前は正しい指摘をしている時でさえ必ず間違ったことを言う
このスレ読んでる人に嘘ついて喜んでる愉快犯か何かか
リンカの挙動に付いては変数と扱いが違うせいじゃなくて
c++ では const 変数はデフォルトで static なくだけだよ
お前は正しい指摘をしている時でさえ必ず間違ったことを言う
このスレ読んでる人に嘘ついて喜んでる愉快犯か何かか
418デフォルトの名無しさん (スプッッ Sd1f-SNrP)
2018/06/22(金) 14:25:48.43ID:oyBTubw6d 現代においてdefineを使う利点がゼロ
419デフォルトの名無しさん (ワッチョイ 7f34-MNXm)
2018/06/22(金) 14:31:22.11ID:JUnpVDzH0 は?constをヘッダにstaticで定義しているバカが居たことに驚きなんだが
そりゃstaticで定義しまくったら実体増えるのは当たり前だろ
灯台下暗しでstatic記述するバカに気付かなかったわ
バカ過ぎて話にならんわw
そりゃstaticで定義しまくったら実体増えるのは当たり前だろ
灯台下暗しでstatic記述するバカに気付かなかったわ
バカ過ぎて話にならんわw
420デフォルトの名無しさん (ワッチョイ 9fd2-GwbS)
2018/06/22(金) 15:00:35.31ID:PS4w2oBw0 >>419
おっしゃることは確かにもっともなことですが、basic_string::npos についてはどう思われますか?
おっしゃることは確かにもっともなことですが、basic_string::npos についてはどう思われますか?
421デフォルトの名無しさん (ワッチョイ 9fd2-GwbS)
2018/06/22(金) 15:42:10.39ID:PS4w2oBw0 なお、std::dec, std::hex なども static const。
422デフォルトの名無しさん (ワッチョイ 7f34-MNXm)
2018/06/22(金) 16:52:29.77ID:JUnpVDzH0 クラス変数は統合されるから問題ない
ネームスペースやグローバルのヘッダに書くstatic constと違って
ネームスペースやグローバルのヘッダに書くstatic constと違って
423デフォルトの名無しさん (ワッチョイ 7f7e-09r9)
2018/06/22(金) 17:43:30.82ID:m8knQ0QO0 constexprをご存知でない人多すぎでは
入門書に1ページおきにこれを使えと書いてあるだろ
入門書に1ページおきにこれを使えと書いてあるだろ
424デフォルトの名無しさん (ワッチョイ 1fb3-RzAk)
2018/06/22(金) 18:20:27.94ID:0qBHNE4T0 一行おきになってから考える。
425デフォルトの名無しさん (スップ Sd1f-ddCb)
2018/06/22(金) 18:26:09.27ID:0px4TqJVd426デフォルトの名無しさん (ワッチョイ 9fd2-GwbS)
2018/06/22(金) 19:10:51.02ID:PS4w2oBw0 >>422
クラス変数に統合されるとなぜ問題ないのですか?
そもそも統合とはどういう状態でしょうか。
ネームスペースにstatic constを書くのとあまり違いはないように思うのですが、どう違うのか教えてもらえませんでしょうか。
クラス変数に統合されるとなぜ問題ないのですか?
そもそも統合とはどういう状態でしょうか。
ネームスペースにstatic constを書くのとあまり違いはないように思うのですが、どう違うのか教えてもらえませんでしょうか。
427デフォルトの名無しさん (ワッチョイ ffeb-DJU/)
2018/06/22(金) 19:55:42.32ID:lkE7eBJS0 static constexprにするかstatic inlineにするかテンプレートクラスに書けば実体はただ一つになると思う
普通に書いたら分裂しそう
普通に書いたら分裂しそう
428デフォルトの名無しさん (アウアウカー Sa93-x6qn)
2018/06/22(金) 20:14:28.16ID:Hg4H5zqra cとの互換性を無視した場合のdefineの利点てあるのですか?
429デフォルトの名無しさん (ワッチョイ 7f7e-09r9)
2018/06/22(金) 20:16:52.97ID:m8knQ0QO0 >>425
プロはinline変数を使う
プロはinline変数を使う
430デフォルトの名無しさん (ワッチョイ 7f7e-09r9)
2018/06/22(金) 20:18:39.50ID:m8knQ0QO0 >>428
ソースコードをプリプロセスしたいときに使う
ソースコードをプリプロセスしたいときに使う
431デフォルトの名無しさん (ワッチョイ ffeb-DJU/)
2018/06/22(金) 21:16:15.28ID:lkE7eBJS0 >>428
Boost.Preprocessor
Boost.Preprocessor
432デフォルトの名無しさん (ワッチョイ ff0d-GwbS)
2018/06/22(金) 21:16:32.93ID:sLKAbUw90 ___
/彡彡))
|彡( >
ノノノ ヽ丿 <プロでござい
/ ̄ ̄ ̄\ n_
`/| _[]_ |/\ ( )
∧||バ| Y\ `/ /
\||カ| | \_/
(|  ̄ ̄ |
|____|
||_|i|_||
| ー|ー |
/彡彡))
|彡( >
ノノノ ヽ丿 <プロでござい
/ ̄ ̄ ̄\ n_
`/| _[]_ |/\ ( )
∧||バ| Y\ `/ /
\||カ| | \_/
(|  ̄ ̄ |
|____|
||_|i|_||
| ー|ー |
>>429
かならずインラインになる保証はないのでは?
かならずインラインになる保証はないのでは?
434デフォルトの名無しさん (ワッチョイ 9fd2-GwbS)
2018/06/22(金) 22:04:30.10ID:PS4w2oBw0435デフォルトの名無しさん (ワッチョイ ff0d-GwbS)
2018/06/22(金) 22:08:08.24ID:sLKAbUw90 マニピュレータは関数だぜ?
436デフォルトの名無しさん (ワッチョイ 7fd2-XQuB)
2018/06/22(金) 23:02:52.73ID:tZy0W+/k0 まじめにデザインパターンを学習したくて書籍を探しているのですが、Javaで
説明しているものばかりで困っています。Javaは全く知りませんし、覚えるつ
もりもありません(自分にとっては不要な言語なので)。
C++でデザインパターンを開設している書籍を教えてください。
説明しているものばかりで困っています。Javaは全く知りませんし、覚えるつ
もりもありません(自分にとっては不要な言語なので)。
C++でデザインパターンを開設している書籍を教えてください。
437デフォルトの名無しさん (ブーイモ MM0f-yRyg)
2018/06/22(金) 23:09:45.00ID:UnfZkoNcM >>436
gofっていうわりとデザパタに詳しい人も本出してるから探してみて。
gofっていうわりとデザパタに詳しい人も本出してるから探してみて。
438デフォルトの名無しさん (ワッチョイ 7f7e-09r9)
2018/06/22(金) 23:40:54.94ID:m8knQ0QO0 サンプルがJavaで書いてあるかどうかって関係あるか?
デザパタの本ならJava特有のことはやってないはず
何をやっているのかを理解してそれをそのまま他の言語に当てはめればいい
デザパタの本ならJava特有のことはやってないはず
何をやっているのかを理解してそれをそのまま他の言語に当てはめればいい
439デフォルトの名無しさん (ワッチョイ ffeb-DJU/)
2018/06/22(金) 23:42:29.99ID:lkE7eBJS0440デフォルトの名無しさん (ワッチョイ 9f83-DJU/)
2018/06/22(金) 23:44:18.08ID:6eBOmsiI0 C++は反則技が多すぎるので勉強しても無駄。
常に速度やメモリ効率を重視するための言語。
高級言語でOOしたいなら素直にJavaを使うべし。
常に速度やメモリ効率を重視するための言語。
高級言語でOOしたいなら素直にJavaを使うべし。
441デフォルトの名無しさん (ワッチョイ 7fe9-RUNk)
2018/06/22(金) 23:49:32.69ID:2mqIozuo0 反則技って言える位は覚えたい
442デフォルトの名無しさん (ワッチョイ 9fd2-GwbS)
2018/06/22(金) 23:49:39.28ID:PS4w2oBw0 今日日、Java使うくらいならPythonを使うんじゃないの。
443デフォルトの名無しさん (ワッチョイ 7fe9-RUNk)
2018/06/22(金) 23:50:46.45ID:2mqIozuo0 IDがPS4って凄いなw
444デフォルトの名無しさん (ワッチョイ 7f7e-09r9)
2018/06/22(金) 23:59:07.23ID:m8knQ0QO0 JavaとPythonとC++って全部用途が違うじゃん
Javaと競合してるのはC#
Javaと競合してるのはC#
446デフォルトの名無しさん (ワッチョイ ff9d-E6HK)
2018/06/23(土) 02:15:46.97ID:nmsTY6vF0 C#やJavaが動くのにC++を使うのは辛い。非常につらい。絶対にやめたい。にも拘らず
未だにC++を進める人がいるのは残念だ。
一方C++は組み込みには非常に威力を発揮する。しかし組み込みではいまだに90%
の人がCを使う。それはなぜなのか?
CとC++ではスッポンと月ほどの違いがある。しかし残念ながらそれは
C++をフルに使える場合であって、フルに使える場合ならC#やJAVAを使った方がいいわけで
フルに使えないケースであるからこそ、C++を使うのが正しいのであるから、やはりC++は
Cに比べて月ほどではない。しいて言えば月というよりは牛だろう。ともすれば牛よりも
スッポン料理が高価なように、月になれるのに牛ではやはりかなり残念なのである。
どういう切り口でも残念な言語、それがC++だ。
未だにC++を進める人がいるのは残念だ。
一方C++は組み込みには非常に威力を発揮する。しかし組み込みではいまだに90%
の人がCを使う。それはなぜなのか?
CとC++ではスッポンと月ほどの違いがある。しかし残念ながらそれは
C++をフルに使える場合であって、フルに使える場合ならC#やJAVAを使った方がいいわけで
フルに使えないケースであるからこそ、C++を使うのが正しいのであるから、やはりC++は
Cに比べて月ほどではない。しいて言えば月というよりは牛だろう。ともすれば牛よりも
スッポン料理が高価なように、月になれるのに牛ではやはりかなり残念なのである。
どういう切り口でも残念な言語、それがC++だ。
447デフォルトの名無しさん (ワッチョイ ff9d-E6HK)
2018/06/23(土) 02:24:54.31ID:nmsTY6vF0 C++開発をした人がC++の本を書いていて、先輩に「読め!!!」と勧められたので読んで
みたが非常にわかり難い。こんな頭の構造をした人が作った言語だからきっとわかり難いの
だろうと思う。一言でいうと簡単なことを複雑に説明する。
C++という言語もアフォほど簡単なことをやたらと複雑に書かなければならないことが多い
という気がする。
みたが非常にわかり難い。こんな頭の構造をした人が作った言語だからきっとわかり難いの
だろうと思う。一言でいうと簡単なことを複雑に説明する。
C++という言語もアフォほど簡単なことをやたらと複雑に書かなければならないことが多い
という気がする。
448デフォルトの名無しさん (ワッチョイ ff9d-E6HK)
2018/06/23(土) 02:33:48.53ID:nmsTY6vF0 Headerファイルにメソッドを書かないスタイルは誤りだ。
理由
1.C++以外でそんなスタイルをとっているものはない。
2.なぜならメソッドも実体ではなく型だからだ。分離するメリットはないがデメリットは多い。
理由
1.C++以外でそんなスタイルをとっているものはない。
2.なぜならメソッドも実体ではなく型だからだ。分離するメリットはないがデメリットは多い。
449デフォルトの名無しさん (ワッチョイ 7f7e-09r9)
2018/06/23(土) 02:37:32.71ID:gROM9xFw0 >>446
コピペかと思ったけど違うのか
何でC#を使うべきケースとC++を使うべきケースを分けられない人が出てくるんだ?
インタープリタやC#やらがクソ簡単に書けるのはその下で煩わしいことをやってくれてる人がいるからだ
コピペかと思ったけど違うのか
何でC#を使うべきケースとC++を使うべきケースを分けられない人が出てくるんだ?
インタープリタやC#やらがクソ簡単に書けるのはその下で煩わしいことをやってくれてる人がいるからだ
450デフォルトの名無しさん (ワッチョイ 9f83-DJU/)
2018/06/23(土) 04:45:24.98ID:lx9rCNA70 最近の勘違いしたアホ機能テンコ盛りのC++。なんでも書けますよ。
451デフォルトの名無しさん (アウアウカー Sa93-x6qn)
2018/06/23(土) 07:07:27.53ID:CK76JyQna c++が複雑なのはわかるがどんどん簡単に書けるように進歩してるだろ。
autoとかrange-based for loopとかconstexprとかlambdaとか。
他の言語並みに簡単に書けるようになるのはまだまだかかるとは思うが。
autoとかrange-based for loopとかconstexprとかlambdaとか。
他の言語並みに簡単に書けるようになるのはまだまだかかるとは思うが。
452デフォルトの名無しさん (ワッチョイ 9f83-DJU/)
2018/06/23(土) 07:42:27.22ID:lx9rCNA70 使う気ないですけどね。速度が速くならないならいらないです。
使い捨て、楽したいならC#で十分ですからね。
使い捨て、楽したいならC#で十分ですからね。
453デフォルトの名無しさん (ワッチョイ 7fb3-MaHJ)
2018/06/23(土) 08:22:04.68ID:v6rjk3zs0 >>449
相手するなよ...
相手するなよ...
454デフォルトの名無しさん (ワッチョイ ff9d-E6HK)
2018/06/23(土) 08:39:12.93ID:nmsTY6vF0 >>412
簡潔で綺麗だ。素晴らしいと思う。
簡潔で綺麗だ。素晴らしいと思う。
455デフォルトの名無しさん (ワッチョイ 9f83-DJU/)
2018/06/23(土) 08:41:28.05ID:lx9rCNA70 仕事で自作テンプレートライブラリ持ち込む奴
456デフォルトの名無しさん (アウアウカー Sa93-x6qn)
2018/06/23(土) 09:33:31.56ID:PbtB7OZPa >>454
今どきはtypedefじゃなくてusingだしconstは実体が増えるからconstexprにするべきだと思うのだがどうだろう?
今どきはtypedefじゃなくてusingだしconstは実体が増えるからconstexprにするべきだと思うのだがどうだろう?
457デフォルトの名無しさん (ワッチョイ 9fd2-GwbS)
2018/06/23(土) 09:54:36.74ID:t78XQUz20 セットする値に singned int の範囲しか使わないなら、static const 定数じゃなくて enum でOK。
enum なら constexpr すら要らない。
enum なら constexpr すら要らない。
458デフォルトの名無しさん (ワッチョイ ff0d-GwbS)
2018/06/23(土) 10:18:46.59ID:ONikHNCn0 enum baseってlong long使えないんだっけ?
459デフォルトの名無しさん (ラクッペ MM33-4k5+)
2018/06/23(土) 14:50:53.84ID:b8MqWubcM >>455
関数作るのと同じだろうが
関数作るのと同じだろうが
460デフォルトの名無しさん (ワッチョイ 1fb3-RzAk)
2018/06/23(土) 14:54:46.34ID:hRKVQ4t10 >>444
Javaは高価な機器を買わせるためにデザインされた言語だから用途が違うけど、他はソフトウェアを作るためでは?
Javaは高価な機器を買わせるためにデザインされた言語だから用途が違うけど、他はソフトウェアを作るためでは?
461デフォルトの名無しさん (ワッチョイ 7f7e-09r9)
2018/06/23(土) 15:24:45.97ID:gROM9xFw0 普通に書いてればテンプレートだらけになると思うが
462デフォルトの名無しさん (ワッチョイ ffeb-DJU/)
2018/06/23(土) 16:11:30.67ID:jodQHKSv0 C++やるのにテンプレート使わないなんてただのマゾプレイ
463デフォルトの名無しさん (スップ Sd1f-ddCb)
2018/06/23(土) 16:14:12.23ID:b0QIE6qXd 小規模マイコンのソフト開発なんて
全てがマゾプレイみたいなもんだから
それでもCよりはC++の方が便利
全てがマゾプレイみたいなもんだから
それでもCよりはC++の方が便利
464デフォルトの名無しさん (ワッチョイ 7fb3-MaHJ)
2018/06/23(土) 16:53:02.33ID:v6rjk3zs0465デフォルトの名無しさん (ワッチョイ 7f5e-lC4z)
2018/06/23(土) 18:08:17.77ID:JrW4+gjv0 Expression templateでmatrix乗算、それが無理ならベクトルの内積
(それもコンパイル時計算じゃなくてコンパイラの遅延評価を利用して
一種の構文を記憶したもの)を計算するETを解説してるところしらないかな。
ベクトルのETによる遅延評価計算はC++テンプレートテクニックあるから
いいけどさ。
Matrixがわからんのよ。uBLAS、MET、TVMET探してもそれらしきソースコード
が特定できん。
(それもコンパイル時計算じゃなくてコンパイラの遅延評価を利用して
一種の構文を記憶したもの)を計算するETを解説してるところしらないかな。
ベクトルのETによる遅延評価計算はC++テンプレートテクニックあるから
いいけどさ。
Matrixがわからんのよ。uBLAS、MET、TVMET探してもそれらしきソースコード
が特定できん。
466デフォルトの名無しさん (ワッチョイ 7f5e-lC4z)
2018/06/23(土) 18:40:25.11ID:JrW4+gjv0 Expression templateは本命じゃない。難しすぎる。でも演算子オーバーロードの
弱点である一時オブジェクトによるロス(a*aみたいな乗算も含めて)を解決する
方法を20年以上前に考えたけど、それと速度を比較したい。
弱点である一時オブジェクトによるロス(a*aみたいな乗算も含めて)を解決する
方法を20年以上前に考えたけど、それと速度を比較したい。
467デフォルトの名無しさん (ワッチョイ 9fbd-yRyg)
2018/06/23(土) 19:33:03.44ID:uP340TqJ0468デフォルトの名無しさん (アウアウカー Sa93-x6qn)
2018/06/23(土) 19:55:21.62ID:PbtB7OZPa ユニバーサル参照で一時オブジェクトの問題は片付く?
469デフォルトの名無しさん (ワッチョイ 9f83-DJU/)
2018/06/23(土) 22:07:20.78ID:lx9rCNA70 >>461 ←こういう車輪の再発明ばかりしてる奴
470デフォルトの名無しさん (ワッチョイ 7f7e-09r9)
2018/06/23(土) 22:20:28.61ID:gROM9xFw0 レゴブロックしたいなら別の言語使えば
471デフォルトの名無しさん (スップ Sd9f-ddCb)
2018/06/23(土) 22:23:40.91ID:V32XRqjBd 売ってる車輪の中から探すよりも作った方が早かったり安かったりぴったりな車輪になったりする
472デフォルトの名無しさん (ワッチョイ 9fbd-yRyg)
2018/06/23(土) 22:49:55.46ID:uP340TqJ0 アプリ次第じゃね。
数値計算やアルゴリズムやってると、リソース、速度、必要精度に応じて、整数、浮動小数点、多倍長整数、有理数等々に対応できるように作るから、むしろテンプレしかない。
数値計算やアルゴリズムやってると、リソース、速度、必要精度に応じて、整数、浮動小数点、多倍長整数、有理数等々に対応できるように作るから、むしろテンプレしかない。
473デフォルトの名無しさん (ワッチョイ 9f83-DJU/)
2018/06/23(土) 22:54:31.33ID:lx9rCNA70 >>470
うまい。プログラムがテンプレートだらけになってる奴は必死にマイレゴブロックを作ってる。
stl、boost、atl、既成レゴブロックは数多く提供され使われてるのだ。
そんなに理想の車輪がほしければ、
それこそ新言語を作ればいい。C++にアホ機能追加してる糞どもに言いたい。
うまい。プログラムがテンプレートだらけになってる奴は必死にマイレゴブロックを作ってる。
stl、boost、atl、既成レゴブロックは数多く提供され使われてるのだ。
そんなに理想の車輪がほしければ、
それこそ新言語を作ればいい。C++にアホ機能追加してる糞どもに言いたい。
474デフォルトの名無しさん (ブーイモ MM9f-yRyg)
2018/06/23(土) 23:04:46.58ID:rU1CNnzWM >>473
C++03を使い続けたいのなら使ってもいいんよ。
C++03を使い続けたいのなら使ってもいいんよ。
475デフォルトの名無しさん (ワッチョイ 7f7e-09r9)
2018/06/23(土) 23:07:53.81ID:gROM9xFw0 >>473
何言ってるのかわからん
stlやboostはブロックを作るための材料くらいの位置づけだぞ
テンプレートがstlのような比較的低レイヤーなところでしか使わないとでも思ってるのか
レゴブロックと言ってるのは大量のモジュールを読み込んで継ぎ接ぎしてるようなJSやPythonのコードのことだ
何言ってるのかわからん
stlやboostはブロックを作るための材料くらいの位置づけだぞ
テンプレートがstlのような比較的低レイヤーなところでしか使わないとでも思ってるのか
レゴブロックと言ってるのは大量のモジュールを読み込んで継ぎ接ぎしてるようなJSやPythonのコードのことだ
476デフォルトの名無しさん (ワッチョイ 7f7f-DJU/)
2018/06/23(土) 23:35:33.86ID:pv6hhTrX0 うちの会社にもなんでもテンプレで作りたがる奴いるけど、
調べたらほとんどのテンプレが一種類の型でしか使われてなかったw
調べたらほとんどのテンプレが一種類の型でしか使われてなかったw
477デフォルトの名無しさん (ワッチョイ 1f50-ddCb)
2018/06/23(土) 23:40:58.66ID:UiVIxiJp0478デフォルトの名無しさん (ワッチョイ 7f7e-09r9)
2018/06/23(土) 23:42:14.75ID:gROM9xFw0 そして変更に弱いコードが量産されて最後にはお手上げになると
親の顔より見たわ
親の顔より見たわ
479デフォルトの名無しさん (ワッチョイ 9f83-DJU/)
2018/06/23(土) 23:45:15.10ID:lx9rCNA70480デフォルトの名無しさん (アウアウカー Sa93-x6qn)
2018/06/24(日) 00:00:56.36ID:pIbsbhjra 全否定する機能てなんだ?なんか追加されたか?
481デフォルトの名無しさん (ワッチョイ 7f7e-09r9)
2018/06/24(日) 00:03:37.09ID:l/Tfpprp0 提案書を読めば分かるが基本的には問題点を解決するためのものばかりなはずだがな
482デフォルトの名無しさん (ワッチョイ ff9f-qEcp)
2018/06/24(日) 00:09:19.32ID:5X6JCb050 クソみたいな汎用化はいいからまずは一つの機能の関数をまともに書けと言いたくなるバカは確かにいる。
483デフォルトの名無しさん (ワッチョイ 9f83-DJU/)
2018/06/24(日) 00:13:58.88ID:rLugm4Eu0 それ。C++は当初から問題ある欠陥言語だから、素晴らしい新しい言語を作るべき。
古い大量のコードはもうどうにもならない。誰も更新費用の予算を計上してくれない。
COBOLと同じなのだ。老人のおれはC++と心中する。
おまえら若者は新しい船で新しい世界に旅立ってくれ。俺の屍を越えてゆけ。
古い大量のコードはもうどうにもならない。誰も更新費用の予算を計上してくれない。
COBOLと同じなのだ。老人のおれはC++と心中する。
おまえら若者は新しい船で新しい世界に旅立ってくれ。俺の屍を越えてゆけ。
484デフォルトの名無しさん (ワッチョイ 9fbd-yRyg)
2018/06/24(日) 00:28:09.48ID:tdPdwIDr0485デフォルトの名無しさん (ワッチョイ 7f7e-09r9)
2018/06/24(日) 00:36:07.50ID:l/Tfpprp0 C++に取って代わろうとした言語はみんな死んだか別の路線を走ってるよ
486デフォルトの名無しさん (アウアウウー Sae3-E6HK)
2018/06/24(日) 00:46:53.92ID:f93Q4KExa 老人はC++03と心中してくれ。俺はC++14以降の船に乗る。
>>486
スマートポインタは使わせてほしいのですが…
スマートポインタは使わせてほしいのですが…
488デフォルトの名無しさん (ワッチョイ 7f7e-09r9)
2018/06/24(日) 01:14:35.71ID:l/Tfpprp0 vectorをスマポとして使え
489デフォルトの名無しさん (ワッチョイ 1fb3-RzAk)
2018/06/24(日) 01:41:30.34ID:AKYv/9KI0 vectorはdata()が連続した領域を返さないといけないのが大きな制約になってるかも。
490デフォルトの名無しさん (ワッチョイ ff0d-GwbS)
2018/06/24(日) 05:38:04.07ID:NxOKC53L0 それがなくなったら、もはや配列ではない
配列を使うべき用途で出番を失う
配列を使うべき用途で出番を失う
491デフォルトの名無しさん (アウアウカー Sa93-x6qn)
2018/06/24(日) 07:10:53.13ID:7AsRASisa 一応連続した領域を返すと保証されたのはc++03から
492デフォルトの名無しさん (ワッチョイ 7f7e-09r9)
2018/06/24(日) 08:02:00.62ID:l/Tfpprp0 保証されてくれないと困るから保証されるようになったんだぞ
493デフォルトの名無しさん (ワッチョイ 1f50-ddCb)
2018/06/24(日) 08:22:28.59ID:lrwvyFHq0 >>484
テンプレートは魔法じゃない
同等の速度を出す為には結局全て特殊化することになるし、
インターフェースも型によって違う方が良いこともある
性能、リソース、...
突き詰めれば全て特殊化
テンプレートは妥協だ
テンプレートは魔法じゃない
同等の速度を出す為には結局全て特殊化することになるし、
インターフェースも型によって違う方が良いこともある
性能、リソース、...
突き詰めれば全て特殊化
テンプレートは妥協だ
494デフォルトの名無しさん (アウアウカー Sa93-x6qn)
2018/06/24(日) 08:42:27.47ID:5mcMpyana 妥協というより補助だろう。
templateだけで解決しようとすれば特殊化だらけになるのは当たり前の事
templateだけで解決しようとすれば特殊化だらけになるのは当たり前の事
495デフォルトの名無しさん (ワッチョイ 9fd2-GwbS)
2018/06/24(日) 09:08:30.29ID:6XPmSU1L0 cstdio と STLの連携を深めて欲しいね。
・FILE* に basic_string をバッファとして渡してメモリに読み書きする機能が欲しい。
・fgets() で得られた文字列長を再計算するコストが無駄なので、文字列長も取得できる機能拡張関数が欲しい。
何らかの処理の過程で副産物として得た文字列長を捨てて、別の場所で文字列長を再計算する無駄は、かなり多いと思う。
・FILE* に basic_string をバッファとして渡してメモリに読み書きする機能が欲しい。
・fgets() で得られた文字列長を再計算するコストが無駄なので、文字列長も取得できる機能拡張関数が欲しい。
何らかの処理の過程で副産物として得た文字列長を捨てて、別の場所で文字列長を再計算する無駄は、かなり多いと思う。
496デフォルトの名無しさん (ワッチョイ 7f7e-09r9)
2018/06/24(日) 10:13:59.40ID:l/Tfpprp0498デフォルトの名無しさん (ワッチョイ 9fd2-GwbS)
2018/06/24(日) 10:27:08.87ID:6XPmSU1L0 >>496
FILE*を使う関数にbasic_stringをc_str()で渡すのではなく、
setvbuf() のようにFILE*の内部で使うバッファを basic_string に置き換える意味で言いました。
fprintf() でbasic_stringに書き込むことが可能になるイメージ。
C++にはpopen()で開いたパイプFILE*に相当するiostreamがないのでこれで代用可能。
FILE*を使う関数にbasic_stringをc_str()で渡すのではなく、
setvbuf() のようにFILE*の内部で使うバッファを basic_string に置き換える意味で言いました。
fprintf() でbasic_stringに書き込むことが可能になるイメージ。
C++にはpopen()で開いたパイプFILE*に相当するiostreamがないのでこれで代用可能。
499デフォルトの名無しさん (ワッチョイ ffeb-DJU/)
2018/06/24(日) 10:50:12.04ID:koljFhYX0 >>497
コンパイル時にテンプレートパラメータでポリモーフィズムする
コンパイル時にテンプレートパラメータでポリモーフィズムする
>>499
template を使ってのポインタがポリモーフィズムを実現できるとは思えないのですが…
template を使ってのポインタがポリモーフィズムを実現できるとは思えないのですが…
501デフォルトの名無しさん (ワッチョイ 9fd2-GwbS)
2018/06/24(日) 11:03:14.75ID:6XPmSU1L0 templateはポリモーフィズムの実装ではなくポリモーフィズムの利用が仕事。
502デフォルトの名無しさん (ワッチョイ ff7f-j2pL)
2018/06/24(日) 12:14:29.94ID:RRt1KIRA0 ポリモーフィズムの意味が分かってないだけだろ
503デフォルトの名無しさん (ワッチョイ 7f7e-09r9)
2018/06/24(日) 12:56:28.50ID:l/Tfpprp0 >>497
ポリモーフィズム=継承ではない
継承もポリモーフィズムを実現するための手法の一つにすぎない
ざっくり言えば同じ名前で異なった振る舞いをするもののことを言う
関数オーバーロードもポリモーフィズム
ポリモーフィズム=継承ではない
継承もポリモーフィズムを実現するための手法の一つにすぎない
ざっくり言えば同じ名前で異なった振る舞いをするもののことを言う
関数オーバーロードもポリモーフィズム
504デフォルトの名無しさん (ワッチョイ 9fd2-GwbS)
2018/06/24(日) 12:57:48.47ID:6XPmSU1L0 詐欺師が「○○を実現できます」と言った時、実際には「他人の作った○○に便乗します」という意味であることが多いから、あながち間違いでもない。
505デフォルトの名無しさん (ワッチョイ 7f7e-09r9)
2018/06/24(日) 13:22:31.14ID:l/Tfpprp0 >>498
boostで似たようなことができる
http://www.cplusplus.com/forum/general/16532/
これをうまいことラップして
pstream ps("ls");
ps >> str;
みたいに動作するstreamを作ればいい
boostで似たようなことができる
http://www.cplusplus.com/forum/general/16532/
これをうまいことラップして
pstream ps("ls");
ps >> str;
みたいに動作するstreamを作ればいい
506デフォルトの名無しさん (ワッチョイ 9fd2-GwbS)
2018/06/24(日) 16:33:05.22ID:6XPmSU1L0 >>503
>関数オーバーロードもポリモーフィズム
関数オーバーロードはコンパイル時には(どこからどこへコールしているかが)確定しているものですね
そういうものに「ポリモーフィズム」を当てるのは抵抗があります
もっとも wikipedia をみると、私の考えているポリモーフィズムは「部分型付け」(subtyping/inclusion polymorphism) としてサブクラス化されています
これは私の認識を修正しないといけない…
>関数オーバーロードもポリモーフィズム
関数オーバーロードはコンパイル時には(どこからどこへコールしているかが)確定しているものですね
そういうものに「ポリモーフィズム」を当てるのは抵抗があります
もっとも wikipedia をみると、私の考えているポリモーフィズムは「部分型付け」(subtyping/inclusion polymorphism) としてサブクラス化されています
これは私の認識を修正しないといけない…
508デフォルトの名無しさん (ワッチョイ 9fd2-GwbS)
2018/06/24(日) 17:26:25.56ID:6XPmSU1L0 自然界には、収斂進化のように継承や派生と無関係な同質異像が存在します。
収斂進化 (convergent evolution)
https://ja.wikipedia.org/wiki/%E5%8F%8E%E6%96%82%E9%80%B2%E5%8C%96
多形 (polymorphism)
https://ja.wikipedia.org/wiki/%E5%A4%9A%E5%9E%8B
収斂進化 (convergent evolution)
https://ja.wikipedia.org/wiki/%E5%8F%8E%E6%96%82%E9%80%B2%E5%8C%96
多形 (polymorphism)
https://ja.wikipedia.org/wiki/%E5%A4%9A%E5%9E%8B
509デフォルトの名無しさん (ワッチョイ 9fc3-loLi)
2018/06/24(日) 17:41:32.84ID:nQZct5lz0 意味の広い英単語を、ものすごく狭くて極端な用例の一つに限定して和製英語化しちゃう日本人のいつもの得意技
ポリモもその犠牲者の一つ
ポリモもその犠牲者の一つ
510デフォルトの名無しさん (ワッチョイ 7f7e-09r9)
2018/06/24(日) 20:17:56.55ID:l/Tfpprp0 Ad hoc polymorphismのページでは2つの要素を+演算子にかける関数がpolymorphicなものの例として書かれてるね
https://en.wikipedia.org/wiki/Ad_hoc_polymorphism
https://en.wikipedia.org/wiki/Ad_hoc_polymorphism
511デフォルトの名無しさん (ワッチョイ ff0d-GwbS)
2018/06/24(日) 20:51:47.44ID:NxOKC53L0 拡大解釈すればできちまうものだからな
いくらでも俺様解釈し放題
それを聞かされている衆目がついていけないと言ったとき
強弁するやつと謙虚なやつでリトマス試験紙みたいになる
いくらでも俺様解釈し放題
それを聞かされている衆目がついていけないと言ったとき
強弁するやつと謙虚なやつでリトマス試験紙みたいになる
512デフォルトの名無しさん (ワッチョイ 7f7e-09r9)
2018/06/24(日) 21:00:48.39ID:l/Tfpprp0 もともとプログラミング言語の理論の方から出てきた言葉なので拡大解釈ではないでしょ
オブジェクト指向言語がそれらの理論から引用してオブジェクト指向におけるポリモーフィズムとは継承とオーバーライドによるサブクラス化のことだと言っているだけ
オブジェクト指向言語がそれらの理論から引用してオブジェクト指向におけるポリモーフィズムとは継承とオーバーライドによるサブクラス化のことだと言っているだけ
513デフォルトの名無しさん (ワッチョイ ff9f-qEcp)
2018/06/25(月) 19:33:05.89ID:Jf0MXCTQ0514デフォルトの名無しさん (ワッチョイ 9fc3-loLi)
2018/06/25(月) 19:33:27.29ID:INT0btTo0 個人的にはどっちかというと「動物ってのはワンワン鳴く奴のことだろ?猫や馬まで動物と呼ぶのは俺様解釈の拡大解釈」
って言ってるような滑稽さを感じる
って言ってるような滑稽さを感じる
515デフォルトの名無しさん (ワッチョイ 9fe3-DJU/)
2018/06/25(月) 21:51:06.05ID:OqCUk3940516デフォルトの名無しさん (ワッチョイ ff9f-qEcp)
2018/06/25(月) 22:49:48.34ID:Jf0MXCTQ0 >>515
はいはい、お前はc+14と心中しろ。
はいはい、お前はc+14と心中しろ。
517デフォルトの名無しさん (ワッチョイ 1fb3-ORze)
2018/06/25(月) 23:14:47.02ID:yr0eISn50 倫理・・・
518デフォルトの名無しさん (ワッチョイ 9fbd-iJxt)
2018/06/26(火) 00:15:42.99ID:oIj/6dLD0 >>516
"以降"が解らないのにC++で判定文書けるん?
"以降"が解らないのにC++で判定文書けるん?
519デフォルトの名無しさん (ワッチョイ 9f83-DJU/)
2018/06/26(火) 10:50:55.25ID:KDXqXp1W0 C++11以降で書かれたコードがほとんど増えていないという現実。
520デフォルトの名無しさん (ワッチョイ 7f34-MNXm)
2018/06/26(火) 15:42:11.89ID:hXUAd38p0 互換性考えるとね
素直に書けないというか
素直に書けないというか
521デフォルトの名無しさん (ワッチョイ 9fc3-loLi)
2018/06/26(火) 17:57:46.39ID:+H9n+Gcp0 GCCもClangも、VC++でさえ10年近く前からサポートし続けてるのにまだ足りないと申すか
522デフォルトの名無しさん (ワッチョイ 7f12-2Io7)
2018/06/26(火) 18:18:16.27ID:GAbzZsvU0 昨今の潮流はオブジェクト指向と関数型のハイブリッド
この二つをどう摺り合わせるか、どの言語もまだ明確な回答が出ていない
もちろんC++も
この二つをどう摺り合わせるか、どの言語もまだ明確な回答が出ていない
もちろんC++も
523デフォルトの名無しさん (スフッ Sd9f-kbNZ)
2018/06/26(火) 19:13:16.11ID:PwoRxl17d OCamlがあるが
524デフォルトの名無しさん (ワッチョイ 1f04-WDJb)
2018/06/26(火) 20:14:32.50ID:WXAcQZJd0 アクセス権つき構造体とユニファイドコールシンタックスで疎結合オブジェクト指向だ。
と考えたのだが、ユニファイドコールシンタックスが死んでしまった。
と考えたのだが、ユニファイドコールシンタックスが死んでしまった。
525デフォルトの名無しさん (ワッチョイ 1f80-2Io7)
2018/06/26(火) 22:13:37.78ID:9TMgx4Gk0 ifdefできるだけなしで
どんなコンパイラでも通って同じ動作するコードを書けよ
コレは命令だ
どんなコンパイラでも通って同じ動作するコードを書けよ
コレは命令だ
526デフォルトの名無しさん (ワッチョイ 9fc3-loLi)
2018/06/26(火) 22:32:36.99ID:+H9n+Gcp0 お前は本当にそんなにコンパイラを使い分けてるのか?
527デフォルトの名無しさん (ワッチョイ 1f80-2Io7)
2018/06/26(火) 23:37:30.28ID:9TMgx4Gk0 最低限、実機で間違いなく動いて
シミュレーターで間違いなく動くようにコード書きなさい
コードはいろんな実機をサポートしないといけない
実機ごとにOSも違う
シミュレーターで間違いなく動くようにコード書きなさい
コードはいろんな実機をサポートしないといけない
実機ごとにOSも違う
528デフォルトの名無しさん (ワッチョイ 9f8a-aHC/)
2018/06/26(火) 23:46:02.78ID:A+/Pd/Nq0 ICE上でのみ動作するコード
MIRACLE ON ICE
MIRACLE ON ICE
529デフォルトの名無しさん (ワッチョイ 9f83-DJU/)
2018/06/27(水) 00:34:15.97ID:J+q5uTmJ0 関数型も40年前からオワコンという現実を見ようよ。
5chのスレも全く伸びない。10年で1スレ消費できないレベル。
5chのスレも全く伸びない。10年で1スレ消費できないレベル。
530デフォルトの名無しさん (ワッチョイ 7f12-2Io7)
2018/06/27(水) 08:36:26.41ID:2Ak+f5Tw0 スレが伸びないのは難し過ぎるからじゃないのか
オブジェクト指向なんかはニワカが口を挟みやすい
あれやこれやと語ることがあると自転車置き場のごとくスレが伸びるんだよ
オブジェクト指向なんかはニワカが口を挟みやすい
あれやこれやと語ることがあると自転車置き場のごとくスレが伸びるんだよ
531デフォルトの名無しさん (ワッチョイ 9f8a-aHC/)
2018/06/27(水) 08:43:09.25ID:ezuUhY+H0 罵倒観音が居座ってるからな
532デフォルトの名無しさん (ラクッペ MM33-4k5+)
2018/06/27(水) 12:01:05.52ID:J5tXLyxdM 数学板とか物理板の質問スレで2chに失望し、それ以降2chで理系関連の質問はしないようにしてる
533デフォルトの名無しさん (ワッチョイ 9f31-GwbS)
2018/06/27(水) 22:17:38.85ID:QNF3+oY+0 >>512
日本語で頼む
日本語で頼む
>>532
稀に神回答がつくのを期待するしかないのです
稀に神回答がつくのを期待するしかないのです
535デフォルトの名無しさん (ワッチョイ 42b3-1uqC)
2018/06/28(木) 22:38:07.65ID:Uq302Ahl0 クラス/構造体の非静的メンバ変数/関数へのポインタ宣言 ってのを初めて知ったんですが、
これはどういう活用方法があるんでしょうか?
struct S { int data; };
int S::*d = &S::data;
S s1 = {999};
s1.*d; // → 999
s1.*d = 123;
(参考: 改訂第3版 C++ポケットリファレンス p.39)
上の例だと、 s1.data の別名以外の使い道がないように見えます。
長い長い真名の時は局所的に略記できて便利とか?、まさかそれだけですか?
これはどういう活用方法があるんでしょうか?
struct S { int data; };
int S::*d = &S::data;
S s1 = {999};
s1.*d; // → 999
s1.*d = 123;
(参考: 改訂第3版 C++ポケットリファレンス p.39)
上の例だと、 s1.data の別名以外の使い道がないように見えます。
長い長い真名の時は局所的に略記できて便利とか?、まさかそれだけですか?
536デフォルトの名無しさん (ワッチョイ 869b-RQ0T)
2018/06/28(木) 22:43:10.44ID:DraUSHr20 なんか昔同僚がメンバ関数へのポインタ使ってて納得した覚えがあるが
なんで納得したのかはもう忘れた
なんで納得したのかはもう忘れた
538デフォルトの名無しさん (ワッチョイ 6eeb-VCRa)
2018/06/28(木) 22:48:23.82ID:Nur9+gU60 is_classの実装に使う
539デフォルトの名無しさん (ワッチョイ 0d8a-LTG6)
2018/06/28(木) 23:05:03.75ID:hVM339ZQ0 >>535
動的に呼び出すメソッドを切り替えたいとかだね〜
動的に呼び出すメソッドを切り替えたいとかだね〜
540はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 466f-yQv9)
2018/06/28(木) 23:15:19.82ID:wg8xow/s0 >>535
そのとき S が int 型のメンバを持たなくても int S::*d という変数宣言が許される。
(無理矢理な型キャストをしない限りヌルしか入れられないけど。)
つまり、 S がプリミティブな型でなくクラスであるならば、メンバにかかわらず int S::*d は許容されて、
プリミティブな型だったらエラーになる。
この性質を利用して SFINAE で切り替えれば、与えられた型がクラスであるかどうか判定するものを作れる。
それが >>538 の言う is_class の実装に使えるって話ね。
まあ今なら is_class を使えよって話だから普通のプログラマ的にはどうでもいいけど。
回りくどい利用法なんだけど、まあ実際のところ実務の中で必要とする場面はそんなにないから、
この利用法が代表的なものとして紹介するしかない。
そのとき S が int 型のメンバを持たなくても int S::*d という変数宣言が許される。
(無理矢理な型キャストをしない限りヌルしか入れられないけど。)
つまり、 S がプリミティブな型でなくクラスであるならば、メンバにかかわらず int S::*d は許容されて、
プリミティブな型だったらエラーになる。
この性質を利用して SFINAE で切り替えれば、与えられた型がクラスであるかどうか判定するものを作れる。
それが >>538 の言う is_class の実装に使えるって話ね。
まあ今なら is_class を使えよって話だから普通のプログラマ的にはどうでもいいけど。
回りくどい利用法なんだけど、まあ実際のところ実務の中で必要とする場面はそんなにないから、
この利用法が代表的なものとして紹介するしかない。
541535 (ワッチョイ 42b3-1uqC)
2018/06/29(金) 00:23:10.79ID:1qhfpQ0p0 初心者の質問に答えていただき有難うございます。
動的にメソッド切り替えは実際に動かして理解できました。
SFNAEで切り替えの方ははコンパイル通る形にはできてませんが概要は理解できました。
動的にメソッド切り替えは実際に動かして理解できました。
SFNAEで切り替えの方ははコンパイル通る形にはできてませんが概要は理解できました。
542デフォルトの名無しさん (ワッチョイ 6eeb-VCRa)
2018/06/29(金) 01:36:24.42ID:r02c4W9b0 メンバ関数ポインタがあの形になってるのはまあわかるから
変数もおまけで同じ形にそろえたのかな
変数もおまけで同じ形にそろえたのかな
543デフォルトの名無しさん (ワッチョイ ad05-yQv9)
2018/06/29(金) 10:05:14.20ID:h3YlmS0n0 > 実務の中で必要とする場面はそんなにない
データメンバはともかくメンバ関数へのポインタは必須だろうが
データメンバはともかくメンバ関数へのポインタは必須だろうが
544デフォルトの名無しさん (ワッチョイ 217f-yQv9)
2018/06/29(金) 10:08:42.72ID:+bZtBt0B0 メンバ関数の参照はないんですか
545デフォルトの名無しさん (ドコグロ MMc1-9w61)
2018/06/29(金) 12:36:04.10ID:/ZgRdmO0M >>543
ないと困る局面があるという意味では必須だけどそんな局面は滅多にないって話な
ないと困る局面があるという意味では必須だけどそんな局面は滅多にないって話な
546デフォルトの名無しさん (ワッチョイ a5d6-yQv9)
2018/06/29(金) 13:12:13.07ID:wGArrOkQ0547デフォルトの名無しさん (ブーイモ MMf6-0N2t)
2018/06/29(金) 17:57:08.20ID:rbRlqY2fM じゃあどう言えばいんだ
548デフォルトの名無しさん (ワッチョイ 3dc3-+pJM)
2018/06/29(金) 18:10:00.87ID:Ptonbbi70 ある必須の用途で必要なら、その用途がいくら狭くて稀であったとしても
それは必要なんだよ
それは必要なんだよ
549デフォルトの名無しさん (ワッチョイ 6eeb-VCRa)
2018/06/29(金) 19:08:03.84ID:r02c4W9b0 メンバ関数ポインタ面倒だから出会ったら大体ラムダでラップしてしまう・・・
550デフォルトの名無しさん (ワッチョイ c17e-yQv9)
2018/06/29(金) 20:27:36.40ID:74QnzxIm0 std::stack や std::queue に begin() end() clear() などが無いのは何故ですか
begin() end() はともかく clear() は有ったほうが良いと思うのですが
begin() end() はともかく clear() は有ったほうが良いと思うのですが
551デフォルトの名無しさん (ワッチョイ adbd-zt73)
2018/06/29(金) 20:52:47.71ID:TumoNdX/0 >>550
機能を絞っていることが彼らコンテナアダプタの唯一の存在価値なので許してあげてください。
機能を絞っていることが彼らコンテナアダプタの唯一の存在価値なので許してあげてください。
552デフォルトの名無しさん (ワッチョイ 469d-mzC7)
2018/06/29(金) 20:59:13.00ID:WoPz4eP90 template<class ... Args>
void func1(Args ... args) {
outputs(buf, args...);
}
こういう可変長引数のテンプレートの場合に別のファイルで利用する場合には
どう宣言したらいいの?
void func1(???);
void func1(Args ... args) {
outputs(buf, args...);
}
こういう可変長引数のテンプレートの場合に別のファイルで利用する場合には
どう宣言したらいいの?
void func1(???);
553デフォルトの名無しさん (ワッチョイ 2104-tE5C)
2018/06/29(金) 21:12:14.10ID:j3eIJ9D70 ヘッダ書いてインクルード。
554デフォルトの名無しさん (ドコグロ MMc1-9w61)
2018/06/29(金) 21:28:52.21ID:/ZgRdmO0M555デフォルトの名無しさん (ワッチョイ ae9f-yQv9)
2018/06/29(金) 22:10:53.56ID:RKocoGUj0556デフォルトの名無しさん (ワッチョイ 02b3-9w61)
2018/06/29(金) 23:27:40.69ID:N8Sr8lSR0 はいはい w
ようやく日本語理解できたんだな
ようやく日本語理解できたんだな
557デフォルトの名無しさん (ワッチョイ 469d-mzC7)
2018/06/30(土) 04:02:37.35ID:p5lz5e260 関数型テンプレートってのは、型でもなしに、実態でもない。不思議な存在だ。
型だとすれば、関数プロトタイプのように繰り返して宣言しても問題ないはずだ
が、そうするとエラーになる。実態かというと、これ自体では何のコードも生成しない。
利用するときに始めてコードが生成される。
型だとすれば、関数プロトタイプのように繰り返して宣言しても問題ないはずだ
が、そうするとエラーになる。実態かというと、これ自体では何のコードも生成しない。
利用するときに始めてコードが生成される。
558デフォルトの名無しさん (ワッチョイ 469d-mzC7)
2018/06/30(土) 08:17:40.24ID:p5lz5e260 unsigned long address;
int dt;
*(char *)&address = dt;
コンパイラエラーにはならないが動作しない。ところが
uint8_t *address ;
*address = dt;
これだと動作する。なぜなんだ?
int dt;
*(char *)&address = dt;
コンパイラエラーにはならないが動作しない。ところが
uint8_t *address ;
*address = dt;
これだと動作する。なぜなんだ?
559デフォルトの名無しさん (ワッチョイ adbd-zt73)
2018/06/30(土) 08:44:31.54ID:yaCLVjK30 動作してないだろ。
メモリ破壊だ。
メモリ破壊だ。
560デフォルトの名無しさん (ワッチョイ 469d-mzC7)
2018/06/30(土) 08:47:45.01ID:p5lz5e260 =0x20000;を書き忘れていた。あとは上に同じ。
561デフォルトの名無しさん (ワッチョイ adbd-7ca/)
2018/06/30(土) 08:49:24.99ID:yaCLVjK30 それでもメモリ破壊だ
562デフォルトの名無しさん (ワッチョイ 2193-OY1D)
2018/06/30(土) 08:50:26.96ID:+ldexLXj0563デフォルトの名無しさん (ワッチョイ adbd-7ca/)
2018/06/30(土) 08:53:37.93ID:yaCLVjK30 前者はaddressの最初(または最後)の1byteだけを書き換えようとしているけど、それは意図通りなの?
後者は0x20000番地の値を書き換えようとしてるけど、そこは書き換えてもよい領域なの?
後者は0x20000番地の値を書き換えようとしてるけど、そこは書き換えてもよい領域なの?
564562 (ワッチョイ 2193-OY1D)
2018/06/30(土) 08:54:40.20ID:+ldexLXj0 おっと、未定義動作がらみで「何が起きても不思議じゃない」かも知れん。
リトルエンディアンの機械での素朴な予想レベルでの「期待通り」ね。
リトルエンディアンの機械での素朴な予想レベルでの「期待通り」ね。
565デフォルトの名無しさん (ワッチョイ 0234-BsMj)
2018/06/30(土) 09:20:28.54ID:vKQJNajJ0 くだらねぇ
初歩の初歩じゃねぇか
初歩の初歩じゃねぇか
566デフォルトの名無しさん (ワッチョイ 3dc3-+pJM)
2018/06/30(土) 09:44:09.16ID:i5/CPfCw0 uint8_t *address = 0x20000;
がコンパイル通るわけねえだろ質問したいならちゃんとしろ
がコンパイル通るわけねえだろ質問したいならちゃんとしろ
567デフォルトの名無しさん (ワッチョイ 869f-Rle/)
2018/06/30(土) 10:44:57.06ID:6fEIEQu00568デフォルトの名無しさん (ワッチョイ 02bd-AF1h)
2018/06/30(土) 12:12:55.12ID:dlDQX1jW0 マクロで再帰ができるか!!!!!!!1111!1!11!1!1!
前半は同意
あと関数を単に差し替えたい目的ならファンクタとk
前半は同意
あと関数を単に差し替えたい目的ならファンクタとk
569デフォルトの名無しさん (ワッチョイ 3dc3-+pJM)
2018/06/30(土) 12:22:52.41ID:i5/CPfCw0 そういう事言うとプリプロの怖い人達が来るからやめれ
本物の再帰じゃないけど再帰っぽいことはできるらしいぞ
本物の再帰じゃないけど再帰っぽいことはできるらしいぞ
570デフォルトの名無しさん (ワッチョイ 2150-oAt+)
2018/06/30(土) 12:23:49.18ID:bXpWuHDW0 マクロで再帰?
出来るよ普通に
出来るよ普通に
571デフォルトの名無しさん (ワッチョイ 217f-yQv9)
2018/06/30(土) 12:27:29.89ID:YQWqrdY/0 今どきマクロなんて使うアホがいるのか
572デフォルトの名無しさん (ワッチョイ 79b3-HrKv)
2018/06/30(土) 12:30:54.83ID:gIC/SSHD0 スフィ姉を使った技についてスレッドがあってもいいかもしれない。
573デフォルトの名無しさん (ワッチョイ c9c3-JFU2)
2018/06/30(土) 12:54:32.96ID:ZTzPlVrV0 これがアスペか>>571
574デフォルトの名無しさん (ワッチョイ 79b3-HrKv)
2018/06/30(土) 12:55:30.82ID:gIC/SSHD0 スフィ姉がいるならスフィ妹もいるかもしれない。
575デフォルトの名無しさん (ワッチョイ a9d4-VCRa)
2018/06/30(土) 14:59:20.81ID:nCrFyMoP0 「マクロ使う奴はアホ」とか言う奴は、goto文も絶対に使わなそう
576デフォルトの名無しさん (ワッチョイ 469d-mzC7)
2018/06/30(土) 16:15:54.20ID:p5lz5e260 >>563
damecaseの理由がわからない。
void Test::clear(unsigned long baseadd, unsigned int dt, int leng)
{
#if(okcase)
uint8_t * addp = (uint8_t *)baseadd;
for(int i=0; i<leng; ++i){
*addp++ = dt;
}
#endif
#if(damecase)
unsigned long addp = baseadd;
for(int i=0; i<leng; ++i){
*(char *)&addp++ = dt;
}
#endif
}
damecaseの理由がわからない。
void Test::clear(unsigned long baseadd, unsigned int dt, int leng)
{
#if(okcase)
uint8_t * addp = (uint8_t *)baseadd;
for(int i=0; i<leng; ++i){
*addp++ = dt;
}
#endif
#if(damecase)
unsigned long addp = baseadd;
for(int i=0; i<leng; ++i){
*(char *)&addp++ = dt;
}
#endif
}
577デフォルトの名無しさん (ワッチョイ 469d-mzC7)
2018/06/30(土) 16:20:31.87ID:p5lz5e260 baseadd=0x20000でダンプすると初期値は全部ffが入っている。
leng=100としてdt=0を書き込むとokcaseはOK100バイト0クリアされる。
damecaseは全く反応しない。
leng=100としてdt=0を書き込むとokcaseはOK100バイト0クリアされる。
damecaseは全く反応しない。
578デフォルトの名無しさん (ワッチョイ 469d-mzC7)
2018/06/30(土) 16:25:07.29ID:p5lz5e260 >>566
とおるよ。頭の中でCastしてくれたら
とおるよ。頭の中でCastしてくれたら
579デフォルトの名無しさん (ワッチョイ 469d-mzC7)
2018/06/30(土) 16:32:50.93ID:p5lz5e260 >おっと、未定義動作がらみで「何が起きても不思議じゃない」かも知れん。
>リトルエンディアンの機械での素朴な予想レベルでの「期待通り」ね。
どうして?
何処が、どういう理由で未定義なの?
リトルエンディアンが問題というのはバイトオーダーが関係するということ?
1バイトのエリアに代入するのにバイトオーダーが関係するはずはないでしょ。どいういうこと?
char*pのpは1バイトデータのポインタ(アドレス)だよ。代入先が1バイトなのでエンディアンは関係ないと思うが、、、
>リトルエンディアンの機械での素朴な予想レベルでの「期待通り」ね。
どうして?
何処が、どういう理由で未定義なの?
リトルエンディアンが問題というのはバイトオーダーが関係するということ?
1バイトのエリアに代入するのにバイトオーダーが関係するはずはないでしょ。どいういうこと?
char*pのpは1バイトデータのポインタ(アドレス)だよ。代入先が1バイトなのでエンディアンは関係ないと思うが、、、
580デフォルトの名無しさん (ワッチョイ aec6-yQv9)
2018/06/30(土) 16:44:51.15ID:g+tUb8L/0 >>567
アンカー間違った?
アンカー間違った?
581デフォルトの名無しさん (ワッチョイ 3dc3-+pJM)
2018/06/30(土) 17:01:02.99ID:i5/CPfCw0 >>579
strict aliasing ruleでググるか死ぬかどっちか選べ
strict aliasing ruleでググるか死ぬかどっちか選べ
582デフォルトの名無しさん (ワッチョイ adbd-zt73)
2018/06/30(土) 17:21:18.94ID:yaCLVjK30 >>576
&いらん
&いらん
583デフォルトの名無しさん (ワッチョイ ade3-JFU2)
2018/06/30(土) 17:21:26.57ID:odPz+R170584564 (ワッチョイ 2193-OY1D)
2018/06/30(土) 20:23:16.90ID:+ldexLXj0 >>579
「ある型へのポインタの値をキャストで別の型へのポインタとして扱い、
その(キャストで得られた)ポインタに対して * 演算子で格納する」行為自体が
規格で未定義になってるかも知れんてこと。確実じゃないんだけど。
キャストの時点でか、*でアクセスしたときか、格納の時か、
どことは言えないけど何となく未定義クサい感じがする。
「ある型へのポインタの値をキャストで別の型へのポインタとして扱い、
その(キャストで得られた)ポインタに対して * 演算子で格納する」行為自体が
規格で未定義になってるかも知れんてこと。確実じゃないんだけど。
キャストの時点でか、*でアクセスしたときか、格納の時か、
どことは言えないけど何となく未定義クサい感じがする。
585デフォルトの名無しさん (ワッチョイ 2980-iScA)
2018/06/30(土) 21:00:17.02ID:ozTCpxdq0 ↓addpをインクリメントとか頭悪いの?
*(char *)&addp++ = dt;
unsigned longのaddpをインクリメントしてる
addpはポインタじゃないぞ。。。
きっとバカが動作しないといってるのは
落ちるということではない
動作はするが期待どおりの結果にならないということで間違いない
バカはなにがやりたいのか意味不明
*(char *)&addp++ = dt;
unsigned longのaddpをインクリメントしてる
addpはポインタじゃないぞ。。。
きっとバカが動作しないといってるのは
落ちるということではない
動作はするが期待どおりの結果にならないということで間違いない
バカはなにがやりたいのか意味不明
586デフォルトの名無しさん (ワッチョイ 2980-iScA)
2018/06/30(土) 21:07:38.23ID:ozTCpxdq0 unsigned long addr = 12345678;
char* pByte = &addr;
ならいけるハズ
*pByte++ = dt
で leng が sizeof(unsigned long)/sizeof(char) 回までの繰り返しなら
普通に落ちずに動作するハズ
ばああああああああああああああか
しかいないわこのスレ
char* pByte = &addr;
ならいけるハズ
*pByte++ = dt
で leng が sizeof(unsigned long)/sizeof(char) 回までの繰り返しなら
普通に落ちずに動作するハズ
ばああああああああああああああか
しかいないわこのスレ
587デフォルトの名無しさん (ワッチョイ 79b3-HrKv)
2018/06/30(土) 21:10:52.08ID:gIC/SSHD0 std::addressof()。
588デフォルトの名無しさん (ワッチョイ 2980-iScA)
2018/06/30(土) 21:17:55.34ID:ozTCpxdq0 いやねcすら理解できてないヤツラが
c++とか一億年早い
こんなヤツラがc++でコード組んでるかと思うと
ぞっとするわ。。。
シロウトはおとなしくjavaにしときなさい
c++とか一億年早い
こんなヤツラがc++でコード組んでるかと思うと
ぞっとするわ。。。
シロウトはおとなしくjavaにしときなさい
589デフォルトの名無しさん (ワッチョイ 2980-iScA)
2018/06/30(土) 21:39:50.97ID:ozTCpxdq0 for(int i=0; i<leng; ++i){
((char *)&addp)[i] = dt;
}
バカ向けのコードを書いてやったぞ
コレでバカにとってはすべて解決
コレがなんのことか分からないなら
もう二度とプログラムなんかやらないほうがいい
センスない、むいてない
((char *)&addp)[i] = dt;
}
バカ向けのコードを書いてやったぞ
コレでバカにとってはすべて解決
コレがなんのことか分からないなら
もう二度とプログラムなんかやらないほうがいい
センスない、むいてない
590デフォルトの名無しさん (ワッチョイ 3dc3-+pJM)
2018/06/30(土) 21:44:44.08ID:i5/CPfCw0 >>586
strict aliasing ruleでググるか死ぬかどっちか選べ
strict aliasing ruleでググるか死ぬかどっちか選べ
591デフォルトの名無しさん (ワッチョイ 2980-iScA)
2018/06/30(土) 21:58:37.22ID:ozTCpxdq0 ぐぐったぞ
http://d.hatena.ne.jp/yohhoy/20120220/p1
> 文字型。規格ではchar*, signed char*, unsigned char*が別の何かを指すことが特別に許されています。
> これは文字型がメモリ上の任意のaliasになり得ることを意味します。
どうかしたのか
もうねバカばっかりで困るわマジで
池沼しかいないの? このスレ?
http://d.hatena.ne.jp/yohhoy/20120220/p1
> 文字型。規格ではchar*, signed char*, unsigned char*が別の何かを指すことが特別に許されています。
> これは文字型がメモリ上の任意のaliasになり得ることを意味します。
どうかしたのか
もうねバカばっかりで困るわマジで
池沼しかいないの? このスレ?
592デフォルトの名無しさん (ワッチョイ 2980-iScA)
2018/06/30(土) 22:05:16.74ID:ozTCpxdq0 ちなみになchar以外で変なメモリアドレス(メモリ上有効なアドレスあっても)の位置からcharより大きいサイズの数値を参照すると
memory wrapの切れ目の問題(つまりwrap over)で
bus errorを普通に起こす計算機がある
このスレにいるようなマヌケたち以外にとっては常識だからな
memory wrapの切れ目の問題(つまりwrap over)で
bus errorを普通に起こす計算機がある
このスレにいるようなマヌケたち以外にとっては常識だからな
593さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd22-xqsk)
2018/06/30(土) 22:15:35.98ID:ru2k3pO7d 役に立つ情報ありがとう。
でも、半角カナは止めてね。
でも、半角カナは止めてね。
594デフォルトの名無しさん (ワッチョイ 469d-mzC7)
2018/06/30(土) 22:22:23.05ID:p5lz5e260 >&いらん
コンパイルエラーにはならない。ワーニングにもならん。という事実を書いている。
些末なことで糞ほどワーニングやエラー出すC++だ。ワーニングにならんということは正しい
ということか、コンパイラがアフォかさもなくば、何か別の意味があるということになる。
わかるか? お前にも質問の意味が分かるように、そしてちゃんと回答ができるようにもう一度簡単に書いてやろう。
1.正しい
2.コンパイラがアフォ
3.意図とは別の意味になっている。
さあどれが正解だ。答え見ろ。
コンパイルエラーにはならない。ワーニングにもならん。という事実を書いている。
些末なことで糞ほどワーニングやエラー出すC++だ。ワーニングにならんということは正しい
ということか、コンパイラがアフォかさもなくば、何か別の意味があるということになる。
わかるか? お前にも質問の意味が分かるように、そしてちゃんと回答ができるようにもう一度簡単に書いてやろう。
1.正しい
2.コンパイラがアフォ
3.意図とは別の意味になっている。
さあどれが正解だ。答え見ろ。
595デフォルトの名無しさん (ワッチョイ 469d-mzC7)
2018/06/30(土) 22:29:49.98ID:p5lz5e260 >584
はあー、未定義かもしれんて? 未定義ならエラーになるだろ。
はあー、未定義かもしれんて? 未定義ならエラーになるだろ。
596デフォルトの名無しさん (ワッチョイ 469d-mzC7)
2018/06/30(土) 22:32:41.52ID:p5lz5e260 >>589
理由を書いてごらん。理由がないと回答にならんよ。
理由を書いてごらん。理由がないと回答にならんよ。
597デフォルトの名無しさん (ブーイモ MM4d-zt73)
2018/06/30(土) 22:38:33.52ID:V0JwxTbZM598デフォルトの名無しさん (ワッチョイ 2980-iScA)
2018/06/30(土) 22:47:55.08ID:ozTCpxdq0 なにが書いてごらんだ
バカのくせにえらそうに。。。
addpはアドレスじゃない
で、addpはどこのアドレスをさしてる?
で、なにがインクリメントされてる?
バカにはまだわからないらしいわ、、、
int hoge[10]
int boo = 1234;
char* hogeee = (char*)hoge;
ex1
for (int i = 0; i < 10; ++i) {
*((int*)hogeee) = boo;
hogeee += sizeof(int) / sizeof(char);
}
ex2
for (int i = 0; i < 10; ++i) {
((int*)hogeee)[i] = boo;
}
ex1とex2、この違いわかる?
わからないなら、もうすべてを諦めたほうがいい
オレはオマエを諦める
バカのくせにえらそうに。。。
addpはアドレスじゃない
で、addpはどこのアドレスをさしてる?
で、なにがインクリメントされてる?
バカにはまだわからないらしいわ、、、
int hoge[10]
int boo = 1234;
char* hogeee = (char*)hoge;
ex1
for (int i = 0; i < 10; ++i) {
*((int*)hogeee) = boo;
hogeee += sizeof(int) / sizeof(char);
}
ex2
for (int i = 0; i < 10; ++i) {
((int*)hogeee)[i] = boo;
}
ex1とex2、この違いわかる?
わからないなら、もうすべてを諦めたほうがいい
オレはオマエを諦める
599デフォルトの名無しさん (ワッチョイ 469d-mzC7)
2018/06/30(土) 22:48:11.24ID:p5lz5e260 >>>582>>583で答えが出てるのに、馬鹿には理解できなかったのだろうな。
>俺なら恥ずかしすぎて首吊って死ぬわ。
ではその理由を書いてごらん。理由がないと回答にならんよ。理由が説明できないなら試験も受からんだろ。
>俺なら恥ずかしすぎて首吊って死ぬわ。
ではその理由を書いてごらん。理由がないと回答にならんよ。理由が説明できないなら試験も受からんだろ。
600デフォルトの名無しさん (ワッチョイ 469d-mzC7)
2018/06/30(土) 22:50:20.24ID:p5lz5e260 >で、addpはどこのアドレスをさしてる?
>で、なにがインクリメントされてる?
まず、どこをさしているのか?何がインクリメントされているのか答えてごらん。
>で、なにがインクリメントされてる?
まず、どこをさしているのか?何がインクリメントされているのか答えてごらん。
601デフォルトの名無しさん (ワッチョイ 2980-iScA)
2018/06/30(土) 22:51:33.81ID:ozTCpxdq0 致命的に脳ミソが足りないのは理解した
アンリカバブルだ
アンリカバブルだ
602デフォルトの名無しさん (ワッチョイ 469d-mzC7)
2018/06/30(土) 22:52:40.38ID:p5lz5e260 お前は解ったふりをしているだけだよ。言葉にして説明できないならな。
603デフォルトの名無しさん (ワッチョイ 2980-iScA)
2018/06/30(土) 22:54:40.58ID:ozTCpxdq0 ここまで説明して
なんで同じ結果にならないか
分からないならもうムリだからな
向いてない
諦めなさい
なにごとも諦めが肝心
なんで同じ結果にならないか
分からないならもうムリだからな
向いてない
諦めなさい
なにごとも諦めが肝心
604デフォルトの名無しさん (ワッチョイ 469d-mzC7)
2018/06/30(土) 22:55:43.85ID:p5lz5e260 誤魔化して変なコードを追加するな。問題はこれだ。
unsigned long addp = baseadd;
for(int i=0; i<leng; ++i){
*(char *)&addp++ = dt;
}
このコードが何故動作しないか? それを説明するのが問題なのだ。
unsigned long addp = baseadd;
for(int i=0; i<leng; ++i){
*(char *)&addp++ = dt;
}
このコードが何故動作しないか? それを説明するのが問題なのだ。
605デフォルトの名無しさん (ワッチョイ 469d-mzC7)
2018/06/30(土) 22:57:10.06ID:p5lz5e260 多分解っている人なら、直ぐに説明できる筈だ。
分からない人は説明できない。罵るのはさらに愚。
分からない人は説明できない。罵るのはさらに愚。
606デフォルトの名無しさん (ワッチョイ 2980-iScA)
2018/06/30(土) 22:58:00.94ID:ozTCpxdq0 同じ結果にならないことはすでに説明してるからな
アドレスを格納する変数を使わないで同じ結果にしたいならどうすばいいか
まで書いた
それに対する補足説明まで書いた
もうこれ以上書くことはない
ムダ
アドレスを格納する変数を使わないで同じ結果にしたいならどうすばいいか
まで書いた
それに対する補足説明まで書いた
もうこれ以上書くことはない
ムダ
607デフォルトの名無しさん (ワッチョイ 469d-mzC7)
2018/06/30(土) 23:02:38.77ID:p5lz5e260 >アドレスを格納する変数を使わないで同じ結果にしたいならどうすばいいか
>まで書いた
>それに対する補足説明まで書いた
思わせぶりな回答を書いて欲しいといっているのではない。頭がいいと思ってほしいのかもしれないが
それでは「思わせぶり」でしかない。説明としてきちんとした形式を備えた自信のある回答を書いてごらん。
>まで書いた
>それに対する補足説明まで書いた
思わせぶりな回答を書いて欲しいといっているのではない。頭がいいと思ってほしいのかもしれないが
それでは「思わせぶり」でしかない。説明としてきちんとした形式を備えた自信のある回答を書いてごらん。
608デフォルトの名無しさん (ブーイモ MM4d-zt73)
2018/06/30(土) 23:05:23.53ID:1NusDFz+M609デフォルトの名無しさん (ワッチョイ 469d-mzC7)
2018/06/30(土) 23:10:58.15ID:p5lz5e260 >608
「教えない」習性の人は成長しない。ということは知っているだろ。習性というくらいだから今に始まったこと
ではない。つまり嘗て勉強を始めた時点ですでに成長はとまっているということだ。
「教えない」習性の人は成長しない。ということは知っているだろ。習性というくらいだから今に始まったこと
ではない。つまり嘗て勉強を始めた時点ですでに成長はとまっているということだ。
610デフォルトの名無しさん (ワッチョイ 469d-mzC7)
2018/06/30(土) 23:19:33.75ID:p5lz5e260 俺は無償でお前等に考え方、回答の方法を教えている。教えることが一番勉強になる。
いままでのところ質問にたいして誰も合格点をあげることができるような回答がない。
いままでのところ質問にたいして誰も合格点をあげることができるような回答がない。
611さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd22-xqsk)
2018/06/30(土) 23:20:06.78ID:ru2k3pO7d addpの値として期待されているのがアドレス値X。&addpは、アドレス値Xを格納している変数addpのアドレス値Y(ポインタの値)。代入によって期待されているのが、アドレスXへのdtの値の格納。
XはYではないから、間違い。
XはYではないから、間違い。
612デフォルトの名無しさん (ワッチョイ 6e9a-7ca/)
2018/06/30(土) 23:21:14.11ID:GQtN7C+20 というか&addp++の時点でエラーでるなこれ
コンパイラ何使ってるの?
コンパイラ何使ってるの?
613デフォルトの名無しさん (ワッチョイ 4281-yQv9)
2018/06/30(土) 23:24:43.02ID:zr0xD9DF0 こんなに引っ張るほどのネタじゃないだろう
614さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd22-xqsk)
2018/06/30(土) 23:26:36.95ID:ru2k3pO7d 炎上学習法ってやつ?
615デフォルトの名無しさん (ワッチョイ 469d-mzC7)
2018/06/30(土) 23:55:15.02ID:p5lz5e260 >>612
正に初歩的な質問というものは質問自体に間違いが含まれている可能性がある。
そのことに先ず言及できたのは君が初めてだ。素晴らしい。
質問者が正確に質問できた時点で回答は既になされたも同然だといわれるが今回も
例外ではない。これで終わる。
正に初歩的な質問というものは質問自体に間違いが含まれている可能性がある。
そのことに先ず言及できたのは君が初めてだ。素晴らしい。
質問者が正確に質問できた時点で回答は既になされたも同然だといわれるが今回も
例外ではない。これで終わる。
616デフォルトの名無しさん (ワッチョイ 2980-iScA)
2018/07/01(日) 00:08:16.38ID:fc6M1Ev70 なめたことをしてくれたな。。。
558 名前:デフォルトの名無しさん (ワッチョイ 469d-mzC7)[] 投稿日:2018年06月30日(土) 08時17分40秒24 [朝] ID:p5lz5e260 [2/19] (PC)
コンパイラエラーにはならないが動作しない。
594 名前:デフォルトの名無しさん (ワッチョイ 469d-mzC7)[] 投稿日:2018年06月30日(土) 22時22分23秒05 [夜] ID:p5lz5e260 [8/19] (PC)
コンパイルエラーにはならない。ワーニングにもならん。という事実を書いている。
(ワッチョイ 469d-mzC7) ID:p5lz5e260
オマエを特定した
震えて眠りなさい
558 名前:デフォルトの名無しさん (ワッチョイ 469d-mzC7)[] 投稿日:2018年06月30日(土) 08時17分40秒24 [朝] ID:p5lz5e260 [2/19] (PC)
コンパイラエラーにはならないが動作しない。
594 名前:デフォルトの名無しさん (ワッチョイ 469d-mzC7)[] 投稿日:2018年06月30日(土) 22時22分23秒05 [夜] ID:p5lz5e260 [8/19] (PC)
コンパイルエラーにはならない。ワーニングにもならん。という事実を書いている。
(ワッチョイ 469d-mzC7) ID:p5lz5e260
オマエを特定した
震えて眠りなさい
617デフォルトの名無しさん (ワッチョイ 025e-2ROK)
2018/07/01(日) 00:18:16.61ID:8lWKFGMK0 ことさらに難しいコードを書いて得意がってる馬鹿がうようよ
1行に詰めるのがプロか?
新入社員が読めないようなコード書いて喜んでいるお前らが
バグを仕込む糞プログラマだわ
1行に詰めるのがプロか?
新入社員が読めないようなコード書いて喜んでいるお前らが
バグを仕込む糞プログラマだわ
618デフォルトの名無しさん (ワッチョイ 4281-yQv9)
2018/07/01(日) 00:47:25.68ID:Z8xp56Jv0 有能なプログラマはこんな場所で遊んでいない
暇なプログラマっていうか、仕事が無いプログラマ?
暇なプログラマっていうか、仕事が無いプログラマ?
619デフォルトの名無しさん (ワッチョイ 2980-iScA)
2018/07/01(日) 01:07:34.26ID:fc6M1Ev70 プログラマにまともなコード書いてもらうも仕事の一つだからな
まともなコード書いてもらうには
こっちもプログラムが分かってないといけない
日本はウンコみたいな低品質低能のプログラマしかいない
いかに踏みとどまらないといけない最低限の一線のラインを越えさせないようにするか
そこが腕のみせどころになる
このスレみれば分かる通り
日本のプログラマは低学歴低能しかいないことがよく分かるハズ
しかも相手がなにを期待してるかも読みとれない
コミュニケーション能力も著しく低い
こんなのに仕事をお願いするほうも大変だからな
可読性が高いコードを書くことは重要だが
それ以外にもイロイロなものが欠落している
まともなコード書いてもらうには
こっちもプログラムが分かってないといけない
日本はウンコみたいな低品質低能のプログラマしかいない
いかに踏みとどまらないといけない最低限の一線のラインを越えさせないようにするか
そこが腕のみせどころになる
このスレみれば分かる通り
日本のプログラマは低学歴低能しかいないことがよく分かるハズ
しかも相手がなにを期待してるかも読みとれない
コミュニケーション能力も著しく低い
こんなのに仕事をお願いするほうも大変だからな
可読性が高いコードを書くことは重要だが
それ以外にもイロイロなものが欠落している
620デフォルトの名無しさん (ワッチョイ aec6-yQv9)
2018/07/01(日) 05:53:57.18ID:+8c6aI200 struct addp_t
{
int& operator ++ (int)
{
return a;
}
int a;
};
int main()
{
addp_t addp;
&addp++;
}
# アンカーつけるのももったいない
# 5chという狭苦しい箱庭の中で目撃したことが
# おまえの全てのようだな
#
# なぜ学歴が出てくるのかよくわからんが
# 高学歴のPGくらいどこにでもいるよ
{
int& operator ++ (int)
{
return a;
}
int a;
};
int main()
{
addp_t addp;
&addp++;
}
# アンカーつけるのももったいない
# 5chという狭苦しい箱庭の中で目撃したことが
# おまえの全てのようだな
#
# なぜ学歴が出てくるのかよくわからんが
# 高学歴のPGくらいどこにでもいるよ
621デフォルトの名無しさん (ワッチョイ 2193-OY1D)
2018/07/01(日) 06:17:56.60ID:KJj1sYCg0622デフォルトの名無しさん (ワッチョイ e2f9-8E0S)
2018/07/01(日) 12:19:00.86ID:lS5AQxvk0 >>619
最近文字コードスレで騒いでいる半角カナの人と同一人物かな?
最近文字コードスレで騒いでいる半角カナの人と同一人物かな?
623222 (ワッチョイ 02bd-AF1h)
2018/07/01(日) 14:42:57.68ID:H+9S2vGe0 循環参照があっても無問題で解放するスマポ作ったけど何か質問ある?
http://codepad.org/Hu6vP4qR
いやまあ確かに解放に当たり(塗り潰しのアルゴリズムで)循環を検出するだけでは済まず、
*(this->m_pRef)の解放条件が*thisの解放「だけ」である
ということの証明が必要やったわ;(訂正1)
ここで*thisはsumapo<T>インスタンス、*(this->m_pRef)は*thisが保持しているcounted_refオブジェクト
(T型のインスタンスに参照カウント等を付加してwrapしたもの)。
詳細はsumapo<T>::proveRoot()のコメント参照、
これ以外は訂正は無し
http://codepad.org/Hu6vP4qR
いやまあ確かに解放に当たり(塗り潰しのアルゴリズムで)循環を検出するだけでは済まず、
*(this->m_pRef)の解放条件が*thisの解放「だけ」である
ということの証明が必要やったわ;(訂正1)
ここで*thisはsumapo<T>インスタンス、*(this->m_pRef)は*thisが保持しているcounted_refオブジェクト
(T型のインスタンスに参照カウント等を付加してwrapしたもの)。
詳細はsumapo<T>::proveRoot()のコメント参照、
これ以外は訂正は無し
624222 (ワッチョイ 02bd-AF1h)
2018/07/01(日) 14:45:14.11ID:H+9S2vGe0625222 (ワッチョイ 02bd-AF1h)
2018/07/01(日) 14:48:47.70ID:H+9S2vGe0626デフォルトの名無しさん (ワッチョイ 219f-iScA)
2018/07/01(日) 15:00:52.38ID:8/sCKaWm0 >>624
なんつうロングパスよ、と思ったが、コードを書いた姿勢だけは褒めてやる。
とはいえ、俺は最近「馬鹿が書いたコードは読む価値がない」と結論を出したので読まないが。
(大体において意味不明な制御を行っており、結果、
解読に時間がかかる割に得る物が全くない)
それ、アルゴリズム説明してみ。
そしてそれが正しく動くとして、何故C++がそれを採用しないかも説明してみ。
なんつうロングパスよ、と思ったが、コードを書いた姿勢だけは褒めてやる。
とはいえ、俺は最近「馬鹿が書いたコードは読む価値がない」と結論を出したので読まないが。
(大体において意味不明な制御を行っており、結果、
解読に時間がかかる割に得る物が全くない)
それ、アルゴリズム説明してみ。
そしてそれが正しく動くとして、何故C++がそれを採用しないかも説明してみ。
627デフォルトの名無しさん (ブーイモ MM4d-zt73)
2018/07/01(日) 15:02:02.99ID:iXNUK265M 地権者とはどういう意味なの?
628222 (ワッチョイ 02bd-AF1h)
2018/07/01(日) 15:44:14.33ID:H+9S2vGe0 クラスTのオブジェクトを参照するスマポsumapo<T>のインスタンスpaが、クラスTのインスタンスaを参照している状況を
pa→[a]
と書くとする。ここで、[a]は、aに参照カウントその他を追加してwrapしたもの。(>>623におけるcounted_refクラスに当たる。
[a]はインスタンスaにつき唯一だが、[a]を参照するsumapo<T>は複数有り得る。
で、paとpbが循環参照しているとは、次のような状況である。
例1: pa→[a], pb→[a]、ここでpbはaのメンバ(paとpbが循環参照
例2: pa→[a], pb→[b], pc→[a]、ここでpbはaのメンバ、pcはbのメンバ(pa、pb、pcが循環参照
例1では[a]がpaとpbから参照されていることになっており(参照カウント2
結果、paの解放時、paのデストラクタで[a]の参照カウントが1になるが0にはならないので、
参照カウントだけに頼るとその時点でpaのデストラクタは[a]が解放されない。(引き続きpbから参照され続ける。
一方、pbの解放条件は、[a]の解放である(∵pbがaのメンバであるため)。というわけで解放がデッドロックに陥る。
しかしpa→[a]==>pb→[a]、という参照関係(paのみが参照関係の根である)をpaの解放時に把握できていれば、
paの解放で[a](とそのメンバpb)を解放して無問題であることがワカル
この参照関係のうち、「==>」をpb.setLandowner(&pa)とすることで設定し、-- (1)
paの解放時に全体として参照関係の根がpa自身「のみ」であることを証明する -- (2)
ことにより、安全に解放が行える。((1)と(2)がshared_ptr<T>にたいしsumapo<T>で追加になった要素
標準ライブラリに入っていないのは、(2)の証明コストがイマイチかかるからだろうJK
pa→[a]
と書くとする。ここで、[a]は、aに参照カウントその他を追加してwrapしたもの。(>>623におけるcounted_refクラスに当たる。
[a]はインスタンスaにつき唯一だが、[a]を参照するsumapo<T>は複数有り得る。
で、paとpbが循環参照しているとは、次のような状況である。
例1: pa→[a], pb→[a]、ここでpbはaのメンバ(paとpbが循環参照
例2: pa→[a], pb→[b], pc→[a]、ここでpbはaのメンバ、pcはbのメンバ(pa、pb、pcが循環参照
例1では[a]がpaとpbから参照されていることになっており(参照カウント2
結果、paの解放時、paのデストラクタで[a]の参照カウントが1になるが0にはならないので、
参照カウントだけに頼るとその時点でpaのデストラクタは[a]が解放されない。(引き続きpbから参照され続ける。
一方、pbの解放条件は、[a]の解放である(∵pbがaのメンバであるため)。というわけで解放がデッドロックに陥る。
しかしpa→[a]==>pb→[a]、という参照関係(paのみが参照関係の根である)をpaの解放時に把握できていれば、
paの解放で[a](とそのメンバpb)を解放して無問題であることがワカル
この参照関係のうち、「==>」をpb.setLandowner(&pa)とすることで設定し、-- (1)
paの解放時に全体として参照関係の根がpa自身「のみ」であることを証明する -- (2)
ことにより、安全に解放が行える。((1)と(2)がshared_ptr<T>にたいしsumapo<T>で追加になった要素
標準ライブラリに入っていないのは、(2)の証明コストがイマイチかかるからだろうJK
629222 (ワッチョイ 02bd-AF1h)
2018/07/01(日) 15:48:07.39ID:H+9S2vGe0630デフォルトの名無しさん (ワッチョイ 219f-iScA)
2018/07/01(日) 16:55:50.02ID:8/sCKaWm0 >>628
まずそういうのはインタフェースを揃えろ。
(俺はスマポは使ったことがないが、俺の理解の範囲では)
お前はスマポの仕様を勘違いしている。
オブジェクト側をラップするのはソースコードの全面的書き換えが必要になるだろ。
だからそんなことはしてない。
スマポも普通のクラスでしかなく、スマポ側に制御に必要な情報全てを持っている。
オブジェクトと癒着はしてないんだよ。
> 一般的な実装では、 std::shared_ptr は2つのポインタを保持します。
> 格納されたポインタ (get() で返されるもの)
> 制御ブロックへのポインタ
> https://ja.cppreference.com/w/cpp/memory/shared_ptr
が、まあ、言いたいことは分かるし、ここは本質的には重要ではないので、
今回はお前のオレオレ用語のままでいい。
さて本題だが、(1)は誰が管理するんだ?
プログラマが明示的に手動で管理するのなら、現行のshared_ptr/weak_ptrと手間が変わらない。
だから自動的に出来る必要があるが、これは出来るのか?
具体的に言えば、お前が言っている「参照関係の根」をshared_ptrで、
「pa→[a]==>pb→[a]、という参照関係」のpbをweak_ptrで実装しろというのが現行の仕様だが、
これに対して何が便利になってるんだ?
まずそういうのはインタフェースを揃えろ。
(俺はスマポは使ったことがないが、俺の理解の範囲では)
お前はスマポの仕様を勘違いしている。
オブジェクト側をラップするのはソースコードの全面的書き換えが必要になるだろ。
だからそんなことはしてない。
スマポも普通のクラスでしかなく、スマポ側に制御に必要な情報全てを持っている。
オブジェクトと癒着はしてないんだよ。
> 一般的な実装では、 std::shared_ptr は2つのポインタを保持します。
> 格納されたポインタ (get() で返されるもの)
> 制御ブロックへのポインタ
> https://ja.cppreference.com/w/cpp/memory/shared_ptr
が、まあ、言いたいことは分かるし、ここは本質的には重要ではないので、
今回はお前のオレオレ用語のままでいい。
さて本題だが、(1)は誰が管理するんだ?
プログラマが明示的に手動で管理するのなら、現行のshared_ptr/weak_ptrと手間が変わらない。
だから自動的に出来る必要があるが、これは出来るのか?
具体的に言えば、お前が言っている「参照関係の根」をshared_ptrで、
「pa→[a]==>pb→[a]、という参照関係」のpbをweak_ptrで実装しろというのが現行の仕様だが、
これに対して何が便利になってるんだ?
631デフォルトの名無しさん (スップ Sd22-oAt+)
2018/07/02(月) 00:07:45.34ID:Zwsx96MEd コストを考えなければ自動化は可能
632デフォルトの名無しさん (ワッチョイ 219f-iScA)
2018/07/02(月) 01:32:55.93ID:Ael8RIVm0 >>631
それはC++的には意味がないだろ。
結局、現行の仕様が何故そうなのかを理解出来ない馬鹿が吠えただけだろ。
まあJavaScripterなんて所詮こんなもんだが。
「スクリプト言語使いをプログラマと呼ぶな」というのは、多少は当たってる。
彼らが書けるのは「動けばいい」程度のコードまででしかない。
それはC++的には意味がないだろ。
結局、現行の仕様が何故そうなのかを理解出来ない馬鹿が吠えただけだろ。
まあJavaScripterなんて所詮こんなもんだが。
「スクリプト言語使いをプログラマと呼ぶな」というのは、多少は当たってる。
彼らが書けるのは「動けばいい」程度のコードまででしかない。
633デフォルトの名無しさん (ワッチョイ 2150-oAt+)
2018/07/02(月) 07:41:35.32ID:nnMC6UF+0 適材適所
言語は上から下まで色々と使えた方が良い
言語は上から下まで色々と使えた方が良い
634デフォルトの名無しさん (ラクッペ MMc1-0+WE)
2018/07/02(月) 10:04:22.29ID:JZwVDAwbM 他の言語を見下すプログラマーにはなりたくない
635デフォルトの名無しさん (ワッチョイ 927e-mVTy)
2018/07/02(月) 10:28:58.92ID:CEdwz05Y0 pythonしか使えないやつが作った特定のサイトから画像を大量にダウンロードするだけのツールが
クソ遅いうえにメモリ4GBも使ってたので頭pythonってクソだなって思った
クソ遅いうえにメモリ4GBも使ってたので頭pythonってクソだなって思った
636デフォルトの名無しさん (ワッチョイ ad8a-4/UQ)
2018/07/02(月) 11:36:32.45ID:+g59n7Y00 使える言語を聞かれてC++含めて複数答えたら
確かPHPあたりで「それプログラムじゃなくてスクリプトだよね」って言われたことはあるな
そこまで上から目線で突っ込むことか?とイラッとした記憶があるな
確かPHPあたりで「それプログラムじゃなくてスクリプトだよね」って言われたことはあるな
そこまで上から目線で突っ込むことか?とイラッとした記憶があるな
637デフォルトの名無しさん (ワッチョイ aec6-yQv9)
2018/07/02(月) 12:03:01.41ID:ts2f8fFV0 いるよね、やたら偉そうに
自分を大きく見せようとするやつ
自分を大きく見せようとするやつ
638デフォルトの名無しさん (ワッチョイ 0d8a-LTG6)
2018/07/02(月) 12:09:40.57ID:Y9X1m4Hz0 c++,c,sh,bash,zsh,csh,tch,screen,glsl,php...
639デフォルトの名無しさん (ドコグロ MM89-9w61)
2018/07/02(月) 12:29:18.80ID:6i8CkDzMM640デフォルトの名無しさん (ワッチョイ 79b3-HrKv)
2018/07/02(月) 16:41:11.07ID:HeCnpISr0641デフォルトの名無しさん (ワッチョイ 79b3-HrKv)
2018/07/02(月) 16:41:41.19ID:HeCnpISr0 乗り換えるも何もここはC++スレじゃないか。
642デフォルトの名無しさん (ワッチョイ 869f-Rle/)
2018/07/02(月) 20:28:17.83ID:9WbprnCr0 >>635
その程度のもの、文句言うなら自分で作れや。
その程度のもの、文句言うなら自分で作れや。
643デフォルトの名無しさん (ワッチョイ 6e79-tt68)
2018/07/02(月) 20:46:38.75ID:dFSJYber0 >>635
wgetはサイトから再帰ありで指定のファイル取得できるよ。
wgetはサイトから再帰ありで指定のファイル取得できるよ。
644デフォルトの名無しさん (ワッチョイ 219f-iScA)
2018/07/02(月) 22:40:34.15ID:Ael8RIVm0 お前らは知らないからそんな呑気なことが言える。
実際、JavaScriptはマジでゴミコードの山だ。
商用サイトでも糞重いしリークしまくりだ。
PHPはJavaScriptに比べ露出は低いが、OSSを見る限りやはり糞だ。
とはいえコードの質はPHP>>>JavaScriptだが。
DB接続があり、初心者にもコードの質が見える所が違うのだろう。
PHPerは虐げられているが、その分勘違い野郎は少ない。
最悪なのはJavaScripterだ。
一般のスクリプト言語(Python, Ruby含む)とC++等のプログラミング言語の違いは、
前者は圧倒的に「一回動作させれば終わり」な使われ方をすること。
だから、メモリリーク?何それ美味しいの?
コードが美しい?そんなことよりちゃっちゃと書いて実行させた方が早いでしょ、となる。
長期的保守の必要がない使い捨てコードばかり書いているから、
保守に耐える品質のコードを書けるようにならないだけ。
だから正確には、
「保守に耐える品質のコードを書けない馬鹿をプログラマと呼ぶな」であり、
それがほぼ「スクリプト言語しか使えない馬鹿」と一致する、というだけ。
一般的に(JavaScript除く)スクリプト言語は圧倒的に遅く、
味見ではなくガチならC/C++に書き換えるケースも多々発生する、というのも
これを後押ししている。
とはいえ、JavaScripterやPHPerみたいな馬鹿揃いでも
何とかるように出来ているのがWeb系()の凄いところ。
あれは学ぶ価値あると思うぞ。
色々C++では無駄に難しく考えすぎていたな、ということに気づかされるから。
今更導入されたラムダもしかり。あれは手抜きにはかなり便利だ。
コルーチンもそうでしょ。無しで同じ事をやろうとするとそれなりにエグくなる。
実際、JavaScriptはマジでゴミコードの山だ。
商用サイトでも糞重いしリークしまくりだ。
PHPはJavaScriptに比べ露出は低いが、OSSを見る限りやはり糞だ。
とはいえコードの質はPHP>>>JavaScriptだが。
DB接続があり、初心者にもコードの質が見える所が違うのだろう。
PHPerは虐げられているが、その分勘違い野郎は少ない。
最悪なのはJavaScripterだ。
一般のスクリプト言語(Python, Ruby含む)とC++等のプログラミング言語の違いは、
前者は圧倒的に「一回動作させれば終わり」な使われ方をすること。
だから、メモリリーク?何それ美味しいの?
コードが美しい?そんなことよりちゃっちゃと書いて実行させた方が早いでしょ、となる。
長期的保守の必要がない使い捨てコードばかり書いているから、
保守に耐える品質のコードを書けるようにならないだけ。
だから正確には、
「保守に耐える品質のコードを書けない馬鹿をプログラマと呼ぶな」であり、
それがほぼ「スクリプト言語しか使えない馬鹿」と一致する、というだけ。
一般的に(JavaScript除く)スクリプト言語は圧倒的に遅く、
味見ではなくガチならC/C++に書き換えるケースも多々発生する、というのも
これを後押ししている。
とはいえ、JavaScripterやPHPerみたいな馬鹿揃いでも
何とかるように出来ているのがWeb系()の凄いところ。
あれは学ぶ価値あると思うぞ。
色々C++では無駄に難しく考えすぎていたな、ということに気づかされるから。
今更導入されたラムダもしかり。あれは手抜きにはかなり便利だ。
コルーチンもそうでしょ。無しで同じ事をやろうとするとそれなりにエグくなる。
645デフォルトの名無しさん (ワッチョイ 02bd-AF1h)
2018/07/03(火) 00:37:00.88ID:kg4YTZEy0 >>630
>さて本題だが、(1)は誰が管理するんだ?
いやすまん>>628の最後の一文ではそれをすっかり失念してたわ;;
標準ライブラリにsumapo<T>が入りえない最大の理由は、(1)の管理を手動でせねばならない、という使い勝手の悪さのが最大の理由
(>>222で書いた「使い勝手の悪さ」のことじゃわ
これを自動化するにはリフレクションが要る
それはそうとして、
1. オブジェクト側をラップする
というのと、
2. オブジェクトと癒着
は別の話じゃわ;
1は標準的なshared_ptrの実装ではそうなっている(counted_refという名前のクラスは実在の実装から拝借したものであって漏れの独創ではない
だいたい
>[a]はインスタンスaにつき唯一だが、[a]を参照するsumapo<T>は複数有り得る。 (>>628)
なので、参照カウンタを所有するのはオブジェクト側をラップした[a]以外ありえんのじゃわ
[a]を参照する全てのsumapo<T>は、[a]より長く生き長らえることは無い
2はsumapo<T>にとっては必要だが、shared_ptrには要らん
>さて本題だが、(1)は誰が管理するんだ?
いやすまん>>628の最後の一文ではそれをすっかり失念してたわ;;
標準ライブラリにsumapo<T>が入りえない最大の理由は、(1)の管理を手動でせねばならない、という使い勝手の悪さのが最大の理由
(>>222で書いた「使い勝手の悪さ」のことじゃわ
これを自動化するにはリフレクションが要る
それはそうとして、
1. オブジェクト側をラップする
というのと、
2. オブジェクトと癒着
は別の話じゃわ;
1は標準的なshared_ptrの実装ではそうなっている(counted_refという名前のクラスは実在の実装から拝借したものであって漏れの独創ではない
だいたい
>[a]はインスタンスaにつき唯一だが、[a]を参照するsumapo<T>は複数有り得る。 (>>628)
なので、参照カウンタを所有するのはオブジェクト側をラップした[a]以外ありえんのじゃわ
[a]を参照する全てのsumapo<T>は、[a]より長く生き長らえることは無い
2はsumapo<T>にとっては必要だが、shared_ptrには要らん
646デフォルトの名無しさん (ワッチョイ 02bd-AF1h)
2018/07/03(火) 00:40:48.76ID:kg4YTZEy0 ちなご興味のお有りの方にカミングアウトすると、>>623のコードのSUMAPO_ONマクロを0にすると
sumapo<T>は普通のshared_ptr<T>になりぬ
動作やコードを比べて見られるのも一興かと、
sumapo<T>は普通のshared_ptr<T>になりぬ
動作やコードを比べて見られるのも一興かと、
647デフォルトの名無しさん (ワッチョイ 02bd-AF1h)
2018/07/03(火) 01:12:15.05ID:kg4YTZEy0 ちな(2)、
>「pa→[a]==>pb→[a]、という参照関係」のpbをweak_ptrで実装しろというのが現行の仕様だが(>>630)
これは、ちげう
weak_ptrを使って[a]の解放の根がpaのみであることを証明できるのは、実際に[a]を解放したときに限られるが
もし[a]の解放の根がpaだけではないと反証されたら[a]を解放してしまった後で藻前責任とれんの…?
一方sumapo<T>はそんな迂闊なことはせず、解放「前」に証明を試みるんである
>「pa→[a]==>pb→[a]、という参照関係」のpbをweak_ptrで実装しろというのが現行の仕様だが(>>630)
これは、ちげう
weak_ptrを使って[a]の解放の根がpaのみであることを証明できるのは、実際に[a]を解放したときに限られるが
もし[a]の解放の根がpaだけではないと反証されたら[a]を解放してしまった後で藻前責任とれんの…?
一方sumapo<T>はそんな迂闊なことはせず、解放「前」に証明を試みるんである
648デフォルトの名無しさん (ワッチョイ 927e-mVTy)
2018/07/03(火) 05:12:51.76ID:XnJOzKj10 >>639
だから頭pythonだと言ったろ
俺がこれ遅くねえかって言ったら頭ひねった結果理由がわからんと言ってきた
俺が作り直してやったら速度が倍増したけどHTTPリクエストするだけでメモリを数十MB使われたからPythonもクソだわ
だから頭pythonだと言ったろ
俺がこれ遅くねえかって言ったら頭ひねった結果理由がわからんと言ってきた
俺が作り直してやったら速度が倍増したけどHTTPリクエストするだけでメモリを数十MB使われたからPythonもクソだわ
649デフォルトの名無しさん (ワッチョイ 02b3-9w61)
2018/07/03(火) 05:40:01.78ID:2wRh2EpV0 >>648
> 俺が作り直してやったら速度が倍増したけどHTTPリクエストするだけでメモリを数十MB使われたからPythonもクソだわ
頭の悪い知ったかに絡まれるPython可哀想 w
低能しかいない職場なのかよ
> 俺が作り直してやったら速度が倍増したけどHTTPリクエストするだけでメモリを数十MB使われたからPythonもクソだわ
頭の悪い知ったかに絡まれるPython可哀想 w
低能しかいない職場なのかよ
650デフォルトの名無しさん (ワッチョイ 219f-iScA)
2018/07/03(火) 06:33:44.96ID:7Nykwcxu0 >>645-647
なるほどお前が何も理解してないのは分かった。
> これを自動化するにはリフレクションが要る
これは違う。
仮にリフレクションがあったとして、何をどうするか説明してみろ。
お前には出来ないから。
> weak_ptrを使って[a]の解放の根がpaのみであることを証明できるのは、実際に[a]を解放したときに限られるが
> もし[a]の解放の根がpaだけではないと反証されたら[a]を解放してしまった後で藻前責任とれんの…?
これも違う。
お前はweak_ptrの仕様を理解していない。
お前の言い分だと、「現行の仕様では循環参照を実装出来ない」事になるが、
これは明確な間違いだろ。
お前はこんな当たり前の事すら理解出来ないほど馬鹿なんだよ。
そもそも、
> 標準ライブラリに入っていないのは、(2)の証明コストがイマイチかかるからだろうJK (>>628)
これ自体が間違ってるんだが。
もう君は相手にする価値のない馬鹿ということでいいかな?
JavaScripterなんてこの程度の馬鹿しかいないし、お前もそうだ、でしかない。
なるほどお前が何も理解してないのは分かった。
> これを自動化するにはリフレクションが要る
これは違う。
仮にリフレクションがあったとして、何をどうするか説明してみろ。
お前には出来ないから。
> weak_ptrを使って[a]の解放の根がpaのみであることを証明できるのは、実際に[a]を解放したときに限られるが
> もし[a]の解放の根がpaだけではないと反証されたら[a]を解放してしまった後で藻前責任とれんの…?
これも違う。
お前はweak_ptrの仕様を理解していない。
お前の言い分だと、「現行の仕様では循環参照を実装出来ない」事になるが、
これは明確な間違いだろ。
お前はこんな当たり前の事すら理解出来ないほど馬鹿なんだよ。
そもそも、
> 標準ライブラリに入っていないのは、(2)の証明コストがイマイチかかるからだろうJK (>>628)
これ自体が間違ってるんだが。
もう君は相手にする価値のない馬鹿ということでいいかな?
JavaScripterなんてこの程度の馬鹿しかいないし、お前もそうだ、でしかない。
651デフォルトの名無しさん (アウアウカー Sac9-514M)
2018/07/03(火) 22:03:47.56ID:STTK4/bNa unique_ptrの所有権ってnewとdeleteは任せろ、アクセスはご自由にどうぞという解釈でいいですか?
652デフォルトの名無しさん (ワッチョイ 45fa-2e90)
2018/07/04(水) 21:55:39.61ID:gFgZc5FG0 MFE
653デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/05(木) 00:13:55.65ID:F5EmMeHI0 よくわからんがリファレンスカウンタがゼロになったら解放するしょうもないプログラムか
MSのCOMもそんなんだったような覚えがあるわ
MSのCOMもそんなんだったような覚えがあるわ
654デフォルトの名無しさん (ワッチョイ e7c3-y/Vi)
2018/07/05(木) 00:39:00.48ID:LvrOI/wi0 10年ぶりにC++に戻ってきました。
C++11/14/17なんて出てたんですね。
これってもうstableですか?
普通に使っても大丈夫?
C++11/14/17なんて出てたんですね。
これってもうstableですか?
普通に使っても大丈夫?
655デフォルトの名無しさん (ワッチョイ 5f34-M0Jq)
2018/07/05(木) 01:10:42.95ID:kXJXvyLk0 なにを基準にstableなんだか
古い時代のコンパイラ使っていたら一生stanbleにはならんよ
古い時代のコンパイラ使っていたら一生stanbleにはならんよ
656デフォルトの名無しさん (ワッチョイ 5f12-Rmg1)
2018/07/05(木) 01:14:09.68ID:gdOfHcx+0 >>654
stableにはさせん、させんぞぉ!
という層でC++は出来てる
常に進化するので、それに付いていけないB級はいらない
なので、あなたは使わなくていい
使いたいか、そうでないか、人に聞く前に自分の欲望で決めるのがC++だ
stableにはさせん、させんぞぉ!
という層でC++は出来てる
常に進化するので、それに付いていけないB級はいらない
なので、あなたは使わなくていい
使いたいか、そうでないか、人に聞く前に自分の欲望で決めるのがC++だ
657デフォルトの名無しさん (ワッチョイ e7c3-y/Vi)
2018/07/05(木) 10:08:22.57ID:LvrOI/wi0 >>656
C++0Xと騒がれていた時代のC++03のように
スタンダードなレベルに普及しているかという
趣旨の質問でした。
調べてみたらC++11くらいなら主な実装系で
サポートできているっぽいですね。
新規案件では採用してみたいです。
Web界隈は新し物好きの若者が多くて
勝手に栄枯盛衰していくコミュニティですが、
C++は化石みたいな人が多い空気があるので、
C++11以降、コミュニティが追従しているのか
ちょっと心配ではあります。
C++0Xと騒がれていた時代のC++03のように
スタンダードなレベルに普及しているかという
趣旨の質問でした。
調べてみたらC++11くらいなら主な実装系で
サポートできているっぽいですね。
新規案件では採用してみたいです。
Web界隈は新し物好きの若者が多くて
勝手に栄枯盛衰していくコミュニティですが、
C++は化石みたいな人が多い空気があるので、
C++11以降、コミュニティが追従しているのか
ちょっと心配ではあります。
658はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-UVFs)
2018/07/05(木) 12:46:10.18ID:l9X7uzb+0 >>657
最新をどんどん使うという雰囲気ではないけど、C++11 は人権というくらいには言ってよいと思う。
最新をどんどん使うという雰囲気ではないけど、C++11 は人権というくらいには言ってよいと思う。
659デフォルトの名無しさん (ワッチョイ 5f03-UVFs)
2018/07/05(木) 15:11:16.58ID:4d7qFxYr0 出口の見えない長いトンネルをやっと出た
それがC++11だね
それがC++11だね
660デフォルトの名無しさん (スフッ Sd7f-bJgV)
2018/07/05(木) 15:15:58.91ID:gENMFstYd トンネルを抜けるとそこは針地獄でした。これまでの法則は通用しません
661デフォルトの名無しさん (ワッチョイ 5f03-UVFs)
2018/07/05(木) 18:13:38.78ID:4d7qFxYr0 どこが針地獄なんだよ
ちょっと想像しにくいが
C++11の新機能がまったく使えないという
想像を絶するアフォいるのか?
ちょっと想像しにくいが
C++11の新機能がまったく使えないという
想像を絶するアフォいるのか?
662デフォルトの名無しさん (アウアウカー Sa1b-PAUf)
2018/07/05(木) 18:39:58.42ID:FcSMwQSva このスレにいる気がする
663デフォルトの名無しさん (アウアウカー Sa1b-1NyI)
2018/07/05(木) 18:48:07.11ID:9x31jpPta 良く、拡張子cppでCのコードしか書いてないファイルあるけど、あれってC++のコード書いても動くもの?
コンパイラはC++だよね?
コンパイラはC++だよね?
664デフォルトの名無しさん (ワッチョイ 678a-K9rx)
2018/07/05(木) 18:51:26.91ID:I27lRIcu0 配列初期化子が書けるかな?
665はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-UVFs)
2018/07/05(木) 18:59:41.66ID:l9X7uzb+0 仮引数リストが空の場合の解釈が違ったりとか、
文字リテラルや文字列リテラルの型が違ったりとか、
地味な非互換はいくつかある。
そのあたりを踏まなければおおよそ大丈夫。
文字リテラルや文字列リテラルの型が違ったりとか、
地味な非互換はいくつかある。
そのあたりを踏まなければおおよそ大丈夫。
666デフォルトの名無しさん (ワッチョイ 479f-Rmg1)
2018/07/05(木) 21:02:37.89ID:osRjg7F+0 >>657
お前含めてWeb界隈、特にJavaScriperには馬鹿しかいないけどな。
これは印象ではなく、事実な。
何を使うかはお前が決めればいいだけ。
実際、Go/PHPではstableですか?なんて聞く馬鹿はいないだろ。
この違いを理解出来ないのはJavaScripterが馬鹿な証拠。
お前含めてWeb界隈、特にJavaScriperには馬鹿しかいないけどな。
これは印象ではなく、事実な。
何を使うかはお前が決めればいいだけ。
実際、Go/PHPではstableですか?なんて聞く馬鹿はいないだろ。
この違いを理解出来ないのはJavaScripterが馬鹿な証拠。
667デフォルトの名無しさん (ブーイモ MM2b-XvZQ)
2018/07/05(木) 21:24:33.79ID:D+Mkul5xM668デフォルトの名無しさん (ワッチョイ 07c3-rubz)
2018/07/05(木) 22:19:57.45ID:1o1A7P+B0 657が煽りっぽいからしょがない
C++使えてJS使えない奴なんかいないだろ
C++使えてJS使えない奴なんかいないだろ
669デフォルトの名無しさん (ワッチョイ 479f-Rmg1)
2018/07/05(木) 22:59:19.40ID:osRjg7F+0 >>667
> 私はjs使えませんアピールしてんの?
そりゃお前だろ。
お前が本当にJavaScriptを使えるなら、今のJavaScripterがどれだけ酷いか知ってるはず。
そしたらそんなことは到底言えないだろ。
実際のサイトのコードも大半がゴミだし、JavaScriptのスレで定期的に盛り上がる話題は
・変数の初期化前の挙動を理解するべき ← そんな必要ない、C#ならSyntaxError
・セミコロンはどこに打つべきか ← アホか?C++ならSyntaxError
なんだからな。
あいつらがデータ構造について議論した試しがないし、それ以前にOOPも理解していない。
だからあいつらの定義では、
・上級者=新しい文法を使いこなせる人
となり、657や667みたいな投稿が発生する。
(要はJavaScripterは657,667含めて全員ゴミってだけだが)
C++の連中はそんなこと思ってないから、新文法も必要なときに使うだけであって、
必要ないと判断してるから使わないだけ。
積極的に使わないといけないと考えること自体が間違ってる。
C/C++の歴史は長いから、最低限必要な物は既に整備され尽くしてる。
(JavaScriptやPHPみたいなヘルパースクリプト出身ではない)
> 私はjs使えませんアピールしてんの?
そりゃお前だろ。
お前が本当にJavaScriptを使えるなら、今のJavaScripterがどれだけ酷いか知ってるはず。
そしたらそんなことは到底言えないだろ。
実際のサイトのコードも大半がゴミだし、JavaScriptのスレで定期的に盛り上がる話題は
・変数の初期化前の挙動を理解するべき ← そんな必要ない、C#ならSyntaxError
・セミコロンはどこに打つべきか ← アホか?C++ならSyntaxError
なんだからな。
あいつらがデータ構造について議論した試しがないし、それ以前にOOPも理解していない。
だからあいつらの定義では、
・上級者=新しい文法を使いこなせる人
となり、657や667みたいな投稿が発生する。
(要はJavaScripterは657,667含めて全員ゴミってだけだが)
C++の連中はそんなこと思ってないから、新文法も必要なときに使うだけであって、
必要ないと判断してるから使わないだけ。
積極的に使わないといけないと考えること自体が間違ってる。
C/C++の歴史は長いから、最低限必要な物は既に整備され尽くしてる。
(JavaScriptやPHPみたいなヘルパースクリプト出身ではない)
670デフォルトの名無しさん (ワッチョイ 5fe9-bJgV)
2018/07/05(木) 23:23:09.46ID:LtuS5J6M0 必要最低限はCだけでも既に整備されているので正しい
671デフォルトの名無しさん (アウアウウー Sa0b-KMj/)
2018/07/05(木) 23:25:50.10ID:ZcYhAMJSa >>669 新文法を必要ないと判断しているということはautoやrange-based forとか使ってないの?
672デフォルトの名無しさん (ワッチョイ 5f34-M0Jq)
2018/07/05(木) 23:27:52.02ID:kXJXvyLk0 古参でも理解できるプログラム書かないと仕事にならない場合もあるから
最悪C++使わないでC言語オンリーになる場合もある
というかC++自由に使える仕事の方が少ないよ
最悪C++使わないでC言語オンリーになる場合もある
というかC++自由に使える仕事の方が少ないよ
673デフォルトの名無しさん (アウアウウー Sa0b-KMj/)
2018/07/05(木) 23:52:49.42ID:ZcYhAMJSa C++の仕事にCしか書けない人が参加するのはありなのか?
674デフォルトの名無しさん (ワッチョイ e7c3-y/Vi)
2018/07/05(木) 23:57:07.38ID:LvrOI/wi0 >>666
あなたが無知すぎるでしょ。
趣味で使うのならばなんでも好きなの使えばいいが、
実務で使う場合は周りのことも考慮する必要があるのです。
PHPやPythonでStableというのは
公式インタプリタが正式リリースされたということ。
コミュニティも追従して最新に対応する。
C++の場合、影響力ある実装系がたくさんあるせいか
Stable化するタイミングが分かりにくく
コミュニティも追従してこない。
あなたが無知すぎるでしょ。
趣味で使うのならばなんでも好きなの使えばいいが、
実務で使う場合は周りのことも考慮する必要があるのです。
PHPやPythonでStableというのは
公式インタプリタが正式リリースされたということ。
コミュニティも追従して最新に対応する。
C++の場合、影響力ある実装系がたくさんあるせいか
Stable化するタイミングが分かりにくく
コミュニティも追従してこない。
675デフォルトの名無しさん (ワッチョイ e7c3-y/Vi)
2018/07/06(金) 00:02:48.84ID:CKHx9JNG0 >>669
あなたのいうJSはどのJSですか?
ES5ですか、ES6ですか、ES2016ですか2017ですか
はたまたCoffee Scriptですか、Type Scriptですか
一括りに語ってる時点で何もわかっていない。
あなたのいうJSはどのJSですか?
ES5ですか、ES6ですか、ES2016ですか2017ですか
はたまたCoffee Scriptですか、Type Scriptですか
一括りに語ってる時点で何もわかっていない。
676デフォルトの名無しさん (ワッチョイ e7c3-y/Vi)
2018/07/06(金) 00:07:12.34ID:CKHx9JNG0 JSとC++では処理系が多数あるという点では状況が似ていると思う。
C++にもトランスパイラが必要かな。
C++にもトランスパイラが必要かな。
677デフォルトの名無しさん (ワッチョイ 479f-Rmg1)
2018/07/06(金) 00:42:23.77ID:sc4caQgm0 >>674
> 趣味で使うのならばなんでも好きなの使えばいいが、
> 実務で使う場合は周りのことも考慮する必要があるのです。
じゃあここで聞くなよメンドクセエ奴だな。
お前が決められる立場なら勝手に決めろ。
ただ、その程度で実務でグループ開発する際に決められる立場にあるとは思えないし、
仮にそうならよほど酷い職場だとしか。
> コミュニティも追従して最新に対応する。
Python3やPerl6見てそう思うのなら頭おかしいだろ。
PHPもいまだに5.4とかだったりするのも俺には謎だが。
(まあ何か理由はあるのだとは思うが)
> C++の場合、影響力ある実装系がたくさんあるせいか
ダウト。組み込み等で選べない場合はそれを使うしか無く、
選べる場合はMSVC/gcc/Clangの3つしかないだろ。
> コミュニティも追従してこない。
だからそういう問題じゃねえんだよ。
お前がどのコンパイラを使うか、それを決めればいいだけなんだよ。
逆にお前が勘違いしている「コミュニティの追従」があったら何が嬉しいんだ?
>>675-676
スレチ
> 趣味で使うのならばなんでも好きなの使えばいいが、
> 実務で使う場合は周りのことも考慮する必要があるのです。
じゃあここで聞くなよメンドクセエ奴だな。
お前が決められる立場なら勝手に決めろ。
ただ、その程度で実務でグループ開発する際に決められる立場にあるとは思えないし、
仮にそうならよほど酷い職場だとしか。
> コミュニティも追従して最新に対応する。
Python3やPerl6見てそう思うのなら頭おかしいだろ。
PHPもいまだに5.4とかだったりするのも俺には謎だが。
(まあ何か理由はあるのだとは思うが)
> C++の場合、影響力ある実装系がたくさんあるせいか
ダウト。組み込み等で選べない場合はそれを使うしか無く、
選べる場合はMSVC/gcc/Clangの3つしかないだろ。
> コミュニティも追従してこない。
だからそういう問題じゃねえんだよ。
お前がどのコンパイラを使うか、それを決めればいいだけなんだよ。
逆にお前が勘違いしている「コミュニティの追従」があったら何が嬉しいんだ?
>>675-676
スレチ
678デフォルトの名無しさん (ワッチョイ 5fcf-p2rU)
2018/07/06(金) 00:49:16.12ID:/L8GPCKT0679デフォルトの名無しさん (ワッチョイ bf9f-1qXk)
2018/07/06(金) 00:51:22.50ID:ti7OEIpy0 >>677
お前もダウトだがな。
>MSVC/gcc/Clangの3つしかない
こいつらバージョンが違えば全然違う実装と言っていいくらい違うぞ。
最近はもうバージョン違えば動作違うなんて当たり前なんだから使う方が気を使えやって
立場が多いのかね。
お前もダウトだがな。
>MSVC/gcc/Clangの3つしかない
こいつらバージョンが違えば全然違う実装と言っていいくらい違うぞ。
最近はもうバージョン違えば動作違うなんて当たり前なんだから使う方が気を使えやって
立場が多いのかね。
680デフォルトの名無しさん (ワッチョイ 479f-Rmg1)
2018/07/06(金) 01:02:10.76ID:sc4caQgm0 >>679
> 最近はもうバージョン違えば動作違うなんて当たり前なんだから使う方が気を使えやって
> 立場が多いのかね。
自前でガチで組むならコンパイラのバージョンは基本固定だろ。(必要ない限り上げない)
OSSなら基本は最新バージョン追従で、逆に旧バージョンなんてシラネでいいだろ。
(そもそもコンパイラのバージョンが上がって問題になるケースも希だが)
むしろお前はどんな環境でやってるんだ?
> 最近はもうバージョン違えば動作違うなんて当たり前なんだから使う方が気を使えやって
> 立場が多いのかね。
自前でガチで組むならコンパイラのバージョンは基本固定だろ。(必要ない限り上げない)
OSSなら基本は最新バージョン追従で、逆に旧バージョンなんてシラネでいいだろ。
(そもそもコンパイラのバージョンが上がって問題になるケースも希だが)
むしろお前はどんな環境でやってるんだ?
>そもそもコンパイラのバージョンが上がって問題になるケースも希だが
そ・れ・が、
cuda9 はコンパイラ(VS2017) のバージョンが上がって、さっぱりコンパイルできない有様なんです…
そ・れ・が、
cuda9 はコンパイラ(VS2017) のバージョンが上がって、さっぱりコンパイルできない有様なんです…
682デフォルトの名無しさん (ワッチョイ 479f-Rmg1)
2018/07/06(金) 02:16:34.46ID:sc4caQgm0 >>681
それはcudaの問題で、C++側の問題ではないのでは?
もっとも、cuda環境なら俺なら当然コンパイラもcudaのバージョンも固定、
可能であればディスプレイドライバも固定で行くが。
cudaのOSSなら、それは最新版追従しかないし、
それで旧コードが駄目ってのなら、それはstableではないとしか。
ただcudaの場合はかなり特殊だからなー。
DirectXも「互換性?なにそれおいしいの?」状態だったらしいし。
あの辺は抽象化されてないからどうにもならんでしょ。
むしろ抽象化コストを嫌っているわけだし。
それはcudaの問題で、C++側の問題ではないのでは?
もっとも、cuda環境なら俺なら当然コンパイラもcudaのバージョンも固定、
可能であればディスプレイドライバも固定で行くが。
cudaのOSSなら、それは最新版追従しかないし、
それで旧コードが駄目ってのなら、それはstableではないとしか。
ただcudaの場合はかなり特殊だからなー。
DirectXも「互換性?なにそれおいしいの?」状態だったらしいし。
あの辺は抽象化されてないからどうにもならんでしょ。
むしろ抽象化コストを嫌っているわけだし。
>>682
VS2015 を今でも使わせてもらえるのなら、もう VS2015 は固定されているので、それでいいのですけれども…今はVS2015は「一般には」公開されていないようです
VS2017 は、なにかを追加するために MS にアクセスすると、ついでにコンパイラのバージョンもあげてしまうのです
もとに戻すのを繰り返しましたが、もう疲れました…
というか、Linux では cuda は gcc を使っているようですから、Windows でもそうしてほしいのですが…
VS2015 を今でも使わせてもらえるのなら、もう VS2015 は固定されているので、それでいいのですけれども…今はVS2015は「一般には」公開されていないようです
VS2017 は、なにかを追加するために MS にアクセスすると、ついでにコンパイラのバージョンもあげてしまうのです
もとに戻すのを繰り返しましたが、もう疲れました…
というか、Linux では cuda は gcc を使っているようですから、Windows でもそうしてほしいのですが…
684デフォルトの名無しさん (ワッチョイ 479f-Rmg1)
2018/07/06(金) 02:44:10.71ID:sc4caQgm0 >>683
> VS2017 は、なにかを追加するために MS にアクセスすると、ついでにコンパイラのバージョンもあげてしまうのです
なるー。自動アップデート死ね、って奴か。
それはかなり厳しいね。
回避するには、自前でVS2015マシンとVS2017マシンを分けるのが一番手っ取り早いだろう。
これが無理なら、試しにユーザアカウントを別にしてみればどうだろう?
(VS2017のアップデートも別人に対しては有効化されないだろと予想)
無理なら、、、確かnVidiaはdockerを用意するとか言ってなかったっけ?
Win10ならdockerはデフォで対応してたはずだし。
(つっても俺はcudaは2.2-4.xの頃しか使ったことがないので、現在の状況は詳しくは知らない。
まあ君なりに努力しての結果なんだろうとは思う。話が全然ずれてたらすまん)
> VS2017 は、なにかを追加するために MS にアクセスすると、ついでにコンパイラのバージョンもあげてしまうのです
なるー。自動アップデート死ね、って奴か。
それはかなり厳しいね。
回避するには、自前でVS2015マシンとVS2017マシンを分けるのが一番手っ取り早いだろう。
これが無理なら、試しにユーザアカウントを別にしてみればどうだろう?
(VS2017のアップデートも別人に対しては有効化されないだろと予想)
無理なら、、、確かnVidiaはdockerを用意するとか言ってなかったっけ?
Win10ならdockerはデフォで対応してたはずだし。
(つっても俺はcudaは2.2-4.xの頃しか使ったことがないので、現在の状況は詳しくは知らない。
まあ君なりに努力しての結果なんだろうとは思う。話が全然ずれてたらすまん)
685デフォルトの名無しさん (オッペケ Sr3b-oY+s)
2018/07/06(金) 03:43:33.27ID:vodDi731r 関数に引数として渡せるような多次元配列ってどうやってこしらえるのがベストプラクティスなの?
eigenとかは使いたくない
STLなら使える
サイズがコンパイル時に決まってたりはしない予定
eigenとかは使いたくない
STLなら使える
サイズがコンパイル時に決まってたりはしない予定
686デフォルトの名無しさん (アウアウカー Sa1b-PAUf)
2018/07/06(金) 07:31:53.62ID:db07fT/za vector配列の配列はどう?
687デフォルトの名無しさん (オッペケ Sr3b-oY+s)
2018/07/06(金) 14:07:17.73ID:jj6ND8hDr >>686
みんなそうしよるん?
みんなそうしよるん?
688デフォルトの名無しさん (ブーイモ MMcf-EhC9)
2018/07/06(金) 15:10:13.26ID:qNFGpfSUM689はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-UVFs)
2018/07/06(金) 18:11:53.41ID:G+eTHi8Q0 結論としては場合によるとしか言いようがないでしょ。
だいたいの場合にこれを使っておけばベストだわって言える方法はないと思う。
コンパイル時には決まらないって言ったって、
オブジェクトを構築した段階では決まるのか、
後から拡張 (縮小) することもあるのかでも判断は変わるだろうし。
ライブラリがユーザに見せる API なら抽象化されたクラスを用意した方がいいけど、
そうでもない内部的なものならポインタひとつと整数ふたつを渡すデザインでも用は足りるし。
だいたいの場合にこれを使っておけばベストだわって言える方法はないと思う。
コンパイル時には決まらないって言ったって、
オブジェクトを構築した段階では決まるのか、
後から拡張 (縮小) することもあるのかでも判断は変わるだろうし。
ライブラリがユーザに見せる API なら抽象化されたクラスを用意した方がいいけど、
そうでもない内部的なものならポインタひとつと整数ふたつを渡すデザインでも用は足りるし。
690デフォルトの名無しさん (ワッチョイ bf9f-1qXk)
2018/07/06(金) 20:22:26.51ID:ti7OEIpy0691デフォルトの名無しさん (スッップ Sd7f-SFkP)
2018/07/06(金) 20:29:34.20ID:2tKVBDDId 配列って書いてあるのにスパースとか
692デフォルトの名無しさん (アウアウカー Sa1b-PAUf)
2018/07/06(金) 20:43:51.44ID:xlBtj18/a 物によってはunorded_map使うのもありかも。
693デフォルトの名無しさん (ワッチョイ 5fb3-C8Iw)
2018/07/06(金) 21:10:28.97ID:q/LmFAim0 >>691
世の中にはスパース配列という用語があるんだが w
世の中にはスパース配列という用語があるんだが w
694デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/06(金) 21:14:57.76ID:+mjwGtwZ0 だからなに?
695デフォルトの名無しさん (オッペケ Sr3b-oY+s)
2018/07/06(金) 21:52:10.50ID:sMfNsGr7r696デフォルトの名無しさん (ワッチョイ 5fb3-C8Iw)
2018/07/06(金) 21:54:52.38ID:q/LmFAim0697デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/07(土) 00:10:21.61ID:kLxolQc60 1レコードが可変長の列でもない限り
vectorのvectorとか愚の骨頂
頭ワルイ
vectorのvectorとか愚の骨頂
頭ワルイ
698デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/07(土) 00:15:22.37ID:kLxolQc60 レコード作るたんびに激しいフラグメンテーションがおこるヒープをポコポコ作るとか
頭が超ワルイバカがやることです
よいこのみんなはココにいるバカなヤツラのマネはしないようにな
頭が超ワルイバカがやることです
よいこのみんなはココにいるバカなヤツラのマネはしないようにな
699デフォルトの名無しさん (アウアウカー Sa1b-PAUf)
2018/07/07(土) 00:19:50.53ID:4kzIZGkWa サイズが決まってないなら可変じゃね?
700デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/07(土) 00:23:47.27ID:kLxolQc60 はっきりいってな
行列ならvector1個で十分だからな
バカ以外にとっては常識
行列ならvector1個で十分だからな
バカ以外にとっては常識
701デフォルトの名無しさん (アウアウカー Sa1b-PAUf)
2018/07/07(土) 00:30:17.68ID:4kzIZGkWa vector使う事を否定はしないんだね?
702デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/07(土) 00:39:56.87ID:kLxolQc60 否定はしてない
行と列が可変な行列は
vector1個で十分といってる
m*nの列数の列を最初に先行してメモリアロケーションしたほうがいい
そのあとdata()で戻ってきたポインタつかっていじくり倒せばいい
とりあえず行毎にヒープを作る意味がまず皆無
行と列が可変な行列は
vector1個で十分といってる
m*nの列数の列を最初に先行してメモリアロケーションしたほうがいい
そのあとdata()で戻ってきたポインタつかっていじくり倒せばいい
とりあえず行毎にヒープを作る意味がまず皆無
703デフォルトの名無しさん (アウアウカー Sa1b-PAUf)
2018/07/07(土) 00:46:59.98ID:4kzIZGkWa すいませんめんどくさがりなんです。
一次元配列を二次元以上の配列に見せかける形にするという事か。
width * y + xみたいなアクセスね
一次元配列を二次元以上の配列に見せかける形にするという事か。
width * y + xみたいなアクセスね
704デフォルトの名無しさん (ワッチョイ 5f34-M0Jq)
2018/07/07(土) 03:12:36.31ID:O2wU114Q0 >>673 C言語オンリーのリナスとかめっちゃ有能やろ
言語習得能力と技術力はまた別の次元の話や
言語習得能力と技術力はまた別の次元の話や
705デフォルトの名無しさん (アウアウカー Sa1b-1NyI)
2018/07/07(土) 03:32:04.12ID:wWbENv3Pa トーパルズ君は孤高の天才だからな
同レベルでもなきゃチーム組んでもうまくいかなさそう
同レベルでもなきゃチーム組んでもうまくいかなさそう
706デフォルトの名無しさん (ワッチョイ 5ff8-UVFs)
2018/07/07(土) 05:41:28.97ID:29y2bIx90 array<array<int, 3>, 4> dimdim;
707デフォルトの名無しさん (ワッチョイ e7c3-WPlw)
2018/07/07(土) 08:35:34.97ID:wLozXdxk0 片方の長さが固定ならvector<array>でいいしだいたいそれで事足りる
708デフォルトの名無しさん (スッップ Sd7f-SFkP)
2018/07/07(土) 09:35:25.81ID:pSI+wWiJd 無駄が多い
メモリは1次元で確保しようぜ
メモリは1次元で確保しようぜ
709デフォルトの名無しさん (ワッチョイ 5ff8-UVFs)
2018/07/07(土) 09:39:18.64ID:29y2bIx90 valarray[slice]
710デフォルトの名無しさん (スッップ Sd7f-SFkP)
2018/07/07(土) 10:43:18.52ID:pSI+wWiJd C++標準ライブラリに多次元配列が無いのが悪い
711デフォルトの名無しさん (ガックシ 068f-oY+s)
2018/07/07(土) 10:44:34.62ID:wi4NNbsQ6 boostのmulti_arrayが標準ライブラリに入るのまだ?
712デフォルトの名無しさん (スッップ Sd7f-SFkP)
2018/07/07(土) 10:45:00.95ID:pSI+wWiJd まだ
713デフォルトの名無しさん (スッップ Sd7f-SFkP)
2018/07/07(土) 10:49:57.25ID:pSI+wWiJd それぞれの用途ごとにクラスを作るのがいいのかもね
パフォーマンスを考えると
パフォーマンスを考えると
714デフォルトの名無しさん (ワッチョイ 5fb3-C8Iw)
2018/07/07(土) 10:50:35.36ID:LxSGsocZ0715デフォルトの名無しさん (スッップ Sd7f-SFkP)
2018/07/07(土) 10:58:11.06ID:pSI+wWiJd パフォーマンスを考えると
の書き込みの後にパフォーマンス最悪なコードを貼る神経
の書き込みの後にパフォーマンス最悪なコードを貼る神経
716デフォルトの名無しさん (ワッチョイ 5fb3-C8Iw)
2018/07/07(土) 11:13:03.42ID:LxSGsocZ0 アンカーも知らんのか w
お前になんてレスしてない
お前になんてレスしてない
717デフォルトの名無しさん (スッップ Sd7f-SFkP)
2018/07/07(土) 11:20:51.40ID:pSI+wWiJd 誰へのレスとか関係あるかなあ
初心者コードを貼る神経
初心者コードを貼る神経
718デフォルトの名無しさん (ワッチョイ 5f81-UVFs)
2018/07/07(土) 11:25:14.92ID:3dCp3KqP0 鬱憤晴らししているんだろう
相手して欲しいだけだよ
相手して欲しいだけだよ
719デフォルトの名無しさん (ワッチョイ 6783-sule)
2018/07/07(土) 12:03:16.95ID:q1hkahzQ0 機能拡張しろとか言う前に自分の頭が足りないのだから素直にJavaでも使うべき。
とくに自分でリソース管理できない馬鹿は。
とくに自分でリソース管理できない馬鹿は。
720デフォルトの名無しさん (アウアウカー Sa1b-PAUf)
2018/07/07(土) 12:05:37.64ID:4kzIZGkWa javaは大嫌い
721デフォルトの名無しさん (ワッチョイ bf9f-1qXk)
2018/07/07(土) 12:32:39.18ID:7dAT5WdR0 >javaは大嫌い
本当にひでぇ回答だなw
本当にひでぇ回答だなw
722デフォルトの名無しさん (ワッチョイ 5fb3-C8Iw)
2018/07/07(土) 12:54:23.65ID:LxSGsocZ0 >>717
だからお前にレスしたわけじゃねーからいちいち絡んでくるなよ、気持ち悪いわ
だからお前にレスしたわけじゃねーからいちいち絡んでくるなよ、気持ち悪いわ
723デフォルトの名無しさん (ワッチョイ 478a-CyKI)
2018/07/07(土) 13:01:37.07ID:7Amz+9JA0 自分がコード貼らない言い訳してるだけだろ
気にすんな
気にすんな
724デフォルトの名無しさん (ワッチョイ 5fbd-c6cw)
2018/07/07(土) 17:12:22.13ID:4FQUFFqD0725デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/07(土) 17:24:57.56ID:vaOvOKvn0 言うほど悪くない?
悪すぎだろ
ボロいコンパイラだと特に
悪すぎだろ
ボロいコンパイラだと特に
726デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/07(土) 17:26:09.82ID:vaOvOKvn0 パフォーマンスを気にするときは
乗算すら除きたいわけで
乗算すら除きたいわけで
727デフォルトの名無しさん (ワッチョイ 5fbd-c6cw)
2018/07/07(土) 17:33:51.53ID:4FQUFFqD0728デフォルトの名無しさん (ワッチョイ 5fb3-C8Iw)
2018/07/07(土) 17:59:13.38ID:LxSGsocZ0729デフォルトの名無しさん (ワッチョイ 678a-K9rx)
2018/07/07(土) 18:05:35.89ID:xCeElJD00 >>728
そうか?画像を90度回してみてくれ
そうか?画像を90度回してみてくれ
730デフォルトの名無しさん (ワッチョイ df7e-/Wz9)
2018/07/07(土) 18:06:41.64ID:n3/QBjsU0 スペック上げて殴れ
731デフォルトの名無しさん (ワッチョイ 478a-CyKI)
2018/07/07(土) 18:11:02.14ID:7Amz+9JA0 殴らなくてもモニターを横にすればいいだけじゃ
732デフォルトの名無しさん (ワッチョイ 5fbd-c6cw)
2018/07/07(土) 18:26:37.83ID:4FQUFFqD0 画像を90度回すつもりで
for (py=0; py<height; py++) {
for (px=0; px<width; px++) {
dst[px][py]=src[py][px]
}
}
と書いたとしたら、ループ内ではwidth、heightともに定数とみなせるからループ最適化が効いて
dst、srcとも要素特定演算が加算のみになる可能性が微レ存、
この点>>702案に対して>>714のoperator[]はボロいコンパイラの場合は最適化機会を見逃す危険性は高いが
コンパイラからみてarrayに対する副作用がわからない関数呼び出しは含まれないから、原理的に最適化不可能というほどではない。
for (py=0; py<height; py++) {
for (px=0; px<width; px++) {
dst[px][py]=src[py][px]
}
}
と書いたとしたら、ループ内ではwidth、heightともに定数とみなせるからループ最適化が効いて
dst、srcとも要素特定演算が加算のみになる可能性が微レ存、
この点>>702案に対して>>714のoperator[]はボロいコンパイラの場合は最適化機会を見逃す危険性は高いが
コンパイラからみてarrayに対する副作用がわからない関数呼び出しは含まれないから、原理的に最適化不可能というほどではない。
733デフォルトの名無しさん (ワッチョイ 5fbd-c6cw)
2018/07/07(土) 19:01:02.34ID:4FQUFFqD0 ていうかこれで良くね?
ttp://codepad.org/2sMvNgye
ttp://codepad.org/2sMvNgye
734デフォルトの名無しさん (ワッチョイ 5fb3-C8Iw)
2018/07/07(土) 19:21:35.06ID:LxSGsocZ0735デフォルトの名無しさん (ワッチョイ 5fbd-c6cw)
2018/07/07(土) 19:26:22.85ID:4FQUFFqD0736デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/07(土) 19:35:42.78ID:kLxolQc60 やっぱりな知恵遅れのバカどもはなにも分かってないわ。。。
演算処理で一番ボトルネックになるのはメモリアクセスだからな
高速な演算をしたいのにメモリをあちこちバラバラに配置する知恵遅れはいない
局所参照性を無視して乗算がどうこうといってるレベルだからな。。。
知恵遅れたちにはCPUのキャッシュという概念がない
vector1個のほうが
メモリフラグメンテーションもおきにくいし
このスレのバカどもがどうこういってる演算においても激しく有利だからな
良い子のみんなはこのスレのバカどもがいうことなんか
マに受けたりしたらダメだからな
オレの書き込みだけ信じればいい
演算処理で一番ボトルネックになるのはメモリアクセスだからな
高速な演算をしたいのにメモリをあちこちバラバラに配置する知恵遅れはいない
局所参照性を無視して乗算がどうこうといってるレベルだからな。。。
知恵遅れたちにはCPUのキャッシュという概念がない
vector1個のほうが
メモリフラグメンテーションもおきにくいし
このスレのバカどもがどうこういってる演算においても激しく有利だからな
良い子のみんなはこのスレのバカどもがいうことなんか
マに受けたりしたらダメだからな
オレの書き込みだけ信じればいい
737デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/07(土) 19:53:26.81ID:kLxolQc60 ttp://codepad.org/2sMvNgye
↑アホが書いた典型的なサンプル
良い子のみんなはマネしないようにな
こんなアホがいるというサンプルになってる
http://d.hatena.ne.jp/pknight/touch/20100330/1269945131
↑同じアホでもまだこっちのがマシ
あいかわらずオレのレスは
いつでも針の穴を通すようなカンペキなレスだ
↑アホが書いた典型的なサンプル
良い子のみんなはマネしないようにな
こんなアホがいるというサンプルになってる
http://d.hatena.ne.jp/pknight/touch/20100330/1269945131
↑同じアホでもまだこっちのがマシ
あいかわらずオレのレスは
いつでも針の穴を通すようなカンペキなレスだ
738デフォルトの名無しさん (ワッチョイ 5f34-M0Jq)
2018/07/07(土) 19:57:56.70ID:O2wU114Q0 つ valarray
739デフォルトの名無しさん (ワッチョイ 5fbd-c6cw)
2018/07/07(土) 19:58:36.71ID:4FQUFFqD0 >>736
行列のrowを個別のstd::vector<T>とすることによる局所参照性の劣化は
ラスタスキャン順アクセスにおいて第i行から第i+1行に改行する時のみに限られる
(特にたまたま行列の横幅がキャッシュラインサイズの倍数でありかつ行がキャッシュラインに整列しているならば、何のペナルティーも生じない
ランダムアクセスならどっちもどっちになるからでかい配列の場合は言うほど気にしなくて良いんじゃ…
行列のrowを個別のstd::vector<T>とすることによる局所参照性の劣化は
ラスタスキャン順アクセスにおいて第i行から第i+1行に改行する時のみに限られる
(特にたまたま行列の横幅がキャッシュラインサイズの倍数でありかつ行がキャッシュラインに整列しているならば、何のペナルティーも生じない
ランダムアクセスならどっちもどっちになるからでかい配列の場合は言うほど気にしなくて良いんじゃ…
740デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/07(土) 20:41:37.82ID:vaOvOKvn0 パフォーマンス優先なら
メモリは連続
要素へのアクセスはシンプルに
[][] にこだわる必要はない
(x, y) や [座標] なども考える
乗算が遅い環境なら
要素数は2^nの形にするとか位置をキャッシュするとか
固定座標の処理で良いものはコンパイル時に決定出来るようにとか
メモリは連続
要素へのアクセスはシンプルに
[][] にこだわる必要はない
(x, y) や [座標] なども考える
乗算が遅い環境なら
要素数は2^nの形にするとか位置をキャッシュするとか
固定座標の処理で良いものはコンパイル時に決定出来るようにとか
741デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/07(土) 20:49:15.42ID:vaOvOKvn0 コンパイラをあてにするなら
生ポが一番最適化が効く
このスレだと拒否反応を示す人がいるだろうマクロを使うとか
生ポが一番最適化が効く
このスレだと拒否反応を示す人がいるだろうマクロを使うとか
742デフォルトの名無しさん (ワッチョイ 672d-CsAW)
2018/07/07(土) 21:35:08.81ID:2pqJGsxY0 MTPでコンパイルタイムに押し込めー わぁい!
と、5,6年前にやったときは8x9行列ぐらいで
gccのテンプレート展開の限界になった記憶がある
と、5,6年前にやったときは8x9行列ぐらいで
gccのテンプレート展開の限界になった記憶がある
743デフォルトの名無しさん (アウアウウー Sa0b-sule)
2018/07/07(土) 23:53:17.73ID:HbEbhDY0a LINUXで15GBくらいのテキストファイルを読み込みこんでGUIを作ろうとしています。
ファイルが大きいため速度が出せる言語で、かつGUI作成は情報量が多いと調べやすいので、まあまあメジャーな無料のGUIライブラリを使用したいと思っています。
perl>>python>>>>C++ の順で経験があり、C++はあまり詳しくないですが、速度重視でC++で行こうと検討しています。
GUIライブラリを調べているのですが、C++のGUIはあまり情報を見つけられず、めぼしいのはQtくらいしか目に付きませんでした。
会社のサーバのローカルディレクトリにQtをインストールしてみましたが、必要なライブラリが古かったりで、インストールできませんでした。
他に何かおすすめなGUIライブラリはありますでしょうか?
ファイルが大きいため速度が出せる言語で、かつGUI作成は情報量が多いと調べやすいので、まあまあメジャーな無料のGUIライブラリを使用したいと思っています。
perl>>python>>>>C++ の順で経験があり、C++はあまり詳しくないですが、速度重視でC++で行こうと検討しています。
GUIライブラリを調べているのですが、C++のGUIはあまり情報を見つけられず、めぼしいのはQtくらいしか目に付きませんでした。
会社のサーバのローカルディレクトリにQtをインストールしてみましたが、必要なライブラリが古かったりで、インストールできませんでした。
他に何かおすすめなGUIライブラリはありますでしょうか?
744デフォルトの名無しさん (ワッチョイ df7e-/Wz9)
2018/07/07(土) 23:56:16.40ID:n3/QBjsU0 公開しないならQtしかないしいつまでも古いライブラリを入れておくな
745デフォルトの名無しさん (ワッチョイ 5f1b-gqST)
2018/07/08(日) 00:24:35.82ID:wBhl3HXd0 imguiはどう?
746デフォルトの名無しさん (ワッチョイ a7d2-UVFs)
2018/07/08(日) 00:26:37.61ID:ib3y3idC0 GUIはTkライブラリをPerl/Pythonで作り、重い処理はC/C++プログラムとプロセス間通信と行うのがいいんじゃないですかね。
747デフォルトの名無しさん (ワッチョイ 67bd-aMDz)
2018/07/08(日) 00:40:55.76ID:Jzinsuog0 15gbのデータはguiでeditするの?
それともread onlyな入力データ?
それともread onlyな入力データ?
748デフォルトの名無しさん (ワッチョイ 87b3-SSkB)
2018/07/08(日) 01:20:06.11ID:ctFpH6QP0 個人的にはwxWidgetsを推す
749デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/08(日) 01:24:30.59ID:zc7zM8II0 どんなテキスト?
完全な自由フォーマット?
完全な自由フォーマット?
750デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/08(日) 01:37:33.05ID:zc7zM8II0 15GBだと読み込みだけで分単位の時間がかかる
UIも難しい
巨大テキストからどうやって表示箇所を選ぶ?
スクロールバーとページめくりだけじゃ目的の箇所を探せないよ
行番号指定ジャンプ?
15GBだとメモリコピーでも秒オーダーの時間がかかるから
1文字入力するごとに後ろをずらすなんてことも出来ないから
データの持ち方も工夫しないと
そもそもメモリに収まりきるのか?
RAMは何ギガ?
UIも難しい
巨大テキストからどうやって表示箇所を選ぶ?
スクロールバーとページめくりだけじゃ目的の箇所を探せないよ
行番号指定ジャンプ?
15GBだとメモリコピーでも秒オーダーの時間がかかるから
1文字入力するごとに後ろをずらすなんてことも出来ないから
データの持ち方も工夫しないと
そもそもメモリに収まりきるのか?
RAMは何ギガ?
751デフォルトの名無しさん (ワッチョイ 7f81-Gfd3)
2018/07/08(日) 01:58:53.01ID:fRwyFHTq0 サーバーって事だから、いっそ使いやすい型式でDBに格納し、
Web画面で表示するっていうのはどうだろう
グラフィック表示はクライアント側に任せてしまう
Web画面で表示するっていうのはどうだろう
グラフィック表示はクライアント側に任せてしまう
752デフォルトの名無しさん (ワッチョイ 478a-CyKI)
2018/07/08(日) 02:43:06.14ID:Qh5q4wMA0 全部で15GBのテキストじゃないの?
流石に1個で15GBは… 円周率のテキストファイルとかならあり得るか
流石に1個で15GBは… 円周率のテキストファイルとかならあり得るか
753デフォルトの名無しさん (ワッチョイ 5ff8-UVFs)
2018/07/08(日) 05:15:51.48ID:qIOhFZFQ0 mmapかねえ
754デフォルトの名無しさん (アウアウウー Sa0b-sule)
2018/07/08(日) 10:36:48.41ID:FCqbYUBUa >>744-753
色々な情報ありがとうございます。
>>744
gccなど単体でインストールできるものはローカルディレクトリに最新をインストールしたのですが、
Qtに必要な何かのライブラリの最新版をインストールするのに文字コードがc.utf8が必要なのですが、
今はja_JP.UTF-8しか選択できず、新しい文字コードを使うにはrootでの文字コード再生成が必要なため全体への影響を考え一旦保留としています。
>>745,748
候補としてちょっと調べてみます。
>>746
PythonならCython+Kivyで直接取り込もうと検討しています。
その場合、CythonがどこまでC++の速度に迫れるかの調査から始める必要があるのですが…
少し調べたらCython内で直接C++コードを書ける云々とあったからそれだと速度はクリアできるのかなぁ?というところで一旦ストップしています。
これは深い話するとちょっとスレチな内容になってきますね。。
ちなみに今回作ったものをTCP通信で別のプログラムに接続して使用する予定です。
>>747
Read Onlyで読み込み時に演算したりarray、unordered_map、構造体などに放り込んだりして加工して取り込んだあとは参照のみです。
751さんの話は一旦形式をDBで保存しそれを参照ですが、それに近い感じで使いやすい形式に変換したものをメモリに格納し参照するイメージです。
色々な情報ありがとうございます。
>>744
gccなど単体でインストールできるものはローカルディレクトリに最新をインストールしたのですが、
Qtに必要な何かのライブラリの最新版をインストールするのに文字コードがc.utf8が必要なのですが、
今はja_JP.UTF-8しか選択できず、新しい文字コードを使うにはrootでの文字コード再生成が必要なため全体への影響を考え一旦保留としています。
>>745,748
候補としてちょっと調べてみます。
>>746
PythonならCython+Kivyで直接取り込もうと検討しています。
その場合、CythonがどこまでC++の速度に迫れるかの調査から始める必要があるのですが…
少し調べたらCython内で直接C++コードを書ける云々とあったからそれだと速度はクリアできるのかなぁ?というところで一旦ストップしています。
これは深い話するとちょっとスレチな内容になってきますね。。
ちなみに今回作ったものをTCP通信で別のプログラムに接続して使用する予定です。
>>747
Read Onlyで読み込み時に演算したりarray、unordered_map、構造体などに放り込んだりして加工して取り込んだあとは参照のみです。
751さんの話は一旦形式をDBで保存しそれを参照ですが、それに近い感じで使いやすい形式に変換したものをメモリに格納し参照するイメージです。
755754 (アウアウウー Sa0b-sule)
2018/07/08(日) 10:39:18.44ID:FCqbYUBUa つづき
>>749,750
固定フォーマットです。
メモリはサーバなので数百GBはあります。
>>752
1ファイルなんです。。
解析ソフトから出力された結果です。
>>753
mmapぐぐったらI/Oがネックなときに効果が期待できるものなんですね。
今調べてわかったところでは、
[1-1] fgetsのみ→30秒以下
[1-2] ・fgets, sscanf, fscanfを組み合わせてフォーマットに沿って読み込む→約5分
だったので、scanの変数格納が支配的になりそうなので、次は下記を調査しようと思っています。
[2-2] freadでバイナリで読み込んで空白、改行を判定しながら必要なところだけ文字列や数値に変換すると早いか?
[2-3] fgetcで空白、改行を判定し直接charに入れて行くと早いか?↓
char a[1024];
i=0;
while ( (a[i]=fgetc(fp)) != EOF){
if(a[i] == " "){
a[i] = "\0"; //\0を入れるとそこまでをcharの文字列として扱ってくれる??
break;
}
i++;
}
>>749,750
固定フォーマットです。
メモリはサーバなので数百GBはあります。
>>752
1ファイルなんです。。
解析ソフトから出力された結果です。
>>753
mmapぐぐったらI/Oがネックなときに効果が期待できるものなんですね。
今調べてわかったところでは、
[1-1] fgetsのみ→30秒以下
[1-2] ・fgets, sscanf, fscanfを組み合わせてフォーマットに沿って読み込む→約5分
だったので、scanの変数格納が支配的になりそうなので、次は下記を調査しようと思っています。
[2-2] freadでバイナリで読み込んで空白、改行を判定しながら必要なところだけ文字列や数値に変換すると早いか?
[2-3] fgetcで空白、改行を判定し直接charに入れて行くと早いか?↓
char a[1024];
i=0;
while ( (a[i]=fgetc(fp)) != EOF){
if(a[i] == " "){
a[i] = "\0"; //\0を入れるとそこまでをcharの文字列として扱ってくれる??
break;
}
i++;
}
756754 (アウアウウー Sa0b-sule)
2018/07/08(日) 10:52:07.74ID:FCqbYUBUa あとは下記URLの「ファイルは一括で読み込め」の読み込み速度はどうかも調べてみる予定です。
ttps://qiita.com/kotauchisunsun/items/84e01c6fb621fcc1a647
それと下記も高速化のコーディングの参考にしようかと。
ttps://heavywatal.github.io/cxx/speed.html
ttps://qiita.com/kotauchisunsun/items/84e01c6fb621fcc1a647
それと下記も高速化のコーディングの参考にしようかと。
ttps://heavywatal.github.io/cxx/speed.html
757デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/08(日) 11:00:23.53ID:zc7zM8II0 読み込みと解析は別スレッド
解析はマルチスレッド
関数は専用化
AVXなどのリッチな命令を活用する
キャッシュを効率的に使う(何度も全体スキャンしない)
一般的な効率化技術
解析はマルチスレッド
関数は専用化
AVXなどのリッチな命令を活用する
キャッシュを効率的に使う(何度も全体スキャンしない)
一般的な効率化技術
758デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/08(日) 11:22:12.48ID:zc7zM8II0 fgetc, scanf, printfのような激遅関数は使わない
ファイルは大きな単位で読み込む (MB以上)
ファイルは大きな単位で読み込む (MB以上)
759デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/08(日) 11:37:23.14ID:zc7zM8II0760デフォルトの名無しさん (ワッチョイ df7e-/Wz9)
2018/07/08(日) 11:52:14.55ID:7cBfk+Rf0 ssd使え
761デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/08(日) 11:55:19.27ID:zc7zM8II0 15GB 30秒ってことは
HDDから読んでるわけではなさそう
キャッシュかSSD
HDDから読んでるわけではなさそう
キャッシュかSSD
762デフォルトの名無しさん (ワッチョイ 5f12-Rmg1)
2018/07/08(日) 14:39:20.17ID:xrorYcun0 まずは激遅でもいいからperlのGUIとDLL呼び出しで一通り動くものを作った方が良さそう
763デフォルトの名無しさん (ワッチョイ 4704-g8qq)
2018/07/08(日) 17:08:24.55ID:3Zh5d1Fm0 メモリ数百あるんなら、展開した後のデータ構造工夫しろ。
数ギガ読めるテキストエディタを夢想してみれ。
数ギガ読めるテキストエディタを夢想してみれ。
764デフォルトの名無しさん (ワッチョイ 5ff8-UVFs)
2018/07/08(日) 18:27:44.90ID:qIOhFZFQ0 数ギガを一気読みでオンメモリとか蹴り入るな
765デフォルトの名無しさん (ワッチョイ bf7f-6BMs)
2018/07/08(日) 19:48:36.43ID:h0tkW0Td0 コンバート系アプリだと専用端末だったりするしよくある
766デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/08(日) 22:07:57.31ID:IBdHDRbb0 まず固定長なら1行のバッファから読みこむだけの仕組みを作ってからの話になる
はっきりいって固定長のレイアウトに従って読みこむだけだからな
読みこみ処理の最適化なんかその後の話になる
固定長でなにをそんなに手こずってるのか意味が分からないしな
レコードのサイズはきまってるのに
fscanfとか書いてるということは末尾に改行が入ったレイアウトなのはなんとなく推定できる
レスを読んでもそもそも1レコードのサイズが何バイトなのか分かってて作ってるのかどうかすら怪しい
ファイルサイズをレコードサイズで割ってちゃんと整数になってるかとか確認してるのかどうかすらも怪しいからな
ファイルサイズだけ書いてレコード数すら書いてないしな
とにかく頭悪いヤツがしょうもないことで四苦八苦してるのは分かる
はっきりいって固定長のレイアウトに従って読みこむだけだからな
読みこみ処理の最適化なんかその後の話になる
固定長でなにをそんなに手こずってるのか意味が分からないしな
レコードのサイズはきまってるのに
fscanfとか書いてるということは末尾に改行が入ったレイアウトなのはなんとなく推定できる
レスを読んでもそもそも1レコードのサイズが何バイトなのか分かってて作ってるのかどうかすら怪しい
ファイルサイズをレコードサイズで割ってちゃんと整数になってるかとか確認してるのかどうかすらも怪しいからな
ファイルサイズだけ書いてレコード数すら書いてないしな
とにかく頭悪いヤツがしょうもないことで四苦八苦してるのは分かる
767754 (アウアウウー Sa0b-sule)
2018/07/08(日) 22:10:28.88ID:nff2cMgla 色々ご意見ありがとうございます。
まずは>>759さんのおっしゃるように、>>758さんのケアをしようと思うのですが、今のfgets+sscanfの組み合わせは下記URLを参考にしたのですが、
どれが激遅でどれが高速かの情報はどこかにあったりしますでしょうか?
(試そうと思っていたfgetcは遅いんですね…)
ttp://d.hatena.ne.jp/s-yata/20100726/1280138663
読み込み時に必要なのは、改行の判定、文字列の判定、int型で読み込んで0.025や0.1などを掛けてfloat型で保持(おそらくこれが一番多い処理)、と考えています。
ちなみに入力フォーマットは、ここから何行は文字列、ここから何行は数字の列(intに掛け算しfloatで保持したい)、という感じになっています。
最適な関数はどんな組み合わせが考えられますでしょうか?
STRING 2
AAA BBB
CCC
INT_TO_FLOAT 10
100 100 110 110
101 101 200 200
〜あと8行
まずは>>759さんのおっしゃるように、>>758さんのケアをしようと思うのですが、今のfgets+sscanfの組み合わせは下記URLを参考にしたのですが、
どれが激遅でどれが高速かの情報はどこかにあったりしますでしょうか?
(試そうと思っていたfgetcは遅いんですね…)
ttp://d.hatena.ne.jp/s-yata/20100726/1280138663
読み込み時に必要なのは、改行の判定、文字列の判定、int型で読み込んで0.025や0.1などを掛けてfloat型で保持(おそらくこれが一番多い処理)、と考えています。
ちなみに入力フォーマットは、ここから何行は文字列、ここから何行は数字の列(intに掛け算しfloatで保持したい)、という感じになっています。
最適な関数はどんな組み合わせが考えられますでしょうか?
STRING 2
AAA BBB
CCC
INT_TO_FLOAT 10
100 100 110 110
101 101 200 200
〜あと8行
768デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/08(日) 22:15:17.90ID:IBdHDRbb0 知恵遅れはそれを固定長とかいってんのか
なるほどな
まず知恵遅れとは語彙の一致が成立してない
なるほどな
まず知恵遅れとは語彙の一致が成立してない
769754 (アウアウウー Sa0b-sule)
2018/07/08(日) 22:17:42.92ID:nff2cMgla 一行に存在する文字数は固定されておらず、文字列の方は文字数や空白は関係なしに単純に行数分読み込むだけで良いです。
数字の方も桁数は固定されていませんが、空白区切りの4カラムと固定されています。
STRING 3
This is pen.
hoge piyo
hello world.
INT_TO_FLOAT 9
12345 1000 10 12
101 101 999999 444
〜あと7行
数字の方も桁数は固定されていませんが、空白区切りの4カラムと固定されています。
STRING 3
This is pen.
hoge piyo
hello world.
INT_TO_FLOAT 9
12345 1000 10 12
101 101 999999 444
〜あと7行
770デフォルトの名無しさん (ワッチョイ 5f34-M0Jq)
2018/07/08(日) 22:17:59.21ID:q7fGM+tb0 少しは自分で考えろよこのバカ
771デフォルトの名無しさん (ワッチョイ 5f4c-EHpb)
2018/07/08(日) 22:18:06.37ID:KcgYXOta0 >>768
固定長フォーマットとは言ってないな
固定長フォーマットとは言ってないな
772デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/08(日) 22:36:50.70ID:IBdHDRbb0 1行目はisspaceでぐりぐり回して
SPを\0でおきかえればオシマイ
コレでバッファの先頭のポインタで文字列が拾える
行数は\0のポインタを1バイト分進めて
そのポインタをstrtolに渡せば拾える
2行目以降の数字は
strtolやstrtodで空白に到達したら、
その到達した位置のポインタが引数で拾える
数値も拾える
2行目以降の文字列は省略
池沼でも拾える
ここまで書けばどんなドカタでも作業はできるハズだ
SPを\0でおきかえればオシマイ
コレでバッファの先頭のポインタで文字列が拾える
行数は\0のポインタを1バイト分進めて
そのポインタをstrtolに渡せば拾える
2行目以降の数字は
strtolやstrtodで空白に到達したら、
その到達した位置のポインタが引数で拾える
数値も拾える
2行目以降の文字列は省略
池沼でも拾える
ここまで書けばどんなドカタでも作業はできるハズだ
773デフォルトの名無しさん (ワッチョイ e7c3-WPlw)
2018/07/08(日) 23:16:50.92ID:w/p0hjmq0 テキストのパースなんてそれこそperlやpythonにやらせろよ
そんなところが速度にクリティカルに効いててゴリゴリ高速化しなきゃいけないのは作りがおかしい
そんなところが速度にクリティカルに効いててゴリゴリ高速化しなきゃいけないのは作りがおかしい
774デフォルトの名無しさん (スッップ Sd7f-SFkP)
2018/07/08(日) 23:30:01.88ID:yMyBSsTod775デフォルトの名無しさん (スッップ Sd7f-SFkP)
2018/07/08(日) 23:41:27.36ID:yMyBSsTod >>767
読み込み以外、ライブラリなんか使わずに全て自分のコードにしてみようか
そうすれば色々とわかるはず
読み込みは16MBずつとかにすれば速い
出力先はファイル?メモリ上?
数値は32bit floatで保存するとして
文字列は?
そのままの形で使う?
読み飛ばす?
読み込み以外、ライブラリなんか使わずに全て自分のコードにしてみようか
そうすれば色々とわかるはず
読み込みは16MBずつとかにすれば速い
出力先はファイル?メモリ上?
数値は32bit floatで保存するとして
文字列は?
そのままの形で使う?
読み飛ばす?
776デフォルトの名無しさん (ワッチョイ 5f34-M0Jq)
2018/07/08(日) 23:43:29.21ID:q7fGM+tb0777デフォルトの名無しさん (ワッチョイ a7d2-UVFs)
2018/07/08(日) 23:47:06.61ID:ib3y3idC0 SQLite はメモリ上にDBを構築できるので試してみるのもいいでしょう。
起動時のテーブルの初期化が大変だけど、あとはサクサク。
起動時のテーブルの初期化が大変だけど、あとはサクサク。
778デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/08(日) 23:54:44.54ID:IBdHDRbb0 な、知恵遅れたちはテキトーなことばっかりいってる
こんなゴミみたいなコードで速攻でかけるのに
こんなゴミみたいなコードで速攻でかけるのに
779デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/08(日) 23:55:41.66ID:IBdHDRbb0 ゴミはめちゃくちゃしょうもない簡単なコードを
いちいち複雑にする
そしてもだれもメンテナンスできなくなる
いちいち複雑にする
そしてもだれもメンテナンスできなくなる
780デフォルトの名無しさん (ワッチョイ 67bd-aMDz)
2018/07/08(日) 23:56:30.09ID:Jzinsuog0 自分への間違い指摘は全部無視するのが半角スタイル
781デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/08(日) 23:57:09.03ID:IBdHDRbb0 オレはなにも間違ったこと書いてない
782デフォルトの名無しさん (スッップ Sd7f-SFkP)
2018/07/08(日) 23:57:21.06ID:yMyBSsTod 数値の行は以下みたいなドロくさい処理を4回繰り返せば良い
unsigned int n = 0;
do {
unsigned char ch = (unsigned char)(*data++ - '0');
if (ch <= 9)
{
n = n * 10 + ch;
}
else {
break;
}
} while (true);
unsigned int n = 0;
do {
unsigned char ch = (unsigned char)(*data++ - '0');
if (ch <= 9)
{
n = n * 10 + ch;
}
else {
break;
}
} while (true);
783デフォルトの名無しさん (ワッチョイ 7f81-Gfd3)
2018/07/08(日) 23:57:59.70ID:fRwyFHTq0 サーバーなんだから、普通にDB使えるだろう
784デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/08(日) 23:59:14.83ID:IBdHDRbb0 だいたい分かるわ
やっぱりなPGなんか低学歴しかやらない
やっぱりなPGなんか低学歴しかやらない
785デフォルトの名無しさん (スッップ Sd7f-SFkP)
2018/07/09(月) 00:00:03.01ID:EkQ+mvr8d 単に統計情報が知りたいだけならわざわざ重くしてから処理をする必要もないし
DBに入れるにしても解析しないとダメだろ
DBに入れるにしても解析しないとダメだろ
786デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:03:17.82ID:c1VUAguL0 たとえば1行目なんかこんなしょうもないのでとれる
int get_type(unsigned char const* buf, t_baka_type_t* pt_baka_type_t, unsigned char const** pct_next) {
unsigned char const* c_buf = buf;
for (; !isspace(*c_buf); ++c_buf) ;
if (!::strncmp((char const*)buf, TYPE_STRING, c_buf - buf)) {
pt_baka_type_t->baka_type = BAKA_TYPE_STRING;
} else if (!::strncmp((char const*)buf, TYPE_INT_TO_FLOAT, c_buf - buf)) {
pt_baka_type_t->baka_type = BAKA_TYPE_INT_TO_FLOAT;
} else {
fprintf(stderr, "氏ねヴォケ\n");
return -1;
}
pt_baka_type_t->u_records = strtoul((char const*)c_buf, (char**)&c_buf, 10);
++c_buf;
*pct_next = c_buf;
return 0;
}
はっきりいってな、2行目以降の数値も文字列もやりかたなんか同じだからな
ドカタ作業
int get_type(unsigned char const* buf, t_baka_type_t* pt_baka_type_t, unsigned char const** pct_next) {
unsigned char const* c_buf = buf;
for (; !isspace(*c_buf); ++c_buf) ;
if (!::strncmp((char const*)buf, TYPE_STRING, c_buf - buf)) {
pt_baka_type_t->baka_type = BAKA_TYPE_STRING;
} else if (!::strncmp((char const*)buf, TYPE_INT_TO_FLOAT, c_buf - buf)) {
pt_baka_type_t->baka_type = BAKA_TYPE_INT_TO_FLOAT;
} else {
fprintf(stderr, "氏ねヴォケ\n");
return -1;
}
pt_baka_type_t->u_records = strtoul((char const*)c_buf, (char**)&c_buf, 10);
++c_buf;
*pct_next = c_buf;
return 0;
}
はっきりいってな、2行目以降の数値も文字列もやりかたなんか同じだからな
ドカタ作業
787デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:08:20.49ID:c1VUAguL0 ゴミは口だけは達者
しかもアリエナイ頭ワルイことばっかりいうからな
しかもアリエナイ頭ワルイことばっかりいうからな
788デフォルトの名無しさん (スッップ Sd7f-SFkP)
2018/07/09(月) 00:08:49.29ID:EkQ+mvr8d わざわざ標準ライブラリを使うために小細工しなくても良いんじゃないの?
何がどういう順番で書いてあるかはわかってるようだし無駄に重くしなくても
何がどういう順番で書いてあるかはわかってるようだし無駄に重くしなくても
789デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:10:37.45ID:c1VUAguL0 きっとなオマエが書いたゴミコードより標準ライブラリのほうが
バグもないし早いと思うわ
バグもないし早いと思うわ
790デフォルトの名無しさん (ワッチョイ e7c3-WPlw)
2018/07/09(月) 00:11:39.32ID:UZv1uWMQ0 いかにもバッファはみ出してそうなきったねえコードですね
いまどきポインタで文字列処理すんじゃねえよ老害
いまどきポインタで文字列処理すんじゃねえよ老害
791デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:12:54.25ID:c1VUAguL0 な、知恵遅れはこんなとこで書いたサンプルに
エラー処理が入ってると思ってる
もうねコレだから低学歴は困るわけ
エラー処理が入ってると思ってる
もうねコレだから低学歴は困るわけ
792デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:13:53.01ID:c1VUAguL0 日本のPGは低学歴しかいないのが
このスレで何度も証明されてる
このスレで何度も証明されてる
793デフォルトの名無しさん (スッップ Sd7f-SFkP)
2018/07/09(月) 00:17:45.37ID:EkQ+mvr8d 学歴コンプか?
794デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:19:33.01ID:c1VUAguL0 低学歴に反応してるということは
図星なんだろ
もう分かってるからな
悪いけどなレスみれば低学歴なのは
残念ながらすぐに分かってしまう
低学歴特有のレスというのがある
隠そうとしてもムダ
図星なんだろ
もう分かってるからな
悪いけどなレスみれば低学歴なのは
残念ながらすぐに分かってしまう
低学歴特有のレスというのがある
隠そうとしてもムダ
795デフォルトの名無しさん (ワッチョイ e7c3-WPlw)
2018/07/09(月) 00:21:50.74ID:UZv1uWMQ0 ポインタいじくり回してメモリ境界踏み壊すコードを書くのが大好きなすうぱあぷろぐらまあ様は
無駄な高学歴の方が多いという個人的な印象
無駄な高学歴の方が多いという個人的な印象
796デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:23:07.75ID:c1VUAguL0 あのレベルでポインタいじくりまわしてる?
どんだけオツムが弱いねん・・・
どんだけオツムが弱いねん・・・
797デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:26:52.35ID:c1VUAguL0 ようするにポインタが理解できてない
こんなのがプログラマさまきどってるのが日本だからな
そらなこんなのがコードいじくってたら
障害ばっかりおきるハズだわ
こんなのがプログラマさまきどってるのが日本だからな
そらなこんなのがコードいじくってたら
障害ばっかりおきるハズだわ
798デフォルトの名無しさん (ワッチョイ 5f34-M0Jq)
2018/07/09(月) 00:28:24.71ID:Z1S7bos70 未だにこんな化石みたいなヤツが居たことに驚きなんだが
799デフォルトの名無しさん (スッップ Sd7f-SFkP)
2018/07/09(月) 00:29:58.95ID:1qBtnID4d >>786みたいに、何度も何度もスキャンするような無駄の多いコードが速いわけないだろ
800デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:30:58.58ID:c1VUAguL0 低学歴は自分を大きく見せようとするからな
5f34-M0Jq ← コイツなんか典型的といっていい
わかってしまう
きっとコイツは専門卒
残念なことにレスみればすぐに分かる
だてにいままでいろんなゴミを相手にしてきたワケではない
5f34-M0Jq ← コイツなんか典型的といっていい
わかってしまう
きっとコイツは専門卒
残念なことにレスみればすぐに分かる
だてにいままでいろんなゴミを相手にしてきたワケではない
801デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:32:10.58ID:c1VUAguL0 何度もスキャン?
一回しかスキャンしてないぞ
まずコードがよめてない
ポインタは後ろにしか進んでないのに
一回しかスキャンしてないぞ
まずコードがよめてない
ポインタは後ろにしか進んでないのに
802デフォルトの名無しさん (ワッチョイ e7c3-WPlw)
2018/07/09(月) 00:34:20.75ID:UZv1uWMQ0 strncmpが中で何やってるか知らないんだねかわいそうに
803デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:34:44.55ID:c1VUAguL0 あ
もしかして
必要な1回の文字列判定を何度もスキャンとかいってるの?
もしかして
必要な1回の文字列判定を何度もスキャンとかいってるの?
804デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:36:07.46ID:c1VUAguL0 低学歴によると
通常の字句解析と構文解析を一緒にするのか
なるほどな
通常の字句解析と構文解析を一緒にするのか
なるほどな
805754 (アウアウウー Sa0b-sule)
2018/07/09(月) 00:37:52.14ID:oMFJCZ8na たくさんの情報大変参考になります。
サンプルコードもありがたいです。
実際に動かしながらどう動いているのか調べてみます。
>>775
読み込みを16MB単位でやってみます。
ファイルに出力することはなくて、読み込んだ情報をGUIでクリックして、
こっちをクリックするとこんな結果になっている、こっちだとこの結果、
というようなビューアを作ろうとしています。
文字列も重要な情報なので、
struct info{
サンプルコードもありがたいです。
実際に動かしながらどう動いているのか調べてみます。
>>775
読み込みを16MB単位でやってみます。
ファイルに出力することはなくて、読み込んだ情報をGUIでクリックして、
こっちをクリックするとこんな結果になっている、こっちだとこの結果、
というようなビューアを作ろうとしています。
文字列も重要な情報なので、
struct info{
806デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/09(月) 00:41:56.28ID:AazuLIX60 それならそもそもファイル全体を解析しておく必要もないのでは?
807デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:43:27.81ID:c1VUAguL0 よしオマエはいい子のようだから
STRINGの部分をとるコードもあげよう
int get_data_string(unsigned char const* buf, t_baka_type_t const* ct_baka_type, unsigned char const** pct_next) {
unsigned char const* c_buf_b;
unsigned char const* c_buf_e = buf;
for (uint32_t i = 0; i < ct_baka_type->u_records; ++i) {
c_buf_b = c_buf_e;
for (; *c_buf_e != '\x0a'; ++c_buf_e) ;
// c_buf_b から始まる c_buf_e - c_buf_b の長さが取得する文字列
fprintf(stdout, TYPE_STRING":%.*s\n", c_buf_e - c_buf_b, c_buf_b); // ← ココでとれる
++c_buf_e;
}
return 0;
}
STRINGの部分をとるコードもあげよう
int get_data_string(unsigned char const* buf, t_baka_type_t const* ct_baka_type, unsigned char const** pct_next) {
unsigned char const* c_buf_b;
unsigned char const* c_buf_e = buf;
for (uint32_t i = 0; i < ct_baka_type->u_records; ++i) {
c_buf_b = c_buf_e;
for (; *c_buf_e != '\x0a'; ++c_buf_e) ;
// c_buf_b から始まる c_buf_e - c_buf_b の長さが取得する文字列
fprintf(stdout, TYPE_STRING":%.*s\n", c_buf_e - c_buf_b, c_buf_b); // ← ココでとれる
++c_buf_e;
}
return 0;
}
808デフォルトの名無しさん (ワッチョイ 5f2b-ExT7)
2018/07/09(月) 00:49:09.36ID:4jZgSN4s0 >>786
入力が不正の場合にメモリフォルト起こすコードは絶対受け付けられない
入力が不正の場合にメモリフォルト起こすコードは絶対受け付けられない
809デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/09(月) 00:49:43.29ID:AazuLIX60 だね
810デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:50:43.58ID:c1VUAguL0 バリデーションチェックは自分で入れるにきまってるだろ
アホちゃうかコイツラ
アホちゃうかコイツラ
811デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:51:20.09ID:c1VUAguL0 そういうレスしかできないからな
程度が知れるわけ
低学歴らしい
程度が知れるわけ
低学歴らしい
812デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/09(月) 00:51:52.89ID:AazuLIX60 言い訳が見苦しい
813デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:53:03.02ID:c1VUAguL0 いいわけ?
マジでいってるわけ?
ホントな頭悪い
マジでいってるわけ?
ホントな頭悪い
814デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:53:36.22ID:c1VUAguL0 典型的な低学歴のレスといっていい
815デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/09(月) 00:55:36.81ID:AazuLIX60 コードでも学歴でも何でも良いけど
勝負するなら受けるよ
勝負するなら受けるよ
816デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:56:18.28ID:c1VUAguL0 ハナクソがオレとなんの勝負すんの
817デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/09(月) 00:58:04.11ID:AazuLIX60 日本語も読めないのか
818デフォルトの名無しさん (ワッチョイ a781-5SLP)
2018/07/09(月) 00:58:34.17ID:VjVxTpnI0 職場もこんな雰囲気?
819デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 00:59:12.63ID:c1VUAguL0 ハナクソは
学歴も書いてないし
コードも書いてない
で?
学歴も書いてないし
コードも書いてない
で?
820デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 01:01:13.46ID:c1VUAguL0 低学歴知恵遅れは
コミュニケーション能力もゼロに近い
そもそも唐突に
なにがしたいのか
なにがいいたいのか
意味が分からないワケ
コミュニケーション能力もゼロに近い
そもそも唐突に
なにがしたいのか
なにがいいたいのか
意味が分からないワケ
821デフォルトの名無しさん (ワッチョイ 5f2b-ExT7)
2018/07/09(月) 01:02:30.85ID:4jZgSN4s0 いまどき自前の字句解析処理をCでポインタ使って書くなんて
バッファ境界のチェックとか面倒だし絶対ミスるからやめた方が良いって話なのに
いきなりエラー処理完全無視したコード出されてドン引きです
バッファ境界のチェックとか面倒だし絶対ミスるからやめた方が良いって話なのに
いきなりエラー処理完全無視したコード出されてドン引きです
822デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 01:03:34.22ID:c1VUAguL0 どんびきするとかしないとかは
オマエの勝手だからな
オマエの勝手だからな
823デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/09(月) 01:04:20.90ID:AazuLIX60 >>821
ポインタも扱えないようなレベルならC++は使わない方が良い
ポインタも扱えないようなレベルならC++は使わない方が良い
824デフォルトの名無しさん (ブーイモ MM7f-CyKI)
2018/07/09(月) 01:04:49.68ID:ZGamhF5dM あんまりゴミだから自信満々なc1VUAguL0がコード貼ってるのに気が付かなかったな、ログ読み直しちゃったよ
学歴は書いてないみたいだけど
学歴は書いてないみたいだけど
825デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/09(月) 01:05:34.06ID:AazuLIX60826デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 01:05:40.33ID:c1VUAguL0 scanと解析に時間がかかるとかいってるから
オレはベストプラクティスをだしてる
オレはベストプラクティスをだしてる
827デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 01:07:55.27ID:c1VUAguL0 まず目的が理解できてないからな
828デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/09(月) 01:08:10.00ID:AazuLIX60 あれでベストか
829デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 01:10:13.35ID:c1VUAguL0 ベストじゃないと思うなら
ベストな方法はれよ
臆病者なんか
ベストな方法はれよ
臆病者なんか
830デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/09(月) 01:10:21.54ID:AazuLIX60 勝負に目的ねえ
まあ別にやらなくても結果はわかるけど
まあ別にやらなくても結果はわかるけど
831デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 01:10:46.49ID:c1VUAguL0 はよベストなもんはれよ
832デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/09(月) 01:19:02.82ID:AazuLIX60833デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 01:54:56.54ID:c1VUAguL0 やっぱりバカの限界というやつだな
オミヤゲだけはって寝よ
1行目とるヤツ
さっきとかわらず
int get_type(unsigned char const* buf, t_baka_type_t* pt_baka_type_t, unsigned char const** pct_next) {
unsigned char const* c_buf = buf;
for (; !isspace(*c_buf); ++c_buf) ;
if (!::strncmp((char const*)buf, TYPE_STRING, c_buf - buf)) {
pt_baka_type_t->baka_type = BAKA_TYPE_STRING;
} else if (!::strncmp((char const*)buf, TYPE_INT_TO_FLOAT, c_buf - buf)) {
pt_baka_type_t->baka_type = BAKA_TYPE_INT_TO_FLOAT;
} else {
fprintf(stderr, "氏ねヴォケ\n");
return -1;
}
pt_baka_type_t->u_records = strtoul((char const*)c_buf, (char**)&c_buf, 10);
++c_buf;
*pct_next = c_buf;
return 0;
}
オミヤゲだけはって寝よ
1行目とるヤツ
さっきとかわらず
int get_type(unsigned char const* buf, t_baka_type_t* pt_baka_type_t, unsigned char const** pct_next) {
unsigned char const* c_buf = buf;
for (; !isspace(*c_buf); ++c_buf) ;
if (!::strncmp((char const*)buf, TYPE_STRING, c_buf - buf)) {
pt_baka_type_t->baka_type = BAKA_TYPE_STRING;
} else if (!::strncmp((char const*)buf, TYPE_INT_TO_FLOAT, c_buf - buf)) {
pt_baka_type_t->baka_type = BAKA_TYPE_INT_TO_FLOAT;
} else {
fprintf(stderr, "氏ねヴォケ\n");
return -1;
}
pt_baka_type_t->u_records = strtoul((char const*)c_buf, (char**)&c_buf, 10);
++c_buf;
*pct_next = c_buf;
return 0;
}
834デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 01:56:57.90ID:c1VUAguL0 2行目以降のSTRINGとれるヤツ
※ 次のバッファの継続ポインタの格納をしてなかったので追加
int get_data_string(unsigned char const* buf, t_baka_type_t const* ct_baka_type, unsigned char const** pct_next) {
unsigned char const* c_buf_b;
unsigned char const* c_buf_e = buf;
for (uint32_t i = 0; i < ct_baka_type->u_records; ++i) {
c_buf_b = c_buf_e;
for (; *c_buf_e != '\x0a'; ++c_buf_e) ;
// c_buf_b から始まる c_buf_e - c_buf_b の長さが取得する文字列
fprintf(stdout, TYPE_STRING":%.*s\n", c_buf_e - c_buf_b, c_buf_b); // ← ココでとれる
++c_buf_e;
}
*pct_next = c_buf_e; // ← たりなかったので追加
return 0;
}
※ 次のバッファの継続ポインタの格納をしてなかったので追加
int get_data_string(unsigned char const* buf, t_baka_type_t const* ct_baka_type, unsigned char const** pct_next) {
unsigned char const* c_buf_b;
unsigned char const* c_buf_e = buf;
for (uint32_t i = 0; i < ct_baka_type->u_records; ++i) {
c_buf_b = c_buf_e;
for (; *c_buf_e != '\x0a'; ++c_buf_e) ;
// c_buf_b から始まる c_buf_e - c_buf_b の長さが取得する文字列
fprintf(stdout, TYPE_STRING":%.*s\n", c_buf_e - c_buf_b, c_buf_b); // ← ココでとれる
++c_buf_e;
}
*pct_next = c_buf_e; // ← たりなかったので追加
return 0;
}
835デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 01:59:16.59ID:c1VUAguL0 2行目以降のTYPE_INT_TO_FLOATとれるヤツ
int get_data_int_to_float(unsigned char const* buf, t_baka_type_t const* ct_baka_type, unsigned char const** pct_next) {
unsigned char const* c_buf_e = buf;
int32_t i_val[4]; // とりあえずのテキトーにいれた一時バッファ
for (uint32_t i = 0; i < ct_baka_type->u_records; ++i) {
for (uint32_t j = 0; j < 4; ++j) {
i_val[j] = strtoul((char const*)c_buf_e, (char**)&c_buf_e, 10);
}
++c_buf_e;
fprintf(stdout, TYPE_INT_TO_FLOAT":%d,%d,%d,%d\n", i_val[0], i_val[1], i_val[2], i_val[3]); // ← ココでとれる
}
*pct_next = c_buf_e;
return 0;
}
int get_data_int_to_float(unsigned char const* buf, t_baka_type_t const* ct_baka_type, unsigned char const** pct_next) {
unsigned char const* c_buf_e = buf;
int32_t i_val[4]; // とりあえずのテキトーにいれた一時バッファ
for (uint32_t i = 0; i < ct_baka_type->u_records; ++i) {
for (uint32_t j = 0; j < 4; ++j) {
i_val[j] = strtoul((char const*)c_buf_e, (char**)&c_buf_e, 10);
}
++c_buf_e;
fprintf(stdout, TYPE_INT_TO_FLOAT":%d,%d,%d,%d\n", i_val[0], i_val[1], i_val[2], i_val[3]); // ← ココでとれる
}
*pct_next = c_buf_e;
return 0;
}
836デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 02:01:59.87ID:c1VUAguL0 とりあえずのテキトーな宣言
#define TYPE_STRING "STRING"
#define TYPE_INT_TO_FLOAT "INT_TO_FLOAT"
typedef enum __ENUM_BAKA_TYPE {
BAKA_TYPE_STRING,
BAKA_TYPE_INT_TO_FLOAT,
BAKA_TYPE_UNKNOWN
} BAKA_TYPE;
typedef struct __tag_baka_type_t {
BAKA_TYPE baka_type;
uint32_t u_records;
} t_baka_type_t;
int get_type(unsigned char const* buf, t_baka_type_t* pt_baka_type, unsigned char const** pct_next);
int get_data_string(unsigned char const* buf, t_baka_type_t const* ct_baka_type, unsigned char const** pct_next);
int get_data_int_to_float(unsigned char const* buf, t_baka_type_t const* ct_baka_type, unsigned char const** pct_next);
#define TYPE_STRING "STRING"
#define TYPE_INT_TO_FLOAT "INT_TO_FLOAT"
typedef enum __ENUM_BAKA_TYPE {
BAKA_TYPE_STRING,
BAKA_TYPE_INT_TO_FLOAT,
BAKA_TYPE_UNKNOWN
} BAKA_TYPE;
typedef struct __tag_baka_type_t {
BAKA_TYPE baka_type;
uint32_t u_records;
} t_baka_type_t;
int get_type(unsigned char const* buf, t_baka_type_t* pt_baka_type, unsigned char const** pct_next);
int get_data_string(unsigned char const* buf, t_baka_type_t const* ct_baka_type, unsigned char const** pct_next);
int get_data_int_to_float(unsigned char const* buf, t_baka_type_t const* ct_baka_type, unsigned char const** pct_next);
837デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/09(月) 02:03:33.03ID:c1VUAguL0 コレでとりあえず動かせる
int main(int argc, char** argv) {
unsigned char const* buf = (unsigned char const*)
"STRING 3\x0a"
"This is pen.\x0a"
"hoge piyo\x0a"
"hello world.\x0a"
"INT_TO_FLOAT 9\x0a"
"12345 1000 10 12\x0a"
"101 101 999999 444\x0a"
"101 101 999999 444\x0a"
"101 101 999999 444\x0a"
"101 101 999999 444\x0a"
"101 101 999999 444\x0a"
"101 101 999999 444\x0a"
"101 101 999999 444\x0a"
"101 101 999999 444\x0a";
unsigned char const* c_buf = buf;
t_baka_type_t t_baka_type;
// 実際の処理ではt_baka_type.baka_typeをswitchで分岐しながら処理することになる
get_type(c_buf, &t_baka_type, &c_buf);
get_data_string(c_buf, &t_baka_type, &c_buf);
get_type(c_buf, &t_baka_type, &c_buf);
get_data_int_to_float(c_buf, &t_baka_type, &c_buf);
}
int main(int argc, char** argv) {
unsigned char const* buf = (unsigned char const*)
"STRING 3\x0a"
"This is pen.\x0a"
"hoge piyo\x0a"
"hello world.\x0a"
"INT_TO_FLOAT 9\x0a"
"12345 1000 10 12\x0a"
"101 101 999999 444\x0a"
"101 101 999999 444\x0a"
"101 101 999999 444\x0a"
"101 101 999999 444\x0a"
"101 101 999999 444\x0a"
"101 101 999999 444\x0a"
"101 101 999999 444\x0a"
"101 101 999999 444\x0a";
unsigned char const* c_buf = buf;
t_baka_type_t t_baka_type;
// 実際の処理ではt_baka_type.baka_typeをswitchで分岐しながら処理することになる
get_type(c_buf, &t_baka_type, &c_buf);
get_data_string(c_buf, &t_baka_type, &c_buf);
get_type(c_buf, &t_baka_type, &c_buf);
get_data_int_to_float(c_buf, &t_baka_type, &c_buf);
}
838デフォルトの名無しさん (ワッチョイ e7c3-WPlw)
2018/07/09(月) 09:54:17.47ID:UZv1uWMQ0 ろくなエラーチェックもしてないと自分で白状してるゴミコードを誰が動かすと思うのか
839デフォルトの名無しさん (ワッチョイ 672d-CsAW)
2018/07/09(月) 10:25:08.16ID:iaaXEW9a0 5chに貼ってしまった以上、権利的にジムしか動かせないなーw
840デフォルトの名無しさん (アウアウカー Sa1b-PAUf)
2018/07/09(月) 11:04:11.17ID:K7fYzOo4a __の後に大文字は予約されてるはずでは?
841デフォルトの名無しさん (ワッチョイ 47b3-rubz)
2018/07/09(月) 11:49:18.73ID:gGpmJBA50 そこ突っ込むなら他にも色々あると思うが
なんでC++でtypedef struct/enumなの、とかなんで文字列がunsigned charなの、とか
メタプログラミングじゃない構造体の型名に_tとか付けるな、とか
なんでC++でtypedef struct/enumなの、とかなんで文字列がunsigned charなの、とか
メタプログラミングじゃない構造体の型名に_tとか付けるな、とか
842デフォルトの名無しさん (アウアウウー Sa0b-UVFs)
2018/07/09(月) 13:05:01.50ID:igQMhEfYa ざっと見たけどすごいスレだな
10年ぐらい前だったらこういうこともありかなって思った時期があるけど今はもうそんな時代じゃない
で大部分レスができてしまう
10年ぐらい前だったらこういうこともありかなって思った時期があるけど今はもうそんな時代じゃない
で大部分レスができてしまう
843デフォルトの名無しさん (スッップ Sd7f-SFkP)
2018/07/09(月) 13:18:07.24ID:4W5c2ICHd 名前の付け方はどうせそれぞれの環境に合わせるだろうからどうでもいいけど
中途半端な最適化が良くないな
今回は用途もデータ構造もわかっているし
目的が高速化なわけだから
中途半端な最適化が良くないな
今回は用途もデータ構造もわかっているし
目的が高速化なわけだから
844デフォルトの名無しさん (ワッチョイ 87b3-oY+s)
2018/07/09(月) 15:16:51.81ID:jLUHXtTZ0 >>842
多次元配列 (boostを使わない場合) は?
多次元配列 (boostを使わない場合) は?
845デフォルトの名無しさん (ワッチョイ 87b3-q+oR)
2018/07/09(月) 15:23:55.96ID:tG10WBhN0 boostを積極的に使っていこう。
846デフォルトの名無しさん (ワッチョイ 5f7f-KMj/)
2018/07/09(月) 16:10:51.38ID:OMEWQnbN0847デフォルトの名無しさん (ワッチョイ 87b3-q+oR)
2018/07/09(月) 17:19:12.55ID:tG10WBhN0 壮絶ゲームズ株式会社。
848デフォルトの名無しさん (ワッチョイ 87b3-q+oR)
2018/07/09(月) 17:19:46.15ID:tG10WBhN0849754 (アウアウウー Sa0b-sule)
2018/07/09(月) 20:38:18.02ID:FCmEWxOPa ご連絡おそくなりすみません。
たくさんのサンプルありがとうございます。
今日はファイル読み込みの対応ができなかったので明日このスレを見ながら試してみようと思います。
ちなみにフォーマットはSTRING行が先にきて、次にINT_TO_FLOAT行がきます。
STRINGで始まり、INT_TO_FLOATで最後は終わります。
後出しの情報になり申し訳ありません。
>>786 でどっちが来るかの判定までしていただいていたので一応ご連絡しておきます。
STRING 2
This is pen.
hello world.
INT_TO_FLOAT 1230
100 100 110 110
101 101 200 200
〜あと1228行
STRING 5
hoge piyo
foobarbaz
It is a July 9 today
It rained all day today
INT_TO_FLOAT 830
100 100 110 110
101 101 200 200
〜あと828行
たくさんのサンプルありがとうございます。
今日はファイル読み込みの対応ができなかったので明日このスレを見ながら試してみようと思います。
ちなみにフォーマットはSTRING行が先にきて、次にINT_TO_FLOAT行がきます。
STRINGで始まり、INT_TO_FLOATで最後は終わります。
後出しの情報になり申し訳ありません。
>>786 でどっちが来るかの判定までしていただいていたので一応ご連絡しておきます。
STRING 2
This is pen.
hello world.
INT_TO_FLOAT 1230
100 100 110 110
101 101 200 200
〜あと1228行
STRING 5
hoge piyo
foobarbaz
It is a July 9 today
It rained all day today
INT_TO_FLOAT 830
100 100 110 110
101 101 200 200
〜あと828行
850754 (アウアウウー Sa0b-sule)
2018/07/09(月) 20:49:04.01ID:FCmEWxOPa すみません、 >>849 のSTRING 5の部分は4行になってますね。
この場合 STRING 4 になります。。
この場合 STRING 4 になります。。
851デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/09(月) 20:58:02.33ID:AazuLIX60 作って実験してみたよ
一行に4個の数字がある行を
適当な数値を乗算して構造体のvectorに入れていく
ファイル上の位置も格納するので
間の文字列も必要な時に表示出来る
うちの環境だと
読み込みだけで77.9秒
解析だけで24.3秒
読み込みと解析合わせて78.1秒
アプリはシングルスレッドだけど
勝手にOSが先読みしてくれてるのかな?
読み込み単位は2次キャッシュに確実に収まる1MBくらいが良さそう
一行に4個の数字がある行を
適当な数値を乗算して構造体のvectorに入れていく
ファイル上の位置も格納するので
間の文字列も必要な時に表示出来る
うちの環境だと
読み込みだけで77.9秒
解析だけで24.3秒
読み込みと解析合わせて78.1秒
アプリはシングルスレッドだけど
勝手にOSが先読みしてくれてるのかな?
読み込み単位は2次キャッシュに確実に収まる1MBくらいが良さそう
852デフォルトの名無しさん (アウアウカー Sa1b-PAUf)
2018/07/09(月) 21:10:32.06ID:jdPfoelBa STRINGとINT_TO_FLOATは何か関連性はあるの?
853デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/09(月) 21:10:56.23ID:AazuLIX60 2次じゃなくて3次
struct LOG {
float num[4];
uint64_t line_start;
uint64_t line_end;
};
こんな構造体に入れていくようにしてみた
文字列はクリックした時にファイルを読みに行けば良いよね
struct LOG {
float num[4];
uint64_t line_start;
uint64_t line_end;
};
こんな構造体に入れていくようにしてみた
文字列はクリックした時にファイルを読みに行けば良いよね
854デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/09(月) 21:12:07.34ID:AazuLIX60 STRING n の後にn行文字列
INT_TO_FLOAT n の後にn行数値
これが交互にくる
ってことでしょ
INT_TO_FLOAT n の後にn行数値
これが交互にくる
ってことでしょ
855デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/09(月) 21:13:59.28ID:AazuLIX60 数値に対応する何か(グラフ?)をクリックすると
その周囲の文字列と数値が表示出来れば良いのかな?
と思った
その周囲の文字列と数値が表示出来れば良いのかな?
と思った
856デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/09(月) 21:15:34.95ID:AazuLIX60 文字列の解析は速く出来そうだから
あとはUIに凝ってくださいな
あとはUIに凝ってくださいな
857デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/09(月) 21:21:01.41ID:AazuLIX60 数値も文字列も数行ずつかと思ったけど
1000行とかになるのか
数値ブロック、文字列ブロックは
それぞれ平均何行くらい?
1000行とかになるのか
数値ブロック、文字列ブロックは
それぞれ平均何行くらい?
858デフォルトの名無しさん (アウアウカー Sa1b-PAUf)
2018/07/09(月) 21:22:46.55ID:jdPfoelBa メモリが大変な事になりそうなのでstringとint_to_floatの行のアドレスだけ取得して、
必要になった時に読みに行ってintからfloatに変換すれば?
必要になった時に読みに行ってintからfloatに変換すれば?
859デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/09(月) 21:26:46.46ID:AazuLIX60 floatの配列は別に用意して
struct LOG {
uint32_t str_start;
uint32_t str_end;
uint32_t str_line;
uint32_t num_start;
uint32_t num_end;
};
みたいな、
ブロックごとの構造体に入れていく方がいいのかな?
struct LOG {
uint32_t str_start;
uint32_t str_end;
uint32_t str_line;
uint32_t num_start;
uint32_t num_end;
};
みたいな、
ブロックごとの構造体に入れていく方がいいのかな?
860デフォルトの名無しさん (アウアウカー Sa1b-PAUf)
2018/07/09(月) 21:27:53.33ID:jdPfoelBa vector<pair<size_t, size_t>> baka;//stringの開始位置とint_to_floatの開始位置をペアで管理。
861デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/09(月) 21:29:34.68ID:AazuLIX60 適切なデータの持ち方はUIの全体表示の仕様次第と言うことになる
862デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/09(月) 21:33:55.24ID:AazuLIX60 >>806に対して反応が無いから
数値情報が事前に必要なのかと思ったが
数値情報が事前に必要なのかと思ったが
863baka (アウアウカー Sa1b-PAUf)
2018/07/09(月) 21:36:11.40ID:jdPfoelBa あと気になったのはGUIに表示するのはstringの一行目?
864デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/09(月) 21:43:08.83ID:AazuLIX60 1ブロック平均500行
1行平均30文字
でも100万ブロックある
全体画面で文字列は表示しないんじゃ?
1行平均30文字
でも100万ブロックある
全体画面で文字列は表示しないんじゃ?
865デフォルトの名無しさん (ワッチョイ 5f4c-EHpb)
2018/07/09(月) 21:58:36.33ID:lKzPjQ7Y0 初回DBに突っ込む
初回レコードのインデックスを作る
初回レコードのインデックスを作る
866デフォルトの名無しさん (ワッチョイ 5fb3-C8Iw)
2018/07/09(月) 22:41:30.68ID:Xc+Rjkat0 最低限のパースを実施して各レコードのオフセットを配列に入れて必要になった時に解析して表示すればいいだけかと
867デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/09(月) 22:43:45.27ID:AazuLIX60 同じ事を何度も書かなくて良い
868デフォルトの名無しさん (ワッチョイ 6783-sule)
2018/07/09(月) 22:49:34.81ID:tJIkM3K40 やっとおまえらもXMLが糞遅い理由を理解したか。
869デフォルトの名無しさん (ワッチョイ 5fbd-c6cw)
2018/07/09(月) 23:26:25.24ID:Kh8JJTJK0870754 (アウアウウー Sa0b-sule)
2018/07/10(火) 00:11:54.08ID:L9+HOK/Ta >>851
テストまでしていただいだきありがとうございます。
1分ちょっとならとてもいい感じです。
なるほどDRAMよりも高速なCPU内のキャッシュを有効に使うと効果的ってことですね。
そんなこと今まで考えたこともなかったです。勉強になります。
>>854
ご推察の通りです。
>>857
文字列の方はせいぜい10行〜20行です。
数値の方は何万行にもなったりします。
>>858
メモリは10GBつかっても問題にならないくらい潤沢に使えると思うので、まずは速度重視で行こうと思っています。
>>861,862
すみません昨日書き込みエラーになって書き込めなかったのでそのままでした。
クリックするたびに毎回int->float演算したら1項目で何万行もあったりするので
読み込み時に演算しておいた方がよいかなと思っていました。
>つづきます
テストまでしていただいだきありがとうございます。
1分ちょっとならとてもいい感じです。
なるほどDRAMよりも高速なCPU内のキャッシュを有効に使うと効果的ってことですね。
そんなこと今まで考えたこともなかったです。勉強になります。
>>854
ご推察の通りです。
>>857
文字列の方はせいぜい10行〜20行です。
数値の方は何万行にもなったりします。
>>858
メモリは10GBつかっても問題にならないくらい潤沢に使えると思うので、まずは速度重視で行こうと思っています。
>>861,862
すみません昨日書き込みエラーになって書き込めなかったのでそのままでした。
クリックするたびに毎回int->float演算したら1項目で何万行もあったりするので
読み込み時に演算しておいた方がよいかなと思っていました。
>つづきます
871754 (アウアウウー Sa0b-sule)
2018/07/10(火) 00:20:12.97ID:L9+HOK/Ta >>863
全部のフォーマットは複雑になってくるので簡易的なフォーマットをと思って出していましたが
説明していくと細かい話になってきましたのでもう少し具体的なものを書きます。
テストまでしてもらっているのに変わってすみません。。
-------------------------------
SECTION_NAME @
11200 11200 2 Jun 9 23:23:00 2018 A
This is pen. B
hello world. B
x 1 2 C
100 1 -2000 10
101 10 -2001 10
y 2 4
-100 10000
-101 10100
x 3 28
QQ subname -1 0 0 1 -21000000 600000 2 D
100 100 110 110
100 100 110 110
〜あと26行〜
SECTION_NAME E
@GUI表示する
A11200がx or yの個数、3カラム目がテキスト行の個数、それ以降は捨てる。11200のところは1の時もあれば100万超えることもある
BGUI表示する
Cこれが非常に多く、ひたすら繰り返される。x,yはランダムでくる。
1カラム目はx or y固定。x=次行に来る数値は4カラム。y=2カラム
2カラム目は1からインクリメントしていき、Aの11200回出てくる。カウント数値
3カラム目は次行から始まる数値行が何行かの数値
Dx or yの次の行にたまにこの行があります。この行も使いますが、ちょっと複雑なのでまずはスキップで。
Eここからまた@の繰り返し、要するにファイルの最後はCのところで終わる。
-------------------------------
全部のフォーマットは複雑になってくるので簡易的なフォーマットをと思って出していましたが
説明していくと細かい話になってきましたのでもう少し具体的なものを書きます。
テストまでしてもらっているのに変わってすみません。。
-------------------------------
SECTION_NAME @
11200 11200 2 Jun 9 23:23:00 2018 A
This is pen. B
hello world. B
x 1 2 C
100 1 -2000 10
101 10 -2001 10
y 2 4
-100 10000
-101 10100
x 3 28
QQ subname -1 0 0 1 -21000000 600000 2 D
100 100 110 110
100 100 110 110
〜あと26行〜
SECTION_NAME E
@GUI表示する
A11200がx or yの個数、3カラム目がテキスト行の個数、それ以降は捨てる。11200のところは1の時もあれば100万超えることもある
BGUI表示する
Cこれが非常に多く、ひたすら繰り返される。x,yはランダムでくる。
1カラム目はx or y固定。x=次行に来る数値は4カラム。y=2カラム
2カラム目は1からインクリメントしていき、Aの11200回出てくる。カウント数値
3カラム目は次行から始まる数値行が何行かの数値
Dx or yの次の行にたまにこの行があります。この行も使いますが、ちょっと複雑なのでまずはスキップで。
Eここからまた@の繰り返し、要するにファイルの最後はCのところで終わる。
-------------------------------
872754 (アウアウウー Sa0b-sule)
2018/07/10(火) 00:23:35.36ID:L9+HOK/Ta すみません、上記QQはQQという固定文字です。
行頭が"Q"のときはこの行という判定で良いと思います。
>>859,860
格納先は構造体に入れようと思っていて、下記のようにテキスト行も入れようかなと思っていました。
struct x_or_y{
char type; // x or y
int num; // Cの2カラム目
float list;
};
struct elem{
char section_name;
char comments;
array系の何かの型 x_or_y_array; // 配列にしておくと(Cの2カラム目-1)で簡単にアクセスできそう
};
行頭が"Q"のときはこの行という判定で良いと思います。
>>859,860
格納先は構造体に入れようと思っていて、下記のようにテキスト行も入れようかなと思っていました。
struct x_or_y{
char type; // x or y
int num; // Cの2カラム目
float list;
};
struct elem{
char section_name;
char comments;
array系の何かの型 x_or_y_array; // 配列にしておくと(Cの2カラム目-1)で簡単にアクセスできそう
};
873デフォルトの名無しさん (ワッチョイ e7c3-WPlw)
2018/07/10(火) 01:34:56.63ID:C7bP6ErJ0 なんかのログなんだろうけど、ログ吐く時に読み込みやすいように出し方考え直した方がいいよ
大本が変えられないならパイプ繋いでフィルタ噛まして、読みやすいように直したファイルを並行して吐くとかさ
というかまず単にSECTION_NAMEごとにファイルぶった切っておくだけで良かったりしない?難しく考えすぎてない?
大本が変えられないならパイプ繋いでフィルタ噛まして、読みやすいように直したファイルを並行して吐くとかさ
というかまず単にSECTION_NAMEごとにファイルぶった切っておくだけで良かったりしない?難しく考えすぎてない?
874デフォルトの名無しさん (ワッチョイ e7c3-WPlw)
2018/07/10(火) 01:46:08.72ID:C7bP6ErJ0 どういうGUIが必要なのかわからんから的外れかもしれないけど
ワイならSECTION_NAMEごとに集計したHTMLファイルかなんかを出力するプログラムをワンパスかけてから
後でそのHTMLをブラウザで見ることを考えたくなるんだけどそれじゃダメなの?
ワイならSECTION_NAMEごとに集計したHTMLファイルかなんかを出力するプログラムをワンパスかけてから
後でそのHTMLをブラウザで見ることを考えたくなるんだけどそれじゃダメなの?
875デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/10(火) 06:48:34.57ID:wSs+8Os00876デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/10(火) 06:50:09.17ID:wSs+8Os00 >>815の勝負はどちらも私の勝ち
877デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/10(火) 06:58:28.74ID:wSs+8Os00 >>871
UIの表示内容はどういう感じを考えてる?
UIの表示内容はどういう感じを考えてる?
878デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/10(火) 07:26:16.92ID:wSs+8Os00 A
1カラム目と2カラム目は同じ数字?
1カラム目がxの個数、2カラム目がyの個数?
C
y 2 4 の後、データ行が2行だけど4行の間違い?
データ行の値の範囲は?
1カラム目と2カラム目は同じ数字?
1カラム目がxの個数、2カラム目がyの個数?
C
y 2 4 の後、データ行が2行だけど4行の間違い?
データ行の値の範囲は?
879baka (アウアウカー Sa1b-PAUf)
2018/07/10(火) 07:29:57.69ID:U8fm2Of7a section_nameは重複しますか?
880デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/10(火) 07:31:15.21ID:wSs+8Os00 初めて開くファイルは使いやすいように変換して(キャッシュとして)保存しておいて
次回以降それを使うか
全ファイルバッチ処理で事前に変換しておくか
かな
ファイルを開く度に分オーダーかかるのは使いづらい
どちらが良いかは使い方次第で
次回以降それを使うか
全ファイルバッチ処理で事前に変換しておくか
かな
ファイルを開く度に分オーダーかかるのは使いづらい
どちらが良いかは使い方次第で
881デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/10(火) 07:49:59.14ID:wSs+8Os00 15GBオーダーのファイルがすでにいつくかあって
今後も増えるってことで良いんですよね?
今後も増えるってことで良いんですよね?
882デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/10(火) 07:55:16.04ID:wSs+8Os00 @の行は1ファイル何行くらい?
883754 (ワッチョイ 7ff1-XcsY)
2018/07/10(火) 14:27:03.15ID:VT/DQ/OS0 >>873,874
ソフトが出しているログなので変えられず、並行で吐くこともできないんです…
> ワイならSECTION_NAMEごとに集計したHTMLファイルかなんかを出力するプログラムをワンパスかけてから
これも考えたのですが、元ファイルと加工したファイルが常に等価ではないので、
間違って古いままの加工ファイルを参照する事故を、全員が気にする必要が
出てくるため今は保留とし、どうしてもできない時の最終手段と考えています。
こういうご意見も新しい視点が見えたりするんでありがたいです。
>>877
こんなのをイメージしています。
====================
項目名 | 個数 ※各カラムの説明行
====================
-SECTION1 | 11200
subname1 | 8800 ※subnameがあれば折り畳みツリー形式。なければ折り畳みなし
subname2 | 2400
+SECTION2 | 1
+SECTION3 | 666
====================
This is pen. ※SECTION1を選択するとそれに対応するテキストをここに表示
hello world.
====================
1 2 3 4 5 6 7 ※上と同じくSECTIONに対応した数値を特定できる番号を表示
8 9 10 11 12 13 14 ※ここはHTMLぽいものにし、数字クリックでその数値をprint
....
====================
ソフトが出しているログなので変えられず、並行で吐くこともできないんです…
> ワイならSECTION_NAMEごとに集計したHTMLファイルかなんかを出力するプログラムをワンパスかけてから
これも考えたのですが、元ファイルと加工したファイルが常に等価ではないので、
間違って古いままの加工ファイルを参照する事故を、全員が気にする必要が
出てくるため今は保留とし、どうしてもできない時の最終手段と考えています。
こういうご意見も新しい視点が見えたりするんでありがたいです。
>>877
こんなのをイメージしています。
====================
項目名 | 個数 ※各カラムの説明行
====================
-SECTION1 | 11200
subname1 | 8800 ※subnameがあれば折り畳みツリー形式。なければ折り畳みなし
subname2 | 2400
+SECTION2 | 1
+SECTION3 | 666
====================
This is pen. ※SECTION1を選択するとそれに対応するテキストをここに表示
hello world.
====================
1 2 3 4 5 6 7 ※上と同じくSECTIONに対応した数値を特定できる番号を表示
8 9 10 11 12 13 14 ※ここはHTMLぽいものにし、数字クリックでその数値をprint
....
====================
884754 (ワッチョイ 7ff1-XcsY)
2018/07/10(火) 14:39:44.08ID:VT/DQ/OS0 >>878
> 1カラム目と2カラム目は同じ数字?
2カラム目が何の数字かまだ把握できていません。
とりあえず1カラム目と2カラム目の数値比較を行い、違う場合はエラーにしようと思います。
> y 2 4 の後、データ行が2行だけど4行の間違い?
ご指摘の通り4行の間違いでした。
> データ行の値の範囲は?
intの範囲を超えるか?ということですか?
int(-2147483648〜2147483647)で大丈夫と思います。
>>879
ユニークな名前で重複しません。
>>880
仰る通りどちらも一長一短で、今回は874さんに回答した通り、古いキャッシュを参照する事故を防ぐため、まずはテンポラリファイルを作らないことを考えています。
>>881
ファイルは毎回更新されて新しい15GBのファイル1つをインポートします。
15GBも現在のMAXサイズなのでそのうち20GBとかのものが出てくる可能性はありますが、
そこは「読み込みをひたすら待つ」と割り切りで考えています。
>>882
@の行→100行以下
Aの行→SECTIONごとに1行出るので同じく100行以下
Bの行→SECTIONごとにせいぜい20行程度。(20行*100行=20000行)
Cの行→SECTIONごとにたまに数千万のSECTIONあり(全SECTIONだと数千万〜億超えも出てきそう)
1つのSECTIONで数千万や億になり、それ以外のSECTIONは1000以下だったり、
1千万のSECTIONが複数SECTIONになることもあります。
そしてCに対して数値行が1行〜数十行、場合によっては数百行がくるので、Cとそれにかかる数値行が支配的になると思われます。
あと忘れていましたが、テキスト行は日本語がくることもあります。
それ以外は1byte文字です。
> 1カラム目と2カラム目は同じ数字?
2カラム目が何の数字かまだ把握できていません。
とりあえず1カラム目と2カラム目の数値比較を行い、違う場合はエラーにしようと思います。
> y 2 4 の後、データ行が2行だけど4行の間違い?
ご指摘の通り4行の間違いでした。
> データ行の値の範囲は?
intの範囲を超えるか?ということですか?
int(-2147483648〜2147483647)で大丈夫と思います。
>>879
ユニークな名前で重複しません。
>>880
仰る通りどちらも一長一短で、今回は874さんに回答した通り、古いキャッシュを参照する事故を防ぐため、まずはテンポラリファイルを作らないことを考えています。
>>881
ファイルは毎回更新されて新しい15GBのファイル1つをインポートします。
15GBも現在のMAXサイズなのでそのうち20GBとかのものが出てくる可能性はありますが、
そこは「読み込みをひたすら待つ」と割り切りで考えています。
>>882
@の行→100行以下
Aの行→SECTIONごとに1行出るので同じく100行以下
Bの行→SECTIONごとにせいぜい20行程度。(20行*100行=20000行)
Cの行→SECTIONごとにたまに数千万のSECTIONあり(全SECTIONだと数千万〜億超えも出てきそう)
1つのSECTIONで数千万や億になり、それ以外のSECTIONは1000以下だったり、
1千万のSECTIONが複数SECTIONになることもあります。
そしてCに対して数値行が1行〜数十行、場合によっては数百行がくるので、Cとそれにかかる数値行が支配的になると思われます。
あと忘れていましたが、テキスト行は日本語がくることもあります。
それ以外は1byte文字です。
885デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/10(火) 18:26:12.65ID:wSs+8Os00 キャッシュせず
変換して保存しないとなると
ほとんど読み込み時間
解析はそれに比べれば速い
なので
もし高速化したければ
全読みしない方法を考えるしか
全読みの時間くらいは待てるっていうならその方が簡単だけど
読み込み15GB 30秒って異様に速いな
うちの8TB 7200rpmのHDD(内側の方) だと78秒
SSD? RAID? キャッシュ? RAMディスク?
変換して保存しないとなると
ほとんど読み込み時間
解析はそれに比べれば速い
なので
もし高速化したければ
全読みしない方法を考えるしか
全読みの時間くらいは待てるっていうならその方が簡単だけど
読み込み15GB 30秒って異様に速いな
うちの8TB 7200rpmのHDD(内側の方) だと78秒
SSD? RAID? キャッシュ? RAMディスク?
886754 (アウアウウー Sa0b-XcsY)
2018/07/10(火) 18:39:22.79ID:AbfeQ9t7a >>885
HDDだと思います。
サーバ用なので高速なんですかね。
ちなみに cat /proc/cpuinfo でCPUも調べたらXeonで20コア以上ありました。
(ハイパースレッドかもしれませんが)
〜次キャッシュも民生用CPUより多いと予想されます。
HDDだと思います。
サーバ用なので高速なんですかね。
ちなみに cat /proc/cpuinfo でCPUも調べたらXeonで20コア以上ありました。
(ハイパースレッドかもしれませんが)
〜次キャッシュも民生用CPUより多いと予想されます。
887754 (アウアウウー Sa0b-sule)
2018/07/10(火) 22:05:54.09ID:zwgBQXGGa888754 (ワッチョイ 7ff1-sule)
2018/07/10(火) 23:40:47.46ID:VT/DQ/OS0 とりあえずみなさんのコードを眺めましたが初めて目にする関数だらけで自分のレベルでは全くついていけてないです。
一つ一つの関数がどんな動作をするのか調べていきます。
>>782,833 を見るとcharのポインタをインクリして読むやりかたとか昔ちらっと読んだことある。程度のレベルなので。。
今833-837の動作確認ができたので、まずはこれがどう動いているかと、バイナリ読み込みの手法について調べていきます。
一つ一つの関数がどんな動作をするのか調べていきます。
>>782,833 を見るとcharのポインタをインクリして読むやりかたとか昔ちらっと読んだことある。程度のレベルなので。。
今833-837の動作確認ができたので、まずはこれがどう動いているかと、バイナリ読み込みの手法について調べていきます。
889デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/11(水) 00:11:48.47ID:Faj75qU20 >>887
fgetsじゃなくて
freadで1MBずつ読むだけで78秒
庶民の普通のHDDはこんなもんです
解析入れてもほぼ同じなので
読むのに30秒なら解析入れても30秒で終わるよ
もちろんうまく作ればだけど
fgetsじゃなくて
freadで1MBずつ読むだけで78秒
庶民の普通のHDDはこんなもんです
解析入れてもほぼ同じなので
読むのに30秒なら解析入れても30秒で終わるよ
もちろんうまく作ればだけど
890デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/11(水) 00:15:35.84ID:Faj75qU20 >>833をマネしたら30秒じゃ無理だろうけどね
891デフォルトの名無しさん (ワッチョイ e7c3-WPlw)
2018/07/11(水) 09:43:08.56ID:zsyvWkTI0 ここはC++スレだからstd::regex使いなよ
>>833よりは速いし安全だぞ
>>833よりは速いし安全だぞ
892デフォルトの名無しさん (スップ Sd7f-SFkP)
2018/07/11(水) 12:53:48.19ID:MaErrZw3d 速いわけが無い
コードを書いて時間を測ってみなさい
コードを書いて時間を測ってみなさい
893デフォルトの名無しさん (ブーイモ MM2b-K9rx)
2018/07/11(水) 12:58:55.32ID:zIxL2DqcM 脳高速
894デフォルトの名無しさん (スップ Sd7f-SFkP)
2018/07/11(水) 13:08:59.82ID:MaErrZw3d sscanfが遅くてなんとかしたい
っていう話題なのに
DBだとかhtmlだとかregexだとか
頭がおかしいのが多いな
っていう話題なのに
DBだとかhtmlだとかregexだとか
頭がおかしいのが多いな
895デフォルトの名無しさん (ワッチョイ a781-UVFs)
2018/07/11(水) 13:11:36.83ID:ElMeoT060 何度も表示させたいなら、解析結果をDBに格納しておくというのもいい方法だと思うが
事前にできるなら、見かけ上の実行時間も節約できるんだし
事前にできるなら、見かけ上の実行時間も節約できるんだし
896デフォルトの名無しさん (スップ Sd7f-SFkP)
2018/07/11(水) 13:13:59.36ID:MaErrZw3d ちょっとは要望を読んでから書けよ
897デフォルトの名無しさん (ワッチョイ 47b3-rubz)
2018/07/11(水) 13:31:20.08ID:jxunhcWG0 エアプ野郎が多いからねこのスレ
何の意味があるのかは知らんが
何の意味があるのかは知らんが
898デフォルトの名無しさん (ワッチョイ a781-UVFs)
2018/07/11(水) 13:43:15.78ID:ElMeoT060 DBって要望がチャンと出てくる前の話だろう
サーバーで動かす位しか条件書いて無かったぞ
サーバーで動かす位しか条件書いて無かったぞ
899デフォルトの名無しさん (ワッチョイ e7c3-WPlw)
2018/07/11(水) 14:49:25.23ID:zsyvWkTI0900デフォルトの名無しさん (ワッチョイ 672d-CsAW)
2018/07/11(水) 15:12:40.20ID:uU0OdRlq0 (ぴこーん!) boost::spiritだな!
901デフォルトの名無しさん (ワッチョイ 47b3-rubz)
2018/07/11(水) 15:20:28.24ID:jxunhcWG0 うん、regexよりはspirit::qiだよね
ワッチョイ a781-UVFsは的外れにも程がある
そしてそれ以前にregexもspiritもC++初心者に勧めるようなものではない
ワッチョイ a781-UVFsは的外れにも程がある
そしてそれ以前にregexもspiritもC++初心者に勧めるようなものではない
902デフォルトの名無しさん (ワッチョイ a781-UVFs)
2018/07/11(水) 16:03:49.81ID:ElMeoT060 要件が全部出ていたわけじゃないのに
エスパーが登場して的当てたのか?そりゃスゴイな
エスパーが登場して的当てたのか?そりゃスゴイな
903デフォルトの名無しさん (ワッチョイ 4750-rubz)
2018/07/11(水) 21:40:55.60ID:Faj75qU20 >>743の時点で低レベルな記述が適していることくらいわかるだろ
15GBのテキストだぞ
15GBのテキストだぞ
904デフォルトの名無しさん (ワッチョイ 4750-rubz)
2018/07/11(水) 21:42:08.49ID:Faj75qU20905デフォルトの名無しさん (ワッチョイ 5f4c-EHpb)
2018/07/11(水) 22:32:29.61ID:DRc50H9L0 遅いから早くしたい
どんなに頑張っても無理なら
遅くてもよい仕組みにするという手もある
どんなに頑張っても無理なら
遅くてもよい仕組みにするという手もある
906デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/11(水) 23:31:22.90ID:Faj75qU20 そういう事は頑張ってから言え
907デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/11(水) 23:32:32.43ID:Faj75qU20 わざわざ遅い方法を選んで「無理」とか
ただの無能
ただの無能
908デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/11(水) 23:39:25.00ID:r1UJt2Dq0 やっぱりな低学歴しかいないわ
909デフォルトの名無しさん (ワッチョイ 4750-SFkP)
2018/07/11(水) 23:42:02.99ID:Faj75qU20 >>908
糞コードの負け犬君の登場ですね
糞コードの負け犬君の登場ですね
910デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/11(水) 23:43:40.24ID:r1UJt2Dq0 そもそも最初のフォーマットと全然違うやんけ
普通にfgetsでとって、必要最低限の位置をマーキングするほうが
メモリに入れるのはそれだけ
位置からメモリブロックをとって、>>834>>835みたいなやりかたで表示が必要になったときに解析
普通にfgetsでとって、必要最低限の位置をマーキングするほうが
メモリに入れるのはそれだけ
位置からメモリブロックをとって、>>834>>835みたいなやりかたで表示が必要になったときに解析
911デフォルトの名無しさん (ワッチョイ 0780-Rmg1)
2018/07/11(水) 23:46:44.47ID:r1UJt2Dq0 そもそも解析アプリが出力してる規定されてるフォーマットなのに
いちいち形式をチェックする必要すらない
ホントな知恵遅れはなにをいってんのか意味不明だからな
クソニートのエアプログラマがテキトーなことばっかりいってんのは分かる
いちいち形式をチェックする必要すらない
ホントな知恵遅れはなにをいってんのか意味不明だからな
クソニートのエアプログラマがテキトーなことばっかりいってんのは分かる
912デフォルトの名無しさん (ワッチョイ e79f-5kXQ)
2018/07/11(水) 23:51:40.60ID:7/yJo8F80 スケジュールを開始するボタンに名前をつけたいけどいい名前が思い浮かばない
できれば6文字以内で
開始とか実行はダメ
できれば6文字以内で
開始とか実行はダメ
913デフォルトの名無しさん (ワッチョイ 4af9-MLRX)
2018/07/12(木) 00:02:21.07ID:1QTfgkTp0 >>912
とりあえずC++は関係ないな
とりあえずC++は関係ないな
914デフォルトの名無しさん (ワッチョイ a580-lT5f)
2018/07/12(木) 00:09:52.26ID:LmT6lrwh0 ちなみな
fgets()は知恵遅れのキミラが考えてるよりぜんぜん速い
このスレの知恵遅れが書くようなクソコードより全然速い
書式付の標準関数は書式解析のオーバーヘッドがあるからクソ遅い
fgets()は知恵遅れのキミラが考えてるよりぜんぜん速い
このスレの知恵遅れが書くようなクソコードより全然速い
書式付の標準関数は書式解析のオーバーヘッドがあるからクソ遅い
915デフォルトの名無しさん (ワッチョイ a580-lT5f)
2018/07/12(木) 00:14:29.53ID:LmT6lrwh0 ちなみにな手で入力したときは
fscanfやsscanfは使えない
書式より引数が少ない場合簡単に死ぬからな
手で入力してるデータの場合fgets()でデータとって丹念に解析するしかない
つまりfscanfやsscanfの使用も想定する=間違いなく妥当な形式の入力がある
ことを意味する
fscanfやsscanfは使えない
書式より引数が少ない場合簡単に死ぬからな
手で入力してるデータの場合fgets()でデータとって丹念に解析するしかない
つまりfscanfやsscanfの使用も想定する=間違いなく妥当な形式の入力がある
ことを意味する
916デフォルトの名無しさん (ワッチョイ 3d50-Se03)
2018/07/12(木) 00:15:24.91ID:KB59nVpm0917デフォルトの名無しさん (ワッチョイ a580-lT5f)
2018/07/12(木) 00:17:19.69ID:LmT6lrwh0 メモリブロックとるときは
普通にfreadでいい
どうせ改行位置は解析しないといけないから
fgetsにやらせとけばいい
知恵遅れはTPOにあった関数の使い方がわかってないからな
普通にfreadでいい
どうせ改行位置は解析しないといけないから
fgetsにやらせとけばいい
知恵遅れはTPOにあった関数の使い方がわかってないからな
918デフォルトの名無しさん (ワッチョイ a580-lT5f)
2018/07/12(木) 00:22:11.12ID:LmT6lrwh0 知恵遅れはなにをどういった場面で使うのか分かってないからな
そもそも話がかみあうワケがない
知恵遅れにありがち
電車みて電車の型番いえるだけみたいな頭悪いのが
このスレにはウヨウヨいる
そもそも話がかみあうワケがない
知恵遅れにありがち
電車みて電車の型番いえるだけみたいな頭悪いのが
このスレにはウヨウヨいる
919デフォルトの名無しさん (ワッチョイ 3d50-Se03)
2018/07/12(木) 00:22:42.68ID:KB59nVpm0 わざわざ改行検索だけの為にメモリスキャン
ガチガチにチューニングするつもりならあり得ないですね
ガチガチにチューニングするつもりならあり得ないですね
920デフォルトの名無しさん (ワッチョイ 3d50-Se03)
2018/07/12(木) 00:23:57.39ID:KB59nVpm0 適度なチューニングで妥協するんであれば
fgetsで良いかも知れませんが
fgetsで良いかも知れませんが
921デフォルトの名無しさん (ワッチョイ 3d50-Se03)
2018/07/12(木) 00:28:02.27ID:KB59nVpm0922754 (アウアウウー Sa21-Y8gp)
2018/07/12(木) 00:32:07.09ID:2mlSfrk0a >>889
なるほどですね。
解析入れてもあまり変わらないのか。
scanfって本当に遅いんですね、嬉しい誤算です。
話題に出ているregexですが、↓ここを見た感じ、
ttps://www.sejuku.net/blog/25962
下記のように感じました。
perlやpythonの正規表現と似た感じなので使えるかもしれません。
1文字づつシフトしてスペースや改行を判定しながら抽出するより早いのであれば試して見ようと思います。
regcomp →正規表現オブジェクト?の作成。()でグループ化。読み込み前にすべてのフォーマットパターンを生成して使い回す。
regexec →正規表現オブジェクトを使ってパターンマッチ
rm_so、rm_eo →マッチの先頭、終端が取れるので文字列が拾える。こんな感じ?→strncpy(&str, data+match[i].rm_so, match[i].rm_eo - match[i].rm_so);
regfree →読み込み終了後にすべてのオブジェクトをこれで開放すればいい?
spirit::qiはググりましたがまったくわかりませんでした。。
なるほどですね。
解析入れてもあまり変わらないのか。
scanfって本当に遅いんですね、嬉しい誤算です。
話題に出ているregexですが、↓ここを見た感じ、
ttps://www.sejuku.net/blog/25962
下記のように感じました。
perlやpythonの正規表現と似た感じなので使えるかもしれません。
1文字づつシフトしてスペースや改行を判定しながら抽出するより早いのであれば試して見ようと思います。
regcomp →正規表現オブジェクト?の作成。()でグループ化。読み込み前にすべてのフォーマットパターンを生成して使い回す。
regexec →正規表現オブジェクトを使ってパターンマッチ
rm_so、rm_eo →マッチの先頭、終端が取れるので文字列が拾える。こんな感じ?→strncpy(&str, data+match[i].rm_so, match[i].rm_eo - match[i].rm_so);
regfree →読み込み終了後にすべてのオブジェクトをこれで開放すればいい?
spirit::qiはググりましたがまったくわかりませんでした。。
923デフォルトの名無しさん (ワッチョイ 3d50-Se03)
2018/07/12(木) 00:34:07.21ID:KB59nVpm0 15GBともなると
関数を呼ぶ時間でもトータル時間に影響するんでね
fgetsの関数コール回数だってバカにならんでしょ
全てのfloatをvectorにpush_backするだけでも
結構な時間ですよ
この辺も工夫しないと
関数を呼ぶ時間でもトータル時間に影響するんでね
fgetsの関数コール回数だってバカにならんでしょ
全てのfloatをvectorにpush_backするだけでも
結構な時間ですよ
この辺も工夫しないと
924デフォルトの名無しさん (ワッチョイ a580-lT5f)
2018/07/12(木) 00:34:22.25ID:LmT6lrwh0 正規表現なんか使ったらコンパイル済の正規表現でも
クソ遅いにきまってるやんけ
そんなもん使うならスクリプトでやったほうがいい
クソ遅いにきまってるやんけ
そんなもん使うならスクリプトでやったほうがいい
925デフォルトの名無しさん (ワッチョイ b5b3-kMcx)
2018/07/12(木) 09:04:08.15ID:8O8kwVFO0 ディスク読むより遅いでしょうか。
926デフォルトの名無しさん (ワッチョイ 7db3-iomh)
2018/07/12(木) 09:40:21.55ID:yoYPGeS70927デフォルトの名無しさん (ブーイモ MM8e-3rXz)
2018/07/12(木) 10:27:30.25ID:oZ8teohGM 頭使え
928デフォルトの名無しさん (ワッチョイ f1d2-LQig)
2018/07/12(木) 13:31:18.35ID:9k08EbFv0 ちなみに gcc (Ubuntu 7.3.0-16ubuntu3) 7.3.0 だと、 C++がちゃんとしてて、std::getline()はfread()と同じくらい速い。
各自で実際に試してみるとよいだろう。
Visual Studio だとstd::getline()はfgets()よりも遅い。
コンパイラによって性能に極端な差がでるのがC++のiostream周り。iostreamが地雷扱いされる主因。
各自で実際に試してみるとよいだろう。
Visual Studio だとstd::getline()はfgets()よりも遅い。
コンパイラによって性能に極端な差がでるのがC++のiostream周り。iostreamが地雷扱いされる主因。
929デフォルトの名無しさん (ワッチョイ 119e-dYrz)
2018/07/12(木) 14:27:06.99ID:Jbx8ub/k0 15GB なんて、もし画像ファイルなら、触った途端に、メモリ不足でフリーズするレベル。
普通、8GB ぐらいしか、メモリを積んでいないだろ
1行毎に、読んでは捨てる方式じゃないと無理。
それか、ファイル分割する
Ruby で、HTML, Node.js などが良さそう。
それか、DB
普通、8GB ぐらいしか、メモリを積んでいないだろ
1行毎に、読んでは捨てる方式じゃないと無理。
それか、ファイル分割する
Ruby で、HTML, Node.js などが良さそう。
それか、DB
930デフォルトの名無しさん (スップ Sdea-Se03)
2018/07/12(木) 14:35:16.06ID:QybvZFcBd 順番にアホが書き込むスレ
931デフォルトの名無しさん (スップ Sdea-Se03)
2018/07/12(木) 14:43:21.06ID:QybvZFcBd932デフォルトの名無しさん (ワッチョイ 3d50-Se03)
2018/07/12(木) 20:53:29.39ID:KB59nVpm0 色々な言語で速度比較とか面白そう
933デフォルトの名無しさん (ワッチョイ 3d50-Se03)
2018/07/12(木) 21:42:21.02ID:KB59nVpm0 >>871のフォーマットでC++で作ったら
解析15GBで8.6秒
1バイト平均2クロック!
これを越えるには
マルチスレッド / AVX命令 /アセンブラ / GPU
に手を出さないと無理かな
----
Haswell
3.4GHz固定
シングルスレッド
C++で1文字ずつ15G文字解析
普通の命令のみ使用(SIMD命令は使用しない)
数値の合計のみ計算して結果を最後に表示
固定4KBを繰り返し解析、トータル15GB分の時間を計測
----
解析15GBで8.6秒
1バイト平均2クロック!
これを越えるには
マルチスレッド / AVX命令 /アセンブラ / GPU
に手を出さないと無理かな
----
Haswell
3.4GHz固定
シングルスレッド
C++で1文字ずつ15G文字解析
普通の命令のみ使用(SIMD命令は使用しない)
数値の合計のみ計算して結果を最後に表示
固定4KBを繰り返し解析、トータル15GB分の時間を計測
----
934デフォルトの名無しさん (ワッチョイ 0a4c-E8X4)
2018/07/12(木) 21:55:17.33ID:Ze/sD5Dv0 1ブロック内に数値が数万あってどうUIで表示すんのか気になる
935デフォルトの名無しさん (ワッチョイ 3d50-Se03)
2018/07/12(木) 22:00:17.37ID:KB59nVpm0 数値ならグラフにするとか画像にするとかフィルターを通してから間引くとか音声にして鳴らすとか
まあ色々とあると思う
まあ色々とあると思う
936754 (ワッチョイ 66f1-Y8gp)
2018/07/12(木) 22:08:43.66ID:8VUYfWV40 >>926
おとなしく1文字づつ評価します。
>>933
8.6秒早いですね。
自分はまず初バイナリ読み込みなので勉強から始めてとりあえず1行読みができましたが、
アスキー読み込みのfgetsの方が早かったです、、
コードを載せるのでどこが悪いか見てもらって良いですか?
対象=13GBのファイル(約8億行)。
○fgets版 →約17秒
if((fp=fopen(file_path,"r"))==NULL){
printf("file not open %s\n", file_path);
return 1;
}
while( fgets(buf,MAX,fp) != NULL ){
buf;
}
次にバイナリ読み↓
おとなしく1文字づつ評価します。
>>933
8.6秒早いですね。
自分はまず初バイナリ読み込みなので勉強から始めてとりあえず1行読みができましたが、
アスキー読み込みのfgetsの方が早かったです、、
コードを載せるのでどこが悪いか見てもらって良いですか?
対象=13GBのファイル(約8億行)。
○fgets版 →約17秒
if((fp=fopen(file_path,"r"))==NULL){
printf("file not open %s\n", file_path);
return 1;
}
while( fgets(buf,MAX,fp) != NULL ){
buf;
}
次にバイナリ読み↓
937754 (ワッチョイ 66f1-Y8gp)
2018/07/12(木) 22:11:04.95ID:8VUYfWV40 ○バイナリ読み版 →約44秒
struct CCC {
FILE *fp ;
bool read(char* file_path);
t_read_db read_db;
};
bool CCC::read(char file_path[]){
FILE *fp;
if((fp=fopen(file_path, "rb"))==NULL){ printf("ファイルを開けません。%s",file_path); return 0; }
unsigned char buf[BUF_SIZE];
int newline_index;
while( !feof( fp ) ){
size_t size = fread( &buf, sizeof(buf[0]), sizeof(buf), fp );
// 終端処理。最大値で取得されてなければそこを末尾にする
if( size != BUF_SIZE ) buf[size] = '\x00';
// 取得bufの最後尾が改行でなければfpを改行まで戻す
if( buf[size-1] != '\x0a' ){
newline_index = -2;
for(; buf[size+newline_index] != '\x0a'; --newline_index);
fseek(fp,newline_index+1,SEEK_CUR);
// bufの最後の改行の次にx00(null)を入れてそれ以降をカット
// 「配列参照はポインタの移動より遅い」とあったがbufは実体で移動できないので[]参照で代入。
buf[size+newline_index+1] = '\x00';
}
unsigned char const* c_buf = buf;
while( c_buf[0] != '\x00' ){
print_line(c_buf, &c_buf);
}
}
}
struct CCC {
FILE *fp ;
bool read(char* file_path);
t_read_db read_db;
};
bool CCC::read(char file_path[]){
FILE *fp;
if((fp=fopen(file_path, "rb"))==NULL){ printf("ファイルを開けません。%s",file_path); return 0; }
unsigned char buf[BUF_SIZE];
int newline_index;
while( !feof( fp ) ){
size_t size = fread( &buf, sizeof(buf[0]), sizeof(buf), fp );
// 終端処理。最大値で取得されてなければそこを末尾にする
if( size != BUF_SIZE ) buf[size] = '\x00';
// 取得bufの最後尾が改行でなければfpを改行まで戻す
if( buf[size-1] != '\x0a' ){
newline_index = -2;
for(; buf[size+newline_index] != '\x0a'; --newline_index);
fseek(fp,newline_index+1,SEEK_CUR);
// bufの最後の改行の次にx00(null)を入れてそれ以降をカット
// 「配列参照はポインタの移動より遅い」とあったがbufは実体で移動できないので[]参照で代入。
buf[size+newline_index+1] = '\x00';
}
unsigned char const* c_buf = buf;
while( c_buf[0] != '\x00' ){
print_line(c_buf, &c_buf);
}
}
}
938754 (ワッチョイ 66f1-Y8gp)
2018/07/12(木) 22:11:35.38ID:8VUYfWV40 bool print_line(unsigned char const* p_buf, unsigned char const** pct_next);
bool print_line(unsigned char const* p_buf, unsigned char const** pct_next){
unsigned char const* c_buf = p_buf;
//改行位置を検索
for(; *c_buf != '\x0a'; ++c_buf);
char line[LINE_SIZE];
strncpy( line, (char const*)p_buf, c_buf - p_buf );
// nullで区切らないと過去に代入した文字数より少ないときにゴミが残る
line[c_buf - p_buf] = '\x00';
++c_buf;
*pct_next = c_buf;
return true;
};
bool print_line(unsigned char const* p_buf, unsigned char const** pct_next){
unsigned char const* c_buf = p_buf;
//改行位置を検索
for(; *c_buf != '\x0a'; ++c_buf);
char line[LINE_SIZE];
strncpy( line, (char const*)p_buf, c_buf - p_buf );
// nullで区切らないと過去に代入した文字数より少ないときにゴミが残る
line[c_buf - p_buf] = '\x00';
++c_buf;
*pct_next = c_buf;
return true;
};
939754 (ワッチョイ 66f1-Y8gp)
2018/07/12(木) 22:13:44.64ID:8VUYfWV40 ○fgets版 →約17秒
○バイナリ読み版 →約44秒
両方ともとりあえず文字列の読み取りまでしていて、条件は同じではないかと思うのですが、freadのほうが倍以上遅いです。。
○バイナリ読み版 →約44秒
両方ともとりあえず文字列の読み取りまでしていて、条件は同じではないかと思うのですが、freadのほうが倍以上遅いです。。
940デフォルトの名無しさん (ブーイモ MM8e-3rXz)
2018/07/12(木) 22:14:27.55ID:oZ8teohGM >>936
setvbufはしないの?
setvbufはしないの?
941デフォルトの名無しさん (ワッチョイ 0a4c-E8X4)
2018/07/12(木) 22:15:24.64ID:Ze/sD5Dv0 >>935
fgetsで悩んでる人がそのハードル超えることできるか心配してるんですよ
fgetsで悩んでる人がそのハードル超えることできるか心配してるんですよ
942754 (ワッチョイ 66f1-Y8gp)
2018/07/12(木) 22:17:52.40ID:8VUYfWV40 すみません、44秒はfreadの読み込みサイズ(BUF_SIZE)が512byteでした。
16MBにすると34秒になりましたが、それでも倍の差があります。
16MBにすると34秒になりましたが、それでも倍の差があります。
943デフォルトの名無しさん (ブーイモ MM8e-3rXz)
2018/07/12(木) 22:33:29.40ID:oZ8teohGM944754 (ワッチョイ 66f1-Y8gp)
2018/07/12(木) 23:04:55.64ID:8VUYfWV40945デフォルトの名無しさん (ワッチョイ a580-lT5f)
2018/07/12(木) 23:10:07.38ID:LmT6lrwh0 あのな
そこまで読みこみ速度を気にするなら
そもそもFILEポインタ使う関数なんか使うなよ
そもそもFILEポインタ使う関数はバッファリングしてるから
いちいちメモリコピーしてんのに
そこまでガタガタいうなら
openとreadで普通にメモリブロック読みこむ処理にしろよ
ハゲ
そこまで読みこみ速度を気にするなら
そもそもFILEポインタ使う関数なんか使うなよ
そもそもFILEポインタ使う関数はバッファリングしてるから
いちいちメモリコピーしてんのに
そこまでガタガタいうなら
openとreadで普通にメモリブロック読みこむ処理にしろよ
ハゲ
946754 (ワッチョイ 66f1-Y8gp)
2018/07/12(木) 23:13:14.06ID:8VUYfWV40947デフォルトの名無しさん (ワッチョイ a580-lT5f)
2018/07/12(木) 23:13:42.35ID:LmT6lrwh0 ちなみになFILEポインタは構造体にファイルデスクリプタもってる
fopenでopenを呼び出してファイルディスクリプタ生成して構造体に保存してる
ファイル読むときはファイルディスクリプタでread使ってバッファリングしながら読みこんでる
このスレの低学歴どもはこういう基本的なことわかってんの
fopenでopenを呼び出してファイルディスクリプタ生成して構造体に保存してる
ファイル読むときはファイルディスクリプタでread使ってバッファリングしながら読みこんでる
このスレの低学歴どもはこういう基本的なことわかってんの
948デフォルトの名無しさん (ワッチョイ a580-lT5f)
2018/07/12(木) 23:15:00.75ID:LmT6lrwh0 そのsetvbufというのが
バッファリングするバッファのサイズだ
つまり、バッファにたまったメモリをひたすらコピーしてる
バッファリングするバッファのサイズだ
つまり、バッファにたまったメモリをひたすらコピーしてる
949デフォルトの名無しさん (ブーイモ MM8e-3rXz)
2018/07/12(木) 23:15:52.81ID:oZ8teohGM filenoとfdopenの理解はデフォ
950デフォルトの名無しさん (ワッチョイ a580-lT5f)
2018/07/12(木) 23:18:11.64ID:LmT6lrwh0 32bit越えるmmapとか
そんなやばそうなもん使うのか
まずちゃんと動作するか確認することになるわ
そんなやばそうなもん使うのか
まずちゃんと動作するか確認することになるわ
951デフォルトの名無しさん (ワッチョイ a580-lT5f)
2018/07/12(木) 23:31:34.69ID:LmT6lrwh0 休日にオレのエレガントなファイル読みこみ処理作ってやるから
楽しみにしてなさい
楽しみにしてなさい
952デフォルトの名無しさん (ワッチョイ 3d50-Se03)
2018/07/12(木) 23:40:59.34ID:KB59nVpm0 HDDの一番外側15GB
セクタ直読みで60.1秒
平均 250MB/s でした
7200rpmの8TBのHDDです
セクタ直読みで60.1秒
平均 250MB/s でした
7200rpmの8TBのHDDです
953デフォルトの名無しさん (ワッチョイ 3d50-Se03)
2018/07/12(木) 23:44:58.13ID:KB59nVpm0 >>851の77.9秒はHDDの内側の方でfreadでの読み込み
どちらもHDDの限界と思います
どちらもHDDの限界と思います
954デフォルトの名無しさん (ワッチョイ 3d50-Se03)
2018/07/12(木) 23:49:15.37ID:KB59nVpm0955デフォルトの名無しさん (ワッチョイ 3d50-Se03)
2018/07/12(木) 23:53:49.46ID:KB59nVpm0956754 (ワッチョイ 66f1-Y8gp)
2018/07/13(金) 00:20:28.77ID:Zia1PITL0 >>951
ありがとうございます。楽しみにしています。
>>933,952,953
解析と読み込みを分けているんですね、8.6秒は解析で、読み込みがHDDのハード限界の60秒(高速な外側)、77.9秒(低速な内側)。
そこで >>851 の読み込み、解析合わせると78.1秒でほとんどがHDD律速ということか。
>>954,955
ご説明ありがとうございます。 >>782 の動作を調べてみます。
freadの扱いで質問なのですが、byte単位で取得すると最後尾が改行ではなく途中で終わることがあるので、
改行区切りになっているdata変数がだと思って、937に書いたコードでは、自分がわかる知識で考えて、
freadで読み込んだあとに改行のところまでfseekで戻しているんですが、この考え方はあっているのでしょうか?
ありがとうございます。楽しみにしています。
>>933,952,953
解析と読み込みを分けているんですね、8.6秒は解析で、読み込みがHDDのハード限界の60秒(高速な外側)、77.9秒(低速な内側)。
そこで >>851 の読み込み、解析合わせると78.1秒でほとんどがHDD律速ということか。
>>954,955
ご説明ありがとうございます。 >>782 の動作を調べてみます。
freadの扱いで質問なのですが、byte単位で取得すると最後尾が改行ではなく途中で終わることがあるので、
改行区切りになっているdata変数がだと思って、937に書いたコードでは、自分がわかる知識で考えて、
freadで読み込んだあとに改行のところまでfseekで戻しているんですが、この考え方はあっているのでしょうか?
957754 (ワッチョイ 66f1-Y8gp)
2018/07/13(金) 00:21:42.58ID:Zia1PITL0 data変数がだと思って →×
data変数が必要だと思って →○
data変数が必要だと思って →○
958754 (ワッチョイ 66f1-Y8gp)
2018/07/13(金) 00:28:02.06ID:Zia1PITL0959デフォルトの名無しさん (ワッチョイ f1d2-LQig)
2018/07/13(金) 01:21:45.76ID:5Z2wrzxE0 MS製の金毘羅でfgets(), fgetc()を試す場合は、_CRT_DISABLE_PERFCRIT_LOCKS 必須で。
960デフォルトの名無しさん (ワッチョイ ea34-7KrU)
2018/07/13(金) 02:19:38.68ID:AZAPUt/l0 無能な働き者が書いた半角スクリプトなんて誰も走らせたくない
961デフォルトの名無しさん (ワッチョイ 0a4c-E8X4)
2018/07/13(金) 06:36:46.59ID:vZSq0WGS0 毎回fseekで改行位置まで戻してたら意味ねー
962デフォルトの名無しさん (ワッチョイ 3d50-Se03)
2018/07/13(金) 07:08:38.04ID:n6X2CtBj0 >>956
読み込みの境目の処理方法はいくつかあります
A. 1行全体が連続してバッファに存在しなくてもいい作りにする
B. リングバッファ
C. fseekでファイルポインタを戻してから読み込む
D. あまりをmemcpyでバッファの先頭にコピーしてから読み込む
E. ほか
読み込み単位が大きければ C. or D. のコストは無視出来るので C. D. で
読みこみ単位が小さければ A. B. なども考える
といった感じかと思います
今回私は解析処理が簡単に作れて、HDDの読み込みに一切影響を与えない、D.で作りました
読み込みの境目の処理方法はいくつかあります
A. 1行全体が連続してバッファに存在しなくてもいい作りにする
B. リングバッファ
C. fseekでファイルポインタを戻してから読み込む
D. あまりをmemcpyでバッファの先頭にコピーしてから読み込む
E. ほか
読み込み単位が大きければ C. or D. のコストは無視出来るので C. D. で
読みこみ単位が小さければ A. B. なども考える
といった感じかと思います
今回私は解析処理が簡単に作れて、HDDの読み込みに一切影響を与えない、D.で作りました
963デフォルトの名無しさん (ワッチョイ 3d50-Se03)
2018/07/13(金) 08:06:32.03ID:n6X2CtBj0964754 (ワッチョイ 66f1-yKfk)
2018/07/13(金) 11:12:41.59ID:Zia1PITL0 >>959
ttp://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-8.1.0/gcc-8.1.0.tar.xz
これを使ってるので、まずはMSのオプションは関係なさそうです。
でもMSのコンパイラは早いという記事をこの前読んだのでそっちの方に乗り換えた方がいいのかな。
完成した後に両方テストして良好な方を検討しようと思います。
>>962,963
A,Bは難易度高そうですね。
Cは自分がやった手法のようですが、Dはポインタを戻す分の再取得が無いのでCより良さそうに見える。
Dを検討してみます。
fgetsもfreadも同じ時間ですか。
となるとfgets 13GB 17秒だから、そのレベルの速度は出るはずなのか。
今782のコードを調べて動作がわかってきました。
char演算で文字コードを数字の始点に移動させ9以下で数字以外(スペースor改行)を判定。
*10で桁を表現し、文字コードの番号で演算。(文字→数字変換していない!!)
このファイルで支配的な数字行が文字→数字変換が一度もないおかげですごく効きそう。
原理がわかるとなるほど!となるけど、1桁ずつ演算、文字コード演算は自分がやってたら絶対にたどり着かない発想です。
ttp://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-8.1.0/gcc-8.1.0.tar.xz
これを使ってるので、まずはMSのオプションは関係なさそうです。
でもMSのコンパイラは早いという記事をこの前読んだのでそっちの方に乗り換えた方がいいのかな。
完成した後に両方テストして良好な方を検討しようと思います。
>>962,963
A,Bは難易度高そうですね。
Cは自分がやった手法のようですが、Dはポインタを戻す分の再取得が無いのでCより良さそうに見える。
Dを検討してみます。
fgetsもfreadも同じ時間ですか。
となるとfgets 13GB 17秒だから、そのレベルの速度は出るはずなのか。
今782のコードを調べて動作がわかってきました。
char演算で文字コードを数字の始点に移動させ9以下で数字以外(スペースor改行)を判定。
*10で桁を表現し、文字コードの番号で演算。(文字→数字変換していない!!)
このファイルで支配的な数字行が文字→数字変換が一度もないおかげですごく効きそう。
原理がわかるとなるほど!となるけど、1桁ずつ演算、文字コード演算は自分がやってたら絶対にたどり着かない発想です。
965デフォルトの名無しさん (ワッチョイ 119e-dYrz)
2018/07/13(金) 11:27:35.12ID:oo2UOY380 text/byte stream は異なる。
文字列はバイトじゃなく、テキスト
バイトは構造体など、構造が決まっているもの
改行区切りで、改行の位置が変わるものは、テキスト処理
文字列はバイトじゃなく、テキスト
バイトは構造体など、構造が決まっているもの
改行区切りで、改行の位置が変わるものは、テキスト処理
966デフォルトの名無しさん (ササクッテロ Spbd-mkVh)
2018/07/13(金) 12:02:35.45ID:cfQ/Db/gp >>965
お前ちょっと黙っとけ
お前ちょっと黙っとけ
967デフォルトの名無しさん (ワッチョイ 118a-3Xuk)
2018/07/13(金) 12:51:36.83ID:dS91uWOz0 可変長構造体なんてのもあったりして
968デフォルトの名無しさん (ワッチョイ 119e-dYrz)
2018/07/13(金) 16:34:16.85ID:oo2UOY380 通信データなどは、可変長構造体
ヘッダーなどは固定サイズで、データ部分は可変サイズ。
可変部分のサイズが、ヘッダーなどに書いてある
ヘッダーなどは固定サイズで、データ部分は可変サイズ。
可変部分のサイズが、ヘッダーなどに書いてある
969デフォルトの名無しさん (ワッチョイ 6d02-+/lp)
2018/07/13(金) 17:51:00.86ID:k5yNhwQP0 gcc拡張でサイズ0の配列定義うんたら
>>969
C99なら規格化されたのでgcc拡張は要らなくなった
C99なら規格化されたのでgcc拡張は要らなくなった
971デフォルトの名無しさん (ワッチョイ 3d93-x/6u)
2018/07/13(金) 20:14:02.67ID:Zuzc5Uab0 C99の可変長配列はC++には取り入れられなかったし、
C11ではオプションに格下げされたんじゃなかったっけ?
年式でフラフラする機能の典型例のような記憶がある。
C11ではオプションに格下げされたんじゃなかったっけ?
年式でフラフラする機能の典型例のような記憶がある。
972デフォルトの名無しさん (スップ Sd0a-Se03)
2018/07/13(金) 20:48:09.66ID:ZWzFkIpgd おまいらスレタイ
974はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-LQig)
2018/07/13(金) 20:56:12.79ID:dep+wTpc0 >>971
VLA のことと誤解してないか?
ここで言ってる「可変長構造体」は構造体の最後の要素が不完全型であることを許すルールのことだと思う。
struct a {
int a;
int b[];
};
このとき sizeof(struct a) は要素 b を含まない大きさを返す。
malloc(sizeof(struct a)+(bの大きさとして確保したい大きさ)) とすれば b が可変長な構造体として使える。
このルールが出来る前 (C89) は仕様に沿ってこのようなことをしようと思うと
配列 b の大きさを便宜上 1 として指定しておく、
つまりは
struct a {
int a;
int b[1];
};
としておいて malloc のサイズ指定のときに要素一個分の大きさを差し引いて調整するようなことをしていた。
VLA のことと誤解してないか?
ここで言ってる「可変長構造体」は構造体の最後の要素が不完全型であることを許すルールのことだと思う。
struct a {
int a;
int b[];
};
このとき sizeof(struct a) は要素 b を含まない大きさを返す。
malloc(sizeof(struct a)+(bの大きさとして確保したい大きさ)) とすれば b が可変長な構造体として使える。
このルールが出来る前 (C89) は仕様に沿ってこのようなことをしようと思うと
配列 b の大きさを便宜上 1 として指定しておく、
つまりは
struct a {
int a;
int b[1];
};
としておいて malloc のサイズ指定のときに要素一個分の大きさを差し引いて調整するようなことをしていた。
975デフォルトの名無しさん (ワッチョイ 3d50-Se03)
2018/07/13(金) 20:59:38.81ID:n6X2CtBj0 どうでもいい機能
976971 (ワッチョイ 3d93-x/6u)
2018/07/13(金) 21:06:27.07ID:Zuzc5Uab0 すまん、皆の言う通りだ。ちゃんと読めば
構造体の末尾メンバの0サイズ配列の話だと分かる流れだったのに、
なんでか裸の配列の要素数だと思いこんでしまった。
構造体の末尾メンバの0サイズ配列の話だと分かる流れだったのに、
なんでか裸の配列の要素数だと思いこんでしまった。
977デフォルトの名無しさん (ワッチョイ eabd-CB8p)
2018/07/14(土) 01:43:04.14ID:6fifTYMf0 GCC拡張をしたとして
struct a {
int b[0];
};
のsizeof(a)はいくつなんじゃろうか…
struct a {
int b[0];
};
のsizeof(a)はいくつなんじゃろうか…
978はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-LQig)
2018/07/14(土) 02:09:53.78ID:Eblv1Llg0 >>977
ゼロが返ってきたぞ。
ただし、 C/C++ におけるオブジェクトはメモリの一部を占有するものでありポインタで示せるものという要求があるので、
それと矛盾なく使うには色々と気を付けないといけないかもしれない。
ちなみに、クラスのメンバにストレージを割り当てないこと (要するにサイズゼロのオブジェクト) を許す [[no_unique_address]] という属性が C++20 で追加されてる。
ゼロが返ってきたぞ。
ただし、 C/C++ におけるオブジェクトはメモリの一部を占有するものでありポインタで示せるものという要求があるので、
それと矛盾なく使うには色々と気を付けないといけないかもしれない。
ちなみに、クラスのメンバにストレージを割り当てないこと (要するにサイズゼロのオブジェクト) を許す [[no_unique_address]] という属性が C++20 で追加されてる。
979デフォルトの名無しさん (ワッチョイ 9e9f-juwT)
2018/07/14(土) 09:04:29.47ID:5xFWH4XP0 そんなクソみたいな使い方しかされない機能入れるなよ。。
980デフォルトの名無しさん (ブーイモ MM8e-4qXr)
2018/07/14(土) 09:13:37.39ID:J4NDnBASM 複数回allocateを抑制するための機能(関数)はc++にもたくさんあるじゃない
981デフォルトの名無しさん (ワッチョイ 7db3-mkVh)
2018/07/14(土) 10:41:27.91ID:uSYNDUAh0982デフォルトの名無しさん (ワッチョイ eabd-CB8p)
2018/07/14(土) 11:49:09.59ID:6fifTYMf0983デフォルトの名無しさん (ワッチョイ 3a7e-LQig)
2018/07/14(土) 12:04:14.50ID:xT/OvOUN0 最適なプログラムを書く必要のない立場の雑魚は黙ってろよw
984デフォルトの名無しさん (ワッチョイ 89de-juwT)
2018/07/14(土) 12:33:16.17ID:2h2LuDt30985デフォルトの名無しさん (ブーイモ MMc9-LQig)
2018/07/14(土) 12:41:29.77ID:l5rGqYSnM c++つかってるとロジックやアルゴリズムなどの本来の目的より
こういう横道にそれた話題ばかりになることが多い
手段が目的化するので困る
こういう横道にそれた話題ばかりになることが多い
手段が目的化するので困る
986デフォルトの名無しさん (ブーイモ MMc9-LQig)
2018/07/14(土) 12:42:59.00ID:l5rGqYSnM 関心の集中の先はプログラムで実現できることになるべきだけど
c++はそっちより言語自信や仕様や実装に目が向く
時間が無駄に費やされやすい
c++はそっちより言語自信や仕様や実装に目が向く
時間が無駄に費やされやすい
987デフォルトの名無しさん (ワッチョイ 3a7e-LQig)
2018/07/14(土) 12:50:50.32ID:xT/OvOUN0 最適なプログラムを書くのもC++の目的だ
ロジック以外のことに目をそらしたいなら他の言語を使え
ロジック以外のことに目をそらしたいなら他の言語を使え
988デフォルトの名無しさん (ブーイモ MMc9-LQig)
2018/07/14(土) 12:53:19.80ID:l5rGqYSnM c++は幅広い書き方ができてしまうのが一番困ったところ
10年前のコードが完全に動いてるにも拘わらずゴミに見えてしまう
10年前のコードが完全に動いてるにも拘わらずゴミに見えてしまう
989デフォルトの名無しさん (ワッチョイ 7db3-mkVh)
2018/07/14(土) 12:54:52.71ID:uSYNDUAh0 >>984
非staticなメンバが無い、ってのはメンバ変数ね(非staticなメンバ関数はあっても関係ない、つまりインターフェースも含む
非staticなメンバが無い、ってのはメンバ変数ね(非staticなメンバ関数はあっても関係ない、つまりインターフェースも含む
990デフォルトの名無しさん (ワッチョイ 66f1-Y8gp)
2018/07/14(土) 12:55:49.99ID:FOAGvAbs0 次スレ作成のルールってどうなってますか?
991デフォルトの名無しさん (スップ Sd0a-Se03)
2018/07/14(土) 13:40:31.81ID:xV7EJA5wd >>985
5chが異常なだけ
5chが異常なだけ
992デフォルトの名無しさん (ワッチョイ a580-lT5f)
2018/07/14(土) 13:55:09.44ID:1N2GRIlb0 linuxと聞いてた(>>743)のになんでMSのコンパイラの話がでてんねんと
まず実機でコレ走らせて試験をしなさい
@ 下のソースをコンパイルしてbaka_testという名前の実行オブジェクトをつくりなさい
linuxなら↓こっち
https://ideone.com/e9iA5m
windowsなら↓こっち
https://ideone.com/D4T1zh
A で、こんな試験をする
https://ideone.com/82BnFZ
ちなみにwindowsはバッファサイズを
セクタバイト数の倍数でないとちゃんと動作しない
それはwindowsの仕様だからな(メモリアドレスはmallocで返ってくる先頭のポインタオフセットで問題ないことは分かってる)
バッファサイズを何バイトにするのが読みこみで効果的か
決めたほうがいい
試験結果をちゃんと報告するようにな
あとOSは64bitでいいんだな
それによっても話がかわってくる
まず実機でコレ走らせて試験をしなさい
@ 下のソースをコンパイルしてbaka_testという名前の実行オブジェクトをつくりなさい
linuxなら↓こっち
https://ideone.com/e9iA5m
windowsなら↓こっち
https://ideone.com/D4T1zh
A で、こんな試験をする
https://ideone.com/82BnFZ
ちなみにwindowsはバッファサイズを
セクタバイト数の倍数でないとちゃんと動作しない
それはwindowsの仕様だからな(メモリアドレスはmallocで返ってくる先頭のポインタオフセットで問題ないことは分かってる)
バッファサイズを何バイトにするのが読みこみで効果的か
決めたほうがいい
試験結果をちゃんと報告するようにな
あとOSは64bitでいいんだな
それによっても話がかわってくる
993デフォルトの名無しさん (ワッチョイ a580-lT5f)
2018/07/14(土) 14:04:41.54ID:1N2GRIlb0 ちなみにwindowsでopenとかread使うのはクルクルパーだからな
msのランタイムがウンコなのは有名だからな
msウンコランタイムのopenでCreateFile呼び出してる
msウンコランタイムのfopenでopen呼び出してる
msウンコランタイムのreadでReadFile呼び出してる
msウンコランタイムのfgetsやfreadでread呼び出してる
わかった?
msのランタイムがウンコなのは有名だからな
msウンコランタイムのopenでCreateFile呼び出してる
msウンコランタイムのfopenでopen呼び出してる
msウンコランタイムのreadでReadFile呼び出してる
msウンコランタイムのfgetsやfreadでread呼び出してる
わかった?
994デフォルトの名無しさん (ワッチョイ 66f1-Y8gp)
2018/07/14(土) 15:10:33.64ID:FOAGvAbs0 >>993
ありがとうございます。
g++ -o baka_test $file_name
echo 512,`./baka_test $input 512` > baka_result.txt
echo 1024,`./baka_test $input 1024` >> baka_result.txt
〜
上記を13GBのファイルで試したら下記結果が出ました。
512,13
1024,7
2048,5
4096,3
8192,2
16384,2
32768,2
65536,2
131072,1
262144,3
524288,2
1048576,2
2097152,2
4194304,2
8388608,2
16777216,3
33554432,2
67108864,3
134217728,3
268435456,3
536870912,3
1073741824,3
ありがとうございます。
g++ -o baka_test $file_name
echo 512,`./baka_test $input 512` > baka_result.txt
echo 1024,`./baka_test $input 1024` >> baka_result.txt
〜
上記を13GBのファイルで試したら下記結果が出ました。
512,13
1024,7
2048,5
4096,3
8192,2
16384,2
32768,2
65536,2
131072,1
262144,3
524288,2
1048576,2
2097152,2
4194304,2
8388608,2
16777216,3
33554432,2
67108864,3
134217728,3
268435456,3
536870912,3
1073741824,3
995デフォルトの名無しさん (ワッチョイ 66f1-Y8gp)
2018/07/14(土) 15:11:30.95ID:FOAGvAbs0 これは一度に読み込むサイズは4KBを超えると速度に影響はなく、
>>962 のC,Dパターンの場合だと、最低1行分のバッファが必要なので、
その場合、一行のバイト数のMAX値で決めれば良い。
ということでしょうか?
>>962 のC,Dパターンの場合だと、最低1行分のバッファが必要なので、
その場合、一行のバイト数のMAX値で決めれば良い。
ということでしょうか?
996デフォルトの名無しさん (ワッチョイ a580-lT5f)
2018/07/14(土) 15:28:09.27ID:1N2GRIlb0 どんだけ速いHDDやねん。。。
すでにキャッシュされてんのか
その13とか7とか5とかいう数字は
ディスク読みこみ(ディスクの内容をバッファにコピー)にかかった時間は秒だぞ
ちゃんとコード書いてmsecにして計測したほうがよかったのかもな
暇だったら、シェルで精度の高い計測値だせるように工夫しなさい
数十秒はかかると思ってたからmsecなんか考えてもなかったわ
で、実機のOSは64ビットでいいのか
ここ結構重要だからな
すでにキャッシュされてんのか
その13とか7とか5とかいう数字は
ディスク読みこみ(ディスクの内容をバッファにコピー)にかかった時間は秒だぞ
ちゃんとコード書いてmsecにして計測したほうがよかったのかもな
暇だったら、シェルで精度の高い計測値だせるように工夫しなさい
数十秒はかかると思ってたからmsecなんか考えてもなかったわ
で、実機のOSは64ビットでいいのか
ここ結構重要だからな
997デフォルトの名無しさん (ワッチョイ a580-lT5f)
2018/07/14(土) 15:31:55.15ID:1N2GRIlb0 めんどいから128Kで2秒かからない
でいいや
でいいや
998デフォルトの名無しさん (ワッチョイ 66f1-Y8gp)
2018/07/14(土) 15:43:51.17ID:FOAGvAbs0 すみません忘れてましたlinux 64bitです。
> 128Kで2秒かからない
これのことですね。 →131072,1
昨日の夜(今日の朝5時)までやって >>962 のCパターンでようやく一通りファイルを
読み込めるようになりましたが、やはり速度が出ていません。
13GBファイルで確認
fgetsのみ解析なし →17秒
freadで各文字列解析、数値行の演算を行ったもの →1分超え
コード書いてて気になる箇所がいくつかあるので質問しようと思ったけどもう1000になりますね。
次スレで質問させてもらいます。
> 128Kで2秒かからない
これのことですね。 →131072,1
昨日の夜(今日の朝5時)までやって >>962 のCパターンでようやく一通りファイルを
読み込めるようになりましたが、やはり速度が出ていません。
13GBファイルで確認
fgetsのみ解析なし →17秒
freadで各文字列解析、数値行の演算を行ったもの →1分超え
コード書いてて気になる箇所がいくつかあるので質問しようと思ったけどもう1000になりますね。
次スレで質問させてもらいます。
999デフォルトの名無しさん (ワッチョイ a580-lT5f)
2018/07/14(土) 15:45:39.42ID:1N2GRIlb0 なんかよく分かってもらえてないようだが
この値はブロックで読みこむ固定のバッファリングサイズ
1行分とか関係ない
プログラムではきっと
バッファリングされたメモリを解析することになる
とりあえず今回は、必ず128K単位で読みこむ
128K単位のメモリを
正直もっと増やしてもいいとは思う
あととりあえず行の最大バイト数は256バイトで十分でいいや
この値はブロックで読みこむ固定のバッファリングサイズ
1行分とか関係ない
プログラムではきっと
バッファリングされたメモリを解析することになる
とりあえず今回は、必ず128K単位で読みこむ
128K単位のメモリを
正直もっと増やしてもいいとは思う
あととりあえず行の最大バイト数は256バイトで十分でいいや
1000デフォルトの名無しさん (ワッチョイ 6aaf-iHIC)
2018/07/14(土) 15:50:15.57ID:okg02gBw0 ぬるぽ
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 36日 16時間 10分 3秒
新しいスレッドを立ててください。
life time: 36日 16時間 10分 3秒
10021002
Over 1000Thread 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 【速報】中国、水産物輸入停止と通達 「処理水」理由、日本政府へ ★5 [おっさん友の会★]
- 【速報】中国、水産物輸入停止と通達 「処理水」理由、日本政府へ ★6 [おっさん友の会★]
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 [ぐれ★]
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 ★2 [ぐれ★]
- 中国側が首相答弁の撤回要求、日本側拒否★7 [夜のけいちゃん★]
- NHK会長 新語・流行語大賞ノミネート「オールドメディア」に反論「言われる筋合いはない」「新しいメディアだと思っている」 [muffin★]
- 【速報】高市首相「つい言い過ぎた」 存立危機事態の答弁について [237216734]
- 中国「次に禁止してほしいものを教えて」 [358382861]
- 【速報】中国、水産物輸入停止★2 [989870298]
- 【総裁選】記者「進次郎メモ見過ぎ」高市早苗「w」小泉進次郎「責任ある者は適切な慎重さを備えるべき」 [175344491]
- 【速報】中国、水産物輸入停止★3 [989870298]
- 山上被告の妹「母を変えた統一教会のせいだ」「払えと言ってきて腹が立った」涙ながらに証言【安倍元総理銃撃事件😲 [861717324]
