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/
656 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 22:19:15.66 ID:/tgdZc/e.net] 正確には Rustだと色々シンプルに書けるためRust派 と C++でも書ける派 ただし後者はコードが出てこないので実証されていない
657 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 22:25:23.19 ID:DslNhsx1.net] いやいや RustだとC++より色々シンプルに書ける派と RustもC++も同じ派がいるだけだろw C++だとこんなになっちゃいますってコードが前者から出てないんだがw C++書けないのにRustだけシンプルに書けると思い込んでるバカはお引取り願おうかねwwwww
658 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 22:32:19.39 ID:DslNhsx1.net] あと個人的に無駄が結構気になるので、さっきのコードRust部分だけ以下に置き換えてくれ #![forbid(unsafe_code)] use itertools::Itertools; fn subsets(len: usize) -> impl Iterator<Item=impl Iterator<Item=usize>> { (0..(1 << len)).map(move |bits| { (0..len).filter(move |index| bits & (1 << index) != 0) }) } fn main() { let input = ["a", "b", "c"]; for s in subsets(input.len()) { println!("[{}]", s.map(|index|&input[index]).format(",")); } }
659 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 22:36:43.09 ID:unVMuDSw.net] 絶対コード書けないだろ 面白すぎw
660 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 22:42:30.15 ID:miakijMp.net] >>650 ポインタとusizeは同じ大きさだから そのコードでは何か無駄を削除できているわけではない むしろ使う側で毎回mapしなければならず使い勝手が悪くなっている さらに大元の話は>>460 から始まっているのだから大きく仕様を変えるべきではない 以上3点により却下だ
661 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 23:04:04.71 ID:DslNhsx1.net] 別にu32やu16でもいいよw むしろセットである必要がないのが素晴らしく合理的だし元とかiteratorにした時点で細かく言えば変わっているw ただ最適化時に範囲チェックがどこまで見てくれるのかが気になるかな… ノーチェックでいいと判断してくれたら御の字w
662 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 23:27:21.61 ID:YSd+hKe3.net] >>653 添え字を返すならusize必須 あと使う側で変換すればいいと言う主張ならば最初の>>522 『0..(1 << len)』でも良いことになる そのままの方がビット演算処理もできてより利便性が高い
663 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 23:49:24.15 ID:DslNhsx1.net] お前は何を言ってるんだw inputのサイズで、この方式だと30個が上限w usizeはオーバースペックなのw
664 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 23:58:01.67 ID:Xi4ntxoy.net] >>653 Iteratorではなく他の言語のようにコストを払ってVec(のVec)で返したいならば 以下のように2段階そ
665 名前:れぞれcollect()するだけなのでコードが本質的に変わるわけではない fn subsets<T>(input: &[T]) -> Vec<Vec<&T>> { let len = input.len(); (0..(1 << len)) .map(move |bits| (0..len) .filter(|index| bits & (1 << index) != 0) .map(|index| &input[index]) .collect()) .collect() } そしてあなたもcollect()して返すのはイマイチだと>>605 で明言しているのだから 今回の結論はどちらもcollect()せずにイテレータのイテレータとなる>>632 のコードが正解 [] [ここ壊れてます]
666 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 00:10:53.62 ID:1+CNf8az.net] 無駄多くね?必要なくね?メモリとCPUを無駄遣いするクソコードでしかなくね?w >>605 で言ったのは上のコードで最初のcollectの話w 2個目は最初からないんだよw >>650 なら生成した瞬間に出力されるお得仕様だから無駄がないw collectするくらいならそもそもVecをcapacity指定して作ってforループしてそこに埋めてった方が速いw つまり>>632 はゴミで>>650 が正解w
667 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 01:32:33.30 ID:+zPQ2FRY.net] >>657 ダメです C++やRustを含めて各言語のcombination, permutation, subsetなどの実装はいずれも 与えられた入力があってその要素を使って返します 今回もその仕様で確定です あとはイテレータを使わずに普通に>>656 でもよいですし イテレータを使える言語ならば>>632 のイテレータのイテレータを返す仕様がベターでしょう
668 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 01:40:13.83 ID:1+CNf8az.net] >>658 ダメじゃねーよwwww むしろロジックが脆弱なのに余計にいろいろ浪費するコードでベターとか言ってんじゃねーよwwww こんな短いコードでこんなにダメなやつは初めて見たぞw
669 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 01:51:34.86 ID:+zPQ2FRY.net] >>659 あなたはダメです 既存のものの仕様に合わせるならば>>658 に書いた通りですし 浪費をせずにインデックスだけ渡せばよいとの主張ならば皆が書いているように 0..(1 << len) がその答えです ビット表現の方がサイズも小さく包含関係などもビット演算のみで得られるなど利点が多いです あなたの>>650 はそのどちらでもない中途半端です
670 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 01:58:09.59 ID:1+CNf8az.net] >>660 頭悪いの?遅延評価されてるので、必要にならない限り計算されないんだけどw その値も必要時に計算され、その結果を引数に与えられたiteratorが生成されて返ってくるだけだろw そのときにiteratorがセットになってないindexだけ返ってきてそれがsubsetsになるの?wwww 足りない頭に脳味噌もう少し充填した方がいいよw
671 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 02:52:06.33 ID:fen0VFs0.net] ガイガー君の主張だと 入力として集合をスライスとしてもらって 出力としてその部分集合をイテレータとして返す>>522 は無駄で 出力としてその部分集合もイテレータで返し二段イテレータとなる>>632 も無駄で そもそも入力としての集合を関数に渡す必要がなく長さだけ渡してインデックスだけ返せばいいとの主張で>>650 なんだろ それならばもっと無駄を排除して次で十分だ fn subsets(len: usize) -> impl Iterator<Item=usize> { 0..(1 << len) } これで各部分集合をビット表現で得られる サイズも最小となりビット演算も可能で使い回しもよい fn main() { let input = ["a", "b", "c"]; let len = input.len(); for bits in subsets(len) { println!("{:b} ({})", bits, (0..len).filter(|i| bits & (1 << i) != 0).map(|i| &input[i]).format(",")); } } このように文字列として必要になった場合に初めて変換すればよい ついでにビット表現文字列も同時に表示できる ガイガー君の無駄を無くす主張を認めるならばこのほうがさらに優れていることになる したがってこの件もガイガー君の敗北だ
672 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 02:58:15.92 ID:1+CNf8az.net] バカだなw コードにしなくてもそんなのは分かってんだよwwww それじゃ意味が不明である上にI/Fとしても稚拙極まりないと言ってるんだよw 返ってくる数字が何なのか意味不明だろうにw 今回は元作者がアホなために30個そこそこしか作成できないわけで、まあそれでもなんとかなるわけだが、いずれロジックを修正して無限に生成できるようにしたときにまだそんなビット列に拘るのかい? 敗北はお前wwww
673 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 03:15:01.33 ID:fen0VFs0.net] ところがガイガー君はsubsetsがビット表現から生成できることに気付かなかった そのためガイガー君が示した最初のコードは>>463 でありcombinationsイテレータを使ってsubsetsを生成するコードだった ちなみにググるとsubsetsはcombinationsを使って実装できるとのページが多数ヒットする ガイガー君がそこからカンニングしたのかどうかは知らないが少なくともビット表現から生成できることに気付かずcombinations頼みとなったのは事実だ>>463
674 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 03:23:47.90 ID:1+CNf8az.net] >>664 お猿さんの妄想が事実と食い違ってたところで俺にはどうでもいいんだけど、事実はC、P、階乗みたいな計算や集合みたいなのは俺小学校時代から知ってるw だから冪集合と聞くだけで、君のようにカンニングすることなく答えに辿りついてしまうんだよw ビット表現から生成する方法を必死に提唱してたのは俺一人しか知らないけど、この手の処理は原則変更可能な元データのセットを用意すればスワップするだけで生成出来るものだよw 可哀想にねw
675 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 03:33:20.84 ID:fen0VFs0.net] ガイガー君はsubsets関数をプログラミングする時になぜか非常に遠回りとなるitertools.combinationsを使った ソース>>463 この事実からガイガー君はアルゴリズムや数学などが不得意であると断言できる ここまでコピペ改変しか披露できていないことからプログラミングが不得意なのだろう
676 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 03:58:13.20 ID:1+CNf8az.net] >>666 こいつはアホなのか?普通に>>460 が求める簡単な方法なんだがwwww 妄想を自分で断言しちゃうとかもうねw 久しぶりにこれを使ってあげようwwww お前がそう思うんならそうなんだろう / ̄ ̄ ̄ ̄\ / / | ヽ ヽ\ / / /|||ハ||ヽ> `/ /ィ-トノレ| N十トハ||ヽ /V レ/テヾ |/ /テヾ|||| レ∧ |ヒOソ| ヒOソiNV | ヽ ̄ `  ̄ ハ( ヽ|ヽ \  ̄ 人ソお ヽレ\_≧ー-イレソ 前 / ̄ ̄ ̄\\ ん / / ̄ ̄\_ヽ) 中 |( )ヽヽ で ヒ∧ \/ |゚| は || ヽ | | な
677 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 05:21:36.47 ID:1V6eoYkY.net] >>460 を見てみたけど 最終的ににべき集合のべき集合が欲しいみたいよ MathematicaだとSubsets[Subsets[{a, b, c}]]で済むと言ってるね それに対して>>463 はitertools.combinationsを使ってsubsetsを実装 今回のケースでわざわざcombinationsを用いた実装が必要なのかどうかは不明 そして空集合が出力されないバグ実装 rangeを1開始でなくて0開始にしないと駄目ですよ それはさておき元と同じインタフェースならばRust版は>>656 の実装でOK subsets(subsets(&["a", "b", "c"])) でべき集合のべき集合がちゃんと得られますね
678 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 11:54:10.51 ID:1+CNf8az.net] まだ言ってんのかよw 空集合はお茶目なバグだ許せw combinationを使わない実装の方が珍しいわw 同じI/Fにする必要はないし、それが必要なら簡単に実装出来るw fn subsets_collect<T>(s: &Vec<T>) -> Vec<Vec<&T>> { subsets(s.len()).map(|iter| iter.map(|i| &s[i]).collect::<Vec<&T>>()).collect::<Vec<Vec<&T>>>() } fn main() { let input = vec!["a", "b", "c"]; println!("{:?}", subsets_collect(&subsets_collect(&input))); } 始めから同じ実装にしてないからなw そして>>656 の実装でsubsets(subsets(&["a", "b", "c"]))はエラーwwww
679 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 17:12:41.85 ID:URBujIbQ.net] ストレス発散オナニーRusterスレッド
680 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 17:36:53.71 ID:1+CNf8az.net] いや、Rusterは尽く俺にやられてるんだがw しかもC++できないただの駆け出しw
681 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 17:51:03.84 ID:HHTijYmK.net] >>669 は嘘つき やってみたら>>656 の実装で動いた fn main() { println!("{:?}", subsets(&subsets(&["a"]))); println!("{:?}", subsets(&subsets(&["a", "b"]))); println!("{:?}", subsets(&subsets(&["a", "b", "c"]))); } ちゃんとべき集合のべき集合が出力されている 1つ目 [[], [[]], [["a"]], [[], ["a"]]] 2つ目 [[], [[]], [["a"]], [[], ["a"]], [["b"]], [[], ["b"]], [["a"], ["b"]], [[], ["a"], ["b"]], [["a", "b"]], [[], ["a", "b"]], [["a"], ["a", "b"]], [[], ["a"], ["a", "b"]], [["b"], ["a", "b"]], [[], ["b"], ["a", "b"]], [["a"], ["b"], ["a", "b"]], [[], ["a"], ["b"], ["a", "b"]]] 3つ目は長いので略
682 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 18:08:01.19 ID:1+CNf8az.net] >>672 嘘つきはお前w &が余計についてるやんけw やはり駆け出しRust使いは嘘付きしかいないw
683 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 18:22:11.71 ID:6IwS75Da.net] >>673 ガイガー君の書き込み>>669 でも&が同じように付いている つまりガイガー君は自分の誤りを認めたことになる
684 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 18:28:57.25 ID:1+CNf8az.net] >>674 俺はちゃんとその>>669 で > そして>>656 の実装でsubsets(subsets(&["a", "b", "c"]))はエラーwwww と言ってるので誤っていないw 誤っているのは、>>669 で > それはさておき元と同じインタフェースならばRust版は>>656 の実装でOK > subsets(subsets(&["a", "b", "c"])) でべき集合のべき集合がちゃんと得られますね という部分w なんでこうまで説明されないと間違いを認められないんだろうなwwww 駆け出しRuster推しのお馬鹿さんたちがRustも使えないことが判明w
685 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 18:37:30.55 ID:GV4qdrT7.net] 実際に>>672 で動作してるのだからRustの勝利 C++はコードの片鱗すら出てこない
686 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 18:44:09.03 ID:1+CNf8az.net] >>572 でFAなんだもんw 想像もできないくらいC++書けない人が文句言ってても何も気にならんw 両方書けるようになってから、ほらこんなになるじゃんって持ってきたら添削してやるよw
687 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 19:01:47.10 ID:eXUaH9c5.net] C++20を使いこなせる人がいないことが敗北原因 Rustよりも利用者少ない だからこのスレにもC++で書ける人が誰もいない
688 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 19:03:19.57 ID:1+CNf8az.net] 俺は書けるけどねwwwww というかお前が書けないのに書き込んでるからこんな変な話になってるだけで、本来は書ける前提でああでもないこうでもないやるスレだろwwww
689 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 19:05:31.63 ID:DiBIkIVz.net] それ、昔のコンパイラを今でも使ってる人達にも言えるの?
690 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 19:11:26.79 ID:1+CNf8az.net] は?俺だって必要なら昔のコンパイラ使うぞw 特定CPU用のなんて安定したバージョンでないとバグ踏むからなw
691 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 19:59:25.97 ID:kJ/tleYc.net] C++使えなくてRustは使えますとか、 あと10年はなんの価値もないんじゃ...
692 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 22:31:20.58 ID:271cfGdl.net] そんな妄想をしても場所によりけり うちはC++以外の諸言語からRustへ移行したので Rust使えずC++使える人は価値ゼロ といったように
693 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 23:04:08.64 ID:1+CNf8az.net] それは最高にやばそうだなw
694 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 23:25:08.78 ID:Ftc+D3LS.net] 業界標準ツールのRust化も激しいよな 例えばJavaScriptでおなじみのトランスパイラBabel 遅いので当然ながらRust版のSWCというのが作成されて React/Next.jp環境でもBabelからそのRust版へと移行された
695 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 23:39:52.49 ID:1+CNf8az.net] 全部であるかのごとくに書いてるけどごくごく一部だし、しかも期待したほど速度が上がらずに困ってたよねw JavaScriptに比べてだぞ?w
696 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 23:57:33.12 ID:jG5ySy9q.net] >>686 swcはbabelより20〜50倍速い
697 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 00:09:57.25 ID:BAdp3agq.net] 公称だろ?w 実際試した人がそうでもなかった(忘れたけど1.x倍くらい)って言ってたよw
698 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 00:10:28.20 ID:BAdp3agq.net] しかも場合によっては遅くなるって言ってたw
699 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 00:53:26.08 ID:1rsJ1Bxd.net] >>688 >>689 虚言癖
700 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 01:13:09.95 ID:BAdp3agq.net] まあ自分で試したわけじゃないから、そう言われても何とも言えんけどなw
701 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 03:44:24.39 ID:qXBNR9Nr.net] >>669 > fn subsets_collect<T>(s: &Vec<T>) ガイガー君は相変わらず素人のままだな そこは&Vec<T>ではなく&[T]と書くのだよ Vec自体の固有機能に関する動作の場合を除き 狭くVecのみを対象にするのはバカげている スライスを対象にするのが鉄則 &Vec<T> ←Vecしか受け付けられない &[T] ←Vecも配列もスライスも受け付ける
702 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 04:14:12.72 ID:BAdp3agq.net] >>692 そんなこと言われなくても知っとるわwwww それは俺のポリシーとして、可能ならVecを返すならVecを受けたいだけw 今回のケースではメリットとかないよw 同様にsliceで受けたらArrayで返したいし、iteratorを受けたらiteratorを返したいw
703 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 04:24:26.11 ID:Czlt7YRo.net] >>693 arrayとsliceは別物ですよ arrayで受けたらarrayで返したいなら意味がわかりますし実際にmapはその仕様ですけど
704 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 04:53:35.01 ID:BAdp3agq.net] >>694 [i32] ... Array &[i32] ... スライス T ... T &T ... Tの参照 という理解で、 ・特定の型の参照はスライスとして扱える ・Arrayの参照はスライスと区別できない と思ってて →スライスで渡されたらArrayで返す という発想なんだが、違うの?
705 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 05:13:22.29 ID:Czlt7YRo.net] >>695 違います [T] … これがスライス (動的サイズ) [T; N] … これが配列 (固定サイズ) 明確に異なるprimitive typeです
706 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 05:32:43.26 ID:BAdp3agq.net] >>696 なん。。だと!?!?そんな基本的なところを気付いていなかったのかw では ・Arrayの参照(&[T;N])はスライス([T])と区別できる let a = &[1,2,3]; のaは俺はずっとスライスと思ってたけど、そうではなく、 let a = &[1,2,3] as &[i32]; とかでないとスライス(の参照)にはならんってことかwwww これはすまんかったw ちょっともう一度最初から整理し直さないといかんかもw ありがとw
707 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 06:00:44.84 ID:Czlt7YRo.net] >>697 そこはコアースされます 配列とスライスの違いをわかりやすく使用例で示しましょう まず「配列を受け取り」その各値を2倍にした「配列を返す」関数twice()です fn twice<const N: usize>(input: &[isize; N]) -> [isize; N] { let mut output: [isize; N] = [0; N]; for i in 0..N { output[i] = input[i] * 2; } output } わかりやすいようforで回して代入しています fn main() { let input = [1, 2, 3]; println!("{:?}", twice(&input)); } もちろんちゃんと動いて[2, 4, 6]となりますね この関数の引数をスライスを受け取るように型を&[isize]へ変えても大丈夫なのですが ただし関数を使う時にちょっと状況が変わってきます そこには様々な違いと問題が生じますので実体験しましょう これがスライスと配列の違いを理解するためのあなたへの宿題です
708 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 06:10:12.41 ID:BAdp3agq.net] >>698 それは蛇足w Rust信者はそういうことするからダメなんだよw 別に必ず同じ固定サイズになるとは限らないから、そんな方法は考えてもいないw
709 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 06:18:10.57 ID:Czlt7YRo.net] >>699 ほら、理解できていませんね その発言からあなたはまだ机上の妄想の世界にいます わかった気になって宿題をしていないダメな子パターン
710 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 06:22:52.71 ID:BAdp3agq.net] >>700 一応配列で渡されたら配列で返したい心理の説明をしておくと、例えばベクタなど配列と同じような構造で動的に拡張可能なコレクションをずっと持ち回っていると、そいつが過去に持っていたデータなどが後ろにくっついてる可能性があったり、余計なメモリを確保していたり、gcなどが効きにくくなったりするので、内部処理で使ったオブジェクトではない、綺麗な生成データを固定で作って返す風習があるんだよw
711 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 06:32:23.88 ID:Czlt7YRo.net] >>701 あなたは>>693 で sliceで受けてarrayで返したいと言いました そこで先ほどの例twice関数をその仕様で作る宿題をあなたに課しました 宿題をしてそこでの課題を得ることができましたか?
712 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 06:33:56.07 ID:BAdp3agq.net] >>702 できるし頼んでないのでwwwww
713 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 06:40:05.89 ID:Czlt7YRo.net] >>703 いいえ あなたは>>695 で配列とスライスを正しく理解できていませんでした そして宿題もこなせず そこで何が問題なのかもいまだ理解できていません
714 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 06:42:57.16 ID:BAdp3agq.net] >>704 1+1が出来ることは証明する必要もないんだよw 君のように誰かに認めてもらいたいだけの人は別にしてw 俺は面白いから構ってあげるけどねw
715 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 06:50:01.91 ID:Czlt7YRo.net] >>705 やはり分かっていないようですね あなたが>>693 でsliceで受けてarrayで返したいと言った仕様で >>698 の内容を2倍にして返すだけの関数を作れましたか? YesかNoかで答えてください
716 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 06:53:37.67 ID:BAdp3agq.net] >>706 答える義務がないんだってwwwwww できるよw アホじゃねーのwwwwww
717 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 06:57:16.08 ID:Czlt7YRo.net] >>707 > できるよw はい これであなたは嘘つきダメ人間であることが完全に確定しました
718 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 06:59:16.07 ID:BAdp3agq.net] >>708 はいはい、良かったねwwwww 満足か?大方コンパイル時に必要だとかそんな話なんだろ?w 別にどうだっていいんだよそんなことwwwwww
719 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 07:00:45.10 ID:BAdp3agq.net] こういう輩は確かに煽ってみるに限るなw 面白いしw
720 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 07:04:34.69 ID:Czlt7YRo.net] >>709 ほら、その発言で あなたは配列とスライスをまだ理解できていないことがバレましたね
721 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 07:05:47.35 ID:BAdp3agq.net] 他の可能性があるんだ〜へぇ〜それは思いつかなかったなw どうでもいいけどwwwwwwww
722 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 07:14:14.39 ID:Czlt7YRo.net] >>712 あなたの知能では配列とスライスを理解することができなかったと決着しました 以上です
723 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 07:16:48.53 ID:BAdp3agq.net] はいはい、嘘乙wwwww
724 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 07:18:49.08 ID:BAdp3agq.net] ってもう終わりなのかよwwwww 夜までまだ長いぞw
725 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 07:36:36.37 ID:cgJvFkX3.net] フレームワークのドキュメントは読むのに言語につきてのドキュメントは読まないで雰囲気でやっていたのか
726 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 07:58:11.85 ID:BAdp3agq.net] 早速転生してきたのかw いい心がけだw いや読んだけど一度切りだよw 俺は必要がなければ読み返さないし、明確にsliceの定義をしているものがなかったので、誤った解釈のままだっただけw Rustのドキュメントって例ばっかりで、あんまり定義が明確じゃないんだよなw arrayは定義はあるんだけど、今まで初期化にしか使わなかったから、使わなすぎて間違って覚えてたw immutableがデフォだとわざわざarrayを使う意味があんまりないんだよねw
727 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 23:29:47.68 ID:5Szv6JZQ.net] >>707 そこは「できない」と答えないと失格だろ 動的サイズのスライスをもらって固定サイズの配列を返すことは不可能
728 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 02:53:53.03 ID:ZDHdo9X7.net] >>718 残念だったねw 俺が「できる」とあえて答えてるのは>>702 の話で、>>706 には「答える義務がない」が答えなんだよw 流石に>>711 以降でついた嘘をついたのが気になって訂正しにきちゃったんだねw 嘘つくとか人として失格w
729 名前:デフォルトの名無しさん [2022/03/22(火) 09:25:40.89 ID:VA79WEBN.net] なんだかRustってマウント取り合いのキモイ連中ばかりなんだな。
730 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 09:53:23.73 ID:BbUMgG6B.net] >>720 これ
731 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 11:11:44.38 ID:cPdOMca8.net] そう。学習時間が増えるのは仕方ないしそれはそれでいいんだが、 その副作用としてマウンターがイナゴレベルで発生するのがな。
732 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 11:33:10.12 ID:8EjbgNwb.net] そろそろRust版毛の壁が誕生するのかな
733 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 12:18:47.19 ID:ZDHdo9X7.net] Rustごときにそんなものは生まれないし、マウントとか気にしてるからそういう空気になるだけw 気をつけるべきは、 ・言葉の定義に関する揚げ足取りだけとか ・関係ないことを誰も聞いてもないのに話し始めるとか ・スレ違いの話題とか そういうのくらいw
734 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 13:35:20.32 ID:pdrrbcyh.net] 以下のサイトによるとrust製ソフトで一番有名なfirefoxでさえC言語のコードの方がまだ多いらしい 正直、まだまだC/C++に代わるって議論する段階じゃなさそう https://4e6.github.io/firefox-lang-stats/
735 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 14:09:58.25 ID:l3SAD7eY.net] >>725 そりゃんな簡単に移植できないだろ そもそもC++ならまだしもC言語で書いてるところはRustに移植しづらいだろうし
736 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 14:36:30.97 ID:CigmH2/4.net] Firefoxは超巨大プロダクトの1つだからね 数千万行ものコードで書かれてるみたい さすがに全部書き換えられなくても仕方ないでしょ 毎日順調に1万行を書き換えても10年とかかかるよ
737 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 14:39:46.62 ID:oqIjUDQq.net] 新規追加分はどういう割合かしらん。
738 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 15:27:56.84 ID:q+lZbjeY.net] Netscape6の頃から数えると20年以上の歴史があるプロダクトだから数年で10%置き換えられたのはなかなか良いペースなのでは
739 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 20:15:02.78 ID:ZDHdo9X7.net] https://wiki.mozilla.org/Oxidation "... Rust Weaknesses One major issue with Rust relates to personnel. There is a wide variety of experience levels within Mozilla, for both coding and reviewing. Rust's learning curve is steep at the start, which can be intimidating. (The new borrow checker released in Rust 1.31 helped greatly with this.) There are also technical challenges. Compilation is slow. Crossing the C++/Rust boundary can be difficult. See "Blockers and obstacles" below for more details about work being done to remedy these weaknesses. ..."
740 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 13:49:05.58 ID:A9GFlV37.net] >>502 馬鹿が使うPython まんま
741 名前:460 mailto:sage [2022/03/24(木) 14:52:36.70 ID:A9GFlV37.net] なんかちょっと見ないうちにえらく盛り上がってるのな んで、SubSets[Subsets*]]の話になってるが、本質はそこじゃなく SubSets[Subsets[{a,b,c}]]におけ要素が合併(U)、結合演算に閉じている集合族選び出して位相空間を作り出すってのが到達目標なんだわ。 羃集合の羃集合なんて、なんの工夫もなく実装できるもんだと思ってたらPythonはそれすら出来なかったということで、 集合演算においてはMathematicaレベルにすらない。 位相空間を選び出すには、さらにそこから演算規則にそぐわない集合族は排除しなきゃいけない。 3要素から
742 名前:り出した位相空間は29個に及ぶんだけど、 Python は既に羃集合の羃集合すら簡単に書けないことが確定した時点で数学研究には使えないってことが明らかなんよね。 それなりのプログラム組んだらいけるってことならC++でもC#でもいけるんですわ。www ちなみに数学科の初年度でドロップアウトするのがまさにここらしいので、 信学会正員の俺が試しに流行のPython調べてみたって話ですわ、 間違いないのは ・数学の研究に寄与するのはPythonじゃなく素直にMathematica ・Excelファイル外部からいじくりたければOpenpyxelじゃなくC#+EPPLUS ってこってすわ ちなみに、数値演算ってことならハナからPythonなんて検討するような対象じゃなく単なるゴミ糞レベルwww 素直にA100でも用意してCUDAでも使えばいい。 なんでゴミ糞Pythonとか流行ってんの?さっぱり理解できんわ。 こんなんWebScrapingとかWeb侵入以外とういうメリットあるの? あほが使う言語 == Python でFA? [] [ここ壊れてます]
743 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 15:06:02.22 ID:A9GFlV37.net] >>705 1=1==3と定義することに近いのがδ関数って知ってる? そう、数学科以外、測度論ってやらないんですよ 連続系の上に離散系を構築したりする。ラプラス変換の上にZ変換作ったりね そこで使われるのが ∫δ(x)dx =1 本来1点だけが非0の関数なんて積分しても0にしかならない δ関数ってのは 半直線の面積 == 1 にしますってわけわからん"約束"なんですよ 本来0においてのみ∞、それ以外0って関数は積分しても0にしかならない それをδ関数に限って1と"約束"するのがポ
744 名前:イントなんですね。物理においても工学においても こういうフェイクでも破綻しないってこじつけが超関数論 [] [ここ壊れてます]
745 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 15:33:33.46 ID:A9GFlV37.net] なんかPythonごとき使えるだけのPythonerがでしゃばってるけど C/C++/C#使えるプログラマが能力的にPython使えないなんてことないからwww ちょい使ってみてやっぱこりゃあかんってがっかりすることが多い Cxx使ってて補助言語としてPerl使う、 プログラムランチャーやらお気軽シェルスクリプトとしてはbashもPowerShellを使う、 数値計算電卓にはMatlabもOctaveもScilabも使う、 数式計算ならMathematica もMapleも Mupadも使える、 こういうユーザにとっては 世間でPython流行ってるけどこれ使う意味あんの?って話ね 言語処理系として流行ってる以外にどこがアドバンテージなの? ってこどですわ
746 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 15:46:03.00 ID:iUQBARfO.net] >>734 深層学習には何使うの?
747 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 15:54:22.45 ID:A9GFlV37.net] 空集合の扱いだけど ?と{?}は違うんでね オチャメなバクとごまかしてたんじゃ 正解に辿り着かないよwww - 集合族がせいぜいべき集合だと勘違いしてつまづく数学科連中が多いんだそ-な(数学セミナーで読んだ) 3要素からなる集合は最大8個 そこから考えられる集合の属は最大2^8=256個 そのなかで有限演算の結び、非加算合併演算に関して閉じている集合属は29個
748 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 15:56:43.89 ID:A9GFlV37.net] >>735 さぁ? こちとら所詮データベースに過ぎないAIなんて興味の対象外なんでね カルマンフィルタ、粒子フィルタ、ベイズ推定、Viterbiアルゴリズムってならコメントできるけどねwwww
749 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 15:57:59.36 ID:A9GFlV37.net] >>736 空集合が"?'になってるんで ?部分は空集合に置き換えて読んでね
750 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 15:58:08.77 ID:y95b8UUh.net] こりゃ貧乏人かな?
751 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 19:43:58.62 ID:1Vr2GJ3G.net] 空集合をうっかり忘れるのはお茶目なバグという以外に表現はないw ちなみに普通はファイと読むんだよw 集合論自体はそんな難しいものじゃないw Mathematicaは簡単な数式が解ける、グラフが簡単に描けるなどの理由で使う人は昔からいたけど、今はもっと複雑なことしたい人が多いから、数値計算にはRやPythonを使う人が多いと思うw 数理最適化分野も一部の商用ソフトを除けばPythonが多いと思うw pythonが使われるのは、単に中をC/C++で書いて外側をPythonにすると速くて扱いやすいからw 機械学習(NN)とDBは全く違うけど、もし自然言語処理に詳しいならword2vecの解説記事でも書いてたら世のためにでもなるんじゃない?w 俺も多少は分かるけどw
752 名前:デフォルトの名無しさん [2022/03/24(木) 20:35:43.32 ID:pklAHbiT.net] > pythonが使われるのは、単に中をC/C++で書いて外側をPythonにすると速くて扱いやすいからw 速いのは大半がC++で動いているからで、扱いやすいと言っても、ファイルからデータ 読んで渡すとかの部分だってC++でテンプレート使って書いた方が、Pythonより何倍も 速いと思うが?
753 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 21:17:04.78 ID:1Vr2GJ3G.net] あれでしょw やっぱりjupyterの使い勝手がいいんでしょw ちょっと動かして試してグラフ見て記録取ってみたいな試行錯誤したいときはw だからガッツリ時間がかかる部分はpythonのままじゃたまったものじゃないけど、取れたデータを試したり外側のロジック組むときはpythonのが楽という理屈だと思うよw
754 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 21:58:37.46 ID:XlqSDiYA.net] >>732 その位相空間というのを調べたら冪集合の冪集合のうち 全体と空集合を含み 各要素の和も積も所属していることらしいのでRustで作ってみました fn 和集合(集合_x: usize, 集合_y: usize) -> usize { 集合_x | 集合_y } fn 積集合(集合_x: usize, 集合_y: usize) -> usize { 集合_x & 集合_y } fn 空集合(_size: usize) -> usize { 0 } fn 全体集合(size: usize) -> usize { 冪(size) - 1 } fn 冪(size: usize) -> usize { 1 << size } fn 所属(集合: usize, 要素: usize) -> bool { 集合 & (1 << 要素) != 0 } fn 一覧(size: usize) -> impl Iterator<Item=usize> { 0..size } fn 要素一覧(集合: usize, size: usize) -> impl Iterator<Item=usize> { 一覧(size).filter(move |&要素| 所属(集合, 要素)) } fn main() { let input = ['a', 'b', 'c']; let n = input.len(); 一覧(冪(冪(n))) .filter(|&s| 所属(s, 全体集合(n)) && 所属(s, 空集合(n)) && 要素一覧(s, 冪(n)).all(|x| 要素一覧(s, 冪(n)).all(|y| 所属(s, 積集合(x, y)) && 所属(s, 和集合(x, y))))) .for_each(|s| println!("{}", 要素一覧(s, 冪(n)) .format_with(",", |s, f| f(&format_args!("{{{}}}", 要素一覧(s, n) .format_with(",", |index, f| f(&format_args!("{}", input[index])))))))); } これで{},{a,b,c} から {},{a},{b},{a,b},{c},{a,c},{b,c},{a,b,c} まで29個の位相が算出されました 入力を4つ ['a', 'b', 'c', 'd'] にすると355個の位相が算出されました これで合っていますでしょうか?
755 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 22:54:59.49 ID:9cbRkQeA.net] Rustのイテレータチェーンで宣言的っぽくシンプルに書けていいな
756 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 23:16:44.72 ID:1Vr2GJ3G.net] ついにこんなしょうもない日本語のコードをあげて自画自賛し始めたRust信者w そんな自明でしょうもないゴミコード書いてる暇があったらクソ速い正規表現エンジンでも作ってみたらいいのにw
757 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 23:20:36.69 ID:rSdCMchJ.net] >>745 Pythonで書いているとこの前レスしていたようだが本当に書けるのか? それとも>>732 が言うように書けないのか?
758 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 23:31:17.75 ID:Uh4MbO9+.net] ガイガー君はそういうコードを読めないし書けない C++で冪集合(subsets)作るのも結局できなかった
759 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 23:46:12.18 ID:1Vr2GJ3G.net] 単発IDで自演大変だねw 出来ないのはお前だけw
760 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 12:11:43.15 ID:2aIwxdP0.net] 組み合わせ集合をそのまま保持しようとしてる時点で馬鹿だろ。 何の応用も考えてないの丸出しだな、競技プログラミングとかそっちのアホか。
761 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 12:14:33.84 ID:vqaIaLyp.net] >>749 ではお手並み拝見
762 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 12:40:40.57 ID:enyWdq4S.net] >>749 やめたれw
763 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 12:42:10.27 ID:w9HuCaKe.net] >>749 実コードを出そうぜ 出せなきゃ負けの世界
764 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 13:48:01.88 ID:enyWdq4S.net] >>749 お前の負けやで
765 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 14:03:38.99 ID:svg4cCIa.net] 枯れスレや 暇人どもの 糞の跡
766 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 14:31:21.44 ID:2aIwxdP0.net] なるほど、本気でこういうコードをありがたがる馬鹿って結構多いんだな。 そりゃrust厨がいい気になっちゃうわけだ。
767 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 16:28:42.69 ID:xgDHHux/.net] >>753 ID変え忘れたの?
768 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 17:17:18.88 ID:enyWdq4S.net] >>756 律儀にID変えてて草 お前のことやで
769 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 17:43:08.49 ID:Sr8uMs9s.net] >>755 何を問題にしている? >>743 なら単なる普通のイテレータのコードに見える 問題点を具体的に言えなきゃ何を言いいたいのかわからないよ
770 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 18:17:49.67 ID:+pS3/Cvs.net] >>755 複製オジさんのコードをありがたがってるやつなんておらんよ いつもの汚コードだから即NG
771 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 18:52:17.27 ID:eoZx8ezX.net] あれ複おじなん? それはともかく>>749 のコード見てみたいわ
772 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 18:59:38.47 ID:JpusqDH/.net] >>749 みんなこんだけ見せろって言ってんだよ 見せろよ 逃さねえぞ?
773 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 19:32:15.82 ID:h6MJAUlj.net] >>743 のコードを見てみたが rangeイテレータをfilterしているだけの普通のよくあるコードだな filterの中のbool値が(x, y)の二段のallになっているだけでこれもよくあるパターン >>755 まさかと思うがこういうコードを初めて見た初心者なので理解できなかったということか?
774 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 21:14:50.48 ID:u98H5tRm.net] どっちもどっちなんだが 煽ってるやつの指摘を理解できないやつらも普通にヤバいからな
775 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 21:15:45.94 ID:Sf6AbPmi.net] バカだからコード書けないのに煽ってコードくださいって言うんだよw
776 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 21:25:12.39 ID:1BFpe92B.net] >>763 的外れな指摘しかないぜ >>764 コードは書かなくてもいいとは思うが その場合は何が問題で自分ならどうするのかを言葉で説明するべき 代案を言葉かコードで出せないやつは言いがかりか愉快犯かアンチだから無視していい
777 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 21:43:21.60 ID:Ux3SzCLX.net] >>759 今まで見てきて『汚コード』と連呼する時は特徴がある forやifが使われずにイテレータ連鎖や条件メソッドが使われるRustコードの時に『汚コード』と言っている そのため『汚コード』連呼の人は以下の3つのタイプいずれか (1) 自分のコードの書き方に偏った信念があって他を受け付けない頑固タイプ (2) 自分が理解できないコードがあると批判したくなる知弱タイプ (3) Rustに反感がありRust的な書き方を嫌っているアンチタイプ
778 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 22:02:00.11 ID:9tHxWkJU.net] 汚ゴーダの承認要求w
779 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 22:06:20.29 ID:6nlCsPOx.net] >>766 2か3だろう
780 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 22:53:50.64 ID:thqo/0xR.net] まあ1なら信念を説明するなりコードで示すなりするだろうからな
781 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 23:17:24.40 ID:Sf6AbPmi.net] そもそもどうでもいい内容だからなw
782 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 23:26:38.46 ID:5On1tMu9.net] >>749 > 組み合わせ集合をそのまま保持しようとしてる時点で馬鹿だろ。 そんなコードはどこにも見当たらない 誤読しているのか、それとも、コードを読めずに適当に書いているのか
783 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 23:30:13.03 ID:eoZx8ezX.net] こういう展開で一度でも良いから 本人(>>749 )のコード見てみたいわ つっこまれると黙り込んじゃうもんななぜか つっこまれて待ってましたと披露、とかじゃなくてね
784 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 00:40:57.22 ID:9q2PYIcF.net] 書けないやつがいると思うところが怖いw
785 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 00:41:52.74 ID:9q2PYIcF.net] まじでみんなどんどんRustを嫌いになっていくねw
786 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 01:38:57.93 ID:JTqKZDur.net] >>773 ガイガー君はいつもコード書けないじゃん 今回のRustコードについても批判なの?
787 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 02:27:45.11 ID:9q2PYIcF.net] 何度でも言うが書けないのではなく、書かないだけw 煽っても何も出んぞw お前が書けないからって他の人も書けないとか思うなw
788 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 04:58:35.06 ID:YsGlpYqC.net] >>776 今回はコードを読めなかったため批判したりコードを書くところまで辿り着けなかったというオチなんだろ
789 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 06:40:57.68 ID:9q2PYIcF.net] 何言ってんだ?この人w 自分のおつむが足りないからって同じ基準で他人を見ない方がいいよw
790 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 07:02:16.69 ID:lZnQW6V9.net] 珍しく反応していないからコードが読めなかったに一票
791 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 09:36:14.32 ID:9y5xuIje.net] 反応がワンパターンになってきてるから、相手が諦めるまで同じ内容を繰り返すんだろうな 低能にありがちな行動w
792 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 12:25:46.50 ID:ShQHM1dQ.net] お互い相手にしてもらえるやつがいて良かったね 隔離スレ立てたやつに感謝
793 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 23:51:11.15 ID:/7nLRmyg.net] >>749 組み合わせ集合の意味が不明だが['a', 'b', 'c']に対して冪集合の冪集合ことか? >>743 のコードの関数呼び出し部分を展開すると 「一覧(冪(冪(n)))」は「(0..(1 << (1 << n)))」 つまり冪集合の冪集合を0から255(=2^(2^3)-1)までの数値でbit表現していることになる 集合の表記でこれ以上は簡単にならないし応用も一番広く効くのではないか あとは素直に位相を満たす条件でフィルタしてるだけだな | .filter(|&s| | 所属(s, 全体集合(n)) && //これは必須条件 | 所属(s, 空集合(n)) && //これも必須条件 | 要素一覧(s, 冪(n)).all(|x| | 要素一覧(s, 冪(n)).all(|y| | 所属(s, 積集合(x, y)) && //任意のintersectionも要素となる必須条件 | 所属(s, 和集合(x, y)) //任意のunionも要素も要素となる必須条件 | ))) 全てがビット演算のみで済んでいるようだから どの言語で書いてもこれ以上はシンプルかつ高速にならないと思われる
794 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 00:20:42.47 ID:PoGWmBV8.net] また本人が自画自賛し始めたw この手の処理はbit演算では書かないよw 自分で調べてみればいいw 競プロマニア君が速いコード書けないのに頑張ったって言ってもらいたいらしいw
795 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 00:33:18.39 ID:BBGNEHmu.net] >>783 べき集合ならbit表現が最も自然で効率的なんじゃない? 他に効率的な表現あるの?
796 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 01:17:15.21 ID:PoGWmBV8.net] それにしか使えないから書かないんだよw
797 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 01:24:54.54 ID:+ow6V/HP.net] >>783 それより速いコードを書けるならば出してみ どうせ口だけデマカセなんだろ
798 名前:デフォルトの名無しさん [2022/03/27(日) 01:29:17.18 ID:snCfFGlK.net] 普段の仕事もコードを一切書かないで口だけ出す仕事なんだろうな。
799 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 03:56:07.43 ID:PoGWmBV8.net] >>786-787 >>783
800 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 06:10:36.04 ID:WvsZWRxm.net] >>783 他の方法でもっと速いのが書けると言うわけか ならば俺が公平にベンチ取ってやろう コードを出してくれ
801 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 07:40:41.39 ID:mRPtF6UE.net] >>788 >>780 ww
802 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 08:50:56.35 ID:PoGWmBV8.net] >>790 >>780
803 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 08:52:43.09 ID:KQB4wW2v.net] そうやって以後は安価で
804 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 08:53:00.96 ID:0J12mqZ3.net] オウム返しのつもりとか恥の上塗りw
805 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 08:58:56.59 ID:XGyUiIw6.net] >>783 これはbit演算でええやろ もっと良い方法があるなら教えてや
806 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 10:19:26.28 ID:6AFZPnaE.net] >>783 bit演算より速いコードってなにかある?
807 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 10:31:00.82 ID:rqiHHq3k.net] > この手の処理はbit演算では書かないよw 一切コードを書かないならこれは真だなw
808 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 10:49:42.15 ID:PoGWmBV8.net] >>792-796 >>783
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 名前:通りのデストラクタが動いてるか怪しい挙動するデストラクタのが問題起こりまくりだわ。 [] [ここ壊れてます]
910 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 17:44:36.67 ID:77d+30yb.net] >>895 > そんなの一行書くだけろ。。 できないプログラマーの典型で草 一行書くだけだから確実にできると言うならバグは無くなるわ > むしろ意図通りのデストラクタが動いてるか怪しい挙動するデストラクタのが問題起こりまくりだわ。 それはお前の能力が足らんだけ
911 名前:デフォルトの名無しさん [2022/04/03(日) 17:49:59.46 ID:rc6NcMYZ.net] >>895 defer使えば怪しい挙動は絶対しないとでも?
912 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 17:57:55.57 ID:9lFqLTmO.net] デストラクタでリソースが解放されることを保証するのはデータ構造を定義する人だけど deferの場合はデータ構造を使う人の責任になる データ構造を定義する回数と使う回数では普通は後者の方が多くなるから deferの方が間違いを起こしやすいと
913 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 19:34:48.12 ID:W9pHkRzU.net] >>894 実行時にオーバヘッドが出る形でしか実現できないやん
914 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 20:40:47.40 ID:9lFqLTmO.net] >>899 オーバーヘッドが出てるのって具体的に何のこと? stdのLinkedListの実装にもオーバーヘッドあるの?
915 名前:デフォルトの名無しさん mailto:sage [2022/04/04(月) 09:02:06.19 ID:14cK0a9Z.net] >>900 LinkedListってunsafeで実装されてるんだけど静的にメモリセーフティを実現する言語機能があるRustでそれをするっておかしいよね? それって行儀よく実装するとオーバーヘッドが出ることの裏返しだよね?ちょっとは頭を使おうか?
916 名前:デフォルトの名無しさん mailto:sage [2022/04/04(月) 09:14:12.42 ID:y2zkcNcq.net] >>901 えっ、じゃあなんでunsafeという機能がわざわざ用意されてるの? 頭使って考えてみて
917 名前:デフォルトの名無しさん mailto:sage [2022/04/04(月) 09:31:58.76 ID:WSInp7AV.net] >>901 linked listに限らず何でもunsafeで作られているよ unsafeは悪ではなく、安全なインタフェースを備えた型やモジュールの内部に閉じ込めるもの その結果Rustではプログラム全体の安全性を保証できる 悪なのはプログラム全体がunsafe状態なC/C++
918 名前:デフォルトの名無しさん mailto:sage [2022/04/04(月) 09:56:40.12 ID:88Lrr0N7.net] >>902 そりゃRustの型システムがオーバーヘッドが起こるやり方でしか安全性を保証できないからでしょ? 頭使えないんだねかわいそう
919 名前:デフォルトの名無しさん mailto:sage [2022/04/04(月) 10:04:31.11 ID:y2zkcNcq.net] >>904 そうそう、コンパイラとプログラマの責任範囲を明確化するための仕組みだよね 結局 >>899 で言いたかったのは safe rust だけで LinkedList を実装するとオーバーヘッドが生じると言うことだったんだね
920 名前:デフォルトの名無しさん mailto:sage [2022/04/04(月) 10:09:11.84 ID:9r+bgOYm.net] >>903 それってRustの型システムに基づいて行儀よく実装するとオーバーヘッドが出ることへの反論になってないよね? つまりRustの型システムはdoubly linked listを含めたあらゆるデータ構造をオーバーヘッドなく実装できるほどの表現力がないってことだよね
921 名前:デフォルトの名無しさん mailto:sage [2022/04/04(月) 10:23:50.48 ID:y2zkcNcq.net] >>906 safe rustの範疇ではあらゆるデータ構造を表現できないのはその通り なのでunsafeというescape hatchを用意している rustはpureな言語ではないのでコンパイラですべての安全性を保証することは最初から狙ってないよ
922 名前:デフォルトの名無しさん mailto:sage [2022/04/04(月) 10:34:53.41 ID:M7C/Fpbq.net] >>906 それは違う 例えばVec(ベクタ)はRustが標準ライブラリで提供している型だが LinkedList(二重リンクリスト)もRustが標準ライブラリで提供している型である VecもLinkedListも内部でunsafeを用いているが安全なインタフェースのみを公開している その両者に違いはなくRustによる安全性の保証に何も問題を及ぼしていない
923 名前:デフォルトの名無しさん mailto:sage [2022/04/04(月) 13:39:53.90 ID:RabHiWd3.net] オーバーヘッドwってことでいいじゃん 中途半端な知識でムキになるから無駄なやり取りが続くんだよ
924 名前:デフォルトの名無しさん mailto:sage [2022/04/04(月) 15:17:06.36 ID:ilb8jjlp.net] >>908 > VecもLinkedListも内部でunsafeを用いているが安全なインタフェースのみを公開している ホントかなぁ。 ベクターやリストが管理するオブジェクト参照を、別の参照ポインタ に代入して、ベクターやリストを破棄した後で参照を使うとぬるぽになりそうだけど? これを防ぐには、ベクターやリスト自体はもちろん、各要素や生ポインタを含めて あらゆる変数に参照カウンタを設けた上で、参照数が0になったタイミングでオブ ジェクト自動破棄する必要があるが、まさにオーバーヘッド。
925 名前:デフォルトの名無しさん mailto:sage [2022/04/04(月) 18:59:43.72 ID:RDBERkGC.net] rustって、unsafe使っていても メモリ安全のチェックはしてくれるって事であってる?
926 名前:デフォルトの名無しさん mailto:sage [2022/04/04(月) 19:11:22.90 ID:vi3Hd2oR.net] >>911 そんなことはない。 ttps://doc.rust-jp.rs/book-ja/ch19-01-unsafe-rust.html
927 名前:デフォルトの名無しさん mailto:sage [2022/04/04(月) 19:18:31.93 ID:UrWVuubJ.net] rustって、制限きついなら制限緩い他の言語に変換しやすいとかある?
928 名前:デフォルトの名無しさん mailto:sage [2022/04/04(月) 20:04:42.98 ID:0mSmJ0PC.net] 標準ライブラリに問題がないって言い切れるの? コンパイラとか標準ライブラリを盲信できるほど完成度高いんですかね 盲信してると不具合の発見に支障が出そう
929 名前:デフォルトの名無しさん mailto:sage [2022/04/04(月) 20:07:34.39 ID:Aq9lII9f.net] 嫌なら使わなければいいだけやろ
930 名前:デフォルトの名無しさん mailto:sage [2022/04/04(月) 20:19:31.81 ID:VNZL7sLo.net] >>910 そんなRustの初歩くらいは学んでからレスしようぜw
931 名前:デフォルトの名無しさん mailto:sage [2022/04/04(月) 20:23:28.80 ID:y2zkcNcq.net] >>914 プログラムがバグった時にまず自分のコードを疑うべきと言える程度には信頼できると思うよ
932 名前:デフォルトの名無しさん mailto:sage [2022/04/04(月) 20:28:34.57 ID:88Lrr0N7.net] >>916 オーバーヘッドなのは否定できてなくて草
933 名前:デフォルトの名無しさん mailto:sage [2022/04/04(月) 20:41:28.56 ID:y2zkcNcq.net] >>910 > ベクターやリストが管理するオブジェクト参照を、別の参照ポインタ > に代入して、ベクターやリストを破棄した後で参照を使うとぬるぽになりそうだけど? 以下のようなコードを意図してるんだと思うけど rust だとコンパイルエラーになるよ let v = vec![Box::new(1), Box::new(2)]; let ptr = &v[1]; drop(v); println!("{ptr}"); https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=f4b4be3e93f71ec0828c6039dd156cb7
934 名前:デフォルトの名無しさん mailto:sage [2022/04/04(月) 20:48:51.57 ID:ZmDtAG5s.net] >>914 今までにコンパイラやライブラリのバグ見つけたことある? 自分が作り込んだバグとどっちが多かった?
935 名前:デフォルトの名無しさん mailto:sage [2022/04/04(月) 21:00:31.84 ID:V8HUi7lD.net] 殆どの言語が標準ライブラリはバグってたりセキュリティの穴見つかったりして更新し続けてるがな。
936 名前:デフォルトの名無しさん mailto:sage [2022/04/04(月) 21:11:15.35 ID:y9KalPQq.net] メモリ安全性に関していえば Rustなら不具合の可能性があるのはコンパイラとライブラリのunsafe領域だけだけど (しかもそれらはそこそこの人数でチェックされている) C/C++の場合ありとあらゆる箇所で可能性があるからな 盲信とかでなく単純に引く確率が低い
937 名前:デフォルトの名無しさん mailto:sage [2022/04/04(月) 21:11:46.66 ID:yn3hKO4L.net] libcにもバグあるしそれどころか カーネルもヤバい問題発覚することがある もうパソコンを窓から投げ捨てよう
938 名前:デフォルトの名無しさん mailto:sage [2022/04/04(月) 21:41:12.90 ID:dNgOu4No.net] >>921 だからそれお前が見つけたのか?
939 名前:デフォルトの名無しさん mailto:sage [2022/04/04(月) 22:18:49.72 ID:yJV2c6am.net] 初心者ほど「コンパイラのバグ」などと言い出す ダニング=クルーガー効果である
940 名前:デフォルトの名無しさん mailto:sage [2022/04/04(月) 23:05:18.52 ID:jLJ2cB6c.net] >>910 あまりにも無知なその知識でRustを叩くのは無理がある そういうケースも含めて検出してくれるのがRust だからRustはC++よりも圧倒的に優れている
941 名前:デフォルトの名無しさん mailto:sage [2022/04/05(火) 06:13:13.50 ID:l+kYPJyP.net] そろそろ飽きろよこの流れ
942 名前:デフォルトの名無しさん mailto:sage [2022/04/05(火) 09:01:35.21 ID:rwKxODkm.net] >>926 Rustはunsafe内のメモリ関連のバグまでは検出しないけど? 例えRustには無知だとしてもunsafeという語感からだけでunsafe内では何も保証されないってことは推測できるよね?
943 名前:デフォルトの名無しさん mailto:sage [2022/04/05(火) 09:22:45.52 ID:i/q849BZ.net] >>928 もちろんそう それ以外の部分をRustは保証してくれるから大手IT企業を初めとして皆が採用している 全てがunsafeなC++を捨てつつある、
944 名前:デフォルトの名無しさん [2022/04/05(火) 11:55:20.23 ID:Md/fZtCu.net] 2038年問題を再発させるコードが多数の場所にコピーされてしまっている ttps://gigazine.net/news/20220330-2038-problem/ > エイドリアンさんが調べた限りでは、下記のリポジトリにて問題のあるコードが使用されていたとのことです。 > > O3DE > Dokany > Ceph-Dokan > libarchive > ghc::filesystem > ImageMagick > Cxbx-Reloaded > ReactOS > > また、下記のリポジトリについては記事作成時点で既にエイドリアンさんの指摘を受けてコード修正済みとなっていました。 > > OpenRCT2 > DuckStation
945 名前:デフォルトの名無しさん mailto:sage [2022/04/06(水) 03:36:26.34 ID:A9app5rs.net] >>919 それ、子スレッドで実行する関数に引数として渡して、スレッド終了を待たずに 親スレッド側で解放するとかしたら、コンパイルエラーにならないと思うけど?
946 名前:デフォルトの名無しさん mailto:sage [2022/04/06(水) 03:42:32.00 ID:ryRy0Ktk.net] >>931 そんなことは不可能だろう まずは基本的知識を学べや
947 名前:デフォルトの名無しさん mailto:sage [2022/04/06(水) 04:46:14.51 ID:MueoLJZZ.net] エスパーさせんな、コードで示せ
948 名前:デフォルトの名無しさん mailto:sage [2022/04/06(水) 09:00:45.09 ID:Z4fh8uHR.net] >>931 見事な恥の上塗りでワロタ
949 名前:デフォルトの名無しさん [2022/04/06(水) 09:22:57.25 ID:A9app5rs.net] >>932 何が不可能なの? 参照渡しされた場合、スレッド関数側ではメインスレッド側で 解放される変数の寿命が判らないから、参照カウントで実行時にはオブジェクト 寿命を管理できても、少なくともコンパイル時のエラーにはならないと思うが? >>933 Rustやってないし、やる気もない。 ちなみに、919みたいなケースは実際にはそもそも書かないが、コンパイラ依存だけど 戻り値としてローカル変数への参照を返すとかは、最近のC++だと警告が出る。 可変引数のprintf()等でも、昔は書式制御文字列と引数の数や型が一致していなく てもノーチェックだったけど、最近は警告が出るし。
950 名前:デフォルトの名無しさん mailto:sage [2022/04/06(水) 09:29:13.74 ID:OcEMaDN/.net] >>935 妄想で思い込みをして架空の意味のない話を進めて批判している なんと愚かなことだろう
951 名前:デフォルトの名無しさん mailto:sage [2022/04/06(水) 10:57:59.47 ID:X0SajXCN.net] >>931 エラーになるよ use std::{thread, time::Duration}; fn main() { let v = vec![Box::new(1), Box::new(2)]; thread::spawn(|| { thread::sleep(Duration::from_secs(100000)); let ptr = &v[1]; println!("{ptr}"); }); drop(v); } https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=6ffcf2e259e138e27d653db6fdd4fc98
952 名前:デフォルトの名無しさん mailto:sage [2022/04/06(水) 11:01:15.13 ID:BAnc7YwE.net] >>935 C++相当のコードか擬似コードでもいいからお前が言う操作のコードを出せ スレッド間操作か参照の使い方周りでC++でもぶっ壊れるやつな Rust使いの誰かがコンパイルの通しようがないって教えてくれるだろうよ
953 名前:デフォルトの名無しさん mailto:sage [2022/04/06(水) 11:41:09.81 ID:A9app5rs.net] >>397 それ、同じmain()スコープの中で宣言しているローカル関数だからでは? 普通、そんな書き方せんでしょ。 thread::spawnで起動している、無名関数を、引数ありの独立した関数として 定義して、参照渡しとしてスレッド実行した場合、コンパイル時の静的解析 ではエラー検出できない。
954 名前:デフォルトの名無しさん mailto:sage [2022/04/06(水) 11:55:40.05 ID:KqMgG2U/.net] 流石にこのレベルの人を叩いて悦に入るのはやめようぜ
955 名前:デフォルトの名無しさん mailto:sage [2022/04/06(水) 12:00:23.11 ID:a0CdlgS1.net] >>939 意味不明だな 実際にそういうコードをわかるように書いてくれ
956 名前:デフォルトの名無しさん mailto:sage [2022/04/06(水) 15:45:42.18 ID:MueoLJZZ.net] thread::spawnには引数無しのクロージャしか渡せません pthread_createとかで明示的にvoid *を渡すのに相当する処理は、Rustだとこの引数無しクロージャにキャプチャさせる方法で実現されます で、それをやってるのが>>937 です
957 名前:デフォルトの名無しさん mailto:sage [2022/04/06(水) 16:11:31.38 ID:Dn8F6G2j.net] >>924 VCいじってりゃ嫌でもforループ前の初期化バグにぶち当たるわ。 最適化オプション下げるとか、for内でやるのをやめるとかいろいろ修正方法はあるが。 むしろいままでコンパイラバグに当たらない方が不思議。 お前仕事してんのかって疑われるレベル。
958 名前:デフォルトの名無しさん mailto:sage [2022/04/06(水) 16:23:15.68 ID:2Jp54xD1.net] forループ前の初期化バグってどんなの?
959 名前:デフォルトの名無しさん mailto:sage [2022/04/06(水) 17:07:47.57 ID:X0SajXCN.net] >>931 こういうこと?これもエラーになる。 use std::{thread, time::Duration}; fn main() { let v = vec![Box::new(1), Box::new(2)]; thread::spawn(|| sub(&v[1])); drop(v); } fn sub(ptr: &i32) { thread::sleep(Duration::from_secs(100000)); println!("{ptr}"); } https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=d90b955b8539696c776b1d44b0e8c5a9 ちなみにこれはコンパイルが通る https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=38157f3760d2ce9dde7d9d22c74195ad これは通らない https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=38157f3760d2ce9dde7d9d22c74195ad
960 名前:デフォルトの名無しさん mailto:sage [2022/04/06(水) 17:09:04.34 ID:X0SajXCN.net] >>945 URL間違えた コンパイル通るやつ https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=10577ae2a6cdd42a9815971f82772c3a コンパイル通らないやつ https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=9080880c0cab4626cd94cf4806b2e5a2
961 名前:デフォルトの名無しさん mailto:sage [2022/04/06(水) 17:18:09.35 ID:vFuVta1u.net] >>943 具体的に書けよw
962 名前:デフォルトの名無しさん mailto:sage [2022/04/06(水) 18:45:31.77 ID:A9app5rs.net] >>945 > こういうこと?これもエラーになる。 Rustの文法がよう判らんけど、おおむね合ってると思う。 ちなみに、C/C++だと大規模プログラム開発を想定して、ソース分割による分割 コンパイルや、ライブラリ化という仕組みがあるわけだが、Rustの言語仕様って そのあたりどうなん? 例えば、スレッド関数「fn sub(ptr: &i32)」が、「fn main() 」を別のファイルに (例: main.cpp, sub.cpp のように)実装してビルドするとか、スレッド関数の 「fn sub(ptr: &i32)」だけをライブラリ(dllまたはlib)化するとかできるの? そもそも、Rust でライブラリを書いたり、Rust で書いたプログラムって、他の 言語で書かれたライブラリ(OpenCVとか)とリンクできるのか?
963 名前:デフォルトの名無しさん mailto:sage [2022/04/06(水) 18:47:00.11 ID:4TDuv4YW.net] pythonのライブラリとかgithubにいくらでもあるけど?
964 名前:デフォルトの名無しさん mailto:sage [2022/04/06(水) 18:52:54.88 ID:X0SajXCN.net] >>948 モジュール分割は普通に備えてる というかC/C++のモジュール分割は貧弱な方で、大半の言語はまともな仕組み備えてるよ Rustでライブラリ作ってCから呼び出したり、CのライブラリをRustから呼び出すこともランタイムとかめんどくさいこと考えずに普通にできる
965 名前:デフォルトの名無しさん mailto:sage [2022/04/06(水) 22:27:56.00 ID:MiVqlX0M.net] Rustのモジュール分割はC/C++の分割コンパイルとはちょっと違う気がする C/C++だとソースファイルごとにコンパイルしてオブジェクト(.o)作ってからリンカでまとめるけど Rustは最初にcrate内のソースを1つにまとめてから一気にコンパイルする感じ (見えない部分で分割してるっぽいけどソースファイル単位じゃないしプログラマは意識しない) C/C++の.dllとか.libに対応するのはRustだとcrateになるからsubだけライブラリ化するなら ファイルを分けるというよりプロジェクト(crate)を分ける感じになるかな C/C++の.oに相当する中間ファイルはRustだと存在しないはず
966 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 06:01:34.50 ID:yfLrBpxG.net] いやgolangよりCとの相互利用はマシだけど、褒められるほどRustにCとの互換性はないよ。Dとかのほうがまだまし
967 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 07:14:19.71 ID:Ug2bY/ov.net] RustとC++の相互呼び出しはCXXで完璧や
968 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 07:28:15.01 ID:G2jE/Lgc.net] ぶっちゃけモジュール分割がなんでよしとされてるのかがわからない 過大評価やろ parseにオーバーヘッドあると言われているけどC/C++のような分割コンパイルの方が並列化できるしええやん
969 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 09:21:09.02 ID:0q4aQzv/.net] C++にはモジュール導入したいという 話はずっと前からなかったっけ
970 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 09:32:06.83 ID:jLJRe/XC.net] 分割コンパイルはgenericsとかtemplateと相性が悪いんだよね(C++の悩みの種になってるはず) Cの時代のマシンパワーだと最適解だったと思うけど Rustの // main.rs mod foo { pub fn f() {} } と // main.rs mod foo; // foo.rs pub fn f() {} を等価とみなせる言語設計は分かりやすくて余計な悩みが少ない
971 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 12:15:13.87 ID:Fr57TkZu.net] >>951 ちょっと調べてみたが、RustってFlutterと同様、結局のところ単なるコンパイラ コンパイラ(Rust→C++, Dart→C++)じゃんよ。 だから、どちらもターゲットプラットフォーム用のC++コンパイラ(Windowsなら Visual Studio(Build Tools)または MinGW、macOSならXcode)が要る。 > C/C++の.oに相当する中間ファイルはRustだと存在しないはず 隠蔽されているだけで、vclやgccが動いてリンカーに渡す段階で、オブジェクト ファイル(.oや.obj)が生成されている。 スタティックライブラリ(.aや.lib)は、 単なるオブジェクトファイルの寄せ集めなので、他のOSS含めてリンクできる。 オブジェクトファイル自体に対応していなけりゃスタティックライブラリをリンク できないし、ELFフォーマットのデバッガも使えないし、malloc()等のランタイム との内部整合性も取れないからな。 自転車に乗れない(C++で安全なプログラムが書けない)プログラマ向けの補助輪 みたいなもんか?
972 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 12:27:13.60 ID:lezm9YBI.net] >>957 前半は何言ってるのかわからんが codegen unitごと.oファイルが生成されるのはその通り codegen unitはソースレベルのmoduleごとに2つずつ作られcodegen単位で並列化される
973 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 12:32:34.52 ID:HPvPKplB.net] >>957 デタラメすぎる RustコンパイラはCコードやC++コードを生成しません あなたの書いていることは全て間違っています
974 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 12:44:03.67 ID:jLJRe/XC.net] >>957 main.cに対応するmain.oが存在しないという意味で書いたつもりだった 混乱させたみたいですまない
975 名前:デフォルトの名無しさん [2022/04/07(木) 12:45:05.63 ID:pUyNlzjX.net] >>957 補助輪、というより電動機かな 同じ自転車だけど、少ない力でこげる 結果的に同じ体力でより遠くへ行ける
976 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 13:35:54.27 ID:tEZE72Zs.net] Rustやる気ないとか言う割にはずいぶんと熱心じゃん The Bookあたりから読み始めてみては?
977 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 13:49:05.41 ID:Fr57TkZu.net] >>959 > RustコンパイラはCコードやC++コードを生成しません だったら、Visual Studio (Build Tools)や、Min-GW、Xcode等がインストール されていない環境で、Rustだけをインストールしてバイナリ生成してみな。 下請けにプラットフォーム固有のC++コンパイラを使っているから、ターゲット プラットフォーム毎に、オフラインインストーラ―が存在するんだよ。 ttps://forge.rust-lang.org/infra/other-installation-methods.html
978 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 14:01:29.41 ID:tEZE72Zs.net] >>963 それはできない ただしその理由はコンパイラを下請けとして利用しているからじゃなくて、リンカを下請けとして利用しているからだよ > Why might one not want to install using those instructions? > * Offline installation. ... 斜め読みしすぎじゃないですかね? オフラインインストーラがあるなんてどこに書いてある?
979 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 14:32:47.76 ID:0q4aQzv/.net] 空想上のRustに似た言語叩きする人多いな
980 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 14:49:00.36 ID:DqPGONrT.net] LLVMを知らないんだろ もう引退するお年頃
981 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 15:03:24.56 ID:cqCq8D8c.net] 5chに常駐してるようなC++民はビックリするほど見識が狭いよな ある意味コボラーと同じ人種
982 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 15:09:08.48 ID:Fr57TkZu.net] > オフラインインストーラがあるなんてどこに書いてある? 折角リンクを貼ってやったのに英語読めないの? 「Standalone installers」って とこ。 > The official Rust standalone installers contain a single release of Rust, > and are suitable for offline installation. その下にリンク集の表があるでしょ。 以下、直リンク抜粋 Windows+GCC(32-bit)用 https://static.rust-lang.org/dist/rust-1.59.0-i686-pc-windows-gnu.msi Windows+MSVC(32-bit)用 https://static.rust-lang.org/dist/rust-1.59.0-i686-pc-windows-msvc.msi Windows+GCC(64-bit)用 https://static.rust-lang.org/dist/rust-1.59.0-x86_64-pc-windows-gnu.msi Windows+MSVC(64-bit)用 https://static.rust-lang.org/dist/rust-1.59.0-x86_64-pc-windows-msvc.msi
983 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 15:34:45.27 ID:wO4kVij8.net] >>968 それは単にプラットフォーム毎にビルド済みのRustコンパイラと標準ライブラリが違うだけ いずれにしてもC++に変換してC++コンパイラを使ってるなんて事実はない
984 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 15:35:55.43 ID:tEZE72Zs.net] >>968 ああそこはこちらの勘違いでしたね すみません
985 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 15:55:01.85 ID:gcjUoiEr.net] ちんちんシュッ!シュッ!シュッ!
986 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 18:28:45.48 ID:6J24GmAj.net] >>954 クソデカヘッダファイルのパースコストは馬鹿にならないよ コンパイラはプリコンパイル済みヘッダファイルを用意したり、涙ぐましい努力をしている >>957 rustが必要としてるのはVS Build Toolのリンカやランタイムで、コンパイル自身はrustcというかLLVMがやっている vclは動かないよ
987 名前:デフォルトの名無しさん [2022/04/07(木) 22:11:21.15 ID:cJXUldxb.net] Rustの集大成と言えるFirefoxが世界で一番固まるブラウザとして名高いのだから、ユーザーに嫌がらせしたいプログラマはRustを使うべき。 タブレットモードで使ってると毎日一回は操作不能になるからね。 電源ボタン長押しして強制リセットするしかなくなる。
988 名前:デフォルトの名無しさん [2022/04/07(木) 23:12:28.96 ID:6mRJTF59.net] >>963 コンパイラとリンカを一緒くたにされてもなぁ。 それ言ったらc/c++も結局アセンブラ必要じゃん。 c/c++なんてアセンブリ言語使えない奴向けの補助輪じゃん。
989 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 23:26:31.11 ID:YR3mJewM.net] そいやRUSTってオプションでアセンブラ出力させたり出来るの?
990 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 23:27:28.73 ID:YR3mJewM.net] >>973 まだservoとかだけでしょ?
991 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 00:19:49.85 ID:PcnkB3on.net] >>973 アプリケーションのせいで電源強制断を要求されるのはOSが悪いのでは... というのはさておきfirefoxの悪い部分がrustに依るものってのはどうやって調べたの?
992 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 01:42:20.81 ID:uV0lTSE5.net] それにマジレスするか
993 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 06:18:52.60 ID:8k2J9S8r.net] >>973 もしそれが本当ならばWindowsでの問題でしょう LinuxでFirefoxを使っているけど一度も固まったことがない
994 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 07:35:26.61 ID:UBiXicJa.net] 俺はwindowsでEdge使ってるけど一度も固まったことないな
995 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 07:40:49.60 ID:OhTsNUjo.net] Rustを叩くために>>973 が適当なホラを吹いてるのだろう 毎日固まるブラウザなんてあるわけないし 頻出するバグがあったらすぐに修整される
996 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 07:57:10.73 ID:phXvIdWB.net] そもそも>>725 が書いてるけどrustはまだ全体の1割位しか使ってないのにrustの集大成とかアホ晒しすぎw
997 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 08:00:48.24 ID:Z05AA1u1.net] firefoxは固まるもの。 固まったところで誰も気にしない
998 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 08:02:17.06 ID:cn2WsGzN.net] >>983 どんな環境で使っている? 一度も固まったことない
999 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 09:36:43.82 ID:gFm4wviN.net] >>982 登場して10年で1割ですか。100年後もfirefoxが動いてるといいですね。
1000 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 09:59:58.15 ID:Fa4rer7L.net] 既に昔からある動いているモジュールを書き換える無駄なことはしないからそんなもんじゃね? そもそもRust自体も他の言語と同様にlibc含めて鉄板のC製ライブラリ使いまくるしな どの言語でもそのへんは同じだろ
1001 名前:デフォルトの名無しさん [2022/04/08(金) 14:54:35.66 ID:aIPGNTn3.net] firefox は固まるっていうかメモリリークだな rust のコードが unsafe だらけになっているのかは知らんが タブを閉じても使い終わったメモリを開放しない ひたすら使用メモリが増え続けswapがいっぱいになって固まる
1002 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 14:59:41.50 ID:LPi7J7jk.net] >>987 両方を使ってみればわかるが メモリをバカ食いするのはChromeの方
1003 名前:デフォルトの名無しさん [2022/04/08(金) 15:37:14.24 ID:aIPGNTn3.net] >>988 自分は firefox で swap に悩まされてて その後 chromium 系の vivaldi とか brave にして一気に快適になった メモリ4Gのマシンに linux 64bit を入れてた時の話だけど
1004 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 07:13:47 ID:i2DHgPAx.net] firefoxのせいで、スレまでの流れまで止まったな
1005 名前:デフォルトの名無しさん mailto:sage [2022/0
] [ここ壊れてます]
1006 名前:4/15(金) 14:27:51.53 ID:sD2CwuNi.net mailto: >>957 なるほど 最初のころのC++といっしょで 単なるトランスレーターなんかrustって [] [ここ壊れてます]
1007 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 14:38:25.40 ID:sD2CwuNi.net] >>987 通信障害起こしてるのをfirefoxのせいにされてもなww firefox使ってる最中に固まったことあったよ 使ってる最中にSSDが死んでアクセス不能になったのが原因だった
1008 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 15:14:39.30 ID:k/yGxJzN.net] >>991 ちがうよ rustでのビルド必要なのはターゲットプラットフォーム用のリンカであってC++コンパイラは不要 RustはLLVM使ってるからLLVM bitcodeへのコンパイラとは言えるかも知れないけどC++は一切関与しないよ
1009 名前:デフォルトの名無しさん [2022/04/15(金) 17:33:35.75 ID:k+WJVc0v.net] >>991 バカそうなやつ
1010 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 20:07:09.22 ID:sD2CwuNi.net] リリースされて10年経過する言語に思いを寄せてるのは馬鹿の骨頂だろwww お前といっしょでもう終わってんだよハナタレ せめてIARあたりがリリースしてたんなら話は別だがな どこぞのチップメーカでrustコンパイラ出してるとこあったけ? チップメーカが見向きもしない言語それがRust って認識でFA? あ、そーそ、SystemC rustで書けるか? これぐらい書けなきゃC++はreplaceできない C++をreplaceが目標じゃなかったっけ?
1011 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 20:14:02.55 ID:sD2CwuNi.net] 大体 Rustなんてネーミングがセンスなさすぎだろ。あほすぎて。これで洒落たつもりかよ。 これからぴかぴかの新製品投入するときにRustてwwww 機械メーカなら絶対採用したくい名前だろこんなもん
1012 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 20:26:31.06 ID:k/yGxJzN.net] >>995 LLVMって知ってる?
1013 名前:デフォルトの名無しさん [2022/04/15(金) 20:35:07.13 ID:k+WJVc0v.net] >>996 確かに
1014 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 20:37:43.23 ID:tyfulKnM.net] というか何故か言語って大概ネーミングに疑問符がつくような感じだよね
1015 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 20:38:50.95 ID:sD2CwuNi.net] rustてさび以外に "役に立たない" て意味もあるのな まさに、理念のみの 役 た た ず 言 語
1016 名前:1001 [Over 1000 Thread.net] このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 77日 22時間 19分 4秒
1017 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています