■Visual Studio 2017 Community(無償の統合開発環境)等はこちら
http://www.visualstudio.com/downloads/
■コードを貼る場合はこちら
http://ideone.com/
■前スレ
C#, C♯, C#相談室 Part94
http://mevius.2ch.net/test/read.cgi/tech/1492843013/
■次スレは>>970が建てる事。
建てられない場合は他を指定する事。
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
C#, C♯, C#相談室 Part95
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 7b7f-3FY0)
2017/10/17(火) 00:41:22.60ID:JxIRdCj70378デフォルトの名無しさん (アウアウウー Sab5-655U)
2019/12/26(木) 16:48:04.03ID:+pzqFzNua >>376
上に書いたWin9x環境を特に想定した実装、というようなケースを除けば
そのクラスを作ったプログラマは「不要になったらDisposeを呼んで欲しい」と思っているから
IDisposableを実装している。
だからDisposeしなくてもいい、という確信が持てないなら(以下略
上に書いたWin9x環境を特に想定した実装、というようなケースを除けば
そのクラスを作ったプログラマは「不要になったらDisposeを呼んで欲しい」と思っているから
IDisposableを実装している。
だからDisposeしなくてもいい、という確信が持てないなら(以下略
379デフォルトの名無しさん (ワッチョイ dc2c-++NQ)
2019/12/26(木) 16:55:18.99ID:WMR2NHe80380デフォルトの名無しさん (ワッチョイ 6c88-hRE6)
2019/12/26(木) 16:59:42.72ID:F8ujXl8x0 GC任せではなく明示的にメモリを開放していかきゃ動作に支障をきたすような少メモリな環境だって世の中にはある
381デフォルトの名無しさん (ドコグロ MM40-NvuD)
2019/12/26(木) 17:03:28.05ID:Wx+k6OqqM382デフォルトの名無しさん (ワッチョイ 7f7b-JrBF)
2019/12/26(木) 17:07:04.85ID:2UlJm9YS0 >>378
なるほど確かにその通りだ。
設計者が想定したとおりに使うのが安牌であり、
書いておけば済む物を、特段メリットもないのに書かずに済ませて後で嵌るのは生産性が悪い、というのはC#的には当たりだ。
呼ぶか呼ばないかは使用者が判断するものではなく、設計者がIDisposableを実装するかどうかで示し、それに従え、ということか。
まあ長期的に見てその思想が正しいんだろう。
なるほど納得した。
なるほど確かにその通りだ。
設計者が想定したとおりに使うのが安牌であり、
書いておけば済む物を、特段メリットもないのに書かずに済ませて後で嵌るのは生産性が悪い、というのはC#的には当たりだ。
呼ぶか呼ばないかは使用者が判断するものではなく、設計者がIDisposableを実装するかどうかで示し、それに従え、ということか。
まあ長期的に見てその思想が正しいんだろう。
なるほど納得した。
383デフォルトの名無しさん (ワッチョイ 7f7b-JrBF)
2019/12/26(木) 17:10:19.42ID:2UlJm9YS0384デフォルトの名無しさん (ワッチョイ 1e6f-RbSw)
2019/12/26(木) 18:35:58.39ID:EoULV8Z50 disposeされなくてもデストラクタで解放されるが、
かなり高コストな処理が発生するそうな
https://ufcpp.net/study/csharp/rm_disposable.html#idisposable
かなり高コストな処理が発生するそうな
https://ufcpp.net/study/csharp/rm_disposable.html#idisposable
385デフォルトの名無しさん (ワッチョイ 7f7b-JrBF)
2019/12/26(木) 19:21:56.18ID:2UlJm9YS0 >>384
それは嘘。というか誇大広告。
オブジェクトの寿命が1GC分伸びるだけ。それが深刻になる状況なら、
ファイナライザリストをそもそも作らず、必ずusing/disposeしろ、という設計思想が妥当。…(A)
或いは、ファイナライザリスト内だけ2GC世代分GCするとか、そういうフレームワーク設計も可能。…(B)
いずれにしても、.NETはそうしてない=それは大した問題ではない、とMSが判断している証拠。
といってもGCも進化しつつあるし、この辺もじきに整理されるのかもしれん。
C#8.0のusingはソースコードとしてはほぼ完成型だし、
> using var font1 = new Font("Arial", 10.0f);
> https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/using-statement
型によっては using var でしか宣言出来ない(=静的に確保出来ない=ローカルでしか持てない)ようにすれば、
上記(A)の思想を体現出来る。それが本筋かもね。
形式的にはVC++/CLIのpin_ptrと同じだから、実装する気になればMS的にはすぐだ。
https://docs.microsoft.com/ja-jp/cpp/extensions/pin-ptr-cpp-cli?view=vs-2019
制限はそこに書いてあるが、以下。
> 固定ポインターは、スタックの非静的ローカル変数としてのみ宣言できます。
> 固定ポインターは、以下として使用することはできません。
> 関数パラメーター
> 関数の戻り値の型
> クラスのメンバー
> キャストのターゲット型
「関数パラメータ」に使えない、と書いてあるが、これは言い方が悪くて、
「関数の仮引数の型には使えない」が正しく、実引数として渡す場合はキャストされるので普通に使える。
言葉だと分かりにくいが、
pin_ptr<double> ptr_d;
を void somefunc(double*) に渡すとdouble*に自動的にキャストされるので普通に使える。
これと同様の制限だと、「その関数を抜けた後も保持していて欲しい」オブジェクトには使えないが、
GDI+オブジェクトに関してはこの方向でもコーディングは可能のように思える。
それは嘘。というか誇大広告。
オブジェクトの寿命が1GC分伸びるだけ。それが深刻になる状況なら、
ファイナライザリストをそもそも作らず、必ずusing/disposeしろ、という設計思想が妥当。…(A)
或いは、ファイナライザリスト内だけ2GC世代分GCするとか、そういうフレームワーク設計も可能。…(B)
いずれにしても、.NETはそうしてない=それは大した問題ではない、とMSが判断している証拠。
といってもGCも進化しつつあるし、この辺もじきに整理されるのかもしれん。
C#8.0のusingはソースコードとしてはほぼ完成型だし、
> using var font1 = new Font("Arial", 10.0f);
> https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/using-statement
型によっては using var でしか宣言出来ない(=静的に確保出来ない=ローカルでしか持てない)ようにすれば、
上記(A)の思想を体現出来る。それが本筋かもね。
形式的にはVC++/CLIのpin_ptrと同じだから、実装する気になればMS的にはすぐだ。
https://docs.microsoft.com/ja-jp/cpp/extensions/pin-ptr-cpp-cli?view=vs-2019
制限はそこに書いてあるが、以下。
> 固定ポインターは、スタックの非静的ローカル変数としてのみ宣言できます。
> 固定ポインターは、以下として使用することはできません。
> 関数パラメーター
> 関数の戻り値の型
> クラスのメンバー
> キャストのターゲット型
「関数パラメータ」に使えない、と書いてあるが、これは言い方が悪くて、
「関数の仮引数の型には使えない」が正しく、実引数として渡す場合はキャストされるので普通に使える。
言葉だと分かりにくいが、
pin_ptr<double> ptr_d;
を void somefunc(double*) に渡すとdouble*に自動的にキャストされるので普通に使える。
これと同様の制限だと、「その関数を抜けた後も保持していて欲しい」オブジェクトには使えないが、
GDI+オブジェクトに関してはこの方向でもコーディングは可能のように思える。
386デフォルトの名無しさん (ワッチョイ 6e0c-K0SF)
2019/12/26(木) 21:56:25.88ID:Ag2MBuDI0 >>385
> オブジェクトの寿命が1GC分伸びるだけ。それが深刻になる状況
じゅうぶん現実的な状況でなり得るよ。Gen1以上のGCを舐めてる
それが許容できるかは要件次第
ゲームプログラミングでなくとも極力排除すべき要素
そういえば「ガクガクするから結局Dispose呼び出した」とか自分で言ってたね
なんでガクガクしたの?
> 型によっては using var でしか宣言出来ない(=静的に確保出来ない=ローカルでしか持てない)ようにすれば、
論外。ネイティブリソースを持った時点でスタックにしか確保できない型しか作れない言語の出来上がり
ファイナライザを作らずDisposeを強制するというのはそういこと
大した問題じゃないから、ではなく潜在的に負荷を抱える可能性の排除とリソースリークへのセイフティを天秤にかけた結果だよ
> VC++/CLIのpin_ptr
それC#で言うunsafeなfixed相当。関係無い
> オブジェクトの寿命が1GC分伸びるだけ。それが深刻になる状況
じゅうぶん現実的な状況でなり得るよ。Gen1以上のGCを舐めてる
それが許容できるかは要件次第
ゲームプログラミングでなくとも極力排除すべき要素
そういえば「ガクガクするから結局Dispose呼び出した」とか自分で言ってたね
なんでガクガクしたの?
> 型によっては using var でしか宣言出来ない(=静的に確保出来ない=ローカルでしか持てない)ようにすれば、
論外。ネイティブリソースを持った時点でスタックにしか確保できない型しか作れない言語の出来上がり
ファイナライザを作らずDisposeを強制するというのはそういこと
大した問題じゃないから、ではなく潜在的に負荷を抱える可能性の排除とリソースリークへのセイフティを天秤にかけた結果だよ
> VC++/CLIのpin_ptr
それC#で言うunsafeなfixed相当。関係無い
387デフォルトの名無しさん (ワッチョイ 8b63-b920)
2019/12/26(木) 22:28:04.26ID:9AkEaWNs0 Disposeしないで挙動を調べた結果、問題ないんだったらそのリソースに関してはDisposeしなくていいってことがわかるだけじゃない?
それを一般化してusingなんか使う必要がないのだ/Disposeはファイナライズのときにされるので十分なのだってのはおかしいような。
一々いろんなIDisposableのオブジェクトの挙動を調べてたら検証時間がかかってしょうがないし、
今調べた挙動が将来的にずっと同じである保証もないから、Disposeしてね、と言われているものに関しては、
Disposeされるものだと思って設計変更される可能性がある、と考えて、
問題のないタイミングで行儀よくDisposeしてトラブルの種を潰すってだけの話だと思うんだけど
逆に、使い尽くしてDisposeしなくていいってわかってるんだったら
(例えば自作クラスで、なんかのハンドルを握ったままになったりしないという保証があるなら)
どうぞご自由に、って思うけどね
「自転車ってうちの近くの舗装の綺麗で平坦な道路では手放し運転できるのに、なんでハンドルなんかついてるんだ?いらなくね?」って言ってるようなものだと思うけどね。
それを一般化してusingなんか使う必要がないのだ/Disposeはファイナライズのときにされるので十分なのだってのはおかしいような。
一々いろんなIDisposableのオブジェクトの挙動を調べてたら検証時間がかかってしょうがないし、
今調べた挙動が将来的にずっと同じである保証もないから、Disposeしてね、と言われているものに関しては、
Disposeされるものだと思って設計変更される可能性がある、と考えて、
問題のないタイミングで行儀よくDisposeしてトラブルの種を潰すってだけの話だと思うんだけど
逆に、使い尽くしてDisposeしなくていいってわかってるんだったら
(例えば自作クラスで、なんかのハンドルを握ったままになったりしないという保証があるなら)
どうぞご自由に、って思うけどね
「自転車ってうちの近くの舗装の綺麗で平坦な道路では手放し運転できるのに、なんでハンドルなんかついてるんだ?いらなくね?」って言ってるようなものだと思うけどね。
388デフォルトの名無しさん (ワッチョイ 8401-K0SF)
2019/12/26(木) 23:04:21.26ID:qz8G02Zg0 なるほど!と読んでたら最後の例えでよくわからんようになった…
389デフォルトの名無しさん (ワッチョイ 7f7b-JrBF)
2019/12/26(木) 23:08:24.18ID:2UlJm9YS0 >>386
いや多分、みんな求め過ぎなんだよ。
C++erが特にそうだが、C++を何でも出来る言語にしようとしてる。
それと同じく、君もまた、C#を万能言語にしようとしてないか?
つまり、簡単に書け、かつ、最速な言語に、ということだ。
> それが許容できるかは要件次第
俺に言わせれば、ゲームプログラミング等のパフォーマンスクリティカルな状況でC#を使う選択自体が間違ってる。
実際、ゲームは今でもC++が主流で、それはパフォーマンスの問題からだろ。
そういえばUnityはC#だが、(俺はゲーマーでないから詳しくないが)
あれは紙芝居ゲーとかそういう全くパフォーマンスとかどうでもいい系向けではないのか?
グラゴリゴリのゲームをC#で書いて、C++に勝てるとでも思っているのか?
> なんでガクガクしたの?
知らん。ただ、Disposeしてなかったから試しにしてみたらとりあえず直った。
だからGCなのだろうとは思うが、それ以上は確認してない。
ただ、2-3画面毎だったから、Brushで言うと100k毎くらいだ。
いや多分、みんな求め過ぎなんだよ。
C++erが特にそうだが、C++を何でも出来る言語にしようとしてる。
それと同じく、君もまた、C#を万能言語にしようとしてないか?
つまり、簡単に書け、かつ、最速な言語に、ということだ。
> それが許容できるかは要件次第
俺に言わせれば、ゲームプログラミング等のパフォーマンスクリティカルな状況でC#を使う選択自体が間違ってる。
実際、ゲームは今でもC++が主流で、それはパフォーマンスの問題からだろ。
そういえばUnityはC#だが、(俺はゲーマーでないから詳しくないが)
あれは紙芝居ゲーとかそういう全くパフォーマンスとかどうでもいい系向けではないのか?
グラゴリゴリのゲームをC#で書いて、C++に勝てるとでも思っているのか?
> なんでガクガクしたの?
知らん。ただ、Disposeしてなかったから試しにしてみたらとりあえず直った。
だからGCなのだろうとは思うが、それ以上は確認してない。
ただ、2-3画面毎だったから、Brushで言うと100k毎くらいだ。
390デフォルトの名無しさん (ワッチョイ 7f7b-JrBF)
2019/12/26(木) 23:09:24.48ID:2UlJm9YS0 > 論外
いやお前の不勉強具合が論外だよ。少なくともRustはそっちを目指している。
もうちょっと単純簡潔な表現のページもあったはずだが見つからないので、グダグダしているが以下。
> 意味論への影響
> スタックアロケーションはRustの言語自体へ影響を与えており、したがって開発者のメンタルモデルにも影響しています。
> Rust言語がどのように自動メモリ管理を取り扱うかは、LIFOセマンティクスに従っています。
> ヒープアロケートされユニークに所有されたボックスのデアロケーションさえも、
> スタックベースのLIFOセマンティクスに従っていることは、この章を通して論じてきたとおりです。
> 非LIFOセマンティクスの柔軟性(すなわち表現能力)は一般的に、
> いつメモリが解放されるべきなのかをコンパイラがコンパイル時に自動的に推論できなくなることを意味するので、
> デアロケーションを制御するために、ときに言語自体の外部に由来するかもしれない、動的なプロトコルに頼らなければなりません。
> (Rc<T> や Arc<T> が使っている参照カウントはその一例です。)
>
> 突き詰めれば、ヒープアロケーションによって増大した表現能力は(例えばガベージコレクタという形の)著しい実行時サポートか、
> (Rustコンパイラが提供していないような検証を必要とする明示的なメモリ管理呼び出しという形の)
> 著しいプログラマの努力のいずれかのコストを引き起こすのです。
> https://doc.rust-jp.rs/the-rust-programming-language-ja/1.6/book/the-stack-and-the-heap.html
と公式は言ってはいるが、Rustの取っつきにくさはここにあって、
要するに既存言語のノリでやったら全然コンパイルが通らないらしい。(俺はやってなから知らんが)
ただし、スタックアロケーションの方が効率も管理も楽なので、スタックアロケーション出来るものはスタックに、という理屈は合ってる。
問題はそれだと柔軟性、つまりデタラメなコーディングが出来なくなる点で、
いやお前の不勉強具合が論外だよ。少なくともRustはそっちを目指している。
もうちょっと単純簡潔な表現のページもあったはずだが見つからないので、グダグダしているが以下。
> 意味論への影響
> スタックアロケーションはRustの言語自体へ影響を与えており、したがって開発者のメンタルモデルにも影響しています。
> Rust言語がどのように自動メモリ管理を取り扱うかは、LIFOセマンティクスに従っています。
> ヒープアロケートされユニークに所有されたボックスのデアロケーションさえも、
> スタックベースのLIFOセマンティクスに従っていることは、この章を通して論じてきたとおりです。
> 非LIFOセマンティクスの柔軟性(すなわち表現能力)は一般的に、
> いつメモリが解放されるべきなのかをコンパイラがコンパイル時に自動的に推論できなくなることを意味するので、
> デアロケーションを制御するために、ときに言語自体の外部に由来するかもしれない、動的なプロトコルに頼らなければなりません。
> (Rc<T> や Arc<T> が使っている参照カウントはその一例です。)
>
> 突き詰めれば、ヒープアロケーションによって増大した表現能力は(例えばガベージコレクタという形の)著しい実行時サポートか、
> (Rustコンパイラが提供していないような検証を必要とする明示的なメモリ管理呼び出しという形の)
> 著しいプログラマの努力のいずれかのコストを引き起こすのです。
> https://doc.rust-jp.rs/the-rust-programming-language-ja/1.6/book/the-stack-and-the-heap.html
と公式は言ってはいるが、Rustの取っつきにくさはここにあって、
要するに既存言語のノリでやったら全然コンパイルが通らないらしい。(俺はやってなから知らんが)
ただし、スタックアロケーションの方が効率も管理も楽なので、スタックアロケーション出来るものはスタックに、という理屈は合ってる。
問題はそれだと柔軟性、つまりデタラメなコーディングが出来なくなる点で、
391デフォルトの名無しさん (ワッチョイ 7f7b-JrBF)
2019/12/26(木) 23:10:55.58ID:2UlJm9YS0 > 天秤にかけた結果だよ
というのはその通りで、C#は色々なことを天秤にかけて「丁度いい言語」を目指している。
だから、「最速の言語」では今現在ないし、今後ともあり得ないことも自覚してないといけない。
繰り返すが、パフォーマンスクリティカルな状況でC#を使うこと自体が間違いだ。これは今後共だ。
> それC#で言うunsafeなfixed相当。関係無い
確認したが、fixed相当なのはその通り。それで、何故関係ないと言えるのか?
usingで書けるということは、同じ構文のfixedでも書けるということ。
pin_ptrは型なのでグダグダ制限が付いているが、usingやfixedは構文なのでそもそも制限する必要がないだけ。
まあここら辺の理屈はさておき、実際、GDI+リソースをクラスメンバとして持つ必要がどこにある?
例えばGraphicsをControl.CreateGraphicsから生成するのなら、Controlを持っておき、その都度生成することは出来る。
これにより、永続コンテンツ(クラスのメンバ)として持つのは回避出来る。
この制限を付ければ、Graphics自体が「生成されたスコープを抜ければ常に破棄される物」となり、
言い換えれば君の言っているとおり「スタックにしか確保出来ない型」になるが、
usingなんて付けなくてもリソースリークが発生することは原理的になくなるし、
ファイナライザという機構も不要になるので、GC自体も単純化し、高速化する。
とは言ってもここら辺はフレームワーク根幹の設計思想であって、今更グダグダ言っても始まらないが、
Rustで.NETをサポートしたらusingみたいな糞は入らないだろうよ。(原理的に不要)
どの言語スレもそうだが、若干みんな信者になってしまっていて、公平に見れてない。
C#8.0のusingは「書く」前提なら完成型だと思うが、「書かない」方向を目指すことも出来、実際、Rustはそっちを目指してる。
それを糞だと判断するのも自由だが、理解出来ない/知らないのは君の問題だよ。
俺に言わせりゃ、コールグラフなんて抜けるんだから、
usingなんて書かなくとも「このリソースが永続化することはない」というのはコンパイラ側が判断出来ることで、
なら自動的にusing扱いにして、そうじゃないところだけwarning出してくる、というのが理想だと思うが。
というのはその通りで、C#は色々なことを天秤にかけて「丁度いい言語」を目指している。
だから、「最速の言語」では今現在ないし、今後ともあり得ないことも自覚してないといけない。
繰り返すが、パフォーマンスクリティカルな状況でC#を使うこと自体が間違いだ。これは今後共だ。
> それC#で言うunsafeなfixed相当。関係無い
確認したが、fixed相当なのはその通り。それで、何故関係ないと言えるのか?
usingで書けるということは、同じ構文のfixedでも書けるということ。
pin_ptrは型なのでグダグダ制限が付いているが、usingやfixedは構文なのでそもそも制限する必要がないだけ。
まあここら辺の理屈はさておき、実際、GDI+リソースをクラスメンバとして持つ必要がどこにある?
例えばGraphicsをControl.CreateGraphicsから生成するのなら、Controlを持っておき、その都度生成することは出来る。
これにより、永続コンテンツ(クラスのメンバ)として持つのは回避出来る。
この制限を付ければ、Graphics自体が「生成されたスコープを抜ければ常に破棄される物」となり、
言い換えれば君の言っているとおり「スタックにしか確保出来ない型」になるが、
usingなんて付けなくてもリソースリークが発生することは原理的になくなるし、
ファイナライザという機構も不要になるので、GC自体も単純化し、高速化する。
とは言ってもここら辺はフレームワーク根幹の設計思想であって、今更グダグダ言っても始まらないが、
Rustで.NETをサポートしたらusingみたいな糞は入らないだろうよ。(原理的に不要)
どの言語スレもそうだが、若干みんな信者になってしまっていて、公平に見れてない。
C#8.0のusingは「書く」前提なら完成型だと思うが、「書かない」方向を目指すことも出来、実際、Rustはそっちを目指してる。
それを糞だと判断するのも自由だが、理解出来ない/知らないのは君の問題だよ。
俺に言わせりゃ、コールグラフなんて抜けるんだから、
usingなんて書かなくとも「このリソースが永続化することはない」というのはコンパイラ側が判断出来ることで、
なら自動的にusing扱いにして、そうじゃないところだけwarning出してくる、というのが理想だと思うが。
392デフォルトの名無しさん (ワッチョイ 4d63-hRE6)
2019/12/26(木) 23:23:27.97ID:aYxazJyl0 unityでも3Dゴリゴリのゲームは作るよ
というかスマホで3Dゲームの高クオリティ開発ならunity
1択なくらい。unrealはまだスマホ市場少ない
unityはスマホが多いがコンシューマもPCもそれなりにある
ゲーム以外のARVR分野もかなりunityは多い
言語パフォーマンスより開発パフォーマンスが優先された結果だと思う
だからといって処理速度をないがしろにできるわけじゃない
というかスマホで3Dゲームの高クオリティ開発ならunity
1択なくらい。unrealはまだスマホ市場少ない
unityはスマホが多いがコンシューマもPCもそれなりにある
ゲーム以外のARVR分野もかなりunityは多い
言語パフォーマンスより開発パフォーマンスが優先された結果だと思う
だからといって処理速度をないがしろにできるわけじゃない
393デフォルトの名無しさん (ワッチョイ 7f7b-JrBF)
2019/12/26(木) 23:25:15.01ID:2UlJm9YS0 >>387
いや長期的に見た生産性の為にusingを書いてトラブルの種を潰しておく、というのは納得した。
俺がいくら試しても、俺環境で俺の使い方での結果でしかないから、公式に従った方が得策だ。
ただし言語としてそれが最高か、と言われれば、俺はusingなんて書かなくてもなんとかしとけ、という思想。
つまり、
C#: using書け、ただし、書き忘れても大体何とかなるようには作ってある
Rust: そもそも変数はスタック上にしかアロケートしないので、usingとか原理的に不要
俺: 勝手にコンパイラが色々チェックして、可能なところは自動的にやって、駄目なところだけwarning出してこい
ということ。ただしこれは理想論であって、現実はそうではないのはもう認めてる。
ただそれにしても、「GDI+オブジェクトがスタック上にしか確保出来ない」がそんなに糞だとは思わない。
実際、俺はこれでほぼ組んでいるはずだし。
いや長期的に見た生産性の為にusingを書いてトラブルの種を潰しておく、というのは納得した。
俺がいくら試しても、俺環境で俺の使い方での結果でしかないから、公式に従った方が得策だ。
ただし言語としてそれが最高か、と言われれば、俺はusingなんて書かなくてもなんとかしとけ、という思想。
つまり、
C#: using書け、ただし、書き忘れても大体何とかなるようには作ってある
Rust: そもそも変数はスタック上にしかアロケートしないので、usingとか原理的に不要
俺: 勝手にコンパイラが色々チェックして、可能なところは自動的にやって、駄目なところだけwarning出してこい
ということ。ただしこれは理想論であって、現実はそうではないのはもう認めてる。
ただそれにしても、「GDI+オブジェクトがスタック上にしか確保出来ない」がそんなに糞だとは思わない。
実際、俺はこれでほぼ組んでいるはずだし。
394デフォルトの名無しさん (アウアウウー Sa83-NvuD)
2019/12/26(木) 23:41:44.91ID:V9vPePAWa Rustは普通にヒープ使うぞ?
なんか勘違いしてるようだが、そもそもスタックだけで用が足りるんなら所有権だの何だのとRustの高度なリソース管理は要らん
C++のRAIIや、それこそC#で変数をデフォルトでusingにした程度で十分だ
なんか勘違いしてるようだが、そもそもスタックだけで用が足りるんなら所有権だの何だのとRustの高度なリソース管理は要らん
C++のRAIIや、それこそC#で変数をデフォルトでusingにした程度で十分だ
395デフォルトの名無しさん (ワッチョイ 7f7b-JrBF)
2019/12/26(木) 23:42:14.94ID:2UlJm9YS0 >>392
> 言語パフォーマンスより開発パフォーマンスが優先された結果だと思う
> だからといって処理速度をないがしろにできるわけじゃない
C#の開発パフォーマンスがいいのは認める。
とはいえ、原理的な速度というのはあって、
正直、C++erの「GC使わないけどスマポ使え」ってのはロジック的に間抜け(矛盾してる)と思うが、
Rustの「全部スタック動作と連動」というのは原理的に正しく、逆に言えば、この方法でないとCを越えられない。
だから、根幹の思想は何だかんだで重要で、GDI+に関してはusngではなく「スタック縛り」の方が妥当だったように思う。
ファイルリソースは永続化出来ないとイテレータが使えないのでusingじゃないと無理っぽいが、
GDI+リソースは特に永続化する必然性が無く、大量に生成し、破棄するものだからだ。
パフォーマンス上は断然「スタック縛り」が有利で、
それでコードが書けなくなる/書きづらくなる、ってこともないと思うのだが。
と言ってもMSも気づいているだろうし、当然考えてもいるだろうし、
Rustにも手を出してはいるから必要なら出してくるんだろうけど。
> 言語パフォーマンスより開発パフォーマンスが優先された結果だと思う
> だからといって処理速度をないがしろにできるわけじゃない
C#の開発パフォーマンスがいいのは認める。
とはいえ、原理的な速度というのはあって、
正直、C++erの「GC使わないけどスマポ使え」ってのはロジック的に間抜け(矛盾してる)と思うが、
Rustの「全部スタック動作と連動」というのは原理的に正しく、逆に言えば、この方法でないとCを越えられない。
だから、根幹の思想は何だかんだで重要で、GDI+に関してはusngではなく「スタック縛り」の方が妥当だったように思う。
ファイルリソースは永続化出来ないとイテレータが使えないのでusingじゃないと無理っぽいが、
GDI+リソースは特に永続化する必然性が無く、大量に生成し、破棄するものだからだ。
パフォーマンス上は断然「スタック縛り」が有利で、
それでコードが書けなくなる/書きづらくなる、ってこともないと思うのだが。
と言ってもMSも気づいているだろうし、当然考えてもいるだろうし、
Rustにも手を出してはいるから必要なら出してくるんだろうけど。
396デフォルトの名無しさん (ワッチョイ 7f7b-JrBF)
2019/12/26(木) 23:44:51.57ID:2UlJm9YS0 >>394
他言語の「ヒープ」と同等の動作では全くない、ということ。
他言語の「ヒープ」と同等の動作では全くない、ということ。
397デフォルトの名無しさん (アウアウウー Sa83-BCWm)
2019/12/27(金) 01:44:02.82ID:FV6GRoMta398デフォルトの名無しさん (ワッチョイ 4697-Wq+o)
2019/12/27(金) 09:28:31.67ID:9LlS+1cS0 >>393
呼び出しの静的解析だけで、コンパイラ側が自動でusing付けるとか、現状の言語仕様でいけるもんなのかなあ。
行けそうなケースがあるのはわかるけど、すべてのケースで問題なく動作するというエビデンスはなんかある?
あと、俺に言わせりゃ静的解析で出来るだろとのことだけど、設計実装難易度も十分に低いと見積もってて、なんでやらないんだ、と言いたい、ってことなの?個人的には難易度は未知数だと思うんだけどなあ。
呼び出しの静的解析だけで、コンパイラ側が自動でusing付けるとか、現状の言語仕様でいけるもんなのかなあ。
行けそうなケースがあるのはわかるけど、すべてのケースで問題なく動作するというエビデンスはなんかある?
あと、俺に言わせりゃ静的解析で出来るだろとのことだけど、設計実装難易度も十分に低いと見積もってて、なんでやらないんだ、と言いたい、ってことなの?個人的には難易度は未知数だと思うんだけどなあ。
399デフォルトの名無しさん (ワッチョイ ef4f-K0SF)
2019/12/27(金) 10:30:46.74ID:jG1yqawr0 >>398
参照がスコープ外に持ち出されていないかどうかを判断する必要があるだろうけど、それには
rustのように関数呼び出しに情報を受け渡す拡張が必要になるだろうね。
どうせ文法を拡張するなら、C++/CLIのようにusingより簡単な記述でDispose()の必要性を
判断できるようにする方が現実的かも。
参照がスコープ外に持ち出されていないかどうかを判断する必要があるだろうけど、それには
rustのように関数呼び出しに情報を受け渡す拡張が必要になるだろうね。
どうせ文法を拡張するなら、C++/CLIのようにusingより簡単な記述でDispose()の必要性を
判断できるようにする方が現実的かも。
400デフォルトの名無しさん (ワッチョイ 7f7b-JrBF)
2019/12/27(金) 11:10:40.91ID:AkdF/Ds50 >>398
> 設計実装難易度も十分に低いと見積もってて、なんでやらないんだ、と言いたい、ってことなの?
いや違う。ぶっちゃけ、信者的態度で言われたから言い返してるだけだな。
現実問題として、Rust公式でも述べているとおり、ヒープ+GCの使い勝手は素晴らしく良く、
「コードの書きやすさ」という意味においては現状最高だろう。
だからC#がこれを採用しているのも理に適ってる。
ただし問題は、それを信者的に素晴らしいと君らが捕らえている点で、
これはC#が魔法を使ったわけでもなんでもなく、
単純に、速度を捨てて書きやすさを取っているだけだと正しく認識しろと言っている。
だからパフォーマンスクリティカルだと分かっている状況でC#を使うのが間違いだし、
それはファイナライザが実装されているからGCが1世代分伸びるのも問題だ、というときも該当する。
そこまでのパフォーマンスを求めるときに使う言語ではないし、出来る言語でもない。これは今後共だ。
解決策は既に述べたとおりだが、ここに関してはMSが「間違えた」というのは厳しいが、でも、間違いだとは思う。
usingは「書く」前提ではC#8.0で完成しているが、
問題は、「それが書かなければならない型だ」とユーザーが認識しなければならない点で、
そもそも知らなければ抜けるし、そのためのファイナライザでシステム的に遅いGCになる事を許容しなければならない。
(というほど俺は遅くはならないと思うが、お前らはファイナライザが問題だと言うので)
なら、最初から「スタック縛り」にしてしまえば、SyntaxErrorで落とせるし、GC機構そのものが不要になる。
このときの問題点は多少コーディングの自由が奪われることだが、現実として、
PenやBrushをクラスメンバとして永続させる必要なんて無いし、
GraphicsやFontも生成元『マネージド』情報(既に述べたがControl等)を代わりに持つことによって回避出来る。
結果、馬鹿みたいに「GDI+オブジェクトはその都度生成して、その都度廃棄」なコードになってしまうが、
SyntaxErrorにならなければリソースリークは原理的になくなり、
GCも簡素化/高速化し、using周りの仕様も覚える必要がない、ということになる。
> 設計実装難易度も十分に低いと見積もってて、なんでやらないんだ、と言いたい、ってことなの?
いや違う。ぶっちゃけ、信者的態度で言われたから言い返してるだけだな。
現実問題として、Rust公式でも述べているとおり、ヒープ+GCの使い勝手は素晴らしく良く、
「コードの書きやすさ」という意味においては現状最高だろう。
だからC#がこれを採用しているのも理に適ってる。
ただし問題は、それを信者的に素晴らしいと君らが捕らえている点で、
これはC#が魔法を使ったわけでもなんでもなく、
単純に、速度を捨てて書きやすさを取っているだけだと正しく認識しろと言っている。
だからパフォーマンスクリティカルだと分かっている状況でC#を使うのが間違いだし、
それはファイナライザが実装されているからGCが1世代分伸びるのも問題だ、というときも該当する。
そこまでのパフォーマンスを求めるときに使う言語ではないし、出来る言語でもない。これは今後共だ。
解決策は既に述べたとおりだが、ここに関してはMSが「間違えた」というのは厳しいが、でも、間違いだとは思う。
usingは「書く」前提ではC#8.0で完成しているが、
問題は、「それが書かなければならない型だ」とユーザーが認識しなければならない点で、
そもそも知らなければ抜けるし、そのためのファイナライザでシステム的に遅いGCになる事を許容しなければならない。
(というほど俺は遅くはならないと思うが、お前らはファイナライザが問題だと言うので)
なら、最初から「スタック縛り」にしてしまえば、SyntaxErrorで落とせるし、GC機構そのものが不要になる。
このときの問題点は多少コーディングの自由が奪われることだが、現実として、
PenやBrushをクラスメンバとして永続させる必要なんて無いし、
GraphicsやFontも生成元『マネージド』情報(既に述べたがControl等)を代わりに持つことによって回避出来る。
結果、馬鹿みたいに「GDI+オブジェクトはその都度生成して、その都度廃棄」なコードになってしまうが、
SyntaxErrorにならなければリソースリークは原理的になくなり、
GCも簡素化/高速化し、using周りの仕様も覚える必要がない、ということになる。
401デフォルトの名無しさん (ワッチョイ 7f7b-JrBF)
2019/12/27(金) 11:11:26.51ID:AkdF/Ds50 俺が思うC#の利点は、「無駄に覚えなければならない仕様」がほぼ無いことであり、
これは、C++が何でも出来る言語にしようとしている反面、
ほぼ使いもしない仕様を覚える必要がありすぎる状況になっているのと対極的ではある。
ただ、俺に言わせれば、usingも覚えるべき仕様ではない。
「GDI+リソースを持つクラスはスタック上にしか置けません」の仕様だと、何も覚えなくて済み、リーク周りの問題もない。
ただこれは完全に後出しで、MSが間違いを犯したわけではない。
彼等は単純に現状の仕様に乗るようにしてきただけであり、
未来の改訂で「スタック縛り&using廃止」になるのも十分ありうるし、俺はそれを望む。
ただMSはおそらくパフォーマンスよりも書きやすさに振ると思うので、微妙だとは思うが。
> 呼び出しの静的解析だけで、コンパイラ側が自動でusing付けるとか、現状の言語仕様でいけるもんなのかなあ。
要は
Brush xxxxx;
{
// ここで永続化されなければよい
}
なので、中身を辿りきれるかどうかに尽きる。
具体的には、ヒープ上のオブジェクトに保持されているとかが無ければいい。(といってもC#は全部ヒープだが)
解析に問題になるのは関数ポインタを動的に使われるケース(テーブルジャンプ等)だが、
そういうのはほぼやらないから現実的には大半の場合は解析可能だと思う。
> 行けそうなケースがあるのはわかるけど、すべてのケースで問題なく動作するというエビデンスはなんかある?
こんな物はそもそも必要ない。
解析可能なら自動でusing付けろ、解析無理(かつユーザーがusing付けてない)ならwarning出せ、のベストエフォートでいい。
現実的にこれで問題ない。
というかJavaScriptのJITが既にこれに近いことをやっていたはずで、
要は「この関数を抜けたら破棄されると静的に解析済みの変数は最初からスタックに配置する」で、
解析無理なら従来通りヒープに置いてGC、可能な物は纏めてスタックに置いてGC回避で高速化、みたいなことになってたはず。
だから.NETもそれをやればいいだけ。
これは、C++が何でも出来る言語にしようとしている反面、
ほぼ使いもしない仕様を覚える必要がありすぎる状況になっているのと対極的ではある。
ただ、俺に言わせれば、usingも覚えるべき仕様ではない。
「GDI+リソースを持つクラスはスタック上にしか置けません」の仕様だと、何も覚えなくて済み、リーク周りの問題もない。
ただこれは完全に後出しで、MSが間違いを犯したわけではない。
彼等は単純に現状の仕様に乗るようにしてきただけであり、
未来の改訂で「スタック縛り&using廃止」になるのも十分ありうるし、俺はそれを望む。
ただMSはおそらくパフォーマンスよりも書きやすさに振ると思うので、微妙だとは思うが。
> 呼び出しの静的解析だけで、コンパイラ側が自動でusing付けるとか、現状の言語仕様でいけるもんなのかなあ。
要は
Brush xxxxx;
{
// ここで永続化されなければよい
}
なので、中身を辿りきれるかどうかに尽きる。
具体的には、ヒープ上のオブジェクトに保持されているとかが無ければいい。(といってもC#は全部ヒープだが)
解析に問題になるのは関数ポインタを動的に使われるケース(テーブルジャンプ等)だが、
そういうのはほぼやらないから現実的には大半の場合は解析可能だと思う。
> 行けそうなケースがあるのはわかるけど、すべてのケースで問題なく動作するというエビデンスはなんかある?
こんな物はそもそも必要ない。
解析可能なら自動でusing付けろ、解析無理(かつユーザーがusing付けてない)ならwarning出せ、のベストエフォートでいい。
現実的にこれで問題ない。
というかJavaScriptのJITが既にこれに近いことをやっていたはずで、
要は「この関数を抜けたら破棄されると静的に解析済みの変数は最初からスタックに配置する」で、
解析無理なら従来通りヒープに置いてGC、可能な物は纏めてスタックに置いてGC回避で高速化、みたいなことになってたはず。
だから.NETもそれをやればいいだけ。
402デフォルトの名無しさん (ドコグロ MM40-BCWm)
2019/12/27(金) 11:48:38.34ID:hRCuq6kQM 君が冒している最大の勘違いは、「C#開発者の皆が自分と同じくusingの不便を感じている」という前提を置いていることだ。
実際にはもうFormsの開発なんてC#ではマイナーな部類になりつつあり、
現在の主流であるWeb開発ではDisposeなんか滅多に使わない。
Webのパフォーマンス改善の観点で言えば、(君の愛する)スタックにしか置けない特殊な構造体の導入等により、
C#のGCに極力頼らない高度なメモリ管理は実は一部では既に実現されている。
usingはもはや滅多に使わない機能であり、それほど力を入れて改善されるべき対象ではないんだよ。
実際にはもうFormsの開発なんてC#ではマイナーな部類になりつつあり、
現在の主流であるWeb開発ではDisposeなんか滅多に使わない。
Webのパフォーマンス改善の観点で言えば、(君の愛する)スタックにしか置けない特殊な構造体の導入等により、
C#のGCに極力頼らない高度なメモリ管理は実は一部では既に実現されている。
usingはもはや滅多に使わない機能であり、それほど力を入れて改善されるべき対象ではないんだよ。
403デフォルトの名無しさん (ササクッテロル Sp88-9la5)
2019/12/27(金) 11:56:34.65ID:JsENnlV9p 信者的信者的ってなんのこと言ってんだコイツ?
ファイナライザ持ちがDispose呼ばないと昇格オブジェクトが増えてやばいって警告に
誇大広告だのほざいてるのは自分じゃねえか
自分のコードでDispose呼ばずにフルコレクトかましてガクガクさせながら「自分はそれほどでもないと思う」とかなんのギャグだよ
ファイナライザ持ちがDispose呼ばないと昇格オブジェクトが増えてやばいって警告に
誇大広告だのほざいてるのは自分じゃねえか
自分のコードでDispose呼ばずにフルコレクトかましてガクガクさせながら「自分はそれほどでもないと思う」とかなんのギャグだよ
404デフォルトの名無しさん (ワッチョイ 4697-Wq+o)
2019/12/27(金) 11:59:55.99ID:9LlS+1cS0 >>401
JITだからできることでコンパイラじゃできなくない?
何が気になるかって言うと、コールスタックの解析とかをコンパイル時点でやり始めるってのは停止性問題を取り扱うみたいなむりがあるんじゃないのかってこと。
ごく簡単な例だったら問題ないだろうけど、そのごく簡単な例ってわずかじゃないのかな。
JITだからできることでコンパイラじゃできなくない?
何が気になるかって言うと、コールスタックの解析とかをコンパイル時点でやり始めるってのは停止性問題を取り扱うみたいなむりがあるんじゃないのかってこと。
ごく簡単な例だったら問題ないだろうけど、そのごく簡単な例ってわずかじゃないのかな。
405デフォルトの名無しさん (ドコグロ MM40-BCWm)
2019/12/27(金) 12:08:44.93ID:hRCuq6kQM それをコンパイラ(というか型システム)でやろうとした結果がRustだね。
ちなみに彼は知らないようだが、Rustのメモリ管理がスマートであると言われる所以は、
エスケープしていないオブジェクトの生存管理などではなく(そんなものはC++でとっくの昔に実現されている)、
エスケープした「ヒープ上の」オブジェクトも正しく追跡して破棄できること。
それがプログラマにどれだけの負担を強いているかは>>390の通り。
ちなみに彼は知らないようだが、Rustのメモリ管理がスマートであると言われる所以は、
エスケープしていないオブジェクトの生存管理などではなく(そんなものはC++でとっくの昔に実現されている)、
エスケープした「ヒープ上の」オブジェクトも正しく追跡して破棄できること。
それがプログラマにどれだけの負担を強いているかは>>390の通り。
406デフォルトの名無しさん (ワッチョイ 7f7b-JrBF)
2019/12/27(金) 12:34:15.59ID:AkdF/Ds50 >>402
Formsが過去の遺産で糞で既にVSからデフォで除外済みなのは知ってる。
ただし俺は移行するよりはそのままメンテする方を選んでいるだけ。
usingについては、C#8.0(2019/09リリース)で改訂されているのだからobsoleteとは言わんだろ。
まあそれはさておき、Web開発ってのは以下で、現状のC#の主力はWPFではなくこれだって事か?
https://docs.microsoft.com/ja-jp/visualstudio/ide/quickstart-aspnet-core?view=vs-2019
見た目サーバーアプリで、つまりPHPの代替のように見える。
なら実際の描画はやる必要がないから、そりゃGDI+オブジェクトを掴むことはあり得ないわな。
> Webのパフォーマンス改善の観点で言えば、(君の愛する)スタックにしか置けない特殊な構造体の導入等により、
> C#のGCに極力頼らない高度なメモリ管理は実は一部では既に実現されている。
調べてみたが、Span<T>, stackalloc, ref struct 等か。確かにこれらは悪くない。
こういう小回りも利くところがMS主導言語のいいところではある。
実際にコードを書く奴らが主導している匂いがする。
ただな、こういうマニュアル調整は本来C#が目指しているものではないだろ。
GCを使う=変数等の寿命について一々考えたくない、であって、
実際、C++だと考えることが多すぎて、開発に手間がかかる=開発効率が悪くなる。
だからそこをランタイムに丸投げして、ユーザーは本来書くべきコードだけに集中出来るのがよいのであって、
あれこれ弄れば速くなります、なら、最初からC++等使え、でしかない。
とはいえ、折衷策として出してきたのは悪くないが。
JavsScriptの良い点は、「何も考えなくてもJITが勝手に速くしてくれる」事であって、
俺はこの点が最高に気に入ってる。
ちゃんと弄れば速くなります、なんてのは、面倒=開発効率が下がる。
ただしC#はスクリプト言語レベルの手抜きを目指しているわけでもないから、割と妥当なラインなのかもしれんが。
Formsが過去の遺産で糞で既にVSからデフォで除外済みなのは知ってる。
ただし俺は移行するよりはそのままメンテする方を選んでいるだけ。
usingについては、C#8.0(2019/09リリース)で改訂されているのだからobsoleteとは言わんだろ。
まあそれはさておき、Web開発ってのは以下で、現状のC#の主力はWPFではなくこれだって事か?
https://docs.microsoft.com/ja-jp/visualstudio/ide/quickstart-aspnet-core?view=vs-2019
見た目サーバーアプリで、つまりPHPの代替のように見える。
なら実際の描画はやる必要がないから、そりゃGDI+オブジェクトを掴むことはあり得ないわな。
> Webのパフォーマンス改善の観点で言えば、(君の愛する)スタックにしか置けない特殊な構造体の導入等により、
> C#のGCに極力頼らない高度なメモリ管理は実は一部では既に実現されている。
調べてみたが、Span<T>, stackalloc, ref struct 等か。確かにこれらは悪くない。
こういう小回りも利くところがMS主導言語のいいところではある。
実際にコードを書く奴らが主導している匂いがする。
ただな、こういうマニュアル調整は本来C#が目指しているものではないだろ。
GCを使う=変数等の寿命について一々考えたくない、であって、
実際、C++だと考えることが多すぎて、開発に手間がかかる=開発効率が悪くなる。
だからそこをランタイムに丸投げして、ユーザーは本来書くべきコードだけに集中出来るのがよいのであって、
あれこれ弄れば速くなります、なら、最初からC++等使え、でしかない。
とはいえ、折衷策として出してきたのは悪くないが。
JavsScriptの良い点は、「何も考えなくてもJITが勝手に速くしてくれる」事であって、
俺はこの点が最高に気に入ってる。
ちゃんと弄れば速くなります、なんてのは、面倒=開発効率が下がる。
ただしC#はスクリプト言語レベルの手抜きを目指しているわけでもないから、割と妥当なラインなのかもしれんが。
407デフォルトの名無しさん (スププ Sd94-CmeR)
2019/12/27(金) 12:41:35.60ID:Xz3K8ooNd えらい散らかった論調だな。もう少し端的に話せんか?
408デフォルトの名無しさん (ワッチョイ 7f7b-JrBF)
2019/12/27(金) 13:00:43.57ID:AkdF/Ds50 >>404
JITで出来ることとコンパイラで出来ることは違うが、今回に関しては同じだよ。
(関数単位でJITしてる限り同じ)
普通に考えれば分かると思うが、関数内の変数なんてその関数出たら破棄される物が大半で、
仮に内部でさらなる関数呼び出しに関連している物が全部追跡不可能だったとしても、十分効くんだよ。
完全にやり切ろうとするのはそりゃかなり無理だよ。でもそれは必要ないんだ。
JITで出来ることとコンパイラで出来ることは違うが、今回に関しては同じだよ。
(関数単位でJITしてる限り同じ)
普通に考えれば分かると思うが、関数内の変数なんてその関数出たら破棄される物が大半で、
仮に内部でさらなる関数呼び出しに関連している物が全部追跡不可能だったとしても、十分効くんだよ。
完全にやり切ろうとするのはそりゃかなり無理だよ。でもそれは必要ないんだ。
409デフォルトの名無しさん (アウアウウー Sab5-655U)
2019/12/27(金) 13:13:01.35ID:ra/PE2rBa 極論 vs. 極論でなんともw
410デフォルトの名無しさん (ワッチョイ 7f7b-JrBF)
2019/12/27(金) 13:18:13.87ID:AkdF/Ds50 >>405
> ちなみに彼は知らないようだが
実際知らんからRustの話は君に任せる。
俺はRustはどういうコンセプトでどういう状況かを遠くから眺めているだけで、
「このコードが動かないんです!」みたいな悲鳴をチラ見してるだけだからな。
ただ、その中に「ヒープ上のオブジェクトすらも勝手に解放されるのかー!!!」みたいな話もあった気がするが。
スマポ限定なだけだというのなら、あれは関数呼び出しによる所有権移転で解放されただけの話か。
まあそうかもしれん。
いずれにしても俺はRustのコードは書いてないし、直近で書く予定もないので、Rustについては君に任せる。
> ちなみに彼は知らないようだが
実際知らんからRustの話は君に任せる。
俺はRustはどういうコンセプトでどういう状況かを遠くから眺めているだけで、
「このコードが動かないんです!」みたいな悲鳴をチラ見してるだけだからな。
ただ、その中に「ヒープ上のオブジェクトすらも勝手に解放されるのかー!!!」みたいな話もあった気がするが。
スマポ限定なだけだというのなら、あれは関数呼び出しによる所有権移転で解放されただけの話か。
まあそうかもしれん。
いずれにしても俺はRustのコードは書いてないし、直近で書く予定もないので、Rustについては君に任せる。
411デフォルトの名無しさん (アウアウウー Sab5-655U)
2019/12/27(金) 13:29:20.92ID:ra/PE2rBa どうせ過疎スレだし、BGMこれでガンガンやって欲しいw
https://youtu.be/BvmqYM1xpZA?t=28
https://youtu.be/BvmqYM1xpZA?t=28
412デフォルトの名無しさん (ワッチョイ f12d-vQnI)
2019/12/27(金) 16:53:56.60ID:SNZP60vo0 トヨタの車をブレーキを踏まずに運転できる人なら、usingはいらないよ
413デフォルトの名無しさん (ワッチョイ 3263-mlB/)
2019/12/27(金) 20:05:38.60ID:vYkXGtn00 うぜーから個人ブログでやれよ
414デフォルトの名無しさん (ワッチョイ 082c-avnG)
2019/12/27(金) 21:26:25.65ID:rZaePzzs0 正直半分ぐらいしかわからないけど、たまには盛り上がるのもいいよ
415デフォルトの名無しさん (ワッチョイ f12d-vQnI)
2019/12/27(金) 23:28:54.87ID:SNZP60vo0 2週間に1度ぐらいのペースで、わけのわからん話題で盛り上がってる気はする
416デフォルトの名無しさん (ワッチョイ 4c7b-Zxhf)
2019/12/27(金) 23:31:26.75ID:jbwOykBS0 ふらっとじゃなくこっちで暴れる分には好きにしたらいい
こっちでNGしとけばふらっとで見なくて済むし
こっちでNGしとけばふらっとで見なくて済むし
417デフォルトの名無しさん (ワッチョイ 7f7b-JrBF)
2019/12/27(金) 23:40:23.09ID:AkdF/Ds50 >>414
半分しか分からないのは、オブジェクトの寿命を考えずにコーディングしているからだ。
ただしこれがGC言語の魅力でもあり、一々グダグダ考えていると魅力半減ではあるが、
そうは言っても、上達したいのなら、考える癖は付けた方がいい。
これについては、禿(ストロウストラップ=C++創始者)の
「ドキュメントを作成すべきコードのサイズには下限があるが、
コーディングする前に考えるべきコードのサイズには下限がない」
が当たってる。なまじ出来るようになるとどうとでも組めるようになるが、それがいけない。
本来このコードはここにあるべきか?というのを考えながらコーディングした方がいい。
usingに関しては、そもそもGDI+オブジェクトが永続化されるのが間違いで、
それはVに状態を持つということだから、MVCから見てもアウトだとすぐ分かるだろ。
本来は、GDI+オブジェクトに関しては、
・usingの中でしか使えない
・スタック上にしか置けない
(まあこの2つは等価だが)みたいな制限を課されたとしても、まともな設計なら制限にすらならないんだよ。
で、戻るが、これが分からないのなら、それはオブジェクトの寿命を考えてないからだ、となる。
といっても分からないだろうから、具体的に説明すると、
例えばドベタな将棋ソフトを作るとしよう。
CPUと対戦するだけの将棋ソフトで、ドベタに、
ユーザーが入力(指す)→画面の更新→CPUは考える→指す(画面の更新)→アイドル(ユーザー入力待ち)、の無限ループだとしよう。
これでMVCなら、
M: 盤面と持ち駒情報
V: 画面表示
C: それらのグルー
であって、画面はその都度最新状態に更新されているのだから、
アイドル状態で残っているオブジェクトはどう考えてもMの「盤面と持ち駒情報」だけでいいだろ。
だからアイドル状態にてV用のGDI+オブジェクトが捕まれたままになっている時点で設計がおかしいんだよ。
この点、Janeは再起動してみたが相変わらずGDI+は8,657なので、明らかに糞設計だと断言出来る。
半分しか分からないのは、オブジェクトの寿命を考えずにコーディングしているからだ。
ただしこれがGC言語の魅力でもあり、一々グダグダ考えていると魅力半減ではあるが、
そうは言っても、上達したいのなら、考える癖は付けた方がいい。
これについては、禿(ストロウストラップ=C++創始者)の
「ドキュメントを作成すべきコードのサイズには下限があるが、
コーディングする前に考えるべきコードのサイズには下限がない」
が当たってる。なまじ出来るようになるとどうとでも組めるようになるが、それがいけない。
本来このコードはここにあるべきか?というのを考えながらコーディングした方がいい。
usingに関しては、そもそもGDI+オブジェクトが永続化されるのが間違いで、
それはVに状態を持つということだから、MVCから見てもアウトだとすぐ分かるだろ。
本来は、GDI+オブジェクトに関しては、
・usingの中でしか使えない
・スタック上にしか置けない
(まあこの2つは等価だが)みたいな制限を課されたとしても、まともな設計なら制限にすらならないんだよ。
で、戻るが、これが分からないのなら、それはオブジェクトの寿命を考えてないからだ、となる。
といっても分からないだろうから、具体的に説明すると、
例えばドベタな将棋ソフトを作るとしよう。
CPUと対戦するだけの将棋ソフトで、ドベタに、
ユーザーが入力(指す)→画面の更新→CPUは考える→指す(画面の更新)→アイドル(ユーザー入力待ち)、の無限ループだとしよう。
これでMVCなら、
M: 盤面と持ち駒情報
V: 画面表示
C: それらのグルー
であって、画面はその都度最新状態に更新されているのだから、
アイドル状態で残っているオブジェクトはどう考えてもMの「盤面と持ち駒情報」だけでいいだろ。
だからアイドル状態にてV用のGDI+オブジェクトが捕まれたままになっている時点で設計がおかしいんだよ。
この点、Janeは再起動してみたが相変わらずGDI+は8,657なので、明らかに糞設計だと断言出来る。
418デフォルトの名無しさん (ワッチョイ 7f7b-JrBF)
2019/12/27(金) 23:41:02.61ID:AkdF/Ds50 画面の更新は、当然関数であり、
画面の更新はこの中でしか行われないのだから、当然、この関数を出ればGDI+オブジェクトは破棄していい。
だから、全てのGDI+オブジェクトは、どこかで
void some_funciton_0(){
using (var someGDIobject = ... ){
some_function_1();
}
}
みたいにusingで囲めるポイントが必ず存在する。例えば、ど頭でCreateGraphicsするなら以下となる。
void redraw_board(){
using (var gr = someControl.CreateGraphics()) {
some_function();
}
}
これは寿命という意味では、関数の一番頭でCreateGraphics=この関数と変数grの寿命を同期させているわけだが、
この関数以外に画面更新関数がなく、常に全面更新完了して抜けるのだから、
grはどう考えてもこの関数の外で使われることが無く、これで問題になりようがないだろ。
だから変数を寿命順に入れ子にし、結果的に関数コールも同様に並び、変数の寿命とスタックの動作が完全に一致する、というのがC流で、
動作としてはこれが一番無駄がないから、この設計で組まれた場合に速度ではどうやっても勝てない、ということになる。
別にこれが難しいとか制限が厳しいとかいうわけでもなく、要するに無駄なく普通に組めばこうなる。
だからまともな設計に於いて、GDI+オブジェクトに
・usingの中でしか使えない(=スタック上にしか置けない)
という制限を課すのは、制限にすらならない。
これが問題になるようならそもそも設計がおかしい。
ただ、現実論として、度重なる仕様変更によりプログラムの設計というのはおかしくなって行くもので、
多少設計がおかしくてもなんとでもなる言語じゃないと困るのだが、
それにしてもGDI+オブジェクトは上記制限を課されても全く問題ないと思う。回避手段もあるし。
というかマジな話、MVCにしてればV用オブジェクト掴みっぱなしなんてあり得ないし。
画面の更新はこの中でしか行われないのだから、当然、この関数を出ればGDI+オブジェクトは破棄していい。
だから、全てのGDI+オブジェクトは、どこかで
void some_funciton_0(){
using (var someGDIobject = ... ){
some_function_1();
}
}
みたいにusingで囲めるポイントが必ず存在する。例えば、ど頭でCreateGraphicsするなら以下となる。
void redraw_board(){
using (var gr = someControl.CreateGraphics()) {
some_function();
}
}
これは寿命という意味では、関数の一番頭でCreateGraphics=この関数と変数grの寿命を同期させているわけだが、
この関数以外に画面更新関数がなく、常に全面更新完了して抜けるのだから、
grはどう考えてもこの関数の外で使われることが無く、これで問題になりようがないだろ。
だから変数を寿命順に入れ子にし、結果的に関数コールも同様に並び、変数の寿命とスタックの動作が完全に一致する、というのがC流で、
動作としてはこれが一番無駄がないから、この設計で組まれた場合に速度ではどうやっても勝てない、ということになる。
別にこれが難しいとか制限が厳しいとかいうわけでもなく、要するに無駄なく普通に組めばこうなる。
だからまともな設計に於いて、GDI+オブジェクトに
・usingの中でしか使えない(=スタック上にしか置けない)
という制限を課すのは、制限にすらならない。
これが問題になるようならそもそも設計がおかしい。
ただ、現実論として、度重なる仕様変更によりプログラムの設計というのはおかしくなって行くもので、
多少設計がおかしくてもなんとでもなる言語じゃないと困るのだが、
それにしてもGDI+オブジェクトは上記制限を課されても全く問題ないと思う。回避手段もあるし。
というかマジな話、MVCにしてればV用オブジェクト掴みっぱなしなんてあり得ないし。
419デフォルトの名無しさん (ワッチョイ 412f-fJ/L)
2019/12/28(土) 04:09:04.41ID:Cmc+tz5h0 GDI+だけがアンマネージドリソースではないんだが
そんな狭い前提で話されてもなぁ
そんな狭い前提で話されてもなぁ
420デフォルトの名無しさん (ワッチョイ 7f7b-JrBF)
2019/12/28(土) 09:58:00.22ID:6W1egYcc0 ちょっと言い方が本質的でなかったから言い直すと、
ある関数内で必要とされるリソースに対して、
・その関数突入時には掴んでおらず、
・その関数脱出時にはリリースしててよい(=その関数の中でしか使わない)
場合は、必ずブロックスコープの入れ子で対応出来る。(A)
となる。Cはある意味これしか無く、これを「不自由だ」とする人達はGCに向かったが、
結局C的上記手法に回帰してる。これはC++もそうだし、C#もそうだ。
C#8.0のusing、何度も言っているが書く場合は完成型だが、意味的にはC++のデストラクタと同じでしかない。
なら36年前に開発済みの手法であり、C#1.0からこれでよかった。
それを19年かけて再開発して、何も知らない若者がありがたがるという、間抜けなことをやっている。
ここら辺がLinusがC++を嫌う理由で、C++も同様に仕様を引っかき回した挙げ句、C的手法に回帰してる。
なら最初からCで書け、Cで出来る範囲しかC++は認めない、というのも、酷い言い方だが確かにそうでもある。
同様に、C#も、usingの間抜けさに気づくのに8.0までかかったんだから、
C#12.0位で上記縛りを付けて廃止する方向になるのではないかな。
MとVを分離するのは現在既に常識だし、Vを分離している場合にはGDI+リソースについては上記(A)は必ず成立する。
ファイル等のその他アンマネージドリソースについては後回しになるだろう。
言語/プラットフォームとしての整合性/統一性が取れないが、C#は整合性より実質的利益を選択するはず。
ある関数内で必要とされるリソースに対して、
・その関数突入時には掴んでおらず、
・その関数脱出時にはリリースしててよい(=その関数の中でしか使わない)
場合は、必ずブロックスコープの入れ子で対応出来る。(A)
となる。Cはある意味これしか無く、これを「不自由だ」とする人達はGCに向かったが、
結局C的上記手法に回帰してる。これはC++もそうだし、C#もそうだ。
C#8.0のusing、何度も言っているが書く場合は完成型だが、意味的にはC++のデストラクタと同じでしかない。
なら36年前に開発済みの手法であり、C#1.0からこれでよかった。
それを19年かけて再開発して、何も知らない若者がありがたがるという、間抜けなことをやっている。
ここら辺がLinusがC++を嫌う理由で、C++も同様に仕様を引っかき回した挙げ句、C的手法に回帰してる。
なら最初からCで書け、Cで出来る範囲しかC++は認めない、というのも、酷い言い方だが確かにそうでもある。
同様に、C#も、usingの間抜けさに気づくのに8.0までかかったんだから、
C#12.0位で上記縛りを付けて廃止する方向になるのではないかな。
MとVを分離するのは現在既に常識だし、Vを分離している場合にはGDI+リソースについては上記(A)は必ず成立する。
ファイル等のその他アンマネージドリソースについては後回しになるだろう。
言語/プラットフォームとしての整合性/統一性が取れないが、C#は整合性より実質的利益を選択するはず。
421デフォルトの名無しさん (ワッチョイ 7f7b-JrBF)
2019/12/28(土) 09:59:17.52ID:6W1egYcc0 お前らは多分気づいていないんだろうけど、C系言語は「関数を抜けたらローカル変数は全て破棄される」為、
動作効率はいいが、関数を頻繁に抜ける=GUIとは絶望的に相性が悪い。
GUIの場合は各イベント関数がトップレベル関数(C#コンソールアプリでいうmain)になるから、
上記「入れ子」での変数処理にかなり無理が発生してしまう。(アーキテクチャ的に無理)
ここら辺は最初からGUI用に設計されているJavaScript等をやってみれば分かる。
JavsScriptの場合は全部の関数がクロージャ付きだから、クラスと関数の区別もなく、関数に変数が紐ついてる。
だから、C系言語だとグダグダになるGUIも、JavaScriptなら比較的綺麗に書ける。
C#はいい言語だし、1つ学ぶならC#という選択も悪くはないが、他言語をやりさえすればあっさり見えることはある。
JavaScriptは糞だ糞だと言われて久しく、AltJSもやたら作られたが、いまだに殺しきれないのは、
結局のところ根幹のアーキテクチャ「全関数がレキシカルスコープのクロージャ付き」がGUI向けに圧倒的にフィットするからだ。
同様に、C#含めてC系言語がやたらあるのに、Cを殺しきれないのは、結局のところ、Cの根幹のアーキテクチャ
「変数の寿命とスタックの動作を一致させ、最速を得る」が圧倒的に素晴らしいからだ。
「変数の寿命を考えて設計しろ」なんてのは今も昔もそう言われてないが、(ただCにはそれしかないから言わずもがなだったが)
C#もC系ではあるのでC的手法で設計した方がフィットするのは事実。
寿命なんて考えたこと無かった奴は考える癖を付けた方がいい。
そして可能であればJavaScript等の「コンセプトがそもそも違う」言語を触ってみた方がいい。
そうすれば、C系言語が何を捨てて何を取ったかも分かるようになる。
具体的には(歴史的にはおかしい言い方だが)、GUI対応を捨てて速度を取っている。
動作効率はいいが、関数を頻繁に抜ける=GUIとは絶望的に相性が悪い。
GUIの場合は各イベント関数がトップレベル関数(C#コンソールアプリでいうmain)になるから、
上記「入れ子」での変数処理にかなり無理が発生してしまう。(アーキテクチャ的に無理)
ここら辺は最初からGUI用に設計されているJavaScript等をやってみれば分かる。
JavsScriptの場合は全部の関数がクロージャ付きだから、クラスと関数の区別もなく、関数に変数が紐ついてる。
だから、C系言語だとグダグダになるGUIも、JavaScriptなら比較的綺麗に書ける。
C#はいい言語だし、1つ学ぶならC#という選択も悪くはないが、他言語をやりさえすればあっさり見えることはある。
JavaScriptは糞だ糞だと言われて久しく、AltJSもやたら作られたが、いまだに殺しきれないのは、
結局のところ根幹のアーキテクチャ「全関数がレキシカルスコープのクロージャ付き」がGUI向けに圧倒的にフィットするからだ。
同様に、C#含めてC系言語がやたらあるのに、Cを殺しきれないのは、結局のところ、Cの根幹のアーキテクチャ
「変数の寿命とスタックの動作を一致させ、最速を得る」が圧倒的に素晴らしいからだ。
「変数の寿命を考えて設計しろ」なんてのは今も昔もそう言われてないが、(ただCにはそれしかないから言わずもがなだったが)
C#もC系ではあるのでC的手法で設計した方がフィットするのは事実。
寿命なんて考えたこと無かった奴は考える癖を付けた方がいい。
そして可能であればJavaScript等の「コンセプトがそもそも違う」言語を触ってみた方がいい。
そうすれば、C系言語が何を捨てて何を取ったかも分かるようになる。
具体的には(歴史的にはおかしい言い方だが)、GUI対応を捨てて速度を取っている。
422デフォルトの名無しさん (ワッチョイ 7f7b-JrBF)
2019/12/28(土) 09:59:55.78ID:6W1egYcc0 なお余談だが、そのGUIをグダグダにならないように設計として対処しよう、というのがMVCであり、
これはやった方がいいのは事実だが、酷い話、
JavaScriptほどGUIと相性がいいとMとVが混ざっていようがなんとでもなってしまうのも事実で、
これの最たる物がjQueryであり、jQuery自体ではなく使う奴の使い方の問題なのだが、レッテル貼られて丸ごと廃棄されようとしている。
ただここら辺も、やれば、C#なんてGUIにはまるで向いて無く、
だからMVCだバインディングだと手の込んだ仕掛けを作って誤魔化さないと駄目なのだ、というのが分かるようになる。
だからまあ、設計の善し悪しが分かるようになってきたら、他言語を触ってみればいい。
(分からないうちに触っても文法コレクターにしかなれず、意味無いから止めとけ)
これはやった方がいいのは事実だが、酷い話、
JavaScriptほどGUIと相性がいいとMとVが混ざっていようがなんとでもなってしまうのも事実で、
これの最たる物がjQueryであり、jQuery自体ではなく使う奴の使い方の問題なのだが、レッテル貼られて丸ごと廃棄されようとしている。
ただここら辺も、やれば、C#なんてGUIにはまるで向いて無く、
だからMVCだバインディングだと手の込んだ仕掛けを作って誤魔化さないと駄目なのだ、というのが分かるようになる。
だからまあ、設計の善し悪しが分かるようになってきたら、他言語を触ってみればいい。
(分からないうちに触っても文法コレクターにしかなれず、意味無いから止めとけ)
423デフォルトの名無しさん (アウアウウー Sa83-BCWm)
2019/12/28(土) 10:32:20.67ID:Jn8dNYLra FormがBackgroundプロパティを持たないでどうやって背景色を指定するのかな?
再描画の際にしかBrushのGDI+オブジェクトは使用されないのだから常にBrushがGDI+リソースを持ち続ける必要がないという主張であるなら、パフォーマンスを度外視すればその通りかもしれん。
しかしBrushがGDI+リソースと一対一対応するのではなく必要なときにだけ内部的にGDI+リソースを作るような設計思想なら、
そもそもBrushのusingが一切必要ないようなアーキテクチャが十分に実現可能なんだよ。
言語をいじるまでもない簡単な話。
再描画の際にしかBrushのGDI+オブジェクトは使用されないのだから常にBrushがGDI+リソースを持ち続ける必要がないという主張であるなら、パフォーマンスを度外視すればその通りかもしれん。
しかしBrushがGDI+リソースと一対一対応するのではなく必要なときにだけ内部的にGDI+リソースを作るような設計思想なら、
そもそもBrushのusingが一切必要ないようなアーキテクチャが十分に実現可能なんだよ。
言語をいじるまでもない簡単な話。
424デフォルトの名無しさん (ワッチョイ 0c01-PaHz)
2019/12/28(土) 11:00:39.51ID:b3ohKRMf0 今日も知ったか君が暴れてるw
425デフォルトの名無しさん (ワッチョイ 4dda-K0SF)
2019/12/28(土) 11:09:23.84ID:mOzjhcRm0 予防線張ることに必死過ぎて何言ってんのかわからなくなってる典型だなこりゃ
自分の発言を自分で否定しながらお花畑垂れ流してる底抜けのアホ
自分の発言を自分で否定しながらお花畑垂れ流してる底抜けのアホ
426デフォルトの名無しさん (ブーイモ MM5e-7Yd4)
2019/12/28(土) 11:11:57.13ID:e/19aGJmM オブジェクト指向ではリソースは依存性として分離して注入するのが良い習慣とされる
なのでローカルスコープでいきなりリソース確保みたいなコードを書くことは稀だ
C#やJavaの世界ではリソースのライフタイムはDIコンテナが管理するものであってスタックに同期させるものではない
なのでローカルスコープでいきなりリソース確保みたいなコードを書くことは稀だ
C#やJavaの世界ではリソースのライフタイムはDIコンテナが管理するものであってスタックに同期させるものではない
427デフォルトの名無しさん (アウアウウー Sa83-BCWm)
2019/12/28(土) 11:16:46.70ID:Jn8dNYLra >>426
彼の主張は置いといて、生成タイミングの制御のためにDIでファクトリーオブジェクトを注入するのはよくあるパターンだぞ
彼の主張は置いといて、生成タイミングの制御のためにDIでファクトリーオブジェクトを注入するのはよくあるパターンだぞ
428デフォルトの名無しさん (ワッチョイ e25e-CmeR)
2019/12/28(土) 11:45:36.16ID:yuB2IAbM0 cでもmallocしてりゃどこかで開放は要るだろ。
理屈すり替えて楽しいか?
理屈すり替えて楽しいか?
429デフォルトの名無しさん (ワッチョイ 7f7b-JrBF)
2019/12/28(土) 13:24:27.10ID:6W1egYcc0 >>423
> パフォーマンスを度外視すれば
GDI+オブジェクトの生成ってそんなに重いのか?
> そもそもBrushのusingが一切必要ないようなアーキテクチャが十分に実現可能なんだよ。
その通りだ。だから.NET自体がボロいんだよ。
元々はGDI+オブジェクトのリソースが限られていたから、win98までは文句を言わず俺が言っている
「使うときだけ生成、使い終わったらすぐ解放」
しかなかった。これを「面倒」と思ったのか単にボケているだけなのか、
リソースが大幅に増えたこともあって問題にもならなくなった為、掴みっぱなしも出来るようになった。
.NET自体はWin32APIを隠蔽する為の物で、これ自体は良く出来ている。
ただ、俺は、君の言うとおり、もう一枚多く隠蔽して、usingが一切不要のフレームワークにした方がいいと思うけど。
もしGDI+オブジェクト生成が問題になるほど重く、キャッシュしたいというのなら、直接自前でGDI+オブジェクトを掴む必要がある。
だから.NETは今のアーキテクチャなのだ、と捕らえることも出来るが、
実際はそうではなく、単に皮を被せただけで、その皮の厚さが不適当だっただけだと思うよ。
まあこれはすぐに修正出来る話でもあるけど。
> パフォーマンスを度外視すれば
GDI+オブジェクトの生成ってそんなに重いのか?
> そもそもBrushのusingが一切必要ないようなアーキテクチャが十分に実現可能なんだよ。
その通りだ。だから.NET自体がボロいんだよ。
元々はGDI+オブジェクトのリソースが限られていたから、win98までは文句を言わず俺が言っている
「使うときだけ生成、使い終わったらすぐ解放」
しかなかった。これを「面倒」と思ったのか単にボケているだけなのか、
リソースが大幅に増えたこともあって問題にもならなくなった為、掴みっぱなしも出来るようになった。
.NET自体はWin32APIを隠蔽する為の物で、これ自体は良く出来ている。
ただ、俺は、君の言うとおり、もう一枚多く隠蔽して、usingが一切不要のフレームワークにした方がいいと思うけど。
もしGDI+オブジェクト生成が問題になるほど重く、キャッシュしたいというのなら、直接自前でGDI+オブジェクトを掴む必要がある。
だから.NETは今のアーキテクチャなのだ、と捕らえることも出来るが、
実際はそうではなく、単に皮を被せただけで、その皮の厚さが不適当だっただけだと思うよ。
まあこれはすぐに修正出来る話でもあるけど。
430デフォルトの名無しさん (ワッチョイ 7f7b-JrBF)
2019/12/28(土) 13:31:51.66ID:6W1egYcc0 >>426
> オブジェクト指向ではリソースは依存性として分離して注入するのが良い習慣とされる
そうだ。ただ、これがGUIとは絶望的に相性が悪いんだよ。
実際、Formsはこれで、各コントロールが値を保持してそれを参照する、というアーキテクチャだが、
事実としてこれは使いにくくて、WPFでばっさり修正されてるだろ。
(例としてはまんま>>253で、彼が253の時点でいいと思っているアーキテクチャがFormsのものだ。
だから俺は253はFormsしか知らない老害に文句を言われたのだと思っている)
一応Webは当初は(というか一応今も)Javaでもクライアントコードを書けることになっている。
ただ、JavaとJavaScriptだと書きやすさのイージーさの次元が違っていて、喧嘩にならないんだよ。
一応アプレットが遅いだの色々理由が付けられてるけど、
俺はJavaScriptの方が圧倒的に楽に書ける、というのが本質だと思うよ。
(仮に速くてもJavaは駆逐されてたと思う)
不幸なのはGUIが出てきた時の覇権言語がCであった為、
有無をいわさずGUIもCでやり、そしてそれを今でも引きずっている点だ。
そしてその後はOOPが覇権を取ったから、GUIもOOPだという事になるのだが、これがまた間違いで、
これを盛大にやらかしたのがFormsだ。
MVCのMなんて、OOP(特にJava)で禁忌とされるグローバルそのものだろ。
C系言語の変数管理そのものがGUI向きではないんだよ。
そしてOOPの変数局在化思想もOOP向きではない。結果、Formsは二重に間違いを犯してる。
> オブジェクト指向ではリソースは依存性として分離して注入するのが良い習慣とされる
そうだ。ただ、これがGUIとは絶望的に相性が悪いんだよ。
実際、Formsはこれで、各コントロールが値を保持してそれを参照する、というアーキテクチャだが、
事実としてこれは使いにくくて、WPFでばっさり修正されてるだろ。
(例としてはまんま>>253で、彼が253の時点でいいと思っているアーキテクチャがFormsのものだ。
だから俺は253はFormsしか知らない老害に文句を言われたのだと思っている)
一応Webは当初は(というか一応今も)Javaでもクライアントコードを書けることになっている。
ただ、JavaとJavaScriptだと書きやすさのイージーさの次元が違っていて、喧嘩にならないんだよ。
一応アプレットが遅いだの色々理由が付けられてるけど、
俺はJavaScriptの方が圧倒的に楽に書ける、というのが本質だと思うよ。
(仮に速くてもJavaは駆逐されてたと思う)
不幸なのはGUIが出てきた時の覇権言語がCであった為、
有無をいわさずGUIもCでやり、そしてそれを今でも引きずっている点だ。
そしてその後はOOPが覇権を取ったから、GUIもOOPだという事になるのだが、これがまた間違いで、
これを盛大にやらかしたのがFormsだ。
MVCのMなんて、OOP(特にJava)で禁忌とされるグローバルそのものだろ。
C系言語の変数管理そのものがGUI向きではないんだよ。
そしてOOPの変数局在化思想もOOP向きではない。結果、Formsは二重に間違いを犯してる。
431デフォルトの名無しさん (ワッチョイ 7f7b-JrBF)
2019/12/28(土) 13:34:55.12ID:6W1egYcc0432デフォルトの名無しさん (アウアウウー Sab5-655U)
2019/12/28(土) 14:09:15.47ID:06FVqHz0a うーん、なんかさすがに「アインシュタインは間違っている!」と主張するトンデモ本作者的な主張は草不可避w
433デフォルトの名無しさん (ワッチョイ 7f7b-JrBF)
2019/12/28(土) 14:31:37.94ID:6W1egYcc0 >>432
それが信者的態度だよ。
お前はC#以外の言語をいくつも知っていて、C#/.NETの良さ/悪さをちゃんと識別出来るのか?
ただしこれはC#だけではなく、どの言語スレも割とこの傾向の奴が多いのも事実だが。
ただその態度は目を曇らせるから止めた方がいい。
C#が覇権を取れておらず、今後とも取れそうにもないのにも理由があるし、
JavaScriptが糞糞言われてもやたら蔓延っているのにも理由がある。
お前が何を好きかはお前の自由だが、何故そうなっているのかが分からないようなら単なる馬鹿でしかない。
勿論馬鹿であり続けるのも君の自由だが。
> https://www.youtube.com/watch?v=Og847HVwRSI
> https://mevius.5ch.net/test/read.cgi/tech/1571315884/69
それが信者的態度だよ。
お前はC#以外の言語をいくつも知っていて、C#/.NETの良さ/悪さをちゃんと識別出来るのか?
ただしこれはC#だけではなく、どの言語スレも割とこの傾向の奴が多いのも事実だが。
ただその態度は目を曇らせるから止めた方がいい。
C#が覇権を取れておらず、今後とも取れそうにもないのにも理由があるし、
JavaScriptが糞糞言われてもやたら蔓延っているのにも理由がある。
お前が何を好きかはお前の自由だが、何故そうなっているのかが分からないようなら単なる馬鹿でしかない。
勿論馬鹿であり続けるのも君の自由だが。
> https://www.youtube.com/watch?v=Og847HVwRSI
> https://mevius.5ch.net/test/read.cgi/tech/1571315884/69
434デフォルトの名無しさん (ブーイモ MM5a-7Yd4)
2019/12/28(土) 14:54:05.52ID:yrEHcKMIM そんなに良いものなら実装してC#チームにマージリクエスト出したら?
ここで演説しても全く時間の無駄だよ?
実装するのにスキル不足なら機能リクエストでもいい
C#はオープンソースなんだからさ
ここで演説しても全く時間の無駄だよ?
実装するのにスキル不足なら機能リクエストでもいい
C#はオープンソースなんだからさ
435デフォルトの名無しさん (ワッチョイ 4697-b920)
2019/12/28(土) 15:20:44.51ID:WD8h4qtV0 今でもJavaでもクライアントコードを書けることになっている、とか、どの世界の話だろう?
あと、自分は432じゃないけど、
> それが信者的態度だよ。
> お前はC#以外の言語をいくつも知っていて、C#/.NETの良さ/悪さをちゃんと識別出来るのか?
というぐらいなら、C#以外の言語使えばいいんじゃない?って思ってしまう。
実際自分はプラットフォームに合わせて、アプリケーションの使いかたに合わせて8言語ぐらいから選んで使ってるけど。
あと、C#が覇権を取れていないとは全く思わないけどな。Windowsで適当なアプリ作るなら普通みんなC#で書くんじゃないの?
UnityだってC#だし。
あと、自分は432じゃないけど、
> それが信者的態度だよ。
> お前はC#以外の言語をいくつも知っていて、C#/.NETの良さ/悪さをちゃんと識別出来るのか?
というぐらいなら、C#以外の言語使えばいいんじゃない?って思ってしまう。
実際自分はプラットフォームに合わせて、アプリケーションの使いかたに合わせて8言語ぐらいから選んで使ってるけど。
あと、C#が覇権を取れていないとは全く思わないけどな。Windowsで適当なアプリ作るなら普通みんなC#で書くんじゃないの?
UnityだってC#だし。
436デフォルトの名無しさん (ワッチョイ 7f7b-JrBF)
2019/12/28(土) 16:14:20.14ID:6W1egYcc0 >>434
俺は.NETを使っているのであって、C#は使ってない。
ただ、usingをどうするかは思想の問題であって、技術的に不足しているわけではないので、提案しても通らないとは思う。
(作ってる側も知っててそうしているはず)
>>435
そう思うならそれでよし。
C#は良い言語だし健闘している方だが、Javaと食い合うなら死ぬのはC#だ。(俺はJavaが死んで欲しいのだが)
OracleはJavaを技術的に成長させることは出来なかったが、ある意味余計なこともしなかった為、
プラットフォームとしては既に膨れあがってしまった。
後はC#で成果が出た仕様を順に取り入れていけば、「C#には負けない」言語にはなる。(勝てもしないが)
同じような仕様で並立すると、死ぬのは小さい側のC#なので、当然C#は新規機能を追加して逃げ続けるしかない。
これはこれで恩恵はあり、そうこうしているうちに勢力逆転出来ればいいが、今のところその芽もないだろ。
(Unityがそうだというのならそれでいいが)
> Windowsで適当なアプリ作るなら普通みんなC#で書くんじゃないの?
俺は知らんが多分Python。大体ネット上ではブッ叩かれているが。
その動画見ても一応トップだし。
俺は.NETを使っているのであって、C#は使ってない。
ただ、usingをどうするかは思想の問題であって、技術的に不足しているわけではないので、提案しても通らないとは思う。
(作ってる側も知っててそうしているはず)
>>435
そう思うならそれでよし。
C#は良い言語だし健闘している方だが、Javaと食い合うなら死ぬのはC#だ。(俺はJavaが死んで欲しいのだが)
OracleはJavaを技術的に成長させることは出来なかったが、ある意味余計なこともしなかった為、
プラットフォームとしては既に膨れあがってしまった。
後はC#で成果が出た仕様を順に取り入れていけば、「C#には負けない」言語にはなる。(勝てもしないが)
同じような仕様で並立すると、死ぬのは小さい側のC#なので、当然C#は新規機能を追加して逃げ続けるしかない。
これはこれで恩恵はあり、そうこうしているうちに勢力逆転出来ればいいが、今のところその芽もないだろ。
(Unityがそうだというのならそれでいいが)
> Windowsで適当なアプリ作るなら普通みんなC#で書くんじゃないの?
俺は知らんが多分Python。大体ネット上ではブッ叩かれているが。
その動画見ても一応トップだし。
437デフォルトの名無しさん (ワッチョイ 9701-K0SF)
2019/12/28(土) 16:38:51.11ID:WVh0vSeH0 ずーっと勝ちだの負けだのふわっふわなことこだわってるのなこのド近眼馬鹿
手前で他の言語持ち出してきて突っ込まれたら知らんから解説譲るとか逃げてるし
まさに無意味な頭でっかち文法コレクター(笑)を自ら体現してる
クスリでもキめてんのか?
手前で他の言語持ち出してきて突っ込まれたら知らんから解説譲るとか逃げてるし
まさに無意味な頭でっかち文法コレクター(笑)を自ら体現してる
クスリでもキめてんのか?
438デフォルトの名無しさん (ワッチョイ 4697-b920)
2019/12/28(土) 22:03:53.41ID:WD8h4qtV0 >>436
> 俺は知らんが多分Python。大体ネット上ではブッ叩かれているが。
いやいや…
実情を知らなすぎだろう?C#なら実行ファイルの入ったフォルダごと渡したら実行できるようになるけど、
Pythonだと環境を作ったりとか結構めんどくさいぞ。大体GUIを考えたらPythonとか最悪でしょ。
「お前はC#以外の言語をいくつも知っていて、C#/.NETの良さ/悪さをちゃんと識別出来るのか? 」とか言ってる割にはトンチンカンすぎる。
一応言っとくと、C#しか書けないからこう言ってるわけじゃなくて、Pythonもガンガン使って仕事してるからね。
あと、JavaはもうほとんどSIer専用言語みたいになってるから、C#と直接比較するのもナンセンスでしょ。
スーパーコンピュータで科学技術計算する分野では今でもFORTRANが主役だけど、そこ以外で使わないだろ。それと一緒。
最強言語なんてのはない。色々なニーズに合わせて言語(プラットフォーム)を選んで何でも書けばいいんだよ。
手続き型言語だったら考え方は大して変わらないからね。
> 俺は知らんが多分Python。大体ネット上ではブッ叩かれているが。
いやいや…
実情を知らなすぎだろう?C#なら実行ファイルの入ったフォルダごと渡したら実行できるようになるけど、
Pythonだと環境を作ったりとか結構めんどくさいぞ。大体GUIを考えたらPythonとか最悪でしょ。
「お前はC#以外の言語をいくつも知っていて、C#/.NETの良さ/悪さをちゃんと識別出来るのか? 」とか言ってる割にはトンチンカンすぎる。
一応言っとくと、C#しか書けないからこう言ってるわけじゃなくて、Pythonもガンガン使って仕事してるからね。
あと、JavaはもうほとんどSIer専用言語みたいになってるから、C#と直接比較するのもナンセンスでしょ。
スーパーコンピュータで科学技術計算する分野では今でもFORTRANが主役だけど、そこ以外で使わないだろ。それと一緒。
最強言語なんてのはない。色々なニーズに合わせて言語(プラットフォーム)を選んで何でも書けばいいんだよ。
手続き型言語だったら考え方は大して変わらないからね。
439デフォルトの名無しさん (ワッチョイ 7f7b-JrBF)
2019/12/28(土) 22:29:59.46ID:6W1egYcc0 >>438
そりゃお前の現状認識がおかしいと思うぞ。
インストールすら大変なら、Pythonがここまで蔓延ることはない。
何故かよく出てくるFORTRANガーってのも、FORTRANなんて実際もう誰も使ってない(と聞いている)し、
今のFORTRANは昔のFORTRANとは別物(と聞いている)ので、FORTRANを持ち出すのもおかしい。
それはVBを持ち出してBASICがまだ使われている、と言っているに近い。(はず)
多分お前もFORTRAN信者に嘘を吹き込まれているだけだと思うが、
冷静に考えれば見抜けるはずだが、FOTRAN全盛時代の連中はもうリタイヤかその辺であって、コードなんて書いてない。
あれはスパコンのCOBOL扱いになってるはずだが。
(もしかしてベクトルはFORTRANしか受け付けないのかな?これはあり得るが)
まあいいが。
いずれにしてもお前らが何故そんなに信者化するのかはいつも疑問だ。
そりゃお前の現状認識がおかしいと思うぞ。
インストールすら大変なら、Pythonがここまで蔓延ることはない。
何故かよく出てくるFORTRANガーってのも、FORTRANなんて実際もう誰も使ってない(と聞いている)し、
今のFORTRANは昔のFORTRANとは別物(と聞いている)ので、FORTRANを持ち出すのもおかしい。
それはVBを持ち出してBASICがまだ使われている、と言っているに近い。(はず)
多分お前もFORTRAN信者に嘘を吹き込まれているだけだと思うが、
冷静に考えれば見抜けるはずだが、FOTRAN全盛時代の連中はもうリタイヤかその辺であって、コードなんて書いてない。
あれはスパコンのCOBOL扱いになってるはずだが。
(もしかしてベクトルはFORTRANしか受け付けないのかな?これはあり得るが)
まあいいが。
いずれにしてもお前らが何故そんなに信者化するのかはいつも疑問だ。
440デフォルトの名無しさん (ワッチョイ e25e-CmeR)
2019/12/28(土) 22:34:45.14ID:yuB2IAbM0 自分が作ったものだけ動かすなら楽だもの。Python。
envで環境作らないといかんくなったらめんどくさい。
お前あんまり知らねえだろ。
envで環境作らないといかんくなったらめんどくさい。
お前あんまり知らねえだろ。
441デフォルトの名無しさん (ワッチョイ 4697-b920)
2019/12/28(土) 23:12:31.42ID:WD8h4qtV0 >>439
開発用PCでプログラミングするだけで十分な場合と、デプロイが必要なアプリケーションを作るのは違うんだよ。
Pythonが流行ってるのはデプロイが必要なアプリケーションでなければ、かなり楽できるから。
デプロイするのは結構大変だよ。インターネット接続不可の環境でpipを使うのはめちゃくちゃ難しいし。
仕事でプログラム作ってアプリ納品したことないでしょ。その経験がなければプログラミングを語るなとは思わないけど、
納品という観点でみたらナンセンスすぎるんだよ。よくも上から目線で「お前の現状認識がおかしい」と言えるね。
あと、PythonでGUIアプリケーションを書くことに関してはスルーかな?
FORTRANの下りも、聞きかじった知識だけじゃん。
科学技術計算でよく使われるBLASっていう線形代数のライブラリがあるんだけど、githubで見る限り半分はFORTRANで書かれてるよ。
https://github.com/xianyi/OpenBLAS/
4,033 commitsとか書かれてるところの下の棒押してみ。
Fortran 49.3% Assembly 26.7% C 21.2% C++ 1.4% Makefile 0.8% CMake 0.4% Other 0.2%
って出てくるから。
あと、書かれてるコードも昔のFORTRANそのものでしかないコードだよ。
https://github.com/xianyi/OpenBLAS/blob/ce3651516f12079f3ca2418aa85b9ad571c3a391/lapack-netlib/SRC/dgebd2.f
これを今でも皆コンパイルして使ってるわけ。スパコンだけじゃなくて、PCでもね。
んで、プログラマーじゃなくて、研究者はいちいち他の言語とか覚えたくないから、今でもこういう乗りのFORTRANを使ってるわけ。
http://www.chem.konan-u.ac.jp/PCSI/DL_POLY/still_FORTRAN.pdf
どうしてろくに自分で調べもせずに聞きかじったそれっぽい言葉を信じちゃうのか。
「いずれにしてもお前が何故そんなに知ったかするのかはいつも疑問だ。」
開発用PCでプログラミングするだけで十分な場合と、デプロイが必要なアプリケーションを作るのは違うんだよ。
Pythonが流行ってるのはデプロイが必要なアプリケーションでなければ、かなり楽できるから。
デプロイするのは結構大変だよ。インターネット接続不可の環境でpipを使うのはめちゃくちゃ難しいし。
仕事でプログラム作ってアプリ納品したことないでしょ。その経験がなければプログラミングを語るなとは思わないけど、
納品という観点でみたらナンセンスすぎるんだよ。よくも上から目線で「お前の現状認識がおかしい」と言えるね。
あと、PythonでGUIアプリケーションを書くことに関してはスルーかな?
FORTRANの下りも、聞きかじった知識だけじゃん。
科学技術計算でよく使われるBLASっていう線形代数のライブラリがあるんだけど、githubで見る限り半分はFORTRANで書かれてるよ。
https://github.com/xianyi/OpenBLAS/
4,033 commitsとか書かれてるところの下の棒押してみ。
Fortran 49.3% Assembly 26.7% C 21.2% C++ 1.4% Makefile 0.8% CMake 0.4% Other 0.2%
って出てくるから。
あと、書かれてるコードも昔のFORTRANそのものでしかないコードだよ。
https://github.com/xianyi/OpenBLAS/blob/ce3651516f12079f3ca2418aa85b9ad571c3a391/lapack-netlib/SRC/dgebd2.f
これを今でも皆コンパイルして使ってるわけ。スパコンだけじゃなくて、PCでもね。
んで、プログラマーじゃなくて、研究者はいちいち他の言語とか覚えたくないから、今でもこういう乗りのFORTRANを使ってるわけ。
http://www.chem.konan-u.ac.jp/PCSI/DL_POLY/still_FORTRAN.pdf
どうしてろくに自分で調べもせずに聞きかじったそれっぽい言葉を信じちゃうのか。
「いずれにしてもお前が何故そんなに知ったかするのかはいつも疑問だ。」
442デフォルトの名無しさん (ワッチョイ 9b5f-/WEI)
2019/12/28(土) 23:13:03.41ID:H+9YQLdE0 自分とは違う意見=信者、と言うレッテル張り
443デフォルトの名無しさん (ワッチョイ 7f7b-JrBF)
2019/12/29(日) 00:26:30.89ID:EA/Onx+o0 >>441
もう意味がないから終わりでいいが。
> インターネット接続不可の環境
今更ねえし。それがC#なら楽チン!(とも思えないが、仮にそうでも)それが売りになるとでも?
> あと、PythonでGUIアプリケーションを書くことに関してはスルーかな?
当たり前だがGUI用のツールキットも死ぬほどあったはずだよ。ググればいくらでも出てくるでしょ。
> 4,033 commitsとか書かれてるところの下の棒押してみ。
それで飛んでいった先が
> C 3950
> Fotrran 3720
なんだが。コミットが多いだけでコードの数はCの方が上だし。
それ以前に今時のML向けのCUDAやOpenCLじゃFOTRAN使えねえだろ、と思ったが、
CUDAにはFortran出てるのな。ちょっとびっくりだわ。
> これを今でも皆コンパイルして使ってるわけ。スパコンだけじゃなくて、PCでもね。
君本人がFORTRAN書いているのか?それならまあそれでいいが。
そのスライドなかなか面白かったけど、2010年代がねえだろ。そういうもんだよ。
京がCとFORTRANのユーザー割合を公開していた気がしたが、出てこないんだな。
> 研究者はいちいち他の言語とか覚えたくないから
これはその通りだけど、だからこそ、年代的にFOTRANはほぼ絶滅してて、
今時はPythonで書かせろゴラアで、NumPyだCythonだが出てきてるわけだろ。
もし君がFORTRANを実際に書いているのなら、それだから君の周りにFORTRAN使いが多いだけであって、
やっぱり君の現状認識は間違ってると思うぜ。
もう意味がないから終わりでいいが。
> インターネット接続不可の環境
今更ねえし。それがC#なら楽チン!(とも思えないが、仮にそうでも)それが売りになるとでも?
> あと、PythonでGUIアプリケーションを書くことに関してはスルーかな?
当たり前だがGUI用のツールキットも死ぬほどあったはずだよ。ググればいくらでも出てくるでしょ。
> 4,033 commitsとか書かれてるところの下の棒押してみ。
それで飛んでいった先が
> C 3950
> Fotrran 3720
なんだが。コミットが多いだけでコードの数はCの方が上だし。
それ以前に今時のML向けのCUDAやOpenCLじゃFOTRAN使えねえだろ、と思ったが、
CUDAにはFortran出てるのな。ちょっとびっくりだわ。
> これを今でも皆コンパイルして使ってるわけ。スパコンだけじゃなくて、PCでもね。
君本人がFORTRAN書いているのか?それならまあそれでいいが。
そのスライドなかなか面白かったけど、2010年代がねえだろ。そういうもんだよ。
京がCとFORTRANのユーザー割合を公開していた気がしたが、出てこないんだな。
> 研究者はいちいち他の言語とか覚えたくないから
これはその通りだけど、だからこそ、年代的にFOTRANはほぼ絶滅してて、
今時はPythonで書かせろゴラアで、NumPyだCythonだが出てきてるわけだろ。
もし君がFORTRANを実際に書いているのなら、それだから君の周りにFORTRAN使いが多いだけであって、
やっぱり君の現状認識は間違ってると思うぜ。
444デフォルトの名無しさん (ワッチョイ dc2c-++NQ)
2019/12/29(日) 00:34:45.31ID:jh70IlFa0 結局このスレで長文垂れ流して何がしたかったのかは永遠の謎だった
445デフォルトの名無しさん (ワッチョイ 7f7b-JrBF)
2019/12/29(日) 00:36:25.95ID:EA/Onx+o0 >>441
すまん、名前(TensorFlow)が出てこなかったので分かれてしまったがついでに。
GoogleのTensorFlowもPython,/C/Java,/Goであって、FORTRANは動かない。
CUDAは既に書いたようにFortranも出ているようだが、
元々はそもそも出す気もなく、ユーザーも「C++のサポートを」とは言っていたけどFORTRANについては言ってなかったと思うけど。
BLASのFORTRANをUpdateしている連中は、どこで何向けを流しているんだ?
現在のHPCはFORTRANなんて見てないと思うのだが。(上記CUDAやTensorFlowしかり)
すまん、名前(TensorFlow)が出てこなかったので分かれてしまったがついでに。
GoogleのTensorFlowもPython,/C/Java,/Goであって、FORTRANは動かない。
CUDAは既に書いたようにFortranも出ているようだが、
元々はそもそも出す気もなく、ユーザーも「C++のサポートを」とは言っていたけどFORTRANについては言ってなかったと思うけど。
BLASのFORTRANをUpdateしている連中は、どこで何向けを流しているんだ?
現在のHPCはFORTRANなんて見てないと思うのだが。(上記CUDAやTensorFlowしかり)
446デフォルトの名無しさん (ワッチョイ 3263-mlB/)
2019/12/29(日) 00:40:06.58ID:9rgAI5qX0 GUI Programming in Python
https://wiki.python.org/moin/GuiProgramming
https://wiki.python.org/moin/GuiProgramming
447デフォルトの名無しさん (ワッチョイ 4d63-hRE6)
2019/12/29(日) 00:58:10.27ID:s3t0CIvz0 python製のwindowsアプリって何かある?
448デフォルトの名無しさん (ワッチョイ 7001-VnBs)
2019/12/29(日) 01:04:54.28ID:34CXn0hn0 凄えなGitHubの見方もまともにわからねえのかコイツ…
ここまで全方位に雑な上から目線キャラ初めて見たw
ここまで全方位に雑な上から目線キャラ初めて見たw
449デフォルトの名無しさん (ワッチョイ 4d63-hRE6)
2019/12/29(日) 01:13:01.51ID:s3t0CIvz0 現時点でwinアプリ開発で採用される言語のトップにpythonなんか入るわけ無いと思うけど
普通にC++/C#/VB辺りじゃない?
VBは国内だけかな?
この次あたりはどれも似たようなもんでそこにpythonが入るとかならまぁわかる。
javaはwinアプリなんかで使われてるのかはわからんけど
普通にC++/C#/VB辺りじゃない?
VBは国内だけかな?
この次あたりはどれも似たようなもんでそこにpythonが入るとかならまぁわかる。
javaはwinアプリなんかで使われてるのかはわからんけど
450デフォルトの名無しさん (ワッチョイ 4d63-hRE6)
2019/12/29(日) 01:17:48.90ID:s3t0CIvz0 ある程度の知識が広く浅くあるタイプの人間で技術屋以外に対して上手く話をして言いくるめるのが得意そうな感じ
あんま知らんけどSIerってこんな感じの人間なのかな?って見える
あんま知らんけどSIerってこんな感じの人間なのかな?って見える
451デフォルトの名無しさん (ワッチョイ 0101-Mkmj)
2019/12/29(日) 01:55:47.41ID:Jtzyjysr0 言い訳と反論が得意なイメージ有るけど。
452デフォルトの名無しさん (ブーイモ MM5a-LPJF)
2019/12/29(日) 11:03:14.73ID:HK/YahvcM >>443
> 今更ねえし。それがC#なら楽チン!(とも思えないが、仮にそうでも)それが売りになるとでも?
いくらでもある。当然売りになる。というかセキュリティ要件で満たさなきゃいけない。
> 当たり前だがGUI用のツールキットも死ぬほどあったはずだよ。ググればいくらでも出てくるでしょ。
で、使おうとしてみたことあるの?Pythonしか書けないってんじゃなければWinFormsの方がましとすぐに気がつく。
あとgithubのグラフの読み方は間違ってる。コミット数じゃなくて、コードの総量。
> 京がCとFORTRANのユーザー割合を公開していた気がしたが、出てこないんだな。
さっきのPDFに書いてあるとおり、FORTRANが1位だよ。
> 今更ねえし。それがC#なら楽チン!(とも思えないが、仮にそうでも)それが売りになるとでも?
いくらでもある。当然売りになる。というかセキュリティ要件で満たさなきゃいけない。
> 当たり前だがGUI用のツールキットも死ぬほどあったはずだよ。ググればいくらでも出てくるでしょ。
で、使おうとしてみたことあるの?Pythonしか書けないってんじゃなければWinFormsの方がましとすぐに気がつく。
あとgithubのグラフの読み方は間違ってる。コミット数じゃなくて、コードの総量。
> 京がCとFORTRANのユーザー割合を公開していた気がしたが、出てこないんだな。
さっきのPDFに書いてあるとおり、FORTRANが1位だよ。
453デフォルトの名無しさん (ブーイモ MM5a-LPJF)
2019/12/29(日) 11:04:58.14ID:HK/YahvcM >>443
> 今時はPythonで書かせろゴラアで、NumPyだCythonだが出てきてるわけだろ。
その辺は科学数値計算よりデータサイエンス系で盛り上がってるだけで、
色々余計なレイヤーがかぶさってるPythonが数値計算でnumpy、Cythonがあったとしても採用されにくいと
思うけどな。それこそメモリまわりの挙動とかで。
あと、tensorflowを例に挙げてHPCがどうこうと言ってたけど、ディープラーニングとかHPCの1ジャンルでしかないし、
ディープラーニングの分野ではFORTRANが使われてない、以上のことを示してないよ。
で、なんでそんなに他人の違う意見に対して「自分は正しい。お前の現状認識は間違ってる」と自信満々に言えるの?根拠は?
聞いてる限り聞きかじりの知識ばかりで実際に作らずに良し悪しを決めつけてるようにしか思えないんだが。
> 今時はPythonで書かせろゴラアで、NumPyだCythonだが出てきてるわけだろ。
その辺は科学数値計算よりデータサイエンス系で盛り上がってるだけで、
色々余計なレイヤーがかぶさってるPythonが数値計算でnumpy、Cythonがあったとしても採用されにくいと
思うけどな。それこそメモリまわりの挙動とかで。
あと、tensorflowを例に挙げてHPCがどうこうと言ってたけど、ディープラーニングとかHPCの1ジャンルでしかないし、
ディープラーニングの分野ではFORTRANが使われてない、以上のことを示してないよ。
で、なんでそんなに他人の違う意見に対して「自分は正しい。お前の現状認識は間違ってる」と自信満々に言えるの?根拠は?
聞いてる限り聞きかじりの知識ばかりで実際に作らずに良し悪しを決めつけてるようにしか思えないんだが。
454デフォルトの名無しさん (ワッチョイ 9317-K0SF)
2019/12/29(日) 11:46:41.74ID:vuWWhjO70 ここはC#スレだぞ
455デフォルトの名無しさん (ワッチョイ 9763-K0SF)
2019/12/29(日) 13:00:01.09ID:99B+H0jR0 ワッチョイスレなんだから各自NGすればよろし
456デフォルトの名無しさん (ワッチョイ ae2c-fJ/L)
2019/12/29(日) 13:26:29.34ID:KIjz0jVz0 日経Linux 2020/1月号に、
米田聡の記事「AI で鳩を自動認識、ラズパイ4 で3倍速」が載っている
TensorFlow Lite を使う、Google のEdge TPU の2製品、
Coral USB Accelerator, Coral Dev Board
CUDA なら、CPU の1/50 ぐらいの時間になる
ここは、C# のスレなので、以降は他のスレで議論してください!
米田聡の記事「AI で鳩を自動認識、ラズパイ4 で3倍速」が載っている
TensorFlow Lite を使う、Google のEdge TPU の2製品、
Coral USB Accelerator, Coral Dev Board
CUDA なら、CPU の1/50 ぐらいの時間になる
ここは、C# のスレなので、以降は他のスレで議論してください!
457デフォルトの名無しさん (ワッチョイ 7f7b-JrBF)
2019/12/29(日) 14:36:52.40ID:EA/Onx+o0 >>452
概ね全面的に水掛け論だからまあもういいが、一応反論だけはしておく。
> いくらでもある。当然売りになる。というかセキュリティ要件で満たさなきゃいけない。
いや逆じゃね?ローカルにUSBメモリ刺してexe/dllを直インストールなんてセキュリティが厳しい要件で許可されるのか?
まあいいが。
> Pythonしか書けないってんじゃなければWinFormsの方がましとすぐに気がつく。
だから言ったとおり俺はPythonを使ってない。
> WinFormsの方がまし
ただ、これはない。Formsは壮絶にゴミだ。それはHTML/CSS/JavaScriptを使えばすぐ分かる。
同様にWPFもゴミだが、Formsよりは数倍ましだ。
そしてWPFがHTMLに寄せたのはMSもそっちの方が断然いいと判断したからだ。
ただ、まだCSSが当てられないのが相当痛い。だから次は丸々HTML/CSSに寄せるはず。
(というかWeb開発では事実上そうでしかないが)
そもそもPythonもそっちに動いているっぽいだろ。>>446の頭の2つ、
> Cross-Browser Frameworks
は多分それだよ。Pythonでローカルに鯖を立てて、それをブラウザで見るんだよ。(かそれに近い形式)
というか俺なら最初からそうする。
つまり計算用PythonはJSONインタフェースだけ付けて終わりで、後は全面的にHTMLの恩恵を受けられる。
HTMLの良さが分からないのは、君が知らないからでしかない。といっても別に難しいものではないから、やってみればいいんだよ。
やれば、悲しいくらいに簡単にGUIを作れて、Formsとか本当にゴミだと実感出来るようになる。
概ね全面的に水掛け論だからまあもういいが、一応反論だけはしておく。
> いくらでもある。当然売りになる。というかセキュリティ要件で満たさなきゃいけない。
いや逆じゃね?ローカルにUSBメモリ刺してexe/dllを直インストールなんてセキュリティが厳しい要件で許可されるのか?
まあいいが。
> Pythonしか書けないってんじゃなければWinFormsの方がましとすぐに気がつく。
だから言ったとおり俺はPythonを使ってない。
> WinFormsの方がまし
ただ、これはない。Formsは壮絶にゴミだ。それはHTML/CSS/JavaScriptを使えばすぐ分かる。
同様にWPFもゴミだが、Formsよりは数倍ましだ。
そしてWPFがHTMLに寄せたのはMSもそっちの方が断然いいと判断したからだ。
ただ、まだCSSが当てられないのが相当痛い。だから次は丸々HTML/CSSに寄せるはず。
(というかWeb開発では事実上そうでしかないが)
そもそもPythonもそっちに動いているっぽいだろ。>>446の頭の2つ、
> Cross-Browser Frameworks
は多分それだよ。Pythonでローカルに鯖を立てて、それをブラウザで見るんだよ。(かそれに近い形式)
というか俺なら最初からそうする。
つまり計算用PythonはJSONインタフェースだけ付けて終わりで、後は全面的にHTMLの恩恵を受けられる。
HTMLの良さが分からないのは、君が知らないからでしかない。といっても別に難しいものではないから、やってみればいいんだよ。
やれば、悲しいくらいに簡単にGUIを作れて、Formsとか本当にゴミだと実感出来るようになる。
458デフォルトの名無しさん (ワッチョイ 7f7b-JrBF)
2019/12/29(日) 14:37:27.40ID:EA/Onx+o0 > あとgithubのグラフの読み方は間違ってる。コミット数じゃなくて、コードの総量。
間違いは認めるとして、いずれにしてもナンセンスだからこれは止めよう。
BLASはAPIであって、当たり前だがOpenBLASは一つの実装でしかなく、
Cにもポートされているのだから当たり前のように同量のソースはあるし、
そもそもcommit回数を競ったところで意味がない。
BLASが使われるのがFORTRAN経由かC経由か、他の実装も含めての割合が問題であって、それはGitHub見てても分かりようがない。
君が示したのは、「今でもFORTRAN向けBLASの一つの実装がアップデートされている」という事実だけでしかない。
(それでも俺にとっては十分驚愕だが)
> さっきのPDFに書いてあるとおり、FORTRANが1位だよ。
本当にそうだったら「うええ、老害め」みたいに記憶に残ってるはずなんだがなあ。
と言っていても本当に水掛け論だから、こちらも調べたが出てこない。
ちなみに文部科学省のアンケートは出てきたが、これにはユーザー割合は載ってない。(ただし2006年の資料であり、相当古い)
https://www.mext.go.jp/b_menu/shingi/gijyutu/gijyutu2/022/shiryo/__icsFiles/afieldfile/2012/06/11/1321896_7.pdf
インストールされているのはFORTRAN100%、C92%なので、その当時はCが使えないスパコンってのも存在したのも事実のようだ。(P19)
> その他、スーパーコンピュータセンターからのコメントから、FORTRAN77からFortran90への移行、
> あるいはC++
への移行等、より記述性や生産性の高い言語への移行が進んできている印象を受けた。
君は移行すらしてない、という見解なんだろ。なんだかなあ。
> それこそメモリまわりの挙動とかで。
何が言いたいのか分からん。
Cのdllを呼んでるだけだぞ。C#でならunsafeでCのdllを呼んでるのと同じ。
全く問題ないし、関係ないよ。だからこれについてはC#でも何でもいいわけだが。
間違いは認めるとして、いずれにしてもナンセンスだからこれは止めよう。
BLASはAPIであって、当たり前だがOpenBLASは一つの実装でしかなく、
Cにもポートされているのだから当たり前のように同量のソースはあるし、
そもそもcommit回数を競ったところで意味がない。
BLASが使われるのがFORTRAN経由かC経由か、他の実装も含めての割合が問題であって、それはGitHub見てても分かりようがない。
君が示したのは、「今でもFORTRAN向けBLASの一つの実装がアップデートされている」という事実だけでしかない。
(それでも俺にとっては十分驚愕だが)
> さっきのPDFに書いてあるとおり、FORTRANが1位だよ。
本当にそうだったら「うええ、老害め」みたいに記憶に残ってるはずなんだがなあ。
と言っていても本当に水掛け論だから、こちらも調べたが出てこない。
ちなみに文部科学省のアンケートは出てきたが、これにはユーザー割合は載ってない。(ただし2006年の資料であり、相当古い)
https://www.mext.go.jp/b_menu/shingi/gijyutu/gijyutu2/022/shiryo/__icsFiles/afieldfile/2012/06/11/1321896_7.pdf
インストールされているのはFORTRAN100%、C92%なので、その当時はCが使えないスパコンってのも存在したのも事実のようだ。(P19)
> その他、スーパーコンピュータセンターからのコメントから、FORTRAN77からFortran90への移行、
> あるいはC++
への移行等、より記述性や生産性の高い言語への移行が進んできている印象を受けた。
君は移行すらしてない、という見解なんだろ。なんだかなあ。
> それこそメモリまわりの挙動とかで。
何が言いたいのか分からん。
Cのdllを呼んでるだけだぞ。C#でならunsafeでCのdllを呼んでるのと同じ。
全く問題ないし、関係ないよ。だからこれについてはC#でも何でもいいわけだが。
459デフォルトの名無しさん (ワッチョイ 7f7b-JrBF)
2019/12/29(日) 14:38:02.85ID:EA/Onx+o0 > ディープラーニングとかHPCの1ジャンルでしかないし、
> ディープラーニングの分野ではFORTRANが使われてない、以上のことを示してないよ。
今寄ってたかってホットなのは明らかにここだし、これを外して何を言うんだ?
問題は、こういった新しい環境ではFORTRAN向けの環境整備なんてされてない、ってことなんだよ。
だから正確には、「新しいHPC環境ではFORTRANは使えない」だよ。
俺は君が
> スーパーコンピュータで科学技術計算する分野では今でもFORTRANが主役だけど(>>438)
という明らかな嘘を言ったことを咎めている。
「環境自体がない」んだからそんなわけがないだろ。
何も知らない若い奴らが信じてしまう可能性もあるのだから、明らかな嘘をついてミスリードするようなことはするな。
色々見解が違うのはいいとしても、これはねえよマジで。
> ディープラーニングの分野ではFORTRANが使われてない、以上のことを示してないよ。
今寄ってたかってホットなのは明らかにここだし、これを外して何を言うんだ?
問題は、こういった新しい環境ではFORTRAN向けの環境整備なんてされてない、ってことなんだよ。
だから正確には、「新しいHPC環境ではFORTRANは使えない」だよ。
俺は君が
> スーパーコンピュータで科学技術計算する分野では今でもFORTRANが主役だけど(>>438)
という明らかな嘘を言ったことを咎めている。
「環境自体がない」んだからそんなわけがないだろ。
何も知らない若い奴らが信じてしまう可能性もあるのだから、明らかな嘘をついてミスリードするようなことはするな。
色々見解が違うのはいいとしても、これはねえよマジで。
460デフォルトの名無しさん (ワッチョイ e25e-CmeR)
2019/12/29(日) 14:51:21.50ID:mqdEA2UD0 WPFはHTMLに寄せたんじゃねえよ。
XMLとしてvalidだろ。
XMLとしてvalidだろ。
461デフォルトの名無しさん (ワッチョイ 7f7b-JrBF)
2019/12/29(日) 15:06:33.85ID:EA/Onx+o0 >>460
C#er的公式見解がそうなのは知ってる。
ただ、機構は丸パクしてるだろ。
HTML/CSS/sjavaScriptのよい点は
A. テキストで書くだけ。ボタンなら"<button>Click Me</button>"だけ。
B. CSSが当てられる。
C. イベントがバブルする。
D. JavaScriptから値を弄ってもイベントは発生しない。
E. イベントは非同期、つまり必ずキューイングされる。
で、WPFは(といっても俺は使ってないが)
A. はまあ許容範囲(もうちょっと簡単に書かせろよとは思うが)
B. 出来ないのが悲しい
C. 問題なし
D. E. 知らない。Formsはイベントが発生してしかも同期イベントなので地味にこれがものすごく使いにくくて糞。
直っていることを期待するが、そもそも俺はWPFを結果的にスキップしそうになってる。
だろ。AはXMLからとしても、Cはパクったろ。
そしてCは地味に素晴らしい。
といってもFormsから移行した奴らは活用してないかもしれんが。
C#er的公式見解がそうなのは知ってる。
ただ、機構は丸パクしてるだろ。
HTML/CSS/sjavaScriptのよい点は
A. テキストで書くだけ。ボタンなら"<button>Click Me</button>"だけ。
B. CSSが当てられる。
C. イベントがバブルする。
D. JavaScriptから値を弄ってもイベントは発生しない。
E. イベントは非同期、つまり必ずキューイングされる。
で、WPFは(といっても俺は使ってないが)
A. はまあ許容範囲(もうちょっと簡単に書かせろよとは思うが)
B. 出来ないのが悲しい
C. 問題なし
D. E. 知らない。Formsはイベントが発生してしかも同期イベントなので地味にこれがものすごく使いにくくて糞。
直っていることを期待するが、そもそも俺はWPFを結果的にスキップしそうになってる。
だろ。AはXMLからとしても、Cはパクったろ。
そしてCは地味に素晴らしい。
といってもFormsから移行した奴らは活用してないかもしれんが。
462456 (ワッチョイ ae2c-fJ/L)
2019/12/29(日) 15:10:58.86ID:KIjz0jVz0 VSCode で良い。
markdown も表示できるし
Python は、Jupyter Notebook でも良い。
Julia, Ruby でも使えるし
VSCodeは、Electron だから、Node.js + Chromium だろ。
Ruby の標準サーバーを立ててもよいし
markdown も表示できるし
Python は、Jupyter Notebook でも良い。
Julia, Ruby でも使えるし
VSCodeは、Electron だから、Node.js + Chromium だろ。
Ruby の標準サーバーを立ててもよいし
463デフォルトの名無しさん (ドコグロ MM36-BCWm)
2019/12/29(日) 15:26:07.21ID:J2Lmqp1KM >>462
ルビ糞は教祖様推奨のEmacsを使えカス
ルビ糞は教祖様推奨のEmacsを使えカス
464デフォルトの名無しさん (スフッ Sd94-hoej)
2019/12/29(日) 15:26:34.81ID:fYAoNqJEd コントロールに適用したいStyleがあるので、Generic.xaml を作成して、
App.xaml で ResourceDictionary.Merge Dictionaryしました。その中で自作のコンバータークラスを使いたくて定義したのですが、どうしても認識してくれません。ビルドは通るのですが、実行時に見つからないエラーがでます(xaml parse exeption)
同じ定義を App.xaml の中で、Generic.xamlをマージする前に書くと、何故か実行時にエラーも出ませんし、ちゃんと動きます。
Generic.xaml の中でコンバーターを定義することは出来ないのでしょうか
App.xaml で ResourceDictionary.Merge Dictionaryしました。その中で自作のコンバータークラスを使いたくて定義したのですが、どうしても認識してくれません。ビルドは通るのですが、実行時に見つからないエラーがでます(xaml parse exeption)
同じ定義を App.xaml の中で、Generic.xamlをマージする前に書くと、何故か実行時にエラーも出ませんし、ちゃんと動きます。
Generic.xaml の中でコンバーターを定義することは出来ないのでしょうか
465デフォルトの名無しさん (ワッチョイ 412f-Bp86)
2019/12/29(日) 15:30:19.53ID:Lr7vQfGy0 テキスト送信して相手にレンダリングさせるものと自身のウインドウ環境に直接レンダリングするものを本気で横ならびで比較する時代になったのね
466デフォルトの名無しさん (ワッチョイ 7f7b-JrBF)
2019/12/29(日) 15:59:41.03ID:EA/Onx+o0 >>465
なったというか、いわゆる(短期的な)「生産性」ってのは、どうでもいいところで如何に手を抜くか、でもあるからね。
グラが勝負なら自前でレンダリングしかないが、
>>253とか俺とか、>>452もほぼ確実にそうだと思うが、
計算ソフトの初期値設定をするだけ、みたいなGUIに時間かけて凝っても意味無いんだよ。
そこは「計算」に凝るべきであって、とりあえず多少遅かろうが表示出来れば何でもいいんだよ。
というか、こういうのを分かっててお前らはC#を選んでいるんじゃないのか?
ならまあ、お前らが奇妙なほどに信者化するのも分からなくもないが。
ちなみにUnity、内部エンジンはC++で上位スクリプトだけC#か?なら確かに芽があるかもしれん。
しかしこの構成なら、じきに上位スクリプトもPythonで書かせろ、になるとも思うが。
なったというか、いわゆる(短期的な)「生産性」ってのは、どうでもいいところで如何に手を抜くか、でもあるからね。
グラが勝負なら自前でレンダリングしかないが、
>>253とか俺とか、>>452もほぼ確実にそうだと思うが、
計算ソフトの初期値設定をするだけ、みたいなGUIに時間かけて凝っても意味無いんだよ。
そこは「計算」に凝るべきであって、とりあえず多少遅かろうが表示出来れば何でもいいんだよ。
というか、こういうのを分かっててお前らはC#を選んでいるんじゃないのか?
ならまあ、お前らが奇妙なほどに信者化するのも分からなくもないが。
ちなみにUnity、内部エンジンはC++で上位スクリプトだけC#か?なら確かに芽があるかもしれん。
しかしこの構成なら、じきに上位スクリプトもPythonで書かせろ、になるとも思うが。
467デフォルトの名無しさん (ワッチョイ e25e-CmeR)
2019/12/29(日) 16:06:57.90ID:mqdEA2UD0 >>461
機構のどこが丸パクリなんだよ。
Cだけじゃねえか。
Formsでもイベントのさばき方次第だろ。全然Forms触ってねえだけじゃねえか。
で、イベントも普通はそう捌くんじゃなくて、バインディングするもんだよ。
何意味不明な事言ってんだよ。
機構のどこが丸パクリなんだよ。
Cだけじゃねえか。
Formsでもイベントのさばき方次第だろ。全然Forms触ってねえだけじゃねえか。
で、イベントも普通はそう捌くんじゃなくて、バインディングするもんだよ。
何意味不明な事言ってんだよ。
468デフォルトの名無しさん (ワッチョイ 6e0c-K0SF)
2019/12/29(日) 16:08:17.70ID:ot6kdVlr0 語れば語るほど行毎に突っ込みどころ量産してるのが凄い…
釣りでガイジのフリやってるなら大したもんだわ
釣りでガイジのフリやってるなら大したもんだわ
469デフォルトの名無しさん (ワッチョイ 6c88-hRE6)
2019/12/29(日) 16:11:04.28ID:RdqvkJW90 > ちなみにUnity、内部エンジンはC++で上位スクリプトだけC#か?なら確かに芽があるかもしれん。
> しかしこの構成なら、じきに上位スクリプトもPythonで書かせろ、になるとも思うが。
なんでこんな予測になるのか意味不明
unityから使用できるjavascriptが廃れた経緯があるのにまた変更なんかこないよ
ゲーム開発においてスクリプト言語が来る時代は来るかもしれんがそれはunityにはこんだろう
新しいエンジンが来たときにその時代に沿った新しい言語が採用される可能性はある
> しかしこの構成なら、じきに上位スクリプトもPythonで書かせろ、になるとも思うが。
なんでこんな予測になるのか意味不明
unityから使用できるjavascriptが廃れた経緯があるのにまた変更なんかこないよ
ゲーム開発においてスクリプト言語が来る時代は来るかもしれんがそれはunityにはこんだろう
新しいエンジンが来たときにその時代に沿った新しい言語が採用される可能性はある
470デフォルトの名無しさん (ワッチョイ ee89-VnBs)
2019/12/29(日) 16:14:19.03ID:8r12tXQy0 実際にUnityで選択肢として使えたjsとpythonがC#に駆逐された経緯とか知ったらこのキチガイ脱糞しそう
471デフォルトの名無しさん (ワッチョイ 7f7b-JrBF)
2019/12/29(日) 16:27:43.79ID:EA/Onx+o0 >>467
逆だろ。Bはこれからパクる、Cはパクリ、D/Eは直っていればパクリ、直ってなければ糞だ。
あとFormsはバインディングできない。(から自前でやるにはReflectionすることになり、これが糞)
ただバインディングについては、
バブルされたイベント拾ってそこでバリデーションして問題なければ反映、アウトなら戻す、
みたいな方が格好悪いが結果的に楽な気はする。
(既に言ったとおり俺自身がWPF使ってないから全てに於いてバインディングだけで上手く行くのかは分からない。
勿論全く問題ないならバインディングした方がいいけども)
>>469
>>470
おお、その釣り針は喜んで食いつくから、駆逐された経緯とか書いたページがあれば紹介してくれ。
つってもちょっと(席を)外すが。
逆だろ。Bはこれからパクる、Cはパクリ、D/Eは直っていればパクリ、直ってなければ糞だ。
あとFormsはバインディングできない。(から自前でやるにはReflectionすることになり、これが糞)
ただバインディングについては、
バブルされたイベント拾ってそこでバリデーションして問題なければ反映、アウトなら戻す、
みたいな方が格好悪いが結果的に楽な気はする。
(既に言ったとおり俺自身がWPF使ってないから全てに於いてバインディングだけで上手く行くのかは分からない。
勿論全く問題ないならバインディングした方がいいけども)
>>469
>>470
おお、その釣り針は喜んで食いつくから、駆逐された経緯とか書いたページがあれば紹介してくれ。
つってもちょっと(席を)外すが。
472デフォルトの名無しさん (ワッチョイ 6c88-hRE6)
2019/12/29(日) 16:36:33.93ID:RdqvkJW90 食いつかんで良いから自分の浅はかな知識で事を語っていることを認識し悔い改めていただきたい
知りたきゃご自身でお調べ下さい
知りたきゃご自身でお調べ下さい
473デフォルトの名無しさん (ワッチョイ e25e-CmeR)
2019/12/29(日) 17:14:51.69ID:mqdEA2UD0474デフォルトの名無しさん (ワッチョイ aa01-Nxir)
2019/12/29(日) 18:30:55.82ID:2GmPR76J0475デフォルトの名無しさん (ワッチョイ 7f7b-JrBF)
2019/12/29(日) 19:00:10.06ID:EA/Onx+o0 >>473
> DataSource
ああそれは確かに俺は触ってないわ。何かあったけど放置してた。
一応軽く見てみたが、ちょっと使ってみないと分からんね。
.NETは若干かっこよさを追求しすぎていて、既に言った
「フォームの値をプログラムから変更してもイベントが『同期』で発生する」
もそうだけど、格好良く自動連動を目指したのだろうけど、余計に使いにくくなってる。
同様に、余計なイベント接続が行われている可能性もあるから、実際に使えるかどうかは試してみないと分からん。
JavaScriptの場合はもっとドベタに
「プログラムから変更したらイベントは発生しないから、必要なら自分で呼べ」
でしかないから、本当にドベタにユーザーが挙動を定義出来る。
言ってしまえば、JavaScriptはライト層向けにできていて、
.NETはプロ向け(.NETのことを隅々までよく知っている前提)だと言えなくもないが、
ちょっとチューニングを失敗しているように思う。
結果、JavaScriptの方が取っつきやすいから、最近はどうでもいいUIはだいたいWebアプリになってるだろ。
>>474
これか?
https://www.atmarkit.co.jp/ait/articles/1009/07/news096_2.html
これは確かにCSSの一部だが、これでは全然足りない。
スタイルを適用したいのはコントロールそのものに、ではない。
CSSが美味しいのは、左右はもちろん上下ですら表示位置を簡単に入れ替えられること。
だから見た目全く違う物も同じHTML構造を取れ、結果、
同じ関数からお約束のHTMLを吐き出して後はCSSでも当てて、みたいな手抜きがあっさり出来る。
(見た目毎に出力関数を用意する必要がない)
CSSの表現能力についてはWeb系の馬鹿共がよく「CSSでここまで出来る!」みたいなページを作っているから見てみればいい。
> DataSource
ああそれは確かに俺は触ってないわ。何かあったけど放置してた。
一応軽く見てみたが、ちょっと使ってみないと分からんね。
.NETは若干かっこよさを追求しすぎていて、既に言った
「フォームの値をプログラムから変更してもイベントが『同期』で発生する」
もそうだけど、格好良く自動連動を目指したのだろうけど、余計に使いにくくなってる。
同様に、余計なイベント接続が行われている可能性もあるから、実際に使えるかどうかは試してみないと分からん。
JavaScriptの場合はもっとドベタに
「プログラムから変更したらイベントは発生しないから、必要なら自分で呼べ」
でしかないから、本当にドベタにユーザーが挙動を定義出来る。
言ってしまえば、JavaScriptはライト層向けにできていて、
.NETはプロ向け(.NETのことを隅々までよく知っている前提)だと言えなくもないが、
ちょっとチューニングを失敗しているように思う。
結果、JavaScriptの方が取っつきやすいから、最近はどうでもいいUIはだいたいWebアプリになってるだろ。
>>474
これか?
https://www.atmarkit.co.jp/ait/articles/1009/07/news096_2.html
これは確かにCSSの一部だが、これでは全然足りない。
スタイルを適用したいのはコントロールそのものに、ではない。
CSSが美味しいのは、左右はもちろん上下ですら表示位置を簡単に入れ替えられること。
だから見た目全く違う物も同じHTML構造を取れ、結果、
同じ関数からお約束のHTMLを吐き出して後はCSSでも当てて、みたいな手抜きがあっさり出来る。
(見た目毎に出力関数を用意する必要がない)
CSSの表現能力についてはWeb系の馬鹿共がよく「CSSでここまで出来る!」みたいなページを作っているから見てみればいい。
476デフォルトの名無しさん (ワッチョイ 6c88-hRE6)
2019/12/29(日) 19:12:12.77ID:RdqvkJW90 詳細を突っ込まれると
そうだね、けどこの面では…的な論理展開ばっかだけど自分で気にならないの?
これを繰り返してるうちに自身の主張が何かよくわからなくなって無意味に多方向にdisを撒き散らしてるだけになってる
そうだね、けどこの面では…的な論理展開ばっかだけど自分で気にならないの?
これを繰り返してるうちに自身の主張が何かよくわからなくなって無意味に多方向にdisを撒き散らしてるだけになってる
477デフォルトの名無しさん (ワッチョイ aa01-Nxir)
2019/12/29(日) 19:21:15.54ID:2GmPR76J0 >>475
> CSSが美味しいのは、左右はもちろん上下ですら表示位置を簡単に入れ替えられること。
それはコンセプトの違い
WPFはXAMLでコントロールの位置を変えればいいだけ
データとはバインディングで繋がってるから位置を変えてもDataSourceはいじる必要はない
> CSSが美味しいのは、左右はもちろん上下ですら表示位置を簡単に入れ替えられること。
それはコンセプトの違い
WPFはXAMLでコントロールの位置を変えればいいだけ
データとはバインディングで繋がってるから位置を変えてもDataSourceはいじる必要はない
■ このスレッドは過去ログ倉庫に格納されています