C++相談室 part154 ..
[2ch|▼Menu]
3:デフォルトの名無しさん
21/01/08 19:34:40.54 hBRzO/B9.net
STLつかうと一気に実行ファイルサイズが10倍に?!
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。

4:デフォルトの名無しさん
21/01/08 19:38:13.11 8XBZO/70.net
operator->*を好き勝手にオーバーロードするのは
C++厨二病なら誰しもが通る道だと思ってる

5:デフォルトの名無しさん
21/01/08 20:05:42.45 gKD5AY0L.net
厨二病以下だね沼二病か幼長病レベル

6:デフォルトの名無しさん
21/01/08 20:33:39.47 eZ2LT3hD.net
>>3
お前が死ね

7:デフォルトの名無しさん
21/01/08 20:55:30.03 lmjqKHzd.net
だって演算子オーバーロード楽しいし!
それSpirit作者のジョエルさんにも言えるの?

8:デフォルトの名無しさん
21/01/08 21:03:27.15 NkKDsd1u.net
% を三次元ベクトルのクロス積にするのはかつて自分も思いついたけど、勧められないって立場の人も居て
演算子オーバーロードが自然かそうでないかってのは人に拠るなと思った
自分の価値観で言えばiostreamの >> とかってあんまり自然じゃないが
他に何がいいかって言われてもないので仕方ない

9:デフォルトの名無しさん
21/01/08 21:08:29.47 gKD5AY0L.net
<filesystem>のディレクトリ区切りがoperator/なのとかオモロイやん

10:デフォルトの名無しさん
21/01/08 21:17:01.55 U7HVBqAl.net
絵文字プログラミングが来る
なので独自オペレータは出来た方がいい

11:デフォルトの名無しさん
21/01/08 21:44:49.24 gxkYqo9D.net
>>4
わしは20年ぐらい前にその道を通った
だから若者がその道を通ることについては何もいわない
ほっといて気がつかないならダメ人材だし
使える人材は自分で気がつく

12:デフォルトの名無しさん
21/01/09 00:35:22.39 8yDnsj0x.net
キーワードも再定義可能にしてホスイ

13:デフォルトの名無しさん
21/01/09 01:15:10.33 CT/R4i5r.net
#defineでイケるやろ

14:デフォルトの名無しさん
21/01/09 01:39:13.52 InkVVK6p.net
#define private public
ってテクニックのことか。

15:デフォルトの名無しさん
21/01/09 04:17:16.54 kjQQkk+g.net
>>14
それコンパイル通っちゃうの?
プリプロセスだからOKなのか・・・

16:デフォルトの名無しさん
21/01/09 09:21:23.56 c2CH7ey/.net
キーワードをdefineするのは規格上は未定義動作
でもだいたい通っちゃうな

17:デフォルトの名無しさん
21/01/09 09:27:02.27 lvRTpcj7.net
その条文どこだっけ

18:デフォルトの名無しさん
21/01/09 10:07:37.60 c2CH7ey/.net
この辺かなC++20ドラフトより
16.5.1.2 Headers [headers]
8 Identifiers that are keywords or operators in C++ shall not be defined as macros in C++ standard library headers.
(標準ライブラリはキーワードをマクロにすんな)
16.5.4.3.2 Macro names [macro.names]
2 A translation unit shall not #define or #undef names lexically identical to keywords, to the identifiers listed in Table 4, or to the attribute-tokens described in 9.12, except that the names likely and unlikely may be defined as function-like macros (15.6).
(キーワード・文脈依存キーワード・予約済み属性トークン(ただしlikelyとunlikelyを除く)をdefineやundefすんな)

19:デフォルトの名無しさん
21/01/09 11:17:12.79 lvRTpcj7.net
thx

20:デフォルトの名無しさん
21/01/09 20:30:21.03 w9vYk25X.net
>>13
何言ってんだおめー;;;

21:デフォルトの名無しさん
21/01/09 21:18:55.59 jpx8Mcv4.net
C++はプリプロセッサが発展する方向にいかなくて本当に良かった
プリプロセッサを吸収して凄いことになってる気はするが

22:デフォルトの名無しさん
21/01/09 21:24:33.16 lvRTpcj7.net
禿の方針だからね
スコープに従わない反逆者の排除は

23:デフォルトの名無しさん
21/01/09 21:37:52.40 Te5slSqE.net
(でも楽しいよね
(コンパイル直前のコードが数個のプリミティブにまで還元されちまう楽しい言語もあるしな))

24:デフォルトの名無しさん
21/01/09 22:11:02.76 w9vYk25X.net
プリプロセッサはC言語の目的(OSを様々なプラットフォームに移植可能な共通ソースコードとして書く)ための
必要欠く書くべからざるしくみとして導入され、できた時点で仕様としてはほぼ過不足なかった
という印象
そういう目的のブツなので、キーワードの再定義には全く不向き

25:デフォルトの名無しさん
21/01/10 07:00:15.18 NGSbpihh.net
プリプロセスおもしろいやん
俺プリプロセス大好き

26:デフォルトの名無しさん
21/01/10 07:04:45.26 pzwk9NYM.net
最近は#includeと#defineしか使ってない。

27:デフォルトの名無しさん
21/01/10 08:03:37.57 pzwk9NYM.net
#defineじゃなくて#pragma onceだった。

28:デフォルトの名無しさん
21/01/10 10:29:09.95 eq9L0D9i.net
どうやったらその2つを取り違えできるんだww
ほんとにつかってる??

29:デフォルトの名無しさん
21/01/10 10:29:46.47 Cbi+hphF.net
#pragma onceとか#inlude_nextとか標準に入れてほしくはある

30:デフォルトの名無しさん
21/01/10 10:45:39.55 J1w4FPK7.net
#pragma onceはもう標準のつもりで使ってるわ

31:デフォルトの名無しさん
21/01/10 11:35:58.46 MuZPu68S.net
>>25
そういう時期もあったな…(遠い目)

32:デフォルトの名無しさん
21/01/10 11:49:17.12 WbJbdET/.net
#pragma便利よね ライブラリのリンク指定とかも

33:はちみつ餃子
21/01/10 11:50:54.98 smlN1G6e.net
>>8
そう、 iostream は「仕方ない」と思うんだよな。
C++11 で variadic template が導入されるまでは
可変長引数を安全な型システムの中で扱えなかった。
仕方がないから演算子でなんとかそれっぽくしただけ。
演算子の中で比較的それっぽいのが << や >> だっただけ。
>>9
そういう観点から見ると、パスや日付の区切りに / を使うのは
演算子にしなければならない仕方なさは感じられない。
演算子にするなら / は比較的自然な選択ではあると思うけど。

34:デフォルトの名無しさん
21/01/10 11:53:18.07 5+d8OMjE.net
シフト演算なんてほとんど使わんしなあ

35:デフォルトの名無しさん
21/01/10 11:57:06.83 uVXyGOJo.net
ファイルパスってチェーンしたいものの筆頭格だから演算子にするのは妥当だと思うけど

36:デフォルトの名無しさん
21/01/10 12:20:31.40 pzwk9NYM.net
>>28
使ってるわい。

37:デフォルトの名無しさん
21/01/10 12:20:58.71 pzwk9NYM.net
とはいえレスくれてありがとうw

38:デフォルトの名無しさん
21/01/10 12:38:01.52 stlWAB5c.net
>>35
std::path だと operator/= だな。
優先順位とか戻り値の型とか理由はあるんだろうが、やはり無理してる感は拭えない。

39:デフォルトの名無しさん
21/01/10 23:28:34.84 9cXVj8qL.net
mutexって同時だとどうなるの?

40:デフォルトの名無しさん
21/01/10 23:32:27.11 9cXVj8qL.net
信用して使うしかないけど…本当に同時で来たら…どうなるのかなぁ…と思って…。

41:デフォルトの名無しさん
21/01/10 23:43:03.84 1knBg1rC.net
同時に入ろうとしたら同時に入るのではない別の世界線に分岐するから
結局同時にならない

42:デフォルトの名無しさん
21/01/11 00:43:54.84 KM6/Ii6v.net
posix平行宇宙論

43:デフォルトの名無しさん
21/01/11 00:44:15.09 AtO8PUuj.net
それだと…CPUの負荷や調子によって…同時になるって…事だよ…。

44:デフォルトの名無しさん
21/01/11 00:45:46.62 AtO8PUuj.net
mutex…危ういな…どうしよう…。運に任せて…諦めるか…。

45:デフォルトの名無しさん
21/01/11 00:54:29.81 AtO8PUuj.net
運任せは辛い…。

46:デフォルトの名無しさん
21/01/11 01:30:50.91 AtO8PUuj.net
URLリンク(stackoverflow.com)
大丈夫だと言っているが…ほんまかいな…と思います…迷信はつきもの。

47:デフォルトの名無しさん
21/01/11 01:37:51.07 KM6/Ii6v.net
テストプログラム作ってさっさと検証しろ無能

48:デフォルトの名無しさん
21/01/11 01:59:20.31 3nmpeNiQ.net
>>46
信用できないならソースやアセンブリ読めよ。ここで名無しに答えてもらっても、信用できないんだろ?

49:デフォルトの名無しさん
21/01/11 03:08:34.69 KSKcxhht.net
MutexはOSに依存するので絶対に大丈夫ということはないですが、数々のトラブルを引き起こし最も懸念されたLinuxが安定してきてるので、現在では実用上問題がないレベルにあると思います。

50:デフォルトの名無しさん
21/01/11 03:36:14.65 dLrb5ZQk.net
マルチCPUでバスリクエストが同時に出た場合の制御なんて明確に定義されてんだろうが
OS依存だハード依存だと逃げているから見えない不安に怯えることになるんだよ

51:デフォルトの名無しさん
21/01/11 06:01:13.69 vFi9Z+AQ.net
LinuxのMutexって使いにくいよね
俺はWindowsから入ったからMutexって名前付きが当たり前だと思ってたんだけどLinuxのMutexには名前がない
どうやって複数のプロセス間で同じMutexを使うんだよ・・・って悩んだ
共有メモリなんかでMutexのアドレスを受け渡しするらしいんだけどさ
面倒くさくなってLinux版の同期制御はファイルロックにしちゃった。。

52:デフォルトの名無しさん
21/01/11 06:47:08.93 KSKcxhht.net
LinuxのファイルロックはNFSで(※私たちにはバグのように見える)仕様通りの動作をするので気を付けたほうが良いですよ。
ユーザーが指定したファイルやディレクトリを不用意に使用すると再現性の無いバグに悩まされます。

53:デフォルトの名無しさん
21/01/11 06:56:23.61 vFi9Z+AQ.net
>>52
アドバイスありがとう
Linuxで共有メモリの使い方もよく分からなくて
共有メモリも書いてる途中で読み取りされたら困るから
「書いたよー」「読み終わったよー」ってプロセス間同期したいんだけどMutex受け渡しの前に同期処理って・・・
それで共有メモリの読み書きをファイルロックで同期してMutexを渡すかなーって考えてるうちに
もうファイルロックだけでいいんじゃないかってなってしまった
一般的にはどうやってやるのがよかったんだろ?

54:デフォルトの名無しさん
21/01/11 07:35:12.79 KSKcxhht.net
>>53
結局、「NFSではバグります」と注意したうえでファイルロックを使うことが一般的に行われてるみたいですよ。
逆に言うと、NFSだけ気を付ければ、問題が起きないみたいです。

55:デフォルトの名無しさん
21/01/11 08:06:23.60 RSMcM3e3.net
ちょっとググっただけだけどそんなに難しいかなぁ?
URLリンク(www.geekpage.jp)

56:デフォルトの名無しさん
21/01/11 08:06:43.86 vFi9Z+AQ.net
>>54
ありがとう ちょと安心した

57:デフォルトの名無しさん
21/01/11 08:16:58.50 vFi9Z+AQ.net
>>55
コード見てみましたけどMutexの作成と共有メモリの書き込みが終わってからforkしてますね
forkした親と子ならそれでもいいんでしょうけど
実際は親子ではないプロセス間でMutex使いたくなったりするじゃないですか
Mutexが作成される前や共有メモリへの書き込み完了前にスレーブがMutexを要求しに来ると困ります

58:デフォルトの名無しさん
21/01/11 08:38:54.12 WYfXTDe9.net
>>51
名前付きも普通にある
sem_open
名前はセマフォだが当然mutexとして使える
目的がメッセージのやり取りならmkfifoも使える

59:デフォルトの名無しさん
21/01/11 08:48:31.88 3OtB0f6U.net
mutexじゃなくて名前付きセマフォなら普通にプロセス間で使えなかったっけ?

60:デフォルトの名無しさん
21/01/11 09:14:02.58 RSMcM3e3.net
>>57
応用力ないの?
>>58-59みたいにセマフォ使うこともできるし、名前付き共有メモリー + Mutexでもいいだろ

61:デフォルトの名無しさん
21/01/11 09:22:15.64 KSKcxhht.net
>>60
Linuxではファイルロックで良いよ。

62:デフォルトの名無しさん
21/01/11 09:28:25.14 vFi9Z+AQ.net
セマフォのほうには名前付きあったんですね見落としてました
ありがとう!

63:デフォルトの名無しさん
21/01/11 09:39:24.93 vFi9Z+AQ.net
あと別のところでソケットを排他リソースで使うというアイデアを教えてもらったことあります
同じポート番号をバインドできるのは1つだけだからこれを排他に使うという案

64:デフォルトの名無しさん
21/01/11 09:52:46.06 KSKcxhht.net
3年ぶりの建設的なスレだな。

65:デフォルトの名無しさん
21/01/11 10:09:50.89 RSMcM3e3.net
>>61
ファイルロックはロックしたままプロセス死ぬとリブートしても解消できないのがね

66:デフォルトの名無しさん
21/01/11 10:39:47.37 sBoV/AFh.net
>>51
pthread周りはなんであんな仕様なのか謎
CPUのアーキテクチャーを深く知れば合理性を得心できるのかどうか、

67:デフォルトの名無しさん
21/01/11 11:25:14.07 vFi9Z+AQ.net
>>65
それはファイルロック(flock関数)ではなく、単純にファイルの存在チェックをしているだけじゃないですか?
flockを使ったファイルロックならプロセス異常終了時にOSによってロックが解放されます

68:デフォルトの名無しさん
21/01/11 12:46:20.78 vpEQZDgx.net
ミックスジュースよりセックスジュースが好きですね

69:デフォルトの名無しさん
21/01/11 14:25:33.73 EL34sMb+.net
唐突に何いいだすねん君は!
(‘д‘⊂彡☆))Д´)パーン <ミックスジュースよりセックスジュースが好きですね

70:デフォルトの名無しさん
21/01/11 14:41:16.25 dLrb5ZQk.net
ラブジュースだろ

71:デフォルトの名無しさん
21/01/11 16:14:45.22 AtO8PUuj.net
39です…。
mutexの信頼性をずーと疑ってたら…POSIXスレッド…pthread_mutex_lockに行き着きました…
ブロックもするそうです…ソース見てたら…カーネルの様です…pthread_mutex_lock_fullであれば…atomic_compare_and_exchange_val_acq…などもあります…テストアンドセットです…
アトミック操作です…しかし…普通にmutexを実装してpthread_mutex_lock_fullが呼ばれるかは…
分かりません…どんなmutexライブラリも最終的に…このカーネルを呼んでるだけだと思います…
呼ばれてるのは…fullではなく…弱い方のpthread_mutex_lockだと仮定しても…カーネルを疑うなんて…
本当に…ナンセンスな話なので…一応…信用して使うことにします…。

72:デフォルトの名無しさん
21/01/11 16:55:02.21 AtO8PUuj.net
39です…。
結局…fullでなくても…atomic_exchange_acqが呼ばれているようです…アトミック操作です…。
なので…みなさん…安心して使いましょう…。

73:デフォルトの名無しさん
21/01/11 16:56:14.48 KSKcxhht.net
>>72
そこでやめずに、atomic_exchange_acqの中まで追いかけてみませんか?

74:デフォルトの名無しさん
21/01/11 16:56:26.10 AtO8PUuj.net
URLリンク(blog.sakasin.net)
ソースです…。

75:デフォルトの名無しさん
21/01/11 21:32:01.48 KM6/Ii6v.net
Debian woody の頃まで posix thread は使い物にならなかったが Debian etch からようやく使い物になった印象だな
当時から利用している身にしては

76:デフォルトの名無しさん
21/01/12 05:50:41.37 pJAexhLb.net
わりと最近ですね。

77:デフォルトの名無しさん
21/01/12 07:34:00.56 V95G+u6D.net
woodyって20年くらい前だっけ
最初はJavaVMもグリーンスレッドというVM内の仮想スレッド実装だったんだよね
あれもOSネイティブのスレッドが信用されてなかったからなのかな
もちろん、現在のJavaVMはOSのネイティブスレッド使う実装になってるけどね

78:デフォルトの名無しさん
21/01/12 07:44:47.10 pJAexhLb.net
Javaといえばブラック何とかプロジェクトがSUNに文句言ってなかったっけ?

79:デフォルトの名無しさん
21/01/12 07:45:53.88 pJAexhLb.net
Etchが2007年と書いてあるな。

80:デフォルトの名無しさん
21/01/12 09:08:57.41 e5lAHXYT.net
設計思想的なことについて質問があります。
クラスの使い方がよく分かりません。
僕が今何かを作ろうと思ったら、関数の集まりが引数や返り値のやり取りを通じて協調するような設計をしてしまいます。
この引数や返り値が多く複雑になったりしてきたらクラスを用いた設計を考える、という理解は正しいでしょうか?

81:デフォルトの名無しさん
21/01/12 09:22:47.73 XkW3hQXX.net
>>80
正しいかどうかは知らないし気にしないでいいと思うけど、
そういう場合はただのデータの集まりとして構造体(これもクラスの一種だけど)を使うだけでも簡単になるだろうね。

82:デフォルトの名無しさん
21/01/12 13:35:30.39 lxco4c0J.net
個人的には、一度無理にでも概念(ウインドウとか表示とか作ってるソフトの主要な概念)をクラス名にして作ってみるといいとおも
やってるうちに慣れてくる

83:デフォルトの名無しさん
21/01/12 14:01:10.35 V95G+u6D.net
そうだね
なにかを題材にしてオブジェクト指向やってみるのがいいと思う
でもウインドウはどうかなー そもそもUIツールキットをある程度知らないといけないし
GUIってオブジェクト指向らしからぬ部分も多いので
もっとビジネスロジック中心の題材がいいと思うよ たとえば掲示板システムとか
板には複数のスレがあって、各スレの中には複数のレスが並んでて、スレの書き込むメソッドでレスが1つ増えてーみたいな

84:デフォルトの名無しさん
21/01/12 15:56:33.61 LUlB/OIG.net
>>4 >>11
. を再定義したいと思った

85:デフォルトの名無しさん
21/01/12 17:32:55.18 +0XoTmdG.net
>>82
初歩的な質問なのですが、クラスってモノじゃなくて概念でも良いのでしょうか
つまり、歩く人のプログラムを作るとき、人というクラスが歩くというメソッドを持っていても良いし、歩くというクラスが一歩進むというメソッドを持っていても良いのでしょうか
言語の仕様上はもちろんどちらでも良いと思いますが、どちらの設計の方が筋が良いということはないと思って良いですか?

86:デフォルトの名無しさん
21/01/12 17:34:51.31 fQCYjk84.net
ナントカ系の関数群みたいに相互に関連し合っているものを
暗黙じゃなく明確化するのがクラスだよ

87:デフォルトの名無しさん
21/01/12 17:38:10.34 V95G+u6D.net
>>85
「歩く」をクラスにするよりは「歩ける」をインターフェースにしたらどうかな
人間クラスに「歩ける」インターフェースを実装


88:キることで「歩く」メソッドがあることを保証できる 対象ドメインをどのようにモデル化するかは状況や要件次第



89:デフォルトの名無しさん
21/01/12 19:05:06.19 mPDSlMxM.net
メタファとして生き物がよく用いられるけどなんだかなあっていつも思う

90:デフォルトの名無しさん
21/01/12 19:50:41.34 YNFRivpW.net
>>87
「歩け」インターフェースを定義したらインスタンスが歩ける想定であることは自明なのでは…
ちなメソッドは一般にオブジェクトの状態変化を引き起こすブツなので
命令型プログラミングの範疇であり命令形で命名すうるが正しい
※ 個人の感想です

91:デフォルトの名無しさん
21/01/12 19:52:42.41 YNFRivpW.net
しかしインスタンスの生成というプロセスは関数型プログラミングから拝借しており、
命令型と関数型のいいとこ取りしようとして失敗した
classベースのオブジェクト志向は

92:デフォルトの名無しさん
21/01/12 19:58:16.79 GTfU1r+6.net
何ベースのが成功なの?

93:デフォルトの名無しさん
21/01/13 09:25:15.89 X1FbeZvQ.net
場合によっては歩くクラスもありだと思うよ。
ゲームで次の行動を一つずつ記憶させたい場合とか。
commandパターン、mementoパターンでググって

94:デフォルトの名無しさん
21/01/13 09:45:27.73 D0cZCa+j.net
歩くということは、位置が変化する。
現在位置は人オブジェクトのプロパティなのか?
それでええのか?

95:デフォルトの名無しさん
21/01/13 11:14:57.57 XODVGtfI.net
>>93
良くね?

>>87
インターフェースって継承される前提のものなんですよね?
どのクラスが「歩ける」を継承するんですか?

96:デフォルトの名無しさん
21/01/13 12:34:30.18 QVnLWQ3q.net
>>85
数値化できるものなら何でもオーケーだ
歩行を数値化するにはN個の関節を持つM本の脚をパラメータとし時間経過ごとの接地点と関節の位置をジェネレータみたいに連続的に返すような設計が考えられる

97:デフォルトの名無しさん
21/01/13 13:12:01.01 D0cZCa+j.net
>>94
じゃあ将棋の駒オブジェクトはプロパティとして位置を持っているのか?

98:デフォルトの名無しさん
21/01/13 14:09:32.74 D0cZCa+j.net
俺の考えるOOシステムでは、駒オブジェクトは盤面オブジェクトやルールブックオブジェクトへの参照を持っいる。
駒オブジェクトへ前へ3移動とメッセージを送ると、駒オブジェクトはルールブックオブジェクトと盤面オブジェクトを用いて、移動可能であれば盤面オブジェクトへ自身を移動するようメッセージングする。

99:デフォルトの名無しさん
21/01/13 15:31:14.00 Dg6tKq+M.net
intを継承してmyintクラスを作ることは可能ですか?

100:デフォルトの名無しさん
21/01/13 15:38:23.35 CyYDkVRJ.net
システム次第でしょ。
もしも将棋の駒が自律歩行多脚戦車だったら、GPSシステムがすべての位置情報を管理してるなんておかしいし。

101:デフォルトの名無しさん
21/01/13 15:38:43.61 D0cZCa+j.net
enum class なら可能。

102:デフォルトの名無しさん
21/01/13 20:01:32.91 D0cZCa+j.net
C++はテンプレートがあるので設計の詳細を先送りできる。
その特徴を生かせるように、プッシュ型を流行らせませんか?
プッシュ型は、前提が少ないので、利用者が自由に組み合わせることが出来ます。
これは、インターフェースによって事前に詳細を設計してしまう方式と真逆かもしれないが、組み合わせによって機能を作ることが出来まっする。

103:デフォルトの名無しさん
21/01/13 21:14:51.93 XHABqTxh.net
プッシュ型って何?

104:デフォルトの名無しさん
21/01/14 06:54:42.42 mrWYZ3Pm.net
Caper や Bison でプッシュ型を調べてみるとわかると思います。

105:デフォルトの名無しさん
21/01/14 06:59:25.06 mrWYZ3Pm.net
あらゆるソフトウェアで使いまわされるライブラリにおいて、詳細が既に決まっているのは不自由なことです。

106:デフォルトの名無しさん
21/01/14 07:12:21.89 FFXK54Rt.net
templateと比べてプッシュ型の利点が分からん。

107:デフォルトの名無しさん
21/01/14 07:23:48.43 mrWYZ3Pm.net
>>105
プッシュ型はパーサーでよく使われます。
ユーザーが柔軟性を求めるからです。
Caperはプッシュ型、Bisonはパーサー側が文字を読む方式ですが、オプションとしてプッシュ型を選べます。
パーサにおいてプッシュ型とは、(パーサではなく)パーサを呼び出す側が文字を送り込みます。
それによって何が起きるでしょうか?
従来のパーサーは状態と共に行番号を保存します。
プッシュ型の場合、行番号を保存するのは呼び出し側です。
パーサーが読む文字とは何でしょうか?
プッシュ型において、Cではint、C++ではユニコード。コードポイントです。
文字デコードを行うのは、呼び出し側です。
では従来のパーサでは?
行番号を管理するためには、文字デコードもパーサーの仕事です。
つまりパーサーは大きな塊でアリ、組み合わせる部品ではありません。

108:デフォルトの名無しさん
21/01/14 07:27:04.63 mrWYZ3Pm.net
プッシュ型はUNIXに通じるものがありますが、UNIXでは実現されませんでした。

109:デフォルトの名無しさん
21/01/14 07:47:44.25 mrWYZ3Pm.net
パーサーは本来、構文解析が仕事です。
しかし、現状多くのパーサーは、構文解析以外の機能を密に結合している。
本来の仕事以外は分離して、小さな部品にすることで再利用性が高まる。
という感じですかね。
これはテンプレートと同じでもろ刃の剣でもあるんですよ。
詳細を設計しないんですから。
しかし、STLの寿命の長さを見て分かる通り、詳細が設計されていないという事は利用者が自由に設計できるという事で、使い出があるんです。

110:デフォルトの名無しさん
21/01/14 07:48:23.53 mrWYZ3Pm.net
もちろん、パーサーに限った話ではないですよ。
例です。

111:デフォルトの名無しさん
21/01/14 09:22:59.17 EIDQMz1r.net
みんながみんなパーサーを開発する側じゃないからなー
もっと身近な例はないですか?
このようなデザインパターンがプッシュ型だとこうなる、みたいな

112:デフォルトの名無しさん
21/01/14 09:29:21.76 mrWYZ3Pm.net
>>110
使う側にとって良いことなんですよ。
それと、プッシュ型は万能ではないんですよ。
一部のコンポーネントの部品化に対して利益があるのです。

113:デフォルトの名無しさん
21/01/14 10:01:10.49 mp+NLhBe.net
>>111
身近な例はないかという問いに対しその回答は意味不明では?

114:デフォルトの名無しさん
21/01/14 10:15:16.01 mrWYZ3Pm.net
まあそうですね。
すいませんでした。

115:デフォルトの名無しさん
21/01/14 10:22:13.84 FFXK54Rt.net
身近な例で利点があるなら広めるのに協力するのもいいが今の時点で利点が分からん。

116:デフォルトの名無しさん
21/01/14 15:40:36.18 qrpkNJTC.net
別にC++だけの問題じゃないんだけど…質問…例えば…エクスプローラのようにファイル一覧出すじゃん…
画像や動画は…サムネイルを出すじゃん…このサムネイルは非同期で更新になるじゃん…
一度開いたら…キャッシュから読み込みたいじゃん…このキャッシュの保存ってさぁ…一意にするのに…
ファイルパス・更新日時・サイズである程度一意になるけど…完璧な一意ではないじゃん…
同じ名前・同じ更新日時・同じサイズで上書きされたら、前の画像がサムネイルに出るじゃん…
どうすんの?

117:デフォルトの名無しさん
21/01/14 15:42:53.95 qrpkNJTC.net
キャッシュなんてそんなものだから…それでいいのかなぁ…

118:デフォルトの名無しさん
21/01/14 15:53:35.11 mp+NLhBe.net
その気持ち悪い「...」をやめてくれ

119:デフォルトの名無しさん
21/01/14 15:55:13.17 EIDQMz1r.net
ファイルパスと更新日時で一意になると考えていいでしょ
コンテンツが変更されれば更新日時が進むという前提で
それさえも許せないクリティカルなシステムならファイルの全バイト列から衝突率の低いハッシュ作るとかファイル読むのと変わらんことになる
クリティカルなシステムではキャッシュ使わんな

120:デフォルトの名無しさん
21/01/14 16:05:02.51 qrpkNJTC.net
なるほど…。

121:はちみつ餃子
21/01/14 16:09:33.34 9qLPLWCT.net
URLリンク(martinfowler.com)
> There are only two hard things in Computer Science: cache invalidation and naming things.
計算機科学においては二つの難しいことがあります。
キャッシュの無効化と名前の付け方です。

122:はちみつ餃子
21/01/14 16:16:29.09 9qLPLWCT.net
ファイルシステムによるけど iノード番号だったり
それに近い管理機構で一意に特定できる場合もあるんじゃないの。
サムネイルくらいなら雑でいいやという割り切りもあると思うけど、
ある程度は不整合がないようにする努力もしてると思う。

123:デフォルトの名無しさん
21/01/14 23:16:54.98 9gUF6PTW.net
特徴的な文体はblogでも見た!

124:デフォルトの名無しさん
21/01/14 23:49:25.09 9gUF6PTW.net
スヌープとLRUでおk
この2つでダメだという香具師は、
スヌーピングのロジック設計をサボっているか、
メモリをケチって必要量に未達なだけ

125:デフォルトの名無しさん
21/01/16 08:13:56.08 dLwYQ6PK.net
おはようございますみなさま、質問させてください
ユーザー定義クラスを作成し、循環参照を防止するためweak_ptrをメンバに持たせています。
そして任意の処理でshared_ptrをweak_ptrに代入し使用したいと思っておりました。
しかし、メンバ関数内部でweak_ptrを使用すると、式にはポインタ型が必要です、旨のエラーが出てしまいます。
調べてみたところ、lock()でshared_ptrに再度権利委譲するとshared_ptr側から動くのですが、私が初心者な事もあり何か釈然としません(我が儘でしょうか……)
一度weak_ptrに落とし込んだものを再度shared_ptrに戻す部分が引っかかっているのだと思います(気にしすぎですかね)
そこでお聞きしたいのですが、クラス内部で動的に定めたいと思っているweak_ptrを使う際に、これ以外の方法はありますでしょうか?
それとも上記の通りlock()で一時的なshared_ptrに束縛した方がいいのでしょうか?
朝から長文失礼しました

126:デフォルトの名無しさん
21/01/16 08:49:06.94 ld2GCDwz.net
ロックしないと知らない間に参照先のshared_ptrで持ってるオブジェクトが破壊されてても文句言えないけどそれでもいいの?
weak_ptrってそういうものだぞ

127:デフォルトの名無しさん
21/01/16 09:17:41.99 dLwYQ6PK.net
>>125
ありがとうございます。
おっしゃる通りだと思います。
納得いたしマスター!

128:デフォルトの名無しさん
21/01/19 02:35:16.36 y82ZfCrD.net
移譲って要は継承せずにオブジェクトとして使うってことですよね?
なぜ「移譲」なんてわけわからない名前がついてるんですか?

129:デフォルトの名無しさん
21/01/19 04:45:45.04 KGVX5wki.net
移譲じゃなくて委譲な。
転送でもいいと思うよ

130:デフォルトの名無しさん
21/01/19 07:52:05.16 Uy0+fZqK.net
代理、丸投げ

131:デフォルトの名無しさん
21/01/19 09:18:39.64 xem4SJ/U.net
日本語の問題だけど移譲は同じレベルに権限等を移すこと、委譲は下のレベルに移すことらしい
委譲は継承より権限の制限があるという含みがあるんだと思う
あくまで人間の組織での比喩なんだろうけど

132:デフォルトの名無しさん
21/01/19 09:54:48.36 QmODXpTw.net
名前付けるほどのことか?と問われればたしかにそう思う
クラス内で他のクラスオブジェクトを使ってるだけw

133:デフォルトの名無しさん
21/01/19 11:29:25.06 Bl6CuSRR.net
移譲コンストラクタってC++11まで存在しなかったの?

134:はちみつ餃子
21/01/19 11:40:18.61 Zp03eKCw.net
>>132
はい。 C++11 で導入された機能です。
それまで存在しませんでした。

135:デフォルトの名無しさん
21/01/19 16:38:03.96 8JRMUdmW.net
C++03の頃のプログラミングめちゃくちゃ大変そうだね・・・

136:デフォルトの名無しさん
21/01/19 20:00:27.80 rn87bDt4.net
「オブジェクト指向?じゃあ継承しなきゃ!共通実装はみんな継承でポリモにしろ!」みたいなノリのクソ設計が溢れかえった時期があって
カウンターとして無理に継承せんでもオブジェクト持って使えばええんやでっていう事に名前付けたのが委譲とかコンポジションとか
しょうもないんだけど継承教に対抗するには名前が必要だったんよ

137:はちみつ餃子
21/01/19 21:06:03.25 Zp03eKCw.net
>>134
そのとおりだよ!
前スレで C++11 (以降) に否定的な意見も出てるが、
使える状況であえて C++03 (以前) を選択したがる感覚はわかんね。

138:デフォルトの名無しさん
21/01/19 22:52:29.91 Bl6CuSRR.net
テンプレート使わなければC++03でもいける(かも)

139:デフォルトの名無しさん
21/01/19 23:09:23.44 7+t4BBWY.net
なんか、ここはどこ私はだあれなやついるなw
なんでテンプレートが出てくるのか

140:デフォルトの名無しさん
21/01/19 23:29:07.70 LToFUUAC.net
C++03にはテンプレート無いしな

141:デフォルトの名無しさん
21/01/19 23:43:32.07 7+t4BBWY.net
何を狙ってボケてんのかわからん
解説求む

142:デフォルトの名無しさん
21/01/20 19:27:35.22 kPiTytYK.net
C++スゲー=俺スゲーしたいだけの学生が増えたんだろ
>>134, >>136
エアプ乙
便利にはなったが、メタプログラミングやってても委譲コンストラクタ無くてもそんなに困らんかったぞ
メンバの初期化には関数の戻り値だって使えただろ、どこで困るんだ?

143:デフォルトの名無しさん
21/01/20 19:33:42.85 kPiTytYK.net
あ、委譲コンストラクタが無くても、の話であって03と11がどうこうじゃないよ

144:デフォルトの名無しさん
21/01/20 21:35:54.62 UBOdXm83.net
constメンバの初期化をしたいとき
初期化リストで初期化すれば良いっていやー良いが
コンストラクタ毎に初期化リストを書かねばならない
メドイ…

145:デフォルトの名無しさん
21/01/20 21:36:27.27 UBOdXm83.net
あと参照メンバも…!

146:デフォルトの名無しさん
21/01/20 21:47:26.52 MvJ8v0/f.net
>>141
C++03で何が困るって、<system_error>や<filesystem>や<execution>みたいのがなかったことだよ
新機能を乱発してプログラマを喜ばせるのを慎むというハゲの主張はわかるが
あまりにも保守的すぎて現実から乖離し始めていた

147:デフォルトの名無しさん
21/01/20 21:48:56.40 MvJ8v0/f.net
<valarray>の立場がなくなるから<execution>をためらうとか本末転倒だろうが

148:デフォルトの名無しさん
21/01/20 21:57:51.96 kPiTytYK.net
>>143-144
え、そんな場面滅多に無いと思うが・・・
委譲するときは他のコンストラクタしか初期化子使えないはず・・
と思ったが非constなものは全部コンストラクタ本体で初期化、ならいけるか

149:デフォルトの名無しさん
21/01/20 23:00:47.64 UBOdXm83.net
>>146
同じことをするのに複数のやり方があったらプログラミング言語界のPerlになってしまう
お禿様の気持ちはワカル

150:デフォルトの名無しさん
21/01/21 02:42:42.14 /P5UVCOb.net
まるで Perl はプログラミング言語界の外に居るような言い方ね。

151:デフォルトの名無しさん
21/01/21 06:07:35.61 lL8gSm1b.net
なんだろう、スクリプト言語とかコンパイラ言語とかいうのかね

152:デフォルトの名無しさん
21/01/21 07:17:30.26 /ZdL1i9k.net
厄介者のperl

153:デフォルトの名無しさん
21/01/21 07:40:13.27 Z8coO7Zb.net
perlは遊び道具としては面白いのかもしれないけど本番で使うにはちょっと…

154:デフォルトの名無しさん
21/01/21 08:36:52.78 RnFvGHUF.net
Git for windowsと一緒にインストールされる遊び道具、という世界観ですね。大切にしなさい。

155:デフォルトの名無しさん
21/01/21 08:52:53.32 2LdLfW0X.net
へー、findやopenss


156:lは便利に使ってたけどperlまで入ってたのか。 まぁ、もう使うことはないだろうけど。



157:デフォルトの名無しさん
21/01/21 09:35:52.84 RnFvGHUF.net
Perlを厄介と考えるPGのほうがPerlよりも先に厄介払いされる。若いくせに向学心がないことが垣間見える。

158:デフォルトの名無しさん
21/01/21 10:09:36.15 rjSQv0Wq.net
向学心とかw
むしろperl使ったことあるからこその意見だろ

159:デフォルトの名無しさん
21/01/21 10:25:31.85 RnFvGHUF.net
Perlを難しいと思うようだとあまり伸びしろがないね。職業変えたほうがいいかもね。正直でごめんね。

160:デフォルトの名無しさん
21/01/21 10:51:23.68 /0jxrBnU.net
>>155はマジで言ってるのか
10年くらい眠ってたのか?

161:デフォルトの名無しさん
21/01/21 11:09:21.23 rjSQv0Wq.net
最近のモダン(この言い方自体が既に古いがw)な言語使ったことないんじゃね?
あとそれなりの規模の開発したことないんだろうね
perlは書捨てのツール作ったりするには便利だったけど今更新規で使うことはないわ

162:デフォルトの名無しさん
21/01/21 15:15:36.61 upjC6TmF.net
Perlの開発者ってタッチタイピングできなかったのかな?
なんであんなに1文字の特殊変数だらけの言語作っちゃったの?キーボード入力が楽になるとか思っちゃったのかな?
結果は可読性の低いクソースコードが量産されただけだったよね

163:デフォルトの名無しさん
21/01/21 16:04:26.02 eIfq2EBT.net
>>160
gnu-makeやshell scriptも同じ。
emacsも、キーバインドを丸覚え出来る人しか使えない。
作者が記憶力が桁違いにいい人だったりしてな。

164:デフォルトの名無しさん
21/01/21 16:22:10.60 jCImDRpq.net
>16 :デフォルトの名無しさん:2006/03/10(金) 22:15:19
>>>10
>> こんな変数名があちこちに散らばっているのがPerl
>
>大学の研究室のボスは、特殊変数の表をふ〜んと2分ほど眺めて完全に暗記した。
>
>そういうレベルの人たちのための言語なんだなと思って、トイレで血の涙を流した。

165:デフォルトの名無しさん
21/01/21 16:57:53.30 eIfq2EBT.net
表を見た直後なら、俺も暗記してるぞ。
しばらくたったら忘れる。
短期記憶と長期記憶の違いだ。

166:デフォルトの名無しさん
21/01/21 18:03:23.48 ukSw99eK.net
Perlはglobが使えるようになったらuse strictの下でも参照渡しとかできてC++的に組めるようになるからおk
しかしglobを使うことと理解することは別宇宙の話なのであった

167:デフォルトの名無しさん
21/01/21 18:10:26.51 ukSw99eK.net
正確には型グロブ、

168:デフォルトの名無しさん
21/01/21 18:24:32.27 RnFvGHUF.net
このスレ、初心者多すぎ。丸暗記なんて誰もしないぞ。何のためにオンラインヘルプあると思ってんだろう。
辞書持ち込み禁止に慣れた学生の気分なのかな。

169:デフォルトの名無しさん
21/01/21 18:26:55.41 RnFvGHUF.net
自身の理解力のなさを胡麻化すために大げさな言い回ししているように見える。マジでPGむいてないから転職したほうがいいよ。

170:デフォルトの名無しさん
21/01/21 18:30:55.76 RnFvGHUF.net
>>160 みたいな己の能力のなさを棚に上げておおげさな物言いをする人には調査の仕事を振ることすらできないんだが。

171:デフォルトの名無しさん
21/01/21 19:06:10.15 /ZdL1i9k.net
URLリンク(descartes-search.com)
Perlファンたちはその堅牢なパフォーマンスとスケーラビリティを主張するが、すでにPythonのような他の言語に代替され始めている。10年後にはその信者の数も減り、永久に消え去ることだろうw

172:デフォルトの名無しさん
21/01/21 19:17:51.03 RnFvGHUF.net
ちょっと


173:したことをやるのに適しているのがスクリプト言語なのに、そのスクリプト言語の初歩にさえつまづいてしまう人はPGに向いてないんだよ。 正直でごめんね。Perlだけの話してるわけじゃないんだわ。



174:デフォルトの名無しさん
21/01/21 21:03:47.74 ukSw99eK.net
>>169
Perl 6が出るまで無限に待たされそうな気がするから
バージョン5系の消滅は無限の未来なんじゃないかな…

175:デフォルトの名無しさん
21/01/21 21:28:48.83 cjnTDlz3.net
人って第一印象が重要でしょ。
言語もそうだと思うの。
Perlだけの話をするけど、Perlは第一印象で損してる感じ。
PG経験あれば直感的に避けようとする人も少なくないのでは?

176:はちみつ餃子
21/01/21 21:30:02.98 ooF1treM.net
>>171
Perl 6 は 2015 年に安定板がリリースされたぞ。
ただし、旧来の Perl と互換性は全然ないので後に Raku と改称された。
要するに別言語になってしもうた。

177:デフォルトの名無しさん
21/01/21 21:40:40.11 RnFvGHUF.net
>>172
ドルマークを多用するPerlはシェルスクリプトに慣れた人にはむしろ入りやすいはずだけどね。

178:デフォルトの名無しさん
21/01/21 21:46:06.32 6tk1Snw3.net
あわしろ氏はJavaはオワコンこれからはPerlと言ってるけどな。

179:デフォルトの名無しさん
21/01/21 22:21:06.42 rjSQv0Wq.net
なんでこの人自分以外はperl使えない前提なんだろ…

180:デフォルトの名無しさん
21/01/21 22:23:21.95 RnFvGHUF.net
知っている人も多いと思うけど、bash/zsh向けに便利な入力補完ツール fzf が存在する。
そのGitHubにはfzfにPerlを併用するサンプルコードが散見される。
URLリンク(github.com)
今やPerlは、sedやawkより多機能なちょっとしたテキスト改変ツールとして、Perl本来の役割に回帰している。
PerlをCGIを書くための言語と思っている人にはPerlがオワコンに見えるかもしれないが、現実は違う。

181:デフォルトの名無しさん
21/01/21 22:35:21.87 RnFvGHUF.net
python3が入っていない環境はわりとあるけどperlが入っていない環境はまずない。

182:デフォルトの名無しさん
21/01/21 22:35:36.69 Z9MWAls1.net
なんでC++スレでPerl, Perlと連呼するんだろう
おおかた、その心理を察することができるので草生えるwww

183:デフォルトの名無しさん
21/01/21 22:41:15.38 RnFvGHUF.net
本スレテーマであるC++やJavaなどのコンパイル言語のコーディングの生産性を高めるにはスクリプト言語の有効活用が欠かせない。
makeやantではかゆい所に手が届かないもどかしさは今も昔も同じなんだよ。

184:デフォルトの名無しさん
21/01/21 22:54:28.47 H50jUx0j.net
>>168
Perl狂信者かよ

185:デフォルトの名無しさん
21/01/21 22:59:11.40 /ZdL1i9k.net
うかつにもPerl厨の秘口を突いてしまった

186:デフォルトの名無しさん
21/01/21 23:06:26.51 rjSQv0Wq.net
>>177
> PerlをCGIを書くための言語
いつの時代の人よw

187:デフォルトの名無しさん
21/01/22 00:49:01.09 di1fs6eX.net
たしかルビーの素となった言語がペールでは?

188:デフォルトの名無しさん
21/01/22 01:19:07.37 55qwSi9o.net
macOSのソフトウェア更新ツールHomebrewはRuby製。マカーがいる限りRubyは不滅。

189:デフォルトの名無しさん
21/01/22 13:19:25.84 pJ+Dy7HC.net
>>157
PerlもPHPも難しいとは思わないけど
だからこそ排除すべき

190:デフォルトの名無しさん
21/01/22 13:20:41.30 pJ+Dy7HC.net
>>160
>1文字の特殊変数だらけの言語
Rubyのことですね判ります

191:デフォルトの名無しさん
21/01/22 14:12:04.30 aLDuncuZ.net
>>187
Rubyはそれはない。
Perlと間違ってないか?

192:デフォルトの名無しさん
21/01/22 14:18:28.68 WLGQ46hZ.net
C++のところで延々と続けるのもなんだけど、TECOってのは相当複雑怪奇だったみたいね

193:デフォルトの名無しさん
21/01/22 22:15:36.76 HHqI


194:RAh/.net



195:デフォルトの名無しさん
21/01/22 22:18:18.81 3W/g7okM.net
<functinal>で足りるんじゃね?

196:デフォルトの名無しさん
21/01/22 22:50:10.68 LtnZZu+T.net
こちらでどうぞ
スレリンク(tech板)

197:デフォルトの名無しさん
21/01/22 23:49:36.96 LcAiXyQN.net
>>192
C++の「マルチパラダイム」の中に関数型が今後入ることはあるか (あるいはもう入ってるか) という質問なんですが、変なことを聞いていますか?

198:デフォルトの名無しさん
21/01/23 00:00:03.65 rMuiLyZn.net
ぅえ?

199:デフォルトの名無しさん
21/01/23 01:38:03.71 PXGkLjAZ.net
もう入ってるでしょ?

200:デフォルトの名無しさん
21/01/23 04:37:52.61 Vx6mcd5N.net
Perlのソース汚いイメージしかないけどな

201:デフォルトの名無しさん
21/01/23 07:19:17.61 E7+6hgZm.net
std::functionとラムダ式で関数はほぼ第一級オブジェクトとして扱えるからC++はとっくに関数型言語ですよ
モナドだってやろうと思えば作れるよ

202:デフォルトの名無しさん
21/01/23 13:50:31.25 1/fAmr9E.net
じゃーHaskellにできることはC++でもできるし、同じように書けるって言うのかい

203:はちみつ餃子
21/01/23 13:52:40.96 Q+Wu8A2P.net
>>198
なんでそうなるのかようわからんが。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

286日前に更新/256 KB
担当:undef