文字数制限きついので改題
スレタイ以外の言語もok
前スレ
次世代言語議論スレ[Rust Kotlin Haskell]第6世代
http://mevius.5ch.net/test/read.cgi/tech/1503924817/
探検
次世代言語Part7[Go Rust Swift Kotlin TypeScript]
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2017/10/19(木) 17:51:38.66ID:EPSDvC75169デフォルトの名無しさん
2017/10/26(木) 12:29:34.82ID:P+s05bng fn right_end(root: &Option<Box<Tree>>) -> &Option<Box<Tree>> {
if root.is_none() {
root
} else if root.as_ref().unwrap().right.is_none() {
root
} else {
right_end(&root.as_ref().unwrap().right)
}
}
fn skew(mut root: Option<Box<Tree>>) -> Option<Box<Tree>> {
if root.is_none() {
return root;
} else if root.as_ref().unwrap().left.is_none() {
return root;
} else if root.as_ref().unwrap().left.as_ref().unwrap().level != root.as_ref().unwrap().level {
return root;
}
let mut left = root.as_mut().unwrap().left.take();
root.as_mut().unwrap().left = left.as_mut().unwrap().right.take();
left.as_mut().unwrap().right = root;
left
}
(まだ続く)
if root.is_none() {
root
} else if root.as_ref().unwrap().right.is_none() {
root
} else {
right_end(&root.as_ref().unwrap().right)
}
}
fn skew(mut root: Option<Box<Tree>>) -> Option<Box<Tree>> {
if root.is_none() {
return root;
} else if root.as_ref().unwrap().left.is_none() {
return root;
} else if root.as_ref().unwrap().left.as_ref().unwrap().level != root.as_ref().unwrap().level {
return root;
}
let mut left = root.as_mut().unwrap().left.take();
root.as_mut().unwrap().left = left.as_mut().unwrap().right.take();
left.as_mut().unwrap().right = root;
left
}
(まだ続く)
170デフォルトの名無しさん
2017/10/26(木) 12:30:37.02ID:P+s05bng fn split(mut root: Option<Box<Tree>>) -> Option<Box<Tree>> {
if root.is_none() {
return root;
} else if root.as_ref().unwrap().right.is_none() {
return root;
} else if root.as_ref().unwrap().right.as_ref().unwrap().right.is_none() {
return root;
} else if root.as_ref().unwrap().right.as_ref().unwrap().right.as_ref().unwrap().level != root.as_ref().unwrap().level {
return root;
}
let mut right = root.as_mut().unwrap().right.take();
root.as_mut().unwrap().right = right.as_mut().unwrap().left.take();
right.as_mut().unwrap().left = root;
right.as_mut().unwrap().level += 1;
right
}
if root.is_none() {
return root;
} else if root.as_ref().unwrap().right.is_none() {
return root;
} else if root.as_ref().unwrap().right.as_ref().unwrap().right.is_none() {
return root;
} else if root.as_ref().unwrap().right.as_ref().unwrap().right.as_ref().unwrap().level != root.as_ref().unwrap().level {
return root;
}
let mut right = root.as_mut().unwrap().right.take();
root.as_mut().unwrap().right = right.as_mut().unwrap().left.take();
right.as_mut().unwrap().left = root;
right.as_mut().unwrap().level += 1;
right
}
171デフォルトの名無しさん
2017/10/26(木) 12:31:04.94ID:P+s05bng fn decrease_level(mut root: Option<Box<Tree>>) -> Option<Box<Tree>> {
if root.is_none() {
return root;
}
let left_level = level(&root.as_ref().unwrap().left);
let right_level = level(&root.as_ref().unwrap().right);
let mut expected_level = 0;
if left_level < right_level {
expected_level = left_level + 1
} else {
expected_level = right_level + 1
}
if expected_level < root.as_ref().unwrap().level {
root.as_mut().unwrap().level = expected_level;
if root.as_ref().unwrap().right.is_some() {
if expected_level < root.as_ref().unwrap().right.as_ref().unwrap().level {
root.as_mut().unwrap().right.as_mut().unwrap().level = expected_level;
}
}
}
root
}
if root.is_none() {
return root;
}
let left_level = level(&root.as_ref().unwrap().left);
let right_level = level(&root.as_ref().unwrap().right);
let mut expected_level = 0;
if left_level < right_level {
expected_level = left_level + 1
} else {
expected_level = right_level + 1
}
if expected_level < root.as_ref().unwrap().level {
root.as_mut().unwrap().level = expected_level;
if root.as_ref().unwrap().right.is_some() {
if expected_level < root.as_ref().unwrap().right.as_ref().unwrap().level {
root.as_mut().unwrap().right.as_mut().unwrap().level = expected_level;
}
}
}
root
}
172デフォルトの名無しさん
2017/10/26(木) 12:31:51.05ID:P+s05bng fn insert_tree(mut root: Option<Box<Tree>>, value: i32) -> Option<Box<Tree>> {
if root.is_none() {
root = Some(Box::new(Tree {
value: value,
left: None,
right: None,
level: 1, }));
} else if value > root.as_ref().unwrap().value {
root.as_mut().unwrap().right = insert_tree(root.as_mut().unwrap().right.take(), value);
} else {
root.as_mut().unwrap().left = insert_tree(root.as_mut().unwrap().left.take(), value);
}
root = skew(root);
root = split(root);
root
}
if root.is_none() {
root = Some(Box::new(Tree {
value: value,
left: None,
right: None,
level: 1, }));
} else if value > root.as_ref().unwrap().value {
root.as_mut().unwrap().right = insert_tree(root.as_mut().unwrap().right.take(), value);
} else {
root.as_mut().unwrap().left = insert_tree(root.as_mut().unwrap().left.take(), value);
}
root = skew(root);
root = split(root);
root
}
173デフォルトの名無しさん
2017/10/26(木) 12:34:16.58ID:P+s05bng fn remove_tree(mut root: Option<Box<Tree>>, value: i32) -> Option<Box<Tree>> {
if root.is_none() { return root; }
else if value == root.as_ref().unwrap().value {
if root.as_ref().unwrap().left.is_none() && root.as_ref().unwrap().right.is_none() {
return None;
} else if root.as_ref().unwrap().left.is_none() {
let succ = {
let end = left_end(&root.as_ref().unwrap().right);
end.as_ref().unwrap().value
};
root.as_mut().unwrap().right = remove_tree(root.as_mut().unwrap().right.take(), value);
root.as_mut().unwrap().value = succ;
} else {
let pred = {
let end = right_end(&root.as_ref().unwrap().left);
end.as_ref().unwrap().value
};
root.as_mut().unwrap().left = remove_tree(root.as_mut().unwrap().left.take(), value);
root.as_mut().unwrap().value = pred;
}
} else if value > root.as_ref().unwrap().value { root.as_mut().unwrap().right = remove_tree(root.as_mut().unwrap().right.take(), value); }
else { root.as_mut().unwrap().left = remove_tree(root.as_mut().unwrap().left.take(), value); }
関数途中です(1レスに収まらんかった)
if root.is_none() { return root; }
else if value == root.as_ref().unwrap().value {
if root.as_ref().unwrap().left.is_none() && root.as_ref().unwrap().right.is_none() {
return None;
} else if root.as_ref().unwrap().left.is_none() {
let succ = {
let end = left_end(&root.as_ref().unwrap().right);
end.as_ref().unwrap().value
};
root.as_mut().unwrap().right = remove_tree(root.as_mut().unwrap().right.take(), value);
root.as_mut().unwrap().value = succ;
} else {
let pred = {
let end = right_end(&root.as_ref().unwrap().left);
end.as_ref().unwrap().value
};
root.as_mut().unwrap().left = remove_tree(root.as_mut().unwrap().left.take(), value);
root.as_mut().unwrap().value = pred;
}
} else if value > root.as_ref().unwrap().value { root.as_mut().unwrap().right = remove_tree(root.as_mut().unwrap().right.take(), value); }
else { root.as_mut().unwrap().left = remove_tree(root.as_mut().unwrap().left.take(), value); }
関数途中です(1レスに収まらんかった)
174デフォルトの名無しさん
2017/10/26(木) 12:37:30.92ID:P+s05bng root = decrease_level(root.take());
root = skew(root.take());
root.as_mut().unwrap().right = skew(root.as_mut().unwrap().right.take());
if root.as_ref().unwrap().right.is_some() {
root.as_mut().unwrap().right.as_mut().unwrap().right = skew(root.as_mut().unwrap().right.as_mut().unwrap().right.take());
}
root = split(root.take());
root.as_mut().unwrap().right = split(root.as_mut().unwrap().right.take());
root
}
終わり。
クソコードの上に長くてほんとすんません。
あと、おもてのコードでは一度もunsafeは使ってはないけど
Option型のtakeメソッドが所有権を誤魔化すために裏でunsafe使ってる。
あとは、裏でも使ってないと思う。
root = skew(root.take());
root.as_mut().unwrap().right = skew(root.as_mut().unwrap().right.take());
if root.as_ref().unwrap().right.is_some() {
root.as_mut().unwrap().right.as_mut().unwrap().right = skew(root.as_mut().unwrap().right.as_mut().unwrap().right.take());
}
root = split(root.take());
root.as_mut().unwrap().right = split(root.as_mut().unwrap().right.take());
root
}
終わり。
クソコードの上に長くてほんとすんません。
あと、おもてのコードでは一度もunsafeは使ってはないけど
Option型のtakeメソッドが所有権を誤魔化すために裏でunsafe使ってる。
あとは、裏でも使ってないと思う。
175デフォルトの名無しさん
2017/10/26(木) 12:39:25.88ID:xVKEuI/f Rustトーシロの初見だけどこんなにunwrap必要なの怖いって気分になるな……
CのポインタをOption<Box<>>で表現してるからしゃーないとはいえ
CのポインタをOption<Box<>>で表現してるからしゃーないとはいえ
176デフォルトの名無しさん
2017/10/26(木) 12:39:26.85ID:P+s05bng ここまでやったらもう飽きた。
誰かメソッド構文とかコンビネータとかをきちんと使ったRustyなコードに書き換えて。
誰かメソッド構文とかコンビネータとかをきちんと使ったRustyなコードに書き換えて。
177あ
2017/10/26(木) 12:42:49.23ID:+cEqlMCT Rust嫌いな奴はCをすぐ引き合いに出すが、misraの案件やったら死ぬんじゃねえかなって思う。
GC言語も悪くはないぞ。ちゃんとGCの動き考えれば、正しく開放「されてない」理由もわかるだろ。
最初からデカイ配列を握って離さない、それを切り貼りして使う、みたいなJavaのプロジェクトあるしな。
GC言語も悪くはないぞ。ちゃんとGCの動き考えれば、正しく開放「されてない」理由もわかるだろ。
最初からデカイ配列を握って離さない、それを切り貼りして使う、みたいなJavaのプロジェクトあるしな。
178デフォルトの名無しさん
2017/10/26(木) 12:50:10.86ID:P+s05bng179デフォルトの名無しさん
2017/10/26(木) 16:47:19.95ID:hnEjL22C rustのコード<>だらけで読みにくい
これはlispの括弧みたいに慣れたら読みやすいものなのか?
これはlispの括弧みたいに慣れたら読みやすいものなのか?
180デフォルトの名無しさん
2017/10/26(木) 17:58:11.26ID:9syp6YaG >>153
難しいとは言ってもOOP→関数型のパラダイムシフトに比べれば簡単だけどね
難しいとは言ってもOOP→関数型のパラダイムシフトに比べれば簡単だけどね
181デフォルトの名無しさん
2017/10/26(木) 20:01:45.08ID:mFTohykf >>154
おい、お前でてこいよ
おい、お前でてこいよ
182デフォルトの名無しさん
2017/10/26(木) 21:09:45.15ID:LcYnzbeR rust も haskell も理解できても面倒だし無駄に言語に気使ってるだけじゃねーかって
思うんだが、信者はききやしない。。
「お前らは理解できないものを理解できる俺偉い」で思考停止しちゃってんだよ。
思うんだが、信者はききやしない。。
「お前らは理解できないものを理解できる俺偉い」で思考停止しちゃってんだよ。
183デフォルトの名無しさん
2017/10/26(木) 21:15:34.16ID:hnEjL22C 一番言語に気を遣わないといけないのはC++だがなw
184デフォルトの名無しさん
2017/10/26(木) 21:19:35.59ID:+/fzZ2Vi 型っていうシステムが
そもそも良くないっていうのは無いの?
そもそも良くないっていうのは無いの?
185デフォルトの名無しさん
2017/10/26(木) 21:46:13.96ID:OTLFFL6d186デフォルトの名無しさん
2017/10/26(木) 21:54:28.12ID:PekP06rX187デフォルトの名無しさん
2017/10/26(木) 21:55:02.68ID:mFTohykf >>185
てめえがしね
てめえがしね
188デフォルトの名無しさん
2017/10/26(木) 22:34:09.13ID:P+s05bng >>182
「俺偉い」はさすがにないわ。笑かすな。
Rustに移植してみての感想だけど、確かにコンパイルを通すのには苦労したけど、
通ってしまえばメモリーリークはないって安心感がある。これが重要。
特に今回はunsafe一度も使ってないからなおさら安心できる。
Cのほうのコード一通り眺めてメモリーリーク無いって確信できる?
それができる超人君なら確かにRustは全く必要ないが。
Rustは君の嫌う面倒さと引き換えに安心を得ることができる言語。
むしろCで書いたコードにメモリーリークがあるのかないのか
自分の書いたコードに自信が持てないやつのためにこそRustがあると思ってる。
面倒だけが理由で思考停止しているのはどっちだ。
>>185
確かにこのコードは汚いよな。そこは自覚してる。
マジで誰かRust風に書き換えてくれない?
動いたところまで確認したところで集中が切れてしまってもうやる気が出ない。
Rustはオブジェクト指向も関数型のパラダイムを両方とも持っているし、
きちんと書けばかなり綺麗で整ったコードに書き直せるはずなんだよ。
あと、Rustアンチに1つ聞きたいことがある。
Rustが嫌いってことはわかったけど、じゃあアンチ君の好きな(愛用してる)言語は何なの?
その言語のメリット・デメリット含めて詳しく解説してくんない?
「俺偉い」はさすがにないわ。笑かすな。
Rustに移植してみての感想だけど、確かにコンパイルを通すのには苦労したけど、
通ってしまえばメモリーリークはないって安心感がある。これが重要。
特に今回はunsafe一度も使ってないからなおさら安心できる。
Cのほうのコード一通り眺めてメモリーリーク無いって確信できる?
それができる超人君なら確かにRustは全く必要ないが。
Rustは君の嫌う面倒さと引き換えに安心を得ることができる言語。
むしろCで書いたコードにメモリーリークがあるのかないのか
自分の書いたコードに自信が持てないやつのためにこそRustがあると思ってる。
面倒だけが理由で思考停止しているのはどっちだ。
>>185
確かにこのコードは汚いよな。そこは自覚してる。
マジで誰かRust風に書き換えてくれない?
動いたところまで確認したところで集中が切れてしまってもうやる気が出ない。
Rustはオブジェクト指向も関数型のパラダイムを両方とも持っているし、
きちんと書けばかなり綺麗で整ったコードに書き直せるはずなんだよ。
あと、Rustアンチに1つ聞きたいことがある。
Rustが嫌いってことはわかったけど、じゃあアンチ君の好きな(愛用してる)言語は何なの?
その言語のメリット・デメリット含めて詳しく解説してくんない?
189デフォルトの名無しさん
2017/10/26(木) 23:26:00.76ID:LcYnzbeR はっきり言わせてもらうけれど、
この規模のコードで書くのにそれだけ苦労する価値があると思えんが。
メモリリークについてもこの規模なら一通り見て、あるかないかくらい判断できるよ。
まあ主観といえば主観だけれど
本当に本心からこの程度のコードについてメモリリークを心配しちゃってるの?
言語を持ち上げるために無理に納得しようとしてない?
この規模のコードで書くのにそれだけ苦労する価値があると思えんが。
メモリリークについてもこの規模なら一通り見て、あるかないかくらい判断できるよ。
まあ主観といえば主観だけれど
本当に本心からこの程度のコードについてメモリリークを心配しちゃってるの?
言語を持ち上げるために無理に納得しようとしてない?
190デフォルトの名無しさん
2017/10/26(木) 23:35:06.69ID:9syp6YaG そりゃこの程度の規模じゃRust使うメリット皆無だよ
で、実際のプロジェクトがこの程度の規模なの?
で、実際のプロジェクトがこの程度の規模なの?
191デフォルトの名無しさん
2017/10/26(木) 23:35:07.35ID:51LPFkSD なんでこの規模に限定した話をされているの?
192デフォルトの名無しさん
2017/10/26(木) 23:37:41.83ID:9syp6YaG193デフォルトの名無しさん
2017/10/26(木) 23:40:05.21ID:JSzFTz38 ブラウザの性能が圧倒的にchromeより上になったらrustの優位性が証明されるけど。
それをまとうかな。
それをまとうかな。
194デフォルトの名無しさん
2017/10/27(金) 00:07:16.82ID:xwp9Pca0 性能の差で優位性を証明したことなんて今まであったっけ
オブジェクト指向も関数型もiPhoneもみんな性能と関係ない価値観だったような
オブジェクト指向も関数型もiPhoneもみんな性能と関係ない価値観だったような
195デフォルトの名無しさん
2017/10/27(金) 00:42:45.70ID:5+s2yfDd196デフォルトの名無しさん
2017/10/27(金) 00:47:50.32ID:/3yfU/y8 見苦しくなってきたな
197デフォルトの名無しさん
2017/10/27(金) 03:40:11.56ID:LQlgBzJd 流石に自演かすぎる…
198デフォルトの名無しさん
2017/10/27(金) 06:31:17.46ID:2A0a9mBA199デフォルトの名無しさん
2017/10/27(金) 06:34:38.22ID:2A0a9mBA200デフォルトの名無しさん
2017/10/27(金) 09:50:28.38ID:T+eCoUsJ201デフォルトの名無しさん
2017/10/27(金) 10:02:50.33ID:LQlgBzJd Rustが面倒そうなのは伝わったが
C側の奴がコピペ野郎のくせに暴れてるクズすぎてなんとも
C側の奴がコピペ野郎のくせに暴れてるクズすぎてなんとも
202デフォルトの名無しさん
2017/10/27(金) 10:35:02.10ID:aniL1VIL203デフォルトの名無しさん
2017/10/27(金) 11:13:40.46ID:T+eCoUsJ というかさ、Rustのコードバグってるんだけどwwwww
バwグwっwてwるwんwだwけwどwwwww
remove_treeで要素Removeできてないwwwww
Rustはコンパイル通れば安心できる(ドヤァ)とかいってバwグwっwてwるwwwww
バwグwっwてwるwんwだwけwどwwwww
remove_treeで要素Removeできてないwwwww
Rustはコンパイル通れば安心できる(ドヤァ)とかいってバwグwっwてwるwwwww
204デフォルトの名無しさん
2017/10/27(金) 11:26:28.21ID:T+eCoUsJ ここにRustは、安全性を高めると言いつつまともにアルゴリズムを書こうとすると制約回避のためにとてつもなく汚いコードになり、
バグもCより出やすくなることが公になりましたとさ
ちゃんちゃん
バグもCより出やすくなることが公になりましたとさ
ちゃんちゃん
205デフォルトの名無しさん
2017/10/27(金) 11:40:28.33ID:AXKOuk3Y >>198
言語に気を遣わないとすぐ自分の足元を撃ち抜く言語であるということに同意しないということ?
具体例っていざ言われると困るなあ。ふと思い出した阿呆な失敗談を一つ挙げると、クラスの値型配列を作れちゃうところとか、クラスは絶対ポインタで持たないといけないDとは対照的に感じたな
常識的に考えたらクラスの値型配列なんてやったらダメなのはわかるんだけど、なぜかやってしまって、コンパイル通ってんのに思ってたのと違う挙動して困ったわ。こういう常識的に考えたらわかるけど、考えないといけない部分があるから言語に気を遣わないとやっていけん。
これは全然大したことない例だけど、なんか他にもあったような気もするし思い出したら書き込むわ
言語に気を遣わないとすぐ自分の足元を撃ち抜く言語であるということに同意しないということ?
具体例っていざ言われると困るなあ。ふと思い出した阿呆な失敗談を一つ挙げると、クラスの値型配列を作れちゃうところとか、クラスは絶対ポインタで持たないといけないDとは対照的に感じたな
常識的に考えたらクラスの値型配列なんてやったらダメなのはわかるんだけど、なぜかやってしまって、コンパイル通ってんのに思ってたのと違う挙動して困ったわ。こういう常識的に考えたらわかるけど、考えないといけない部分があるから言語に気を遣わないとやっていけん。
これは全然大したことない例だけど、なんか他にもあったような気もするし思い出したら書き込むわ
206デフォルトの名無しさん
2017/10/27(金) 12:04:57.19ID:aniL1VIL 代入がなければ値型でもポインタでも同じ挙動だ
だから、代入しようとしたらコンパイルが通らない言語が現れた
だから、代入しようとしたらコンパイルが通らない言語が現れた
207デフォルトの名無しさん
2017/10/27(金) 12:27:06.09ID:Luz9kSs/ haskell追い出したら次はrustですか?
208デフォルトの名無しさん
2017/10/27(金) 12:49:17.54ID:aniL1VIL 追い出す権利はないね
あると思ってるやつは権利に甘えすぎ
あると思ってるやつは権利に甘えすぎ
209デフォルトの名無しさん
2017/10/27(金) 12:53:49.35ID:BmYygdVN https://cpplover.blogspot.jp/2017/10/range-based-for.html
まあこう言う馬鹿がいなくなるまでは
実際のコードについて議論したほうがいいとは思うよ。
別にrustとかhaskellが悪いとは思わんけれど、コードなんて実際に現場で機能するかどうかが
一番重要なわけだから。原理に走ると都合の悪いことを無視し始めるのは気に入らん。
まあこう言う馬鹿がいなくなるまでは
実際のコードについて議論したほうがいいとは思うよ。
別にrustとかhaskellが悪いとは思わんけれど、コードなんて実際に現場で機能するかどうかが
一番重要なわけだから。原理に走ると都合の悪いことを無視し始めるのは気に入らん。
210デフォルトの名無しさん
2017/10/27(金) 13:27:23.45ID:OeXtCDV4 >>203
すまぬ。すまぬ。完全なうっかりミスだったわ。
訂正した。
fn remove_tree(mut root: Option<Box<Tree>>, value: i32) -> Option<Box<Tree>> {
if root.is_none() { return root; }
else if value == root.as_ref().unwrap().value {
if root.as_ref().unwrap().left.is_none() && root.as_ref().unwrap().right.is_none() {
return None;
} else if root.as_ref().unwrap().left.is_none() {
let succ = {
let end = left_end(&root.as_ref().unwrap().right);
end.as_ref().unwrap().value
};
>> 訂正前 root.as_mut().unwrap().right = remove_tree(root.as_mut().unwrap().right.take(), value);
>> 訂正後 root.as_mut().unwrap().right = remove_tree(root.as_mut().unwrap().right.take(), succ);
root.as_mut().unwrap().value = succ;
} else {
let pred = {
let end = right_end(&root.as_ref().unwrap().left);
end.as_ref().unwrap().value
};
>> 訂正前 root.as_mut().unwrap().right = remove_tree(root.as_mut().unwrap().right.take(), value);
>> 訂正後 root.as_mut().unwrap().right = remove_tree(root.as_mut().unwrap().right.take(), pred);
root.as_mut().unwrap().value = pred;
}
} else if value > root.as_ref().unwrap().value { root.as_mut().unwrap().right = remove_tree(root.as_mut().unwrap().right.take(), value); }
else { root.as_mut().unwrap().left = remove_tree(root.as_mut().unwrap().left.take(), value); }
...
すまぬ。すまぬ。完全なうっかりミスだったわ。
訂正した。
fn remove_tree(mut root: Option<Box<Tree>>, value: i32) -> Option<Box<Tree>> {
if root.is_none() { return root; }
else if value == root.as_ref().unwrap().value {
if root.as_ref().unwrap().left.is_none() && root.as_ref().unwrap().right.is_none() {
return None;
} else if root.as_ref().unwrap().left.is_none() {
let succ = {
let end = left_end(&root.as_ref().unwrap().right);
end.as_ref().unwrap().value
};
>> 訂正前 root.as_mut().unwrap().right = remove_tree(root.as_mut().unwrap().right.take(), value);
>> 訂正後 root.as_mut().unwrap().right = remove_tree(root.as_mut().unwrap().right.take(), succ);
root.as_mut().unwrap().value = succ;
} else {
let pred = {
let end = right_end(&root.as_ref().unwrap().left);
end.as_ref().unwrap().value
};
>> 訂正前 root.as_mut().unwrap().right = remove_tree(root.as_mut().unwrap().right.take(), value);
>> 訂正後 root.as_mut().unwrap().right = remove_tree(root.as_mut().unwrap().right.take(), pred);
root.as_mut().unwrap().value = pred;
}
} else if value > root.as_ref().unwrap().value { root.as_mut().unwrap().right = remove_tree(root.as_mut().unwrap().right.take(), value); }
else { root.as_mut().unwrap().left = remove_tree(root.as_mut().unwrap().left.take(), value); }
...
211デフォルトの名無しさん
2017/10/27(金) 14:02:45.56ID:OeXtCDV4 >>204
何度も言ってるがこのコードが汚いのは制約回避のためじゃなくて、Cのコードを愚直に移植してるからだぞ。
CのNULLを表現するためにOption型を使用してるから、コンビネータとかを
きちんと使わない限りはunwrapだらけになってコードが汚くなる。
Rustのコードが汚いんじゃなくてRustyに書いてないから汚いだけ。
同じことを何度も言わせないでくれ。
確かに、Rustはコンパイル通すために苦労するから、
執行錯誤してるうちにうっかりミスしやすくなるという考えはあるのかもな。
まあ、この程度のミスを犯す俺が単純にバカすぐるのか、これもRustの課題のひとつだと考えるかは
人によって意見が分かれてくるところじゃないか?みんなどう思う?
何度も言ってるがこのコードが汚いのは制約回避のためじゃなくて、Cのコードを愚直に移植してるからだぞ。
CのNULLを表現するためにOption型を使用してるから、コンビネータとかを
きちんと使わない限りはunwrapだらけになってコードが汚くなる。
Rustのコードが汚いんじゃなくてRustyに書いてないから汚いだけ。
同じことを何度も言わせないでくれ。
確かに、Rustはコンパイル通すために苦労するから、
執行錯誤してるうちにうっかりミスしやすくなるという考えはあるのかもな。
まあ、この程度のミスを犯す俺が単純にバカすぐるのか、これもRustの課題のひとつだと考えるかは
人によって意見が分かれてくるところじゃないか?みんなどう思う?
212デフォルトの名無しさん
2017/10/27(金) 15:02:03.76ID:aniL1VIL カネもないし時間のゆとりもないからコードが汚くなった
言語よりもカネと時間の使い方が間違っている
言語よりもカネと時間の使い方が間違っている
213デフォルトの名無しさん
2017/10/27(金) 17:07:21.98ID:2A0a9mBA >>205
クラスの値型配列はごく基本的で有用なデータ構造なんだけど…
クラスの値型配列はごく基本的で有用なデータ構造なんだけど…
214デフォルトの名無しさん
2017/10/27(金) 17:26:21.22ID:2A0a9mBA いや俺もちゃんと具体例出すか。例えば
class Point { public: double x; double y; }; だの Point3D だのが定義できて、
vector<Point> や Point v[..] が扱えなかったらシステムプログラミングなんかできやしない
…かどうかは別として別に値型の配列は必要なデータ構造だし、
immutable であれば直感に反した動作もないのでは。
実際に用途の多くは inmutable なオブジェクトの配列で、
C++17 では vector<const T> が許容されるようになりそうな流れ。
class Point { public: double x; double y; }; だの Point3D だのが定義できて、
vector<Point> や Point v[..] が扱えなかったらシステムプログラミングなんかできやしない
…かどうかは別として別に値型の配列は必要なデータ構造だし、
immutable であれば直感に反した動作もないのでは。
実際に用途の多くは inmutable なオブジェクトの配列で、
C++17 では vector<const T> が許容されるようになりそうな流れ。
215デフォルトの名無しさん
2017/10/27(金) 17:40:16.82ID:AXKOuk3Y >>214
ああ、すまん。Dでは構造体は継承出来ない代わりに値型可能、クラスは継承出来る代わりに値型不能なんよ。そのイメージが残ってたわ。
継承したものを値型で混ぜ混ぜしてしまったというのが俺のミスなのです
ああ、すまん。Dでは構造体は継承出来ない代わりに値型可能、クラスは継承出来る代わりに値型不能なんよ。そのイメージが残ってたわ。
継承したものを値型で混ぜ混ぜしてしまったというのが俺のミスなのです
216デフォルトの名無しさん
2017/10/27(金) 18:04:05.75ID:697iydar 何でスレタイからHaskell外したんだよ
それならGo外せよ
それならGo外せよ
217デフォルトの名無しさん
2017/10/27(金) 18:39:17.91ID:BmYygdVN なんか元々の C のコードを Rust に下から生じた問題みたいに言ってるけれど
tree のアルゴリズムを実直に書けばそういうふうになるだろ。
それってつまり実直にアルゴリズムを記述するのに向いてないって言ってるようなもんだろ。
tree のアルゴリズムを実直に書けばそういうふうになるだろ。
それってつまり実直にアルゴリズムを記述するのに向いてないって言ってるようなもんだろ。
218あ
2017/10/27(金) 18:41:31.58ID:872yUCAe また無様なHaskellのコード見るの嫌だし、むしろスレタイには言語一切入れんでもいいだろ。
好きなら、なぜ好きかを推すだけで充分議論になるのに、
他の言語を貶めて、○○はゴミだから△△が良い、って論調にするのはちょっとおかしいんじゃないの?
ホームレスが椅子で寝るの見て、俺はブラック企業戦士だけど屋根のある部屋で椅子で寝てるだけマシ、って言ってるように聞こえるよ。
好きで椅子で寝てるなら椅子寝のこだわりぐらい書けよ。パイプ椅子なら圧倒的に互い違い派だ、とか。
好きなら、なぜ好きかを推すだけで充分議論になるのに、
他の言語を貶めて、○○はゴミだから△△が良い、って論調にするのはちょっとおかしいんじゃないの?
ホームレスが椅子で寝るの見て、俺はブラック企業戦士だけど屋根のある部屋で椅子で寝てるだけマシ、って言ってるように聞こえるよ。
好きで椅子で寝てるなら椅子寝のこだわりぐらい書けよ。パイプ椅子なら圧倒的に互い違い派だ、とか。
219デフォルトの名無しさん
2017/10/27(金) 19:47:08.69ID:aniL1VIL 貶めるのが許せないという気持ちがよくわからない
例えば残業代未払いは許せるが貶めるのは許せないとか
なんでそういう優先順位になったのか理解できない
例えば残業代未払いは許せるが貶めるのは許せないとか
なんでそういう優先順位になったのか理解できない
220デフォルトの名無しさん
2017/10/27(金) 20:10:28.34ID:AXKOuk3Y エアプガイジの言ってることわかる訳ないんだから絡むな
221デフォルトの名無しさん
2017/10/27(金) 20:13:53.36ID:AXKOuk3Y Rust派の意見としては、
@TreeはCより汚いけど他のメリットが大きいから許せ
Aもっとうまく書けるから俺が書いてやるぜ
B副作用のある木は糞
どれ?
@TreeはCより汚いけど他のメリットが大きいから許せ
Aもっとうまく書けるから俺が書いてやるぜ
B副作用のある木は糞
どれ?
222デフォルトの名無しさん
2017/10/27(金) 22:02:47.00ID:atz35ani >>218
隔離スレだしな。
プログラマ自体、人口のほんの一部だし、複数の計算モデルが異なる言語を使いこなしてるのなんて更に希少種だから、もともと言語のマトモな比較が出来る奴が殆ど居ない。
だからここで言い合ってるのはおま環がデフォ。
隔離スレだしな。
プログラマ自体、人口のほんの一部だし、複数の計算モデルが異なる言語を使いこなしてるのなんて更に希少種だから、もともと言語のマトモな比較が出来る奴が殆ど居ない。
だからここで言い合ってるのはおま環がデフォ。
223デフォルトの名無しさん
2017/10/27(金) 22:13:38.27ID:2kHVS/Sf >>184
型がないと引数なり戻り値なりで与えられた情報をどう扱っていいかわからないでしょう
型がないと引数なり戻り値なりで与えられた情報をどう扱っていいかわからないでしょう
224デフォルトの名無しさん
2017/10/27(金) 22:23:07.44ID:W2Xgzzyi 返り値が返るのも
それも副作用って事にならないのはなんで?
それも副作用って事にならないのはなんで?
225デフォルトの名無しさん
2017/10/27(金) 23:02:40.27ID:4WxMDiO8 式に値があるのは副作用と言わないから
226デフォルトの名無しさん
2017/10/27(金) 23:04:58.68ID:2kHVS/Sf >>224
主の作用だからだろ
主の作用だからだろ
227デフォルトの名無しさん
2017/10/27(金) 23:23:42.05ID:LQlgBzJd >>218
無様なHaskellコードって?
無様なHaskellコードって?
228デフォルトの名無しさん
2017/10/27(金) 23:45:39.75ID:BmYygdVN >>211
ちゃんと具体的にコードを書いてくれて議論しやすくしてくれたのはありがたい。
tree を rust で実装しろって言われたら 10 人中 9 人は Box と Option を
使ったそういう構造体作ると思う。
ちゃんと具体的にコードを書いてくれて議論しやすくしてくれたのはありがたい。
tree を rust で実装しろって言われたら 10 人中 9 人は Box と Option を
使ったそういう構造体作ると思う。
229デフォルトの名無しさん
2017/10/27(金) 23:47:59.22ID:O21aknvD >>214
Pointの例に限って言えば同意できないな
大量の小さなベクトルを扱うような場合、構造体を使うより各成分をそれぞれスカラー配列で持った方が効率いいよ
キャッシュに乗りやすくなる
C++系の言語で行持ちの方が好まれるのは、一番の理由は言語の性質上そのほうが扱いやすいからに過ぎない
最近は列指向DBなんかも普通に使われるようになって、データの列持ちが見直されつつある今、
列持ちのデータ構造をスマートに扱える言語があってもいいと思うわ
Pointの例に限って言えば同意できないな
大量の小さなベクトルを扱うような場合、構造体を使うより各成分をそれぞれスカラー配列で持った方が効率いいよ
キャッシュに乗りやすくなる
C++系の言語で行持ちの方が好まれるのは、一番の理由は言語の性質上そのほうが扱いやすいからに過ぎない
最近は列指向DBなんかも普通に使われるようになって、データの列持ちが見直されつつある今、
列持ちのデータ構造をスマートに扱える言語があってもいいと思うわ
230デフォルトの名無しさん
2017/10/28(土) 00:01:16.09ID:rPyPw2Q2 >>229
Fortran, Juliaのことか?
Fortran, Juliaのことか?
231デフォルトの名無しさん
2017/10/28(土) 00:03:34.74ID:1i6fvk7+232デフォルトの名無しさん
2017/10/28(土) 00:24:09.93ID:rPyPw2Q2233デフォルトの名無しさん
2017/10/28(土) 00:46:39.85ID:pDpr3v8b Rustアンチくんはペチパー
はっきりわかんだね
はっきりわかんだね
234あ
2017/10/28(土) 00:51:22.50ID:Nq0Bzlbk235デフォルトの名無しさん
2017/10/28(土) 00:58:11.14ID:Ng05dLeH236デフォルトの名無しさん
2017/10/28(土) 01:07:07.63ID:rPyPw2Q2237デフォルトの名無しさん
2017/10/28(土) 01:09:54.95ID:Ng05dLeH そういう状況でもない限りそもそもボトルネックにならないからな
238デフォルトの名無しさん
2017/10/28(土) 01:16:42.42ID:FXSZ1oP/ >>211
試行錯誤の過程でアルゴリズムぶっこわれるってのはよくあるが、そうならないためにテストコードがあるっちゃそうだから、
明確な欠点とは言えないかもな
まさかスレに貼るサンプルコードにまでテストコードつけろなんて言えねえし。
試行錯誤の過程でアルゴリズムぶっこわれるってのはよくあるが、そうならないためにテストコードがあるっちゃそうだから、
明確な欠点とは言えないかもな
まさかスレに貼るサンプルコードにまでテストコードつけろなんて言えねえし。
239デフォルトの名無しさん
2017/10/28(土) 04:09:54.80ID:62CU1Qsk240デフォルトの名無しさん
2017/10/28(土) 09:04:44.68ID:C9milqrp コード出すという行動ではなく
コードが正義っていう知見への承認とか共感が欲しかったんじゃないか
だから行動だけでは駄目
コードが正義っていう知見への承認とか共感が欲しかったんじゃないか
だから行動だけでは駄目
242デフォルトの名無しさん
2017/10/28(土) 10:25:15.53ID:CAnYo5YI なぜ私達は Python から Go に移行したのか
https://frasco.io/why-we-switched-from-python-to-go-19581e27de7c
https://frasco.io/why-we-switched-from-python-to-go-19581e27de7c
243デフォルトの名無しさん
2017/10/28(土) 10:45:03.08ID:rPyPw2Q2 よくあんな無様な知ったかぶりしといて人のこと無様とか言えるな
244デフォルトの名無しさん
2017/10/28(土) 11:06:53.69ID:pDpr3v8b これだからペチプァは
245あ
2017/10/28(土) 11:20:03.53ID:McmdGm+1 >>243
自分が無様だと思ってる奴に無様だと言われるのはさぞ辛かろうが、
俺が無様なのとHaskell書いたやつが無様なのは別の事象で、
同時に無様でありえるんだから、その指摘はナンセンスだろ。
その理解力でHaskell最高!と思ってるのも面白いな。Maybeの真髄だろ。事象を整理するのは。
自分が無様だと思ってる奴に無様だと言われるのはさぞ辛かろうが、
俺が無様なのとHaskell書いたやつが無様なのは別の事象で、
同時に無様でありえるんだから、その指摘はナンセンスだろ。
その理解力でHaskell最高!と思ってるのも面白いな。Maybeの真髄だろ。事象を整理するのは。
246デフォルトの名無しさん
2017/10/28(土) 11:28:14.87ID:rPyPw2Q2 なんだこいつなんで俺がHaskell 信者みたいな前提で煽って来てんだ
247デフォルトの名無しさん
2017/10/28(土) 11:36:54.21ID:c+qfWZBO もう最新規格のFortranで良いよ
248デフォルトの名無しさん
2017/10/28(土) 12:01:24.16ID:1i6fvk7+ Fortranに第一級関数がついてimplicit noneがデフォルトになってinterface文をもうちょっと短く書けるようになって引数の型指定をCみたいに書けるようになって
配列の大きさ指定の関数に組み込みでない関数を使えるようになってgfortranのbind(C)周りのバグを解消してくれたらFortranでいいよ
配列の大きさ指定の関数に組み込みでない関数を使えるようになってgfortranのbind(C)周りのバグを解消してくれたらFortranでいいよ
249デフォルトの名無しさん
2017/10/28(土) 12:13:39.86ID:pDpr3v8b 西京言語PHPを使えばいいじゃん(いいじゃん)
250デフォルトの名無しさん
2017/10/28(土) 12:20:24.44ID:aTcnbQEE PHPが、前世紀末に流行したPerlでCGIという極悪システムを撲滅した功績は大きい
251デフォルトの名無しさん
2017/10/28(土) 12:31:15.99ID:MXV4el39 mod_perlとだったら大して変わらん気がする
252デフォルトの名無しさん
2017/10/28(土) 12:33:46.88ID:pDpr3v8b >PHPが、前世紀末に流行したPerlでCGIという極悪システムを撲滅した功績は大きい
キリッ
www
キリッ
www
253デフォルトの名無しさん
2017/10/28(土) 17:09:33.99ID:GkEAGE6K 皆がCGIという共通ルールを守る中
汎用性のない独自実装をしたphp
汎用性のない独自実装をしたphp
254デフォルトの名無しさん
2017/10/28(土) 17:24:26.31ID:6pjbn+cV まあ今更Perlとかって選択肢はないからね
255デフォルトの名無しさん
2017/10/28(土) 17:31:59.24ID:Hah9JG+z FacebookはなんでPHP推しなの?
256デフォルトの名無しさん
2017/10/28(土) 18:04:40.73ID:D4ynCBSM PHPをC++に変換するんだっけ
むしろJavaをC++に変換するのを誰もやらない理由を知りたい
むしろJavaをC++に変換するのを誰もやらない理由を知りたい
257デフォルトの名無しさん
2017/10/28(土) 18:12:54.21ID:z3Njt94H258デフォルトの名無しさん
2017/10/28(土) 18:27:47.92ID:GkEAGE6K phpのがサーバでしか使われてない印象
どっかで使ってる?
どっかで使ってる?
259デフォルトの名無しさん
2017/10/28(土) 18:32:36.63ID:GkEAGE6K260デフォルトの名無しさん
2017/10/28(土) 19:01:45.06ID:0vLNpJP2 PHPの特徴ってインスタンスの生存時間が極端に短い。ってこと。
request受けてからresponse返すまで。
だからGCが貧弱でも何の問題もないし。糞汚いコードでもメモリリークが問題にならない。
request受けてからresponse返すまで。
だからGCが貧弱でも何の問題もないし。糞汚いコードでもメモリリークが問題にならない。
261デフォルトの名無しさん
2017/10/28(土) 19:13:14.28ID:PFwR8W+K >>256
GCC
http://news.mynavi.jp/news/2016/09/08/290/
あと、AndroidはJavaじゃないからノーカンなのかもしれないが、
以前はネイティブに全部変換していたのをやめた
GCC
http://news.mynavi.jp/news/2016/09/08/290/
あと、AndroidはJavaじゃないからノーカンなのかもしれないが、
以前はネイティブに全部変換していたのをやめた
262デフォルトの名無しさん
2017/10/28(土) 19:51:46.92ID:SOIebb5r263デフォルトの名無しさん
2017/10/28(土) 20:44:53.33ID:VLfN62TL264デフォルトの名無しさん
2017/10/28(土) 21:07:01.93ID:ruX3/fgh それ以上ペチパーの心のより所を叩くのはやめてやれw
彼ら、憤死してしまうでwww
彼ら、憤死してしまうでwww
265デフォルトの名無しさん
2017/10/28(土) 21:37:38.45ID:GkEAGE6K >>260
言ってること滅茶苦茶だな
言ってること滅茶苦茶だな
266デフォルトの名無しさん
2017/10/28(土) 21:57:38.28ID:D4ynCBSM 伝えようとすれば滅茶苦茶
隠そうとすればバレバレ
だから型情報とか一生懸命伝えようとする言語が報われない
隠そうとすればバレバレ
だから型情報とか一生懸命伝えようとする言語が報われない
267デフォルトの名無しさん
2017/10/29(日) 03:03:23.28ID:7slaGsXS >>242
go 好きな人ってまともすぎてつまらんな。
go 好きな人ってまともすぎてつまらんな。
268デフォルトの名無しさん
2017/10/29(日) 05:05:09.88ID:ZPHcoPj2269デフォルトの名無しさん
2017/10/29(日) 05:05:25.10ID:ZPHcoPj2 >>267
きんも
きんも
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 東京都「都民の税金1.5兆円が国に奪われている」「全国に分配されている」に地方民ブチギレ [Hitzeschleier★]
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 [蚤の市★]
- 「もうキモくてキモくて…」29歳女性が語る“おぢアタック”の実態。「俺ならイケるかも」年下女性を狙う勘違い中年男性に共通点が★4 [Hitzeschleier★]
- JA全農が「新おこめ券」…来年9月末の有効期限を新設、必要経費のみ上乗せ [蚤の市★]
- 【おこめ券】鈴木憲和農相 小泉前農相の備蓄米放出を“反省”「備蓄の円滑な運営を図ってまいります」 [Hitzeschleier★]
- 1人3千円の食品高騰対策、何に使える? あいまいなまま衆院通過 [蚤の市★]
- 【まずは自助】高市早苗「自らの命は自らが守るという原則に従っていただく」 青森の被災地、能登と同じく見捨てられる模様 [314039747]
- トランプ、G7に代わるcore 5を発表 [805596214]
- 【実況】博衣こよりのえちえちダンガンロンパ2🧪★6
- 【悲報】日本共産党、ツイッター速報にブチギレ法的措置WWWWWWWWWWWWWWWWWWWWWWWWWWWW [935793931]
- 【実況】博衣こよりのえちえちダンガンロンパ2🧪★5
- 木曜日のんなっしょい❗(・o・🍬)仕放題スレ🏡
