[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 02/22 09:53 / Filesize : 303 KB / Number-of Response : 1018
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C vs C++ vs Rust Part.3



1 名前:デフォルトの名無しさん mailto:sage [2022/01/27(木) 22:19:47.56 ID:avZQ9Wm7.net]
闘え
※前スレ
C++ vs Rust
https://mevius.5ch.net/test/read.cgi/tech/1619219089/
C vs C++ vs Rust Part.2
https://mevius.5ch.net/test/read.cgi/tech/1639539350/

809 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 10:54:38.88 ID:8Tlml6j+.net]
マジでなんでコード書かないの?

810 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 10:55:27.25 ID:hQNNJiB+.net]
>>796
なるほど!
彼は潔いな

811 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 11:44:30.72 ID:PoGWmBV8.net]
>>798-799
>>783

812 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 12:15:36.07 ID:CPBl4WFe.net]
>>796
一切コードを「書けない」場合も真だねw

挙動が>>780で指摘した通りになってて草生えまくり

813 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 12:28:35.30 ID:PoGWmBV8.net]
>>801
>>783

814 名前:デフォルトの名無しさん [2022/03/27(日) 16:26:12.94 ID:snCfFGlK.net]
c++にもhygienicマクロ導入してくれたらなぁ

815 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 17:22:03.05 ID: ]
[ここ壊れてます]

816 名前:WcFtzXHa.net mailto: Rustのmacroはident属性指定により変数名に関してはhygienicだな
ライフタイムとジェネリック型に関してはそうでないけれど
[]
[ここ壊れてます]

817 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 21:22:52.61 ID:PoGWmBV8.net]
マクロそのものが原則いらんw



818 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 07:49:38.26 ID:pN+hSa41.net]
>>783
bit演算を使わないもっと速いコードというのを教えてください

819 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 09:01:32.11 ID:ZJaztVr1.net]
>>783
Google様の模範解答があるのでどうぞ
https://github.com/google/guava/blob/v31.1/guava/src/com/google/common/collect/Sets.java#L1587

820 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 21:03:15.30 ID:dJWBHkZn.net]
IDE使ってwindows.hとかインクルードしてた時
マクロの処理のせいでどんだけ遅くなってメモリ食ってるんだろうと
よく不安な気持ちになってた

821 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 21:19:08.60 ID:aetLX46N.net]
>>808
メモリや遅さを気にするならばIDE使わずとも何ら問題なく開発できる
IDE使ってるくせになぜそんなことを気にするのか?

822 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 23:04:54.34 ID:51Y1Thh9.net]
まだ続けてんのかよw
Google様の模範解答とか言って的外れなの出されてもw
#includeは別にマクロのせいで遅くなるとかそういう話でもないし、マクロなんか処理としてはまるで重くないw
存在が悪というだけw

823 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 23:08:33.54 ID:SvEFPfvN.net]
>>810
ビット演算を使わない速いコードをそろそろ披露して。

824 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 07:54:52.06 ID:CtwsyWiP.net]
C++11以降の規画いじりて、よのなかのニーズからすると斜め上の
ユーザーにそっぽ向かれるような規画ばっかなんで注力したのかな?
テンプレートで定義した関数、なんとかうまく自動選択されるように頑張ってみたモノの
最後は泥縄メタ関数でゴテゴテ飾り立てたってのがこの10年だったような気がしてならない
そんなことよりC#でファイルオープンするときに使えるusingとかC++で実装されてるの?
あれ慣れてしまうともうtry,catchなんかうざくて使えない

825 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 08:06:32.47 ID:fHExY7tI.net]
>>812
> そんなことよりC#でファイルオープンするときに使えるusingとかC++で実装されてるの?
お前…

826 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 09:06:35.79 ID:tKmNrPY6.net]
スコープアウトでなんかしたいならデストラクタでどうにかするC++の方針を知らんのか?

827 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 10:21:53.60 ID:HFhqj5qW.net]
ちんちんシュッ!シュッ!シュッ!



828 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 13:42:47.10 ID:CtwsyWiP.net]
>>814
はぁ?
スコープアウト?何ねぼけてんだ
例外処理のデフォルト処理のことを言ってるんだが

829 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 13:43:14.23 ID:CtwsyWiP.net]
>>813
なんやお前

830 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 14:16:16.84 ID:CtwsyWiP.net]
例えば C$の
$"X = {X}"
に慣れてしまうと
cerr,coutあたりの
"x = " << x
とか邪魔臭すぎるだろ
null合体演算子にしてもそう。これがあるかないかで生産性大違い
恐らくすぐにでも実装出来そうな機能が未だに実装されてない。
async/awaitでもC++20でようやく正式サポートだっけ
どこ見て標準規格きめてんの?
CユーザがC++知ってしまうとPure Cで書くのがいやになるように
C++ユーザがC#知ってしまうともうC++で書くのがめんどくさくてかなわんのよな

831 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 15:10:25.26 ID:s791HQmS.net]
>>816
ねぼけてるのは君のほうだと思うぞ
あ、ねぼけてるわけじゃなくてただ知らないだけか

832 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 15:59:34.10 ID:ffas ]
[ここ壊れてます]

833 名前:CIjO.net mailto: そもそもusingと
> 例外処理のデフォルト処理のことを言ってるんだが
になんの関係があるんだ?
[]
[ここ壊れてます]

834 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 16:42:51.37 ID:sOLohvn0.net]
usingでインスタンス生成すると、スコープアウトされたときにDisposeメソッドを呼び出すことが保証される
C#にはRAIIがないから try/finally とかで解放処理を書く必要があったりしてそのtry構文はクソ面倒だけど、usingを使うとお手軽に書ける

まあRAIIがあればそもそもこんなの不要かな

835 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 17:03:56.94 ID:1RqC5Y4R.net]
RAIIはGC使わない言語用だからな

836 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 17:07:15.66 ID:7ru2bWxl.net]
RAIIほどポンコツな名前が長く使われてるケースも珍しいよね
自浄作用とかないのかな

837 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 17:16:42.76 ID:QRpFWUID.net]
C#にもlock statementみたいにRAII的なものもある



838 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 17:59:34.97 ID:bjKur886.net]
むしろC++がもたらしたものの中で
一番冴えてるのがRAIIだと思うけど

839 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 18:09:07.22 ID:wvo3NcdM.net]
そういえばCにdeferが入るかもって話はどうなったんだ?

840 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 19:17:05.07 ID:tpB/JA+o.net]
>>816
たぶん
using(var sw=new StreamWriter("a.txt")){
sw.WriteLine("test");
}
のこと言ってるんだろうけど

例外処理のデフォルトってfinallyのことだよな?
finallyで処理するのは例外の時だけじゃないぞ

return/continue/break/throwでusingブロックを抜けるときにIDisposable.Dispose()を実行するための構文だぞ

841 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 19:52:33.02 ID:AEoeDiSF.net]
>>821
C#: usingでインスタンス生成すると、スコープアウトされたときにDisposeメソッドを呼び出すことが保証される
C++: スコープ内で定義すると、スコープアウトされたときにデストラクタを呼び出すことが保証される

まさか知らないの?

842 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 20:32:11.38 ID:/9JyHlX1.net]
>>822
GCは関係ないな

843 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 22:21:27.32 ID:HLabfOkH.net]
スコープ抜けた時の動作するって代物ならやっぱdeferのが明示的で使いやすいってのがcにも入った理由だろうな。

844 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 22:40:18.50 ID:zunmlMTL.net]
deferって実際に入ったの? 提案されただけでなく?
書き方が楽なのはC#で間違いない
リソースリーク対策でC#のusingみたいな構文を渋々突っ込んだgc言語は多数
RAIIって別にそんな重要なキーワードじゃなく、名前はないけど昔からあった考え方で、Windows3.1時代でも皆普通に使ってた

845 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 22:56:21.68 ID:UoyzmKMm.net]
>>830
使いやすいかなぁ
自由度は高いけどその分間違えやすい気がする

846 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 23:05:49.29 ID:/9JyHlX1.net]
>リソースリーク対策でC#のusingみたいな構文を渋々突っ込んだgc言語は多数

C#のusingとpythonのwithと、あと有名どころだと何があったっけか

847 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 06:51:40.79 ID:ES6j8MQa.net]
>>827
finallyみたいなもんを用意せずに済むことを言ってるのに

じゃ、君のあげたコイツ
using(var sw=new StreamWriter("a.txt")){
sw.WriteLine("test");
}

同じようにC++でこれぐらい簡単に書けるというなら書いて見せてくれ

俺は>>616で同様の処理をC++で書けないとは一言もいってない。
生産性たかく、簡単に書ける手法が用意されてないことを言ってる。
usingだけ食いついてるが

・$"X = {X}"
・null合体演算子

は?C++でどー書けるのか是非知りたいから教えてくれよ



848 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 07:54:45.46 ID:ES6j8MQa.net]
? 俺は>>616で同様の処理
〇 俺は>>816で同様の処理

849 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 07:56:10.67 ID:ES6j8MQa.net]
バツが機種依存やったな
X 俺は>>616で同様の処理
〇 俺は>>816で同様の処理

850 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 08:14:44.56 ID:MqQwCbKz.net]
>>834
そのusingブロックを抜けるときに自動でDispose()が呼ばれるという話なら、
C++だとデストラクタでやるってのが>>814が言っていることかと。
usingより簡単だし例外でも問題なし。

851 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 08:18:15.81 ID:qdlu4xZp.net]
>>834
横だけど、std::ostreamてRAII使えなかったっけ?
コードは適当。

if (std::ofstream sw(filename)) {
sw << "test" << '\n';
} else {
std::cerr << "unable to open '" << filename << "'\n";
}

852 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 08:47:18.97 ID:zgtKcvNm.net]
>>834
C++向けに設計されたライブラリならデストラクタに終了処理を全部書いてあるのでusing構文自体が不要

スコープアウトでデストラクタが呼ばれる

std::ofstream fs("a.txt");
fs<<"test"<<std::endl;

853 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 08:57:42.45 ID:zgtKcvNm.net]
>>834
C#2.0以降に実装されてた糖衣構文の多くはC++には実装されていない

お前のC++の用語がところどころ違うから無知なようにしか見えない

854 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 10:15:21.19 ID:sgjjbJfo.net]
>>834
> ・$"X = {X}"
> ・null合体演算子
まあこれは全然違うレベルの話だけどこう言うところはC#はなかなか良く出来てると思う

855 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 13:15:41.55 ID:ES6j8MQa.net]
>>839
>fs<<"test"<<std::endl;

ファイルオープンできてるかどうかわからないのに書き込むのかよwww
C++てファイルオープンできてもないところに書き込んだときに
処理を停止せず、自動でうまく例外処理するおしゃれな機能なんてあったっけ?

using(var sw=new StreamWriter("a.txt")){
sw.WriteLine("test");
}

とじゃ全然意味が違うだろ
なんでエラーチェックしないの?
わざわざチェックしなきゃいけないかどうかの話をしてんだよ
わざと論点ずらすな

>C#2.0以降に実装されてた糖衣構文の多くはC++には実装されていない

その通り
それを問題にしてんの。
そのおかげでC++では生産性の向上が見られない
認めてるじゃねーかwww

856 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 13:54:11.00 ID:nEZBRLmQ.net]
C++ vs C#スレ立てるか?

857 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 14:02:35.35 ID:uj+JKNAz.net]
>>842
> ファイルオープンできてるかどうかわからないのに書き込むのかよwww
そういうのが欲しけりゃエラー時に例外を出すようにしとけばいいだけ
C# 使ってりゃそれぐらいわかるだろ

... 使えてりゃねw



858 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 15:37:33.26 ID:Blieee3P.net]
>>842
>>838は無視かよ。
ずいぶんと都合のいい目をしているんだな。

859 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 18:17:46.54 ID:aaZp/+dN.net]
>>838見ればC++がなぜ衰退していくかよくわかるな

860 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 18:28:11.81 ID:4Wrqo5DU.net]
>>846
なんで?
そこまでいうからにはきっちり説明してもらおうか。
説明できなきゃ馬鹿にしようかね。

861 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 20:08:24.48 ID:WCI7hBXJ.net]
iostreamなんて今使ってないだろ

862 名前:デフォルトの名無しさん [2022/03/30(水) 20:21:40.16 ID:qIK9n1MF.net]
> C#のusingみたいな構文

C#の発明と言うより、発祥は、お前らの嫌いな、Visual Basic(VBA)の、With〜
End Withじゃないかな?

863 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 20:22:04.28 ID:UJJsLtPb.net]
C++は例外がcharベースのwhatしかない時点で日本語Win上では実情と合わなくなるんよね。

864 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 20:22:32.28 ID:/krHLZdG.net]
>>834
Rustだと以下のようになる

> ・using

RustもC++と同じくRAIIなのでusingは不要
let mut file = File::create("a.txt")?;
file.write("test")?;
エラー時は?演算子で即returnとなり例外処理と類似状態になる
スコープを抜ける時に自動的にデストラクタdrop()が呼ばれる
何もしなくてもファイルなら自動closeされてロックなら自動解除される

> ・$"X = {X}"

Rustでは標準マクロ利用でほぼ同様の形式
format!("x={x}")

> ・null合体演算子

Rustは安全重視のため各型にnullやnilといった値が無い状態というものがない
そこで関数型言語と同様に代数的データであるenumを用いてジェネリックにT型に対してenum Option<T>型を使う
Option<T>型はT型の値tが存在する場合Some(t)と存在しない場合Noneの2つのenum値をとる
なのでnullに対応するものはNoneとなるが型が異なるので明白に区別できてミスがあればコンパイル時に検出可能

865 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 20:25:10.41 ID:/krHLZdG.net]
>>834
> ・null合体演算子

Rustでは>>851という状況なのでnull合体演算子についても少し概念が違ってくるが
xがNoneの時にDEFAULT_VALUEとしたい場合
x.or(Some(DEFAULT_VALUE)) でOption<T>型を得る
x.or(Some(DEFAULT_VALUE)).unwrap() でT型を得る
x.unwrap_or(DEFAULT_VALUE) が上記の簡易版でT型を得る

例えばC#での x ?? y ?? z を全てOption<T>型で表すと
Rustでは x.or(y).or(z) となりほぼ同じシンプルな表現

ちなみに?演算子によるNone時の即retun Noneも可能で
例えば各メソッドがOption<T>型を返すとするとこれでT型を得られる
let output = input.method1()?.method2()?.method3()?;

866 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 20:27:16.59 ID:WCI7hBXJ.net]
>>850
その例外ベースだけだとおもってるの?
クラスや型ならなんでも投げられるんだが

867 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 20:31:07.93 ID:UJJsLtPb.net]
それは例外そのものの型のことでしょ。
基本的にはexceptionの派生や孫で作られてるものが大半だからwhatでメッセージ受けるわけだが、
何のエンコードかは定かではない。



868 名前:デフォルトの名無しさん [2022/03/30(水) 20:33:36.81 ID:qIK9n1MF.net]
>>842
根本的な理解がない、残念君のご様子。

> std::ofstream fs("a.txt");

コンストラクタでOpenする場合、失敗すると例外がスローされるから、関数内
または上位でtry〜catchかな。 C#やJavaで毎回NULL参照チェック書いてるか?

いずれにしろ、オープンされていないオブジェクトが

> fs<<"test"<<std::endl;

に渡されることはない。 こうした処理は、オブジェクトのシリアライズ処理を実装
した関数内へ記述して、参照渡しでオープン済のオブジェクトを渡すのが一般的。

869 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 20:43:31.08 ID:/krHLZdG.net]
Rustにはnullも例外もなく
どちらも代数的データ型であるenumで表現するため
シンプルかつ安全性をコンパイル時に保証できる

870 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 21:06:36.60 ID:UJJsLtPb.net]
RustでC#のdynamicみたいなことやるにはどうするの?

871 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 21:23:30.04 ID:yBbOBLyf.net]
>>849
全然ちゃうわww

872 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 21:25:28.30 ID:9xKIjqbP.net]
>>857
C#はdynamic型という間違った方法を取ったため
C#は実行時エラーおよび実行時例外が発生し安全でない

Rustは型とは直行するトレイトがあるため
複数の様々な型に対して共通する振る舞いをトレイトとして実装できる
これらはコンパイル時にチェックされ実行時の安全性が保証される

更に加えてトレイトの利用方法は用途に向けて2種類用意されている
1つは利用時にimpl Traitで宣言する静的なトレイト利用であり
複数の様々な型に対して各々の静的に異なるコードが適用され高速である
もう1つは利用時にdyn Traitで宣言する動的なトレイト利用であり
複数の様々な型に対して実行時にダイナミックにディスパッチし柔軟である
2種類ともにコンパイル時にチェック確定するため
Rustではこれら実行時にエラーや例外が起きることはない

873 名前:デフォルトの名無しさん [2022/03/30(水) 21:55:25.20 ID:qIK9n1MF.net]
> Rustではこれら実行時にエラーや例外が起きることはない

実行時にメモリが足りなくなったら、Rustで書かれたプログラムは
どんな挙動を返すの?

874 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 21:57:54.53 ID:UJJsLtPb.net]
それだと使えないなぁ。

875 名前:デフォルトの名無しさん [2022/03/30(水) 21:58:03.62 ID:qIK9n1MF.net]
>>858
おなじだよ。 usingに一時オブジェクトを渡す場合に限って、usingの終わりと
オブジェクト寿命が同じなだけだ。

876 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 22:00:39.04 ID:T6u2kz/X.net]
毎度のことながら複オジのアホ解説読むと
Rust勧めてるのはこのレベルの人なのかと悲しくなる
無知にも程がある

877 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 22:05:28.12 ID:qUkXH45r.net]
>>860
それちゃんとよく読めよ
C#のdynamic型に対応するものの話だろ

ちなみにRustではメモリアロケータも変更可能&自作も可能でベアメタル含めて任意の環境に対応できる
だからメモリ不足時の対応も自由にできてOS等も書ける
もちろん一番単純な対処としてはpanic



878 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 22:07:51.84 ID:jqrh8rWF.net]
>>861
C#でのdynamic型で適用してる事項はすべて適用出来るでしょ
反例を持ってこない限りこれはC#側の負けよ

879 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 22:11:11.16 ID:bu0twkVZ.net]
>>862
With~End Withだけじゃなくusingも勉強し直した方がいいよ
リアルで恥を掻く前に

880 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 22:14:11.74 ID:UJJsLtPb.net]
対象なオブジェクトがrust内にあるわけでも存在してるかさえわからない状態なんだから、
実行時にはエラーや例外が発生すると思うのだが...

881 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 22:25:39.59 ID:ALQUZfnd.net]
>>867
どういう想定か曖昧すぎてわからないため一般的な話をすると
Rustにはnullもundefinedもないし
いわゆるtry-catch例外もないから
あるT型が求められる時の関数の返り型は>>851でも触れられているように代数的データ型となって
enum Option<T>型かenum Result<T, Err>型になるよ
これらはT型を取り出すために広い意味での分岐となるだけで普通に処理が進むね

882 名前:デフォルトの名無しさん [2022/03/30(水) 22:26:22.84 ID:qIK9n1MF.net]
>>866
お前がナー

883 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 22:31:08.47 ID:YEeL7eMZ.net]
>>867
それはC#でdynamic型を使って問題を解決している例ではないのでは?
例えばWebのDOM操作など色んな異なる型が返ってくるときのためにC#ではdynamic型を使う
Rustではそういう時にトレイトを使うので色んな異なる型が返ってきても対応できる

884 名前:デフォルトの名無しさん [2022/03/30(水) 22:34:21.72 ID:qIK9n1MF.net]
>>839
> usingより簡単だし例外でも問題なし。

>>842 は、

> using(var sw=new StreamWriter("a.txt")){

の、newに失敗すると、その時点で例外がスローされることを判ってないん
だろうな。

885 名前:デフォルトの名無しさん [2022/03/30(水) 22:37:02.42 ID:qIK9n1MF.net]
>>864
> ちなみにRustではメモリアロケータも変更可能&自作も可能

C++でもできるわけだが?

886 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 22:42:11.12 ID:OkNrkUse.net]
>>872
どこにもC++のことを否定していない書き込みに対して唐突のイチャモンやな

それならC++だけでなく
Cでもできるわけだが?

887 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 22:47:22.15 ID:4xlnCCQ3.net]
>>860
君は頭が悪いな
C#のdynamic型は失敗仕様であるという話だぜ
メモリが十分にあっても実行時エラーや例外で死んでしまう
コンパイラが検知できない仕様なためミスがあっても通してしまうからだ



888 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 22:50:27.28 ID:NgOFxdTU.net]
>>869
いや、マジで勉強したほうがいいぞ
using はスコープから拔ける時に Dispose 呼ぶだけ
寿命に感知はしないよ

889 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 23:09:24.22 ID:4bDt5Vb4.net]
dynamic自体は名前がわかってるreflectionをいちいち書くのダルいから妥当な導入ではある

ジェネリクスにC++20のrequiresみたいな制限があればdynamicなんていらなかったのは確かだが

890 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 23:15:44.80 ID:SheiVyTd.net]
実行時になってようやくエラーを引き起こし得るdynamicはC#の設計ミス
C++やRustは異なる解決をしている

891 名前:デフォルトの名無しさん mailto:sage [2022/03/30(水) 23:59:52.46 ID:Lj4LP6Zg.net]
dynamicってそもそもリフレクション+式木でしょうが
こんなもん使うな
ジェネリック使え

892 名前:デフォルトの名無しさん mailto:sage [2022/03/31(木) 00:03:05.89 ID:EY1WgKK4.net]
tagged-unionだよ

893 名前:デフォルトの名無しさん mailto:sage [2022/03/31(木) 00:24:36.68 ID:LBSBAbTE.net]
ミスった時にコンパイルエラーを出せない仕様はよくないな

>>859
Rustでの対応は3種類だな
(1) ジェネリックにトレイト境界で制約して静的にモノモーフィゼーション
(2) ジェネリックにトレイト境界で制約して動的にディスパッチ
(3) enumでタグ付け収容して処理時分岐
いずれもプログラミングでミスれば実行時ではなくコンパイル時に早期エラー発覚できる

894 名前:デフォルトの名無しさん mailto:sage [2022/03/31(木) 01:54:42.49 ID:sTE3Pr3t.net]
>>855
std::ofstreamのコンストラクタで例外を投げるってマジ?
普段からC++使ってるの?

895 名前:デフォルトの名無しさん mailto:sage [2022/03/31(木) 15:47:20.37 ID:TWJkYixT.net]
>>832
リソース解放って構造体と紐づけるのは結構無理があると感じることが多い。
もっとコンテクストによるって方が一般的感覚だと思うわ。
そういう意味でdeferのが馴染む。

896 名前:デフォルトの名無しさん mailto:sage [2022/03/31(木) 16:56:25.59 ID:+qzJxbYZ.net]
>>882
上にも書いたけど自由度は高いと思うけど忘れたり間違えたりしそうで怖い

897 名前:デフォルトの名無しさん mailto:sage [2022/03/31(木) 17:43:45.66 ID:TWJkYixT.net]
デストラクタを正しく書く方が簡単で間違いと考えてる?あんまり理解できんな。



898 名前:デフォルトの名無しさん mailto:sage [2022/03/31(木) 18:24:33.50 ID:wBL3yx/w.net]
>>884
デストラクタは一度書けばいいけどdeferは使う度に書かないとだめでしょ?
どっちが間違いやすいかは考えるまでもない

899 名前:デフォルトの名無しさん mailto:sage [2022/03/31(木) 18:47:26.32 ID:d1Z8MU3o.net]
>>884
必要なものはだいたい標準ライブラリに入ってるから手書きで頑張る必要はないのでは
例外安全にするのがめんどくさいとかそういう話?

900 名前:デフォルトの名無しさん mailto:sage [2022/04/02(土) 20:19:43.92 ID:Yphv2UuC.net]
https://discourse.llvm.org/t/rfc-lifetime-annotations-for-c/61377
clangの独自拡張としてだけどC++にlifetime入れようという議論があるんだね

901 名前:デフォルトの名無しさん mailto:sage [2022/04/02(土) 20:54:43.62 ID:ezdDFz2p.net]
ライフタイム導入すればコンパイル時点でバグを発見できて
実行時の無駄なデバッグを減らせるし
メモリ関係の未知のセキュリティバグもコンパイル時点で検出できるもんな

902 名前:デフォルトの名無しさん mailto:sage [2022/04/02(土) 22:41:04.77 ID:5MtdHF70.net]
これ以上C++を接ぎ木してこねくり回すの止めにしたら

903 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 11:55:08.48 ID:W9pHkRzU.net]
>>887
でもrustと同じならdoubly linked listは表現出来ないんでしょ?

904 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 12:04:52.85 ID:llhYZSlD.net]
>>889
C++ってかわいそうな運命だよなあ

905 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 16:13:05.78 ID:9lFqLTmO.net]
>>890
それはlifetime関係なくてxor mutabilityの話だよね

906 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 16:37:52.29 ID:W9pHkRzU.net]
>>892
なるほど

907 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 17:12:35.56 ID:Qom6hzMo.net]
>>890
Rustでは出来るよ



908 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 17:28:58.27 ID:FsLhH6TX.net]
>>885
そんなの一行書くだけろ。。むしろ意図

909 名前:通りのデストラクタが動いてるか怪しい挙動するデストラクタのが問題起こりまくりだわ。 []
[ここ壊れてます]






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<303KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef