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

■ このスレッドは過去ログ倉庫に格納されています
2022/08/05(金) 08:26:38.87ID:TpiqaUBm
スレタイ以外の言語もok

前スレ
https://mevius.5ch.net/test/read.cgi/tech/1655771266/
2022/08/14(日) 10:38:15.56ID:q44Oj4I2
>>412
Rustの世界的大規模な調査結果により
Rustの利用対象はサーバーサイド/バックエンドが最多で
以下クラウド、分散システム、WebAssembly/Webフロント、組み込みといった状況になっている
2022/08/14(日) 10:43:52.82ID:oyMyAes/
>>413
ソースは?
大手企業は?
2022/08/14(日) 10:48:15.10ID:q44Oj4I2
>>414
>>413のソースは毎年調査が行われているRust Annual Survey Report
2022/08/14(日) 10:58:46.14ID:J5MpSH/Q
>>407
XORじゃないけどな
2022/08/14(日) 11:16:29.29ID:UOAed9Kc
before == afterのことをimmutableというなら
==の定義とかあるんですか?
まさか、大手企業を観測すれば==の定義が分かると思ってるマッドサイエンティストはいないよね
2022/08/14(日) 11:19:12.35ID:q44Oj4I2
>>416
一般的にデータ競合を起こさないための条件は
multiple readers XOR single writer
そしてRustも同じくこのシンプルな原則に従っている
2022/08/14(日) 11:47:03.37ID:E6D9Byfe
現実には複数の状態のストアに跨がる論理的な競合の方がずっと問題で、単一データの読み書きの競合なんてアトミック変数くらいで十分
2022/08/14(日) 11:59:58.73ID:N9EVRHSm
実行時に同時に読み書きしうるかどうかをコンパイラが厳密に検知することは不可能
Rustがやってるのは大幅に安全側に倒すアプローチで、それでいいんだったら関数型みたいにそもそもミュータブルなデータを共有しない、でも立派に対策になってるよね
実際それで十分なケースが殆どでしょ
2022/08/14(日) 12:04:57.82ID:npbVW+VU
Rustはdata raceはふせげてもrace conditionは防げない
銀の弾丸でも何でもない
2022/08/14(日) 12:09:32.20ID:q44Oj4I2
>>419
アトミック変数を忘れたら競合する
さらにアトミック変数を使ってもそのコストがかかる

Rustでは静的にコンパイル時にデータ競合を必ず排除する
アトミック操作を必要とするならば指摘してくれる
multiple readers XOR single writerを守っていれば当然(コストの高い)アトミック操作を必要とせずにコンパイルが通る

したがってRustは他の言語よりもコストを低くデータ競合の安全性を常に満たせる
2022/08/14(日) 12:11:52.89ID:npbVW+VU
並行処理をしてないのにいちいちいらない制約かけられる方がコスト高いわ
2022/08/14(日) 12:12:26.58ID:N9EVRHSm
>>422
いつものキッズかな
単一変数のデータ競合が生じなくても多くのロジックは競合するんだよ
2022/08/14(日) 12:17:06.31ID:qTNce3WZ
並行処理を安全に実装するのが難しいから、需要があってGoとかRustみたいな言語が登場してるのであって、直列なコードしか書かないなら昔の言語でもよくね
2022/08/14(日) 12:18:16.18ID:N9EVRHSm
>>425
そうじゃなくて、並行処理をしている場合、現実には競合するタイミングが生じないと分かっていても制約がかかることになるんだよ
コンパイラは静的なスコープを検査することしかできないからな
2022/08/14(日) 12:35:39.15ID:q44Oj4I2
>>424
そんな当たり前のことで問題のすり替えをするのは行儀がよろしくない
>422では明確にデータ競合の話をしている

どの話であってもまずはデータ競合を起こさないことが必須
しかしこれまでの言語はプログラマー任せであり言語として実行前に静的にデータ競合を防ぐ機能を持たなかった
Rustはそれを実現するとともにコストの高いアトミック操作無しでもデータ競合を避ける形もサポートした
2022/08/14(日) 12:48:55.73ID:E6D9Byfe
>>427
多くの場合はより高水準の制御や抽象化を必要とするため、君が思っているほどデータ競合可能性の回避は重要じゃないってことだよ
制約に対して得るものが小さい
2022/08/14(日) 13:14:59.37ID:q44Oj4I2
>>428
実際にそれらのプログラミングをしていればわかる
データ競合の回避は重要どころか必須
2022/08/14(日) 13:29:25.97ID:UOAed9Kc
やっぱRAIIを意識しないと会話が成立しないぞ

読みたい情報が消されたり書き換えられているバグよりも危険なのは
情報を記憶する領域自体が消滅しているバグだから
書き換えを制限する効果よりもmoveやdropを制限する効果を見なければ本質が見えない
2022/08/14(日) 13:35:19.72ID:cZJLOqDl
>>428
データ競合可能性の回避は重要か重要じゃないかではない
データ競合可能性の回避は必ずすべきこと
Rustを叩きたいからといってこれを重要じゃないと主張するのは頭が狂っている
2022/08/14(日) 13:53:29.77ID:ghgoUiTh
データ競合可能性の回避をしてないシステムやアプリって存在するの?
2022/08/14(日) 14:01:21.37ID:lDco67Nc
並列処理しなくてもmutable aliasingにまつわるバグは起こりうるよね
典型的にはコレクションのイテレート中の要素追加とか

これを防ぐ仕組みを整えたらうまいこと並列処理にも応用できたという話であってデータ競合を防ぐことが本質ではない
2022/08/14(日) 14:09:17.85ID:osAuRY7C
>>432
回避し切れてないシステムやアプリはそこそこ存在するけどw
2022/08/14(日) 14:32:21.17ID:Zv4+MM+J
mutable aliasingはGC言語でも防げないからなぁ
これが一度Rustに慣れてしまうと他に戻れなくなる原因の一つかも
他言語も積極的に取り入れてほしいところ
2022/08/14(日) 15:49:07.29ID:UOAed9Kc
コレクションが変更されたら
影響のあるすべてのイテレータに何か通知するべき

ここで、すべてのイテレータのリストを強参照してるとメモリが解放されないバグを作れる
GC言語でも弱参照大事
437デフォルトの名無しさん
垢版 |
2022/08/14(日) 15:56:50.41ID:b9F5IowR
Rustはオワコンだろ。
2022/08/14(日) 16:16:26.65ID:lDco67Nc
>>436
GC言語ってそこまでケアしてくれるのが普通なの?
439デフォルトの名無しさん
垢版 |
2022/08/14(日) 16:30:43.31ID:b9F5IowR
そういうレベルで設計する人たちだと、RustやReactなんかが良いのかもしれないな。
「レベルが高い」と思ってそうなのがアホだけど。
「弊社はアホが多いから、これで行くしかない」というのが正しい態度では?
440デフォルトの名無しさん
垢版 |
2022/08/14(日) 16:41:26.12ID:psUND9lq
すばらしい洞察
2022/08/14(日) 16:46:59.70ID:Zv4+MM+J
実際「自分はアホなのでバグのないC++は書けない」と思ってRust書いてるよ
年とともに集中力も維持し続けられなくなるし、コンパイラに助けてもらわないとどうしようもない
2022/08/14(日) 17:03:40.00ID:lDco67Nc
昔の静的型付けvs動的型付け論争思い出すね
開発者は十分賢いと仮定しレビューやテストでバグを見つけられれば十分とする立場と、
実行前に機械的に抽出できるバグは潰しておきたい立場の違い
2022/08/14(日) 17:06:11.09ID:2tPpitqi
Rustで「簡単」になるのははチームやコードを管理するリーダーやマネージャーで、実装するコーダーにとっては「簡単」じゃないのにな。
444デフォルトの名無しさん
垢版 |
2022/08/14(日) 17:08:43.26ID:b9F5IowR
そういうレベルだと、なに使っても同じでは?
2022/08/14(日) 17:10:46.46ID:lDco67Nc
レビューやテストでなんとかできるなら現世代言語で十分だよね
次世代言語という観点では、実行前により多くの問題点を検出することや、検出できる問題の量を保ったままコード記述の自由度を高めることが期待されてることのひとつだと思う
2022/08/14(日) 17:10:54.70ID:BkdSXVLW
IT大手企業が揃って同じ主張
人手に頼るC++等ではバグを無くせない
良い人材を揃えているところでもミスをゼロには出来ないから言語による支援がある方が良い
メモリ管理でもデータ競合でも同じ

ソース
https://xtech.nikkei.com/atcl/nxt/column/18/00692/042700054/

Rustは、プログラムに必要なメモリーの確保や解放に関連するバグが生じない「メモリー安全」が保証されたプログラミング言語である。
それに対してこれまでのOS開発に使われてきたC/C++は「大規模な開発においてメモリー安全なコードを記述することがほぼ不可能」
(Microsoftのブログ「We need a safer systems programming language」より)なのだという。

GoogleによればAndroidに存在した深刻なセキュリティー脆弱性の70%近くがメモリー安全に関するバグに起因するという。
同様にMicrosoftも、同社製品に存在したセキュリティー脆弱性の70%がメモリー安全に関するバグに起因すると述べている。
C/C++を使う限りセキュリティー脆弱性を根絶するのは不可能と考えて、Rustを採用するに至ったというわけだ。
2022/08/14(日) 17:12:42.24ID:lpUzUHFf
イテレータなんてないし、for rangeで回ってくるのは常にコピーだよ。
2022/08/14(日) 18:49:23.51ID:2zwTzsHO
Rustはモダンとか言っておきながら今時セミコロン入力を強要するゴミ言語
セミコロン省略するとreturnを省略できる?何のメリットがあんのそれ
可読性が悪くなるだけだよね

JSみたいにフォーマッタで自動入力もできないしゴミ
449デフォルトの名無しさん
垢版 |
2022/08/14(日) 19:57:13.45ID:TQqmfXCA
>>448
Rustを書いたことないか、チュートリアルレベルでしか触ってなさそう
2022/08/14(日) 21:15:44.48ID:B+F1bo8h
文法や記述は様々な言語をやっていれば誤差と慣れだけの問題となる
それに文句をつけるのは初心者と異常者のみ

そのRustに関して言えばセミコロンや中括弧(波括弧)は機能面で必要だからある
逆に例えば「 if (条件) 」の丸括弧は不要だから「 if 条件 」
2022/08/14(日) 22:57:09.94ID:549c+n4K
関数型のElixir は、データを書き換えられない。immutable。
新規作成しかできない

だから、並行処理に強い
2022/08/14(日) 23:52:55.91ID:lDco67Nc
>>448
こういう議論も地味に重要だと思う
セミコロンなしでreturn必須な言語の方が可読性高いのかな?
returnを書くことで読み手にとって何が明確になるんだろうか

フォーマッタでの自動入力って何?
2022/08/14(日) 23:58:23.93ID:QUSc/NM6
>>451
すなわち値を書き換えるたびにガベージを撒き散らしGC
さらにElixirにはGCされず溜まる一方のAtomがあり枯渇すると死ぬ
2022/08/15(月) 00:30:10.08ID:yUQkYoQs
文法はフォーマッタやコード生成、静的解析などのツールの作りやすさ影響してくるからあまり馬鹿にしない方が良い
455デフォルトの名無しさん
垢版 |
2022/08/15(月) 01:04:12.66ID:p/fNcd9R
日本人は一部はセンスあるが
RustやElixer等メタプログラミング言語が理解できないやつが多すぎる
2022/08/15(月) 01:17:24.43ID:DNbe8aKk
外国人でも抽象的な概念についての難易度は同じだゾ・・・
457デフォルトの名無しさん
垢版 |
2022/08/15(月) 09:39:59.10ID:r7x/NN7r
セミコロンを省略するとreturnになるわけではないぞ
・Rustでは式にセミコロンをつけると文になる
・ブロック({stmts}のこと)の最後の式が、そのブロックを評価したときの式となる
この二つのルールが原則で、関数のブロックの最後のセミコロンを省略すると、関数を評価した値になるってだけ

let a = {
let mut b = Builder::new();
b.add(foo);
b.add(bar);
b.build()
};
このルールのおかげでこのようなコードが書けるようになる(return文は関数から抜けるためにしか使えないので、ブロックの評価には使えない)
一時変数のスコープを最小限に抑えることができるし、mutableで宣言した変数を、スコープを抜けたらimmutableに戻すこともできる
慣れれば見やすいし、意味的なメリットも多い
458デフォルトの名無しさん
垢版 |
2022/08/15(月) 10:33:46.88ID:p/fNcd9R
>>456
ウィキペディアの英語版と日本語版比べてみて、
メタプログラミングについて書かれている事が全然違うから。

日本は本当に遅れてる
2022/08/15(月) 10:41:42.04ID:8YjBNSEW
>>457
その意味不明な記法が可読性が悪くてゴミなんだが?
信者以外からはメリットを対して感じないよね。

この恩恵を受けるためだけにセミコロン全てにつけないといけないのめんどいんだけど。
2022/08/15(月) 11:14:59.57ID:0McKJS85
バカはバカを呼び寄せる
2022/08/15(月) 11:41:54.68ID:i3sQrZ2z
>>459がどの言語の文法を理想と考えているのかが気になる
golang?
462デフォルトの名無しさん
垢版 |
2022/08/15(月) 12:05:46.45ID:r7x/NN7r
なぜRustに対する批判が具体的なものじゃなくて、「意味不明」とか「不要」とか主観的で何を指しているのかわからないような言葉ばかりなんだろう
2022/08/15(月) 12:17:22.73ID:A27GovSV
文末のセミコロンが必須な主なプログラミング言語
C C++ Java Perl PHP など

この状況でRustのセミコロンを叩いているのはこれらの言語を知らない初心者?
しかもRustは文と値の区別のためセミコロンの有無を活用して意味付けしている
2022/08/15(月) 12:21:25.57ID:8YjBNSEW
>>463
最近の言語が一切なくて草
モダン言語はない方が普通でそれと逆行してるから批判してるんだが
465デフォルトの名無しさん
垢版 |
2022/08/15(月) 12:39:14.98ID:vxI8O7UY
Python Ruby JavaScript Scala Kotlin あとなにがあったっけなぁ
2022/08/15(月) 12:42:41.40ID:8YjBNSEW
>>457
逆にセミコロンなしをデフォルトにしてセミコロンとかつけると式になるとかでもいいのでは?

その書き方ができると便利なのは否定しないけど、その恩恵を得るためだけに全てにセミコロン付けるのを押し付けるのは余計なコストだっていいたいわ
2022/08/15(月) 12:52:23.38ID:A27GovSV
セミコロンを省略可能にしたプログラミング言語は色々と苦しんでいる
昔からJavaScriptのセミコロン省略により起こる問題は有名だが
Goなどもセミコロンを省略可能な言語なので問題がよく起きている

例えばGoでは
foo := 111111111 + 222222222 + 333333333
が何らか長い行として長いので改行して書こうとして
foo := 111111111
  + 222222222
  + 333333333
と書いてしまうとこれは以下のセミコロンの省略と解釈されてしまう
foo := 111111111;
  + 222222222;
  + 333333333;
つまりエラーとなる

他にもGoでは
bar := []int { 111111111, 222222222, 333333333 }
が何らか長い行として長いので改行して書こうとして
bar := []int {
  111111111,
222222222,
333333333
}
と書いてしまうとこれは以下のセミコロンの省略と解釈されてしまう
bar := []int {
  111111111,
222222222,
333333333;
}
これもエラーとなる
2022/08/15(月) 12:53:34.04ID:A27GovSV
>>467のようにGoは「セミコロンが必須だけど、省略可で、自動セミコロン挿入される言語」であるため
うっかり改行すると自動セミコロン挿入により文法エラーとなってしまう
2022/08/15(月) 12:53:34.61ID:lLs0VW2c
Rustで文と式が混在するのは最適化のため?文でエラーが発生したときはどうなるんかね?

resultとかの戻り値用変数があると自然だけど、末尾呼び出し最適化が面倒になるので痛し痒し。
2022/08/15(月) 13:06:38.69ID:8YjBNSEW
>>467
それの何が問題なの?
文法エラーになるなら何の問題ではない、エラーにならずにコンパイルされて変な挙動をするとかだったら問題だけど
471デフォルトの名無しさん
垢版 |
2022/08/15(月) 13:10:39.72ID:r7x/NN7r
>>466
文にセミコロンをつけると式になるって文法を整合性を保ったまま定義できるとは思えない....
1とかtrueみたいな一つの値は式として扱う
ifやmatchはデフォルトで文として扱い、セミコロンをつけると式になるって文法にすると
let x = f(if cond { ... } else { ... };)
みたいな文で、どこが文でどこが式なのか曖昧さを持ってしまう気がする
472デフォルトの名無しさん
垢版 |
2022/08/15(月) 13:14:43.30ID:r7x/NN7r
構文解析の簡単さってかなり大事なことだと思う
language serverも軽くなるしコンパイルも早くなる
適当に書いてフォーマッタで整形するって書き方もできるようになる
セミコロンをつけるのが面倒なのは分かるけど、それ以上の恩恵があるのは事実
2022/08/15(月) 13:15:05.13ID:JDmNxXPp
文法エラーになってからわざわざ直すのは面倒くさくないの?
JS/TSでもASIの罠にはまらないように考えるほうが面倒だから基本セミコロン付けているな
2022/08/15(月) 13:19:28.24ID:zxOEKBbO
>>466
言語設計した事ある?
a = b の b は式だからお前の仕様だと ; が必要になるんだけどw
475デフォルトの名無しさん
垢版 |
2022/08/15(月) 13:22:56.61ID:r7x/NN7r
>>469
Rustでは文は
Item(関数の定義や構造体の定義など)
LetStatement(let文)
ExpressionStatement(式にセミコロンつけたやつ)
MacroInvocation(hoge!();みたいにマクロの使用にセミコロンつけたやつ)
しかないから、そもそも文はエラーを生成しない
文の中の式がエラーを生成することはあるけど、文法上はハンドリングも式の中で行われる
https://doc.rust-lang.org/stable/reference/statements.html
2022/08/15(月) 13:23:00.24ID:8YjBNSEW
>>474
したことねえけど、式として表現できるようにしたいからセミコロンを全てに強要するとかうんこだなって言いたいだけ

利用者にとっては面倒なだけ
477デフォルトの名無しさん
垢版 |
2022/08/15(月) 13:32:10.82ID:r7x/NN7r
>>476
式の全てにセミコロンが強要されているわけではないぞ
Block(ifとかmatchとかの{}を使うやつ)を含む式であるExpressionWithBlockではセミコロンの省略が可能とされている
だから、式を文として扱うべき場所で必要最低限のセミコロンが強制されている
https://doc.rust-lang.org/stable/reference/statements.html#expression-statements
2022/08/15(月) 13:36:40.79ID:zxOEKBbO
>>476
だからお前の方法だと余計面倒になるだろw
問題提起はまあいいとして解決策がアホすぎる
2022/08/15(月) 14:50:27.64ID:iWGF+SuJ
セミコロンは面倒だし書かなくていいならそれに越した事ないけど
JSみたいに罠に嵌るくらいなら明示的に書くのでも別にいい
Rustはじめた当初はセミコロンの有無で戻り値が変わるのはめちゃイライラしたけど2週間もすれば慣れる

セミコロン不要言語ではRubyやSwiftは縛りが少なくて扱いやすい
Pythonは改行できるケースがかなり限定されてるから扱いにくい(そのくせ1行80文字にしろとかアタオカ)
2022/08/15(月) 15:00:02.78ID:i3sQrZ2z
話題か全然次世代言語っぽくないな
次世代言語は人間の考えを忖度して良い感じにコードを解釈して欲しい
セミコロンとか些細な文法レベルじゃなくて、自動的に最適なアルゴリズム選んでくれるとか
2022/08/15(月) 15:18:34.31ID:n9YpVahh
どういうトレードオフの上に成り立ってるかを理解しようとしない人とは技術的な議論はない立たないわな
2022/08/15(月) 16:06:15.48ID:fboUSwN3
長い行を途中で改行したくなったらどうなるか?

・JavaScriptだと正しく333333333と出力
let foo = 111111111
+ 222222222
console.log(foo)

・Goだとエラー(+222222222が使われていない)となる
foo := 111111111
+ 222222222
fmt.Println(foo)

・Pythonだと111111111と出力
foo = 111111111
+ 222222222
print(foo)

・Rubyだと111111111と出力
foo = 111111111
+ 222222222
p foo

・Kotlinだと111111111と出力
var foo = 111111111
+ 222222222
println(foo)

セミコロンがある言語ならば長い行を自由に改行できる
483デフォルトの名無しさん
垢版 |
2022/08/15(月) 17:19:36.40ID:zuAYSXsv
foo = (111111111
+ 222222222)
print(foo)

1つの評価式としたいのに途中改行を入れることを利点だと主張するなんてバカげている....
素直にC/C++の古めかしい記述を引き継ぎたい人が多いだけというのは、公式も認めてるのに
2022/08/15(月) 17:58:11.91ID:wGU2BFOZ
セパレータ無しで改行を無視するようにしたいなら、yamlのブロックスタイルぐらいが妥当かと。
2022/08/15(月) 18:28:05.88ID:vxI8O7UY
セミコロンが面倒とは言っても、インデントのタブと同じで頭使わないから楽だと思うんだがなぁ。
そんなに毛嫌いするようなことなんだろうか。
2022/08/15(月) 18:35:55.10ID:zxOEKBbO
もうここら辺の話は好みの問題もあるからこっちが正しいとか言っても揉めるだけ
>>483にしても無駄なカッコはヤダって奴が出るかも知れんし
foo = 111111111 +
222222222
で正しく処理できる言語もあるけどプラスの位置が気に入らんとか言う奴がいるかも知れんしな
2022/08/15(月) 18:42:32.98ID:qHbAfBQi
セミコロンがいるいらないなんてそんなに気にする事なのかな?
Cスタイルで無い書き方する言語の方がよっぽど見にくいんだよねぇ
2022/08/15(月) 19:05:59.41ID:QBWih2zA
Dartもそうだけどセミコロンなし言語に慣れてると忘れる時にいちいちエラーになってうざい
JSはprettierで自動入力できるけど、エラーになるのがめんどくさい

まあただの慣れの問題だけど
2022/08/15(月) 19:17:14.24ID:Q0+/Bn9w
PowerShell(; 不要) と C#(; 必要) 使ってるとたまにあれ?って思うことあるけどたいして混乱しないよ
そんなのにいちいち引っかかってたら他にもっと引っかかるところあると思うが
2022/08/15(月) 19:17:50.21ID:jGpDADDF
Rustはセミコロンレスにする実装が面倒ってだけやろ
エルゴノミクス的にはセミコロンなしのほうがいいに決まってる
491デフォルトの名無しさん
垢版 |
2022/08/15(月) 19:34:59.12ID:On5LnEYn
むしろ482のような何も考えられない熟練者が、他の多くの言語を全否定してるのであって、Cスタイルを否定しているわけではない。
Cスタイルで無い書き方する言語の方が見にくいというのはよほど経験が足りないか、組み込みかシステムプログラミングでC/C++の
沼にどっぷりハマってるか....いまどきbashもTypescript/JSもLuaも書くだろうし、DeepleanningしたいならPythonぐらい触るでしょう?
492デフォルトの名無しさん
垢版 |
2022/08/15(月) 19:42:50.19ID:On5LnEYn
フリーフォーマットスタイルになったのだって、B言語の毛の生えたC言語初期がブロック表す{}でさえ、当時の多くのコンピュータのキーボードで
打てなかったのに採用しており明らかにパーサーを簡単にしたいがためだけで、確かに欠陥は無いが、他の言語を否定する有益な要素には
全く成り得ない。「頭がCスタイル=だから個人的にはそれが一番見やすい」という理論なら分かるが、一般化できるものではない
2022/08/15(月) 19:46:40.39ID:DNbe8aKk
フリーフォマットスタイルってウケる言いまわしだね
2022/08/15(月) 19:51:28.75ID:v4xWLNJI
些細なことで盛り上がってるな
昨日のRust叩きがすぐ論破されてRustは高機能で優秀だと決着してしまったから
今日のRust叩きはセミコロンと波カッコがテーマなのかい?
2022/08/15(月) 20:17:06.88ID:1icmhpVn
>>494
「誰にとって」高機能で優秀なのかを考えんとな。
リーダーとかマネージャーとかの管理者にとって、Rustはルールを強制して一定の安全性と性能を担保できる便利なルール。
その裏返しになるけど、コーダーみたいな実装者にとって、Rustは窮屈な制約や複雑な概念を押し付けられる不便な扱いづらいツール。

優れたプログラマーはコーダーであるとともにマネージャーでもリーダーでもあるからRustの利点は分からんでもないけど、普段使いにはしたくないツールだよなぁ。
今の複雑さじゃHaskellとかc++とかと大して変わらんから、そのうちもっと洗練された言語が出てくるんじゃない?
2022/08/15(月) 20:32:42.70ID:IKaKwzzk
ルールは強制じゃないんだよなあ
税金を払ってない金持ちがいるのと同じ
2022/08/15(月) 22:14:46.12ID:i3sQrZ2z
>>495
複雑な概念を押しつけられるというよりも、現実の複雑さを処理系が覆い隠さずそのまま見せている、ただしデフォルトでは安全装置付き、というのが自分の感覚には近いかなぁ

カジュアル用途にはshared xor mutabilityを採用したGCあり言語があれば良いと思うんだけどそれでも敷居高いと言われてしまうのかな
2022/08/15(月) 22:21:40.52ID:i3sQrZ2z
>>495はrustのチェックが過剰と言いたいのか、プログラムがエッジケースでクラッシュしても良いからプログラマーの自由にさせろと言いたいのか、どっちなんだろう
2022/08/15(月) 22:28:42.72ID:vxI8O7UY
>>491
>>482はべつに全否定なんかしていないだろう。
セミコロンを省略できることが無条件で優れているかのような主張に対して、そこにはやはり
トレードオフが存在することを示しているだけだと思うが。
2022/08/15(月) 22:34:42.13ID:H/w3DVjw
>>497
shared reference, mutable reference, ownedの3種類を常に分けるのは作る側も使う側も面倒でしょ
GC言語でdata raceを避けるためだけに許容できる面倒臭さではないと思う
2022/08/15(月) 22:37:46.04ID:krDSEAE6
>>499
>>482はサンプルが悪い
エアプじゃなければもう少しマシなの持ってきなよ
2022/08/15(月) 22:46:07.54ID:vxI8O7UY
>>501
全否定とサンプルが悪いのと全然関係ないが。
それはそうとして>>482はセミコロンを省略できる言語で改行するのに構文を意識しなければならない例として
わかりやすいと思ったが、どこがどうダメだと思った?
2022/08/15(月) 22:50:19.22ID:1icmhpVn
>>497
コーダーにとっては押し付けられるのも覆い隠さずむき出しなのも同じ。
運転するならマニュアルよりオートマの方が楽に目的地に行けるからねぇ。
2022/08/15(月) 23:08:45.28ID:efQSXXjx
>>500
まともなプログラマーならば
mutableかimmutableを必ず区別するしスクリプト言語にすら区別がある
GC言語だからそんな面倒な区別をしないなんてことはない
更にそのもの自体かreference (pointer)かの区別をする言語も多い
2022/08/15(月) 23:36:07.11ID:zdpm5MVd
>>504
immutableかmutableかの区別とはまた別

例えばPythonのiter()やC#のGetEnumerator()に相当するメソッドを
Rustではshared reference用のiter(),
mutable reference用のiter_mut(),
owned用のinto_iter()と3つ用意してその3つを使い分ける必要がある
他にも3種類の構造体を用意したり3種類ずつtraitをimplしたりする必要がある

Rustで3つを使い分ける主目的はメモリ安全性であってdata raceを防ぐのは副産物
メモリ安全性が確保されてるGC言語で副産物のためだけにやるほど価値があるとは思わない
data race detectorみたいなので十分
2022/08/15(月) 23:43:36.56ID:efQSXXjx
>>505
書き換えるのか書き換えずに読み取るだけなのか必ず区別する
プログラマーならそこは絶対に意識するところ
参照なのか実体なのかも同様に区別する
例えばcall by referenceなのか否かで変わってくるから常識
507デフォルトの名無しさん
垢版 |
2022/08/15(月) 23:44:00.49ID:bWP5l8ZG
>>502
挙げてる言語が全てセミコロンのようなものが無ければ、改行をパースできない言語だけを挙げておいて
サンプルが悪くないと考えられることはセミコロンを入れる言語を優先したいだけでしょ?
そして482がいってるのはトレードオフなんて一言も言ってないし→同一人物だとすればサンプルも悪い
2022/08/15(月) 23:59:03.56ID:1yqLKMZ0
>>505
噓つき

まず、使い分けと言っても間違って使っていたらRustコンパイラが指摘してくれるから、他の言語のようにプログラマーに責任と義務を押し付ける形で使い分ける必要は全くない

次に、今まで様々なプログラムを書いてきて、そのための3種類の構造体やimplを用意する必要になったことは一度もない
プログラムでやりたいことは一つなのだからどれか一つに決まる
その選択を仮に間違えていてもRustコンパイラが指摘してくれるので必ず正解を選択できて楽勝

Rustはプログラマーへの責任圧力や負荷が非常に少ない
間違えてもコンパイラが賢くて教えてくれるし次第に慣れて間違いも激減
2022/08/16(火) 00:25:36.99ID:ixQkAKAb
>>506
>>505に書いてる事を理解してないでしょ
それだとRust的なaliasing xor mutabilityを実現するためにどういう言語機能が必要で
開発者にはどういうデメリットがあるのかわかんないよ
2022/08/16(火) 00:31:52.46ID:FJ3wHtGm
>>505
全部refcell相当にしてランタイムでよしなに処理できないかね?
2022/08/16(火) 00:45:43.29ID:OuJTqPA4
>>509
デタラメを書いている>>505の文章をよく読め
Rustに無知な>>505が妄想でデタラメを書き並べて無意味なRust叩きをしているだけだぜ
2022/08/16(火) 01:34:09.32ID:VwgHy53B
RefCellは無視してCellを使うのがコツかなと思ってる
2022/08/16(火) 01:41:29.91ID:tWxob/nJ
>>510
実行時のチェックのみでよければborrow checker無しの実装も可能かもしれないが
常にborrow済みでborrow_mutができない状況が量産されそう
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況