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


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

次世代言語24 Go Nim Rust Swift Kotlin TypeScript



1 名前:デフォルトの名無しさん [2022/03/22(火) 03:23:41.60 ID:ZDHdo9X7.net]
スレタイ以外の言語もok

前スレ
次世代言語23 Go Nim Rust Swift Kotlin TypeScript
https://mevius.5ch.net/test/read.cgi/tech/1638086359/

224 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 23:17:57.63 ID:sK8SIzoZ.net]
>>218
文法=構文って思ってるのは分かるけど皆がそうとは限らないよ
自分だったら構文と意味論の区別が問題になるようなこのケースで
文法なんてあいまいな用語は使わないけど
強いて言うなら構文と意味論は両方文法に含まれると思っている

225 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 23:20:42.33 ID:Sf6AbPmi.net]
ほとんどが単発IDの自演だぞw

226 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 23:20:59.36 ID:UErfWwQw.net]
>>193
いわゆる普通に文法を意味するところのsyntaxは変わっていない

227 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 23:25:23.45 ID:k+N4+RC0.net]
>>223
カジュアルに文法って言葉使ってるなら自分も気にしないんだけど
>>182 が文法定義って言ってたり
>>199 で形式言語って言ってたりして
それどういう意味で言ってるの?ってのが気になってつっかかってしまった

228 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 23:26:20.50 ID:4czHOVAh.net]
>>220
実際、Rustの最高のターゲットはシステムプログラミングだから、そういう意味ではCと似ている
だからLinuxカーネル、Android OSみたいな巨大プロジェクトでも採用されるまでに至った

その他の有名事例はFirefoxは常識として、Dropboxのファイルストレージ、DiscordのStateサーバ、Figmaのmultiplayerサーバ、AWSのS3/CloudFront/Bottlerocketとかかな

https://www.rust-lang.org/production/users
細かく挙げればここにあるようにいくらでもあるけど、眺めてみると件数としてはhigh performanceを求めて採用する事例が多いかな

229 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 23:32:52.17 ID:6wzTiGXz.net]
>>218
> コンパイラが受理しないからと言って文法が違うとはならないでしょ
少なくともCではほぼ同義だし、他言語でもそんなもんだと思うけど。

Cの場合は「自分の足を撃て」で躊躇なく撃つ言語なので、エラーは、

・シンタックスエラー
・記憶領域(変数のサイズ)等が確定的でなく、オブジェクトコードに出来ない
 (これはC特有で、要はソースを食わせる順が間違ってたりしててサイズを知らない物が存在した場合。
 2パスコンパイルをしてる他言語では発生しない)

だから、他言語でもコンパイルが通らない=文法エラー、という認識が普通だと思うよ。

Rustの場合は他言語だと警告のところをエラーにしてるから話がおかしくなる。
元々全部警告にしてたら、誰も文法が変わったとは認識しないだろうよ。
だけどそういうコードの存在自体を許さないのだから、エラーにしているわけで。

元々コンパイラは色々情報持ってるんだから、気づいたおかしなところも吐いてくれ=警告で、
なら警告チェックを厳しくしてバグ検出出来るんじゃね?=リンターなわけ。
だから簡易リント機能は元々コンパイラにあって、さらにそれを強化して専用にした物がリンターと呼ばれる。

で、ここで「文法が変わった」かどうかを争ってても意味ないと思うが。
他言語出身者なら、同じコードで通る/通らないが変わるのなら、「文法が変わった」と認識するし、
コンパイラ屋なら、構文解釈に変更なくリント機能だけが強化/緩和されたのなら、「文法は変わってない」と言い張るだろうさ。
(実際にリント機能部分だけの変更なのかは知らんが)

230 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 23:36:20.64 ID:8M8bRdYX.net]
例えば自分はWebでReact/Next.jsを使っているんだけど
そこで使われているトランスパイラがRust製のswcへ変わったよ
色んな分野で代替する新たな良いものが出てくるとRust製が多いね

231 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 23:41:25.24 ID:k+N4+RC0.net]
>>228
Cみたいなシンタックスにセマンティクスが浸食してる言語例に出すあたりマジで何も分かってないんですね

それにCのエラーだってシンタックスエラー以外に型エラーとかいろいろあるでしょ

とにかく文法という言葉の使い方が独特すぎるからあなたの言うところの文法とは何かをちゃんと定義して欲しい
コンパイル時にエラーと判断されうるものは全て文法という理解で良い?
リンク時エラーも文法エラー?

232 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 23:57:36.32 ID:6wzTiGXz.net]
>>227
> Linuxカーネル
それ前も言ったけど、forkしただけで、採用されてないよ。

> Firefox
結果シェアはズタボロに落ちて最早ゴミ。対応面倒で切られてる始末だろ。

> Discord
ブログにあった件なら、生存オブジェクトが大量にあるのにGC言語(Go)を使った点が間違ってる。
ただ、Go側で「GC非対象ヒープ」を(自前ででも)用意すれば済んだ話。
あれで言語移行したのはただの趣味だと思うよ。

他は知らんが、Goでも採用実績なんていくらでもあるし、Rustよりは多いと思うよ。
それを全部見るのは無理なので、折角詳しくて布教したがってる連中が居るのだから聞いてみるか、というわけ。
Goの連中はピンポイントでDockerを出してきたし、納得するものでもある。
Rustにはねえのか?という話。
(ただしDockerと同様の物を俺が組む事は多分無いので、他案件/構造も募集)

>>229
本当に「この言語じゃないと現実的に無理」なら、「書き換え」ではなく「新分野を開拓」出来るはずだ。
Dockerの構造は「新規」だよ。



233 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 00:05:21.48 ID:xT2VrKPz.net]
>>231
そんな言いがかりみたいなでたらめ並べてうれしいのかね
それともそれら次々とRustで置き換わっていく恐怖に怯えての言動かね

234 名前:デフォルトの名無しさん [2022/03/26(土) 00:18:45.11 ID:JI2pA1P6.net]
ドッカーは確かにgoで書かれているが、作ったイメージをコンテナとして動かすランタイムはRustで書かれてたりするのだよね
抽象化されてることすら知らなそうけど

235 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 00:19:28.54 ID:W/ip1wOX.net]
>>231
そんなにGo使いたいならRustのことを気にせずGo使ってどうぞ
Goも良い言語だから安心してね

236 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 00:22:51.04 ID:W/ip1wOX.net]
実際、Dockerほどの人気があるプロダクトはめったに生まれないからね

237 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 00:27:20.02 ID:Z1/vdmI3.net]
ランタイムあるからGoだけではコンテナランタイム作れないって聞いたんだけど本当?

238 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 00:30:14.44 ID:9D+dR2jG.net]
>>232
> 次々とRustで置き換わっていく恐怖に怯えての言動かね
自意識過剰すぎ。

というか、俺はお前らがそこまで言語に拘る意味が分からない。
それが適してたらそれを使うだけ、だろ。

俺がその言語作ったわけでもないし、その言語を使えば俺が偉くなるわけでもないし。
お前が修得出来たのなら、俺も修得出来るし、他の人も同様に修得出来るだけ。
修得で無理に差別化しようとするからおかしな事になるのだと思うが。


>>234
Goは味見して糞言語だったからもう使う気はないがな。
同じ事を何度も書かせて、しかも、それを悪いとしてない事が無理だ。
俺が切れたのはJSONのタグ記述だが。
(ああGo的には自動生成出来るような仕組みがあるから問題ないんだ!としている事は知ってる)

239 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 00:33:29.42 ID:3brWv6vK.net]
Dockerコンテナランタイムは色々あってもちろんRust製もある

240 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 00:35:20.61 ID:W/ip1wOX.net]
>>237
じゃあ自分の使いたい言語を使っていいよ
こんなスレに文句を書きに来てるぐらいだから、本当はRustのことが気になって気になってしょうがないんだろうけど

241 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 00:43:54.51 ID:9q2PYIcF.net]
dockerのどの辺がRustで書かれてんの???wwwww

242 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 00:44:14.12 ID:d6z2UOgm.net]
>>237の人は前スレから一貫していて
Goに対してもクソ言動と批判しつつ
Rustを叩くための棍棒としてGoを使っている
C#については絶賛



243 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 00:44:35.30 ID:9D+dR2jG.net]
>>239
リスカブス乙
俺は定期的に他言語情報をクロールしてるだけだよ。

ただNimがCソースを吐くとは知らなかったのでちょっと気になってるが。(使うとは言ってない)

244 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 00:51:02.81 ID:9D+dR2jG.net]
>>241
> C#については絶賛
してねえだろ。
実際GUIは糞で、JSの方が数段マシ。そりゃ世の中のGUIがHTMLになるのも納得だよ。
GUIのメインスレッド+サブスレッドの構造もよろしくないと思ってる。
(ここら辺も既に書いたが)

ただな、どの言語にも一長一短はあるんだよ。みんな色々考えて、改善してきてるわけだから。
だから、○○言語最強!ではなくて、言語特性を理解した上で選択、としたいわけ。

245 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 00:54:11.51 ID:AS0dCv5n.net]
>>241
それに対してガイガー君がC#を叩く構図だね
もちろんそれ以外の時はガイガー君はRust叩き
二人ともロクでなし

246 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 00:54:44.30 ID:47RFB1/G.net]
Firefoxが墜ちたのは旧エクステンションを切ったからで…(またこの話?)

247 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 00:58:24.45 ID:W/ip1wOX.net]
>>242
そういうのが気になるなら vlang もいいかもね

248 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 01:01:58.12 ID:LzDSDoUW.net]
>>243
JavaScriptも良い言語だけど
型が弱いしTypeScriptは中途半端だから
最近Rustに移ったよ
もちろんサーバーサイドだけでなくブラウザサイドもRustでWASM
WASM⇔JavaScriptのオーバヘッドは誤差範囲とわかり実用的

249 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 01:25:19.73 ID:9q2PYIcF.net]
俺はC#を叩いたことは一度もないw
間違いを指摘し続けてただけだぞw
Rustは変なビジネスチャンスばかり狙った信者が嘘八百並べ立ててるから、すごい怪しげな新興宗教になってるw

250 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 01:29:08.29 ID:9q2PYIcF.net]
半年くらい前までは俺も静かにRustの普及を望んでたんだけどねw
今はもう・・・やばい印象しか受けない

251 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 01:57:44.71 ID:Y9M7cL9r.net]
>>249
ガイガー君は嘘つきだな
Rustの配列とスライスの違いすら知らないことがこのまえ発覚したことで全てバレた
Rust初心者でも知っていることなのにな

252 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 02:31:08.59 ID:9q2PYIcF.net]
[T]がarrayで&[T]がスライスだと間違って覚えてただけだろw 原因はarrayを初期化以外で使ってなかったからってちゃんと書いたw
多分Rustをやってる期間は多分お前よりはるかに長いよw



253 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 03:04:03.73 ID:R0l+7kK3.net]
>>251
そんな間違いする人を初めて見た
正解は[T]がスライスで&はその参照
&が参照を意味するだけにすぎないことも知らない時点でRustを知らないと確定

254 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 03:36:58.66 ID:9q2PYIcF.net]
ないないw きっといっぱいいるw こんな説明だからw
https://doc.rust-lang.org/book/ch04-03-slices.html

255 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 04:31:22.21 ID:NboHt8Df.net]
>>251
> [T]がarrayで&[T]がスライスだと間違って覚えてただけだろw

酷くおバカな間違いだな
Rustを使ったことがないからそういう勘違いをしてしまう
ちゃんと公式ドキュメントの各1行目を読もうぜ

配列
https://doc.rust-lang.org/std/primitive.array.html
A fixed-size array, denoted [T; N], for the element type, T, and the non-negative compile-time constant size, N.

スライス
https://doc.rust-lang.org/std/primitive.slice.html
A dynamically-sized view into a contiguous sequence, [T].

256 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 06:43:20.01 ID:9q2PYIcF.net]
それはAPIリファレンスだろw

257 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 07:50:27.56 ID:ZP/Jhtaq.net]
>>62
それ、C/C++が全く出来ないレベルじゃん。メモリやポインターの理解が出来てないから実行時デバッグに時間が掛かる。普通は処理を書いたら動くことを確認するだけで済む。

258 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 07:54:07.76 ID:Vvd4qIhx.net]
>>251
> 多分Rustをやってる期間は多分お前よりはるかに長いよw

はるかに長い期間やっててそれでは知能が低いです

259 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 08:12:28.41 ID:3FEKWr2M.net]
>>256
それはそういう話じゃないと思うぜ
C++とRustの両方使いこなせると分かるが
低レベルであるポインタアクセスがRustでは無くなり抽象化された参照アクセスとなり
安全でないアクセスがコンパイル時点で排除されるためその種の実行時デバッグが無くなる
その件だと思われる

260 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 08:24:24.55 ID:9q2PYIcF.net]
>>257
ただの記憶違いに知能は関係ないw 実際それで困ったことがないからなw

261 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 08:47:16.92 ID:9LDujC2l.net]
>>259
その件は君が嘘をついていると明確になっている
その件の書き込みを見ると君はarrayとsliceを勘違いしただけでなく関数からarrayで返すと明言している
一方でその関数は返り型宣言で必ず[T; N]が現れる
このNは定数であるからさらに宣言することになりarrayでNの存在を忘れる人はいない
しかし君はarrayを[T]だと間違えて覚えていたわけだから矛盾する
君はRustのコードを書いたことがないという結論となる

262 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 09:14:29.48 ID:9q2PYIcF.net]
何を勘違いしちゃったのか知らないけど、こう書いてあるんだけどw
「arrayは定義はあるんだけど、今まで初期化にしか使わなかったから、使わなすぎて間違って覚えてたw」



263 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 09:23:18.54 ID:6PoAfdDe.net]
>>260
正確にはガイガー君はsliceで受けてArrayで返すと言っている
この発言の時点でガイガー君はRustを知らないと証拠

動的サイズのスライスで受けて固定サイズの配列を返すのは不可能だからだ
Nが判明しないと配列で返せないが実行時になるまでスライスの長さは不明
この点からもガイガー君はRustを知らない

264 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 09:51:30.12 ID:9q2PYIcF.net]
ニュアンスが違うんだよw
「それは俺のポリシーとして、可能ならVecを返すならVecを受けたいだけw
今回のケースではメリットとかないよw
同様にsliceで受けたらArrayで返したいし、iteratorを受けたらiteratorを返したいw」
slice->&[T]
array->[T]

265 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 09:55:08.60 ID:Vvd4qIhx.net]
はるかに長い期間やってるのにこの有様
子供の遊びかな?

266 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 09:56:51.30 ID:9q2PYIcF.net]
実際のロジック書くのに使ってたのVecだもんw

267 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 10:02:36.56 ID:+G9UHc/m.net]
結局TypeScriptがどの場においても最強って言いたいの?

268 名前:デフォルトの名無しさん [2022/03/26(土) 10:18:06.61 ID:Iuuv9oj0.net]
間違ってても普通に説明すりゃいいのにお互いに煽りながら主張しあってるから、くだらない議論が余計に長引く

269 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 10:39:18.75 ID:9q2PYIcF.net]
TypeScriptさいきょー

270 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 10:44:45.97 ID:Z1/vdmI3.net]
>>263
Vecを返す関数は原則引数の型はVecにしたいということ?
敢えてそうする理由ってなにかあるの?

271 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 11:44:23.82 ID:3zXxZFyx.net]
goとtypescriptどっちかを捨てればいいのに

tcshやrubyを捨てるみたいに

272 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 12:29:34.61 ID:5mCX3GGP.net]
新しい言語はどれも配列の宣言があまりきれいじゃない気がする

Cなどの型名 変数名[要素数]だと何か都合が悪いのだろうか
それともやってる感を出すために変えてるの?



273 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 12:37:22.57 ID:9D+dR2jG.net]
>>271
固定長で問題ないならそれが一番いいが、
大体において固定長である事自体がものすごく不便だから。

274 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 12:41:53.15 ID:sDWgty5N.net]
>>271自身がモダンな言語における配列を正しく理解できてないから変なように感じるんじゃないかな
最近の言語ではCスタイルの配列、いわゆる配列変数(複数個の変数が連続して並んでいるもの)はあまり積極的に使用されないんだよ
最近の言語では配列は配列型のオブジェクトであって、変数が並んでるわけじゃないの

275 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 12:49:13.92 ID:N9qlOq0y.net]
>>263
Vecを返すならVecを受けたい、って
例えばこういうこと?
fn foo(input: Vec<i32>) -> Vec<i32> {…}

276 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 17:16:05.98 ID:+G9UHc/m.net]
>>271
Cの形だとパーサーをLRにしないといかんのでは?
GoとかPascalの形だとLLでパースしきってしまえるから早い。

277 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 18:34:45.11 ID:9q2PYIcF.net]
別スレの引用なので、興味があればそれを見てこいw
LL/LRとか懐かしいなw
S式とかに回帰するかw

278 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 18:46:07.16 ID:MJID/KD0.net]
ちんちんシュッ!シュッ!シュッ!

279 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 20:52:37.86 ID:Vz8Iz6e1.net]
>>263
Vecを受けてVecを返すインタフェースに通常することはない
普通は以下のようにする

(1) 同じVecを返す場合 (=書き換えたい場合)
まずこの場合はVec<T>自体を渡さなくても参照を渡せば済む
書き換えるから&mut Vec<T>を渡せばいいように思うが
普通はスライス&mut [T]を渡すインタフェースにする
なぜならVecの書き換え参照を渡すとVecの書き換えしかできないが
スライスの書き換え参照を渡せばVecの途中一部の書き換えもできるし
配列や配列の途中一部の書き換えもできるからである

(2) 別のVecを返す場合 (=引数側のVecのデータから作り出したい場合)
この場合も同様となる
引数としてVec<T>を渡すのではなくスライス共有参照&[T]を引数にする
これで入力データがVecだけでなく配列やそれらの一部でも受け付けることが可能

(2)' (2)のケースで入力を順次アクセスのみする場合
この場合は入力としてイテレータを受け付けられると良い場合がある
なぜならイテレータはVecのようなメモリ領域を必要としないため有利
イテレータを入力とする場合のインタフェースは更に2通りに分かれる
 [a] イテレータのメソッドとしてしまう
  イテレータチェーンに組み込むことができて便利
  ただしVecや配列やスライスに適用する時はinput.iter().method()の形になる
 [b] 引数として IntoIterator<Item=T> を受け付ける
  これだと引数に直接スライス、配列、Vec、イテレータのどれも渡せて便利
  ただしイテレータチェーンに組み込むことはできない
  イテレータメソッドの2つ目の入力インタフェースとしても使われる
どちらの場合でも順次出力でない場合ならばVecを返すのもありだが
順次出力ならばイテレータを返したほうがイテレータチェーンに組み込めて有利
なぜなら中間生成Vecを無駄に返さずに済むからである
この場合にVecが欲しければcollect()すればよい

280 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 21:26:11.73 ID:9q2PYIcF.net]
>>278
間違ってるよw それは俺のポリシーだからw 普通こうするという話じゃないw

281 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 22:23:14.39 ID:27vH2xuj.net]
ガイガー君はRustに関しても素人だから
そういう常識を知らなくても仕方ない

282 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 22:42:20.46 ID:Z1/vdmI3.net]
>>279
なんでそういうポリシーなの?



283 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 23:07:56.60 ID:Z1/vdmI3.net]
>>279
&strじゃなくてString使ったり、&TじゃなくてBox<T>やRc<T>使ったりするのかな
初めて聞くポリシーだからどういう考え方なのかが気になる

284 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 23:13:02.38 ID:Z1/vdmI3.net]
>>279
あっ、もしかしてborrow checker通すために借用使わないようにしてる?

285 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 23:29:11.35 ID:fQbyL396.net]
鋭い指摘だな
確かにガイガー君は参照を使いこなせなくて借用を批判してた

286 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 23:34:15.32 ID:Vvd4qIhx.net]
なんか哀れだよね彼は

287 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 23:41:42.26 ID:9q2PYIcF.net]
同じ型の方が設計意図が明白になるし、繋げやすいからw それだけだよw 他のにする理由がないよねw
まあもとのスレにも理由は書いたけどw

288 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 23:58:50.18 ID:+vg1NaC4.net]
>>286
繋げやすい??
全く意味不明だ
繋げるならばメソッドチェーンにすべき
そしてVecが中間生成物となるのは無駄となるバッドパターン
イテレータメソッドチェーンにすべき
イテレータを使わないならばスライスを引数で渡すべき

289 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 00:23:39.64 ID:PoGWmBV8.net]
>>287
君にとって意味不明なら意味不明でいいよw そう思っていればいいw
ポリシーとはそういうものw 菜食主義者に肉を食わないとはケシカランって言ってるようなものだからw

290 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 00:25:07.45 ID:v5PJ1K00.net]
>>286
借用で済ませて良い場所で所有権要求するのは普通じゃないからドキュメントコメントにちゃんと書いた方が良いよ

291 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 00:30:12.96 ID:wv2YT7DD.net]
>>288
技術分野でのポリシーとはまず意味のある目的がありそのために設定される
それを説明せずにポリシーとだけ唱えて普通ではない非合理なインタフェースにしているから叩かれる

292 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 01:18:29.05 ID:PoGWmBV8.net]
wwwww
知ってて書いてるんだと思うが、もとを読めば分かるけど、参照で受けてるよw



293 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 01:35:46.26 ID:BChElFEF.net]
>>291
見てみた
確かに引数の型をVecの参照にしてることがわかった
そして元のお題では一貫してずっとlet input = ["a", "b", "c"];となっているのに
引数の型をVecの参照にしてしまったためそこだけlet input = vec!["a", "b", "c"];としている
つまりに引数の型をVecの参照したのは明白な失敗となっている
もちろん正解は引数の型をスライスにすること
これで配列もVecも受け取れる

294 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 03:52:33.29 ID:PoGWmBV8.net]
>>292
だから失敗したからではなくて、何度も言ってるようにポリシーとして合わせたんだよw
正解は動くことw 2つの方法からsliceとしない方を選択したのw

295 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 04:12:54.52 ID:keWGy6tX.net]
>>293
それまでに他の人たちが書いたコードは入力元データが全てlet input = ["a", "b", "c"];と配列になっているね
そして関数の引数の型は全てスライス&[T]となっているね

ところが唐突にその引数の型を&Vec<T>へと変更したコードが登場
それまでの入力元の配列をスライスで渡すことが出来なくなる破綻
破綻の辻褄を合わせるため入力元データを配列から無駄で無意味なlet input = vec!["a", "b", "c"];へと変更
それまで入力元が配列でもスライスでもVecでも大丈夫だったのに入力元がVecしか受け付けなくなっているね

296 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 07:57:46.18 ID:DQbwsS9F.net]
> 2つの方法からsliceとしない方を選択したのw

キミはスライスが何なのかも知らなかったでしょ
自分の知能が低いのを弁えないと恥かくよ

297 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 08:56:07.10 ID:PoGWmBV8.net]
>>294-295
何を言いたいのか知らんが、I/F部分は自由にいじってるので、渡す型が変わるのなんて何の問題もないよw

298 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 09:20:19.51 ID:aDr0zmJe.net]
>>296
元々は利便性の良いスライスや効率で優る配列も受け付けていたのに
貴方の変更では効率の劣るVecのみを受け付けとなってコードが退化している

299 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 10:51:24.60 ID:PoGWmBV8.net]
>>297
何度も言ってるようにポリシーw

300 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 10:56:32.38 ID:hQNNJiB+.net]
>>298
劣ったコードにするポリシーかよ…

301 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 11:10:30.04 ID:DQbwsS9F.net]
さすがに可哀想やからもうやめたれ

302 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 11:41:31.93 ID:PoGWmBV8.net]
>>299-300
別に劣っても可哀想でもないよw 意図が明白なコードになってるw



303 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 12:11:24.82 ID:mrHY19JA.net]
面白い課題なんだね
input = ['a', 'b', 'c']; と集合が与えられた時に
そのべき集合(=全ての部分集合)を返す関数subsets()を作成せよ、ってことか
[]とか['a']とか['a', 'b']とか['a', 'b', 'c']とか全てを漏れなく返せと

304 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 12:27:49.24 ID:PoGWmBV8.net]
初学の人でもすぐ書ける簡単なロジックだよw

305 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 12:39:06.02 ID:w1ZdsVcb.net]
>>303
じゃあプログラム書いてみて

306 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 14:06:20.96 ID:v5PJ1K00.net]
>>301
Vec<T>を引数で受けることは配列全体の所有権を関数に委譲するという意図を表明してるんだけど
そういう意図ということで認識合ってる?

307 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 15:46:34.95 ID:PoGWmBV8.net]
このスレでも参照って何度も書いてんだけどw アホなのw?

308 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 20:05:48.71 ID:beT1hCdX.net]
たかだか数年で身につけたスキル、しかも数年後には使ってないかもしれないスキルでイキってんじゃねーよ

309 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 21:23:46.37 ID:PoGWmBV8.net]
Rustは数年後にはなくなってるかもねw

310 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 23:33:02.98 ID:Pk6DsGJR.net]
人間よりは長生きしてもらわないと
AIが人間に勝てそうな所がどんどん減っていく

311 名前:デフォルトの名無しさん mailto:sage [2022/03/27(日) 23:40:27.92 ID:PoGWmBV8.net]
Rustなんて人間に負けっぱなしな印象しかないけど・・・w

312 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 05:38:25.18 ID:1zvMDK8z.net]
恥ずかしながら質問なんだがNimって何?



313 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 06:43:08.84 ID:dhMFtSYI.net]
中間生成となるVecを使わずにイテレータを返すイテレータにするという点と
2進数でべき集合を表現するという点が面白いね

fn subsets<T>(input: &[T]) -> impl Iterator<Item=impl Iterator<Item=&T>> {
let len = input.len();
(0..(1 << len))
.map(move |bits| (0..len)
.filter(move |index| bits & (1 << index) != 0)
.map(|index| &input[index]))
}

fn main() {
let input = ["a", "b", "c"];
use itertools::Itertools;
for (i, iter) in subsets(&input).enumerate() {
println!("{}: {:03b}: [{:?}]", i, i, iter.format(", "));
}
}

出力
0: 000: []
1: 001: ["a"]
2: 010: ["b"]
3: 011: ["a", "b"]
4: 100: ["c"]
5: 101: ["a", "c"]
6: 110: ["b", "c"]
7: 111: ["a", "b", "c"]

314 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 08:08:20.92 ID:hQA9uA7d.net]
>>311
目の前にある箱で検索しろ

https://ja.wikipedia.org/wiki/Nim

315 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 11:24:54.13 ID:cDjwoBcZ.net]
>>297
横からみてた感想だけど、コードの目的(全てのサブセットを列挙する)達成できているのに退化とは?
その論説は本来の設問からすると別のゴールが生えてる

316 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 12:05:00.42 ID:6B08HyS+.net]
ツッコミついでにスライスの参照ではなくVecでインターフェース書くメリットについて考えてみたが
これ考え方がモロにPythonのそれだわ
こういう設計はRustだとあんまりやらないが、これをVecから派生した型へのimplとして書くとそこまで違和感ない

「Rustっぽくない」のは指摘されてる通りだが、思想としてはたぶんそこから来てる

317 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 12:12:56.02 ID:6B08HyS+.net]
Pythonはそのまま例えばこんな感じで書かれた関数をオブジェクトに代入してメソッドに使えるからPythonって言ったけど
とにかくオブジェクト指向にどっぷり頭まで漬かった設計だな

元の「どちらのやり方もある」発言も、「関数型の書き方に寄せるかオブジェクト指向的な書き方に寄せるか」という意味なら納得
(まあオブジェクト指向に寄せるならimplで書けよなんだが)

318 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 14:02:45.07 ID:aDLT1T3I.net]
>>314
元々に挙げられていた例は入力が配列
そして彼のコードは配列を入力として受け付けなくなっているから退化であっている

319 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 14:31:13.30 ID:tMGTgyj2.net]
>>316
そのimplを使ったオブジェクト指向的な書き方でもその理由はおかしい
例えばRustには以下のようなrepeatというメソッドが標準ライブラリにある
assert_eq!(vec![1, 2].repeat(3), vec![1, 2, 1, 2, 1, 2]);
もちろんご指摘のようにimplで書かれているのでメソッドとして使えている

しかしソースコードを見てみると次のようになっている
 impl<T> [T] {
  fn repeat(&self, n: usize) -> Vec<T>
  (以下略)
つまりVec<T>に対してではなくスライス[T]に対してimplされている

したがって配列に対しても適用できる
assert_eq!([1, 2].repeat(3), vec![1, 2, 1, 2, 1, 2]);
もちろんスライスに対しても適用できる
let v = [0, 1, 2, 3, 4];
assert_eq!(v[1..=2].repeat(3), vec![1, 2, 1, 2, 1, 2]);

>>315
上述の状況なのでその指摘では皆が納得できる理由や説明になっていない
メリットについて考えてみたとのことだがVecにimplするメリットもない

320 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 22:32:51.22 ID:O2ikFAVr.net]
ガイガー君完敗か

321 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 23:11:23.81 ID:51Y1Thh9.net]
1+1=の結果とか誰も興味ない上、俺がindex版、iterator版、vector版3つ正解を書いてやった後も、誰も興味のないその話題をひたすら続けて無視された挙げ句、このスレにまで持ってき

322 名前:て見当違いな自画自賛と自作自演の嵐w
どれだけバカなんだよw
[]
[ここ壊れてます]



323 名前:デフォルトの名無しさん mailto:sage [2022/03/28(月) 23:19:40.94 ID:ie9Ayk2m.net]
>>318
ガイガー君とやらは配列とスライスの違いすら知らなかった超初心者だから仕方ないんじゃないか
もちろんスライスに対して実装すればVecにも配列にも適用できるからそれがベストチョイス

324 名前:デフォルトの名無しさん mailto:sage [2022/03/29(火) 01:19:51.25 ID:lkDcLhrw.net]
>>312
Rustってスクリプト言語みたいに簡単に書けるんやな






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

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

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