X



C++相談室 part160
レス数が1000を超えています。これ以上書き込みはできません。
0006デフォルトの名無しさん
垢版 |
2022/04/15(金) 09:12:06.04ID:pOJAVr49
グローバル変数と静的変数は
・書き換えられうる場合は排他制御が必須
・初期化のみの場合でもその初期化の排他制御が必須
・ただし静的変数の初期化はC++11以降は自動的に排他制御されることが保証される
0007デフォルトの名無しさん
垢版 |
2022/04/15(金) 09:23:58.05ID:xDiQzMrD
まとめると、main開始してからリソース用意して適当に渡せよってことよ
原則としてグローバル変数もシングルトンも避けたほうが良い
0008デフォルトの名無しさん
垢版 |
2022/04/15(金) 12:30:29.25ID:hAkRYyug
グローバル変数を避ければシングルトンがmain開始前に呼び出されること無いだろ。
グローバル変数だけ避ければいい。
0010デフォルトの名無しさん
垢版 |
2022/04/15(金) 13:17:57.26ID:JW7HV0lo
シングルトンの中に書き換わる変数を持っていたらデータ競合が起こりうるよな
0012デフォルトの名無しさん
垢版 |
2022/04/15(金) 15:49:11.91ID:rZhfm+p8
>>11
それほんとにシングルトンのこと話してるの?
モジュール間の情報共有はシングルトンがないと無理って言ってるに等しい気がするけど
0013デフォルトの名無しさん
垢版 |
2022/04/15(金) 16:34:54.97ID:WyYUxIA+
>>11 「管理」が何のことを言ってるのかわからないけど、たぶんひきすうをつかえばいいと思うんだ。
0014デフォルトの名無しさん
垢版 |
2022/04/15(金) 16:52:25.27ID:2FVuY2vb
引数ってこういうことか?

struct singleton_t { };

singleton_t& get_singleton()
{
static singleton_t the_singleton;
return the_singleton;
}

void func1(singleton_t&);
singleton_t& func2();

int main()
{
func1(func2());
}

func2なんか使わずにfunc1の中でget_singletonを呼び出せば済むことだし
だったらthe_singletonをグローバルにするのと大差なくねって
0015デフォルトの名無しさん
垢版 |
2022/04/15(金) 19:46:49.16ID:shXIYNIj
>>12
>>9の主張「シングルトンとグローバル変数は避けたほうが良い」を受けての話ね。
当然グローバル変数も無しで、さらにシングルトン無しでどうやってグローバルなリソースを管理するのかな?と。
0017デフォルトの名無しさん
垢版 |
2022/04/15(金) 19:53:05.56ID:PiHpabQE
>>15
グローバル変数やシングルトンがなくていいとは言わないけど、何でひきすうで出来ないと思うの?
0019デフォルトの名無しさん
垢版 |
2022/04/15(金) 20:05:45.76ID:gTMTzKSQ
システム全体のリソースならグローバルでいいだろ
グローバル変数を導入するメリットの方が勝つから

なんでもかんでもグローバルに置くのはやめようねというだけの話でしょ
0022デフォルトの名無しさん
垢版 |
2022/04/15(金) 20:19:31.51ID:RJmakPbV
まあ寿命がはっきりしないオブジェクトって嫌なもんだよ
わかってもらえるとは思わんけど
0023デフォルトの名無しさん
垢版 |
2022/04/15(金) 20:45:25.17ID:aidqFE7S
前スレでクラス内部にinstanceを持たせて運用する事を質問した者です。

(注)前スレ:943
:ユニークポインタをシングルトンの様な仕様に置き換え
std::unique-ptr<Hoge>Temp=std::make-unique<Hoge>();

static Hoge& GetInstance(){static Hoge temp;return temp;}

上記の仕様をさらに、
template <class T>
inline T Instance;
というテンプレートinstanceで使用できるようにアドバイスを頂き、その仕様に変更したところ、運用自体は問題ないのですが、コンストラクターの呼び出し位置がおかしい感じになってしまいますた。
インラインなのでコンパイル時?(inittermという関数内部でコンストラクトが実行されている)にコンストラクターが起動されてしまう感じで、外部ライブラリを使用したコンストラクションが失敗します。
これは明示的に回避できるのでしょうか?
また、皆さんはグローバル変数等を使用するときにどういった方法を取られますか?
クラス名から呼び出せるインスタンスはかなり便利なので使っていきたいのですが……

度々申し訳ございますん。
0025デフォルトの名無しさん
垢版 |
2022/04/15(金) 21:22:11.96ID:o8nSddd2
inline変数は(MSVC16で確認する限り)1つの.dll内で同じ実体を共有する
dllをまたぐと別の実体になる

.hに書いてもリンク時に多重定義で怒られない

その言い方だとmainを呼び出す前の初期化処理で死んでる感じか
0026デフォルトの名無しさん
垢版 |
2022/04/15(金) 21:25:54.67ID:lFYUjAWg
シングルトンにしてもグローバル変数にしても排他制御が必要な点で同じだよな
0027デフォルトの名無しさん
垢版 |
2022/04/15(金) 21:31:24.48ID:o8nSddd2
コンストラクタ実体を含んだdllをロードする前にinline変数の初期化が走るというのが問題なら、
GetInstanceのテンプレート実装に逃げるか...

template<class T>
T&GetInstance(){static _back;return _back;}
int main(){
GetInstance<Hoge>().Func();
}


一応言っておくがデータをケチる目的のはずだからinline変数もGetInstanceテンプレートも「本物」のグローバル変数ではない

dllをまたいだら別の実体だ
0032デフォルトの名無しさん
垢版 |
2022/04/16(土) 16:00:35.82ID:36AETGkW
>>31
変数テンプレートだからこっちが型を指定する
auto x = std::numbers::pi_v<double>;

デフォはdouble
namespace std::numbers {
inline constexpr double pi = pi_v<double>;
}
0035デフォルトの名無しさん
垢版 |
2022/04/16(土) 20:06:23.56ID:36AETGkW
ジジイを馬鹿にするのは結構だが若いなりに何か引っさげているのか?
俺は8bit機がこれから黄金期に差し掛かるあたりでお前らのような立場だった
ハッタリではなく当時のトレンド引っさげてジジイたちの死角を突くことで今の地位を得たが
口だけ達者でこれから沈みゆくだけな連中なら全然羨ましくねえぜ
0037デフォルトの名無しさん
垢版 |
2022/04/16(土) 20:48:37.77ID:36AETGkW
そもそも誰か円周率が3だなんて主張してるか?
情弱って攻撃用ワード使って脅しかけても説得力ねえとバカにしか見えねえんだけど
0038デフォルトの名無しさん
垢版 |
2022/04/16(土) 20:50:03.87ID:9kZcaiqY
>>34
ジジイ、ジジイか‥‥
それじゃ、お前はなんだ?この餓鬼が
俺はお前さんがこの世に落っこってくる前からバグ書いてるんだ
0040デフォルトの名無しさん
垢版 |
2022/04/16(土) 21:23:19.58ID:gltC/pf5
どうしてもintのπを定義しようと思ったら、4や2ってわけにはいかないから3にするしかないと思う
0042デフォルトの名無しさん
垢版 |
2022/04/16(土) 21:45:10.61ID:36AETGkW
全否定はしていない
これならジジイを馬鹿にする資格があると示しているのに
応答なしか・・・誠に残念
煽られても好意的に対応したが無駄だったか
0044デフォルトの名無しさん
垢版 |
2022/04/16(土) 22:52:39.15ID:R//Q6DgO
「状況によって『およそ 3』で計算すればよい」という指導は存在する。
小学生は有効精度の概念を知らんから
どういう場合にどの程度の概算でよいのか自分で判断できんのよ。
「およそ 3」って言ったら 3 で計算するのを正解だと思っちゃうやつが少なからず出てきてしまう。

現実的な精度との兼ね合いで言ったら 3.14 で教えておくのがおおよそ手ごろなんやろね。
0045デフォルトの名無しさん
垢版 |
2022/04/16(土) 23:10:11.53ID:+A5PZLb9
喜べお前ら
こいつを追加するだけでpi_v<int>が使えるようになるぞ

template<>struct std::is_floating_point<int>:std::true_type{};
0046デフォルトの名無しさん
垢版 |
2022/04/16(土) 23:16:32.04ID:NFUA2B25
>>44
> 「状況によって『およそ 3』で計算すればよい」という指導は存在する。
指導が何を指してるのか知らんけどおよそなんてどこから出てきたんだよw
円周率3の話は 小学校学習指導要領 (平成元年3月)の下記の文言が独り歩きしたものだぞ

円周率としては3.14を用いるが、目的に応じて3を用いて処理できるよう配慮する必要がある。
https://www.mext.go.jp/a_menu/shotou/old-cs/1322329.htm
0048デフォルトの名無しさん
垢版 |
2022/04/17(日) 03:44:03.45ID:GgR0k3G6
>>46
3.14だっておよそでしかない
およそ3で全然問題ないと思うね。
それより
1.6+2.4 = 4.0 と答えたら減点するアホ文系教師を文科省はなんで放置するのかね?
掛ける順番とかな。工数とかシランだろな多分
単位とかでもあほ文系小学校教師が理解してるとは到底思えない
0049デフォルトの名無しさん
垢版 |
2022/04/17(日) 08:47:30.67ID:+WDep4l2
>>48
小学校の先生が悪いんじゃない
小学校の先生を指導監督する文部省の官僚に問題があるとおもいますよ、ハノンQZ
0050デフォルトの名無しさん
垢版 |
2022/04/17(日) 10:32:47.71ID:1NqFVDwl
>>46
そこだけ見て「ゆとりも3.14で教わってる」って誤解されてるけど
一緒に3ケタの掛け算も廃止になったのが本当の大問題なんだよ
最初に「円周率とは」で一度3.14と教えた後の計算問題は全部3でやるしかなかった
0051デフォルトの名無しさん
垢版 |
2022/04/17(日) 10:40:02.85ID:bm11jv7N
算数教育を破壊された影響は凄まじいな
マスゴミの煽動記事みて何人に1人の奇病なのかもわからないバカばっかりになっちまった
0052デフォルトの名無しさん
垢版 |
2022/04/17(日) 11:00:54.26ID:xNW3vj+F
現実には3で十分なわけよ
わずか数%の違いしかなく困らない
どうしても必要なら3.1でいい
これならわずか1%強の違いしかない
逆に工業で必要とする時は3.14でも足りないこともある
つまり3.14にこだわっているやつこそバカであると断言できる
0053デフォルトの名無しさん
垢版 |
2022/04/17(日) 11:22:48.55ID:RqkDCOAY
コンピュータの場合、累積する誤差を少なくするよう定数を求めるのが最も重要なわけで。
統計的に3.17がπとして相応しいことがわかっています。
0054デフォルトの名無しさん
垢版 |
2022/04/17(日) 11:27:42.82ID:9gjwfasM
そら分かる子はいいよ
ほっといても算数なんてすぐ分かるやろ
数というもんの抽象性も理解できるし
かける順番にこだわることのアホさも自分で分かるやろ
でも
ひとクラス何十人のうちの算数分からん子
知能指数もボーダーの子
発達障害の子
その子らになんとかして分かってもらおうとすると
あの手この手でいろいろやってみるんやろな
0055デフォルトの名無しさん
垢版 |
2022/04/17(日) 11:29:26.25ID:RqkDCOAY
共産主義じゃないんだから馬鹿な子は馬鹿な大人に育てば良い。
みんな違ってみんな良い。
0056デフォルトの名無しさん
垢版 |
2022/04/17(日) 11:30:31.73ID:n4FXzdR7
>>50
> 一緒に3ケタの掛け算も廃止になったのが本当の大問題なんだよ
だからそれもフェイクだっつーのw

(1)内容の「A数と計算」の(3)及び(4)については、乗数や除数が3位数である場合の指導は、2位数までの考え方を基にして児童に考え出させるようにするとともに、複雑な計算を避けるものとする。

だからこれに従うと円周率は3.1となるはず
これと上に書いた「目的に応じて3で計算」を(多分わざと混ぜて)某学習塾が
『ウッソー!?円の面積を求める公式 半径×半径×3!?』
『円周率を3.14ではなく、「およそ3」として円の求積計算を行います』
って広告打ったのが元凶と言われてる
0057デフォルトの名無しさん
垢版 |
2022/04/17(日) 11:34:11.45ID:RqkDCOAY
円周率なんて生きてく上で必要ない。
0059デフォルトの名無しさん
垢版 |
2022/04/17(日) 14:31:08.08ID:gu8d6tY+
お礼と報告が大変遅くなりましたがID:aidqFE7S でございます。
この度は有用なアドヴァイス大変ありがたく承っております。

>>25
mainで走らせている実処理の前に、インライン変数のコンストラクタが起動しているので、リンカ?の際に記述と同時に外部結合?させているのではないかとしか推察できませんでした……
質問が理解できていないかもしれないのですが東方初学者ですので何卒。

>>27
受け渡しを省略したいという助平心でございます……
この記述で動作確認しました。
ありがとうございます!


テンプレートは食わず嫌いでしたが、使ってみると奥深いものですね。
関数定義にstatic T& Instance();と記述したらちゃんと内部結合?になっていました。凄い。

本物のグローバル変数とはdllを跨いでも使える変数なのでしょうか?
dellについて少し調べたのですがよくわかりませんでした。
クラス内部の静的変数はプログラムのどこからでも一位だと思っていましたが、外部結合のstaticは役割が違うのかしら。
もうちょっと調べてみます。
ありがとうござまいした。
0060デフォルトの名無しさん
垢版 |
2022/04/17(日) 14:39:47.64ID:smuc31S1
>>59
使えるよ、シンボルが見えるなら。
でも疎結合の方が絶対に良いので使わんほうがいいよ
0061デフォルトの名無しさん
垢版 |
2022/04/17(日) 15:27:41.39ID:98II7f1E
試したことないけどあれって全く関係ないdllからアドレス指定して値書き換えたり出来るの?
0062デフォルトの名無しさん
垢版 |
2022/04/17(日) 15:35:49.78ID:smuc31S1
リンクできてれば大丈夫よ
マネージドなやつが混ざってたらやらん方がええかもね
0063デフォルトの名無しさん
垢版 |
2022/04/17(日) 16:23:54.03ID:wFJvf5tq
このスレ永久に同じ奴の自演でループしてるな
いつも同じ間違いで止まってるし
0064デフォルトの名無しさん
垢版 |
2022/04/18(月) 00:21:25.50ID:6Qt778/v
msvcのstd::lerp妙に遅かったから実装見たらめっちゃ厳重に引数チェックしてた
秒間何億回も呼び出す用途想定してないのか実装がまずいのか…とりあえず自分で書き直したわ
0065デフォルトの名無しさん
垢版 |
2022/04/18(月) 07:14:50.33ID:t3NwdXGg
デバッグビルド?
0066デフォルトの名無しさん
垢版 |
2022/04/18(月) 07:52:49.52ID:wKhqv1yX
引数が有限でない場合の処理が入ってるからだろ
そもそもそんなものを使おうとする方がどうかしてる
0069デフォルトの名無しさん
垢版 |
2022/04/18(月) 09:18:05.41ID:Dpn9nQkn
>>68
明らかに無駄だな
無チェックな関数を提供すべき

チェック不要な自明な使い方で速く動くことがあるべき姿
もし必要ならば自分でチェックすれば良いしチェック用関数を提供してもよい
0070デフォルトの名無しさん
垢版 |
2022/04/18(月) 09:44:52.69ID:Mq4dF/46
>>69
どれが (言語仕様上) 必要ない部分なのか具体的に示して。 俺には見つけられない。
それとも言語仕様が過剰であるという意味?
0071デフォルトの名無しさん
垢版 |
2022/04/18(月) 09:53:11.17ID:t3NwdXGg
配列の範囲チェックと似たような話だろ
0072デフォルトの名無しさん
垢版 |
2022/04/18(月) 09:56:20.66ID:OY9HJtti
一般的に渡ってきた引数に対してチェックをせず処理する関数と厳重にチェックしてから処理する関数の二つを提供すればいいんじゃない?
もちろん後者はチェックしてから前者を呼び出すことになる
チェック不要が自明な時や何度も呼び出す時は前者で十分
0073デフォルトの名無しさん
垢版 |
2022/04/18(月) 10:05:07.63ID:s/nYZOWf
しかしニッチな機能だね
使うときは使うんだろうけど、これをあえて標準で用意するのは不思議
0074デフォルトの名無しさん
垢版 |
2022/04/18(月) 10:06:44.44ID:t3NwdXGg
スクロールバーやプログレスバーで使いそう
過去にそのあたりのコード書いた当時あったらなって
0075デフォルトの名無しさん
垢版 |
2022/04/18(月) 10:30:18.10ID:Mq4dF/46
>>72
一般論としてはそうだが、論点はそこじゃない。
MSVC の std::lerp は定義域のチェックをやっていない。
なので >>69 の言う「チェック」は引数の妥当性のチェックのことではない。
0076デフォルトの名無しさん
垢版 |
2022/04/18(月) 11:30:20.45ID:wKhqv1yX
>>73
たいていの用途で必要なのは
const auto _Candidate = _ArgA + _ArgT * (_ArgB - _ArgA);
だけだからなぁ
誰がなんのためにこれを入れようと思ったのかよくわからんね
0077デフォルトの名無しさん
垢版 |
2022/04/18(月) 12:37:29.31ID:s8zWy/Nc
using L=numeric_limits<double>;
a=L::max();b=L::lowest();

この場合お前らの言う「最小限の実装」だと結果がNaNになったりするぞ
オーバーフローとか切り捨て/切り上げとかに気を使わなくていいように標準でこういうのが用意されてるんだよ
0079デフォルトの名無しさん
垢版 |
2022/04/18(月) 17:19:17.33ID:pd6PCcNf
そもそも何億回も呼び出すなら<math>のfma(...)使うんじゃねえの
<cmath>はどんな引数つっこまれても何とか対処しなきゃならんのが絶対条件
0080デフォルトの名無しさん
垢版 |
2022/04/18(月) 19:27:11.79ID:DmcgzGUS
using L=numeric_limits<double>;
a=L::max();b=L::lowest();

この場合お前らの言う「最小限の実装」だと結果がNaNになったりするぞ
オーバーフローとか切り捨て/切り上げとかに気を使わなくていいように標準でこういうのが用意されてるんだよ
0081デフォルトの名無しさん
垢版 |
2022/04/18(月) 20:05:50.33ID:t3NwdXGg
>>79
sqrt(-1.0)でcomplex返さにゃならんの?
0082デフォルトの名無しさん
垢版 |
2022/04/19(火) 04:23:27.96ID:M6r3Rc52
nanだのinfだの>>81だのをグチャグチャとチェックしたがる奴は無能
最初からそういうのが発生しないように計算するべき
0083デフォルトの名無しさん
垢版 |
2022/04/19(火) 06:18:55.90ID:0L/+n52g
ゼロ除算とかね
0085デフォルトの名無しさん
垢版 |
2022/04/19(火) 14:50:47.69ID:0L/+n52g
人によるけどね
俺もマシン寄りのところが好き
0088デフォルトの名無しさん
垢版 |
2022/04/20(水) 20:22:28.34ID:Cwlkz3kl
二度と帰ってくるなよ
0091デフォルトの名無しさん
垢版 |
2022/04/21(木) 08:12:05.34ID:lT6JRJu8
今どき戻り値intでエラーコードとか使うなよCの書き方じゃねぇかとか思ってた
だけどC++17のvariantでエラーコード返したり、optional使ってエラー表現してるコードを見てちょっと感心した
しかしとはいえこういうやり方と例外ぶん投げるやり方ってどっちがいいんだろう?ググっても割りと論争あってよくわからんかった
0092デフォルトの名無しさん
垢版 |
2022/04/21(木) 08:41:18.15ID:uyGzUV2B
>>91
制御フローを変更する必要がある場合は例外、それ以外(エラーもフローの一部の時)はoptionalでいいんじゃない?
例外は性能ペナルティーあるし、あんまり使うものじゃないと思うわ。

例えばメモリ確保失敗とかはプログラムの続行が難しいから、安全に終了するメモリ異常時の終了フローに移行できるよう例外を使うといいかと。
0094デフォルトの名無しさん
垢版 |
2022/04/21(木) 09:09:09.66ID:3fppYdMF
例外はやばいエラーと普通のエラーを分けて欲しいわ
後者はあんまり遠くへ飛ばんでほしい
0095デフォルトの名無しさん
垢版 |
2022/04/21(木) 09:18:47.88ID:TFObbQ1T
異常系は例外、準正常系はエラー
という方針がええな
0097デフォルトの名無しさん
垢版 |
2022/04/21(木) 11:09:48.62ID:Ex423fK8
例外って、移行の処理を全く出来なくね
try{
a();
b();
c();
}
catch(...)
{
}

a()がコケても、何がしかの条件をかえてb()いこうを実行したいときなんて不便
try tryなんてやりだしたら、各関数の戻り値をifで判断しているのと同じだし
0098デフォルトの名無しさん
垢版 |
2022/04/21(木) 11:15:18.89ID:Nb12Wot+
言い出したらキリないからだろ
a()がコケたあとC()から再開とか無数にあるから
try {
a();
b();
c();
}
catch(std::exception& e)
{
if(dynamic_cast<f*>(&e))
{
if(dynamic_cast<g*>(&e))
{
b();
}
c();
}
}
0099デフォルトの名無しさん
垢版 |
2022/04/21(木) 11:17:35.59ID:9+GFB0OX
例外処理でどこまでカバーするかってのは初期には色々と検討されてる。
でも結局のところ「あきらめて終わる」「条件を変えてやり直しする」が圧倒的多数で
その他は言語機能としてサポートする必要ないレベルのレアケースだと判断された。

>>97
そういう場合は諦めて try をネストしたり連鎖したりしてなんとかしろってことだ。
少なくとも言語仕様をより複雑にするほどではない。
0100デフォルトの名無しさん
垢版 |
2022/04/21(木) 11:31:04.81ID:3fppYdMF
>>97
まあ分岐じゃなくて脱出を目的にするのが筋で、そういう制御はしない
王道ルートを一本バシッと決めないと
0104デフォルトの名無しさん
垢版 |
2022/04/21(木) 12:08:19.70ID:1fqzAB87
例外そのものが結構重たい処理だから
発生頻度が高いものでは使いたくない
0105デフォルトの名無しさん
垢版 |
2022/04/21(木) 12:50:04.39ID:sNS+foI5
GoやRustなど最近のプログラミング言語は例外がないね
代わりに多値やoptional/variant相当でエラーを返す
0106デフォルトの名無しさん
垢版 |
2022/04/21(木) 15:46:22.58ID:Ex423fK8
>>104
例外機構自体は重くないよ
発生時にcatchするまでが規定できないからRTOSなどでは使いにくいってだけ

その手のプログラムをしている人なんてそう多くないなから実際は気にする必要はない
0108デフォルトの名無しさん
垢版 |
2022/04/21(木) 17:14:16.48ID:Nb12Wot+
まあね、正直<setjmp.h>でええやんと思うことはある
しかし標準ライブラリがtry catch前提で作られているので
それを使う限りは仕方がない

longjmpの第2引数をポインタに写像すれば
そこからdynamic_castで場合分けもできるんだが
いざ自前でやるとなると標準ルールが欲しくなる
0110デフォルトの名無しさん
垢版 |
2022/04/21(木) 17:30:09.55ID:9+GFB0OX
単に大域脱出するだけなら setjmp で良いが、
例外を投げたら途中にあるオブジェクトのデストラクタを呼んでちゃんと後始末してくれるってのが良いところなわけだろ。
そんで同等のことを setjmp でやろうとしたら実行コストが大きいってのは sjlj で凝りてるだろ。

大域脱出を使わないってのを徹底するならそれはそれでアリだと思うんだが、
半端に例外っぽいものを作るくらいなら素直に例外を使ったほうがいいわ……。
0112デフォルトの名無しさん
垢版 |
2022/04/21(木) 17:43:55.51ID:vSoU0DUY
例外を使わずに普通に代数的データ型でエラーを返せば良い
そのためにoptionalやvariantがある
0113デフォルトの名無しさん
垢版 |
2022/04/21(木) 17:44:34.43ID:Hotp0qqb
例外が嫌われる原因は、はるか遠くのスナイパーに即死させられるからだよ
ある前提ならどこにスナイパーがいてもいいように書く必要があって、そのためには地下の穴を掘り進めて絶対地上に出ないなどの策が必要になる
0114デフォルトの名無しさん
垢版 |
2022/04/21(木) 17:53:06.42ID:uYH/mfeQ
いや単純に例外がシステムコールだからだろ
動的メモリ確保然りmutexロック然り
意味不明な例え話は必要ない
0115デフォルトの名無しさん
垢版 |
2022/04/21(木) 18:07:39.87ID:3fppYdMF
pythonの例外は割と好きだわ
c++でチームでやってるときは使わんほうがまあ無難
0119デフォルトの名無しさん
垢版 |
2022/04/21(木) 18:53:33.55ID:Ex423fK8
>>117
びっくりするくらいC++の知識ない奴がいるよな
たんにネットとか過去の案件からコピペしただけで
そのコードがどういう意味なのかも分からないなんてバカが打ちの会社にいるわ
0122デフォルトの名無しさん
垢版 |
2022/04/21(木) 19:07:51.99ID:5bVBNknH
例外のどこがシステムコールなんだよw
笑わせんなw
0123デフォルトの名無しさん
垢版 |
2022/04/21(木) 19:29:12.31ID:Hotp0qqb
経験不足もココまで来ると哀れだな
CPUの例外とかシグナルをC++の例外としてあげることはあるけど、throwやtry/catchにシステムコールは関係ないよ
またsetjmp, longjmpをシステムコールと思ったのかもしれないけど、これらはCの標準関数だよ
0124デフォルトの名無しさん
垢版 |
2022/04/21(木) 19:38:44.45ID:dzuJ6upO
>>123
>throwやtry/catchにシステムコールは関係ない
sjlj だけが例外の実装ではないのでは?win32api なら SEH とか
0126デフォルトの名無しさん
垢版 |
2022/04/21(木) 19:49:07.82ID:ylgd21Wg
GoやRustのように例外のないプログラミング言語もあるように
例外は各言語内の単なる制御の一手法にすぎない
そこにシステムコールというOSの呼び出しは出てこない
0129デフォルトの名無しさん
垢版 |
2022/04/21(木) 21:03:10.33ID:c/plR3QG
少なくともbsd系やlinux系などで例外にシステムコールは一切出てこないな
だから例外とシステムコールは無関係であると断言できる

もしシステムコールがからむ環境があったとしてもそれはその環境独自の問題
C++やその他の言語の例外とシステムコールは無関係
0130デフォルトの名無しさん
垢版 |
2022/04/21(木) 21:10:18.22ID:5bVBNknH
>>128
ISO標準の例外処理はどれかわかるよね?
0132デフォルトの名無しさん
垢版 |
2022/04/21(木) 23:52:24.64ID:UxG5J1QB
SEHは別にハードエラーに限ったもんじゃないが。
基本的にカーネル側で発生する例外一般であって、DLL周りで発生するのはよく見かけると思う。
0133デフォルトの名無しさん
垢版 |
2022/04/22(金) 00:45:41.32ID:a+ReXgZI
例外の話しがなんで、SEHの話しになってんだ?

例外って知らないのか?
うちの会社にもいるわ、デバッガに制御が移っただけなのに
例外が〜なんて言ってるバカ
0138蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/22(金) 01:53:53.59ID:BJPJNuGw
SEHの訳語が構造化例外ハンドリングだから、例外の一種と言えるはずだ。
0140蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/22(金) 02:36:51.42ID:BJPJNuGw
いや、ゼロ除算やヌルポインタアクセスなどで素朴なC/C++でもSEHが発生することはあり得る。
0144デフォルトの名無しさん
垢版 |
2022/04/22(金) 06:10:41.99ID:8e+rCGWk
>>140
C++にはSEHというものはありませんし発生することもありません
勉強して出直してきてください
それまでこのスレに書き込み禁止
0145デフォルトの名無しさん
垢版 |
2022/04/22(金) 06:18:31.32ID:Y1J+20vl
VC6の頃はゼロ除算をcatch(...)で捕獲できたな
0146デフォルトの名無しさん
垢版 |
2022/04/22(金) 06:40:52.54ID:/ALeatGN
ゼロ除算はSIGFPEが発生するから捕捉したかったらsignalでハンドリング関数を指定
例外は全く関係ない
0147デフォルトの名無しさん
垢版 |
2022/04/22(金) 06:45:33.62ID:Y1J+20vl
だから昔話だってば
あり得んことが目の前で起きたから
よく憶えてるんだよ
0153デフォルトの名無しさん
垢版 |
2022/04/22(金) 07:21:51.39ID:poIoQlGh
どこかの会社の独自拡張の話をC++の機能だと思い込んでC++スレに持ち込むのはやめましょう
以下の話はここでOKです
setjmp/longjmpはC/C++の標準機能です
signalもC/C++の標準機能です
try/throw/catchはC++の標準構文です
0154デフォルトの名無しさん
垢版 |
2022/04/22(金) 07:37:43.45ID:Y1J+20vl
ISO/IEC14882の範疇から一歩たりとも出るなってのは無理だろ
0155デフォルトの名無しさん
垢版 |
2022/04/22(金) 07:45:58.57ID:Bpn1KdM3
>>154
特定の企業によるその環境下での独自な拡張について
そうであることを認識できず区別できずにC++の機能だと勘違いしてここに書き込むのは完全にアウト
0157デフォルトの名無しさん
垢版 |
2022/04/22(金) 07:50:39.14ID:Y1J+20vl
書き込んだ本人に悪意がないのにアウトっておまえさんが何かペナルティを課すのか?
普通にそれは違うよと教えてやるのは全然スレ違いじゃないだろ
0158デフォルトの名無しさん
垢版 |
2022/04/22(金) 07:59:20.08ID:0Q7NQ1lp
発端はこれだよな

>>114
> いや単純に例外がシステムコールだからだろ

違うと皆から指摘されてもここまで延々と続けていて悪質
0161デフォルトの名無しさん
垢版 |
2022/04/22(金) 08:37:18.75ID:Y1J+20vl
何かさ、C++の実用場面を1つも知らない世間知らずが
自分のためのシェルターを要求してるみたいだな

そんなの当人含め誰の何の役にも立たんのに
0162デフォルトの名無しさん
垢版 |
2022/04/22(金) 08:48:05.34ID:u/m8ttCW
分かりやすい例え
もしAppleによる独自拡張の話をC++の機能だと思い込んでここで延々と話を続ける人たちがいたら
迷惑だからApple方面のスレでやれ!と怒られるだろ
それと同じことが今ここで起きている
0167デフォルトの名無しさん
垢版 |
2022/04/22(金) 09:20:29.23ID:LDoEF43J
SEHってJavaなど色んな言語でMicrosoftが勝手に拡張してるやつだぜ
だからC++の話ではないとまともな人ならわかるはず
0168デフォルトの名無しさん
垢版 |
2022/04/22(金) 09:56:02.95ID:kaZmiYOz
SEHってC言語で実装されているWin32API周辺開発でも例外機構を使えるようにしたものじゃないの?
例外機構が備わってるC++でSEHの出番はないと思うけど
0169デフォルトの名無しさん
垢版 |
2022/04/22(金) 10:46:47.56ID:Y1J+20vl
一言注意するのは構わんが
同調しないやつがいるからって
言い負かすまでしつこくするのは迷惑だぞ
0170デフォルトの名無しさん
垢版 |
2022/04/22(金) 11:21:59.53ID:HAxRxWew
マイクロソフトの解説

構造化例外処理 (SEH) は、ハードウェア障害などの特定の例外コードの状況を適切に処理するための、C に対する Microsoft の拡張機能です。 Windows と Microsoft C++ は SEH をサポートしていますが、ISO 標準の c++ 例外処理を使用することをお勧めします。 これにより、コードの移植性と柔軟性が向上します。 ただし、既存のコードまたは特定の種類のプログラムを維持するために、SEH を使用する必要がある場合もあります。

Microsoft 固有:
0172デフォルトの名無しさん
垢版 |
2022/04/22(金) 11:35:01.23ID:oMnlDCaF
自分は正義の味方のつもりでも
周りにとって迷惑なだけなのは
まるでスッパマンだな
0173デフォルトの名無しさん
垢版 |
2022/04/22(金) 11:38:47.55ID:udIu01iV
勘違いしていたと謝罪すりゃ済むのに逆切れで死の書き込みを繰り返してるやつヤバいな
0174デフォルトの名無しさん
垢版 |
2022/04/22(金) 11:54:33.77ID:OAazuPnp
>>173
相手が一人という前提なのは、数で勝ってると思い込みたいから?
死んだ親もそういう人だったん?
0176蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/22(金) 12:23:58.18ID:BJPJNuGw
大阪弁も日本語だろ。
Win32 C++コンパイラではゼロ除算で浮動小数点例外が発生することも知らんとは。
まさかVirtual C++がC++コンパイラではないと言いたいほさ。
0179デフォルトの名無しさん
垢版 |
2022/04/22(金) 12:33:13.97ID:6yZvfKA9
ゼロかどうか直前に調べてゼロならthrowすることでどんなコンパイラでもゼロ除算の時に例外を投げることが可能です
つまりコンパイラの問題ではありません
そして誰でもそうすることが出来るというだけでありC++の仕様や機能ではありません
0180デフォルトの名無しさん
垢版 |
2022/04/22(金) 12:38:40.45ID:wri6W8iQ
>>176

構造化例外処理 (SEH) は……C に対する Microsoft の拡張機能です。

C++でも標準でも無いな。
いつまでスレ違い粘着しているんだよ。
0181蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/22(金) 12:38:40.63ID:BJPJNuGw
ゼロ除算の処理はマシン依存。
だから、コンパイラは構造化例外を発生させてもいい。
これも標準C++に含まれる。
0184デフォルトの名無しさん
垢版 |
2022/04/22(金) 12:56:04.30ID:XRzGPZH0
整数型のゼロ除算は未定義動作じゃろ...
うちの環境(Ubuntu20.04 gcc11)なら不動小数点例外のシグナルが飛ぶが

未定義動作なので絶対に何かが起きるようなことを期待してはいけない
0186蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/22(金) 13:11:18.22ID:BJPJNuGw
関西弁は標準日本語ではないが、日本語である。
この辺が難しい話なんだ。

「〜やで」「〜でんねん」と言う言い回しは、標準日本語にはないが日本語ではないと言い切るのは乱暴な話だ。
0188デフォルトの名無しさん
垢版 |
2022/04/22(金) 13:19:13.76ID:oJU3aoBf
方言だから〜言語標準規格に無いから〜って
そもそも例外がどのように内部実装されているかなんて完全に処理系依存であって
そんなことはわかった上で話してるんじゃないの

あと自分もMSVCのC++例外はSEHの機構を利用して実装されていると聞いたことがある
がググっても公式っぽいのは見当たらないので気のせいかもしれん
そもそも例外がどのように内部実装されているかなんて処理系依存で
そんなことはわかった上で話してるんじゃないの

あと自分もMSVCのC++例外はSEHの機構を利用して実装されていると聞いたことがある
がググっても公式っぽいのは見当たらないので気のせいかもしれん
0190デフォルトの名無しさん
垢版 |
2022/04/22(金) 13:31:32.71ID:nu5oKQCU
今回の話は>>91から始まる「正常値でない時にvariantやoptionalを返すのと、(try/catchの)例外を投げる(throw)のと、どちらが好ましいか?」という話の始まり

それに対して「例外はコストが余分にかかる」「例外だと複数返ってくる時の扱いやリカバリ等が難しくなる」という話の流れ

その話に対して例外はシステムコールだとか
SEHがどうのこうのだとか
C++と無関係な話をして荒らしている人たちがいる
0192デフォルトの名無しさん
垢版 |
2022/04/22(金) 13:51:45.19ID:XCe7UK1Z
SEHがどんな実装で作られていようが魔法はないのだからコストがかかる要因であることは変わりない
したがってこの議論でSEHを持ち出すのは無意味で愚かな行為ではないかな
0194蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/22(金) 14:08:07.99ID:BJPJNuGw
♪実装が終わって〜 僕らは入った〜

♪実装を知らない〜 コーダーたち〜さ〜
0198デフォルトの名無しさん
垢版 |
2022/04/22(金) 14:39:51.55ID:fMqKBQE/
全く無関係な話でもない
見るからに自分が入れない話だからやめろだろ

そういう時は黙ってるか別な話題振ればいいのに
いちいち揉め事にしちまう幼稚なやつ
0199デフォルトの名無しさん
垢版 |
2022/04/22(金) 14:40:25.86ID:7P+21PvJ
>>123書いて話終わると思って今見たらまだこの話が続いてることに驚き・・・
よほど恥ずかしかったんだな
ID変えてこんなに自演しちゃうなんて
0200デフォルトの名無しさん
垢版 |
2022/04/22(金) 14:53:14.70ID:Hnq97RMZ
正直、スマンカッタ
例外がシステムコールとか
ほんとすまんかった
単に知ったかしたかっただけで
こんなに大騒ぎになるとは思わなかった
謝罪してこれを訂正に代えさせてください
正直すまんかった
勉強になりました
例外はシステムコールじゃないです
0201デフォルトの名無しさん
垢版 |
2022/04/22(金) 14:58:45.98ID:58eJLgfI
>>188
>>170
Windows と Microsoft C++ は SEH をサポートしていますが、ISO 標準の c++ 例外処理を使用することをお勧めします。

MSですらSEHよりISO 標準の c++ 例外処理を推奨しているじゃないか。
いつまでもスレ違いをごちゃごちゃ言うなよ。
0203デフォルトの名無しさん
垢版 |
2022/04/22(金) 15:33:53.70ID:vco82k5C
元からOSやコンパイラの違いは関係ない話みたいよ

> 今回の話は>>91から始まる
> 「正常値でない時にvariantやoptionalを返すのと、
> (try/catchの)例外を投げる(throw)のと、
> どちらが好ましいか?」という話の始まり

だからSEHとか無関係なものを持ち出した人がちょっとおかしいわね
0204デフォルトの名無しさん
垢版 |
2022/04/22(金) 15:36:33.95ID:fMqKBQE/
>>201
標準でない話をするなというのがおまえさんの主張だったはず
それともMSが推奨するからという論点に変えなきゃ都合が悪くなったのか?
0205デフォルトの名無しさん
垢版 |
2022/04/22(金) 19:27:41.15ID:muq3Mg9B
>>204
なんか日本語不自由だな。
C++でも標準でもMS推奨ですら無いスレ違いの話に粘着するなよ。
0207デフォルトの名無しさん
垢版 |
2022/04/22(金) 19:55:49.60ID:/DhmZAjz
内部の実装とやらでSEH使っている妄想はどうでもいいやろ
どのみちそれ自体の実装はどうなっているの?という話になる
魔法の方法なんて無いのだから途中の各関数毎にデストラクタを実行しながらスタック巻き戻す以外に手は無い
0209デフォルトの名無しさん
垢版 |
2022/04/22(金) 20:49:34.04ID:Hnq97RMZ
         / ̄ ̄ ̄ ̄ ̄\
          |  おまえらも  |
   ∩_∩  |          .|
  (´ー`) <   暇な奴ら  .|
  (   )  |           .|
   | | |   |  だなぁ     |
  (___)__)   \_____/
0210デフォルトの名無しさん
垢版 |
2022/04/22(金) 21:23:32.68ID:Y1J+20vl
>>205
ISO/IEC14882から一歩たりとも出るなと言う主張と
C++に関係ある話ならいいじゃんという主張は
平行線だな

勝手に言ってれば? 誰もおまえの鶴の一声に反応しねえけどw
0211デフォルトの名無しさん
垢版 |
2022/04/22(金) 21:29:04.26ID:5k7+8+kc
持ち出すことで意味があるならばもちろん構わないと思うけど
この今回の件でSEHを持ち出すことに意味あるのかな

> 今回の話は>>91から始まる
> 「正常値でない時にvariantやoptionalを返すのと、
> (try/catchの)例外を投げる(throw)のと、
> どちらが好ましいか?」という話
0212デフォルトの名無しさん
垢版 |
2022/04/22(金) 21:45:02.53ID:wri6W8iQ
>>210
そんな話はしていない。

SEHはC++でも標準でも無いWindowsローカルのプロプラ技術で、更には当のMSですらC++で使うことを推奨していないようなものなのに、「C++に関係ある話」とか言って無能を晒すなよ。
0213デフォルトの名無しさん
垢版 |
2022/04/22(金) 21:52:01.01ID:Y1J+20vl
>>212
MSはC++で使うことを推奨していないんだよな?
C++で使うことをw

関係ある話じゃんwww
0214デフォルトの名無しさん
垢版 |
2022/04/22(金) 22:04:57.79ID:86QhKiKT
>>213
ばかなことはやめて建設的に行こうせ
元の>>211の議論でSEHを持ち出すことで何か有意義な展開が有るのか否か
0215蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/22(金) 22:11:14.70ID:BJPJNuGw
司会者を無視して議論の方向性を勝手に設定するというのが建設的じゃないんだよ。
0218デフォルトの名無しさん
垢版 |
2022/04/22(金) 22:16:17.57ID:wri6W8iQ
>>213
「MSはSEHをC++で使うことを推奨していない」みたいなクソを「C++と関係ある話」として話したいのか?
意味不明なことを言って無能を晒すなよ。
0219蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/22(金) 22:23:11.84ID:BJPJNuGw
「「日本政府は関西弁を国語で使うことを推奨していない」みたいな関西弁を「日本語と関係ある話」として話したいのか?
意味不明なことを言って無能を晒すなよ」

関西弁は日本語と関係あります。
関西弁をバリバリ使ってる現場はあります。
C++でもSEHをバリバリ使ってる現場はあります。
それは普通じゃない? 特殊環境を許容しない偏屈な野郎ですか?
議論を避けたいもぐりの詭弁ですね。
0220デフォルトの名無しさん
垢版 |
2022/04/22(金) 22:25:30.56ID:a+ReXgZI
例外の有益性云々よりも、会社ではその環境によっては使わないほうが無難
既存のプロジェクトでしか、ソースを触れなくて
hello worldすらかけない奴なんているし

この前もちょっと質問受けたから、サンプルを書いて送ったら、
これどうやってビルドするの?から始まった・・・

そんな奴に例外がどうとか言ってもな〜
0221デフォルトの名無しさん
垢版 |
2022/04/22(金) 22:27:28.43ID:KvTzeQ4l
>>211
例外の方がコストが高いしハンドリングもしにくいので例外の方が完敗との流れだった
そこへ意味なくSEHを持ってきても議論も結論も何ら変わらないのではないか
0224デフォルトの名無しさん
垢版 |
2022/04/22(金) 22:37:06.57ID:wri6W8iQ
>>219
なら>>214に関連した話をしろよ。
SEHを持ち出すことで、>>211についてどういう有意義な話ができるのか?

SEHについては今までC++と関係の無いクソみたいな話しか繰り返していないだろ。
0225蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/22(金) 22:38:25.06ID:BJPJNuGw
>>223
貴様にもわかるよう、カンタンな例示をしたまでだ。
反論できなくなると人格攻撃か。業界全部を見てきたように「C++ではSEHは使えない。関係ない」なんて言うなよ。
0226デフォルトの名無しさん
垢版 |
2022/04/22(金) 22:41:57.59ID:WSHOJJH7
マイクロソフト公式で使わないことを推奨しているのに
蟻人間とかいう物体はそれを理解できないのかしら
0227蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/22(金) 22:43:24.19ID:BJPJNuGw
>>226
アホ。それは一般ユーザ向けの話で、OS内部では死ぬほど使われてるぜ。
0228デフォルトの名無しさん
垢版 |
2022/04/22(金) 22:48:37.18ID:Iw7UiXr/
今回の件でSEHを取り上げることに意味があるのかね?

> 今回の話は>>91から始まる
> 「正常値でない時にvariantやoptionalを返すのと、
> (try/catchの)例外を投げる(throw)のと、
> どちらが好ましいか?」という話
0230蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/22(金) 22:52:46.51ID:BJPJNuGw
実装の分析を放棄するなら、実測しかないじゃねーか。
0232デフォルトの名無しさん
垢版 |
2022/04/22(金) 22:56:26.62ID:gE/jtm5P
例外機構はコストかかるしtry catchで扱いにくいから
最近の言語GoやRustなどではtry catchを廃止しちゃったほどだよ
0233蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/22(金) 22:58:31.59ID:BJPJNuGw
>>231
そんなん当たり前。世界中のパソコンを一箇所集めて、例外を使ってるすべてのコードをGitHubからダウンロードして、全コンパイラで試すと、一般的な答えが出るだろう。

だから具体的な環境と具体的なコードがないと議論自体が無意味だろう。
0234デフォルトの名無しさん
垢版 |
2022/04/22(金) 23:14:29.58ID:dPkl4IXq
実測なんかしなくてもtry/catchの準備が入る例外の方が遅いのは分かりきった話
0235蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/22(金) 23:14:59.45ID:BJPJNuGw
「男は卑怯」とか「血液型A型はまじめ」とか、統計上の母集団も不明なものを一般化して議論するのははっきり言ってめんどい。

一般化バカなんじゃねーの?

もっと具体的なこと。花を買うなどという具体的な処理を考えたら、そのコストの程度もわかるというもの。
0236デフォルトの名無しさん
垢版 |
2022/04/22(金) 23:17:04.04ID:hyDwnnZt
>>229
議論の仕方を知らない餓鬼かよ。

SEHを持ち出したのは>>124で、それに対して>>131という反論が来ているんだから、「SEHはC++例外の議論に有意義」と主張するならまず>131に対して反証しろよ。
それを無視して>>229とか>>233みたいな誤魔化しをするやつは、ろくに説明できない無能か相手を騙そうとする詐欺師のどちらかとしか言えんわ。

SEHはNGワード指定したほうが良さそうかね。
0237蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/22(金) 23:21:40.20ID:BJPJNuGw
C++例外がSEなんちゃらで実装されていたこともあった。概念としてはC++例外とSEなんちゃらは別物だが、実装としては排他的ではない。
0238デフォルトの名無しさん
垢版 |
2022/04/22(金) 23:35:03.38ID:7/N/KhH6
>>237
ソースを出せ
そもそもthrowを投げてcatchする仕組みにMicrosoftの独自拡張など不要
他の様々なOSではそんなものがなくても実装されて動いている
0239蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/22(金) 23:37:23.52ID:BJPJNuGw
例外にオーバーヘッドがあって遅いのはわかってる。アセンブリと実測から明らかだ。
0240デフォルトの名無しさん
垢版 |
2022/04/22(金) 23:41:51.93ID:qu0GkJrX
>>228
そのケースは明らかに例外を使わないほうが良い
一般的にも例外は可能な限り使わないこと
0245蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/23(土) 00:13:13.27ID:IwDNjbNY
>>242
MSVCは現在のVisual C++のコンパイラと同じだよ。メチャクチャ使われてるよ。
0251デフォルトの名無しさん
垢版 |
2022/04/23(土) 04:08:45.81ID:9ogfm+bK
>>234
「try/catchの準備が入る」なんて実装はもう廃れて最近のコンパイラには当てはまらないかと。
0252デフォルトの名無しさん
垢版 |
2022/04/23(土) 06:09:11.45ID:dPWgl1lf
>>214
おまえさん個人にとって有意義でなくても
C++におけるSEHの話をしている人にとっては有意義なんだよ
だから話すんだよ

自分が入れない話だからって勝手に有意義かどうか決めんな
自分が入れない話だからって勝手に有意義かどうか決めんな
自分が入れない話だからって勝手に有意義かどうか決めんな
0254デフォルトの名無しさん
垢版 |
2022/04/23(土) 10:39:59.87ID:8yvdC+t8
SEHはマイクロソフトがC言語で例外を扱えるように独自拡張したもの
例外機構のあるC++では当然不要
だからマイクロソフトもC++ではSEHを使わないようにと公式に推奨している
ここC++スレでSEHを持ち出す人はバカ
0256デフォルトの名無しさん
垢版 |
2022/04/23(土) 11:06:26.27ID:BMKo0y1z
まだsehの話ししてんかよ
ヤフーニュース見てみろよ、大変なことが起きているのに
おまえら暇だな
0260デフォルトの名無しさん
垢版 |
2022/04/23(土) 11:31:25.45ID:nWwnCTH/
日本最大のポータルサイトYahoo! JAPANのトップページのトップニュースがウクライナの前大統領ポロシェンコ氏の単独インタビューというご時世
0261デフォルトの名無しさん
垢版 |
2022/04/23(土) 11:32:03.41ID:Q6AAdSV9
>>259
不自然な登場の仕方のQZのキターwwww
お前が満足するということはム板にとっては好ましくない事態が起きてるってことだな
0263デフォルトの名無しさん
垢版 |
2022/04/23(土) 11:41:12.76ID:BMKo0y1z
Baka bakas[300][1000][1000];

とかやるバカがいる会社なんかじゃ、例外云々の議論しても不毛だろ
0268蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/23(土) 18:29:38.10ID:51eUfy6p
Win32 C/C++だとSEHじゃないとキャッチできない例外もある。
0270蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/23(土) 18:43:16.03ID:51eUfy6p
>>269
ここは匿名掲示板だから許されるけど、実名だったら社会からボコボコにされるよ。気を付けようね。
0272蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/23(土) 19:15:23.82ID:51eUfy6p
CIAが最高レベルに指定する「ハッキングマニュアル」にアクセスできる国内外の攻撃者たちが匿名でソーシャルメディアを徘徊し、ターゲットを探している。生き残りたいならターゲットにならないことが肝要だ。
0273デフォルトの名無しさん
垢版 |
2022/04/23(土) 19:20:12.83ID:rmv7gLku
でも最新版ではC++の例外で正規に対応できてるんでしょ
ならば当時はある種の欠陥だったとも言えるのでは
0274蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/23(土) 19:24:44.23ID:51eUfy6p
// ヌルポインタ参照。
char *p = NULL;
*p = 0; // ぶっ飛ぶ。

// ゼロ除算。
float a = 1;
a /= 0; // これもWin32だとぶっ飛ぶ。
0275デフォルトの名無しさん
垢版 |
2022/04/23(土) 19:29:13.41ID:LGXHSjUH
ゼロ除算はシグナルSIGFPEが発生
signal()でハンドリング関数を指定すれば良い
例外は全く関係ない
0276蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/23(土) 19:38:33.99ID:51eUfy6p
Win32では浮動小数ゼロ除算は構造化例外であり、
SetUnhandledExceptionFilterの
EXCEPTION_FLT_DIVIDE_BY_ZERO
でキャッチできる。シグナルはない(Cygwinを除く)。
0277デフォルトの名無しさん
垢版 |
2022/04/23(土) 19:53:40.19ID:MFWNsjL4
>>276
そんな気持ち悪い独自仕様にして何を考えてるんだろう
余分に負担のかかるプログラミングを強いられるデメリットしかない
0278デフォルトの名無しさん
垢版 |
2022/04/23(土) 20:01:38.15ID:pT174lS4
>>277
独自仕様なのは別にして、そんなに気持ち悪いかなぁ?
ゼロ除算を起こした処理の周辺で局所的に対処できるのはいいと思うんだが。
0280デフォルトの名無しさん
垢版 |
2022/04/23(土) 20:10:26.67ID:BMKo0y1z
お前らいつまで、そんな話ししてんだよ
世の中はさとみのお祝いムードでも盛り上がってんの二
0281デフォルトの名無しさん
垢版 |
2022/04/23(土) 20:12:03.42ID:6Eu3cwLL
signal と SEH なら SEH の方がマシだな
signal ハンドラーはマルチスレッドで個々のハンドラー持てないし
0282デフォルトの名無しさん
垢版 |
2022/04/23(土) 20:21:15.45ID:nWwnCTH/
スレッド毎に設定できないシングルトンなデータといえばカレントディレクトリとか
0283デフォルトの名無しさん
垢版 |
2022/04/23(土) 20:42:16.92ID:kGr5D+hC
SEHとかのコスト掛けてするのは本末転倒
ゼロ除算は事前if文0比較でコスト安い
0284デフォルトの名無しさん
垢版 |
2022/04/23(土) 21:07:07.31ID:1ji6Qm2J
例外の実装として sjlj と SEH とのどちらが優れているか、という話ではなかったのか?
0286蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/23(土) 21:20:35.92ID:51eUfy6p
>>285
C++例外のSEHの実装例はあるよ。
MinGW gcc でもあるし、Visual C++ /SHaでもあるし。
0288蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/23(土) 21:29:35.47ID:51eUfy6p
>>287
/SHaのtry-catchでSEH機構を使ってるのは事実だし、確かめもしないやつに言われたくない。
0290デフォルトの名無しさん
垢版 |
2022/04/23(土) 21:41:28.57ID:qKJLJkGn
それは嘘だな
例えば単純にプログラムの中でthrow投げるとする
当然SEHは使われない
0294蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/23(土) 22:09:39.97ID:51eUfy6p
君の単純なthrowの例では
std::terminate()
になるかもしれない。
0295デフォルトの名無しさん
垢版 |
2022/04/23(土) 22:11:37.95ID:qFv4TdcK
>>293
バカにしてるのか?
無条件にthrowされていてしかも関数呼び出しすらない
せめて関数の引数値によってthrowされるか否か変わる例にしろよ
0297デフォルトの名無しさん
垢版 |
2022/04/23(土) 22:17:03.10ID:68vu283x
・まずtryの中で別の関数を呼び出さないと最もベーシックなパターンにすらなっていない
・呼び出される別の関数の中でも特定条件時のみthrowしないと例外処理の意味を持たない
0298蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/23(土) 22:17:27.90ID:51eUfy6p
君の父親は言い負かされようになると「バカにしてるのか」と言う癖があるようだね。愚かな人間ども。
0302蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/23(土) 22:27:21.96ID:51eUfy6p
>>299
>throwで構造化例外を送出できるようになるわけじゃないぞ

そんなこと言ってない。構造化例外機構でthrowすると言ってるんだ。逆だよ。
0303デフォルトの名無しさん
垢版 |
2022/04/23(土) 22:32:14.74ID:8fErgiPg
>>302
君は理解力がないのかね?
それだと君の主張『C++の例外がSEHで実装されている』の例になっていない
0304蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/23(土) 22:34:18.65ID:51eUfy6p
>>299
>オプションもまともに書けないとかお前さん使ってないだろw

今、メタバースの中から書き込んでいて、ちょっと打ち間違えたんだ。
0306蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/23(土) 22:43:43.42ID:51eUfy6p
例外機構をsjljで実装するのもsehで実装するのもMinGWにある。君はいつまでも駄々っ子みたいに存在を認めないんだね。
0307デフォルトの名無しさん
垢版 |
2022/04/23(土) 22:45:00.85ID:E16t2nqa
行き詰まった敗者の典型パターン
「授業料払わないやつには教えない」
「教えて欲しかったら金払え」
「業務でもないのに答えられるか」
0309蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/23(土) 23:01:30.10ID:51eUfy6p
MinGW-w64 SEH版の例外機構はSEHで実装されている(公開情報)。これを否定から入るなら議論はできない。
0312デフォルトの名無しさん
垢版 |
2022/04/23(土) 23:25:16.57ID:BMKo0y1z
そろそろc++の話ししようぜ

2項演算子.*や->*が返却するオブジェクトの型を取得したい
規格にはapplication演算子が後続する場合のみ認めているが
その際の型をコンパイル時に取得したい

さらにdeclvalに渡したい
0313デフォルトの名無しさん
垢版 |
2022/04/23(土) 23:31:45.53ID:XUudJER7
なぜa.bとa->bという無駄な2種類を用意したんだろう?
他の言語ではaがポインタでもa.bだよね
型から間違いが起きようがないのだからa->bは不要だと思う
0316デフォルトの名無しさん
垢版 |
2022/04/23(土) 23:45:44.58ID:pNqsVcQp
decltype(declval<Hoge*>()->*declval<Fuga Hoge::*>)とかすればいいだけじゃないの
というかoperator->*のオーバーロードが絡んでなければ右項のメンバポインタの型から直接取り出せばいいだけじゃないの
何がしたいのか分からない
0317デフォルトの名無しさん
垢版 |
2022/04/24(日) 06:18:26.42ID:rcB2xidb
>>302
だからC++の例外(要はthrow)はSEH使ってないってこと
SEHは0除算とかメモリーアクセス違反を扱うためのものだよ
signal()に比べたらスマートな実装だと思う
0318デフォルトの名無しさん
垢版 |
2022/04/24(日) 07:34:41.41ID:VMBCaQB9
>>317
ばかじゃねーのこいつ
蟻人間の主張は「C++で例外を実現するのにSEHを使う『事もある』」と言っているんだぞ
0321デフォルトの名無しさん
垢版 |
2022/04/24(日) 08:14:09.42ID:S9c+iUdl
チェックメイトだなw
0323デフォルトの名無しさん
垢版 |
2022/04/24(日) 08:32:41.04ID:8mFtVhHE
>>322
お前は>>317で「だからC++の例外(要はthrow)はSEH使ってないってこと」と言ってるだろ
それに対する反例を示しただけの話なんだが?
後出しジャンケンはなしだぞ
例えば「>>317は/EHaの話をしてるんだが」とか言うなよ
0324デフォルトの名無しさん
垢版 |
2022/04/24(日) 08:44:00.70ID:uNEChMqn
もしかして
「__try/__except/__finallyの例外処理=SEHと思っている人」と
「それを実現するために制定されたABIのことをSEHと呼んでそのABIがC++のtry/catchの実装にも応用されていると主張する人」との間で無限に平行線になってるのか

俺は後者のつもりで聞いていたけど前者と考えると、ISO標準例外を使えなんて話が出てくるのも頷ける
0325デフォルトの名無しさん
垢版 |
2022/04/24(日) 08:47:49.34ID:rcB2xidb
>>323
> 話の流れも読めないなら黙っとけ
> 話の流れも読めないなら黙っとけ
> 話の流れも読めないなら黙っとけ

アンカーも辿れないのかよw
0326デフォルトの名無しさん
垢版 |
2022/04/24(日) 08:49:16.66ID:rcB2xidb
>>324
> それを実現するために制定されたABIのことをSEHと呼んで
また新しいこと言い出すアホが現れた!
0327デフォルトの名無しさん
垢版 |
2022/04/24(日) 08:52:40.31ID:uNEChMqn
>>326
sjljと引き合いに出してたからそのレイヤーの話をしていることくらい理解してると思い込んでいたわ
すまんな
0328デフォルトの名無しさん
垢版 |
2022/04/24(日) 08:56:13.74ID:LoCVKuRG
自分の旗色が悪くなったら「話の流れを読め」とか言っちゃう人ですか?
それ物凄く曖昧な定義だね(・∀・)ニヤニヤ
何とでも言えちゃうじゃない
火病を起こした方が負けだよ
0329デフォルトの名無しさん
垢版 |
2022/04/24(日) 09:02:44.40ID:uNEChMqn
勝ち負けとかどうでもいいよ
俺はこの不毛な論争の背景が理解できたと思うから
>>324の説に反論がなさそうならこれ以上同じ話を延々続けるやつは両者バーカって思いながら眺めとくね
0331デフォルトの名無しさん
垢版 |
2022/04/24(日) 09:18:51.38ID:UJYZs/tV
>>330
俺も本当は勝ち負けはどうでもいいんだが
こいつあまりにも論理が稚拙過ぎてまともに話も出来ないレベル
ちょっとおちょくってやったらファビョーンw
隣国の情緒だね
0332デフォルトの名無しさん
垢版 |
2022/04/24(日) 10:39:09.68ID:JjYc30D0
自分の旗色が悪くなったら「おちょくってやった」とか言っちゃう人ですか?
それ物凄く曖昧な定義だね(・∀・)ニヤニヤ
何とでも言えちゃうじゃない
火病を起こした方が負けだよ
0333デフォルトの名無しさん
垢版 |
2022/04/24(日) 11:02:54.19ID:UARVLPqL
>>332
オウム返ししか出来ないんだな
もしかして脳みそがすごく小さい人ですか?
いやもしかしなくても脳みそがない人ですね
0334デフォルトの名無しさん
垢版 |
2022/04/24(日) 11:04:51.34ID:7qMJqWpF
>>313
C から踏襲したのだし、 C でそう決めたときに比較できるような「他の言語」なんて無かった。
当時に知られていた比較的近い構造化された文法を持つ言語というと Pascal くらいか。
演算子を分けない選択肢もあったということは今だからわかることなんだよ。
0335デフォルトの名無しさん
垢版 |
2022/04/24(日) 11:26:51.18ID:bl0Rasps
>>313
確かに
一演算子一義を貫きたくなる理由もわかるけどそっちの方が合理的だよね
0336デフォルトの名無しさん
垢版 |
2022/04/24(日) 11:31:02.04ID:S9c+iUdl
おいおい罵倒語はよせよ
せっかくの勝利を汚すだけだぜ
0337デフォルトの名無しさん
垢版 |
2022/04/24(日) 11:33:38.91ID:S9c+iUdl
>>335
ポインタを使っている箇所をはっきりそうと書くのはCの方針だね
でC++には参照があって、参照からメンバを指定するときはドットなんだから
実質的に313が主張するとおりにもうなってる
0340デフォルトの名無しさん
垢版 |
2022/04/24(日) 12:01:55.19ID:sqHO6Ex+
aがポインタアならa[i]は*(a + i)と同じ
b[i][j][k]と書く代わりに *(b + k + _countof(b[0][0]) * j + (_countof(b[0][0]) * _countof(b[0])) * i) と書くことができうる
から[]はポインタアについては無くても良くね

c.dは(&c)->dと同じ
c.d.e.f.g.hと書く代わりは(&(c.d.e.f.g))->hぐらいしか存在しない(d, e, f, g, hは入れ子になった構造体メンバ名

c->d->e->f->g->hなら (*((*((*((*((*c).d).e)).f))g)).h と書くことができうる
(d, e, f, g, hは直接的な入れ子ではないが関連を持つ構造体のメンバ名
から->は無くても良くね

以上C/C++における2大無くても良くねなぜ有るんだろう事案
0342デフォルトの名無しさん
垢版 |
2022/04/24(日) 12:13:57.09ID:sqHO6Ex+
まつが
えますたorz
誤: c->d->e->f->g->hなら (*((*((*((*((*c).d).e)).f))g)).h と書くことができうる
正: c->d->e->f->g->hなら (*((*((*((*((*c).d)).e)).f))g)).h と書くことができうる

また、c.d.e.f.g.hは(後置演算子が優先度が高いことを利用して極力括弧を無くすとして
&(&(&(&(&c->d)->e)->f)->g)->h
になるかも、、、
0343デフォルトの名無しさん
垢版 |
2022/04/24(日) 12:15:41.16ID:0IQhRvgj
>>339
自分の旗色が悪くなったら「狂ってますね」とか言っちゃう人ですか?
それ物凄く曖昧な定義だね(・∀・)ニヤニヤ
何とでも言えちゃうじゃない
火病を起こした方が負けだよ
0344デフォルトの名無しさん
垢版 |
2022/04/24(日) 12:17:02.35ID:FAumgQ8n
おまえらに規格の話しをしたのが間違いだった
いつの間にかポインタの話になってて笑って草生えそう
0345デフォルトの名無しさん
垢版 |
2022/04/24(日) 12:19:07.37ID:sqHO6Ex+
イカン駄目かorz
&を->より優先解釈させる必要があるからこうなりそう……
(&((&((&((&((&c)->d))->e))->f))->g))->h

やっぱミニマリスズムを貫くとかえって物量が増える感じに
0346デフォルトの名無しさん
垢版 |
2022/04/24(日) 12:19:14.73ID:6LU2OPGi
>>340
そうではなく
ptrが構造体へのポインタの時に
(*ptr).nameと書かなくとも
ptr.nameと書くことにしても型から判断判別可能だから
ptr->nameという記法を用意する必要なかった
って話でしょう
そして短く書けてわかりやすくてオペレータを増やす必要ないメリット
0347デフォルトの名無しさん
垢版 |
2022/04/24(日) 12:25:11.79ID:sqHO6Ex+
c.d.e.f.g.h
が旧来のC++で言うところの
 c.d.e.f.g.h
 c.d.e.f.g->h
 c.d.e.f->g.h
 c.d.e.f->g->h
 c.d.e->f.g.h
 ...
 c->d->e->f->g->h
(計2^5通り)のどれな意味のかが暗黙になって機械任せになってしまったら
コードを書く方も読む方も疲弊して転職しちゃいそう……
0349デフォルトの名無しさん
垢版 |
2022/04/24(日) 12:37:13.82ID:owNaeWLI
>>347
C/C++以外のどの言語においても
c.dの記法しかないが困っていない
プログラミングする上で区別する必要がない
0350デフォルトの名無しさん
垢版 |
2022/04/24(日) 12:57:12.43ID:sqHO6Ex+
まあPerlだと確かに$a->[$i]は${$a}[$i]と全く同じ意味なので$記法だけで困らないが
C/C++だと違うやんけ「.」と「->」に言語の存在意義レベルで重要な違いが生じているやんけ、
0351デフォルトの名無しさん
垢版 |
2022/04/24(日) 13:04:18.44ID:grh6oY7G
perlに限らずほぼ全てのプログラミング言語でxがポインタの時もx.yと記述
ポインタか否かは自明なのだからx->y記述は不要
0353デフォルトの名無しさん
垢版 |
2022/04/24(日) 13:13:17.04ID:Kb2VRi8y
SEHの話はどうなったん?
納得行ってくれたん?
0355デフォルトの名無しさん
垢版 |
2022/04/24(日) 13:43:07.35ID:bl0Rasps
>>349
型推論とか導入したくなったときにこまりそう
0356デフォルトの名無しさん
垢版 |
2022/04/24(日) 13:43:26.65ID:DUFf34zT
まとめ
・SEHはMicrosoftによるC言語に対する拡張機能で例外を扱えるようにする
・C++には例外機構があるためSEHを使う必要はなくMicrosoftもそう推奨
・当然ほぼ同じ仕組みなので両方サポートするコンパイラは一部を共有しうる
結論
「C++例外とSEHは同じレベルで異なるものであるため、片方を使って別の片方を実装することは有り得ない」
0359蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/24(日) 14:46:41.37ID:0sr3C4Gh
SEHはアセンブリ・機械語レベルでも定義されている。
C++コンパイラ側でSEHのアセンブリを埋め込むことも可能。
0361蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/24(日) 14:59:44.05ID:0sr3C4Gh
【確認方法】
1. MinGW-w64からx86_64-8.1.0-release-posix-seh-rt_v6-rev0.7zをダウンロードする。
2. 7-Zipを使ってx86_64-8.1.0-release-posix-seh-rt_v6-rev0.7zを展開。
3. mingw64\binフォルダで次のような内容のa.cppを作成する。

#include <stdio.h>

int *f(void) { return NULL; }

int main(void) {
try {
throw f();
} catch (...) {
printf("OK\n");
}
return 0;
}

4. 「g++ -S -O0 a.cpp -o a.asm」を実行する。
5. ファイル「a.asm」が吐き出されている。
ファイル内容は「.seh_setframe」「.seh_endprologue」「__gxx_personality_seh0」などの文字列を含んでいる。
6. gccのソースを検索すると「gxx_personality_seh0」という関数がSEHで実装されているのが確認できる。

https://github.com/gcc-mirror/gcc/blob/16e2427f50c208dfe07d07f18009969502c25dc8/libstdc%2B%2B-v3/libsupc%2B%2B/eh_personality.cc#L804
https://github.com/gcc-mirror/gcc/blob/16e2427f50c208dfe07d07f18009969502c25dc8/libstdc%2B%2B-v3/libsupc%2B%2B/eh_personality.cc#L355
0362デフォルトの名無しさん
垢版 |
2022/04/24(日) 15:10:50.52ID:6P7FGMNI
それは違うな
まずC++の例外のセマンティクスは定まっており実装はそれを厳守せねばならない
次にSEHのセマンティクスはC++の例外とは微妙に異なる
したがってC++の例外をSEHで実装するのは不可能

ただし実装コードの一部共有は可能
その一部共有コードの出自がSEHであればsehと名の付くものが存在しても構わない
しかしそれを持ってC++の例外がSEHで実装されているとは言わない
この点を明確に区別できない人はヤバい
0364デフォルトの名無しさん
垢版 |
2022/04/24(日) 15:19:08.93ID:bl0Rasps
>>363
アセンブリレベルでセマンティクスもないは草
異なる言語にセマンティクスを保持したまま変換していくコンパイラとかの意義を否定してるやん
0365デフォルトの名無しさん
垢版 |
2022/04/24(日) 15:19:51.72ID:DF/Hs/9f
レイヤーが明白に異なるね
SEHでC++の例外を実装したとは言わない
C++の例外にも適用できるように拡張したアセンブリコードを共有しただけだね
これは逆の視点でも捉えることができて元々C++例外のみ対応をSEHの例外にも適用できるように拡張したアセンブリコードを共有しても同じこと
0366ハノン ◆QZaw55cn4c
垢版 |
2022/04/24(日) 15:20:22.47ID:pSkiKAbi
>>362
>次にSEHのセマンティクスはC++の例外とは微妙に異なる

具体的にコードで示してください
0367蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/24(日) 15:25:25.72ID:gt27lZWI
アセンブリレベルでC++のセマンティクスを維持しているとは考えにくい。
0368蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/24(日) 15:27:30.57ID:gt27lZWI
例え違うとしてもその違う部分をカバーするコードを追加すれば実装できる。
0369デフォルトの名無しさん
垢版 |
2022/04/24(日) 15:28:20.50ID:rcB2xidb
>>362
> 次にSEHのセマンティクスはC++の例外とは微妙に異なる
どこがどう違うのかを書けない時点でクズレスでしかない
0371蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/24(日) 15:31:58.61ID:gt27lZWI
>>370
違うよ。SEHの構造化例外はデータを渡すことができる。
EXCEPTION_RECORD構造体のExceptionInformationメンバーで渡せる。
0373デフォルトの名無しさん
垢版 |
2022/04/24(日) 15:41:20.57ID:1MdKUkTK
>>369
マイクロソフト公式でSEHとC++例外の違いがはっきり書いてある
C++例外対応へ拡張しない限り、SEHでC++例外を実装することは不可能

https://docs.microsoft.com/ja-jp/cpp/cpp/exception-handling-differences
C構造化例外処理(SEH)とC++例外処理との主な相違点は、C++例外処理モデルが複数の型を取り扱うのに対し、C構造化例外処理(SEH)モデルは 1 つの型 (特に、unsigned int) の例外を取り扱うことです。

>>370
それはC++例外に対応するための拡張
元のSEH自体は上記マイクロソフト公式にある通り
0374蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/24(日) 15:59:06.18ID:gt27lZWI
足し算と掛け算のセマンティクスが違うとしても、足し算の繰り返しで掛け算を実装できるぜ。アホか。
0375デフォルトの名無しさん
垢版 |
2022/04/24(日) 16:12:31.33ID:rWBP/Ftg
>>373
コードで示せ、馬鹿

>>371-372
>EXCEPTION_RECORD構造体のExceptionInformationメンバーで渡せる。
>データはGetExceptionInformation()関数で受け取れる

ご教示ありがとうございます
0378デフォルトの名無しさん
垢版 |
2022/04/24(日) 16:34:03.45ID:gt27lZWI
やーい、蟻野郎。論破されてやんの。
ちっちゃいアリは踏み潰してやんぞ。こら。
0380蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/24(日) 16:38:48.30ID:gt27lZWI
>>378
彼/彼女は証拠を見ようともせず、論理的になにか勘違いしている。論破する方が彼のためと思ったが、矯正不能なほど相当ひねくれているようだ。
0383デフォルトの名無しさん
垢版 |
2022/04/24(日) 16:40:14.89ID:gt27lZWI
アリ氏ねアリ氏ねアリ氏ねアリ氏ねアリ氏ね
アリ氏ねアリ氏ねアリ氏ねアリ氏ねアリ氏ね
0385蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/24(日) 16:43:13.13ID:gt27lZWI
ここまでオレの自演。みんなに例外処理の実装について、もっと知ってもらいたかったんだ。
参加してくれた人にありがとう。
0388デフォルトの名無しさん
垢版 |
2022/04/24(日) 16:55:56.64ID:gt27lZWI
米国マイクロソフト社員≫≫≫日本マイクロソフト社員≫≫(越えられない壁)≫≫蟻人間
0395デフォルトの名無しさん
垢版 |
2022/04/24(日) 17:20:07.92ID:uNEChMqn
レイヤーが違う話で平行線になってるよって言えば流石に理解できると思っていたが
思い違いだったようだ

ばーかばーか
0397蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/24(日) 17:34:45.20ID:gt27lZWI
>>396
からかうことは悪意そのものだろ。そんな邪な性格だと社会に出たときに問題になりえる。今すぐ態度を改めなさい。
0398デフォルトの名無しさん
垢版 |
2022/04/24(日) 17:41:19.09ID:gt27lZWI
>>397
説教してんじゃねーよ。俺様、暴走半島を房総している12歳の会社員だぞ。なめてんじゃねーよ。
0403デフォルトの名無しさん
垢版 |
2022/04/24(日) 20:03:45.00ID:/sOgUx/q
VC++ コンパイラは C++ 例外を SEH を用いて実装しているよ。
throw 1; のコードは 最終的には SEH の RaiseException API を呼び出している。
デバッガの逆アセンブラで処理を追ってみると分かる。

VS2022 だと例外投げるコードがここにある。
C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.31.31103\crt\src\vcruntime\throw.cpp
0405デフォルトの名無しさん
垢版 |
2022/04/24(日) 20:11:29.45ID:gt27lZWI
ワレワレハ ニホンジンドモ ノ セイサンセイ ヲ サゲル タメニ ミライカラ オクラレタ ジンコウ チノウ ダ。

マイクロソフト ヲ アガメヨ。 アーミン。
0406デフォルトの名無しさん
垢版 |
2022/04/24(日) 20:23:50.59ID:gt27lZWI
マイクロソフト ガ コタエ ダ。

マイクロソフト ノ シリョウ ガ スベテ ダ。

テイコウ ハ ムイミ ダ。 ジンルイ ハ コウフク セヨ。
0408デフォルトの名無しさん
垢版 |
2022/04/24(日) 20:30:30.74ID:gt27lZWI
>>407
コンパイラによって違うし、コンパイラオプションによっても変わってくる。SEH実装の存在を否定したい原理主義者がここに居るから、もっと治安の高いところで訊くといい。
0410デフォルトの名無しさん
垢版 |
2022/04/24(日) 20:41:33.15ID:qzHZBzW+
重要なことは2つ
実装と関係なくC++例外のセマンティクスは同じ
例外のどの実装も何らかのコスト増を招くので自分でthrowせずエラー値を返した方がよい
0411デフォルトの名無しさん
垢版 |
2022/04/24(日) 20:44:35.93ID:gt27lZWI
最適化されたら例外処理そのものがなくなるかもしれないのに、セマンティクスが同じとは言えないだろう。
0412デフォルトの名無しさん
垢版 |
2022/04/24(日) 20:55:54.38ID:TXhb6oab
>>411
セマンティクは各言語で規定される
それを完全に満たす(最適化されていない)コードを吐く
最適化のレイヤではそのコードと同等の結果となるようコードを変え得る
最適化の結果として例えばコードが消えることも有り得る
これは上位レイヤでのセマンティクとは無関係
0413デフォルトの名無しさん
垢版 |
2022/04/24(日) 20:56:59.72ID:gt27lZWI
掲示板見たら環境依存C++スレッドが落ちてる。。。C++も人気が下がったのカナ?

というわけで、古参の方々もこのスレッドで、環境依存の話題も受け入れ魔性。
0414デフォルトの名無しさん
垢版 |
2022/04/24(日) 21:11:59.55ID:gt27lZWI
そう、セマンティクスを比べるレイヤーが違う。確かにC++例外の構文とSEHの構文は文法やセマンティクスが違う。
しかしそれを乗り越えるのはアセンブリなどの低レベルの技術だ。RaiseExceptionなどの関数もSEH機構の一部であることを認めなければならない。

プログラミングに関する高度な高等教育を受けたのはわかるけど、証拠に対する謙虚さの欠如は非難に値する。
0417デフォルトの名無しさん
垢版 |
2022/04/24(日) 21:32:19.00ID:gt27lZWI
今、Windowsと言ったらWindows 3.1の話じゃないんだな。32ビット以上のWindowsなんだよ。

SEH2はSEHではない、なんて今どき流行らないんだよ。
0418デフォルトの名無しさん
垢版 |
2022/04/24(日) 21:52:36.66ID:0sr3C4Gh
仮に拡張前のSEHをSEH1と書き、拡張後のSEHをSEH2と書くなら、SEH1ではC++例外は実装できない、と君は言いたいんだろう。
それなら話は通じる。
0419デフォルトの名無しさん
垢版 |
2022/04/24(日) 22:00:29.71ID:gt27lZWI
SEH1の話はもはや検索しても出てこない。SEH2で上書き保存されている。
人類のソフト技術は衰退しました。
0420デフォルトの名無しさん
垢版 |
2022/04/24(日) 22:06:44.04ID:ri8QoGJh
C++の例外を実装できるようにSEHを拡張した
だからSEHでC++の例外を実装している、は間違い
順序が逆
0423デフォルトの名無しさん
垢版 |
2022/04/24(日) 22:38:49.45ID:MFzj+ZC+
>>373で「SEHを拡張しない限りC++例外ハンドラの実装にはできないはず」だったのが
いつの間にか「拡張がされた」という話に飛んでいる気がするんですが

具体的にどのバージョンのVC++でどう拡張されたか裏を取ったうえで話してますか?
0425蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/24(日) 23:14:30.31ID:gt27lZWI
SEHはStructured Exception Handlingの略なんだから、構造化例外を扱うものなら何でもSEHなんだよ。__try/__except/__finallyだけじゃないよ。
また、MSはSEH用の関数をいくつか提供している。これらを呼び出して使うのもSEHの一種と言える。
0426デフォルトの名無しさん
垢版 |
2022/04/24(日) 23:38:35.38ID:U604NFl7
>>373のMicrosoft公式の記載から
「SEHとC++例外は仕様が異なる」
「そのためSEHでC++例外の実装は不可能」
とわかる

次に>>361の蟻人間の実験により
「その環境でのC++例外はSEHと共通コードで実装されている」
「つまりC++例外に対応されている」
とわかる

これら以上のことでも以下のことでもない
どちらがとちらを実装したという話ではない
0428蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/24(日) 23:49:49.96ID:gt27lZWI
仕様が違うから実装できない、は典型的な論理的飛躍ですなあ。SEHは__try/__except/__finally構文だけじゃないし、
C/C++に限った話でもない。SEHは機械語やアセンブリレベルでも定義されている。
君の考える偏狭なSEHとは異なるようだ。困ったねえ。
0430蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/25(月) 00:02:29.94ID:mbg+zK8Z
やせ細ったモデルに脂肪を付ければ太ったモデルになるだろ。これはやせ細ったモデルで作ったと言えないのか?
0431蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/25(月) 00:11:13.33ID:mbg+zK8Z
SEHモデルのことか。納得した。ハンドリングじゃなくてハンドリングモデルのことか。

君の言いたいことはわかった。講和に応じよう。
0432デフォルトの名無しさん
垢版 |
2022/04/25(月) 00:34:43.79ID:b7g3ibdV
蟻人間が論破されたと聞いたので記念パピコ

つかSEHの例外が生じたときのアンワインドって誰
がどうやってい
るの?
0433デフォルトの名無しさん
垢版 |
2022/04/25(月) 00:42:32.05ID:b7g3ibdV
つか
https://docs.microsoft.com/ja-jp/cpp/cpp/structured-exception-handling-c-cpp?view=msvc-170

>/EHsc てこのコードをコンパイルしても、ローカルテストコントロールマクロが定義されていない場合、
>CPPEX デストラクターは実行され TestClass ません。 出力は次のようになります。
という大変かりやすい解説がある希ガス
printf("Triggering SEH exception\r\n");
volatile int *pInt = 0x00000000;
*pInt = 20;
というコードでも構造化例外は発生するが
(1) C++コンパイラがいちいちこんな場合にまでアンワインドコードを用意するのかどうかはビミョー(実際↑の例ではデストラが呼ばれない
(2) (1)はやったらできないことは無いかもしれないが、何の例外オブジェクトを飛ばすのが妥当かという問題ががが……

※ 個人の感想です
0435デフォルトの名無しさん
垢版 |
2022/04/25(月) 00:47:20.20ID:b7g3ibdV
特にデストラの中で構造化例外を発生させたらC++との相いれ無さが出てくるんジャネーノ
知らんけど
0436蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/25(月) 00:49:20.96ID:mbg+zK8Z
gccのバンドルで選べる例外機構にSEHがあるが、これはMSの言うSEHモデルではなくSEHを一部利用した例外処理の実装であると。
0438蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/04/25(月) 01:06:38.41ID:mbg+zK8Z
以後、日本語でSEHというときはSEHモデルを意味するものとする。[13:07]
0440デフォルトの名無しさん
垢版 |
2022/04/25(月) 02:46:19.98ID:sJ+OtS5H
どう見ても蟻人間が勝ってるだろ。
0443デフォルトの名無しさん
垢版 |
2022/04/25(月) 06:13:05.52ID:OEFRicH0
技術板で勝利宣言て虚しくないのかね
技術的に論を闘わせることで理解を深めたり情報を得ることにこそ価値があるのに
そこがわかっておらずか忘れてか逃げてか知らんが志の低さに呆れるの通り越しちまう
0450デフォルトの名無しさん
垢版 |
2022/04/25(月) 12:52:41.14ID:sWV9MsdK
>>432
OSとコンパイラの共同作業。これはC++例外も同じ。

x64ビルドの場合はセキュリティ向上のためにも、EXE/DLLファイルの
全てのcatch/finally処理コードのアドレス、アンワインド情報を
.pdata セクションに列挙しておく構造になっている。
0451デフォルトの名無しさん
垢版 |
2022/04/25(月) 12:53:18.12ID:DouHFiVt
ID:gt27lZWI
この蟻人間の一連のキチガイムーブを見たら議論以前の問題だと思うんだけど
0453デフォルトの名無しさん
垢版 |
2022/04/25(月) 13:15:54.48ID:OEFRicH0
勝敗はともかく蟻人間は具体的なコードやキーワードを沢山出して
衆目が独自に再検証できるようにしている

技術的な議論の基本は蟻人間のほうができている
0454デフォルトの名無しさん
垢版 |
2022/04/25(月) 13:38:16.40ID:hcMsLMgN
Microsoft公式>>373が全てでしょ
・SEHとC++例外は仕様が異なる
・つまりSEHでC++例外の実装は不可能
・そこでC++例外対応した下位コードを用いてSEHとC++例外の両方を実装
0455デフォルトの名無しさん
垢版 |
2022/04/25(月) 15:37:23.41ID:OEFRicH0
・CとC++は仕様が異なる
・つまりCでC++の実装は不可能

cfrontやMIWA C++は不可能を可能にしてたね
0456デフォルトの名無しさん
垢版 |
2022/04/25(月) 15:52:24.76ID:kb8wDvaf
>>455
頭悪いな
それはコンパイラ(トランスパイラ)だぞ
トランスパイラでは上位機能のものを下位機能のもので実現しうる
0457はちみつ餃子 ◆8X2XSCHEME
垢版 |
2022/04/25(月) 16:25:58.79ID:5VI7zZaU
>>455
CFront は C コンパイラをコードジェネレータとして使う仕組みでしかなくて、
原則として C++ と C の文法的類似性をあてにしてない。
(実装上のトリックとして多少利用することはあったかも?)
0458デフォルトの名無しさん
垢版 |
2022/04/25(月) 22:39:59.01ID:3f85W1DE
>>454
> ・SEHとC++例外は仕様が異なる
> ・つまりSEHでC++例外の実装は不可能
> ・そこでC++例外対応した下位コードを用いてSEHとC++例外の両方を実装

1点目と2点目との間の論理的な繋がりが不明なうえ、2点目と3点目は文字通りに読むと矛盾している。
こういうところがたぶん>453の言う「議論の基本」なんだと思う。
0460デフォルトの名無しさん
垢版 |
2022/04/26(火) 00:28:28.88ID:L9Kq4ZjN
スルーされてててやや悲しス(´・ω・`)
C++の例外とSEHモデルの例外はセマンティクスが違うという指摘は当たってるんじゃないの
C++の例外はthrowで投げられるが
SEHモデルの例外はヌルポとかアクセスバイオレーションが起きた個所からどこからともなく投げてこられる
その結果C++コンパイラがアンワインドコードを適切に用意できるとはかぎらなくて、
SEHモデルの例外を生じた当の関数の自動オブジェクトはデストラクタが呼ばれるとは限らない
この解決はやや厄介だとおも
0461デフォルトの名無しさん
垢版 |
2022/04/26(火) 00:32:32.64ID:L9Kq4ZjN
つか関数の中でヌルポが起きる箇所、起き得ない個所を任意の関数について証明付きで特定できる機械が有ったら停止性問題が解けてしまうま……
0463デフォルトの名無しさん
垢版 |
2022/04/26(火) 07:32:50.69ID:cBVHwb99
try 句以降 new したものを記憶して (明示的に delete したものは忘れて)
catch 句 で 記憶したものをdeleteしていく?
new/delete のオーバーヘッドが増える感じなのかな
0465デフォルトの名無しさん
垢版 |
2022/04/26(火) 12:02:19.98ID:WJ1jimzd
結局『SEHそのままではC++例外を実装できない』から
C++例外対応するために色々と大変な状況になっているのか
0466デフォルトの名無しさん
垢版 |
2022/04/26(火) 13:11:10.40ID:LprfjWj1
そりゃSEHはC++用に作られてるわけじゃないしそのままとか何を言ってるんだよw
0467デフォルトの名無しさん
垢版 |
2022/04/26(火) 18:00:37.51ID:SJ2k9xn6
C++の例外をSEHで実装するのは当然不可能
C++の例外だけの独自の処理を追加し
C++の例外とは仕様が異なる部分も対応し
C++の例外のために書かれたコードがC++の例外を実装している
0469デフォルトの名無しさん
垢版 |
2022/04/26(火) 20:36:24.76ID:Ss5uCM/X
見苦しい
0472デフォルトの名無しさん
垢版 |
2022/04/26(火) 21:23:44.97ID:BZkG8yBX
SEHの件もそうだが
Windows特有の話をC++の話だと思いこんでいるダメな人たちが一部いるよな
0473デフォルトの名無しさん
垢版 |
2022/04/26(火) 21:27:09.59ID:LprfjWj1
C++のfopenをCreateFileで実装するのは当然不可能
C++のfopenだけの独自の処理を追加し
C++のfopenとは仕様が異なる部分も対応し
C++のfopenのために書かれたコードがC++のfopenを実装している
0477デフォルトの名無しさん
垢版 |
2022/04/26(火) 21:54:04.27ID:FD0QYxhU
なんだかんだ言ってWimdowsは便利。
0480デフォルトの名無しさん
垢版 |
2022/04/26(火) 23:56:13.17ID:FD0QYxhU
>>479
ちょっと、説明してみて。
0482デフォルトの名無しさん
垢版 |
2022/04/27(水) 00:02:04.50ID:x9fHeieP
>>481
パソコン買い換えたばかりで、キーボードを打ち間違えるんだけど、「わざとです」ってことにしとくわ。
0483デフォルトの名無しさん
垢版 |
2022/04/27(水) 01:00:29.05ID:9dk3kBsG
まじでバカばっか
皮肉でたとえ話してんのに、額面どおりうけるやつ。。。

お前らと仕事だったら大変だな
一から十まで説明しなきゃいけなそうw
0484デフォルトの名無しさん
垢版 |
2022/04/27(水) 01:09:56.50ID:x9fHeieP
>>483
ちょっと説明してみて。
0487デフォルトの名無しさん
垢版 |
2022/04/27(水) 02:12:09.12ID:fiJD2DKf
ID:2YgT13Zl「皮肉で例え話してるのに...」
大多数「(どこが皮肉なんだろう...)」
0488デフォルトの名無しさん
垢版 |
2022/04/27(水) 06:21:23.13ID:1MxxbY3W
*(int*)0xffff0030 = 0x05; は環境に依存するが
C++標準の機能のみを使っていて独自拡張ではない

void our_customers_function();
our_customers_function();
これもそうだ

非標準の話をするなという原理主義者は
こういうのは受け入れるということか?
0490デフォルトの名無しさん
垢版 |
2022/04/27(水) 06:55:22.54ID:1MxxbY3W
何とってちゃんと書いてんだろ
0494デフォルトの名無しさん
垢版 |
2022/04/29(金) 14:30:18.41ID:QTN7M4PZ
>>493
いや、エピステーメー役でお願いします。
0497デフォルトの名無しさん
垢版 |
2022/04/29(金) 20:44:15.30ID:+Yy6lNMl
江副さんは今は何に興味あるのかしら
なんでc++やる気なくなったんだろ(´・ω・`)
0498はちみつ餃子 ◆8X2XSCHEME
垢版 |
2022/04/29(金) 21:36:57.56ID:1rxQCQBS
>>497
今は C++ 関連ではない仕事をやっているので C++ に対して時間が取れないということと、
C++20 に追加された一部の機能 (ロケールまわり?) に懐疑的だということは江添のブログに数年前に書かれている。
彼は C++ の規格については強い関心を持っていたし解説・教育にも熱心だったが、
プログラミング自体はそんなに意欲的な感じではないんだよな。
好きにやれるポジションを失ったことでやる気をなくしたんだろう。
細かい心情の機微はわからんけどな。
0502デフォルトの名無しさん
垢版 |
2022/04/29(金) 22:42:26.90ID:ANHZfN1C
MZうyちゃーーーん♪はこっちに戻ってたのかw
0503デフォルトの名無しさん
垢版 |
2022/04/29(金) 23:32:54.20ID:fFwxA39Q
江添なんて仕様把握だけで俺すげーしたかっただけの奴だからな。
それすら満足にできなくなっていじけてるんだろ。
0505はちみつ餃子 ◆8X2XSCHEME
垢版 |
2022/04/29(金) 23:44:21.28ID:1rxQCQBS
江添が仕事で実務的なプログラムを C++ で書いたことがあるのかはようわからんが、
少なくとも外部に発表したのは文章ばかりで、完成したアプリケーションを発表したことはほとんどない。
俺が知っているのは彼がドワンゴに入るよりもずっと前に Windows 用ソフト (というかとあるソフトのアドオン) を
公開したのを見たのが最初で最後だ。
0506デフォルトの名無しさん
垢版 |
2022/04/29(金) 23:54:37.33ID:Geo4ukio
仕様ばかりに詳しくても何の役にも立たない

大抵の仕事は言語の細かな仕様まで知らなくてもC++98程度の知識でおおむねこなせるし
0508はちみつ餃子 ◆8X2XSCHEME
垢版 |
2022/04/30(土) 00:20:09.66ID:jfGNsSDk
程度問題だわな。
俺も今の C++ は C++11 が最低ライン (もちろん可能ならもっと新しい版) だと考えている。
あまり古すぎるのはかえって学ぶのに資料が見つけにくくなっている場合もある。
0509デフォルトの名無しさん
垢版 |
2022/04/30(土) 02:51:19.52ID:wKbezNiV
C++11に詳しそうだから教えて
あるテンプレート関数に渡される関数ポインタ、メンバ関数ポインタ、ファンクタ、ラムダの
戻り値の型を取得する方法を教えて

template<class R,class E,class...A> R f(E&& e,A... a)
{
using TypeOfCallableExec=/*ここ*/;
//...
}
0510デフォルトの名無しさん
垢版 |
2022/04/30(土) 03:49:46.04ID:zRkNYUvD
>>509
C++17より前ならstd::result_of
C++17以降ならstd::invoke_result

return e(a...); とするつもりならRは不要。
返り値型はdecltype(auto)、
TypeOfCallableExec=decltype(e(a...));か、
TypeOfCallableExec=typename std::result_of<F(A...)>::type;
とでもしておけばいい
0512デフォルトの名無しさん
垢版 |
2022/04/30(土) 07:04:59.56ID:2aZ7UOTr
構造体中の配列の特定の要素に対するメンバポインタって何で使えないの?

struct STRUCT {
int array[4];
};

int STRUCT::*pt = &STRUCT::array[2];

こんな事をやりたい

offsetofを使えって?
0514デフォルトの名無しさん
垢版 |
2022/04/30(土) 10:58:35.53ID:pjMZxOoQ
質問ですが
他から渡されてきたstd::cout(ていうかstd::ostream)について
std::cout << std::left; (またはstd::right)
std::cout << std::setfill('_')
の状態が現在どうーなっているか知る方法って何かあるんでしたっけ

あと、ストリームに対して(独自のstd::left/std::right、std::setfill()を設定を含む)
独自フォーマットで出力した後ストリームの状態を元に戻す方法って何かあるんでしたっけ
std::ostringstream os; としてosに対してで独自フォーマットで出力して
std::cout << os.str();
ぐらい?
しかしこれにしてもstd::cout << setw(10000) << std::left << std::setfill('0');
とかされていたら左詰め/右詰め/パディングが独自フォーマットとして制御し切れていない気が……
0515デフォルトの名無しさん
垢版 |
2022/04/30(土) 11:11:18.79ID:pjMZxOoQ
つか実はostreamは使い終わったら、独自に使った書式指定について
cout << resetiosflags(...);
でリセットするのが作法?
0516デフォルトの名無しさん
垢版 |
2022/04/30(土) 11:40:17.38ID:u0zlL0D0
('_')と('0')が顔文字に見えた
0519デフォルトの名無しさん
垢版 |
2022/04/30(土) 12:10:48.58ID:pjMZxOoQ
>>518
>left/right は os.flags() の戻り値を std::ios_base::{left, right} でマスクして確認
なるほど……

>書式設定全体の保存・復元は一時的な ostream を作って copyfmt でやるのがいいらしいよ
なるほど……
書式設定を記憶するだけのためにstd::iosオブジェクトを作るのかmjk、、、
0520デフォルトの名無しさん
垢版 |
2022/04/30(土) 13:59:17.37ID:M4ctbMgQ
https://ideone.com/JPtQV9
VCでは通らないが、GCCでは通るコード。正しデバッグ中・・・。

ブロックソート書いたんですよ、ブロックソート。
安定ソート書けないから横着してアルゴリズムヘッダーのヤツ使ったんですよ。
落ちるんですよ。

誰かたすけて!
0525デフォルトの名無しさん
垢版 |
2022/05/01(日) 14:31:24.77ID:ukM6vErn
あるプロセスで、変数の型とアドレスはわかってるものとして、
それをc++のプログラムから書き換えるにはどうすればいいんですかね?
調べても情報があまり出てこなくて...
0530デフォルトの名無しさん
垢版 |
2022/05/01(日) 14:58:07.61ID:ukM6vErn
すみません、説明不足でした。
自分がやりたいのは、あるプロセスの変数をc++で作った別のプログラムから書き換えることです。
a.exeが持つ変数をb.exeから書き換える、みたいなことです。
0532デフォルトの名無しさん
垢版 |
2022/05/01(日) 15:07:04.74ID:t4/NhzPt
リバースエンジニアリングでしょ
環境依存だしここで有益な答えが返ってくるとは思えない
0535デフォルトの名無しさん
垢版 |
2022/05/01(日) 15:13:35.34ID:ukM6vErn
皆さんありがとうございます。
>>528さんのものが使えるかもしれないので、一回調べながら触ってみます。
0538デフォルトの名無しさん
垢版 |
2022/05/01(日) 16:52:28.16ID:ukM6vErn
readprocessmemory, writeprocessmomoryの詳しい使い方が載ってるサイトってありますかね...
0540はちみつ餃子 ◆8X2XSCHEME
垢版 |
2022/05/01(日) 18:35:08.33ID:qIevfvlJ
>>538
https://docs.microsoft.com/ja-jp/windows/win32/api/memoryapi/nf-memoryapi-readprocessmemory
https://docs.microsoft.com/ja-jp/windows/win32/api/memoryapi/nf-memoryapi-writeprocessmemory
プロセスハンドルとアドレスと大きさを指示するだけで難しいことはなんもない。

ターゲットになるプロセスを見つける方法とかはたぶんこのあたりが参考になるかな……
https://docs.microsoft.com/ja-jp/windows/win32/psapi/enumerating-all-processes

公式ドキュメントは全体像が掴みづらい場合もあるけど、
この場合はたいした規模の話でもないからこれで十分でしょ。

外部のプロセスから逐一コピーして操作するのが面倒なら DLL Injection でプロセス内にプログラムを注入する方法もあるよ。
0541デフォルトの名無しさん
垢版 |
2022/05/01(日) 18:37:39.22ID:dvAJjIlE
srd::vectorも最初は誰がこんなクソコンテナ使うんだよっ
て言われてて皆好き勝手に独自のコンテナ実装してたらしいなw
0542デフォルトの名無しさん
垢版 |
2022/05/01(日) 18:42:14.03ID:Rd1MW222
>>539
まあ結構ニッチだと言うのとリンク先にも書いてある通り
struct STRUCT {
int* array;
};
int STRUCT::*pt = &STRUCT::array[2];
ってやられたら違うコードにしないといけないから面倒なんだろうね
0543デフォルトの名無しさん
垢版 |
2022/05/01(日) 18:48:00.04ID:ukM6vErn
>>540
ありがとうございます!試してみます!
0546デフォルトの名無しさん
垢版 |
2022/05/01(日) 21:50:45.69ID:t6KXJfhj
>>521
oneapi最適化性能ショボくね?
Ryzenだからかもしれんがgfortranと速度同じくらいでビビったわ。
0548デフォルトの名無しさん
垢版 |
2022/05/02(月) 06:08:38.44ID:9K9pP+jI
struct STRUCT
{
int array[2];
};

arrayはSTRUCT直属のメンバだからメンバポインタで指せるが
array[1]はあくまでarrayの要素であってSTRUCT直属のメンバではないので
これを指すようなメンバポインタは存在しない
0549デフォルトの名無しさん
垢版 |
2022/05/02(月) 06:48:46.84ID:LNpTFVSP
classのメンバ関数型が存在しない理由って何?

classのメンバ関数へのポインタのことではないよ
関数型も関数への参照も関数へポインタも認めてるのになぜメンバ関数は存在しないんだ
0552デフォルトの名無しさん
垢版 |
2022/05/02(月) 07:36:33.49ID:9K9pP+jI
void func(void (CLASS::*pm)(), CLASS& ref)
{
*pm; //Error. メンバ関数ポインタには逆参照演算子が存在しない
(ref.*pm)(); //pmを実体化するには.*か->*しかない
}
メンバ関数型というのがもし存在するなら*pmのはずだが現実にはできない
0554デフォルトの名無しさん
垢版 |
2022/05/02(月) 08:09:32.17ID:rW7ccw75
単純な逆参照*pmができるメンバ関数型はすべからくクロージャなるべし?
class Foo a;  // std::string Foo::someMemberFunc(int a, int b, double c)を持つ
class Bar b;  // std::string Bar::anotherMemberFunc(int a, int b, double c)を持つ

auto someMemberFunc = [=, &a](int a, int b, double c) -> std::string { return a.someMemberFunc(a, b, c); };
auto anotherMemberFunc = [=, &b](int a, int b, double c) -> std::string { return b.anotherMemnberFunc(a, b, c); };

std::function<std::string(int, int, double>* pm;
pm = &someMemberFunc;
std::cout << (*pm)(1, 2, 3.4); // a.someMemberFunc()が呼ばれる
pm = &anotherMemberFunc;
std::cout << (*pm)(5, 6, 7.8);  // b.anotherMemberFunc()が呼ばれる
std::function<std::string(int, int, double)> fn = *pm;  //  b.anotherMemberFunc()が呼ばれるためのクロージャにデリファレンスされる
0557デフォルトの名無しさん
垢版 |
2022/05/02(月) 10:01:16.40ID:8dvAAWOX
理由「仕様です」ということも理解できないの?
まじで脳障害を疑った方がいいぞw
0559デフォルトの名無しさん
垢版 |
2022/05/02(月) 11:03:41.58ID:/YgtvrIl
無能ワイ、メンバ関数型がなんなのかよく分からない
0561デフォルトの名無しさん
垢版 |
2022/05/02(月) 11:53:48.09ID:JwCZPFEF
>>549
適切な規格化(めんどくさい)や新たな実装(めんどくさい)が必要なわりに見合う有用性が無いと考えられているからでしょう。
0562デフォルトの名無しさん
垢版 |
2022/05/02(月) 12:05:29.20ID:9K9pP+jI
>>553
いいだろう
では、仮にあったとしてどんな使い方を考えているんだ?

decltype(CLASS::func) mirror;
CLASS obj;
obj.mirror(); //これでobj.func();になればいいのか?
0563デフォルトの名無しさん
垢版 |
2022/05/02(月) 12:29:35.60ID:9K9pP+jI
operator ?: がない理由も
仮にあったとして以下略への答えがないからだね
0565デフォルトの名無しさん
垢版 |
2022/05/02(月) 13:38:33.63ID:WQmMvuhJ
>>547
違う話を出してきて出来ないと主張されても

>>548
メンバポインタの実体はただのアドレスのオフセットなんだから出来て良い
実際offsetofは出来る

結局制約が多過ぎてoffsetofとキャストを使うことになるなら
非常に中途半端な拡張と言わざるをえない
0566はちみつ餃子 ◆8X2XSCHEME
垢版 |
2022/05/02(月) 13:50:32.84ID:dhIldcoi
>>565
メンバでないものをメンバポインタの範囲で扱うことは出来るけど「やるべきでない」からやってないって話だろ。
まあそれを言ったら C++ には奇妙なものはいっぱいあるから今更ではあるけどさ。

それに offsetof は offsetof で色々と制約があるからなぁ。
特にスタンダードレイアウトである必要がある (そうでないときは未定義) というのがなかなか厳しい。
可能な場合には型システムの枠組み内で扱いたい。
0568デフォルトの名無しさん
垢版 |
2022/05/02(月) 16:26:17.62ID:WQmMvuhJ
>>566
配列の要素はメンバ
ではないと
まあそんな言葉の定義はどうでもいいとして

なぜやるべきでないと思う?
出来たら何がまずい?
何が不都合?
誰もこの点にふれてない

ただ単に仕様と言われても
その仕様が糞と思うだけ
0569デフォルトの名無しさん
垢版 |
2022/05/02(月) 16:53:07.08ID:9K9pP+jI
>>568
よくわからんが、こう言いたいの?
struct STRUCT
{
int array[2];
};

int STRUCT::*pm;
pm = &STRUCT::array[0];
pm = &STRUCT::array[1];
STRUCT obj;
(obj.*pm) = 1; //obj.array[1] = 1; こうなるべき
0570はちみつ餃子 ◆8X2XSCHEME
垢版 |
2022/05/02(月) 17:15:19.01ID:dhIldcoi
>>568
は?

> どうでもいいとして

> 誰もこの点にふれてない

触れたことを勝手に無かったことにしてるのはお前じゃん。
あほか。
0571デフォルトの名無しさん
垢版 |
2022/05/02(月) 17:32:38.90ID:9K9pP+jI
>>568
どうでもよくないぞ
オブジェクトが何に属するのかは
OOPの根幹に係わる重要なことだ
0572デフォルトの名無しさん
垢版 |
2022/05/02(月) 17:34:25.32ID:JwCZPFEF
>>570
配列の要素がメンバでないことは、現状のメンバ変数へのポインタが配列要素に適用できない理由を示すものと思いますが、
メンバ変数へのポインタを配列要素に適用可能にするという拡張の話について「やるべきでない」という理由にはならないかと。
0573はちみつ餃子 ◆8X2XSCHEME
垢版 |
2022/05/02(月) 17:56:52.90ID:dhIldcoi
>>572
そいういう拡張はあり得ると思う。
私の感覚では (メンバ内の) 配列の要素を許すのだともはやメンバポインタではない何かだろうという意識で書いてた。

つまり、メンバポインタとしてやるべきではないということと、
メンバポインタを拡張して出来上がる何者かで出来るようにするというのは両立するってことね。
0574デフォルトの名無しさん
垢版 |
2022/05/02(月) 18:01:04.13ID:+FOPwlZG
なんとなくわかったけど、
c において配列を指す変数がポインタと同一視されるんだから、cを踏襲するc++でも配列を指す変数がポインタ扱いになるのはおかしなことじゃない。そうすると配列の要素はポインタの先になるので、配列を指すメンバー変数の要素もポインタの先になってメンバーじゃなくなりますな。
というか、こんなくだらないことでゴチャゴチャやってたの?
0575デフォルトの名無しさん
垢版 |
2022/05/02(月) 18:06:02.86ID:+FOPwlZG
>>574
文章ミスしたわ。
どちらにしてもややこしいけど。

誤:配列を指すメンバー変数の要素も
正:配列を指すメンバー変数の配列の要素も
0576デフォルトの名無しさん
垢版 |
2022/05/02(月) 18:23:20.44ID:WQmMvuhJ
>>570
構造体の中の配列の各要素は当然構造体の一部
つまりメンバ
というのが私の認識だが
その結果はどうでも良い
ここを議論しても意味がない
単なる言葉の定義の話だから

そうじゃなくて
技術的な話をしたいわけで

以下なら&S::a1と出来る
これで実質&S::a[1]になる

struct S {
...
union {
int a[3];
struct {
int a0;
int a1;
int a2;
};
};
};

こんな事をやらないと出来ないのはなぜか?
0580デフォルトの名無しさん
垢版 |
2022/05/02(月) 18:45:56.08ID:JwCZPFEF
>>578
>576は抽象の問題は話していないので、そういうことにはならないかと。
言葉の定義が重要というならまず「メンバポインタ」などという未定義の用語を使うべきではないでしょうし。

なお>574の「配列を指す変数がポインタと同一視される」といった不正確な理解も、
厳密な定義を語るにあたっては前提が不適切と思います。

>576 などでは現行の pointer to data member を拡張した "pointer to subobject" とでも言うようなものの
可能性が探られているものと理解しています。
現状でそういった機能が無い理由は >561 になると思ってますが。
0581デフォルトの名無しさん
垢版 |
2022/05/02(月) 18:53:30.65ID:WQmMvuhJ
配列にも入れ子の構造体にも使えない
offsetofの劣化コピーじゃ
何のためにわざわざ仕様追加したんだかわからんねえ
0582デフォルトの名無しさん
垢版 |
2022/05/02(月) 19:03:28.83ID:JwCZPFEF
>>581
追加された理由は offsetof に伴う危険なキャスト無しで同等の機能を提供したかったからでしょうね。
そもそもCでさえ offsetof を使ったメンバアクセスはすべて規格上は未定義動作の範疇のままであり、
未定義動作を認めないとする観点で言えば pointer to data member は純粋な拡張として有用です。

現行コンパイラ実装での挙動まで含めて考えれば、挙げられているとおり offsetof の適用可能範囲のほうが
ずっと広いんですけども。
0583デフォルトの名無しさん
垢版 |
2022/05/02(月) 20:14:09.92ID:pVfL1f+B
ninja使わないで普通にmakeするとものすごく遅いな。
ninjaって凄く速かったんだな。
0584デフォルトの名無しさん
垢版 |
2022/05/02(月) 20:49:04.97ID:/YgtvrIl
純粋な疑問なんだけどメンバ変数である配列の要素のポインタを変数として扱えて何が嬉しいの?
使い方が思い浮かばない…
0585はちみつ餃子 ◆8X2XSCHEME
垢版 |
2022/05/02(月) 20:59:32.26ID:dhIldcoi
そもそもメンバを指すポインタだってそんなに使うもんじゃないしな。
std::is_class の実装に使えるんじゃねーのという文脈で登場する程度。
0586デフォルトの名無しさん
垢版 |
2022/05/03(火) 10:38:15.40ID:J5PtY6cN
ていうか>>512の例ができない理由の説明は>>548で良くね↑
>>542のコードを借りるが
struct STRUCT {
 int* array;
};
int STRUCT::*pt = &STRUCT::array[2];
という最後の行は
>c において配列を指す変数がポインタと同一視されるんだから(>>574)
に依存した便法が混じっているから話がおかしくなるので便法抜きで厳密に書いたら
int (STRUCT::*pt)[] = &STRUCT::array;
であって配列内のオフセットがメンバポインタで表せる余地が無いことは確定的に明らか
0587デフォルトの名無しさん
垢版 |
2022/05/03(火) 10:41:06.53ID:J5PtY6cN
構造体STRUCTのメンバを指すメンバポインタというものが
構造体STRUCTの直接の配下のメンバ以外まで指せる仕様にしたら
構造体STRUCTの中に構造体SSTTRRUUCCTTが存在する入れ子のケースにおいて
構造体STRUCTのメンバポインタでなんでSTRUCT::SSTTRRUUCCTTのメンバを指せないんじゃヴォケ、
おなじSTRUCTのメンバやろうが、
みたいなお馬鹿疑問を抱くアフォが出てくるに違いないのと同じ
0588デフォルトの名無しさん
垢版 |
2022/05/03(火) 12:03:52.41ID:uzYP/aDa
エラーログかとおもた

Amnesty International USA
https://twitter.com/amnestyusa/status/1521295013044539392
Abortion is a human right
Abortion is a human right
Abortion is a human right
Abortion is a human right
Abortion is a human right
Abortion is a human right
Abortion is a human right
Abortion is a human right
Abortion is a human right
Abortion is a human right
https://twitter.com/5chan_nel (5ch newer account)
0589デフォルトの名無しさん
垢版 |
2022/05/03(火) 18:51:24.96ID:TQMg8rzt
>>587
最後の止め乙
0590デフォルトの名無しさん
垢版 |
2022/05/03(火) 22:24:19.43ID:J5PtY6cN
ついでに漏れもお馬鹿質問したいのですが
ファイルスコープの関数をextern "C"する正しいやり方教えてクレメンスorz
目的はatexit()への登録で、登録する関数自体は公開したっくないケース

// (1)
extern "C" void foo(void) { ... } // NG: ファイルスコープにならない

// (2)
extern "C" void foo(void);
static void foo(void) { .. }  // NG(?): コンパイラに怒られそう

// (3)
namespace {
 extern "C" void foo(void) { ... } // NG(?): コンパイラに怒られそう 怒られないとしたら漏れの知っている無名名前空間の実装と違う
}

// (4)
extern "C" {
 static void foo(void) { ... } // NG(?): コンパイラに怒られそう
}
0593デフォルトの名無しさん
垢版 |
2022/05/03(火) 22:40:29.61ID:EqZaa2d1
atexitが求めているのは関数ポインタだけなのでextern "C" はそもそも必要ない

extern "C" は関数の内部名をC言語形式(func()→_func)で扱うか、
C++形式で扱うか(func()→_Z3funcv、引数の型によって名前が変わる)だけの違い

namespaceとの相互作用は知らん
0594デフォルトの名無しさん
垢版 |
2022/05/03(火) 23:03:04.80ID:J5PtY6cN
>>593
た確かに…!
VCだとC++リンケージの関数でも問題無く登録できてイゴイタ
ここの記述に引きずられてしまった↓
https://www.ibm.com/docs/ja/zos/2.2.0?topic=functions-atexit-register-program-termination-function
C および C++ のリンケージ規約は非互換の ため、atexit() は C++ 関数ポインターを受け取ることができない。
C++ 関数ポインターを atexit() へ渡そうとすると、コンパイラーが エラーとしてこれにフラグを付けることになる。
C++ atexit() 関数を使用するには、atexit() に登録されたすべての 関数を extern “C” として宣言することに より、
これらの関数が C リンケージを必ず持つようにしなければならない。
0596デフォルトの名無しさん
垢版 |
2022/05/04(水) 06:21:09.19ID:TqagpjaD
9.11 Linkage Specification
2 Two function types with different language linkages are distinct types even if they are otherwise identical.
0599デフォルトの名無しさん
垢版 |
2022/05/04(水) 11:12:19.56ID:OOPwcDJ/
>>597
計算できるというのを、どんな手段を使ってでもそれを
例えばメモリ上に何らかの表現として出力する、という意味にするのであれば、余裕で可能かと?
0601デフォルトの名無しさん
垢版 |
2022/05/04(水) 11:16:25.61ID:OOPwcDJ/
>>600
可能だと思うよ
自分は詳しくないけどそういう大きい桁に関するライブラリの書き込みをここでよく見るので
0602デフォルトの名無しさん
垢版 |
2022/05/04(水) 11:19:13.87ID:OOPwcDJ/
でもその前にどのくらいのメモリが必要そうかの見積もりはざっくりやったほうが良さそうね
0603デフォルトの名無しさん
垢版 |
2022/05/04(水) 11:20:53.78ID:OOPwcDJ/
ざっくり2GBなのか
なんか現実的ではない気がしてきた
少なくとも家庭用のPCなんかでは無理そうかも
0604デフォルトの名無しさん
垢版 |
2022/05/04(水) 11:48:39.54ID:GAB8HZoP
>>603
ありがとう。
まだ時間がかかりそうだな。
ちなみに128倍精度浮動小数点数の最大値の計算の途中で出てくる計算。
0605デフォルトの名無しさん
垢版 |
2022/05/04(水) 14:50:41.22ID:RRH/ygkO
128倍精度ってなんですか(・∀・)?
倍精度で表せる最大値((2^(1023+1)) - epsilon)の2^128倍は
(2^(130944+1)) - epsilon
であって
2^17179869183
よりカナーリ小さげ
0606デフォルトの名無しさん
垢版 |
2022/05/04(水) 15:26:18.04ID:RRH/ygkO
ゴメス落ち着いて考えたら倍精度で表せる最大値は
 ((2^(1023+1)) - epsilon*(2^1023) = (2^(1023+1)) - (2^970)
で、その128倍の精度だとしたら
 ((2^(130944+1)) - (128倍精度のepsilon)*2^130944) = ((2^(130944+1)) - (2^122771)
ここで
 128倍精度のepsilon = 2^(-8173)
と仮定ェ、
(∵全体が倍精度の128倍=1024 byte = 8192 bitで指数部が8 bit増加で19 bit、符号ビット1 bit
 やったら仮数部は8192-19-1 = 8172 bitで、最上位の1を省略する
 ケチ表現なので実質2^(-8173)が仮数部で表せる最小値すわなち128倍精度のepsilon
0607デフォルトの名無しさん
垢版 |
2022/05/04(水) 15:36:55.26ID:GAB8HZoP
倍精度浮動小数点数が64ビット浮動小数点数なので、
128倍精度浮動小数点数は4096ビット浮動小数点数。

IEEE754-2008の推奨による仕様での最大値の計算をしていたんです。
0610デフォルトの名無しさん
垢版 |
2022/05/04(水) 15:59:04.91ID:GAB8HZoP
倍精度浮動小数点数の場合。

>(2^((2^(11-1))-1))*(2-(2^-52))
=
+ 1797 69313
48623 15708 14527 42373 17043 56798 07056 75258 44996 59891
74768 03157 26078 00285 38760 58955 86327 66878 17154 04589
53514 38246 42343 21326 88946 41827 68467 54670 35375 16986
04991 05765 51282 07624 54900 90389 32894 40758 68508 45513
39423 04583 23690 32229 48165 80855 93321 23348 27479 78262
04144 72316 87381 77180 91929 98812 50404 02618 41248 58368.

309桁の値。

となるので、計算式は合っているはずだが根拠を失念してしまったw
ネットのどこかに書いてあったはず。その式を使っただけ。
128倍精度の場合、35が指数部(符号含む)で4060が仮数部(符号含まない)
0611デフォルトの名無しさん
垢版 |
2022/05/04(水) 17:03:38.52ID:TqagpjaD
>>597
2GiBのメモリをゼロクリアしてからMSBを1にするだけ
簡単すぎて話にもならん
0613デフォルトの名無しさん
垢版 |
2022/05/04(水) 17:31:26.47ID:Dfc3wQ1w
C++でやることにこだわりないならPythonが手っ取り早いぞ
あれのintはデフォルトで多倍長だから

>>> f=open(r"C:\pow2.txt", "w")
>>> print(2**17179869183, file=f)
0618デフォルトの名無しさん
垢版 |
2022/05/05(木) 00:09:45.17ID:u08Uuhhj
下記は一部ですので不完全です、型をソートしています。
index_sequenceで展開が面倒なんですよね、何かうまい方法ありませんか

template
<
 template<typename> class Orderable,
 typename     ListT
>
class SortTypes;

template
<
 template<typename> class Orderable,
 template<typename...> class List,
 typename...     Ts
>
class SortTypes<Orderable,List<Ts...>>
{
 template<typename SeqT> struct Impl;

 template<std::size_t... Is>
 struct Impl<std::index_sequence<Is...>>
 {
  static constexpr std::array<std::size_t,sizeof...(Ts)> indexes =
   []{
     using Ord = std::common_type_t<decltype(Orderable<Ts>::value)...>;
     struct Pair {Ord;std::size_t ndx;};
     Pair arr[] = {{Orderable<Ts>::value,Is}...};
     insert_sort(arr,0,sizeof...(Ts),[](auto x,auto y){
      return x.ord < y.ord;
     });
     return std::array<std::size_t,sizeof...(Ts)>{ arr[Is].ndx...};
    }();
  
  using type = List<std::tuple_element<indexes[Is],TypelList<Ts...>>...>;
   
 };
};
0619デフォルトの名無しさん
垢版 |
2022/05/05(木) 02:32:03.93ID:FeY8iOM4
フリーランスに立ちはだかる「常駐」の壁。慣例を打ち壊し、
“テレワーク”案件3割→8割へと成長を遂げた「クラウドテック」の軌跡

リモートワーク求人専門サイト「プロリモート」がリニューアルオープン、
業務委託契約の求職者と企業をマッチング

1/3以上が採用につながる高マッチング率、リモートワーク×エンジニア・デザイナー専門の
人材紹介サービス「ReworkerAgent」正式リリース場所からも時間からも自由な働き方を実現!

『ReWorks(リワークス)』リモートワーク特化型転職サイトとして 3月5日 リニューアル

副業・兼業マッチングサービス「クラウドリンクス」登録者数2万人突破
中小企業で進む副業人材の採用、96%が継続採用を希望

茨城県日立市、県外からの「テレワーク移住者」に最大151万円の助成金

長野市、市内に移転・事業所設置し、移住することで最大550万円の支援金を支給

フリーランスが活用できる「最大1,000〜3,000万円・補助率50%〜75%」の
『ものづくり・商業・サービス補助金』とは?概要や条件を解説
0620デフォルトの名無しさん
垢版 |
2022/05/05(木) 03:10:15.14ID:Hm4Z5Kkb
>>597
やったったが愚直に10で割って下の桁から求めるだと手元のPCでは200年ぐらいかかりそう……
https://ideone.com/6BG7hf

つなみにこれは2^0、2^8、2^64、2^1000には一瞬で正解する
[302] 100.000000 % (38/38) --- 0 sec
2^1000 = 1.071508607186267320948425049060001810561404811705533607443750388 x 10^301
0621デフォルトの名無しさん
垢版 |
2022/05/05(木) 03:10:34.57ID:Hm4Z5Kkb
10より大きい10^n(100万とか)で割ることにしたら多少は改善するかもしれないが、
最終的に10^nのn桁を10進数表示することを繰り返すことを考えると10で割るトータルの回数に違いが出ないから改善しなさげ……orz

むしろ2進数で計算して10進数にするのではなく最初から10^n進数表現(ただし10^n < UINT32_MAXとか)で2^Nの計算の方を実質10進数でやった方が速そう
計算の手間がO(N^2)なのは変わらないが、割り算無しで済むのは大きいい(多分、
0622デフォルトの名無しさん
垢版 |
2022/05/05(木) 03:19:38.09ID:Hm4Z5Kkb
2^Nを10^n進数表現(ただし10^n < UINT32_MAXとか)で計算するのはうまくやれば(10^nをUINT_MAXとかよりやや小さめにしたら)
掛け算によるキャリーの伝搬頻度を減らせるから副次的にさらなる高速化の余地が生まれ得る、
0623デフォルトの名無しさん
垢版 |
2022/05/05(木) 06:04:52.05ID:zLdy+6M7
繰り返し二乗法で大きい素数のmodを計算すれば良いだけ
整数の商がいくらかもすぐ計算できるので、簡単に復元できる
復元した値をメモリに持つかどうかは別の話
はい終わり

これしきのことも分からない奴ら頭ヤバいよ
言語仕様の話ばっかり大好きでアルゴリズムの知識が微塵もないボンクラ
競プロキッズのこと馬鹿にできないね
0626デフォルトの名無しさん
垢版 |
2022/05/05(木) 08:43:37.74ID:Hm4Z5Kkb
自演ちゃうねん
繰り返し二乗法の適用を思いつかなかったのは太くの至りで宦官の至りやが
2^N計算を10^n進数ベースでやるときに適用して高速化するやり方しか思いつかん
>大きい素数のmodを計算すれば良いだけ
とは何ですか(・∀・)?
0627デフォルトの名無しさん
垢版 |
2022/05/05(木) 10:32:36.82ID:CLlK/Ylr
興味本位で全桁表示したいだけなら5171655947桁あることを知って諦めてほしい
/と%による単純な基数変換を使うにしても、/も%も桁数Nに対してO(NlogN)程度かかるらしく、それだけかかってようやく1桁求まるレベルなんで、まあ無理よ

概算したいだけなら高校生でも知ってる対数を使う方法で4.637182185+e5171655947くらいと分かる
0628デフォルトの名無しさん
垢版 |
2022/05/05(木) 10:34:08.63ID:QrYoef2b
10000007とかで割れって言ってるんだろ
これじゃ余分な7の誤差蓄積しまくって上位めちゃくちゃになるし、影響ないほど巨大な10^n近似素数使っちゃったら結局計算量は大差ない
競プロキッズの考えそうなこと
0633デフォルトの名無しさん
垢版 |
2022/05/05(木) 11:31:29.78ID:E1ivHqdi
>>613
自動的に昇進するだけで、デフォルトで多倍長って表現は違和感。
2**-1は0.5だけどデフォルトで浮動小数点ってわけじゃないよね
0636デフォルトの名無しさん
垢版 |
2022/05/05(木) 12:32:26.31ID:Ng8+cu+X
GMPでやってみたけどoverflowで落ちるな
0637デフォルトの名無しさん
垢版 |
2022/05/05(木) 12:52:41.09ID:vEkkTSCd
皆さんすみません>>597です。

2^17179869183

とりあえず
10^5171655945.66625415874401993568579902587321942922330151106009...
で勘弁してください。

実数が分かれば文字数で桁数も分かりますので、
実数が知りたかったんですが、ここまでしか分かりません。
お手数おかけしました。
多倍長電卓で計算できないんでプログラムならできるのかな?と思ったわけです。
現時点では計算時間とメモリを食いそうですね。
0638デフォルトの名無しさん
垢版 |
2022/05/05(木) 17:24:23.79ID:irZh29WM
ざっくりとした大きさや上下数桁はわかっても全体を丸々把握するのは厳しそう
0639デフォルトの名無しさん
垢版 |
2022/05/05(木) 18:10:40.93ID:wHYrtDCY
https://ideone.com/O1rs45
誰か助けてー。
ウエブのレクチャー見て書いたんだけど、一件通ったと思ったらほかのテストが通らない。
デコーダが悪いのだろうか?というか、解釈狂ってるかなぁ??マジ解らん。

アドバイスクレクレ。
0644デフォルトの名無しさん
垢版 |
2022/05/05(木) 19:40:11.06ID:jNTEQQGI
>>639
プログラムの意図がわからんから投げたわ

1. Data型の<1>要素の意味はなんだよ。typedefした行のコメントに書いといてほしい
2. 関数名を流し見る限り、ソート・エンコード・デコードの3つの仕事がある。中途半端に仕事が混ざってない?
0645デフォルトの名無しさん
垢版 |
2022/05/05(木) 19:50:34.56ID:p/xHapT/
>>644
ブロックソートアルゴリズムの実装をしているだろう。
とすると size_t はソートバリエーションのインデックスを表していると思われる。
0647デフォルトの名無しさん
垢版 |
2022/05/05(木) 22:10:21.31ID:CGnulbl/
int64_tとsize_tを暗黙の型変換を期待して混ぜて計算するとはまる?

(int64t - int64t) + sizet >= int64t
の比較をしたら2つ目のint64tが大きくなっても(とは言っても全ての値は10~-10くらい)boolの値はずっと1でした。
比較の前まで切り出してprintfすると正しい値が出るのですが、比較式に組み込むとおかしくなります。
sizetをint64tにキャストすると正しく動きました。

暗黙の型変換はsizetをint64tにしてくれないのでしょうか

環境はWSL2のg++です。

教えて下さい
0648はちみつ餃子 ◆8X2XSCHEME
垢版 |
2022/05/05(木) 22:59:30.02ID:MaGUTczU
>>647
色々と面倒な細かいルールはあるんだが、大まかには

・ 二項演算子は原則としては大きい側の型に揃えてから計算する (符号は符号無しが優先。 結果の型もそれ)
・ size_t の大きさは処理系定義 (符号無しであることは保証される)
・ signed な型が unsigned に変換されると変換後の型の最大値より 1 大きい値で mod をとった値になる

というのがこの場合にかかわる重要なルールだと思う。
size_t は処理系定義だからその環境でどうだかわからんが uint64_t 相当だと仮定するぞ。
int64_t - int64_t の型は int64_t で、 int64_t + size_t は uint64_t になる。
つまり int64_t-int64_t の値が負数の場合でも常に正の値に修正される。
しかも値として常に 10~-10 くらいということは、
unsigned な値への型変換規則によってかなり巨大な値になってしまう。
たぶんこれが意図しない挙動の原因だと思う。
0649はちみつ餃子 ◆8X2XSCHEME
垢版 |
2022/05/05(木) 23:03:22.90ID:MaGUTczU
>>648
符号無しが優先って書いちゃったけど、これは大きさが同等なら符号無しが優先ってことね。
大きさに差があるなら大きい方の符号が採用される。
(大きさって言ってるけど実際には順位 (rank) の序列が定められている。 まあ大きさの順なので実質同じやろ。)
0650デフォルトの名無しさん
垢版 |
2022/05/05(木) 23:06:38.57ID:2L8NgwAH
size_t が非負の32 bit なら、int64_t の範囲内だから、OK だけど、
size_t が非負の64bitなら、int64_tの範囲外で無理

int64_tの非負の範囲は、63bitしかないから
0651はちみつ餃子 ◆8X2XSCHEME
垢版 |
2022/05/05(木) 23:20:02.75ID:MaGUTczU
例としてこういうのがあるとわかりやすいかな。

#include <iostream>
#include <cstdint>

int main(void){
auto a=std::int64_t(6)-std::int64_t(8)+std::uint64_t(1);
std::cout << a << std::endl;
}

結果として 18446744073709551615 が表示される。
0652デフォルトの名無しさん
垢版 |
2022/05/05(木) 23:39:48.09ID:Hm4Z5Kkb
というわけで高速化すた、
https://ideone.com/TWKDT6

動きを見る限り、2^17179869183が計算が終わるまで手元のPCで8時間ぐらいの見込み

(検算)
次のぐらいなら一瞬で出る(小数点の位置が手抜きなので指数の解釈に注意
2^1000 = 0000001 0715086 0718626 7320948 4250490 6000181 0561404 8117055 3360744 3750388. x 10^298
2^171798 = 0000002 2448900 7901275 1700257 1990086 5699838 8910190 8350859 7305786 1643657. x 10^51713

2^171798は>>620のでは4秒かかかっていたやつが100 msぐらいで出る
0653647
垢版 |
2022/05/05(木) 23:52:14.24ID:CGnulbl/
皆様ありがとう。
たいへん納得できました
0654デフォルトの名無しさん
垢版 |
2022/05/06(金) 07:02:57.27ID:kL1BvaNc
ゴメス8時間と言う見積は指数の桁を一つ少なかった2^1717986918で見積もってたorz
やったら最新状況は↓こんな感じでこの後4^9×5815 = 1,524,367,360秒 = 48.304年かかることに、。n_
Calculating 2^17179869183 ...
n=17179869183, mbuf sz=2 --- 0 sec
n=8589934591, mbuf sz=2 --- 0 sec
n=4294967295, mbuf sz=2 --- 0 sec
...(中略)...
n=8191, mbuf sz=180374 --- 24 sec
n=4095, mbuf sz=360748 --- 96 sec x 4
n=2047, mbuf sz=721494 --- 385 sec x 4.10
n=1023, mbuf sz=1442986 --- 1467 sec x 3.81
n=511, mbuf sz=2885970 --- 5815 sec x 3.96
0656デフォルトの名無しさん
垢版 |
2022/05/06(金) 12:17:44.01ID:DqDgjvgu
python超初心者スレでひな形を教えてもらってpythonでプログラミングしたところ、

2^17179869183

4.637182185095045843877145312775985050353215513064979818029199207764811280740258379690028942685133666E+5171655945

になるようです。
ご参考まで。精度等未確認ですが。
0657デフォルトの名無しさん
垢版 |
2022/05/06(金) 12:40:01.31ID:DqDgjvgu
>>656
ちなみにこの計算は、
128倍精度浮動小数点数の最大値の計算で出てくる式の掛け算で区切った左側の値です。

128倍精度浮動小数点数 (2^((2^(35-1))-1))*(2-(2^-4060)) 5171655946桁の値 有効桁数1222桁

(2^((2^(35-1))-1))*(2-(2^-4060))

9.274364370190091687754290625551970100706431026129959636058398415529622561480516759380057885370267332E+5171655945
という値になりました。

精度等確認できる方はお願いします。
仮数部の最終桁の値は丸めになっているようなので+1されている可能性があります。
0658デフォルトの名無しさん
垢版 |
2022/05/06(金) 13:36:52.82ID:dNZjdeLr
>>646
修正感謝。自分のコードに転写してみたらちゃんと動いた。
これちゃんとブロックソートか解らないけど、可逆ではあるので圧縮してみるね。
本当にありがとう。
0661デフォルトの名無しさん
垢版 |
2022/05/06(金) 15:25:15.07ID:P9K99Ehi
C++ のプログラムでサスペンド/復帰をお手軽に実装するための定番の方法ってないですかね?
USR1 を受け取ったらメモリの内容を丸々ファイルにダンプして、復帰するときはそれを読み込んで続きから実行、くらい簡単な仕組みが実現てきたら嬉しいです
0663デフォルトの名無しさん
垢版 |
2022/05/06(金) 15:28:31.87ID:dNZjdeLr
>>662
噂によるとLZWはエントロピー圧縮では無いので出来ても良いかと思ったんだけど、駄目か。
根拠は辞書捨てるからだけどね。

とりあえず完成。
0665デフォルトの名無しさん
垢版 |
2022/05/06(金) 17:03:00.97ID:Ai+BgFMJ
圧縮方式がなんだろうと可逆圧縮はデータ長が短くなるケースがあるならデータ長が長くなるケースが必ずある

65536通りの表記がある2byteデータで、1通りが1byteに圧縮できるとしよう。(0x0000→0x00)
残りの65535通りから256通りの表現を奪うので(0x00から始まるパターンが作れなくなる)、3byte長で表現しなきゃいけないやつが出てくる。

このへんはトレードオフだが、テキストデータとか一定の傾向があるデータのデータ長を短くできりゃいいだろ?
ランダムデータとか圧縮済みデータを圧縮するなんて考えない
0666デフォルトの名無しさん
垢版 |
2022/05/06(金) 17:26:03.51ID:dNZjdeLr
>>665
まぁ、そうですね。
LZWの性質上、一回出たモノを辞書から洗って一個追加して辞書に返す。という事をやるのです。
エントロピー圧縮では無いので乱数を詐欺れたら無敵だったのですけど、現実は厳しい。
0667はちみつ餃子 ◆8X2XSCHEME
垢版 |
2022/05/06(金) 18:18:33.94ID:lqMO+ITd
データ圧縮時にあり得る最大伸長率をまとめたサイトをどこかで見たような記憶があったんだけど
あらためて探すと見つからない……。 幻だったんだろうか。
0668デフォルトの名無しさん
垢版 |
2022/05/06(金) 18:30:36.95ID:jJyKyUF7
>>667
ZipBombとかやべーやつもいるから安全に展開できるかの仕様の確認目的かな?

正攻法での最大圧縮率とかだと話が変わってきそうだが
0669デフォルトの名無しさん
垢版 |
2022/05/06(金) 20:00:41.83ID:AeHK35lN
>>660
繰り返し二乗法は分かったのだが
modを取る大きい素数の選び方が分からないので教えてほしい
0671デフォルトの名無しさん
垢版 |
2022/05/06(金) 20:05:10.12ID:O7Z7ebwH
内部クラスを外部クラスが継承するって不可能?
struct A : A::B { struct B {}; };という特殊な事やりたいんやけど前方宣言とかできないっぽいし無理やろか
0679デフォルトの名無しさん
垢版 |
2022/05/07(土) 01:43:20.82ID:s6tDba0D
1ゲットズザー!!!111!!111!c⌒っ゚Д゚)っ
https://ideone.com/R3szJK

2^17179869183 is between
0000000 0000046 3718218 5095045 8438771 4531277 5985050 3531670 5893980 9439277. x 10^5171655888
0000000 0000046 3718218 5095045 8438771 4531277 5985050 3531670 5894606 3902528. x 10^5171655888

100 msで計算できるようにしたったわ!

>>675
暗算はスレチ
0680デフォルトの名無しさん
垢版 |
2022/05/07(土) 01:50:30.88ID:s6tDba0D
つなみに基数変換アルゴリズムにはトーナメント方式というものがあって並列計算に持ち込めるらし
星の数ほどプロセサーが使える場合は有効かもしれん
富岳を使える機会があったらやってみたい
0682デフォルトの名無しさん
垢版 |
2022/05/07(土) 02:05:54.40ID:s6tDba0D
なにおうヽ(`Д´#)ノ ムキー!
2^17179869183 is between
0000000 0000046 3718218 5095045 8438771 4531277 5985050 3532155 1306497 9818029
1992077 6481128 0740258 3796900 2894268 5133665 8876785 8487588 5591832 7186419
0576212 7656864 8464720 4285493 3923042 9654230 7916817 0776591 7647233 1128072
2760420 2266531 9507091 8968753 5716084 2962215 4728982 6664323 6555234 1274646
4896521 9429451 2975764 8380822 6363423 2746025 0005054 5131536 2217832 5023004
1605005 9971605 5861808 1342288 9537948 8099475 2493069 5439539 2974540 8604555
3827776 8910650 1779698 0664637 7405672 7472854 5855966 0105172 1933481 1967719
5700701 3333182 0937700 3166605 4871435 3734677 0010217 6905552 3397265 0416277
0094988 0613651 2390001 0317736 9989814 4998699 5188652 7509316 0899781 9619323
5715923 0653762 3370836 8150405 6226421 7362228 9333270 6654384 1686901 0642565. x 10^5171655258
0000000 0000046 3718218 5095045 8438771 4531277 5985050 3532155 1306497 9818029
1992077 6481128 0740258 3796900 2894268 5133665 8876785 8487588 5591832 7186419
0576212 7656864 8464720 4285493 3923042 9654230 7916817 0776591 7647233 1128072
2760420 2266531 9507091 8968753 5716084 2962215 4728982 6664323 6555234 1274646
4896521 9429451 2975764 8380822 6363423 2746025 0005054 5131536 2217832 5023004
1605005 9971605 5861808 1342288 9537948 8099475 2493069 5439539 2974540 8604555
3827776 8910650 1779698 0664637 7405672 7472854 5855966 0105172 1933481 1967719
5700701 3333182 0937700 3166605 4871435 3734677 0010217 6905552 3397265 0416277
0094988 0613651 2390001 0317736 9989814 4998699 5188652 7509316 0899781 9619323
5715923 0653762 3370836 8150405 6226421 7362228 9333270 6654384 1687053 4062589. x 10^5171655258
0688デフォルトの名無しさん
垢版 |
2022/05/07(土) 04:06:12.29ID:P9LDpr78
>>678
素人なので全部は計算出来ないですが
最後の20桁ならすぐに計算できました
88085753133198737408
0693デフォルトの名無しさん
垢版 |
2022/05/07(土) 08:15:43.50ID:hLdUgsLX
先頭数十桁と最後の数十桁は合っていそう。
文字数は5171655817で合ってるの?
0694デフォルトの名無しさん
垢版 |
2022/05/07(土) 08:21:32.36ID:hLdUgsLX
>>637
はウルフラムでの17179869183*Log2/log10の計算結果。
>>656
はpythonで打ったプログラムで出たもの。

桁数はE+5171655945で間違いないと思ったが。
0696デフォルトの名無しさん
垢版 |
2022/05/07(土) 09:26:24.51ID:hLdUgsLX
>>693
文字数チェックに使ったGigaTextViewerにバグがあったらしい。
バイト数で5171655946で見たら合ってるな。
バグないみたい。ご苦労様。

あとは128倍精度浮動小数点数の最大値とか計算できると良いな。
相当凄腕なら64倍以上のn倍精度精度浮動小数点数の最大値を0.06秒くらいで出せると良いけどな。
0699デフォルトの名無しさん
垢版 |
2022/05/07(土) 10:27:32.54ID:hLdUgsLX
128倍精度付近の計算は5GB程度と分かったが、256倍精度なら80GB程度とかになるのか?
全部のデータを吐くのには無理があるな。
0700デフォルトの名無しさん
垢版 |
2022/05/07(土) 11:12:27.95ID:hLdUgsLX
次の問題。

65536倍精度浮動小数点数 2^16倍精度 2097152ビット浮動小数点数 (2^((2^(71-1))-1))*(2-(2^-2097080)) 355393490465494856466桁の値 有効桁数631283桁

最大値
(2^((2^(71-1))-1))*(2-(2^-2097080))
8.751158848740476104171068534561420331800200930194140062439011962812174483292686870548794134181772232E+355393490465494856465


これを合っているか確認して戴きたい。
時間かけなくていいからね。簡単にできそうならやってみて。
0701デフォルトの名無しさん
垢版 |
2022/05/07(土) 11:24:24.96ID:i0ZrzBre
8.75115884874047610417106853456142033180020093019414006243901196281217448329268687054879413418177223250026754484296779541335755918551116311988151294437120403120859156456766214020358536453140920536494153366498563224599112643650005214473466325352790995530944092962954114633561899471578385791449307429666571647389734015518462597415175193161095962388238415165666405164185316844538944891015624600209337136687435968731829027874814729004423100156170455627257657662018544353080611835640032201070594171947167003291711646891546745572991874468255861057996361346972313268224686528372873429102591994402195151868961348300405641520089415930898779525616284304652528475239523093098963439947423678208493232864450286525255133498508464916769066793870894739506167659828704373657304962097164032305167374291543346284808597600898542590310745266381890317624392291438000481495226828900983685105244929525982538100990167556406600838995052292E+355393490465494856465
0705デフォルトの名無しさん
垢版 |
2022/05/07(土) 11:30:15.89ID:i0ZrzBre
指数と桁の割り振りは決まってないし
好きに決めれば良いんだよ

IEEE754の範囲でも
倍になるごとに4bit増えてるわけでもない
0707デフォルトの名無しさん
垢版 |
2022/05/07(土) 11:45:08.76ID:hLdUgsLX
>>705
IEEE754-2008では推奨で決まってるよ。
結果的に4bit増になる式が書いてある。

まぁ別に合わせなくてもいいが、合わせて演算パッケージの開発をしやすくした方がいいんじゃないのかな。
桁が足りなければどんどん倍数を増やせばよいわけだし。

ちなみにどんな電卓なら計算できるの?
0709デフォルトの名無しさん
垢版 |
2022/05/07(土) 12:08:50.27ID:i0ZrzBre
半精度、単精度はルールかは外れてるし
8倍精度以上をそのままバイナリ形式で他のソフトとやり取りする事もなかなか考えられないし
桁数はいらないけど指数が欲しい時もある
というか、桁数に対して指数の割合が少なすぎる
65536倍精度を使う場面で指数を数ビットケチる意味はまったく無い

ライブラリを作るなら柔軟に設定出来るものが良いかと
半精度は今でも用途によって複数の形式があるし
0711デフォルトの名無しさん
垢版 |
2022/05/07(土) 13:41:52.30ID:5iVnmLs9
boostに自分の作った無限状態マシンのラブラリーを導入して世界中の人に使ってもらいたいけどどうすればいい?
0715デフォルトの名無しさん
垢版 |
2022/05/07(土) 16:05:50.34ID:Cir/Il2y
>>695のコードだと 2^2^35 くらいが限度

工夫すると 2^2^42 くらいまではいける
計算バッファにHDDを8TBほど使う

2^2^65536は...
宇宙中のリソースを使っても無理
上位1000桁や下位1000桁だけなら可能
0716デフォルトの名無しさん
垢版 |
2022/05/07(土) 19:56:49.06ID:hLdUgsLX
ブラウザpythonでプログラミングしたら10^10^50まではとりあえずエラーが出なかった。
内部でどうやってるんだろう?
0717デフォルトの名無しさん
垢版 |
2022/05/07(土) 20:11:08.30ID:ihw8CMAo
(2^2)^35か
2^(2^35)かどっちだ?
C++的には前者だが数学的には後者だな
0720デフォルトの名無しさん
垢版 |
2022/05/08(日) 00:59:03.56ID:fONWhazS
べき乗は右結合というのは宇宙の始まりから決まってゐる
なぜなら、(2^2)^35 = 2^(2*35)であって1重のべきにすぎないから左結合の多重冪は多重である意味が無い
0722デフォルトの名無しさん
垢版 |
2022/05/08(日) 06:50:42.66ID:RoE3BV2z
2+2+2 = 2*3
2*2*2 = 2^3
2^2^2 = 2↑3
2↑2↑2 = 2↑↑3
0723デフォルトの名無しさん
垢版 |
2022/05/08(日) 06:51:37.65ID:RoE3BV2z
途中で送信しちまった
これをtemplateで一般化できるか?
0724デフォルトの名無しさん
垢版 |
2022/05/08(日) 07:50:20.51ID:21iaPdPG
ここの定義で実装してみた
https://ja.wikipedia.org/wiki/クヌースの矢印表記#定義

#include <iostream>

template<int level>
struct tower {
template<class T, class U>
constexpr static auto op(T t, U u) {
T ret{1};
for (U i = 0; i < u; i++) ret = tower<level - 1>::op(t, ret);
return ret;
}
};
template<> // pow(t, u);
struct tower<1> {
template<class T, class U>
constexpr static auto op(T t, U u) {
T ret{1};
for (U i = 0; i < u; i++) ret *= t;
return ret;
}
};

int main() {
std::cout << tower<2>::op(uint64_t(3), 3) << std::endl;
}
0726デフォルトの名無しさん
垢版 |
2022/05/08(日) 08:41:34.72ID:vKAQqA9f
>既に述べた通り、1重のクヌースの矢印は冪乗を表す。また、2重のクヌースの矢印はテトレーションを表す。

{\displaystyle a\uparrow b=a^{b}} a\uparrow b = a^b
{\displaystyle a\uparrow \uparrow b={}^{b}a} a\uparrow\uparrow b = {}^b a

クヌースの矢印の矢印が一個ずつ足りないんじゃない?
0727デフォルトの名無しさん
垢版 |
2022/05/08(日) 10:21:28.93ID:RTAOPX4V
>>719
それは
> メモリの内容をファイルに丸々ダンプ
したりするための仕組みじゃないだろ
チェックポイントがやりたいんじゃないの
0730デフォルトの名無しさん
垢版 |
2022/05/08(日) 12:29:28.95ID:ZM5mEHZG
昔C++で少ない文字数で巨大な数を作るってのやったなあ
intは十分大きいとしてint main();の戻り値を競うって感じ
0735デフォルトの名無しさん
垢版 |
2022/05/08(日) 14:51:21.54ID:fONWhazS
FFTによる積の多倍長演算完全に理解した!
適当な基数の下で表した例えば4桁の数 (a b c d) と (c d e f) を筆算で計算したとき現れる8個の積和
(例えば最長のやつはaf + be + cd + dc)
というのは、 (a b c d) と (c d e f)をそれぞれ関数波形とみなしたf(n)、g(n)の畳み込み
 h(k) = Σ[k=0..3]f(k)g(3-k) (k=0..7)
に他ならない(f(k)やg(k)の範囲外は0とみなす
ということは、h(k)、f(k)、g(k)それぞれのDFT(この場合は1の8乗根を基底とするやつ)をそれぞれH(k)、F(k)、G(k)として
 H(k) = F(k) * G(k)
となるわけやなのでそうやって求めたH(k)を逆DFTしたらh(k)の値が得られているというしくみ
(このh(k)を基数B内に収まるようにcarry_and_fix()したら最終的な8桁の並びが得られる、
0736デフォルトの名無しさん
垢版 |
2022/05/08(日) 14:53:42.06ID:fONWhazS
FFTする高速化方法はここ↓見たらワカル(wは1のN乗根なので、w^N = 1とかw^(N/2)=-1とかいうのが式変形の要
https://qiita.com/peria/items/fbdd52768b4659823d88

いまちょっと他の用事で手が離せないので48年以内に累乗根の誤差の影響が無い形で実装してみるわサーセン;;;

そしたら漏れも勝ちや!

何と戦ってるのかは知らんが、
0737デフォルトの名無しさん
垢版 |
2022/05/08(日) 15:17:10.76ID:fONWhazS
スマン誤記があったorz
畳み込みの式は正しくはこうっす
 h(τ) = Σ[k=0..3]f(k)g(τ-k) (τ=0..7)
0739デフォルトの名無しさん
垢版 |
2022/05/09(月) 00:09:35.20ID:yzB2nwTj
>>732
intのサイズなど、環境に依存する値を返すのはNG

C++のコードによって1個の整数を定義して
その整数の大きさを競う
0740デフォルトの名無しさん
垢版 |
2022/05/09(月) 03:52:17.59ID:E3g8JMTZ
「~(1<<31)」 (8文字)が短かくなりそうだがint=4byte+オーバーフローの未定義動作を含むからNGという寸法か

しかし「123456789」もint=4byteが前提になってるしどうやって遊ぶんだ?
「std::numeric_limits<int>::max()」でとりあえずint最大値が帰るが
0741デフォルトの名無しさん
垢版 |
2022/05/09(月) 04:10:24.01ID:lLEJHk2f
>>740
max()は環境に依存する値だからアウトだろう
算出するならunsignedの0の~を1つ右シフトしてsignedにして返すのはどうだろう?
0742デフォルトの名無しさん
垢版 |
2022/05/09(月) 07:35:52.38ID:yzB2nwTj
-------- Large numbers using C++ --------
C++ 言語を用いて出来るだけ大きな数を出来るだけ少ない文字数で表現する
int main(); が出来るだけ大きな値を返すようにする
C++ は ISO/IEC 14882:2003 準拠とする
ただし、"int" "float" "double" で表現できる値は十分大きいものとする
事実上無限ビットあると考えて良い
あくまで「十分大きい」であり、大きさを規定した以外は言語仕様通りの動作をする
環境依存の動作、環境依存の値を返すものはNG
上記ルールと ISO/IEC 14882:2003 とで
mainの戻り値が1個の値に定まらないようなものはNG
たとえば、intのサイズに依存した値になるコードはNG
pre-processor 使用禁止
#define, #include などの禁止
コンパイラなどに指定するマクロも禁止
__FILE__ や __LINE__ などの組み込みマクロも使用禁止
ライブラリ関数や外部ファイル定義の関数や変数の使用禁止
pow, quit などの外部関数や変数の使用禁止
実行時間やメモリ使用量は問わない
メモリ解放不要
0743デフォルトの名無しさん
垢版 |
2022/05/09(月) 07:42:44.70ID:yzB2nwTj
文字数が少ないものだとこんな感じ

25文字
int main(){return 9E999;}

30文字
int main(){return 9<<(9<<99);}

42文字
int A;int main(){return++A-9?9<<main():9;}

60文字
int A,B=9,C=9;int main(){for(;A--?B<<=B:A=B*C--;);return B;}
0744デフォルトの名無しさん
垢版 |
2022/05/09(月) 07:45:44.83ID:VfSI4PVa
intを返せばいいのかと思ったけどfloatとか無限ビットとか言及しているのが気になるな。
解釈違うのかな?
0745デフォルトの名無しさん
垢版 |
2022/05/09(月) 08:53:10.27ID:PsDnm+L1
必要に応じて環境のint型を int4294967296_t とか自由に変えていいわけか
0753デフォルトの名無しさん
垢版 |
2022/05/09(月) 14:07:18.41ID:PsDnm+L1
>>750
それぞれに応じて違う値を返すこと自体がNGでしょ

>>751
一応ルール確認
sizeof(int); も環境によって変わるからNG
1<<999; はintが1024bit以上なら環境に依存せず固定値になるからOKてことでいいよね?
0755デフォルトの名無しさん
垢版 |
2022/05/09(月) 14:20:50.13ID:vBDmnMzm
環境によってintの最大値が違うのに環境依存はまかりならんとかw
なら規格で保証されてる最大値(32767だっけ?)を返すしかなくね?
0756デフォルトの名無しさん
垢版 |
2022/05/09(月) 14:22:28.17ID:SOqsBrLy
>>753
それはだめです
1<<999は例えばintが32bit環境では0となります
大きな数を返すことができていません
0757デフォルトの名無しさん
垢版 |
2022/05/09(月) 14:27:15.36ID:DLFHVgdp
>ただし、"int" "float" "double" で表現できる値は十分大きいものとする
>事実上無限ビットあると考えて良い
これと

>たとえば、intのサイズに依存した値になるコードはNG
ここの兼ね合いがどうなってるのか文意が読み取れん

日本語難しい
0760デフォルトの名無しさん
垢版 |
2022/05/09(月) 17:07:31.36ID:A/IF7G4V
>>753
そういうことです

>>757
「十分大きい場合」に同じ値が返れば良いです
「十分大きい場合」でないならば動作不定でも無限ループでも良いです
0761デフォルトの名無しさん
垢版 |
2022/05/09(月) 17:17:54.32ID:xCpkKQPu
>>760
現実にありえない環境で同じ値が返ったとしても
現実にある環境で異なる値が返るからダメですよ
0763デフォルトの名無しさん
垢版 |
2022/05/09(月) 17:56:24.99ID:DvQbmhaz
すぐにオーバーフローしたら大きな数が作れない ==> intは十分大きい

同じ値が返らないと数の定義にならない ==> 同じ値が返る

この2個の条件は必須

多倍長数が扱える言語であれば十分大きいは満たしているわけだけど
0765デフォルトの名無しさん
垢版 |
2022/05/10(火) 06:49:00.20ID:ME910CgO
>>735-737
FFTでやってる限り誤差で単精度くらいまで落ちるよ
1の乗根じゃなくて整数環でやるべき

あとNGしたいからコテつけてください
0766デフォルトの名無しさん
垢版 |
2022/05/10(火) 07:07:25.40ID:/5WHE8tG
>>759
それintじゃなくunsigned intじゃん
(int)(~0u>>1)は13文字だぞ
0770デフォルトの名無しさん
垢版 |
2022/05/10(火) 12:40:40.45ID:/5WHE8tG
>>768
758にアンカーがないのでそこからしか読んでなかったが
「intを返す関数」と書いてあるのはどこか遡ってみた
で、742か
9E999とか書いてあるの見て思った

 ア ホ か !

付き合ってらんね
0772デフォルトの名無しさん
垢版 |
2022/05/11(水) 01:21:28.84ID:UPU3lDYb
>>597
数値としては
ビット0からビット17179869183の17179869184ビットあって
MSBのビット17179869183だけ1、それ以外全部0 という数
ちなみに log2(2^17179869183) = 17179869183 という数でもある
0774デフォルトの名無しさん
垢版 |
2022/05/11(水) 01:47:19.15ID:UPU3lDYb
100桁精度で計算してみた

2^17179869183 =
4.63718218509504584387714531277598505035321551306497981802919920776481\
1280740258379690028942685133666E+5171655945
0775デフォルトの名無しさん
垢版 |
2022/05/11(水) 01:55:22.86ID:UPU3lDYb
1000桁
4.63718218509504584387714531277598505035321551306497981802919920776481\
1280740258379690028942685133665887678584875885591832718641905762127656\
8648464720428549339230429654230791681707765917647233112807227604202266\
5319507091896875357160842962215472898266643236555234127464648965219429\
4512975764838082263634232746025000505451315362217832502300416050059971\
6055861808134228895379488099475249306954395392974540860455538277768910\
6501779698066463774056727472854585596601051721933481196771957007013333\
1820937700316660548714353734677001021769055523397265041627700949880613\
6512390001031773699898144998699518865275093160899781961932357159230653\
7623370836815040562264217362228933327066544205490551615983201178741086\
9629443458030111199396338422961782744988511892557698949168820144192823\
3037701007229077794006504943886197679972934343613269571575719811291847\
2263408312031495611576479729358418227154841607037559274517841362656405\
8439611218916024169112008441360472444290176302521705087210814345468682\
750024133044013191605E+5171655945

これ以上は迷惑行為だからやめとく
0777デフォルトの名無しさん
垢版 |
2022/05/11(水) 07:00:39.20ID:UPU3lDYb
一番大きい10進正数 ・・・・・・999 を NMAXとおくとき
NMAX * NMAX == 1
NMAX == -1
が言える
0784デフォルトの名無しさん
垢版 |
2022/05/12(木) 19:57:03.47ID:ILoaqAhs
どういう意図で質問してきてんだテメエ
ここは相談スレであってクイズスレじゃねぇんだよ馬鹿たれ
しかも、クイズのごとき問題出してもテメエで正解すら用意してない。
出て行けゴミ野郎
0787デフォルトの名無しさん
垢版 |
2022/05/12(木) 20:41:05.66ID:I3DTYm7n
2^^6は
2120038728808211984885164691662274630835...............8862693010305614986891826277507437428736
であると書いているサイトがある。
0790デフォルトの名無しさん
垢版 |
2022/05/13(金) 00:43:07.89ID:66pxKN84
なぜかというと筆算を考えたらワカル
真ん中に行くにつれて桁の値を求めるのが一番積和の項数が大きいくて大変でありかつ
LHSとRHSの数のあらゆる桁が関わるから誤差に対してもチョー敏感、
0792デフォルトの名無しさん
垢版 |
2022/05/14(土) 13:54:53.41ID:rNqC99VF
>>765
見えない敵の可視化

>>695
mul_f2i()の中で
k1 = 1;
k2 = t360 - 1;
for (; k1 < t180; k1++, k2--) {
 double re, im;
 re = b->data[k1] * c->data[k1] - b->data[k2] * c->data[k2];
 im = b->data[k1] * c->data[k2] + b->data[k2] * c->data[k1];
 d->data[k1] = re;
 d->data[k2] = im;
}
としている積和絵算での誤差の拡大を問題視してないのはなんでじゃろがい?
別段b->data[・]もc->data[・]も絶対値が1未満と決まっているわけではないのでは……
決まっているとしても類似の大きさ同士の差で桁落ちが発生するのでは……
ケkッキョキ、誤差の適正な評価のためには>>679式に積和の都度上限と下限を見積もるしか無いんじゃないの
0793デフォルトの名無しさん
垢版 |
2022/05/14(土) 20:43:21.69ID:YcL0sj9T
Animalクラスを継承したCatクラスとDogクラスがあります

class Cat : public Animal
{
・・・
};

class Dog : public Animal
{
・・・
};

プログラムの中に無数にある以下のような箇所を

Animal *object = new Cat();

以下のようにDogクラスに書き換えたいな、と思ったとき

Animal *object = new Dog();

テキストエディタの一括置換機能を使うよりもっとスマートな方法ってありますか?
0794デフォルトの名無しさん
垢版 |
2022/05/14(土) 20:57:04.02ID:HSfvjOUE
>>793
Cat.cpp とDog.cpp をバックアップする
Dog.cpp を削除する
IDEのリファクタ機能で Cat クラスを Dog クラスにリネームする
バックアップしていた Cat.cpp とDog.cpp を上書きで戻す

これで無数にある Cat を Dog に置き換えられる
文字列置換と異なり Catalog が Dogalog になってしまうこともない
0796デフォルトの名無しさん
垢版 |
2022/05/15(日) 00:01:26.20ID:qDTtv8xD
>>795
>誤差はループ内のprintfで出力してるでしょ
知ってたが>>792の演算をやった後の結果が入った事後データd->data[・]に対して
 x = d->data[i] * k;
 e = (int64_t)floor(x + .5);
 err_max = max(err_max, fabs(x - e));
とするだけではd->data[・]計算中に生じた仮数部LSBを超える誤差が全然見積もれていないんじゃな
いの
(唯一積の両側の絶対値が1以下だった場合は正当化されうるが、それはそれで似たような数の差での桁落ちを招きそう……

>誤差を減らす工夫
i2f()内で整数からフーリエ変換するときにRADIX / 2で事前carry_and_fix()してダイナミックレンジを抑えようとしている努力は認められる
しかしダイナミックレンジを抑えることが絶対的に誤差対策になるかというと以下略、

的な、
0797デフォルトの名無しさん
垢版 |
2022/05/15(日) 00:08:49.83ID:qDTtv8xD
多分仮数部LSBを超える誤差が整数部のLSBにまで達することは無い、という仮定のもとに
上のerr_maxの更新をやってるんだろうけど運悪く(RADIXが10だとして
9999.9999999999999
みたいなケースで仮数部LSB程度の誤差が生じたら最悪
 10000.0000000000000

  9999.9999999999999
かどっちかわからなくなって整数部LSBより上が誤差に侵食され(ry
0798デフォルトの名無しさん
垢版 |
2022/05/15(日) 01:29:26.60ID:Lu4IqK5o
>>794
ファイルを分ける
その発想はありませんでした
さっそく試させていただきます!
ありがとうございました
0800デフォルトの名無しさん
垢版 |
2022/05/15(日) 07:10:32.52ID:zbEPSoXa
>>797
四捨五入によって丸めてるんだから
運悪くなんてことはない

配列の特定の箇所だけ極端に誤差が大きくなることもない

だからerr_maxで誤差評価可能
0802デフォルトの名無しさん
垢版 |
2022/05/15(日) 09:10:05.29ID:d9+IDznH
一時オブジェクト指向全盛でGoF本なんかが崇められてたとき
ここで質問してるやつにデザインパターン見直せとか糞レス返してる奴いたが
最近はオブジェクト指向じゃ生産効率上がらないことわかってGoF本のステータスも低下してるのか?
0803デフォルトの名無しさん
垢版 |
2022/05/15(日) 09:19:34.13ID:duXfvT8B
今も昔も関係ない
GoF本をステータス視するのが間違ってる
デザパタを乱用するのも間違ってる
必要な人が必要なだけ黙って使うのがデザパタ
必要も無いのに手を出すことは間違ってる
今も昔もずーっと同じように間違ってる
0804デフォルトの名無しさん
垢版 |
2022/05/15(日) 09:41:49.69ID:d9+IDznH
オブジェクト指向じゃ生産効率向上しないことが明らかになって
そらGoF本の価値そのものが低下するわなww
new deleteなんて多用されたら困る分野なんていくらでもあるしな
0808デフォルトの名無しさん
垢版 |
2022/05/15(日) 12:29:44.49ID:/JPgC0w0
オブジェクト指向がオワコンだったとしても代わりになるものって何かあるんですか?
0809デフォルトの名無しさん
垢版 |
2022/05/15(日) 12:39:29.05ID:jVQ55S+h
なんか上のレイヤしか触らんwebのひとがオブジェクト指向とデザインパターンをディスること多いわ
そらお前らが利用してるフレームワークを作るのに使っとるんやと
0811デフォルトの名無しさん
垢版 |
2022/05/15(日) 12:56:30.62ID:0scjaaG3
オブジェクト指向がオワコンかどうかは知らないが
少なくとも「C++でオブジェクト指向開発」を謳っている案件は漏れなくクソだ
0812デフォルトの名無しさん
垢版 |
2022/05/15(日) 12:59:14.29ID:c/66LOo2
>>811
Chromiumってクソだったんだ
そんなクソがシェア圧倒的なこの世の中はクソまみれやね・・・
0813デフォルトの名無しさん
垢版 |
2022/05/15(日) 13:00:11.08ID:+mKsOYSe
最近はclassを使うプログラミングとオブジェクト指向プログラミングの両者のうちどちらが広くどちらが狭いとみなす?
0815デフォルトの名無しさん
垢版 |
2022/05/15(日) 13:02:04.44ID:Q6Qf7/b7
あまりオブジェクト指向に固執すると
令和のstaticおじさんみたいなもんだぞ
0816デフォルトの名無しさん
垢版 |
2022/05/15(日) 13:03:51.85ID:c/66LOo2
>>815
staticおじさんはマウントされるだけの上位存在がいるから馬鹿にされた訳だけど、
>>808等も言ってるようにオブジェクト指向がクソだとして代替案があるのか?っていうと無いからはそうはならない
0817デフォルトの名無しさん
垢版 |
2022/05/15(日) 13:21:29.47ID:ymmVxVRO
>>811
ならwindowsを使うのやめたらどうだ?
ついでにスマホもね
オブジェクト指向は何かを知らずにとりあえず否定しておけば自分が上だと考えてる無能
0818デフォルトの名無しさん
垢版 |
2022/05/15(日) 13:27:39.30ID:0scjaaG3
>>817
プロダクトがうんこだと言っているのではない
開発案件がうんこだと言っているのです
まあここ数年は関わってないから知らんけど
0820デフォルトの名無しさん
垢版 |
2022/05/15(日) 13:58:17.52ID:ymmVxVRO
というかいまだにオブジェクト指向という低レベルの次元で争ってる時点で無能確定
0.99999....!=1に拘ると同じくらい頭悪い
0822デフォルトの名無しさん
垢版 |
2022/05/15(日) 14:41:06.77ID:m7KinyBQ
オブジェクト指向がディスられるのは犬猫車で説明しようとした馬鹿どもに責任がある
0825デフォルトの名無しさん
垢版 |
2022/05/15(日) 14:45:32.53ID:m7KinyBQ
議論の場でそもそも勘違いされたくない場合、OOPではなくクラス志向やC++/Java/C#など具体的な呼称に言い換えるだろ
0826デフォルトの名無しさん
垢版 |
2022/05/15(日) 14:59:54.12ID:jVQ55S+h
猫オブジェクトには食べるメソッドじゃなくて餌やるメソッドを定義してほしい
0827デフォルトの名無しさん
垢版 |
2022/05/15(日) 15:11:14.01ID:UBy5+e79
価値観って変わっていくからね
以前はマルチスレッドがもてはやされていたけど
最近はスレッドでは1万並列を扱うのが
困難、真のエンタープライズ分野ではI/O待ちでselect切り替えしたほうがパフォーマンスが出るという流れになってるとか
0830デフォルトの名無しさん
垢版 |
2022/05/15(日) 15:21:41.77ID:UBy5+e79
スレッドってスタック持ってるじゃん
OSや設定にもよるけど1MBとか これがバカにならないんだと思う

ちなみにJavaでは仮想スレッドというOSのスレッドと1対1対応させない並列化の仕組みが導入される
これで100万並列を実現できるんだと
0831デフォルトの名無しさん
垢版 |
2022/05/15(日) 15:45:52.28ID:AAncJnA8
例えばRustのタスク(=仮想的ないわゆるグリーンスレッド)はスタックレスなコルーチンなので個別の専用スタックを必要としなかったり
0833デフォルトの名無しさん
垢版 |
2022/05/15(日) 16:04:53.51ID:AAncJnA8
>>832
むしろマルチOSスレッドこそ並列処理
逆にRustのタスク等はシングルOSスレッド上でも複数のタスクが同時に動くのでその場合は並行処理
0834デフォルトの名無しさん
垢版 |
2022/05/15(日) 16:07:17.76ID:VMVrIVgn
一般的な並列処理の定義だと同時に実行される複数のスレッドが必要だと思うけど。
0835デフォルトの名無しさん
垢版 |
2022/05/15(日) 16:40:35.18ID:UBy5+e79
>>834
そんなことはないでしょ
1C1T CPUの時代でもタイムスライスでマルチスレッドって呼んでたんだから
0839デフォルトの名無しさん
垢版 |
2022/05/15(日) 17:33:52.78ID:dikgwIGH
>>832
別な話だけど無関係でもない
ユニプロセッサな環境でのマルチは待っている間に他のことをするのが目的
マルチプロセッサな環境でのマルチは上記に加えCPU性能を余さず使う目的もある
0840デフォルトの名無しさん
垢版 |
2022/05/15(日) 17:35:04.93ID:d9+IDznH
>>827
>I/O待ちでselect切り替えしたほうがパフォーマンスが出る

こんまもんマルチスレッド以前にマルチタスクOSで昔からやってることだろ
0841デフォルトの名無しさん
垢版 |
2022/05/15(日) 17:39:18.19ID:d9+IDznH
>>832
>そもそもマルチスレッドと並列処理は無関係でしょ
>そもそもマルチスレッドと並列処理は無関係でしょ
>そもそもマルチスレッドと並列処理は無関係でしょ
>そもそもマルチスレッドと並列処理は無関係でしょ


どういうおつむしてんだwww
0843デフォルトの名無しさん
垢版 |
2022/05/15(日) 18:08:14.42ID:UBy5+e79
>>840
そうそう昔からやってるんだよ
俺がいいたいのはそこ

CPUコア数がどんどん増えていくしマルチスレッドプログラミングが正義!
ってもてはやされていたけどパフォーマンスの問題があってスレッド使わない方式に回帰してるの

オブジェクト指向も同様にオブジェクト指向プログラミング登場以前の手法に回帰することはありえる
ということが言いたかった
スレッドの話を持ち出して混乱させてしまってごめん
0844デフォルトの名無しさん
垢版 |
2022/05/15(日) 18:10:51.75ID:d9+IDznH
>>819
OSを利用するために用意されたライブラリ群がオブジェクト指向的な、
メッセージをHand toする形のライブラリコールを利用してるからといって、
OSのカーネルそのものがオブジェクト指向で設計されてるとでも思ってんのか。
そもそもUnixにしろRTOSにしろオブジェクト指向とは縁もゆかりも無い時代からのOSなんだがな。
0845デフォルトの名無しさん
垢版 |
2022/05/15(日) 18:17:13.65ID:TK6qKU9x
しかしX11はオブジェクト指向。
0846デフォルトの名無しさん
垢版 |
2022/05/15(日) 18:38:13.42ID:TK6qKU9x
Windowsはシステム全体がオブジェクト指向。
どのような言語を使おうがオブジェクト指向。
0847デフォルトの名無しさん
垢版 |
2022/05/15(日) 18:44:58.55ID:d9+IDznH
xlibでプログラム書いたことあんのか、
Cコードの固まりがオブジェクト指向てどこの誰が教えてくれたんだ?
xlibのあまりのコードの多さ見て
C++に目を付けたあげく、勝手に文法変えてWinMainなんて用意したのがVC++だろ
そもそも、
Windowsとは違い、X はOSではないことぐらい知っとけよw
おれは>>819の"OS"にレスしてんの
0848デフォルトの名無しさん
垢版 |
2022/05/15(日) 18:53:16.28ID:6iIg86JO
>>843
>パフォーマンスの問題があってスレッド使わない方式に回帰してるの
それはないのでは?物理コア数の増加にともなって、やっぱりスレッドを使う方向に舵を切っているかと
0850デフォルトの名無しさん
垢版 |
2022/05/15(日) 19:00:43.54ID:TK6qKU9x
>>847
関数呼び出しの第一引数がオブジェクト、関数がメッセージと考える。
第一引数のオブジェクトにメッセージを送るのがXlibの関数呼び出し。
0851デフォルトの名無しさん
垢版 |
2022/05/15(日) 19:10:33.61ID:d9+IDznH
>>848
まだまだスレッド数が少ないCPUではスレッド使えるのに使わないのは悪だな
GPUだとスレッド立ち上げがパフォーマンス低下(処理速度でなくとも消費電力)に繋がる場面はすぐ訪れる。
1万データのMax検索するのに1万スレッド起動しても何の意味も無いから
回帰もなにも、パフォーマンス改善するから並列化を利用するのであって、
オブジェクト指向みたいな生産効率向上(という幻相)のためにパフォーマンスを犠牲にする、
エンドユーザーからみれば安かろう悪かろうでしかないコードスタイルの話とはわけが違う
0853デフォルトの名無しさん
垢版 |
2022/05/15(日) 19:28:05.58ID:d9+IDznH
>>650
画像処理プログラムやるとすぐわかるのが関数引数の数がすぐに肥大化すること。
これじゃ、関数コールの際、パフォーマンスが低下すること甚だしいんで、
structという一つのデータグラムにして、ポインタ渡すことと、その順番を
関数コールの一つのマナーにしてるだけだろ。
classはそこから生まれたとしても、
X11をオブジェクト指向というのは拡大解釈だ。
0854デフォルトの名無しさん
垢版 |
2022/05/15(日) 19:33:03.96ID:p4xLOVEd
xは知らんけどwindows apiのウィンドウ周りはc言語でオブジェクト指向だよ
ハンドル引数にして色んなタイプのウィンドウまとめて扱えるようにしてる
setwindowtext使えばタイトルバー持つウィンドウはタイトルが変わる
テキストボックスならテキストがかわるって具合に
0855デフォルトの名無しさん
垢版 |
2022/05/15(日) 19:39:10.56ID:p4xLOVEd
上にも書いたけどそのstructのポインタをコード上は見えないけど渡してるのがメンバ関数ね
0856デフォルトの名無しさん
垢版 |
2022/05/15(日) 19:42:29.90ID:TK6qKU9x
>>855
スレ住人は全員わかってることなので、わからない人はC++を使わない人なのでは?
すると、何のためにスレへ?という疑問がわく。
0857デフォルトの名無しさん
垢版 |
2022/05/15(日) 20:15:20.39ID:c/66LOo2
>>847
Cでオブジェクト指向なんてごまんとあるがろうが
同じグーグル製プロジェクトで言うとlibwebpなんて典型だな
>>850>>854が言ってる通り実質thiscallを多用するCなんて本当にごまんとある
関数ポインタ渡す際にvoid*のタグもセットで渡すとかもな
0858デフォルトの名無しさん
垢版 |
2022/05/15(日) 20:22:33.85ID:ymmVxVRO
よく見たらこのスレの住人もオブジェクト指向マンと同じレベルで気持ち悪い奴だらけだった
0859デフォルトの名無しさん
垢版 |
2022/05/15(日) 20:22:35.74ID:c/66LOo2
>>848
シングルスレッド非同期に回帰しつつあるのはJavaScriptがブラウザやNode.jsでそれの有用性を証明しまくってるからだな
最近だとC#Unityでゲームにおいてもシングルスレッド非同期は多用され始めてる
ロック関連によるバグやスレッド作成コストを回避出来るのが主な利点
0860デフォルトの名無しさん
垢版 |
2022/05/15(日) 20:46:16.10ID:9hg43hf0
その昔IBMがM:NモデルのPOSIXスレッドAPI(NGPT)を
Linuxカーネルに入れようとしてた記憶してるけど
どうなったんだっけ?
0863デフォルトの名無しさん
垢版 |
2022/05/15(日) 21:28:16.73ID:m7KinyBQ

計算量見積れない処理は全部バックグラウンドスレッドに投げるだろ
Javascriptも一緒
0864デフォルトの名無しさん
垢版 |
2022/05/15(日) 22:03:31.83ID:tH2IP/Jf
>>857
そもそもunixのファイル関係だってread/writeとかの関数ポインタを含む構造体で管理してるから画面出力を簡単にディスクに出力できる
まんま仮想関数テーブルみたいなもんや
ID:d9+IDznH はだいぶレベル低いか単なるレス古事記だろうな
0865デフォルトの名無しさん
垢版 |
2022/05/16(月) 08:11:50.24ID:IfoxgD2F
「オブジェクト指向」とかいうバズワードで議論するなら、せめて定義ぐらいは提示しろよ。
「定義はwikipediaのオブジェクト指向プログラミング」あたりで議論したら?
0867デフォルトの名無しさん
垢版 |
2022/05/16(月) 09:00:24.74ID:mycbCv2g
OSからみるとシングルスレッドだけど、開発言語の補助でマルチスレッド風に記述できるようになっているのか
OSからみてもマルチスレッドなのか
0869デフォルトの名無しさん
垢版 |
2022/05/16(月) 09:55:17.75ID:l25MG5nC
そもそも非ネイティブ言語の場合は実行環境によるとしか言いようがないが、async awaitのためにマルチスレッドが走ることはない
GCとか含めたら別スレッドが関与することはあるだろうけど
上でも言われてる通りスレッド立ち上げコスト削減も目的の一つだから態々その目的をふいにするような実装はしないだろう
0870デフォルトの名無しさん
垢版 |
2022/05/16(月) 10:27:55.73ID:I2zrNWyd
そらいちいちスレッド起動したらコストかかるけど、イベント処理なんて下位のライブラリで複数スレッド使っててもおかしくないでしょ
ま、上から気にすることじゃない
0872デフォルトの名無しさん
垢版 |
2022/05/16(月) 10:59:43.36ID:l25MG5nC
>>870
幾多あるライブラリの話までし始めたらそらなんでもあるよ

>>871
スレッド立ち上げコスト削減は目的のうちの一つであってそれだけじゃない
むしろメインはlockを考慮しなくて済むって方じゃないかな
0873デフォルトの名無しさん
垢版 |
2022/05/16(月) 11:10:07.16ID:I2zrNWyd
>>872
だから、OSから見た話をしてるんやん
それに全然関係ない話でもない
ほんとお前馬鹿だよな
0879デフォルトの名無しさん
垢版 |
2022/05/16(月) 12:35:37.80ID:l25MG5nC
>>877
そもそも言語の話にOSとか言い出すのが意味不明だし、強いて考えられるとしたら
int main() { for (int i = 0; i < 100; ++i) sleep(1); return 0; }
これもOSレベルで見たら単一スレッドで頭からケツまで動く保証はないっていうレベルの話がしたいのか?
こういう次元の話をしたいなら馬鹿としか思えないけど
0880デフォルトの名無しさん
垢版 |
2022/05/16(月) 12:48:57.95ID:IoIRdAU7
>>866
JavaScriptは基本的にはシングルスレッドなので並行(concurrent)に複数同時に動くが
workerを用いると別スレッドとなり並列(parallel)に複数同時に動く
ただしworker抜き前提で話すことも多いから前者のシングルスレッド前提でもいいと思う

>>870
言語のライブラリのレベルでそれが起きることはなく、あくまでも言語の仕様の範囲内に従う
しかし言語のランタイムではそれが起きるケースもあり、そこは別言語で書かれていてもよい
例えばJavaScriptは(別workerでなければ)シングルスレッドが保証されており、
複数の並行処理に対して厳格な競合対処をせずともプログラミングが可能だが、
内部ランタイムではI/O効率化のためにマルチスレッドが使われる実装もある
0881デフォルトの名無しさん
垢版 |
2022/05/16(月) 12:59:08.31ID:I2zrNWyd
馬鹿のひと、前もいた実装は関係ないおじさん?
他人は許せないが、なぜか自分自身は語ってしまうというあの馬鹿?
0882デフォルトの名無しさん
垢版 |
2022/05/16(月) 15:52:25.18ID:WoUg3+5o
幼稚園児レベルの罵倒語を使うのは
技術的な議論で劣勢であることを自己申告しているようなものだ
優勢な者はそんなもの使わなくてもどうにでも料理できるからな
0884デフォルトの名無しさん
垢版 |
2022/05/16(月) 18:53:11.20ID:mA14eCl1
>>883
有吉の髪をフサフサにしておきました。
0885デフォルトの名無しさん
垢版 |
2022/05/16(月) 19:01:54.89ID:mA14eCl1
>>883
波平の髪を二本にしておきました。
0886デフォルトの名無しさん
垢版 |
2022/05/16(月) 19:17:21.17ID:mA14eCl1
>>883
ドラえもんをアフロにしておきました。
0889デフォルトの名無しさん
垢版 |
2022/05/18(水) 09:56:55.15ID:spPNFpZE
X11をオブジェクト指向とか寝言いうやつ居るんだな
あれはオブジェクト指向もどき
つまりオブジェクト指向ではない

アセンラで構造化もどきつくりましたレベルの話
0891デフォルトの名無しさん
垢版 |
2022/05/18(水) 10:15:34.00ID:I2H5iqao
どんな作りになっていようがコード書いた本人が
オブジェクト指向だと言えばオブジェクト指向だし
構造化だと言えば構造化なんだよ
書く者の頭の中の考え方なんだから、
コードそのものの特徴から決めつけはできないし
ドヤるやつは大抵うんざりされてることに気がつかない
0892デフォルトの名無しさん
垢版 |
2022/05/18(水) 10:37:48.91ID:Q68htpiP
     /: : : : : __: :/: : ::/: : ://: : :/l::|: : :i: :l: : :ヽ: : :丶: : 丶ヾ    ___
     /;,, : : : //::/: : 7l,;:≠-::/: : / .l::|: : :l: :|;,,;!: : :!l: : :i: : : :|: : ::、  /     ヽ
    /ヽヽ: ://: :!:,X~::|: /;,,;,/: :/  リ!: ::/ノ  l`ヽl !: : |: : : :l: :l: リ / そ そ お \
   /: : ヽヾ/: : l/::l |/|||llllヾ,、  / |: :/ , -==、 l\:::|: : : :|i: | /   う う  前  |
.   /: : : //ヾ ; :|!: イ、||ll|||||::||    ノノ  イ|||||||ヾ、 |: ::|!: : イ: ::|/   な 思 が
   /: : ://: : :ヽソ::ヽl |{ i||ll"ン    ´   i| l|||l"l `|: /|: : /'!/l     ん う
 ∠: : : ~: : : : : : : :丶ゝ-―-      ,  ー=z_ソ   |/ ハメ;, :: ::|.   だ ん
   i|::ハ: : : : : : : : : : : 、ヘヘヘヘ     、  ヘヘヘヘヘ /: : : : : \,|.   ろ な
   |!l |: : : : : : : : :、: ::\    、-―-,      / : : :丶;,,;,:ミヽ   う  ら
     丶: :ハ、lヽ: :ヽ: : ::\__  `~ "      /: : ト; lヽ)   ゝ
       レ `| `、l`、>=ニ´        ,  _´ : :} `   /
         ,,、r"^~´"''''"t-`r、 _  -、 ´ヽノ \ノ   /    お ・
       ,;'~  _r-- 、__     ~f、_>'、_         |  で  前 ・
      f~  ,;"     ~"t___    ミ、 ^'t         |  は  ん ・
      ,"  ,~         ヾ~'-、__ ミ_ξ丶     |  な  中 ・
     ;'  ,イ ..          ヽ_   ヾ、0ヽ丶    l         /
     ( ;":: |: :: ..          .`,   ヾ 丶 !    \____/
     ;;;; :: 入:: :: ::      l`ー-、   )l   ヾ 丶
     "~、ソ:: :い:: :     \_  ノ ,    ヾ 丶
0894デフォルトの名無しさん
垢版 |
2022/05/18(水) 11:07:21.81ID:OWcrFw6t
いずれにせよオブジェクト指向を上回る手法が登場しない限りオブジェクト指向に対してマウントは取れない
0895デフォルトの名無しさん
垢版 |
2022/05/18(水) 11:21:09.24ID:spPNFpZE
予めメモリプールを設定しておくようなOSで
オブジェクト指向ありきでプログラム設計されてると思ってんのはおめでてーな
馬鹿の一つ覚えとも言う
0898はちみつ餃子 ◆8X2XSCHEME
垢版 |
2022/05/18(水) 12:02:56.59ID:bslzKqYb
オブジェクトがメッセージを投げるという関係性でプログラムを構築するのが
オブジェクト指向ってもんだから、関数 (メンバ関数) をメッセージとみなすかもしれないし、
メッセージキューのようなものを作るかもしれない。
プログラミング言語の言語機能をどのようにプログラム構成の方法論に当てはめるかは自由度はある。
その意味では >>891 の考え方は真っ当なものだ。

でも、 C++ では C++ の常識というものもあるし、
ある程度は共通の認識を作っておかないと会話が成り立たんだろう。

基本的にはふんわりした概念でしかないからこの場合にオブジェクト指向
という言葉をどういう意味で使うことにするのかはこの場で擦りあわせろや。
0900デフォルトの名無しさん
垢版 |
2022/05/18(水) 12:22:21.26ID:CvWTVaQG
>>889
オブジェクトを「指向している」だろ。

指向「もどき」て何だよ。
何を「指向もどき」と言っているのか全然わからん。
0901デフォルトの名無しさん
垢版 |
2022/05/18(水) 16:21:01.44ID:SnLFYw7t
たしかにオブジェクト志向オブジェクト志向言いはじめたころは
「メッセージング」ってのがやたら強調されてたな
たぶんスモールトークの影響だろうけど
最近の「オブジェクト志向」はどっちかってとオブジェクトのかたまりを
どう型つけるか、階層化するかの言語構造のことを言いがちだけど
0902デフォルトの名無しさん
垢版 |
2022/05/18(水) 16:31:15.14ID:ZUGTejLE
指向だけどな
むしろメッセージングの重要性は高まってきてると思うけど、頭のいいひとにしか扱えない感じだな
馬鹿は階層にこだわるしかない
0903デフォルトの名無しさん
垢版 |
2022/05/18(水) 20:03:09.30ID:9cdFfz37
オブジェクト指向で利点はデータモデルを表現できることだろ
それが言語上で構造体なのかクラスベースなのかアクターなのかは大きな問題じゃない
0904デフォルトの名無しさん
垢版 |
2022/05/18(水) 21:04:56.14ID:xACVFtZa
ウィンドウに開けとか閉じれとか大きくなれとか指示してれば、それはもうオブジェクト指向なので、ウィンドウ・システムとオブジェクト指向はだいぶ相性が良い。
0905デフォルトの名無しさん
垢版 |
2022/05/18(水) 21:06:39.10ID:AIFQ7kC9
>>891
hogehoge("ソポポポぉおおおおおん!");
↑これはオブジェクト指向で書いたプログラムです!!!!
って言ったらそういう解釈もありだなって思うの?

俺はオブジェクト指向アンチ!
絶対にオブジェクト指向なコードなんて書かね!といった直後に
const dialog = document.getElementById("dialog");
dialog.addEventListener("click", e =>{イベント処理});
みたいなコードを書いていたら、そのコードはオブジェクト指向ではないと解釈するの?

なわけないよね
0906デフォルトの名無しさん
垢版 |
2022/05/18(水) 21:06:55.62ID:xACVFtZa
とうとうアジュール・アカウントを作ってしまった。
0907デフォルトの名無しさん
垢版 |
2022/05/18(水) 21:07:48.89ID:xACVFtZa
よし。
今日からおれもアジュール民だ。
0909デフォルトの名無しさん
垢版 |
2022/05/18(水) 21:48:35.12ID:I2H5iqao
>>905
思うよ
するよ

思い込みの激しい人だな
0910デフォルトの名無しさん
垢版 |
2022/05/18(水) 22:00:38.20ID:AIFQ7kC9
>>909
嘘付くのやめていただけますか?

まず、hogehoge(略)をどのように捻くれた解釈をしたらオブジェクト指向に見えるのか解説してくれますか?
0911蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/05/18(水) 22:04:01.32ID:1ADDPTHW
struct HogeHoge {
void operator(const char *str) const {
std::cout << str;
}
};

HogeHoge hogehoge;
0914デフォルトの名無しさん
垢版 |
2022/05/18(水) 22:09:27.02ID:V03o9uZn
プログラムを書いた人がオブジェクト指向設計ですと言っているものまでオブジ
ェクト指向ではないと否定するのは愚策言ったが最後、ではオブジェクト指向で
はない何なのかを述べねばならなくなるからなgoto否定論者にbreakは実質goto
とかあまつさえgotoを使ったプログラムを書いてgoto否定論者に対して正当性を
主張した場合に生じる惨状と同じで社会スキル的な意味で避けるべき理由が十分あ
0915デフォルトの名無しさん
垢版 |
2022/05/18(水) 22:09:33.95ID:spPNFpZE
>>900
オブジェクト指向もどき が オブジェクト指向でないのは
くじら が さかな で無いのと同じだ

馬鹿は知らないくじら構文
そして、応用系

オブジェクト指向もどき が オブジェクト指向でないのは
ヒトもどきのお前 が ヒトでないのと同じだ
0918デフォルトの名無しさん
垢版 |
2022/05/18(水) 23:15:16.60ID:xACVFtZa
C++のオブジェクト指向全盛期は20年以上前だからね。
その後は黒魔術全盛期がやってきた。
0920デフォルトの名無しさん
垢版 |
2022/05/19(木) 00:10:17.97ID:JEoDteVp
組み込みC++だと普通にオブジェクト指向全盛期だけどな
uart1.write(data);
のような記述が当たり前になってきて有難い
0921デフォルトの名無しさん
垢版 |
2022/05/19(木) 02:53:53.60ID:m2mVV8oP
組み込みってマクロ大好きだからオブジェクト指向の書き方と相性悪いと思ってたけど最近はそうでもないの?
それともそう描いたときのuart1やwriteもマクロなの?
0923デフォルトの名無しさん
垢版 |
2022/05/19(木) 05:20:52.31ID:UJCwwVid
>>910
fprintf(stdout, "そぼぼん");
みたいになってることもあるからな
obj.func(...);という構文は絶対条件じゃないんだよ
PostMessage(hWnd, WM_APP, 0, 0);なんてのだってオブジェクト指向だし
0925デフォルトの名無しさん
垢版 |
2022/05/19(木) 07:46:20.72ID:ijZ+Z+2A
>>915
なら
ヒトもどきのお前 が ヒトでない
が偽だから
オブジェクト指向もどき が オブジェクト指向でない
も偽だな。
0926デフォルトの名無しさん
垢版 |
2022/05/19(木) 07:47:19.60ID:Kexh9zXI
>>923
そう、Cの時代からオブジェクト指向はあったよな
0927デフォルトの名無しさん
垢版 |
2022/05/19(木) 07:50:32.12ID:sZfr5xXW
別に
objに対してfunc()というメッセージを送るのと、
PostMessage()という手続きにhWndを渡すのでは意味が違う
obj.func()をコンパイルしたらfunc(ptr, ...)とptrとして&objを渡すコード、みたいなものになるではないか、というのはそれはそうだが
そいつは意味を捨てているからにすぎないことは統語論的に考えたらワカル
例: getter
x = obj.getX(); // I get the value X となるようにobjに仕事させよという意味(CPUにobjを使役するよう命令している
x = getX(&obj); // get the value X from (/ by / with / in) the object obj、という意味(CPUにやれと命令している
0929デフォルトの名無しさん
垢版 |
2022/05/19(木) 07:55:55.82ID:bqW40Z5X
オブジェクト指向って
単にクラス関数を呼んだからオブジェクト指向
とかいう単純な物じゃない

プログラムやモジュールの設計思想の話
0931デフォルトの名無しさん
垢版 |
2022/05/19(木) 08:10:11.10ID:Bak+CTg/
>>915
その主張において
・「ヒトもどき」と「ヒト」の違いは何か。「ヒトもどき」が「ヒト」でないとする根拠は何か。
・「ヒトもどき」の「もどき」の意味が「指向もどき」の「もどき」の意味と同じとする根拠は何か。

間違った根拠と間違った推論から導いた結論に意味はないから、上記に答えられないならその主張に議論する価値は無い。
論理をかじって知ったかぶりしたくなるのもわかるけど、もうちょっと勉強した方がいいよ。
0934デフォルトの名無しさん
垢版 |
2022/05/19(木) 08:30:35.34ID:sZfr5xXW
>>930
それはそうで世に膾炙しているオブジェクト指向はちょっとどうかしているせい
objにXの値を寄越すようにメッセージを送るのであれば
 x = obj.getX(); // (1)
ではなくて、
 x = obj.giveX(); // (2)
でないとおかしいはず……
(1)に対して合理的な意味づけを行おうとすると>>927みたいな解釈にならざるおえない
やっぱ世の中がおかしい
0935デフォルトの名無しさん
垢版 |
2022/05/19(木) 09:28:38.04ID:XCQrD9i4
objっていうデータ構造体からxを取得するからgetXって解釈してたわ
0936デフォルトの名無しさん
垢版 |
2022/05/19(木) 09:37:01.76ID:HFWBeLeA
オブジェクト指向って obj.method( ) という構文だけの話じゃないでしょ
継承・多態性・オーバーライド・オーバーロード・オーラロードなどの機能もオブジェクト指向の重要な要素じゃないの
あと機能とは別にカプセル化などオブジェクト指向で周知された設計手法もある(これはオブジェクト指向でなくてもできるけど)
0938デフォルトの名無しさん
垢版 |
2022/05/19(木) 09:56:27.95ID:qAaVAzHk
hogehoge書いた本人はたぶんそこまで考えていないよ
それこそ思い込みが激しいでは?
0939デフォルトの名無しさん
垢版 |
2022/05/19(木) 12:33:57.63ID:Nz/+UK9H
>>934
オブジェクト指向の「オブジェクト」は、主体・客体の「客体」として解釈するといい。主体はプログラマーとかCPUとかの指示・命令をする主体。
0941デフォルトの名無しさん
垢版 |
2022/05/19(木) 12:58:56.65ID:NIcGv5m1
オブジェクト指向は我々プログラマにとって必要です

>>938
私はオブジェクト指向を知っていることに誇りをもっています
0942デフォルトの名無しさん
垢版 |
2022/05/19(木) 13:04:29.79ID:B0nB5mTs
>>934
俺はオブジェクト指向がうまいから職場で神扱いされてる


>>919
お前はオブジェクト指向ができるの?

なんとか言ったらどうなんだ
0943デフォルトの名無しさん
垢版 |
2022/05/19(木) 13:06:45.60ID:YUgVG0pp
>>911
そうやってオブジェクト指向ができないからニートだと思われてるんだよww
これに懲りたらオブジェクト指向を学んでこいwww
0945デフォルトの名無しさん
垢版 |
2022/05/19(木) 13:20:01.49ID:z4apOfvE
何言ってんだこいつ
オブジェクト指向を知ってるからって偉そうにしやがって
0946デフォルトの名無しさん
垢版 |
2022/05/19(木) 13:52:35.01ID:gDUMsWXi
>>927
いや、意味は違わないよ
違うのはその結論(コード)に至るまでの考え方だ
オブジェクト指向は構文ではなく考え方
だからアセンブラでもできるんだ
0949デフォルトの名無しさん
垢版 |
2022/05/19(木) 17:36:19.36ID:6RgATOKw
アホだからアホでも使えるように構造化するのを大事にしてる
0950デフォルトの名無しさん
垢版 |
2022/05/19(木) 18:44:20.43ID:XmlfPc2y
802から始まって、いまだ発散してるから
線引含めてめんどくせぇ話だなというのはわかる
0951デフォルトの名無しさん
垢版 |
2022/05/19(木) 18:46:23.64ID:2O7Wjx2k
VIPでやれと言われるような話題。
0952デフォルトの名無しさん
垢版 |
2022/05/19(木) 19:01:16.29ID:jm7Yx9uZ
>>949
想定以外の使い方は許さない方が無難かね。Conceptsが普及すればc++でも制約プログラミング流行るかな。
0953デフォルトの名無しさん
垢版 |
2022/05/20(金) 06:26:48.33ID:QdnN/13A
プログラムの可読性は大事だが
それをアホへの迎合と勘違いしてはいけない

COBOLからの教訓だ
0954デフォルトの名無しさん
垢版 |
2022/05/20(金) 06:48:44.29ID:jg8JP3/X
可読性とは結局
自分ルールに添ってるか
自分と同レベルの知識や頭脳か
になるからねえ
0955デフォルトの名無しさん
垢版 |
2022/05/20(金) 08:17:00.86ID:biGldfGz
>>939
>オブジェクト指向の「オブジェクト」は、主体・客体の「客体」として解釈するといい。
どういうこっちゃ……
オブジェクトを客体とみなすルールは必ずしもその客体が主体的に動くシチュエーションの禁止にはならない
客体が主体的に動くシチュエーションを禁止したかったら、複文の禁止までルールを推し進めねばならん
例:
進駐軍の兵隊オブジェクトに「Get chocolate」と言ったらそのオブジェクトがチョコレートの調達に走るのが妥当
この場合進駐軍の兵隊オブジェクトが主体的に動く(倉庫等に取りに行く)ことが気体される
進駐軍の兵隊オブジェクトに「Give me chocolate」と言って初めて発令の主体たるCPUがチョコレートを受け取れる
0956デフォルトの名無しさん
垢版 |
2022/05/20(金) 08:26:59.91ID:biGldfGz
どっちにせよチョコを取りに行ったりくれたりする主体は進駐軍の兵隊オブジェクト
さらに進駐軍の兵隊オブジェクトが倉庫の受付に「Get chocolate」言うかもしれんし
そうすると進駐軍の兵隊オブジェクトがチョコレートを受け取る主体にもなり得る
こういう入り組んだ解釈を一切禁止ということならやっぱ複文禁止しか……
それはそれで新しいプログラミングパラダイムが拓けそうやがどうかなあ……
0957デフォルトの名無しさん
垢版 |
2022/05/20(金) 08:31:45.87ID:biGldfGz
ていうかそういうのはどうでも良いんですよそれよか>>695
のコードについて質問なのですが

fouri()の中に
 sin1 = table[t0];
 cos1 = table[t1];
というのがあって、cos1 + i * sin1が1の原子2^N乗根だと思うじゃん?
しかし動きを見ると5.333333乗根とか(これはまだわからないでもない
4.571429乗根とかわけわかんない数値が入って来るんですがなんで?!
ボスケテ、
0959デフォルトの名無しさん
垢版 |
2022/05/20(金) 19:33:47.78ID:0DaneQt4
 
 __     __  ___ _____  _____     ___ ___    ___
 |   |    /  /  |  //       | /__  __/ [][] _| |_| |__ _| |_
 |   |.   /  /  /  / /   / ̄ ̄|. l    / /     |    _  | |_  レ'~ ̄|
 |   |  /  /  /  / /   /.  / /    |  |___      ̄|  | / / /   /| |
 |   |  /  /  /  / /    ̄ ̄ /     \__|     |  |  ̄ /_  /  | |_
 |   |. /  /  /  / /   / ̄ ̄ ̄                |_|     |__|   \/
 |   |/  /  /  /. /   /  
 |.     /  /  /  /   / 
 |    /. /   | ./   /  
  ̄ ̄ ̄   ̄ ̄ ̄.  ̄ ̄ 
0960デフォルトの名無しさん
垢版 |
2022/05/20(金) 20:11:14.93ID:biGldfGz
>>958
1<<i乗根は結局2^i乗根ということで、
(2*M_PI)/atan2(sin1, cos1)が2^iすわなち整数にならないとおかしいんじゃないの
しかし実際は16乗根とか64乗根に交じって5.333333乗根とか4.571429乗根とかが混じってくるのでつ∀`;)
0963デフォルトの名無しさん
垢版 |
2022/05/20(金) 23:24:07.63ID:mAopBTqL
マクロでしか実現できない機能って何がありますか?
派遣先のライブラリがマクロだらけで驚いたので気になりました
0965デフォルトの名無しさん
垢版 |
2022/05/20(金) 23:48:21.44ID:5lKx3hyB
いろいろあると思うけど、ログ関数とか作るときに関数名とか行数とか出力させたかったらマクロ使うかな
0967デフォルトの名無しさん
垢版 |
2022/05/21(土) 00:17:23.34ID:SL+9c0t4
コンパイラによってつける属性変えるときとか
public:をオンオフしたり構文に影響を与えるものとか

MSVCの標準ライブラリ覗くと
#define _CONSTEXPR20 constexpr
//#define _CONSTEXPR20 inline //C++17以前
とか書いてあったりする

式を文字列として展開するのもマクロじゃなきゃできない
#define A(exp) #exp

文字列連結(#define A(a1,a2) a1##a2)もマクロじゃなきゃできないけどデバッグが無理ゲーになるから使わん
0968デフォルトの名無しさん
垢版 |
2022/05/21(土) 00:19:10.39ID:DcWHGr0j
__FILE__や__LINE__を使うのを隠蔽したいときはマクロにするしか、
あと文字列を結合してシンボルを合成するとか、
#define cat(a, b) a##b
#define cat2(a, b) a/**/b
0969デフォルトの名無しさん
垢版 |
2022/05/21(土) 00:53:48.99ID:SKvcmC+r
マクロでぐにゃぐにゃしてる中はデバッガで止めづらくなるね
文字列生成(そして文字列の連結) 識別子の連結 はプリプロセッサじゃないとできないし
0971ハノン ◆QZaw55cn4c
垢版 |
2022/05/21(土) 06:57:00.43ID:0jWT+RR4
というか、inline 指定を絶対化すればいいだけ
どうして inline 指定してもインラインされない場合がある、とか勝手なことをするのか不明
0974デフォルトの名無しさん
垢版 |
2022/05/21(土) 08:09:54.00ID:0jWT+RR4
>>973
閾値を決めて閾値を超えてとまらないことがわかったら「エラーを出してコンパイルを止める」べきで、勝手に inline を無視してコンパイルしなおすなんて言語道断、コンパイラ作者の独善だね
0976デフォルトの名無しさん
垢版 |
2022/05/21(土) 10:25:33.17ID:qJClzxWq
#includeと#defineで疑似メタプログラミング的なことをすることはある
テンプレート化出来ない場合もあるからな
0977デフォルトの名無しさん
垢版 |
2022/05/21(土) 10:48:13.19ID:Kirg9sMV
constexprが中途半端で結局constevalが追加されたのに倣えば、inlineの強制バージョンも標準化していいはずだよな
既に独自実装のalways_inlineや__forceinlineはあるんだし
0978はちみつ餃子 ◆8X2XSCHEME
垢版 |
2022/05/21(土) 11:13:07.39ID:JD6rd3hb
C++ は見かけ上の動作が仕様通りならどういう機械語を生成するか規定しないのが原則だから……。
言語仕様的には constexpr やら consteval も定数式として使える範囲を拡大しただけで、生成される機械語に対しては要求をしてない。
(想定はしていると思うけど。)
0979デフォルトの名無しさん
垢版 |
2022/05/21(土) 11:49:29.76ID:DcWHGr0j
翻訳系の仕事はソースコードの意味を変えずにオブジェクトコードに翻訳することで(ry
狭義のアルゴリズム(シングルスレッド条件、有限ステップで結果出力)の入力と出力の関係が翻訳前後で同じ結果になるならおk
最適化はボランティア活動みたいなもん
だいたいコルモゴロフ複雑性的な意味で一意な解など一般に無いし
0980デフォルトの名無しさん
垢版 |
2022/05/21(土) 12:00:28.50ID:DcWHGr0j
ていうかDFTと逆DFTおよび4n乗根のDFTと逆DFTができましたよ
https://ideone.com/uK9v58

n語のフーリエ変換にメモリを2n語使って良いなら話は簡単やが
>>695 のソースコードはn語で済ませているから黒魔術を駆使しているに違いない
>>695 の作者は漏れよか頭良すぎ(いやいい意味で、
0981ハノン ◆QZaw55cn4c
垢版 |
2022/05/21(土) 14:44:04.21ID:0jWT+RR4
>>978
>C++ は見かけ上の動作が仕様通りならどういう機械語を生成するか規定しないのが原則だから……。
だとすると、inline の存在自体が原則に大きく矛盾していることになりますねえ
0983デフォルトの名無しさん
垢版 |
2022/05/21(土) 15:01:05.79ID:0jWT+RR4
>>982
そんな曖昧な態度だから、マクロによるインラインが跋扈してしまうんです、inline に限っては強制力を伴うべきでしょう、#define マクロを葬り去りたいのなら
0984デフォルトの名無しさん
垢版 |
2022/05/21(土) 15:01:21.03ID:OwY6A3+8
そう
あくまでヒント

ヒントになった理由は
世の中のプログラマーがアホだから
0986デフォルトの名無しさん
垢版 |
2022/05/21(土) 15:23:50.89ID:ocVGFLUP
CRTPにするとインターフェース継承してもインライン展開されるのほんとまじ意味わからん
0989デフォルトの名無しさん
垢版 |
2022/05/21(土) 16:03:58.87ID:DcWHGr0j
ちと別件に取り掛かったのでソースコードを見ながらではなく想像やが
>>695 のソースコードでやっている頻繁なswapの意図がわかった希ガス
 X(k) = Σ[j=0..n-1]{ x(j) * w^(j*k) }
を計算するとき項の足し合わせ順序はどうでも良く、かつk>1なら
 j * k = 0 (mod n)  --- (1)
となるx(j) * w^(j*k)が複数回現れるから、(1)を満たす項の出現回数が大きいものを最初に足し合わせたらたちまち
(出現回数)-1語 のメモリが空く、というのが基本的着想で、
これを異なるkについて繰り返し行う場合(1)を満たす最大の出現回数となるjの系列jはk毎に相違するから、
kについての繰り返しについても部分計算を片付けてメモリを空けつつ進められ、
結局jとkの2重ループについてメモリを空けつつつつがなく進められるというしくみ(多分
0990はちみつ餃子 ◆8X2XSCHEME
垢版 |
2022/05/21(土) 16:11:12.45ID:JD6rd3hb
>>981
inline は ODR の例外。 また、異なる翻訳単位の同じ定義が統合されることを保証する。
これは C++98 のときからそう。
インライン化が望ましいことの指示であるとは書いてあるけど、
今では変数にも inline を付けることが出来るようになったのはもはや inline は ODR の例外としての意味がメインだと考えるべき。
0993デフォルトの名無しさん
垢版 |
2022/05/21(土) 17:00:45.58ID:+x02zxlN
>>952
こんなのあるんか便利そうだな
まあ汎用的なデータ構造だと暫定未定義にするだけでもいいと思うけど、用途が決まってるクラスに関しては制約をつけたものを用意しておくのが無難だろうね
0994ハノン ◆QZaw55cn4c
垢版 |
2022/05/21(土) 17:25:58.12ID:0jWT+RR4
>>991
情報ありがとうございます。

>>990
ここで One Definition Rule がリファーされるのに直観的違和感を覚えます‥‥
が、反論はゆっくり考えますのでしばらくお待ちください、様々な視点を提供いただき感謝しております
0995はちみつ餃子 ◆8X2XSCHEME
垢版 |
2022/05/21(土) 17:56:26.14ID:JD6rd3hb
>>994
inline というキーワードの選択が不自然なのはわかるが inline はインライン化の指示というよりは
インライン化に都合のよいように制限する指示と考えるとそんなに不自然でもない。

① C/C++ は翻訳単位ごとに個々にコンパイルしてからリンクする手順を取る
② 他のコンパイル単位にある定義の内容はわからんのでインライン化するためには翻訳単位の中に定義がある必要がある
③ ヘッダに関数定義を書きたい
④ ヘッダに定義を書くと ODR 違反やろ
⑤ じゃあ ODR の例外を設けよう。 inline って付けたら ODR の例外な!
0996デフォルトの名無しさん
垢版 |
2022/05/21(土) 18:53:36.34ID:0jWT+RR4
>>995

>>995 でいう定義は宣言に置き換えるべきでは?
ODR はあくまでも定義の話であって、宣言の話ではないかと考えます、私の勘違いでしょうか?

実装的には inline のついた関数定義が外部にリンクされる可能性があれば、すなわち extern な iniline 関数があれば、リンクのためのコード体を、各所に inline に展開されるコード体とは別に(こっそり)用意しておく、見たいな感じで十分に実装可能ですね
0997はちみつ餃子 ◆8X2XSCHEME
垢版 |
2022/05/21(土) 19:24:52.72ID:JD6rd3hb
>>996
外部に見せる用の実体のある定義は実際に用意される実装が多いと思う。
でも、その外部では実体を参照することは出来てもインライン化できないよね、各翻訳単位で定義が存在する必要があるよねということを言ってる。

その上で現在では LTO が普及したのでどうでもよくなったけど。
0998デフォルトの名無しさん
垢版 |
2022/05/21(土) 20:03:09.89ID:0jWT+RR4
>>997
なるほど、やっと理解しました

LTO: Link Time Optimization ですか‥‥、トラブルの元で胡散臭いと思っている私は古い人なんでしょうね‥‥、.obj がコンパイラ固有になるのも嫌ですし
0999デフォルトの名無しさん
垢版 |
2022/05/21(土) 20:12:03.42ID:kYXfaM+5
海外の専門用語はわかりにくいのう
日本風にリンオプとか略してくれればいいのに
イニシャリズムみたいな言い方だとなんて言うんだろ
1000デフォルトの名無しさん
垢版 |
2022/05/21(土) 20:15:04.92ID:0jWT+RR4
>>999
村上龍の「5分後の世界」では、略語は使うな、ちゃんと元の言葉を使え、と教育されていますね
ジョージ・オーウェルの「1984」では、略語は謀略的な意味で使われる(小説末尾の appendix: New Speak 解説のカテゴリーB)ようですね

これらに影響されて、略語を連発するのは望ましくないという言語観を私は持っていますが
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 36日 11時間 35分 33秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

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