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


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

次世代言語Part7[Go Rust Swift Kotlin TypeScript]



1 名前:デフォルトの名無しさん [2017/10/19(木) 17:51:38.66 ID:EPSDvC75.net]
文字数制限きついので改題
スレタイ以外の言語もok

前スレ
次世代言語議論スレ[Rust Kotlin Haskell]第6世代
mevius.5ch.net/test/read.cgi/tech/1503924817/

159 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 07:04:11.52 ID:hnEjL22C.net]
Haskellは速さは捨てて副作用を無くすことに全振りしてるけど、Rustはそうではないからな

160 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 09:12:10.17 ID:ZXFAdbhr.net]
Rustはunsafeつかえば(ffiしたほうがはやいだろうが)できないことはないと思ってるんだが違うのかな?

161 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 09:59:20.18 ID:tFGGFqQC.net]
Goはいつものgoogleのフカしで持ち上げられてる感がプンプンするぜ。
単なる昔ながらのVM使ってない静的型付け言語を
システムプログラミングとかいうバズワードを作って
スクリプトしか描いたことない奴らにいかにも新しいものであるかのように錯覚させてる。

162 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 10:42:13.95 ID:1t2EMvpb.net]
>>157
初めからプログラム全体をunsafeで囲ってある状態を仕様にすればいいのにな

>>158
バズワードだろうがなんだろうが、速くて書きやすけりゃ正義よ

163 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 10:47:47.28 ID:Y5WhyQQy.net]
最近は新しいOSSもGoで書かれてるの多くてうんざりする
再来年辺りには「Goは終わった」とか言われだしてScalaと同じ道を辿るのわかりきってるのにWeb系の馬鹿共は何度同じ間違いを繰り返すのか

164 名前:デフォルトの名無しさん [2017/10/26(木) 11:10:35.34 ID:8qIiNs+I.net]
個人的にはDが一番純粋なc++ 後継って感じで頑張って欲しいんだけどなぁ
まったく流行る兆しがない……
別に新しい言語を求めてるんじゃないんだ。c++ からc互換を取り除いて標準ライブラリと文法見直してくれるだけでいいんだ

165 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 11:45:28.73 ID:xVKEuI/f.net]
>>160
「新しいOSSもGoで書かれてるのが多」いのに
「再来年辺りには『Goは終わった』とか言われだ」すのか。すげえな

まあGo2.0の漏れ聞く噂によると可能性なくもないんだが

166 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 11:47:37.13 ID:xVKEuI/f.net]
>>161
GC言語な時点でそりゃねえわ
全く同じ理由でGoもC++の完全な後継ではないと思ってるけど

167 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 11:54:33.47 ID:Y5WhyQQy.net]
>>162
Scalaという前例があるからね
特にビッグデータ系はScalaのOSSが多くて悲惨だよ
壮大な糞の山が残されてしまった



168 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 12:17:09.48 ID:xVKEuI/f.net]
>>164
Scalaが廃れた理由は、言語のバージョンアップ戦略がクソof

169 名前:クソだったってのと
コンパイル回りの性能が悪いっていう言語自体の特徴、
それから置き換えを狙っていたはずのJavaの進化に取り残されたことっていう色々と複合的な原因がある

Goがその後追いをするかって言われると、
少なくとも書きやすさの面でC++がGoに勝てる目は向こう5年はないだろうし、
バージョン戦略は少なくとも1系の間は下位互換性崩さんだろうしな
[]
[ここ壊れてます]

170 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 12:19:58.53 ID:xVKEuI/f.net]
不安があるとするなら、なんか1系と完全に互換性なくすとか言われてるGo2.0なんだよな
この辺の方針次第では、おっしゃる通り再来年にはゴミの山になってる可能性が無視できない

Swiftがクソバージョンアップでもなんとか成功してるのはプラットフォーム囲い込んでるのがでかい

171 名前:デフォルトの名無しさん [2017/10/26(木) 12:27:59.75 ID:P+s05bng.net]
AA木のRust版の移植を練習がてらやったぞ。
みんなunsafeが必要とか言ってるが、別に必要なくない?
ポインタ演算もサイズの違う型の変換もしてるわけじゃないから生ポインタ扱う必要ないと思うんだけど。
だた、マジで愚直に移植したから全くRustっぽくはないし、
俺がバカなだけで無駄なオーバーヘッドが気づかんうちにいっぱい発生してるかもだから指摘よろしく。
一応何回か適当にinsertとremoveして正しく動いてるとこまでは確認してる。
みんなunsafe使わないとダメ的なこと言ってるから正直これでいいのか全然自信がない。

172 名前:デフォルトの名無しさん [2017/10/26(木) 12:28:38.79 ID:P+s05bng.net]
#[derive(Debug)]
struct Tree {
value: i32,
left: Option<Box<Tree>>,
right: Option<Box<Tree>>,
level: isize,
}

fn level(root: &Option<Box<Tree>>) -> isize {
if root.is_none() {
return 0;
}
root.as_ref().unwrap().level
}

fn left_end(root: &Option<Box<Tree>>) -> &Option<Box<Tree>> {
if root.is_none() {
root
} else if root.as_ref().unwrap().left.is_none() {
root
} else {
left_end(&root.as_ref().unwrap().left)
}
}
(続く)

173 名前:デフォルトの名無しさん [2017/10/26(木) 12:29:34.82 ID:P+s05bng.net]
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
}
(まだ続く)

174 名前:デフォルトの名無しさん [2017/10/26(木) 12:30:37.02 ID:P+s05bng.net]
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
}

175 名前:デフォルトの名無しさん [2017/10/26(木) 12:31:04.94 ID:P+s05bng.net]
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
}

176 名前:デフォルトの名無しさん [2017/10/26(木) 12:31:51.05 ID:P+s05bng.net]
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
}

177 名前:デフォルトの名無しさん [2017/10/26(木) 12:34:16.58 ID:P+s05bng.net]
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レスに収まらんかった)



178 名前:デフォルトの名無しさん [2017/10/26(木) 12:37:30.92 ID:P+s05bng.net]
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使ってる。
あとは、裏でも使ってないと思う。

179 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 12:39:25.88 ID:xVKEuI/f.net]
Rustトーシロの初見だけどこんなにunwrap必要なの怖いって気分になるな……
CのポインタをOption<Box<>>で表現してるからしゃーないとはいえ

180 名前:デフォルトの名無しさん [2017/10/26(木) 12:39:26.85 ID:P+s05bng.net]
ここまでやったらもう飽きた。
誰かメソッド構文とかコンビネータとかをきちんと使ったRustyなコードに書き換えて。

181 名前: mailto:sage [2017/10/26(木) 12:42:49.23 ID:+cEqlMCT.net]
Rust嫌いな奴はCをすぐ引き合いに出すが、misraの案件やったら死ぬんじゃねえかなって思う。

GC言語も悪くはないぞ。ちゃんとGCの動き考えれば、正しく開放「されてない」理由もわかるだろ。
最初からデカイ配列を握って離さない、それを切り貼りして使う、みたいなJavaのプロジェクトあるしな。

182 名前:デフォルトの名無しさん [2017/10/26(木) 12:50:10.86 ID:P+s05bng.net]
>>175
あくまでも愚直に書いてるからこんなにunwrapとas_refとas_mutだらけになる。
if letとかコンビネータとかをきちんと使えばこんなひどいコードにはならないよ。

183 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 16:47:19.95 ID:hnEjL22C.net]
rustのコード<>だらけで読みにくい
これはlispの括弧みたいに慣れたら読みやすいものなのか?

184 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 17:58:11.26 ID:9syp6YaG.net]
>>153
難しいとは言ってもOOP→関数型のパラダイムシフトに比べれば簡単だけどね

185 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 20:01:45.08 ID:mFTohykf.net]
>>154
おい、お前でてこいよ

186 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 21:09:45.15 ID:LcYnzbeR.net]
rust も haskell も理解できても面倒だし無駄に言語に気使ってるだけじゃねーかって
思うんだが、信者はききやしない。。
「お前らは理解できないものを理解できる俺偉い」で思考停止しちゃってんだよ。

187 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 21:15:34.16 ID:hnEjL22C.net]
一番言語に気を遣わないといけないのはC++だがなw



188 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 21:19:35.59 ID:+/fzZ2Vi.net]
型っていうシステムが
そもそも良くないっていうのは無いの?

189 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 21:46:13.96 ID:OTLFFL6d.net]
>>181
出てきたが、お前まさかこんな汚いコード未満とCのコード比較させる気か?勝負にならん。解散

>>182
それならマシで、Rust信者の工作員はモジラブランドのためなら使えないものを世界中の企業に絶賛させるための工作をに熱心すぎてもうね

190 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 21:54:28.12 ID:PekP06rX.net]
>>185
おめー流石に一から書いてもいない奴が言うセリフじゃねえよ
Cライク信者からしても何様だてめえは

191 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 21:55:02.68 ID:mFTohykf.net]
>>185
てめえがしね

192 名前:デフォルトの名無しさん [2017/10/26(木) 22:34:09.13 ID:P+s05bng.net]
>>182
「俺偉い」はさすがにないわ。笑かすな。

Rustに移植してみての感想だけど、確かにコンパイルを通すのには苦労したけど、
通ってしまえばメモリーリークはないって安心感がある。これが重要。
特に今回はunsafe一度も使ってないからなおさら安心できる。
Cのほうのコード一通り眺めてメモリーリーク無いって確信できる?
それができる超人君なら確かにRustは全く必要ないが。
Rustは君の嫌う面倒さと引き換えに安心を得ることができる言語。
むしろCで書いたコードにメモリーリークがあるのかないのか
自分の書いたコードに自信が持てないやつのためにこそRustがあると思ってる。
面倒だけが理由で思考停止しているのはどっちだ。

>>185
確かにこのコードは汚いよな。そこは自覚してる。


193 名前:マジで誰かRust風に書き換えてくれない?
動いたところまで確認したところで集中が切れてしまってもうやる気が出ない。
Rustはオブジェクト指向も関数型のパラダイムを両方とも持っているし、
きちんと書けばかなり綺麗で整ったコードに書き直せるはずなんだよ。

あと、Rustアンチに1つ聞きたいことがある。
Rustが嫌いってことはわかったけど、じゃあアンチ君の好きな(愛用してる)言語は何なの?
その言語のメリット・デメリット含めて詳しく解説してくんない?
[]
[ここ壊れてます]

194 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 23:26:00.76 ID:LcYnzbeR.net]
はっきり言わせてもらうけれど、
この規模のコードで書くのにそれだけ苦労する価値があると思えんが。
メモリリークについてもこの規模なら一通り見て、あるかないかくらい判断できるよ。

まあ主観といえば主観だけれど
本当に本心からこの程度のコードについてメモリリークを心配しちゃってるの?
言語を持ち上げるために無理に納得しようとしてない?

195 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 23:35:06.69 ID:9syp6YaG.net]
そりゃこの程度の規模じゃRust使うメリット皆無だよ
で、実際のプロジェクトがこの程度の規模なの?

196 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 23:35:07.35 ID:51LPFkSD.net]
なんでこの規模に限定した話をされているの?

197 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 23:37:41.83 ID:9syp6YaG.net]
Rustアンチスレ
https://mevius.5ch.net/test/read.cgi/tech/1509028624/



198 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 23:40:05.21 ID:JSzFTz38.net]
ブラウザの性能が圧倒的にchromeより上になったらrustの優位性が証明されるけど。
それをまとうかな。

199 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 00:07:16.82 ID:xwp9Pca0.net]
性能の差で優位性を証明したことなんて今まであったっけ
オブジェクト指向も関数型もiPhoneもみんな性能と関係ない価値観だったような

200 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 00:42:45.70 ID:5+s2yfDd.net]
>>185
さすがにコード一行も書いてない奴が言っていいセリフじゃねえわ……

>>189
さすがに後出し条件がひどい。そもそも発端は「Rustでは(unsafe使わずに)木構造すら書けねえだろ」って煽りが発端で
「さすがに木構造くらい(unsafeなし)Rustででも書けるわ」ってのの話がこれだろ

そりゃコンセプトが「安全性」なんだからCで書くより面倒なのは確かだし、この程度ならCの方がいいってのも当然だが、
そこを比較するために書いたもんじゃねえだろ

201 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 00:47:50.32 ID:/3yfU/y8.net]
見苦しくなってきたな

202 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 03:40:11.56 ID:LQlgBzJd.net]
流石に自演かすぎる…

203 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 06:31:17.46 ID:2A0a9mBA.net]
>>183
そんなことはないと思うが
何か具体例ある?

204 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 06:34:38.22 ID:2A0a9mBA.net]
>>195
言いたいことはわかるが
その「この程度」のも全部快適に書けるのが理想なわけだよね

この程度のをいっぱい書かなきゃいけなくなったときにこの調子じゃ萎える人も出てくるだろう

205 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 09:50:28.38 ID:T+eCoUsJ.net]
>>195
安全性のためとか言って結局まともにかけないアルゴリズムがあることを見て見ぬふりの信者

健康のためなら死んでもいいを地で行ってるな
これが宗教ってやつか

206 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 10:02:50.33 ID:LQlgBzJd.net]
Rustが面倒そうなのは伝わったが
C側の奴がコピペ野郎のくせに暴れてるクズすぎてなんとも

207 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 10:35:02.10 ID:aniL1VIL.net]
>>200
まともに書けるけど無料で教えてくれる人が少ないだけだってそろそろ気付けよ
普通は健康のためではなくカネのためにやってるから



208 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 11:13:40.46 ID:T+eCoUsJ.net]
というかさ、Rustのコードバグってるんだけどwwwww
バwグwっwてwるwんwだwけwどwwwww
remove_treeで要素Removeできてないwwwww

Rustはコンパイル通れば安心できる(ドヤァ)とかいってバwグwっwてwるwwwww

209 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 11:26:28.21 ID:T+eCoUsJ.net]
ここにRustは、安全性を高めると言いつつまともにアルゴリズムを書こうとすると制約回避のためにとてつもなく汚いコードになり、
バグもCより出やすくなることが公になりましたとさ

ちゃんちゃん

210 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 11:40:28.33 ID:AXKOuk3Y.net]
>>198
言語に気を遣わないとすぐ自分の足元を撃ち抜く言語であるということに同意しないということ?

具体例っていざ言われると困るなあ。ふと思い出した阿呆な失敗談を一つ挙げると、クラスの値型配列を作れちゃうところとか、クラスは絶対ポインタで持たないといけないDとは対照的に感じたな

常識的に考えたらクラスの値型配列なんてやったらダメなのはわかるんだけど、なぜかやってしまって、コンパイル通ってんのに思ってたのと違う挙動して困ったわ。こういう常識的に考えたらわかるけど、考えないといけない部分があるから言語に気を遣わないとやっていけん。

これは全然大したことない例だけど、なんか他にもあったような気もするし思い出したら書き込むわ

211 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 12:04:57.19 ID:aniL1VIL.net]
代入がなければ値型でもポインタでも同じ挙動だ
だから、代入しようとしたらコンパイルが通らない言語が現れた

212 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 12:27:06.09 ID:Luz9kSs/.net]
haskell追い出したら次はrustですか?

213 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 12:49:17.54 ID:aniL1VIL.net]
追い出す権利はないね
あると思ってるやつは権利に甘えすぎ

214 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 12:53:49.35 ID:BmYygdVN.net]
https://cpplover.blogspot.jp/2017/10/range-based-for.html

まあこう言う馬鹿がいなくなるまでは
実際のコードについて議論したほうがいいとは思うよ。

別にrustとかhaskellが悪いとは思わんけれど、コードなんて実際に現場で機能するかどうかが
一番重要なわけだから。原理に走ると都合の悪いことを無視し始めるのは気に入らん。

215 名前:デフォルトの名無しさん [2017/10/27(金) 13:27:23.45 ID:OeXtCDV4.net]
>>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); }
...

216 名前:デフォルトの名無しさん [2017/10/27(金) 14:02:45.56 ID:OeXtCDV4.net]
>>204
何度も言ってるがこのコードが汚いのは制約回避のためじゃなくて、Cのコードを愚直に移植してるからだぞ。
CのNULLを表現するためにOption型を使用してるから、コンビネータとかを
きちんと使わない限りはunwrapだらけになってコードが汚くなる。
Rustのコードが汚いんじゃなくてRustyに書いてないから汚いだけ。
同じことを何度も言わせないでくれ。

確かに、Rustはコンパイル通すために苦労するから、
執行錯誤してるうちにうっかりミスしやすくなるという考えはあるのかもな。
まあ、この程度のミスを犯す俺が単純にバカすぐるのか、これもRustの課題のひとつだと考えるかは
人によって意見が分かれてくるところじゃないか?みんなどう思う?

217 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 15:02:03.76 ID:aniL1VIL.net]
カネもないし時間のゆとりもないからコードが汚くなった
言語よりもカネと時間の使い方が間違っている



218 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 17:07:21.98 ID:2A0a9mBA.net]
>>205
クラスの値型配列はごく基本的で有用なデータ構造なんだけど…

219 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 17:26:21.22 ID:2A0a9mBA.net]
いや俺もちゃんと具体例出すか。例えば
class Point { public: double x; double y; }; だの Point3D だのが定義できて、
vector<Point> や Point v[..] が扱えなかったらシステムプログラミングなんかできやしない
…かどうかは別として別に値型の配列は必要なデータ構造だし、
immutable であれば直感に反した動作もないのでは。

実際に用途の多くは inmutable なオブジェクトの配列で、
C++17 では vector<const T> が許容されるようになりそうな流れ。

220 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 17:40:16.82 ID:AXKOuk3Y.net]
>>214
ああ、すまん。Dでは構造体は継承出来ない代わりに値型可能、クラスは継承出来る代わりに値型不能なんよ。そのイメージが残ってたわ。
継承したものを値型で混ぜ混ぜしてしまったというのが俺のミスなのです

221 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 18:04:05.75 ID:697iydar.net]
何でスレタイからHaskell外したんだよ
それならGo外せよ

222 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 18:39:17.91 ID:BmYygdVN.net]
なんか元々の C のコードを Rust に下から生じた問題みたいに言ってるけれど
tree のアルゴリズムを実直に書けばそういうふうになるだろ。
それってつまり実直にアルゴリズムを記述するのに向いてないって言ってるようなもんだろ。

223 名前: mailto:sage [2017/10/27(金) 18:41:31.58 ID:872yUCAe.net]
また無様なHaskellのコード見るの嫌だし、むしろスレタイには言語一切入れんでもいいだろ。

好きなら、なぜ好きかを推すだけで充分議論になるのに、
他の言語を貶めて、○○はゴミだから△△が良い、って論調にするのはちょっとおかしいんじゃないの?

ホームレスが椅子で寝るの見て、俺はブラック企業戦士だけど屋根のある部屋で椅子で寝てるだけマシ、って言ってるように聞こえるよ。
好きで椅子で寝てるなら椅子寝のこだわりぐらい書けよ。パイプ椅子なら圧倒的に互い違い派だ、とか。

224 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 19:47:08.69 ID:aniL1VIL.net]
貶めるのが許せないという気持ちがよくわからない
例えば残業代未払いは許せるが貶めるのは許せないとか
なんでそういう優先順位になったのか理解できない

225 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 20:10:28.34 ID:AXKOuk3Y.net]
エアプガイジの言ってることわかる訳ないんだから絡むな��

226 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 20:13:53.36 ID:AXKOuk3Y.net]
Rust派の意見としては、

@TreeはCより汚いけど他のメリットが大きいから許せ

Aもっとうまく書けるから俺が書いてやるぜ

B副作用のある木は糞

どれ?

227 名前:デフォルトの名無しさん [2017/10/27(金) 22:02:47.00 ID:atz35ani.net]
>>218
隔離スレだしな。
プログラマ自体、人口のほんの一部だし、複数の計算モデルが異なる言語を使いこなしてるのなんて更に希少種だから、もともと言語のマトモな比較が出来る奴が殆ど居ない。
だからここで言い合ってるのはおま環がデフォ。



228 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 22:13:38.27 ID:2kHVS/Sf.net]
>>184
型がないと引数なり戻り値なりで与えられた情報をどう扱っていいかわからないでしょう

229 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 22:23:07.44 ID:W2Xgzzyi.net]
返り値が返るのも
それも副作用って事にならないのはなんで?

230 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 23:02:40.27 ID:4WxMDiO8.net]
式に値があるのは副作用と言わないから

231 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 23:04:58.68 ID:2kHVS/Sf.net]
>>224
主の作用だからだろ

232 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 23:23:42.05 ID:LQlgBzJd.net]
>>218
無様なHaskellコードって?

233 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 23:45:39.75 ID:BmYygdVN.net]
>>211
ちゃんと具体的にコードを書いてくれて議論しやすくしてくれたのはありがたい。
tree を rust で実装しろって言われたら 10 人中 9 人は Box と Option を
使ったそういう構造体作ると思う。

234 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 23:47:59.22 ID:O21aknvD.net]
>>214
Pointの例に限って言えば同意できないな
大量の小さなベクトルを扱うような場合、構造体を使うより各成分をそれぞれスカラー配列で持った方が効率いいよ
キャッシュに乗りやすくなる
C++系の言語で行

235 名前:持ちの方が好まれるのは、一番の理由は言語の性質上そのほうが扱いやすいからに過ぎない
最近は列指向DBなんかも普通に使われるようになって、データの列持ちが見直されつつある今、
列持ちのデータ構造をスマートに扱える言語があってもいいと思うわ
[]
[ここ壊れてます]

236 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 00:01:16.09 ID:rPyPw2Q2.net]
>>229
Fortran, Juliaのことか?

237 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 00:03:34.74 ID:1i6fvk7+.net]
>>227
>無様なHaskellのコード

908 :あ:2017/05/31(水) 09:15:21.09 ID:dc+IbjjD
>>905
具体的に上げろと言われてもなぁ。
<T>を持ったenumがOptionかcar(T)とcdr(<T,T>)である時くらいかな。

これのことじゃないの?(適当)



238 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 00:24:09.93 ID:rPyPw2Q2.net]
てか
>>229
> 各成分をそれぞれスカラー配列で持った方が効率いいよ
キャッシュに乗りやすくなる
これってどういう演算の時にそうなるんです?

239 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 00:46:39.85 ID:pDpr3v8b.net]
Rustアンチくんはペチパー

はっきりわかんだね

240 名前: mailto:sage [2017/10/28(土) 00:51:22.50 ID:Nq0Bzlbk.net]
>>219
許せないんじゃなくて、健全ではないよね、と。
なんせ改善せずとも、自分があたかもまともであるかのように思える一番楽な方法だし、進歩もない。

>>222
ホントに。好きなら好きで良いんだよ。
バカで比べる事ができないなら素直に信者してりゃ良いの。
狂信者が戦争起こすような真似をネットでまでやらんでもよろしい。

>>227
>>231
しかも、結局すごくひねり倒してグダグダ言った割に、最後まで動くコードが出てこなかったんだけっけ。

241 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 00:58:11.14 ID:Ng05dLeH.net]
>>232
分かりやすいのはパディングが入るケース
ループのベクトル化もスカラー配列の方が効きやすいらしい

242 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 01:07:07.63 ID:rPyPw2Q2.net]
>>235
うーむ……
もしかしてPoint3Dのベクトルに一括して行列を掛けたりする状況を想定しているのか?

243 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 01:09:54.95 ID:Ng05dLeH.net]
そういう状況でもない限りそもそもボトルネックにならないからな

244 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 01:16:42.42 ID:FXSZ1oP/.net]
>>211
試行錯誤の過程でアルゴリズムぶっこわれるってのはよくあるが、そうならないためにテストコードがあるっちゃそうだから、
明確な欠点とは言えないかもな

まさかスレに貼るサンプルコードにまでテストコードつけろなんて言えねえし。

245 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 04:09:54.80 ID:62CU1Qsk.net]
>>234
ドアの奴なかな?
あれならHaskellのコード出てただろ
いつまで言ってるんだ

246 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 09:04:44.68 ID:C9milqrp.net]
コード出すという行動ではなく
コードが正義っていう知見への承認とか共感が欲しかったんじゃないか
だから行動だけでは駄目

247 名前: mailto:sage [2017/10/28(土) 09:19:59.46 ID:Nq0Bzlbk.net]
>>239
じゃ、いつまで、スレタイにはHaskellが、って言ってんだよ(笑)



248 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 10:25:15.53 ID:CAnYo5YI.net]
なぜ私達は Python から Go に移行したのか
https://frasco.io/why-we-switched-from-python-to-go-19581e27de7c

249 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 10:45:03.08 ID:rPyPw2Q2.net]
よくあんな無様な知ったかぶりしといて人のこと無様とか言えるな

250 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 11:06:53.69 ID:pDpr3v8b.net]
これだからペチプァは

251 名前: mailto:sage [2017/10/28(土) 11:20:03.53 ID:McmdGm+1.net]
>>243
自分が無様だと思ってる奴に無様だと言われるのはさぞ辛かろうが、
俺が無様なのとHaskell書いたやつが無様なのは別の事象で、

同時に無様でありえるんだから、その指摘はナンセンスだろ。
その理解力でHaskell最高!と思ってるのも面白いな。Maybeの真髄だろ。事象を整理するのは。

252 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 11:28:14.87 ID:rPyPw2Q2.net]
なんだこいつなんで俺がHaskell 信者みたいな前提で煽って来てんだ

253 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 11:36:54.21 ID:c+qfWZBO.net]
もう最新規格のFortranで良いよ

254 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 12:01:24.16 ID:1i6fvk7+.net]
Fortranに第一級関数がついてimplicit noneがデフォルトになってinterface文をもうちょっと短く書けるようになって引数の型指定をCみたいに書けるようになって
配列の大きさ指定の関数に組み込みでない関数を使えるようになってgfortranのbind(C)周りのバグを解消してくれたらFortranでいいよ

255 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 12:13:39.86 ID:pDpr3v8b.net]
西京言語PHPを使えばいいじゃん(いいじゃん)

256 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 12:20:24.44 ID:aTcnbQEE.net]
PHPが、前世紀末に流行したPerlでCGIという極悪システムを撲滅した功績は大きい

257 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 12:31:15.99 ID:MXV4el39.net]
mod_perlとだったら大して変わらん気がする



258 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 12:33:46.88 ID:pDpr3v8b.net]
>PHPが、前世紀末に流行したPerlでCGIという極悪システムを撲滅した功績は大きい

キリッ

www

259 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 17:09:33.99 ID:GkEAGE6K.net]
皆がCGIという共通ルールを守る中
汎用性のない独自実装をしたphp






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

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

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