スレタイ以外の言語もok
前スレ
次世代言語22 Go Nim Rust Swift Kotlin TypeScript
https://mevius.5ch.net/test/read.cgi/tech/1629590343/
探検
次世代言語23 Go Nim Rust Swift Kotlin TypeScript
■ このスレッドは過去ログ倉庫に格納されています
2021/11/28(日) 16:59:19.16ID:gZqbEyz/
210デフォルトの名無しさん
2022/02/13(日) 03:57:54.17ID:BBswpWkz array::mapは複製が生じるだろ、普通はarr.map(...).map(...)は使わないにしてもlazyだから無駄な一時配列が
生成されることもないとか言い過ぎだ。ちゃんとドキュメント読んでんのか?そもそも一時的な集合要素が必要に
なるのはアルゴリズム次第であり、”理解してないのに”信じてしまう事は愚かすぎる
生成されることもないとか言い過ぎだ。ちゃんとドキュメント読んでんのか?そもそも一時的な集合要素が必要に
なるのはアルゴリズム次第であり、”理解してないのに”信じてしまう事は愚かすぎる
211デフォルトの名無しさん
2022/02/13(日) 04:07:23.70ID:8v/TbvES >>210
array::mapはイテレータじゃないよ
array::mapはイテレータじゃないよ
212デフォルトの名無しさん
2022/02/13(日) 04:15:35.21ID:BBswpWkz だから複製生じるでしょ
213デフォルトの名無しさん
2022/02/13(日) 04:24:59.24ID:8v/TbvES array::mapで複製は生じるけどイテレータがlazyか否かの議論には何も関係ないよね
mapはOption::mapなどと同じでイテレータとは関係なくコレクションやコンテナの中身を写像する関数であって、イテレータにも同様の意味を持つ関数が用意されているというだけ
>>209 のイテレータだから無駄なものは作られないは言い過ぎで反例はありそうに自分も思うけど、イテレータじゃないものを持ち出すのは例として適切ではない
イテレータそのもののせいではないが borrow checker のせいで余計なアロケーションが必要になる場合はある
以下の記事の最後の方のコード例なんかが一例
https://fasterthanli.me/series/making-our-own-executable-packer/part-6
mapはOption::mapなどと同じでイテレータとは関係なくコレクションやコンテナの中身を写像する関数であって、イテレータにも同様の意味を持つ関数が用意されているというだけ
>>209 のイテレータだから無駄なものは作られないは言い過ぎで反例はありそうに自分も思うけど、イテレータじゃないものを持ち出すのは例として適切ではない
イテレータそのもののせいではないが borrow checker のせいで余計なアロケーションが必要になる場合はある
以下の記事の最後の方のコード例なんかが一例
https://fasterthanli.me/series/making-our-own-executable-packer/part-6
214デフォルトの名無しさん
2022/02/13(日) 04:25:50.19ID:OAT58Vuo >>210
array::mapはイテレーターではありません
配列から配列への単なる変換です
| pub fn map<F, U>(self, f: F) -> [U; N] where F: FnMut(T) -> U
arrayでのこの定義を見ればイテレーターではなく返り値の型が配列だとわかるはずです
ちゃんとドキュメントを読みましょう
イテレーターを使えば以下のような例において
Rustでは無駄な一時配列が生成されることはありません
[6, 4, 7, 3, 5, 9, 2, 1, 8]
.iter()
.map(|n| n * n * n)
.filter(|n| n > &300)
.for_each(|n| println!("{n}"))
array::mapはイテレーターではありません
配列から配列への単なる変換です
| pub fn map<F, U>(self, f: F) -> [U; N] where F: FnMut(T) -> U
arrayでのこの定義を見ればイテレーターではなく返り値の型が配列だとわかるはずです
ちゃんとドキュメントを読みましょう
イテレーターを使えば以下のような例において
Rustでは無駄な一時配列が生成されることはありません
[6, 4, 7, 3, 5, 9, 2, 1, 8]
.iter()
.map(|n| n * n * n)
.filter(|n| n > &300)
.for_each(|n| println!("{n}"))
215デフォルトの名無しさん
2022/02/13(日) 04:39:02.47ID:8v/TbvES <[T ; N] as Iterator>::map() のドキュメントを参照してlazyなことの裏取りをしようとしたら array::map() にたどり着いちゃったのかな
だとしたら rustdoc が分かりづらいのが悪い
だとしたら rustdoc が分かりづらいのが悪い
216デフォルトの名無しさん
2022/02/13(日) 04:44:32.73ID:8v/TbvES <[T; N] as Iterator> なんて存在しなかった
正しくは
<<[T; N] as IntoIterator>::IntoIter as Iterator>::map
または
<std::slice::Iter as Iterator>::map
だった
こんなの初学者わかんないよね
正しくは
<<[T; N] as IntoIterator>::IntoIter as Iterator>::map
または
<std::slice::Iter as Iterator>::map
だった
こんなの初学者わかんないよね
217デフォルトの名無しさん
2022/02/13(日) 04:50:04.12ID:OAT58Vuo >>213
イテレーター連鎖の途中で「無駄な一時配列が生成されない」は常に正しいです
ただし「そのイテレーターの機能として必要不可欠な無駄ではない」一時配列(Vec)を利用するイテレーターは存在します
いずれにせよ無駄な一時配列が生成されることはありません
イテレーター連鎖の途中で「無駄な一時配列が生成されない」は常に正しいです
ただし「そのイテレーターの機能として必要不可欠な無駄ではない」一時配列(Vec)を利用するイテレーターは存在します
いずれにせよ無駄な一時配列が生成されることはありません
218デフォルトの名無しさん
2022/02/13(日) 05:06:50.08ID:OAT58Vuo >>213
そのリンク先の記事を読ませていただきましたが
借用ルール(single writer xor multiple readers)違反が原因でその回避のため途中collect()しているだけでした
具体的には&self.objectsで借用中なのに&mut selfと定義されているself.get_object()を呼び出しています
したがって今回の問題とは無関係ですね
そのリンク先の記事を読ませていただきましたが
借用ルール(single writer xor multiple readers)違反が原因でその回避のため途中collect()しているだけでした
具体的には&self.objectsで借用中なのに&mut selfと定義されているself.get_object()を呼び出しています
したがって今回の問題とは無関係ですね
219デフォルトの名無しさん
2022/02/13(日) 05:14:01.48ID:8v/TbvES220デフォルトの名無しさん
2022/02/13(日) 05:43:50.33ID:OAT58Vuo >>219
Rustの配列(array)はスタック上に置けるようコンパイル時サイズ固定なのはご存知ですよね
したがってイテレーターがもし一時配列を吐くもしくは使おうとすると必然的にサイズ可変のVec利用となりヒープを使うことになってしまいます
ところがRustの標準ライブラリのイテレーターは core::iter::Iterator すなわちcore::はヒープが無い環境でも動作可能を意味します
つまり『Rustの標準ライブラリのイテレーターは一時配列(Vec)を絶対に使わない』ように設計されているのです
一方で外部のライブラリにおいてはデータが全て完全に揃わないと動作できない機能を持つイテレーターの場合に「必要不可欠な無駄ではない一時配列(Vec)」を用いるケースがあります
Rustの配列(array)はスタック上に置けるようコンパイル時サイズ固定なのはご存知ですよね
したがってイテレーターがもし一時配列を吐くもしくは使おうとすると必然的にサイズ可変のVec利用となりヒープを使うことになってしまいます
ところがRustの標準ライブラリのイテレーターは core::iter::Iterator すなわちcore::はヒープが無い環境でも動作可能を意味します
つまり『Rustの標準ライブラリのイテレーターは一時配列(Vec)を絶対に使わない』ように設計されているのです
一方で外部のライブラリにおいてはデータが全て完全に揃わないと動作できない機能を持つイテレーターの場合に「必要不可欠な無駄ではない一時配列(Vec)」を用いるケースがあります
221デフォルトの名無しさん
2022/02/13(日) 15:42:54.09ID:BBswpWkz で、複製されますよね?
222デフォルトの名無しさん
2022/02/13(日) 15:59:57.41ID:qi1oHAf6 上で出ていたこれなら配列は複製されない
Rustはそんな無駄なことはしない
>>214
> [6, 4, 7, 3, 5, 9, 2, 1, 8]
> .iter()
> .map(|n| n * n * n)
> .filter(|n| n > &300)
> .for_each(|n| println!("{n}"))
Rustはそんな無駄なことはしない
>>214
> [6, 4, 7, 3, 5, 9, 2, 1, 8]
> .iter()
> .map(|n| n * n * n)
> .filter(|n| n > &300)
> .for_each(|n| println!("{n}"))
223デフォルトの名無しさん
2022/02/13(日) 16:43:01.35ID:BBswpWkz そのように書くのはあなたであって"Rustだから"というのは明らかな間違いです。無駄な事をしているのはあなたであってRustではありません
224デフォルトの名無しさん
2022/02/14(月) 23:03:20.89ID:T9mSH3bb Rustのイテレータは他と機能も同じ以上なのにプログラミング言語最速
さらにヒープを使わずOSもないベアメタル環境でも動作可
さらにヒープを使わずOSもないベアメタル環境でも動作可
225デフォルトの名無しさん
2022/02/15(火) 17:26:38.96ID:urEpWN+O 実装言語を「Go」から「Rust」に変更、ゲーマー向けチャットアプリ「Discord」
https://atmarkit.itmedia.co.jp/ait/articles/2002/10/news038.html
https://atmarkit.itmedia.co.jp/ait/articles/2002/10/news038.html
226デフォルトの名無しさん
2022/02/15(火) 18:02:19.14ID:OW1Pu+wt >>225
次世代言語スレで2年も前のリンク持ってこられても、、、
次世代言語スレで2年も前のリンク持ってこられても、、、
227デフォルトの名無しさん
2022/02/15(火) 18:08:55.40ID:4VdexSIH 2020年の記事なんですけど
2020年が2年前な訳が無いんですけど
2020年が2年前な訳が無いんですけど
228デフォルトの名無しさん
2022/02/15(火) 18:42:09.32ID:Yj0CO5uO えっ
229デフォルトの名無しさん
2022/02/15(火) 19:15:57.25ID:qxt1mofg 2022年だぜ?
230デフォルトの名無しさん
2022/02/15(火) 19:37:22.66ID:Q8iyUbNY 時の流れが加速している
231デフォルトの名無しさん
2022/02/15(火) 19:44:03.28ID:s9A1ir2/ Rustは言語仕様が汚くライブラリもいまいちなので
同じような概念できれいな文法の言語が欲しい
同じような概念できれいな文法の言語が欲しい
232デフォルトの名無しさん
2022/02/15(火) 20:04:30.75ID:RIp/liSi233デフォルトの名無しさん
2022/02/15(火) 20:39:28.00ID:s9A1ir2/234デフォルトの名無しさん
2022/02/15(火) 21:08:36.63ID:RIp/liSi レスサンクス
参考になりました(*´∀`*)
参考になりました(*´∀`*)
235デフォルトの名無しさん
2022/02/15(火) 21:46:44.86ID:JEGPyefo >>233
Cが好きならZigとか良さそうだけどどうなの?
Cが好きならZigとか良さそうだけどどうなの?
236デフォルトの名無しさん
2022/02/15(火) 22:19:13.70ID:s9A1ir2/237デフォルトの名無しさん
2022/02/15(火) 22:22:48.94ID:57mqcwZM >>231
Rustは言語仕様が洗練されていて綺麗なので気に入った
Option / Result に ? や
match / if let / while let あたり
諸悪の根源の null / nil / undefined などが無くなり清らかになった
Rustは言語仕様が洗練されていて綺麗なので気に入った
Option / Result に ? や
match / if let / while let あたり
諸悪の根源の null / nil / undefined などが無くなり清らかになった
238デフォルトの名無しさん
2022/02/15(火) 22:24:45.32ID:s9A1ir2/ mutable を mutと書くのがダサく感じる
239デフォルトの名無しさん
2022/02/15(火) 22:46:47.98ID:fKsGsq6R >>225
それ昔話題になっただろ
それ昔話題になっただろ
240デフォルトの名無しさん
2022/02/15(火) 23:21:29.87ID:tssMbTRA >>227
今年って西暦何年?
今年って西暦何年?
241デフォルトの名無しさん
2022/02/15(火) 23:21:53.24ID:57mqcwZM242デフォルトの名無しさん
2022/02/16(水) 13:58:05.68ID:z1zaWa7r >>237
ここのResult 型の説明で出てくるソースが理解しにくく非常に気持ち悪く汚く見えてしまいます
https://zenn.dev/mebiusbox/books/22d4c1ed9b0003/viewer/bba4b4
これを説明なしでソースだけでパッと流れがわかるなら優秀な人だと思います
ここのResult 型の説明で出てくるソースが理解しにくく非常に気持ち悪く汚く見えてしまいます
https://zenn.dev/mebiusbox/books/22d4c1ed9b0003/viewer/bba4b4
これを説明なしでソースだけでパッと流れがわかるなら優秀な人だと思います
243デフォルトの名無しさん
2022/02/16(水) 14:26:20.55ID:ntLj+IC3244デフォルトの名無しさん
2022/02/16(水) 14:54:32.66ID:3pG+9+g8 オッサンの時間の流れは早すぎて、もう2022年になったとは思えない
っていうジョークだろう
もうどうでもいいよ
っていうジョークだろう
もうどうでもいいよ
245デフォルトの名無しさん
2022/02/16(水) 16:41:34.23ID:oWbPDf/g >>242
むしろResult型は美しく大元は数学の圏論のモナドから来ている
HaskellのMaybeモナド = ScalaのOption = RustのOption = 有か無かの二択
HaskellのEitherモナド = ScalaのEither = RustのResult = AかBかの二択
そしてRustではOptionもResultも値格納付きenum(=タグ付きunion)で表現している
RustのResultもEitherと同じくAまたはBの二択にも使えるが
9割以上の使用方法では特に Aを正常値 Bを異常値(エラー値) として用いる
そのため enum型である Result<T,E> は タグOk(T) と タグErr(E) で構成されている
ここで Tは正常値の型T を示し Eはエラー値の型E を示している
つまり Result<T,E> は2つの型を合成して1つの新たな型として扱うことが出来る
これにより様々なエラー処理が非常に簡単となり各演算(and, or, 変換(map), default値)や
Resultを要素とするイテレータの各演算(map, filter, fold, collect)の各Result版を統一的に扱える
単純にエラー時に上位へエラーを伝播させる場合もRustでは単純となる
例えばGo言語では正常値valとエラー値errの多値で返し以下のようになる
val, err := func()
if err != nil {
return err
}
Rustでは以下の「?」オペレータ1文字追加でよい
let val = func()?;
ここでfunc()はResultを返しておりそれがエラー値Err(err)の時はその値で即return
そして正常値Ok(val)の時の処理のみに記述コードを専念できる
むしろResult型は美しく大元は数学の圏論のモナドから来ている
HaskellのMaybeモナド = ScalaのOption = RustのOption = 有か無かの二択
HaskellのEitherモナド = ScalaのEither = RustのResult = AかBかの二択
そしてRustではOptionもResultも値格納付きenum(=タグ付きunion)で表現している
RustのResultもEitherと同じくAまたはBの二択にも使えるが
9割以上の使用方法では特に Aを正常値 Bを異常値(エラー値) として用いる
そのため enum型である Result<T,E> は タグOk(T) と タグErr(E) で構成されている
ここで Tは正常値の型T を示し Eはエラー値の型E を示している
つまり Result<T,E> は2つの型を合成して1つの新たな型として扱うことが出来る
これにより様々なエラー処理が非常に簡単となり各演算(and, or, 変換(map), default値)や
Resultを要素とするイテレータの各演算(map, filter, fold, collect)の各Result版を統一的に扱える
単純にエラー時に上位へエラーを伝播させる場合もRustでは単純となる
例えばGo言語では正常値valとエラー値errの多値で返し以下のようになる
val, err := func()
if err != nil {
return err
}
Rustでは以下の「?」オペレータ1文字追加でよい
let val = func()?;
ここでfunc()はResultを返しておりそれがエラー値Err(err)の時はその値で即return
そして正常値Ok(val)の時の処理のみに記述コードを専念できる
246デフォルトの名無しさん
2022/02/16(水) 18:27:24.16ID:UmvV858q >>245
そういうレベルの話じゃなくて単にパターンマッチの構文が見慣れないから読みづらいってだけだと思うよ
やってることはファイルをopenしてみて、失敗したらファイルを作成するってだけで何も難しいことはしていないので
そういうレベルの話じゃなくて単にパターンマッチの構文が見慣れないから読みづらいってだけだと思うよ
やってることはファイルをopenしてみて、失敗したらファイルを作成するってだけで何も難しいことはしていないので
247デフォルトの名無しさん
2022/02/16(水) 18:59:25.56ID:3pG+9+g8 モダンな言語ならパターンマッチ構文とか当たり前だし、慣れるべきとしか思わんよな
248デフォルトの名無しさん
2022/02/16(水) 19:05:31.46ID:9J2Avx3b んなことはない
switchの中にswitch入れてる不気味なケースと同じで理解の妨げとバグの温床になっている
switchの中にswitch入れてる不気味なケースと同じで理解の妨げとバグの温床になっている
249デフォルトの名無しさん
2022/02/16(水) 19:06:54.11ID:9J2Avx3b そのうちmatchの中にmatch入れるな見たいなルールが出来て
それが当たり前になるw
それが当たり前になるw
250デフォルトの名無しさん
2022/02/16(水) 19:08:51.82ID:9J2Avx3b > Err(ref error) if error.kind() == ErrorKind::NotFound => {
ここが
Err(ref error.kind() == ErrorKind::NotFound) => {
こうなっていない時点でrustは汚い
ここが
Err(ref error.kind() == ErrorKind::NotFound) => {
こうなっていない時点でrustは汚い
251デフォルトの名無しさん
2022/02/16(水) 19:24:55.51ID:9J2Avx3b そもそもがさあ
他の言語のライブラリにあるファイルオープン時に指定したファイルがなければ作って開いてくれるようなオプションないのか?
他の言語のライブラリにあるファイルオープン時に指定したファイルがなければ作って開いてくれるようなオプションないのか?
252デフォルトの名無しさん
2022/02/16(水) 19:38:23.34ID:J05fEVeY253デフォルトの名無しさん
2022/02/16(水) 19:40:31.24ID:9J2Avx3b C#とかだと複数のプロパティ値を使ったマッチングも当たり前にやっている
254デフォルトの名無しさん
2022/02/16(水) 20:09:46.22ID:4BNkCNLv >>250
Errはenum Resultのタグだからそれは理解が間違っている
>>251
無くても必要なら一瞬で書けるから困らない
例えば関数にするならこのようになる
fn open_or_create(path: impl AsRef<Path>) -> io::Result<File> {
File::open(&path)
.or_else(|err|
if err.kind() == ErrorKind::NotFound {
File::create(path)
} else {
Err(err)
}
)
}
このようにorを使う方が見やすく分かりやすい
matchでOk(x) => x, となったらorと覚えればよい
Errはenum Resultのタグだからそれは理解が間違っている
>>251
無くても必要なら一瞬で書けるから困らない
例えば関数にするならこのようになる
fn open_or_create(path: impl AsRef<Path>) -> io::Result<File> {
File::open(&path)
.or_else(|err|
if err.kind() == ErrorKind::NotFound {
File::create(path)
} else {
Err(err)
}
)
}
このようにorを使う方が見やすく分かりやすい
matchでOk(x) => x, となったらorと覚えればよい
255デフォルトの名無しさん
2022/02/16(水) 20:25:14.55ID:9J2Avx3b なにかミスってない?
256デフォルトの名無しさん
2022/02/16(水) 20:58:53.96ID:bx/iMnwF C#はここ十年さわってないので分からんけど
> Err(ref error.kind() == ErrorKind::NotFound) => {
みたいに書けるってこと?
そもそもC#にパターンマッチなんかあったやろか?
switchがせいぜいあるだけでは?
あと型もletでdestructできるやつじゃなくて
せいぜい (変数 is 型) でシコシコ調べていくだけでは?
> Err(ref error.kind() == ErrorKind::NotFound) => {
みたいに書けるってこと?
そもそもC#にパターンマッチなんかあったやろか?
switchがせいぜいあるだけでは?
あと型もletでdestructできるやつじゃなくて
せいぜい (変数 is 型) でシコシコ調べていくだけでは?
257デフォルトの名無しさん
2022/02/16(水) 21:00:56.89ID:UmvV858q >>250 のkind() は構造体のフィールドとのマッチじゃなくてメソッドの戻り値との比較だから
パターンとして取り扱えるようになるべきではないと思う
構造体のフィールドなら普通にパターンマッチできるよ
パターンとして取り扱えるようになるべきではないと思う
構造体のフィールドなら普通にパターンマッチできるよ
258デフォルトの名無しさん
2022/02/16(水) 21:07:22.97ID:UmvV858q259デフォルトの名無しさん
2022/02/16(水) 21:19:06.45ID:9J2Avx3b 見返してみると
Err(ref error.kind() == ErrorKind::NotFound)ではなく
Err( ErrorKind::NotFound)
とかけたほうがいいなと
Err(ref error.kind() == ErrorKind::NotFound)ではなく
Err( ErrorKind::NotFound)
とかけたほうがいいなと
260デフォルトの名無しさん
2022/02/16(水) 21:25:48.26ID:9J2Avx3b 上のソースは海外の有名なサイト???からほぼ丸パクリなんだな
そっちも突っ込みどころ満載のソースなんだけどパクったほうはさらにおかしくなってる
変なところだらけ
これとか
let f = File::open("hello.txt");
let f = match f {
それに引き続いたこれ
match File::create("hello.txt") {
そして
Err(e) => panic!("Tried to create file but there was a problem: {:?}", e),
と
これ
Err(error) => {
panic!("There was a problem opening the file: {:?}", error)
},
そっちも突っ込みどころ満載のソースなんだけどパクったほうはさらにおかしくなってる
変なところだらけ
これとか
let f = File::open("hello.txt");
let f = match f {
それに引き続いたこれ
match File::create("hello.txt") {
そして
Err(e) => panic!("Tried to create file but there was a problem: {:?}", e),
と
これ
Err(error) => {
panic!("There was a problem opening the file: {:?}", error)
},
261デフォルトの名無しさん
2022/02/16(水) 21:30:10.73ID:9J2Avx3b262デフォルトの名無しさん
2022/02/16(水) 21:41:12.68ID:oWbPDf/g >>253
Rustでも複数マッチングは当然できる
例えばorの概念
let v = match (p, q) {
(true, _) => "前者",
(_, true) => "後者",
(_, _) => "失敗",
};
>>255
matchをorで書き換えなら254で合ってる
目的達成だけならoptionsを使う258で合ってる
>>259
そういう単純なエラー型を自分で設計して使うならそれでOK
今回は std::io が返すエラーだから Err(struct io::Error { ...(フィールド非公開) }) となる
つまり Err(err) で受けて err.kind() で種別を取り出すことになる
なぜこうなっているのかは理由があるのでソース std/io/error.rs を読むべし
Rustでも複数マッチングは当然できる
例えばorの概念
let v = match (p, q) {
(true, _) => "前者",
(_, true) => "後者",
(_, _) => "失敗",
};
>>255
matchをorで書き換えなら254で合ってる
目的達成だけならoptionsを使う258で合ってる
>>259
そういう単純なエラー型を自分で設計して使うならそれでOK
今回は std::io が返すエラーだから Err(struct io::Error { ...(フィールド非公開) }) となる
つまり Err(err) で受けて err.kind() で種別を取り出すことになる
なぜこうなっているのかは理由があるのでソース std/io/error.rs を読むべし
263デフォルトの名無しさん
2022/02/16(水) 21:51:01.16ID:4BNkCNLv264デフォルトの名無しさん
2022/02/16(水) 23:07:11.77ID:9J2Avx3b 視点がずれてる
変なところが多い=美しくないと言ってるんだけど
意味のあるシャドーイングならわかる
変数使って受けてるのに次ではmatchダイレクト
panicを一行で書いたりブロックをつけて書いたりちぐはぐ
書いた奴は馬鹿なんだろう
変なところが多い=美しくないと言ってるんだけど
意味のあるシャドーイングならわかる
変数使って受けてるのに次ではmatchダイレクト
panicを一行で書いたりブロックをつけて書いたりちぐはぐ
書いた奴は馬鹿なんだろう
265デフォルトの名無しさん
2022/02/16(水) 23:09:17.43ID:9J2Avx3b クソど素人にこれだけ書かれるのは馬鹿なんだろうしそれも理解できないのはどうなんだ?
266デフォルトの名無しさん
2022/02/16(水) 23:12:09.22ID:4BNkCNLv 批判だけならバカでもできる
具体的な代案を出せるかどうかが全て
これはどの世界でも同じ
具体的な代案を出せるかどうかが全て
これはどの世界でも同じ
267デフォルトの名無しさん
2022/02/16(水) 23:14:11.42ID:9J2Avx3b いやいや
何を例としてるか全然わかってなかったろ?
具体的に書かれて初めてわかったろ?
そういうところだよ
汚いソースすらわからないんだろ?
何を例としてるか全然わかってなかったろ?
具体的に書かれて初めてわかったろ?
そういうところだよ
汚いソースすらわからないんだろ?
268デフォルトの名無しさん
2022/02/16(水) 23:18:14.63ID:9J2Avx3b rust入門サイトにこんなクソみたいなコード乗せるな
Rustの品格が下がる
Rustの品格が下がる
269デフォルトの名無しさん
2022/02/16(水) 23:18:35.44ID:4BNkCNLv270デフォルトの名無しさん
2022/02/17(木) 01:06:25.84ID:se607RqK rustが汚いって話からサンプルコードが汚いって話にすり替わってるな
271デフォルトの名無しさん
2022/02/17(木) 08:14:31.32ID:eL25V27g272デフォルトの名無しさん
2022/02/17(木) 08:14:54.96ID:2OHfN1Ec もう十分だよ
初心者にありがちな「言語仕様が汚い発言」でしかないのがわかったからもういいよw
初心者にありがちな「言語仕様が汚い発言」でしかないのがわかったからもういいよw
273デフォルトの名無しさん
2022/02/17(木) 23:22:49.91ID:S7RVNfva 彼は当初Rustの言語仕様が汚いと主張
それが無理筋だとわかると誰か個人が書いたサンプルコードが汚いと主張を変更
ところがそれも修正案すら示せず敗走か
それが無理筋だとわかると誰か個人が書いたサンプルコードが汚いと主張を変更
ところがそれも修正案すら示せず敗走か
274デフォルトの名無しさん
2022/02/18(金) 11:21:48.86ID:TQ4wtLA6 初心者にありがちな発言
「コンパイラのバグ」
「言語仕様が汚い」
「バリバリ書く」
「コンパイラのバグ」
「言語仕様が汚い」
「バリバリ書く」
275デフォルトの名無しさん
2022/02/18(金) 11:53:36.75ID:Oiotkhzs276デフォルトの名無しさん
2022/02/18(金) 23:43:37.82ID:dAarluib まだ富士山2合目な発言「美しい言語、感銘を受ける」 「コンパイラが教師」 「初心者にありがち」
277デフォルトの名無しさん
2022/02/19(土) 06:12:57.32ID:TtXtFDlb >>274
Objective-Cだけはマジ言語仕様汚ねーなって思った
Objective-Cだけはマジ言語仕様汚ねーなって思った
278デフォルトの名無しさん
2022/02/19(土) 09:03:05.11ID:Wd6uYUeM Objective-Cはちょっとしか触ったことないけどすこ
mac開発で使ってる人からすると欠点が見えてくるのかな?
mac開発で使ってる人からすると欠点が見えてくるのかな?
279デフォルトの名無しさん
2022/02/19(土) 11:31:16.52ID:R5yjbcGL 記号呪文のオンパレード
280デフォルトの名無しさん
2022/02/19(土) 12:43:55.20ID:gklR0OPN Objective-Cは、あの突き抜けたキメラ感が好きかな。
281デフォルトの名無しさん
2022/02/19(土) 15:13:03.46ID:PBw8xajc Obj-Cそんなに悪くないぞ
RubyのC拡張書いてる感覚に近い
RubyのC拡張書いてる感覚に近い
282デフォルトの名無しさん
2022/02/19(土) 18:59:30.44ID:ukdLXHKY283デフォルトの名無しさん
2022/02/19(土) 20:52:26.77ID:TtXtFDlb そういえばC#やってからJavaに触ると.NETフレームワークの設計が如何によく出来てるかを思い知る
284デフォルトの名無しさん
2022/02/19(土) 21:05:14.30ID:Wd6uYUeM OSXが出てから一般向けの参考書が本屋に並ぶとか信じられないことになったが
昔は図書館の奥底まで潜らないと本が出てこなかったり
興味あるけどなんか手を出せる状況になかったなObjectice-Cは
linuxにgnustep入れてちょこちょこっとサンプル動かして満足してた
いやほんとAppleのおかげでだいぶ脚光当たったなマジで
昔は図書館の奥底まで潜らないと本が出てこなかったり
興味あるけどなんか手を出せる状況になかったなObjectice-Cは
linuxにgnustep入れてちょこちょこっとサンプル動かして満足してた
いやほんとAppleのおかげでだいぶ脚光当たったなマジで
285デフォルトの名無しさん
2022/02/19(土) 23:02:34.03ID:MxDJywIC Obj-CはどうかしらんけどSwiftはまあ良いと思う
依存がでかいときのビルドはつらすぎだけど
依存がでかいときのビルドはつらすぎだけど
286デフォルトの名無しさん
2022/02/20(日) 09:06:02.64ID:42OaaAY/287デフォルトの名無しさん
2022/02/20(日) 23:34:18.52ID:wG3ApFzh288デフォルトの名無しさん
2022/02/21(月) 03:36:10.49ID:pjmAL47q そいつはC#おじさんだから触っちゃダメ、Goスレでも暴れてる
289デフォルトの名無しさん
2022/02/21(月) 15:07:07.57ID:WLj3vt4d 波かっこによるブロックのため、
}
}
}
}
でディスプレイを無駄に占有されて可読性が減る事と
文末のセミコロン(C系)やコロン(Python等)強制で無駄にタイピング量が増えるのが嫌なのですが(強制でなければむしろ好き)、
あれらって、どんな魅力が有るのですか?
javascriptでデータ量を減らせて難読化できるメリットはわかりますが・・・・。
ちなみに自分は{}もpython.nimの様なインデントによるブロックで良いと思うし、
function()はfn()で良いし、println()はp()で良いし、arrayOf(1,2,3)は(1,2,3)で良いと思います。
}
}
}
}
でディスプレイを無駄に占有されて可読性が減る事と
文末のセミコロン(C系)やコロン(Python等)強制で無駄にタイピング量が増えるのが嫌なのですが(強制でなければむしろ好き)、
あれらって、どんな魅力が有るのですか?
javascriptでデータ量を減らせて難読化できるメリットはわかりますが・・・・。
ちなみに自分は{}もpython.nimの様なインデントによるブロックで良いと思うし、
function()はfn()で良いし、println()はp()で良いし、arrayOf(1,2,3)は(1,2,3)で良いと思います。
290デフォルトの名無しさん
2022/02/21(月) 15:49:13.16ID:8WYOAA82 C言語の出始めは関数名とか省略していて可読性悪いとか言われてたなぁ。
291デフォルトの名無しさん
2022/02/21(月) 15:58:43.16ID:/1Q8PAGZ C言語が出る前からプログラミングしてたん?
すごい大先輩ですね
すごい大先輩ですね
292デフォルトの名無しさん
2022/02/21(月) 16:38:51.99ID:Y2/ni7CQ 記号=読めない
英単語=読める
みたいな批判は古いけど今でも一理ある
char **argv;
pointer< pointer<char> > argv;
英単語=読める
みたいな批判は古いけど今でも一理ある
char **argv;
pointer< pointer<char> > argv;
293デフォルトの名無しさん
2022/02/21(月) 16:58:48.39ID:hkBHJMBS おいおい
そんなのタイプしたくないよ
そんなのタイプしたくないよ
294デフォルトの名無しさん
2022/02/21(月) 17:32:22.70ID:NEAxhla5 頻度が高いものほど短くていい
意味不明な記号でもいい
*こそがまさにそれで
*こそがまさにC言語の象徴
意味不明な記号でもいい
*こそがまさにそれで
*こそがまさにC言語の象徴
295デフォルトの名無しさん
2022/02/21(月) 18:20:09.87ID:Vy+crfrM296デフォルトの名無しさん
2022/02/21(月) 20:53:51.80ID:QHx0/ciw297デフォルトの名無しさん
2022/02/21(月) 21:43:40.53ID:8WYOAA82 どうせお前らは嫁や彼女のおっぱい見てオッパイソンとか内心思ってるんだろ。
298デフォルトの名無しさん
2022/02/21(月) 23:34:00.09ID:yT3SkRwP Lispは基本すべてが()で
関数の終わりは
))))))
とかなりがち
スーパーカッコ
]
というのも提案されたが流行らなかった
カッコを閉じると対応するカッコを自動で示してくれるのが
よかったのかなあ(viの show match)
プログラムが大きくなるとどっちにしても一画面では
収まらなくなるし
識別子の名前を短くすると一見してなんだか分からないし
プログラムが大きくなるとわけが分からなくなりやすい
一応理由はある。経験則だけど
関数の終わりは
))))))
とかなりがち
スーパーカッコ
]
というのも提案されたが流行らなかった
カッコを閉じると対応するカッコを自動で示してくれるのが
よかったのかなあ(viの show match)
プログラムが大きくなるとどっちにしても一画面では
収まらなくなるし
識別子の名前を短くすると一見してなんだか分からないし
プログラムが大きくなるとわけが分からなくなりやすい
一応理由はある。経験則だけど
299デフォルトの名無しさん
2022/02/22(火) 00:58:19.88ID:A1/uSbXB300デフォルトの名無しさん
2022/02/22(火) 01:37:03.17ID:Uj7UhjXB301デフォルトの名無しさん
2022/02/22(火) 02:06:26.37ID:8W2asJrF 凡人なので Bracket Pair Colorizer みたいなエディタ支援がないと
3階層以上のカッコの対応が正しいかどうか自信が持てない
3階層以上のカッコの対応が正しいかどうか自信が持てない
302デフォルトの名無しさん
2022/02/22(火) 02:20:32.61ID:N60dC/Ri303デフォルトの名無しさん
2022/02/22(火) 12:22:36.19ID:ysWljmej304デフォルトの名無しさん
2022/02/23(水) 16:27:32.36ID:D80BZOr1 >>303
>Bracket Pair Colorizer は、もう必要ない 既に、VSCode に実装されたから
良い世の中になったなぁ。vimでも実装されればいいのに。特に、対応するカッコを線でつなぐ機能はExcelにも無いのでステキ。
>Bracket Pair Colorizer は、もう必要ない 既に、VSCode に実装されたから
良い世の中になったなぁ。vimでも実装されればいいのに。特に、対応するカッコを線でつなぐ機能はExcelにも無いのでステキ。
305デフォルトの名無しさん
2022/02/23(水) 16:40:31.88ID:6S791qLX306デフォルトの名無しさん
2022/02/25(金) 00:55:39.55ID:XW+/SlIV307デフォルトの名無しさん
2022/02/25(金) 02:23:42.73ID:vMVHS55f Cのセミコロンはalgolのセミコロンやcobolのピリオドを引きづっている
ここで一連の処理が終わりという意味でターミネータを置いた
改行を書かずにぎっしり書くときにどこで切っていいか分かるからね
自然の文に近かろうといういい加減な理由
当時はまだ人間にとっての書きやすさとか
人間にとっての読みやすとさかほとんど配慮されてなかった
ここで一連の処理が終わりという意味でターミネータを置いた
改行を書かずにぎっしり書くときにどこで切っていいか分かるからね
自然の文に近かろうといういい加減な理由
当時はまだ人間にとっての書きやすさとか
人間にとっての読みやすとさかほとんど配慮されてなかった
308デフォルトの名無しさん
2022/02/25(金) 04:31:10.49ID:aDhOSI3t Rustはセミコロンの有無で文か式(値)かを分けている
if condition {
a = p + q;
} else {
a = x + y;
}
これをifの中を文ではなく式(値)にすると
a = if condition {
p + q
} else {
x + y
};
もちろん改行やインデントは自由なので
a = if condition { p + q } else { x + y };
こう書いても同じ
波括弧は区切りとして不可欠であり
多重時の対応関係となるだけでなく
波括弧はブロックを形成しスコープの管理にも不可欠
例えば波括弧により新たなブロックを形成することで
ロックを取得した変数がブロック終了時に自動解放され
その時にロックも自動解放されるなど安全設計にも波括弧が活躍
このようにセミコロンと波括弧はRustにおいて非常に重要な意味を持つ
きちんと活用したプログラミングにおいてはセミコロンも波括弧も無駄ではない
if condition {
a = p + q;
} else {
a = x + y;
}
これをifの中を文ではなく式(値)にすると
a = if condition {
p + q
} else {
x + y
};
もちろん改行やインデントは自由なので
a = if condition { p + q } else { x + y };
こう書いても同じ
波括弧は区切りとして不可欠であり
多重時の対応関係となるだけでなく
波括弧はブロックを形成しスコープの管理にも不可欠
例えば波括弧により新たなブロックを形成することで
ロックを取得した変数がブロック終了時に自動解放され
その時にロックも自動解放されるなど安全設計にも波括弧が活躍
このようにセミコロンと波括弧はRustにおいて非常に重要な意味を持つ
きちんと活用したプログラミングにおいてはセミコロンも波括弧も無駄ではない
309デフォルトの名無しさん
2022/02/25(金) 12:38:43.75ID:Eg3DloqN Ruby on Rails で有名な、民泊のAirbnb、JavaScript スタイルガイド
ステートメントを明示的に終了し、
不足しているセミコロンを検知するようにリンターを構成すると、
問題に遭遇するのを防ぐのに役立ちます
一方、Rubyでは、セミコロンを付けない
ステートメントを明示的に終了し、
不足しているセミコロンを検知するようにリンターを構成すると、
問題に遭遇するのを防ぐのに役立ちます
一方、Rubyでは、セミコロンを付けない
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【赤坂ライブハウス刺傷】逃走していた自衛官の男(43)を殺人未遂の疑いで逮捕 警視庁 被害女性とは知人関係 [Ailuropoda melanoleuca★]
- 【千葉】コンビニに尿入りペットボトル並べた疑い、26歳男「むしゃくしゃして」…購入した客が飲もうとしたところ臭いに違和感 [ぐれ★]
- 中国官製報道「日本経済はもう持たない」にネット民ツッコミ「ニュースだけ見てたら日本はもう百回くらい爆発してる」 [1ゲットロボ★]
- 植田日銀総裁 「円安進行が物価高を起こしている」 ★4 [お断り★]
- 【STARTO ENTERTAINMENT】timelesz、メンバーの不適切言動を謝罪「不用意かつモラルに反した発言であった」 全員の署名入りでコメント [Ailuropoda melanoleuca★]
- 【硬貨】500円だと思ったら「500ウォンが入っていた」価値は約10分の1 全国で飲食店などで“500ウォントラブル”相次いで報告 [ぐれ★]
- 【神奈川新聞】「暇空茜」を県警追送検 [746833765]
- ハムエッグ派VSベーコンエッグ派
- 俺のチンポがでかすぎて、お前らにじゃあ見せてみろって言われた際にうpするのが恥ずかくて困ってます
- 山上徹也の妹「父親と長男自殺しました、母親が宗教に数億円貢ぎ貧困、次男が総理大臣射殺しました」
- 貧者飯ってグミ考えた
- 男子あるある
