スレタイ以外の言語もok
前スレ
https://mevius.5ch.net/test/read.cgi/tech/1655771266/
次世代言語27 TypeScript Swift Go Kotlin Rust Nim
■ このスレッドは過去ログ倉庫に格納されています
2022/08/05(金) 08:26:38.87ID:TpiqaUBm
397デフォルトの名無しさん
2022/08/13(土) 23:40:22.03ID:9Y2sM84k 重要なものがキャッシュに乗りにくくなるのでは?
398デフォルトの名無しさん
2022/08/13(土) 23:54:24.87ID:601ao6Ev そもそもRustもC++も含め、RAIIは何でもスタックに積んでいるわけではない
スタック上の値のように振る舞うように作られているだけで、内部的にヒープにメモリを確保しポインタを保持しているケースが多い
スタック上の値のように振る舞うように作られているだけで、内部的にヒープにメモリを確保しポインタを保持しているケースが多い
399デフォルトの名無しさん
2022/08/14(日) 00:25:46.03ID:b9F5IowR Rustは自動メモリー管理が売りなんだから、C++のように自由に何でも出来たらダメでは?
400デフォルトの名無しさん
2022/08/14(日) 00:49:36.36ID:b9F5IowR JavaとHaskellの良いとこ取りのように宣伝されてたけど、悪いところを併せ持ってしまったのでは?
401デフォルトの名無しさん
2022/08/14(日) 07:17:26.98ID:tJlVM+m7 >>396
C++はメモリを自動解放しない。
unique_ptrやshared_ptrを忘れずに利用し間違えずに使用した場合のみ自動解放されるが、
それはその正しく作られたプログラムがメモリを自動解放しているのであり、
C++という言語自体がメモリを自動解放することはない。
一方でGC言語やRust言語などはプログラムの記述と関係なくメモリが自動解放される。
C++はメモリを自動解放しない。
unique_ptrやshared_ptrを忘れずに利用し間違えずに使用した場合のみ自動解放されるが、
それはその正しく作られたプログラムがメモリを自動解放しているのであり、
C++という言語自体がメモリを自動解放することはない。
一方でGC言語やRust言語などはプログラムの記述と関係なくメモリが自動解放される。
402デフォルトの名無しさん
2022/08/14(日) 07:54:47.25ID:osAuRY7C 事実上今時のプログラムで生ポインタなんて使わないしアスペの>>401は知らんけど普通のプログラマにとってメモリー解放はC++程度で充分
403デフォルトの名無しさん
2022/08/14(日) 08:05:26.58ID:tJlVM+m7404デフォルトの名無しさん
2022/08/14(日) 08:19:24.23ID:J5VfX3cG >>401
一般ユーザーがめったに使わないnewで言いがかりつけるなよ。Rustのunsafeみたいなものだろ。
一般ユーザーがめったに使わないnewで言いがかりつけるなよ。Rustのunsafeみたいなものだろ。
405デフォルトの名無しさん
2022/08/14(日) 08:30:27.75ID:osAuRY7C はいはい、アスペは何を指摘されているかも理解できないからどうでもいいわ
406デフォルトの名無しさん
2022/08/14(日) 08:44:12.34ID:FX5vs6id ムッシュムラムラ
407デフォルトの名無しさん
2022/08/14(日) 09:20:45.22ID:lDco67Nc RAIIみたいなありふれたものじゃなくてxor mutabilityをアピールした方が良いのでは
408デフォルトの名無しさん
2022/08/14(日) 09:37:16.54ID:TQqmfXCA >>407
これ
これ
409デフォルトの名無しさん
2022/08/14(日) 09:38:28.08ID:gLXUvNT9410デフォルトの名無しさん
2022/08/14(日) 10:03:55.97ID:TQqmfXCA411デフォルトの名無しさん
2022/08/14(日) 10:19:19.22ID:q44Oj4I2412デフォルトの名無しさん
2022/08/14(日) 10:29:55.69ID:oyMyAes/ あくまでもOS開発の用途で採用されてるだけ
413デフォルトの名無しさん
2022/08/14(日) 10:38:15.56ID:q44Oj4I2 >>412
Rustの世界的大規模な調査結果により
Rustの利用対象はサーバーサイド/バックエンドが最多で
以下クラウド、分散システム、WebAssembly/Webフロント、組み込みといった状況になっている
Rustの世界的大規模な調査結果により
Rustの利用対象はサーバーサイド/バックエンドが最多で
以下クラウド、分散システム、WebAssembly/Webフロント、組み込みといった状況になっている
414デフォルトの名無しさん
2022/08/14(日) 10:43:52.82ID:oyMyAes/415デフォルトの名無しさん
2022/08/14(日) 10:48:15.10ID:q44Oj4I2416デフォルトの名無しさん
2022/08/14(日) 10:58:46.14ID:J5MpSH/Q >>407
XORじゃないけどな
XORじゃないけどな
417デフォルトの名無しさん
2022/08/14(日) 11:16:29.29ID:UOAed9Kc before == afterのことをimmutableというなら
==の定義とかあるんですか?
まさか、大手企業を観測すれば==の定義が分かると思ってるマッドサイエンティストはいないよね
==の定義とかあるんですか?
まさか、大手企業を観測すれば==の定義が分かると思ってるマッドサイエンティストはいないよね
418デフォルトの名無しさん
2022/08/14(日) 11:19:12.35ID:q44Oj4I2419デフォルトの名無しさん
2022/08/14(日) 11:47:03.37ID:E6D9Byfe 現実には複数の状態のストアに跨がる論理的な競合の方がずっと問題で、単一データの読み書きの競合なんてアトミック変数くらいで十分
420デフォルトの名無しさん
2022/08/14(日) 11:59:58.73ID:N9EVRHSm 実行時に同時に読み書きしうるかどうかをコンパイラが厳密に検知することは不可能
Rustがやってるのは大幅に安全側に倒すアプローチで、それでいいんだったら関数型みたいにそもそもミュータブルなデータを共有しない、でも立派に対策になってるよね
実際それで十分なケースが殆どでしょ
Rustがやってるのは大幅に安全側に倒すアプローチで、それでいいんだったら関数型みたいにそもそもミュータブルなデータを共有しない、でも立派に対策になってるよね
実際それで十分なケースが殆どでしょ
421デフォルトの名無しさん
2022/08/14(日) 12:04:57.82ID:npbVW+VU Rustはdata raceはふせげてもrace conditionは防げない
銀の弾丸でも何でもない
銀の弾丸でも何でもない
422デフォルトの名無しさん
2022/08/14(日) 12:09:32.20ID:q44Oj4I2 >>419
アトミック変数を忘れたら競合する
さらにアトミック変数を使ってもそのコストがかかる
Rustでは静的にコンパイル時にデータ競合を必ず排除する
アトミック操作を必要とするならば指摘してくれる
multiple readers XOR single writerを守っていれば当然(コストの高い)アトミック操作を必要とせずにコンパイルが通る
したがってRustは他の言語よりもコストを低くデータ競合の安全性を常に満たせる
アトミック変数を忘れたら競合する
さらにアトミック変数を使ってもそのコストがかかる
Rustでは静的にコンパイル時にデータ競合を必ず排除する
アトミック操作を必要とするならば指摘してくれる
multiple readers XOR single writerを守っていれば当然(コストの高い)アトミック操作を必要とせずにコンパイルが通る
したがってRustは他の言語よりもコストを低くデータ競合の安全性を常に満たせる
423デフォルトの名無しさん
2022/08/14(日) 12:11:52.89ID:npbVW+VU 並行処理をしてないのにいちいちいらない制約かけられる方がコスト高いわ
424デフォルトの名無しさん
2022/08/14(日) 12:12:26.58ID:N9EVRHSm425デフォルトの名無しさん
2022/08/14(日) 12:17:06.31ID:qTNce3WZ 並行処理を安全に実装するのが難しいから、需要があってGoとかRustみたいな言語が登場してるのであって、直列なコードしか書かないなら昔の言語でもよくね
426デフォルトの名無しさん
2022/08/14(日) 12:18:16.18ID:N9EVRHSm427デフォルトの名無しさん
2022/08/14(日) 12:35:39.15ID:q44Oj4I2 >>424
そんな当たり前のことで問題のすり替えをするのは行儀がよろしくない
>422では明確にデータ競合の話をしている
どの話であってもまずはデータ競合を起こさないことが必須
しかしこれまでの言語はプログラマー任せであり言語として実行前に静的にデータ競合を防ぐ機能を持たなかった
Rustはそれを実現するとともにコストの高いアトミック操作無しでもデータ競合を避ける形もサポートした
そんな当たり前のことで問題のすり替えをするのは行儀がよろしくない
>422では明確にデータ競合の話をしている
どの話であってもまずはデータ競合を起こさないことが必須
しかしこれまでの言語はプログラマー任せであり言語として実行前に静的にデータ競合を防ぐ機能を持たなかった
Rustはそれを実現するとともにコストの高いアトミック操作無しでもデータ競合を避ける形もサポートした
428デフォルトの名無しさん
2022/08/14(日) 12:48:55.73ID:E6D9Byfe429デフォルトの名無しさん
2022/08/14(日) 13:14:59.37ID:q44Oj4I2430デフォルトの名無しさん
2022/08/14(日) 13:29:25.97ID:UOAed9Kc やっぱRAIIを意識しないと会話が成立しないぞ
読みたい情報が消されたり書き換えられているバグよりも危険なのは
情報を記憶する領域自体が消滅しているバグだから
書き換えを制限する効果よりもmoveやdropを制限する効果を見なければ本質が見えない
読みたい情報が消されたり書き換えられているバグよりも危険なのは
情報を記憶する領域自体が消滅しているバグだから
書き換えを制限する効果よりもmoveやdropを制限する効果を見なければ本質が見えない
431デフォルトの名無しさん
2022/08/14(日) 13:35:19.72ID:cZJLOqDl432デフォルトの名無しさん
2022/08/14(日) 13:53:29.77ID:ghgoUiTh データ競合可能性の回避をしてないシステムやアプリって存在するの?
433デフォルトの名無しさん
2022/08/14(日) 14:01:21.37ID:lDco67Nc 並列処理しなくてもmutable aliasingにまつわるバグは起こりうるよね
典型的にはコレクションのイテレート中の要素追加とか
これを防ぐ仕組みを整えたらうまいこと並列処理にも応用できたという話であってデータ競合を防ぐことが本質ではない
典型的にはコレクションのイテレート中の要素追加とか
これを防ぐ仕組みを整えたらうまいこと並列処理にも応用できたという話であってデータ競合を防ぐことが本質ではない
434デフォルトの名無しさん
2022/08/14(日) 14:09:17.85ID:osAuRY7C >>432
回避し切れてないシステムやアプリはそこそこ存在するけどw
回避し切れてないシステムやアプリはそこそこ存在するけどw
435デフォルトの名無しさん
2022/08/14(日) 14:32:21.17ID:Zv4+MM+J mutable aliasingはGC言語でも防げないからなぁ
これが一度Rustに慣れてしまうと他に戻れなくなる原因の一つかも
他言語も積極的に取り入れてほしいところ
これが一度Rustに慣れてしまうと他に戻れなくなる原因の一つかも
他言語も積極的に取り入れてほしいところ
436デフォルトの名無しさん
2022/08/14(日) 15:49:07.29ID:UOAed9Kc コレクションが変更されたら
影響のあるすべてのイテレータに何か通知するべき
ここで、すべてのイテレータのリストを強参照してるとメモリが解放されないバグを作れる
GC言語でも弱参照大事
影響のあるすべてのイテレータに何か通知するべき
ここで、すべてのイテレータのリストを強参照してるとメモリが解放されないバグを作れる
GC言語でも弱参照大事
437デフォルトの名無しさん
2022/08/14(日) 15:56:50.41ID:b9F5IowR Rustはオワコンだろ。
438デフォルトの名無しさん
2022/08/14(日) 16:16:26.65ID:lDco67Nc >>436
GC言語ってそこまでケアしてくれるのが普通なの?
GC言語ってそこまでケアしてくれるのが普通なの?
439デフォルトの名無しさん
2022/08/14(日) 16:30:43.31ID:b9F5IowR そういうレベルで設計する人たちだと、RustやReactなんかが良いのかもしれないな。
「レベルが高い」と思ってそうなのがアホだけど。
「弊社はアホが多いから、これで行くしかない」というのが正しい態度では?
「レベルが高い」と思ってそうなのがアホだけど。
「弊社はアホが多いから、これで行くしかない」というのが正しい態度では?
440デフォルトの名無しさん
2022/08/14(日) 16:41:26.12ID:psUND9lq すばらしい洞察
441デフォルトの名無しさん
2022/08/14(日) 16:46:59.70ID:Zv4+MM+J 実際「自分はアホなのでバグのないC++は書けない」と思ってRust書いてるよ
年とともに集中力も維持し続けられなくなるし、コンパイラに助けてもらわないとどうしようもない
年とともに集中力も維持し続けられなくなるし、コンパイラに助けてもらわないとどうしようもない
442デフォルトの名無しさん
2022/08/14(日) 17:03:40.00ID:lDco67Nc 昔の静的型付けvs動的型付け論争思い出すね
開発者は十分賢いと仮定しレビューやテストでバグを見つけられれば十分とする立場と、
実行前に機械的に抽出できるバグは潰しておきたい立場の違い
開発者は十分賢いと仮定しレビューやテストでバグを見つけられれば十分とする立場と、
実行前に機械的に抽出できるバグは潰しておきたい立場の違い
443デフォルトの名無しさん
2022/08/14(日) 17:06:11.09ID:2tPpitqi Rustで「簡単」になるのははチームやコードを管理するリーダーやマネージャーで、実装するコーダーにとっては「簡単」じゃないのにな。
444デフォルトの名無しさん
2022/08/14(日) 17:08:43.26ID:b9F5IowR そういうレベルだと、なに使っても同じでは?
445デフォルトの名無しさん
2022/08/14(日) 17:10:46.46ID:lDco67Nc レビューやテストでなんとかできるなら現世代言語で十分だよね
次世代言語という観点では、実行前により多くの問題点を検出することや、検出できる問題の量を保ったままコード記述の自由度を高めることが期待されてることのひとつだと思う
次世代言語という観点では、実行前により多くの問題点を検出することや、検出できる問題の量を保ったままコード記述の自由度を高めることが期待されてることのひとつだと思う
446デフォルトの名無しさん
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を採用するに至ったというわけだ。
人手に頼る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を採用するに至ったというわけだ。
447デフォルトの名無しさん
2022/08/14(日) 17:12:42.24ID:lpUzUHFf イテレータなんてないし、for rangeで回ってくるのは常にコピーだよ。
448デフォルトの名無しさん
2022/08/14(日) 18:49:23.51ID:2zwTzsHO Rustはモダンとか言っておきながら今時セミコロン入力を強要するゴミ言語
セミコロン省略するとreturnを省略できる?何のメリットがあんのそれ
可読性が悪くなるだけだよね
JSみたいにフォーマッタで自動入力もできないしゴミ
セミコロン省略するとreturnを省略できる?何のメリットがあんのそれ
可読性が悪くなるだけだよね
JSみたいにフォーマッタで自動入力もできないしゴミ
449デフォルトの名無しさん
2022/08/14(日) 19:57:13.45ID:TQqmfXCA >>448
Rustを書いたことないか、チュートリアルレベルでしか触ってなさそう
Rustを書いたことないか、チュートリアルレベルでしか触ってなさそう
450デフォルトの名無しさん
2022/08/14(日) 21:15:44.48ID:B+F1bo8h 文法や記述は様々な言語をやっていれば誤差と慣れだけの問題となる
それに文句をつけるのは初心者と異常者のみ
そのRustに関して言えばセミコロンや中括弧(波括弧)は機能面で必要だからある
逆に例えば「 if (条件) 」の丸括弧は不要だから「 if 条件 」
それに文句をつけるのは初心者と異常者のみ
そのRustに関して言えばセミコロンや中括弧(波括弧)は機能面で必要だからある
逆に例えば「 if (条件) 」の丸括弧は不要だから「 if 条件 」
451デフォルトの名無しさん
2022/08/14(日) 22:57:09.94ID:549c+n4K 関数型のElixir は、データを書き換えられない。immutable。
新規作成しかできない
だから、並行処理に強い
新規作成しかできない
だから、並行処理に強い
452デフォルトの名無しさん
2022/08/14(日) 23:52:55.91ID:lDco67Nc >>448
こういう議論も地味に重要だと思う
セミコロンなしでreturn必須な言語の方が可読性高いのかな?
returnを書くことで読み手にとって何が明確になるんだろうか
フォーマッタでの自動入力って何?
こういう議論も地味に重要だと思う
セミコロンなしでreturn必須な言語の方が可読性高いのかな?
returnを書くことで読み手にとって何が明確になるんだろうか
フォーマッタでの自動入力って何?
453デフォルトの名無しさん
2022/08/14(日) 23:58:23.93ID:QUSc/NM6454デフォルトの名無しさん
2022/08/15(月) 00:30:10.08ID:yUQkYoQs 文法はフォーマッタやコード生成、静的解析などのツールの作りやすさ影響してくるからあまり馬鹿にしない方が良い
455デフォルトの名無しさん
2022/08/15(月) 01:04:12.66ID:p/fNcd9R 日本人は一部はセンスあるが
RustやElixer等メタプログラミング言語が理解できないやつが多すぎる
RustやElixer等メタプログラミング言語が理解できないやつが多すぎる
456デフォルトの名無しさん
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に戻すこともできる
慣れれば見やすいし、意味的なメリットも多い
・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/fNcd9R459デフォルトの名無しさん
2022/08/15(月) 10:41:42.04ID:8YjBNSEW460デフォルトの名無しさん
2022/08/15(月) 11:14:59.57ID:0McKJS85 バカはバカを呼び寄せる
461デフォルトの名無しさん
2022/08/15(月) 11:41:54.68ID:i3sQrZ2z >>459がどの言語の文法を理想と考えているのかが気になる
golang?
golang?
462デフォルトの名無しさん
2022/08/15(月) 12:05:46.45ID:r7x/NN7r なぜRustに対する批判が具体的なものじゃなくて、「意味不明」とか「不要」とか主観的で何を指しているのかわからないような言葉ばかりなんだろう
463デフォルトの名無しさん
2022/08/15(月) 12:17:22.73ID:A27GovSV 文末のセミコロンが必須な主なプログラミング言語
C C++ Java Perl PHP など
この状況でRustのセミコロンを叩いているのはこれらの言語を知らない初心者?
しかもRustは文と値の区別のためセミコロンの有無を活用して意味付けしている
C C++ Java Perl PHP など
この状況でRustのセミコロンを叩いているのはこれらの言語を知らない初心者?
しかもRustは文と値の区別のためセミコロンの有無を活用して意味付けしている
464デフォルトの名無しさん
2022/08/15(月) 12:21:25.57ID:8YjBNSEW465デフォルトの名無しさん
2022/08/15(月) 12:39:14.98ID:vxI8O7UY Python Ruby JavaScript Scala Kotlin あとなにがあったっけなぁ
466デフォルトの名無しさん
2022/08/15(月) 12:42:41.40ID:8YjBNSEW >>457
逆にセミコロンなしをデフォルトにしてセミコロンとかつけると式になるとかでもいいのでは?
その書き方ができると便利なのは否定しないけど、その恩恵を得るためだけに全てにセミコロン付けるのを押し付けるのは余計なコストだっていいたいわ
逆にセミコロンなしをデフォルトにしてセミコロンとかつけると式になるとかでもいいのでは?
その書き方ができると便利なのは否定しないけど、その恩恵を得るためだけに全てにセミコロン付けるのを押し付けるのは余計なコストだっていいたいわ
467デフォルトの名無しさん
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;
}
これもエラーとなる
昔から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;
}
これもエラーとなる
468デフォルトの名無しさん
2022/08/15(月) 12:53:34.04ID:A27GovSV >>467のようにGoは「セミコロンが必須だけど、省略可で、自動セミコロン挿入される言語」であるため
うっかり改行すると自動セミコロン挿入により文法エラーとなってしまう
うっかり改行すると自動セミコロン挿入により文法エラーとなってしまう
469デフォルトの名無しさん
2022/08/15(月) 12:53:34.61ID:lLs0VW2c Rustで文と式が混在するのは最適化のため?文でエラーが発生したときはどうなるんかね?
resultとかの戻り値用変数があると自然だけど、末尾呼び出し最適化が面倒になるので痛し痒し。
resultとかの戻り値用変数があると自然だけど、末尾呼び出し最適化が面倒になるので痛し痒し。
470デフォルトの名無しさん
2022/08/15(月) 13:06:38.69ID:8YjBNSEW471デフォルトの名無しさん
2022/08/15(月) 13:10:39.72ID:r7x/NN7r >>466
文にセミコロンをつけると式になるって文法を整合性を保ったまま定義できるとは思えない....
1とかtrueみたいな一つの値は式として扱う
ifやmatchはデフォルトで文として扱い、セミコロンをつけると式になるって文法にすると
let x = f(if cond { ... } else { ... };)
みたいな文で、どこが文でどこが式なのか曖昧さを持ってしまう気がする
文にセミコロンをつけると式になるって文法を整合性を保ったまま定義できるとは思えない....
1とかtrueみたいな一つの値は式として扱う
ifやmatchはデフォルトで文として扱い、セミコロンをつけると式になるって文法にすると
let x = f(if cond { ... } else { ... };)
みたいな文で、どこが文でどこが式なのか曖昧さを持ってしまう気がする
472デフォルトの名無しさん
2022/08/15(月) 13:14:43.30ID:r7x/NN7r 構文解析の簡単さってかなり大事なことだと思う
language serverも軽くなるしコンパイルも早くなる
適当に書いてフォーマッタで整形するって書き方もできるようになる
セミコロンをつけるのが面倒なのは分かるけど、それ以上の恩恵があるのは事実
language serverも軽くなるしコンパイルも早くなる
適当に書いてフォーマッタで整形するって書き方もできるようになる
セミコロンをつけるのが面倒なのは分かるけど、それ以上の恩恵があるのは事実
473デフォルトの名無しさん
2022/08/15(月) 13:15:05.13ID:JDmNxXPp 文法エラーになってからわざわざ直すのは面倒くさくないの?
JS/TSでもASIの罠にはまらないように考えるほうが面倒だから基本セミコロン付けているな
JS/TSでもASIの罠にはまらないように考えるほうが面倒だから基本セミコロン付けているな
474デフォルトの名無しさん
2022/08/15(月) 13:19:28.24ID:zxOEKBbO475デフォルトの名無しさん
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
Rustでは文は
Item(関数の定義や構造体の定義など)
LetStatement(let文)
ExpressionStatement(式にセミコロンつけたやつ)
MacroInvocation(hoge!();みたいにマクロの使用にセミコロンつけたやつ)
しかないから、そもそも文はエラーを生成しない
文の中の式がエラーを生成することはあるけど、文法上はハンドリングも式の中で行われる
https://doc.rust-lang.org/stable/reference/statements.html
476デフォルトの名無しさん
2022/08/15(月) 13:23:00.24ID:8YjBNSEW477デフォルトの名無しさん
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
式の全てにセミコロンが強要されているわけではないぞ
Block(ifとかmatchとかの{}を使うやつ)を含む式であるExpressionWithBlockではセミコロンの省略が可能とされている
だから、式を文として扱うべき場所で必要最低限のセミコロンが強制されている
https://doc.rust-lang.org/stable/reference/statements.html#expression-statements
478デフォルトの名無しさん
2022/08/15(月) 13:36:40.79ID:zxOEKBbO479デフォルトの名無しさん
2022/08/15(月) 14:50:27.64ID:iWGF+SuJ セミコロンは面倒だし書かなくていいならそれに越した事ないけど
JSみたいに罠に嵌るくらいなら明示的に書くのでも別にいい
Rustはじめた当初はセミコロンの有無で戻り値が変わるのはめちゃイライラしたけど2週間もすれば慣れる
セミコロン不要言語ではRubyやSwiftは縛りが少なくて扱いやすい
Pythonは改行できるケースがかなり限定されてるから扱いにくい(そのくせ1行80文字にしろとかアタオカ)
JSみたいに罠に嵌るくらいなら明示的に書くのでも別にいい
Rustはじめた当初はセミコロンの有無で戻り値が変わるのはめちゃイライラしたけど2週間もすれば慣れる
セミコロン不要言語ではRubyやSwiftは縛りが少なくて扱いやすい
Pythonは改行できるケースがかなり限定されてるから扱いにくい(そのくせ1行80文字にしろとかアタオカ)
480デフォルトの名無しさん
2022/08/15(月) 15:00:02.78ID:i3sQrZ2z 話題か全然次世代言語っぽくないな
次世代言語は人間の考えを忖度して良い感じにコードを解釈して欲しい
セミコロンとか些細な文法レベルじゃなくて、自動的に最適なアルゴリズム選んでくれるとか
次世代言語は人間の考えを忖度して良い感じにコードを解釈して欲しい
セミコロンとか些細な文法レベルじゃなくて、自動的に最適なアルゴリズム選んでくれるとか
481デフォルトの名無しさん
2022/08/15(月) 15:18:34.31ID:n9YpVahh どういうトレードオフの上に成り立ってるかを理解しようとしない人とは技術的な議論はない立たないわな
482デフォルトの名無しさん
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)
セミコロンがある言語ならば長い行を自由に改行できる
・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++の古めかしい記述を引き継ぎたい人が多いだけというのは、公式も認めてるのに
+ 222222222)
print(foo)
1つの評価式としたいのに途中改行を入れることを利点だと主張するなんてバカげている....
素直にC/C++の古めかしい記述を引き継ぎたい人が多いだけというのは、公式も認めてるのに
484デフォルトの名無しさん
2022/08/15(月) 17:58:11.91ID:wGU2BFOZ セパレータ無しで改行を無視するようにしたいなら、yamlのブロックスタイルぐらいが妥当かと。
485デフォルトの名無しさん
2022/08/15(月) 18:28:05.88ID:vxI8O7UY セミコロンが面倒とは言っても、インデントのタブと同じで頭使わないから楽だと思うんだがなぁ。
そんなに毛嫌いするようなことなんだろうか。
そんなに毛嫌いするようなことなんだろうか。
486デフォルトの名無しさん
2022/08/15(月) 18:35:55.10ID:zxOEKBbO もうここら辺の話は好みの問題もあるからこっちが正しいとか言っても揉めるだけ
>>483にしても無駄なカッコはヤダって奴が出るかも知れんし
foo = 111111111 +
222222222
で正しく処理できる言語もあるけどプラスの位置が気に入らんとか言う奴がいるかも知れんしな
>>483にしても無駄なカッコはヤダって奴が出るかも知れんし
foo = 111111111 +
222222222
で正しく処理できる言語もあるけどプラスの位置が気に入らんとか言う奴がいるかも知れんしな
487デフォルトの名無しさん
2022/08/15(月) 18:42:32.98ID:qHbAfBQi セミコロンがいるいらないなんてそんなに気にする事なのかな?
Cスタイルで無い書き方する言語の方がよっぽど見にくいんだよねぇ
Cスタイルで無い書き方する言語の方がよっぽど見にくいんだよねぇ
488デフォルトの名無しさん
2022/08/15(月) 19:05:59.41ID:QBWih2zA Dartもそうだけどセミコロンなし言語に慣れてると忘れる時にいちいちエラーになってうざい
JSはprettierで自動入力できるけど、エラーになるのがめんどくさい
まあただの慣れの問題だけど
JSはprettierで自動入力できるけど、エラーになるのがめんどくさい
まあただの慣れの問題だけど
489デフォルトの名無しさん
2022/08/15(月) 19:17:14.24ID:Q0+/Bn9w PowerShell(; 不要) と C#(; 必要) 使ってるとたまにあれ?って思うことあるけどたいして混乱しないよ
そんなのにいちいち引っかかってたら他にもっと引っかかるところあると思うが
そんなのにいちいち引っかかってたら他にもっと引っかかるところあると思うが
490デフォルトの名無しさん
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ぐらい触るでしょう?
Cスタイルで無い書き方する言語の方が見にくいというのはよほど経験が足りないか、組み込みかシステムプログラミングでC/C++の
沼にどっぷりハマってるか....いまどきbashもTypescript/JSもLuaも書くだろうし、DeepleanningしたいならPythonぐらい触るでしょう?
492デフォルトの名無しさん
2022/08/15(月) 19:42:50.19ID:On5LnEYn フリーフォーマットスタイルになったのだって、B言語の毛の生えたC言語初期がブロック表す{}でさえ、当時の多くのコンピュータのキーボードで
打てなかったのに採用しており明らかにパーサーを簡単にしたいがためだけで、確かに欠陥は無いが、他の言語を否定する有益な要素には
全く成り得ない。「頭がCスタイル=だから個人的にはそれが一番見やすい」という理論なら分かるが、一般化できるものではない
打てなかったのに採用しており明らかにパーサーを簡単にしたいがためだけで、確かに欠陥は無いが、他の言語を否定する有益な要素には
全く成り得ない。「頭がCスタイル=だから個人的にはそれが一番見やすい」という理論なら分かるが、一般化できるものではない
493デフォルトの名無しさん
2022/08/15(月) 19:46:40.39ID:DNbe8aKk フリーフォマットスタイルってウケる言いまわしだね
494デフォルトの名無しさん
2022/08/15(月) 19:51:28.75ID:v4xWLNJI 些細なことで盛り上がってるな
昨日のRust叩きがすぐ論破されてRustは高機能で優秀だと決着してしまったから
今日のRust叩きはセミコロンと波カッコがテーマなのかい?
昨日のRust叩きがすぐ論破されてRustは高機能で優秀だと決着してしまったから
今日のRust叩きはセミコロンと波カッコがテーマなのかい?
495デフォルトの名無しさん
2022/08/15(月) 20:17:06.88ID:1icmhpVn >>494
「誰にとって」高機能で優秀なのかを考えんとな。
リーダーとかマネージャーとかの管理者にとって、Rustはルールを強制して一定の安全性と性能を担保できる便利なルール。
その裏返しになるけど、コーダーみたいな実装者にとって、Rustは窮屈な制約や複雑な概念を押し付けられる不便な扱いづらいツール。
優れたプログラマーはコーダーであるとともにマネージャーでもリーダーでもあるからRustの利点は分からんでもないけど、普段使いにはしたくないツールだよなぁ。
今の複雑さじゃHaskellとかc++とかと大して変わらんから、そのうちもっと洗練された言語が出てくるんじゃない?
「誰にとって」高機能で優秀なのかを考えんとな。
リーダーとかマネージャーとかの管理者にとって、Rustはルールを強制して一定の安全性と性能を担保できる便利なルール。
その裏返しになるけど、コーダーみたいな実装者にとって、Rustは窮屈な制約や複雑な概念を押し付けられる不便な扱いづらいツール。
優れたプログラマーはコーダーであるとともにマネージャーでもリーダーでもあるからRustの利点は分からんでもないけど、普段使いにはしたくないツールだよなぁ。
今の複雑さじゃHaskellとかc++とかと大して変わらんから、そのうちもっと洗練された言語が出てくるんじゃない?
496デフォルトの名無しさん
2022/08/15(月) 20:32:42.70ID:IKaKwzzk ルールは強制じゃないんだよなあ
税金を払ってない金持ちがいるのと同じ
税金を払ってない金持ちがいるのと同じ
■ このスレッドは過去ログ倉庫に格納されています
