スレタイ以外の言語も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
376デフォルトの名無しさん
2022/08/13(土) 14:10:23.92ID:6QfP9d8W >>374
エラー処理の要件次第ではbashだと辛くなりそうな予感がするんですが
エラー処理の要件次第ではbashだと辛くなりそうな予感がするんですが
377デフォルトの名無しさん
2022/08/13(土) 14:19:49.12ID:w1Rw8Hpr378デフォルトの名無しさん
2022/08/13(土) 14:49:04.30ID:98LBn3Jf >>326
日本が伊達にIT後進国じゃないってことだよな
日本が伊達にIT後進国じゃないってことだよな
379デフォルトの名無しさん
2022/08/13(土) 14:51:34.28ID:98LBn3Jf >>343
zig
zig
380デフォルトの名無しさん
2022/08/13(土) 15:27:52.15ID:1A00TS1y >>374
それだとファイルの末尾だと誤読しうる
おそらくファイル名の末尾の意味だろう
そういう処理は用途によってはbashスクリプトも当然使っている
ただし色んなエラー処理をしだすとシェルスクリプトでは面倒なこともある
そのためプログラミング言語を使う場合もある
Rustを使っているものもある
それだとファイルの末尾だと誤読しうる
おそらくファイル名の末尾の意味だろう
そういう処理は用途によってはbashスクリプトも当然使っている
ただし色んなエラー処理をしだすとシェルスクリプトでは面倒なこともある
そのためプログラミング言語を使う場合もある
Rustを使っているものもある
381デフォルトの名無しさん
2022/08/13(土) 15:36:28.85ID:1A00TS1y >>377
GCはいつ起こるかわからない
そしてその使い方ではGCが起きるまでクローズが遅延される
すると色んな問題が起こる
OSリソースがその間占有され続ける
占有オープンなら他者が利用できないなど
GC言語を使うなら面倒でもdeferやusingなどで明示的に後処理するしかないだろう
もちろんC++やRustならばRAIIにより即座に解放されクローズ処理もされるため面倒な記述は不要である
GCはいつ起こるかわからない
そしてその使い方ではGCが起きるまでクローズが遅延される
すると色んな問題が起こる
OSリソースがその間占有され続ける
占有オープンなら他者が利用できないなど
GC言語を使うなら面倒でもdeferやusingなどで明示的に後処理するしかないだろう
もちろんC++やRustならばRAIIにより即座に解放されクローズ処理もされるため面倒な記述は不要である
382デフォルトの名無しさん
2022/08/13(土) 15:40:18.08ID:w1Rw8Hpr383デフォルトの名無しさん
2022/08/13(土) 15:56:23.29ID:1A00TS1y >>382
RAII言語の方が優秀だと認識できているならばよろしい
RAII言語の方が優秀だと認識できているならばよろしい
384デフォルトの名無しさん
2022/08/13(土) 16:14:32.90ID:w1Rw8Hpr385デフォルトの名無しさん
2022/08/13(土) 17:08:08.82ID:1A00TS1y386デフォルトの名無しさん
2022/08/13(土) 17:28:21.83ID:njvmvUJk NoSQL最強おじさん笑
RAII最強おじさん笑
RAII最強おじさん笑
387デフォルトの名無しさん
2022/08/13(土) 17:30:58.15ID:w1Rw8Hpr388デフォルトの名無しさん
2022/08/13(土) 17:33:59.86ID:Dkd+eytH >>375
そんな雑なものがたくさんあるのに、Rustにすべきなんて言う人とはいつ迄も平行線な気がするよね。
そんな雑なものがたくさんあるのに、Rustにすべきなんて言う人とはいつ迄も平行線な気がするよね。
389デフォルトの名無しさん
2022/08/13(土) 17:41:30.08ID:WN46//k4 >>363
それが怠慢とかw
どこでメモリ(リソース)を確保してどこで解放するかをプログラマが選択出来なきゃ
それこそ自由度が無く使いにくい言語になる
GCがあるから解放しなくてもいつかやってくれるから明示的に書かないという思想が
正しいと思っているならおかしい
それが怠慢とかw
どこでメモリ(リソース)を確保してどこで解放するかをプログラマが選択出来なきゃ
それこそ自由度が無く使いにくい言語になる
GCがあるから解放しなくてもいつかやってくれるから明示的に書かないという思想が
正しいと思っているならおかしい
390デフォルトの名無しさん
2022/08/13(土) 17:50:27.94ID:N+gF026L391デフォルトの名無しさん
2022/08/13(土) 18:03:09.67ID:ctGwDZYY useとかusingとかdeferとか
書き忘れていたら実行前にエラーとなってくれればいいんだけどね
忘れずに書いていることに依存させる言語仕様はよくないね
書き忘れていたら実行前にエラーとなってくれればいいんだけどね
忘れずに書いていることに依存させる言語仕様はよくないね
392デフォルトの名無しさん
2022/08/13(土) 18:12:50.43ID:46rvE8i+ GCは結局メモリとGCの二つを管理しなきゃいけなくなって非効率なんじゃないか?
393デフォルトの名無しさん
2022/08/13(土) 18:14:07.67ID:9Y2sM84k 量子プロセッサ時代のプログラミング言語とか、意義のある会議は出来ないものか。
394デフォルトの名無しさん
2022/08/13(土) 18:42:16.49ID:MTqiLV7H ここ隔離スレなので特定のトピックに興味あるなら専用スレ立てた方が良いよ
395デフォルトの名無しさん
2022/08/13(土) 21:59:10.85ID:8G4SUPRt ファイルの自動クローズがRAIIで無条件かGCなので何らか明示指定かの話を見ていて思ったんだけど、
メモリの自動解放はこれまでGC言語だけの特権でGCにはデメリットもあれどメモリの自動解放という何もかもを上回るメリットが前面にあったのよね。
ところがGCがないのにメモリを自動解放するプログラミング言語が登場しちゃって危機感を覚える人も登場しちゃって、
メモリの自動解放はこれまでGC言語だけの特権でGCにはデメリットもあれどメモリの自動解放という何もかもを上回るメリットが前面にあったのよね。
ところがGCがないのにメモリを自動解放するプログラミング言語が登場しちゃって危機感を覚える人も登場しちゃって、
396デフォルトの名無しさん
2022/08/13(土) 22:51:24.09ID:6wAoLN5t GCがない(?)のにメモリを自動解放するプログラミング言語は昔からありますが……C++と言いましてね。
C++で(Rustみたいに)スタックフレームに何でも押し込むスタイルにするとどうなるのかねぇ。
C++で(Rustみたいに)スタックフレームに何でも押し込むスタイルにするとどうなるのかねぇ。
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
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【サッカー】J1昇格PO決勝戦 千葉、来季のJ1昇格が決定 17年越しの悲願叶える…オリジナル10が05年以来のJ1にそろう [久太郎★]
- 南京で「大虐殺」追悼式典 中国、高市政権をけん制 (共同通信) [少考さん★]
- 中国・ロシア両軍の爆撃機が東京方面へ向かう「異例のルート」を共同飛行…核も搭載可能、連携して威嚇か ★5 [ぐれ★]
- 【日銀】0.75%に利上げへ 来週の決定会合で、30年ぶり水準 賃金改善の継続見込む [ぐれ★]
- 京都のホテル大幅値下げ 訪日中国人客、年1000万人目前で急ブレーキ ★3 [蚤の市★]
- 緊急入院のゆたぼん「人身事故は嘘」はデマ 「滑稽ですね」救急車写真で証明、法的措置も検討 [少考さん★]
- >>5で貼られたスレにみんなで凸するスレ
- 小野田紀美「外国人帰れ!って言って石を投げられるのは毎日のように。もう殴る蹴るは当たり前でした。それで喧嘩強いんですよ、私。」 [856698234]
- (ヽ´ん`)🤏「たってるよ」女性に声をかけ、下半身を見せる男性発生 [359965264]
- 【実況】博衣こよりのえちえちドラクエ1&2リメイク🧪★3🏡
- 日本人、気づきはじめる「庶民の生活が苦しいのは金持ちが節税したりして金溜め込んでるから。大企業の内部留保もどうにかしろ」 [434776867]
- トランプ大統領、エプスタンイン邸宅で美女に囲まれご満悦の写真見つかる コンドームの山も [907981868]
