C++相談室 part154

■ このスレッドは過去ログ倉庫に格納されています
2021/01/08(金) 17:54:00.55ID:0DW9z0rL
※前スレ
C++相談室 part153
https://mevius.5ch.net/test/read.cgi/tech/1602339500/

テンプレここまで
2021/01/13(水) 21:14:51.93ID:XHABqTxh
プッシュ型って何?
103デフォルトの名無しさん
垢版 |
2021/01/14(木) 06:54:42.42ID:mrWYZ3Pm
Caper や Bison でプッシュ型を調べてみるとわかると思います。
104デフォルトの名無しさん
垢版 |
2021/01/14(木) 06:59:25.06ID:mrWYZ3Pm
あらゆるソフトウェアで使いまわされるライブラリにおいて、詳細が既に決まっているのは不自由なことです。
2021/01/14(木) 07:12:21.89ID:FFXK54Rt
templateと比べてプッシュ型の利点が分からん。
106デフォルトの名無しさん
垢版 |
2021/01/14(木) 07:23:48.43ID:mrWYZ3Pm
>>105
プッシュ型はパーサーでよく使われます。
ユーザーが柔軟性を求めるからです。

Caperはプッシュ型、Bisonはパーサー側が文字を読む方式ですが、オプションとしてプッシュ型を選べます。
パーサにおいてプッシュ型とは、(パーサではなく)パーサを呼び出す側が文字を送り込みます。

それによって何が起きるでしょうか?
従来のパーサーは状態と共に行番号を保存します。
プッシュ型の場合、行番号を保存するのは呼び出し側です。

パーサーが読む文字とは何でしょうか?
プッシュ型において、Cではint、C++ではユニコード。コードポイントです。
文字デコードを行うのは、呼び出し側です。

では従来のパーサでは?
行番号を管理するためには、文字デコードもパーサーの仕事です。
つまりパーサーは大きな塊でアリ、組み合わせる部品ではありません。
107デフォルトの名無しさん
垢版 |
2021/01/14(木) 07:27:04.63ID:mrWYZ3Pm
プッシュ型はUNIXに通じるものがありますが、UNIXでは実現されませんでした。
108デフォルトの名無しさん
垢版 |
2021/01/14(木) 07:47:44.25ID:mrWYZ3Pm
パーサーは本来、構文解析が仕事です。
しかし、現状多くのパーサーは、構文解析以外の機能を密に結合している。

本来の仕事以外は分離して、小さな部品にすることで再利用性が高まる。
という感じですかね。

これはテンプレートと同じでもろ刃の剣でもあるんですよ。
詳細を設計しないんですから。

しかし、STLの寿命の長さを見て分かる通り、詳細が設計されていないという事は利用者が自由に設計できるという事で、使い出があるんです。
109デフォルトの名無しさん
垢版 |
2021/01/14(木) 07:48:23.53ID:mrWYZ3Pm
もちろん、パーサーに限った話ではないですよ。
例です。
110デフォルトの名無しさん
垢版 |
2021/01/14(木) 09:22:59.17ID:EIDQMz1r
みんながみんなパーサーを開発する側じゃないからなー
もっと身近な例はないですか?
このようなデザインパターンがプッシュ型だとこうなる、みたいな
111デフォルトの名無しさん
垢版 |
2021/01/14(木) 09:29:21.76ID:mrWYZ3Pm
>>110
使う側にとって良いことなんですよ。

それと、プッシュ型は万能ではないんですよ。
一部のコンポーネントの部品化に対して利益があるのです。
2021/01/14(木) 10:01:10.49ID:mp+NLhBe
>>111
身近な例はないかという問いに対しその回答は意味不明では?
113デフォルトの名無しさん
垢版 |
2021/01/14(木) 10:15:16.01ID:mrWYZ3Pm
まあそうですね。
すいませんでした。
114デフォルトの名無しさん
垢版 |
2021/01/14(木) 10:22:13.84ID:FFXK54Rt
身近な例で利点があるなら広めるのに協力するのもいいが今の時点で利点が分からん。
115デフォルトの名無しさん
垢版 |
2021/01/14(木) 15:40:36.18ID:qrpkNJTC
別にC++だけの問題じゃないんだけど…質問…例えば…エクスプローラのようにファイル一覧出すじゃん…
画像や動画は…サムネイルを出すじゃん…このサムネイルは非同期で更新になるじゃん…
一度開いたら…キャッシュから読み込みたいじゃん…このキャッシュの保存ってさぁ…一意にするのに…
ファイルパス・更新日時・サイズである程度一意になるけど…完璧な一意ではないじゃん…
同じ名前・同じ更新日時・同じサイズで上書きされたら、前の画像がサムネイルに出るじゃん…
どうすんの?
116デフォルトの名無しさん
垢版 |
2021/01/14(木) 15:42:53.95ID:qrpkNJTC
キャッシュなんてそんなものだから…それでいいのかなぁ…
2021/01/14(木) 15:53:35.11ID:mp+NLhBe
その気持ち悪い「...」をやめてくれ
118デフォルトの名無しさん
垢版 |
2021/01/14(木) 15:55:13.17ID:EIDQMz1r
ファイルパスと更新日時で一意になると考えていいでしょ
コンテンツが変更されれば更新日時が進むという前提で
それさえも許せないクリティカルなシステムならファイルの全バイト列から衝突率の低いハッシュ作るとかファイル読むのと変わらんことになる
クリティカルなシステムではキャッシュ使わんな
119デフォルトの名無しさん
垢版 |
2021/01/14(木) 16:05:02.51ID:qrpkNJTC
なるほど…。
2021/01/14(木) 16:09:33.34ID:9qLPLWCT
https://martinfowler.com/bliki/TwoHardThings.html
> There are only two hard things in Computer Science: cache invalidation and naming things.

計算機科学においては二つの難しいことがあります。
キャッシュの無効化と名前の付け方です。
2021/01/14(木) 16:16:29.09ID:9qLPLWCT
ファイルシステムによるけど iノード番号だったり
それに近い管理機構で一意に特定できる場合もあるんじゃないの。
サムネイルくらいなら雑でいいやという割り切りもあると思うけど、
ある程度は不整合がないようにする努力もしてると思う。
2021/01/14(木) 23:16:54.98ID:9gUF6PTW
特徴的な文体はblogでも見た!
2021/01/14(木) 23:49:25.09ID:9gUF6PTW
スヌープとLRUでおk
この2つでダメだという香具師は、
スヌーピングのロジック設計をサボっているか、
メモリをケチって必要量に未達なだけ
2021/01/16(土) 08:13:56.08ID:dLwYQ6PK
おはようございますみなさま、質問させてください

ユーザー定義クラスを作成し、循環参照を防止するためweak_ptrをメンバに持たせています。
そして任意の処理でshared_ptrをweak_ptrに代入し使用したいと思っておりました。
しかし、メンバ関数内部でweak_ptrを使用すると、式にはポインタ型が必要です、旨のエラーが出てしまいます。
調べてみたところ、lock()でshared_ptrに再度権利委譲するとshared_ptr側から動くのですが、私が初心者な事もあり何か釈然としません(我が儘でしょうか……)
一度weak_ptrに落とし込んだものを再度shared_ptrに戻す部分が引っかかっているのだと思います(気にしすぎですかね)

そこでお聞きしたいのですが、クラス内部で動的に定めたいと思っているweak_ptrを使う際に、これ以外の方法はありますでしょうか?
それとも上記の通りlock()で一時的なshared_ptrに束縛した方がいいのでしょうか?

朝から長文失礼しました
2021/01/16(土) 08:49:06.94ID:ld2GCDwz
ロックしないと知らない間に参照先のshared_ptrで持ってるオブジェクトが破壊されてても文句言えないけどそれでもいいの?
weak_ptrってそういうものだぞ
2021/01/16(土) 09:17:41.99ID:dLwYQ6PK
>>125
ありがとうございます。
おっしゃる通りだと思います。
納得いたしマスター!
2021/01/19(火) 02:35:16.36ID:y82ZfCrD
移譲って要は継承せずにオブジェクトとして使うってことですよね?
なぜ「移譲」なんてわけわからない名前がついてるんですか?
2021/01/19(火) 04:45:45.04ID:KGVX5wki
移譲じゃなくて委譲な。
転送でもいいと思うよ
2021/01/19(火) 07:52:05.16ID:Uy0+fZqK
代理、丸投げ
2021/01/19(火) 09:18:39.64ID:xem4SJ/U
日本語の問題だけど移譲は同じレベルに権限等を移すこと、委譲は下のレベルに移すことらしい
委譲は継承より権限の制限があるという含みがあるんだと思う
あくまで人間の組織での比喩なんだろうけど
2021/01/19(火) 09:54:48.36ID:QmODXpTw
名前付けるほどのことか?と問われればたしかにそう思う
クラス内で他のクラスオブジェクトを使ってるだけw
2021/01/19(火) 11:29:25.06ID:Bl6CuSRR
移譲コンストラクタってC++11まで存在しなかったの?
2021/01/19(火) 11:40:18.61ID:Zp03eKCw
>>132
はい。 C++11 で導入された機能です。
それまで存在しませんでした。
2021/01/19(火) 16:38:03.96ID:8JRMUdmW
C++03の頃のプログラミングめちゃくちゃ大変そうだね・・・
2021/01/19(火) 20:00:27.80ID:rn87bDt4
「オブジェクト指向?じゃあ継承しなきゃ!共通実装はみんな継承でポリモにしろ!」みたいなノリのクソ設計が溢れかえった時期があって
カウンターとして無理に継承せんでもオブジェクト持って使えばええんやでっていう事に名前付けたのが委譲とかコンポジションとか
しょうもないんだけど継承教に対抗するには名前が必要だったんよ
2021/01/19(火) 21:06:03.25ID:Zp03eKCw
>>134
そのとおりだよ!
前スレで C++11 (以降) に否定的な意見も出てるが、
使える状況であえて C++03 (以前) を選択したがる感覚はわかんね。
2021/01/19(火) 22:52:29.91ID:Bl6CuSRR
テンプレート使わなければC++03でもいける(かも)
2021/01/19(火) 23:09:23.44ID:7+t4BBWY
なんか、ここはどこ私はだあれなやついるなw
なんでテンプレートが出てくるのか
2021/01/19(火) 23:29:07.70ID:LToFUUAC
C++03にはテンプレート無いしな
2021/01/19(火) 23:43:32.07ID:7+t4BBWY
何を狙ってボケてんのかわからん
解説求む
2021/01/20(水) 19:27:35.22ID:kPiTytYK
C++スゲー=俺スゲーしたいだけの学生が増えたんだろ

>>134, >>136
エアプ乙
便利にはなったが、メタプログラミングやってても委譲コンストラクタ無くてもそんなに困らんかったぞ
メンバの初期化には関数の戻り値だって使えただろ、どこで困るんだ?
2021/01/20(水) 19:33:42.85ID:kPiTytYK
あ、委譲コンストラクタが無くても、の話であって03と11がどうこうじゃないよ
2021/01/20(水) 21:35:54.62ID:UBOdXm83
constメンバの初期化をしたいとき
初期化リストで初期化すれば良いっていやー良いが
コンストラクタ毎に初期化リストを書かねばならない
メドイ…
2021/01/20(水) 21:36:27.27ID:UBOdXm83
あと参照メンバも…!
2021/01/20(水) 21:47:26.52ID:MvJ8v0/f
>>141
C++03で何が困るって、<system_error>や<filesystem>や<execution>みたいのがなかったことだよ
新機能を乱発してプログラマを喜ばせるのを慎むというハゲの主張はわかるが
あまりにも保守的すぎて現実から乖離し始めていた
2021/01/20(水) 21:48:56.40ID:MvJ8v0/f
<valarray>の立場がなくなるから<execution>をためらうとか本末転倒だろうが
2021/01/20(水) 21:57:51.96ID:kPiTytYK
>>143-144
え、そんな場面滅多に無いと思うが・・・
委譲するときは他のコンストラクタしか初期化子使えないはず・・

と思ったが非constなものは全部コンストラクタ本体で初期化、ならいけるか
2021/01/20(水) 23:00:47.64ID:UBOdXm83
>>146
同じことをするのに複数のやり方があったらプログラミング言語界のPerlになってしまう
お禿様の気持ちはワカル
2021/01/21(木) 02:42:42.14ID:/P5UVCOb
まるで Perl はプログラミング言語界の外に居るような言い方ね。
2021/01/21(木) 06:07:35.61ID:lL8gSm1b
なんだろう、スクリプト言語とかコンパイラ言語とかいうのかね
2021/01/21(木) 07:17:30.26ID:/ZdL1i9k
厄介者のperl
2021/01/21(木) 07:40:13.27ID:Z8coO7Zb
perlは遊び道具としては面白いのかもしれないけど本番で使うにはちょっと…
2021/01/21(木) 08:36:52.78ID:RnFvGHUF
Git for windowsと一緒にインストールされる遊び道具、という世界観ですね。大切にしなさい。
2021/01/21(木) 08:52:53.32ID:2LdLfW0X
へー、findやopensslは便利に使ってたけどperlまで入ってたのか。
まぁ、もう使うことはないだろうけど。
2021/01/21(木) 09:35:52.84ID:RnFvGHUF
Perlを厄介と考えるPGのほうがPerlよりも先に厄介払いされる。若いくせに向学心がないことが垣間見える。
2021/01/21(木) 10:09:36.15ID:rjSQv0Wq
向学心とかw
むしろperl使ったことあるからこその意見だろ
2021/01/21(木) 10:25:31.85ID:RnFvGHUF
Perlを難しいと思うようだとあまり伸びしろがないね。職業変えたほうがいいかもね。正直でごめんね。
2021/01/21(木) 10:51:23.68ID:/0jxrBnU
>>155はマジで言ってるのか
10年くらい眠ってたのか?
2021/01/21(木) 11:09:21.23ID:rjSQv0Wq
最近のモダン(この言い方自体が既に古いがw)な言語使ったことないんじゃね?
あとそれなりの規模の開発したことないんだろうね
perlは書捨てのツール作ったりするには便利だったけど今更新規で使うことはないわ
160デフォルトの名無しさん
垢版 |
2021/01/21(木) 15:15:36.61ID:upjC6TmF
Perlの開発者ってタッチタイピングできなかったのかな?
なんであんなに1文字の特殊変数だらけの言語作っちゃったの?キーボード入力が楽になるとか思っちゃったのかな?
結果は可読性の低いクソースコードが量産されただけだったよね
2021/01/21(木) 16:04:26.02ID:eIfq2EBT
>>160
gnu-makeやshell scriptも同じ。
emacsも、キーバインドを丸覚え出来る人しか使えない。
作者が記憶力が桁違いにいい人だったりしてな。
162デフォルトの名無しさん
垢版 |
2021/01/21(木) 16:22:10.60ID:jCImDRpq
>16 :デフォルトの名無しさん:2006/03/10(金) 22:15:19
>>>10
>> こんな変数名があちこちに散らばっているのがPerl
>
>大学の研究室のボスは、特殊変数の表をふ〜んと2分ほど眺めて完全に暗記した。
>
>そういうレベルの人たちのための言語なんだなと思って、トイレで血の涙を流した。
2021/01/21(木) 16:57:53.30ID:eIfq2EBT
表を見た直後なら、俺も暗記してるぞ。
しばらくたったら忘れる。
短期記憶と長期記憶の違いだ。
2021/01/21(木) 18:03:23.48ID:ukSw99eK
Perlはglobが使えるようになったらuse strictの下でも参照渡しとかできてC++的に組めるようになるからおk
しかしglobを使うことと理解することは別宇宙の話なのであった
2021/01/21(木) 18:10:26.51ID:ukSw99eK
正確には型グロブ、
2021/01/21(木) 18:24:32.27ID:RnFvGHUF
このスレ、初心者多すぎ。丸暗記なんて誰もしないぞ。何のためにオンラインヘルプあると思ってんだろう。
辞書持ち込み禁止に慣れた学生の気分なのかな。
2021/01/21(木) 18:26:55.41ID:RnFvGHUF
自身の理解力のなさを胡麻化すために大げさな言い回ししているように見える。マジでPGむいてないから転職したほうがいいよ。
2021/01/21(木) 18:30:55.76ID:RnFvGHUF
>>160 みたいな己の能力のなさを棚に上げておおげさな物言いをする人には調査の仕事を振ることすらできないんだが。
2021/01/21(木) 19:06:10.15ID:/ZdL1i9k
https://descartes-search.com/media/5-programming-languages-you-wont-use-2030/

Perlファンたちはその堅牢なパフォーマンスとスケーラビリティを主張するが、すでにPythonのような他の言語に代替され始めている。10年後にはその信者の数も減り、永久に消え去ることだろうw
2021/01/21(木) 19:17:51.03ID:RnFvGHUF
ちょっとしたことをやるのに適しているのがスクリプト言語なのに、そのスクリプト言語の初歩にさえつまづいてしまう人はPGに向いてないんだよ。
正直でごめんね。Perlだけの話してるわけじゃないんだわ。
2021/01/21(木) 21:03:47.74ID:ukSw99eK
>>169
Perl 6が出るまで無限に待たされそうな気がするから
バージョン5系の消滅は無限の未来なんじゃないかな…
2021/01/21(木) 21:28:48.83ID:cjnTDlz3
人って第一印象が重要でしょ。
言語もそうだと思うの。
Perlだけの話をするけど、Perlは第一印象で損してる感じ。
PG経験あれば直感的に避けようとする人も少なくないのでは?
2021/01/21(木) 21:30:02.98ID:ooF1treM
>>171
Perl 6 は 2015 年に安定板がリリースされたぞ。
ただし、旧来の Perl と互換性は全然ないので後に Raku と改称された。
要するに別言語になってしもうた。
2021/01/21(木) 21:40:40.11ID:RnFvGHUF
>>172
ドルマークを多用するPerlはシェルスクリプトに慣れた人にはむしろ入りやすいはずだけどね。
175デフォルトの名無しさん
垢版 |
2021/01/21(木) 21:46:06.32ID:6tk1Snw3
あわしろ氏はJavaはオワコンこれからはPerlと言ってるけどな。
2021/01/21(木) 22:21:06.42ID:rjSQv0Wq
なんでこの人自分以外はperl使えない前提なんだろ…
177デフォルトの名無しさん
垢版 |
2021/01/21(木) 22:23:21.95ID:RnFvGHUF
知っている人も多いと思うけど、bash/zsh向けに便利な入力補完ツール fzf が存在する。
そのGitHubにはfzfにPerlを併用するサンプルコードが散見される。
https://github.com/junegunn/fzf/wiki/Examples

今やPerlは、sedやawkより多機能なちょっとしたテキスト改変ツールとして、Perl本来の役割に回帰している。
PerlをCGIを書くための言語と思っている人にはPerlがオワコンに見えるかもしれないが、現実は違う。
2021/01/21(木) 22:35:21.87ID:RnFvGHUF
python3が入っていない環境はわりとあるけどperlが入っていない環境はまずない。
2021/01/21(木) 22:35:36.69ID:Z9MWAls1
なんでC++スレでPerl, Perlと連呼するんだろう
おおかた、その心理を察することができるので草生えるwww
180デフォルトの名無しさん
垢版 |
2021/01/21(木) 22:41:15.38ID:RnFvGHUF
本スレテーマであるC++やJavaなどのコンパイル言語のコーディングの生産性を高めるにはスクリプト言語の有効活用が欠かせない。
makeやantではかゆい所に手が届かないもどかしさは今も昔も同じなんだよ。
2021/01/21(木) 22:54:28.47ID:H50jUx0j
>>168
Perl狂信者かよ
2021/01/21(木) 22:59:11.40ID:/ZdL1i9k
うかつにもPerl厨の秘口を突いてしまった
2021/01/21(木) 23:06:26.51ID:rjSQv0Wq
>>177
> PerlをCGIを書くための言語
いつの時代の人よw
184デフォルトの名無しさん
垢版 |
2021/01/22(金) 00:49:01.09ID:di1fs6eX
たしかルビーの素となった言語がペールでは?
185デフォルトの名無しさん
垢版 |
2021/01/22(金) 01:19:07.37ID:55qwSi9o
macOSのソフトウェア更新ツールHomebrewはRuby製。マカーがいる限りRubyは不滅。
186デフォルトの名無しさん
垢版 |
2021/01/22(金) 13:19:25.84ID:pJ+Dy7HC
>>157
PerlもPHPも難しいとは思わないけど
だからこそ排除すべき
187デフォルトの名無しさん
垢版 |
2021/01/22(金) 13:20:41.30ID:pJ+Dy7HC
>>160
>1文字の特殊変数だらけの言語

Rubyのことですね判ります
2021/01/22(金) 14:12:04.30ID:aLDuncuZ
>>187
Rubyはそれはない。
Perlと間違ってないか?
2021/01/22(金) 14:18:28.68ID:WLGQ46hZ
C++のところで延々と続けるのもなんだけど、TECOってのは相当複雑怪奇だったみたいね
2021/01/22(金) 22:15:36.76ID:HHqIRAh/
C++が今後関数型プログラミングを言語としてサポートしていくことはありますか?
2021/01/22(金) 22:18:18.81ID:3W/g7okM
<functinal>で足りるんじゃね?
2021/01/22(金) 22:50:10.68ID:LtnZZu+T
こちらでどうぞ
https://mevius.5ch.net/test/read.cgi/tech/1427572389/
2021/01/22(金) 23:49:36.96ID:LcAiXyQN
>>192
C++の「マルチパラダイム」の中に関数型が今後入ることはあるか (あるいはもう入ってるか) という質問なんですが、変なことを聞いていますか?
2021/01/23(土) 00:00:03.65ID:rMuiLyZn
ぅえ?
2021/01/23(土) 01:38:03.71ID:PXGkLjAZ
もう入ってるでしょ?
2021/01/23(土) 04:37:52.61ID:Vx6mcd5N
Perlのソース汚いイメージしかないけどな
2021/01/23(土) 07:19:17.61ID:E7+6hgZm
std::functionとラムダ式で関数はほぼ第一級オブジェクトとして扱えるからC++はとっくに関数型言語ですよ
モナドだってやろうと思えば作れるよ
2021/01/23(土) 13:50:31.25ID:1/fAmr9E
じゃーHaskellにできることはC++でもできるし、同じように書けるって言うのかい
2021/01/23(土) 13:52:40.96ID:Q+Wu8A2P
>>198
なんでそうなるのかようわからんが。
2021/01/23(土) 14:06:29.89ID:pKYkJfCY
>>160
>1文字の特殊変数だらけの言語
APL記号?
2021/01/23(土) 14:54:28.68ID:Q+Wu8A2P
>>188
https://docs.ruby-lang.org/ja/latest/class/Kernel.html#V_--21
2021/01/23(土) 16:26:10.57ID:LPDMRZtK
>>200
懐かしいな
俺アンペールのいじってたよ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況