「C++の色々配慮してめんどくさい感じは好きだけど、実務になったらメモリ安全性とか考えて今後Rustに変わっていくんかな」
「うだうだ言ってないで仕事で必要なのをやればいいんだよ、趣味なら好きなのやればいい」
っていう雑談スレ。
結局C++とRustってどっちが良いの? 4traits
https://mevius.5ch.net/test/read.cgi/tech/1686046386/
関連スレ(マ板): Google&MS「バグの70%はC/C++。Rustにする」
https://medaka.5ch.net/test/read.cgi/prog/1619943288/
探検
結局C++とRustってどっちが良いの? 5traits
■ このスレッドは過去ログ倉庫に格納されています
2023/06/30(金) 21:56:35.52ID:PDIJ4aZy
266デフォルトの名無しさん
2023/07/08(土) 09:45:26.32ID:M6MMYA5O >>254
>アメリカ生まれの「Security 詐欺」という経営方法が有り、
>このスレの人はそれを使っている。
>「C++は危ないんだから、それを使ってる人は馬鹿、愚か、無能」
>と。
ほんそれ
>Securityの事を言われるとそれに従わざるを得なくなる人間心理を
>悪用し、商売に結びつける詐欺商法。
その通り
USO800認証取得で金も時間も掛かるとか能率を下げさせる攻撃がまかり通ってる
>マイクロソフトがOS Updateしない人を悪人扱いするのは、
>UpdateのたびにOSを遅くして、新しいOSを買わせる手段。
これは言い過ぎ(気持ちは判る)
>アメリカ生まれの「Security 詐欺」という経営方法が有り、
>このスレの人はそれを使っている。
>「C++は危ないんだから、それを使ってる人は馬鹿、愚か、無能」
>と。
ほんそれ
>Securityの事を言われるとそれに従わざるを得なくなる人間心理を
>悪用し、商売に結びつける詐欺商法。
その通り
USO800認証取得で金も時間も掛かるとか能率を下げさせる攻撃がまかり通ってる
>マイクロソフトがOS Updateしない人を悪人扱いするのは、
>UpdateのたびにOSを遅くして、新しいOSを買わせる手段。
これは言い過ぎ(気持ちは判る)
267デフォルトの名無しさん
2023/07/08(土) 09:48:22.81ID:ONcKyxOd >>265
どんなに優秀な人たちでもミスを必ずする
Google&Microsoft「セキュリティ脆弱性バグの70%はC/C++のメモリ管理ミスが原因。それがRustを採用した理由だ。」
https://xtech.nikkei.com/atcl/nxt/column/18/00692/042700054/
どんなに優秀な人たちでもミスを必ずする
Google&Microsoft「セキュリティ脆弱性バグの70%はC/C++のメモリ管理ミスが原因。それがRustを採用した理由だ。」
https://xtech.nikkei.com/atcl/nxt/column/18/00692/042700054/
268デフォルトの名無しさん
2023/07/08(土) 09:48:50.55ID:M6MMYA5O269デフォルトの名無しさん
2023/07/08(土) 09:50:07.66ID:M6MMYA5O >>261
お前モナ
お前モナ
270デフォルトの名無しさん
2023/07/08(土) 09:51:51.79ID:M6MMYA5O271デフォルトの名無しさん
2023/07/08(土) 09:56:21.11ID:z6h9kmb4 >>270
と、これが馬鹿の思考です
と、これが馬鹿の思考です
272デフォルトの名無しさん
2023/07/08(土) 09:57:58.69ID:ONcKyxOd >>270
C++の欠陥のせいでセキュリティ脆弱性が多発している現実の記事
C++はメモリ管理ミスを検出すらできないためコンパイルエラーにすることができない
致命的な欠陥のあるC++を今後は捨てていこうという話
C++の欠陥のせいでセキュリティ脆弱性が多発している現実の記事
C++はメモリ管理ミスを検出すらできないためコンパイルエラーにすることができない
致命的な欠陥のあるC++を今後は捨てていこうという話
273デフォルトの名無しさん
2023/07/08(土) 10:49:35.84ID:PpTTWe5V Rustの次の言語に期待
274デフォルトの名無しさん
2023/07/08(土) 11:04:17.25ID:fNvohE+k メモリ確保と開放位置をきっちり考えて書けないような奴がそれをプログラム言語のせいにしてるだけだな
ここからここまでがどうなってとか理論的に構造を考えれない奴に限って言語が悪いと責任転嫁をする
そういう奴がプログラム書くな
メモリ関連だけじゃなくバグだらけのプログラムしかできない
ここからここまでがどうなってとか理論的に構造を考えれない奴に限って言語が悪いと責任転嫁をする
そういう奴がプログラム書くな
メモリ関連だけじゃなくバグだらけのプログラムしかできない
275デフォルトの名無しさん
2023/07/08(土) 11:10:07.92ID:VdwsFu6Q 間違わないやつは間違わない
は論理的ではない
エンジニアの考え方ではない
は論理的ではない
エンジニアの考え方ではない
276デフォルトの名無しさん
2023/07/08(土) 11:12:56.26ID:tRB3lUB8 まあ、>>230のコードが即メモリバグを起こすかというと、そうではない
CSomeは自分しか使わない、自分はその使い方を間違えない、という条件ならたしかにおかしなことは起きない
ID:Snxto99TはこのCSomeをどう「誤用」すればメモリバグが起きるか説明できる?
できないならやっぱりザコだよ
CSomeは自分しか使わない、自分はその使い方を間違えない、という条件ならたしかにおかしなことは起きない
ID:Snxto99TはこのCSomeをどう「誤用」すればメモリバグが起きるか説明できる?
できないならやっぱりザコだよ
277デフォルトの名無しさん
2023/07/08(土) 11:14:38.03ID:7APnxgwh 間違う間違わない以前の問題として理論的に構造を考えて書けないでそれ言語せいにする奴
こうい奴はプログラムを書くな
こうい奴はプログラムを書くな
278デフォルトの名無しさん
2023/07/08(土) 11:23:49.72ID:gK2vRDVX 話は簡単で
優秀なプログラマーはC++でもRustでも難なく使いこなすことができる
一方で事実として
C++はうっかりメモリ管理やメモリ競合でミスをしてもコンパイラが通してしまう欠陥を抱えた古い言語
Rustはその場合でもコンパイラがエラーにしてくれる点やC++にない様々な高機能を持つ進んだ言語
結論として
優秀な人たちはどちらも使いこなせるので高機能で便利なRustを使っている
高機能な言語を使いこなせない人たちがC++のみに拘る
優秀なプログラマーはC++でもRustでも難なく使いこなすことができる
一方で事実として
C++はうっかりメモリ管理やメモリ競合でミスをしてもコンパイラが通してしまう欠陥を抱えた古い言語
Rustはその場合でもコンパイラがエラーにしてくれる点やC++にない様々な高機能を持つ進んだ言語
結論として
優秀な人たちはどちらも使いこなせるので高機能で便利なRustを使っている
高機能な言語を使いこなせない人たちがC++のみに拘る
279デフォルトの名無しさん
2023/07/08(土) 11:35:04.80ID:hU6KuhT0 >>232
>馬鹿だからミスや論理間違いを犯すのでnewやdeleteは使うな、
>となる。
make_uniqueとmake_sharedが規格に入ったから
newとdeleteを直接呼ぶ必要がなくなったから
>馬鹿だからミスや論理間違いを犯すのでnewやdeleteは使うな、
>となる。
make_uniqueとmake_sharedが規格に入ったから
newとdeleteを直接呼ぶ必要がなくなったから
280デフォルトの名無しさん
2023/07/08(土) 11:35:37.79ID:VdwsFu6Q 優秀なエンジニアは間違わないエンジニアではなく、間違わない方法を考え、選択するエンジニア
281デフォルトの名無しさん
2023/07/08(土) 11:48:14.94ID:/jSq4Gja fn clever_choice() {unsafe {...}}
282デフォルトの名無しさん
2023/07/08(土) 12:05:38.94ID:EB0iRg5v 優秀な人しか使えないんでは何時までたっても普及しないのでわ
283デフォルトの名無しさん
2023/07/08(土) 12:31:12.90ID:0dKdZ1v3 現在の選択肢ベースで考えれば十分普及してるでしょ
米しかなかった時代の米食の普及率でも目指してんの?
米しかなかった時代の米食の普及率でも目指してんの?
284デフォルトの名無しさん
2023/07/08(土) 12:33:13.38ID:777Hyqek オレはアホなのでアホでも使える方を選びます
285デフォルトの名無しさん
2023/07/08(土) 13:41:39.02ID:0jPiV6IB 開放と解放を間違えるような人が「俺は間違えない!」とか言っても無自覚バカ宣言にしか聞こえないわな
286デフォルトの名無しさん
2023/07/08(土) 13:56:46.11ID:p+sO9/0D ある意味あってるな
有名私立は服装も自由でピンク頭金髪可でピアスも開け放題
一方の馬鹿学校は制服で校則も厳しい
有名私立は服装も自由でピンク頭金髪可でピアスも開け放題
一方の馬鹿学校は制服で校則も厳しい
287デフォルトの名無しさん
2023/07/08(土) 14:11:41.74ID:Gy8EoznK >>266
>>マイクロソフトがOS Updateしない人を悪人扱いするのは、
>>UpdateのたびにOSを遅くして、新しいOSを買わせる手段。
>これは言い過ぎ(気持ちは判る)
そんなことない。
「計画的陳腐化」や
「薬物売人の経営論()drug buyer business economics」
などを使っていると言われている。
>>マイクロソフトがOS Updateしない人を悪人扱いするのは、
>>UpdateのたびにOSを遅くして、新しいOSを買わせる手段。
>これは言い過ぎ(気持ちは判る)
そんなことない。
「計画的陳腐化」や
「薬物売人の経営論()drug buyer business economics」
などを使っていると言われている。
288デフォルトの名無しさん
2023/07/08(土) 14:17:48.79ID:Gy8EoznK >>279
古いコンパイラは対応して無い。
新しいコンパイラをまともな速度で使おうとすると、
最新パソコンに買い替えが必要となり、OSも全入れ替えが必要
となり、今まで便利に使えていたアプリの大部分が動かなくなる。
そしてアプリは廃版になっていて新しいバージョンも出てない
から買い換えることも出来ない。
Win10にすると、WinXP時代のアプリが動かなくなったりする。
もっと古いものも持ってるし。
だから新しいハードウェアは買わない。
古いコンパイラは対応して無い。
新しいコンパイラをまともな速度で使おうとすると、
最新パソコンに買い替えが必要となり、OSも全入れ替えが必要
となり、今まで便利に使えていたアプリの大部分が動かなくなる。
そしてアプリは廃版になっていて新しいバージョンも出てない
から買い換えることも出来ない。
Win10にすると、WinXP時代のアプリが動かなくなったりする。
もっと古いものも持ってるし。
だから新しいハードウェアは買わない。
289デフォルトの名無しさん
2023/07/08(土) 14:21:53.18ID:M4Y1POjO セキュリティアップデートなんて商売に関係なく
フリーソフトウェアでもあるだろろうがw
リスクがある状況でUpdateしない奴は悪人だよ
フリーソフトウェアでもあるだろろうがw
リスクがある状況でUpdateしない奴は悪人だよ
290デフォルトの名無しさん
2023/07/08(土) 14:25:44.35ID:Gy8EoznK291デフォルトの名無しさん
2023/07/08(土) 14:31:35.48ID:Gy8EoznK 言葉だけではどっちが本当の事を言っているのか分からない。
実際のRustのコードを見れば、汚さが分かるし、
CやC++と全く似て無いことも分かる。
汚いと言うのは論理では表しにくいので、言葉では表現しにくいので
あたかも言葉だけではRustには欠点が無いかのように見えてしまう。
実際のRustのコードを見れば、汚さが分かるし、
CやC++と全く似て無いことも分かる。
汚いと言うのは論理では表しにくいので、言葉では表現しにくいので
あたかも言葉だけではRustには欠点が無いかのように見えてしまう。
292デフォルトの名無しさん
2023/07/08(土) 14:32:02.14ID:M4Y1POjO293デフォルトの名無しさん
2023/07/08(土) 14:33:34.46ID:M4Y1POjO294デフォルトの名無しさん
2023/07/08(土) 14:34:51.65ID:Gy8EoznK Rustの本を見てみたら、冒頭のOS環境として
Linux
MacOS
Windows 10
の順序で書いてあった。
まさに、オープンソースカルト左翼であることを目の当たりにした。
Linux
MacOS
Windows 10
の順序で書いてあった。
まさに、オープンソースカルト左翼であることを目の当たりにした。
295デフォルトの名無しさん
2023/07/08(土) 14:46:14.76ID:M4Y1POjO296デフォルトの名無しさん
2023/07/08(土) 14:49:30.87ID:Gy8EoznK297デフォルトの名無しさん
2023/07/08(土) 14:56:05.98ID:p+sO9/0D ある意味この人は保護対象じゃないのかと思った
298デフォルトの名無しさん
2023/07/08(土) 15:08:40.55ID:suNzn+84299デフォルトの名無しさん
2023/07/08(土) 15:14:57.62ID:Gy8EoznK300デフォルトの名無しさん
2023/07/08(土) 15:19:13.13ID:suNzn+84301デフォルトの名無しさん
2023/07/08(土) 15:19:27.20ID:/jSq4Gja 俺らと話しても薬物治療の代わりにはならないよ
302デフォルトの名無しさん
2023/07/08(土) 15:22:48.26ID:Gy8EoznK 悔しいのお。左翼どもよ。いくら頑張っても
Rustは流行らないと言う事実は変わらないよな。
Rustは流行らないと言う事実は変わらないよな。
303デフォルトの名無しさん
2023/07/08(土) 15:32:10.56ID:suNzn+84 >>302
お前はC++20の開発環境を用意しろ
お前はC++20の開発環境を用意しろ
304デフォルトの名無しさん
2023/07/08(土) 15:37:47.72ID:409zOGbF 日本はIT技術者が少ないんだから、これからは世の中のOSSではない外国製のソフトからは多めに税金を取るくらいの姿勢でよい。
OSSはIT弱小国家にとっては唯一の活路でしょ。今の中央集権の先駆者総取りのIT業界は残念ながら日本には不利だ。
OSSはIT弱小国家にとっては唯一の活路でしょ。今の中央集権の先駆者総取りのIT業界は残念ながら日本には不利だ。
305デフォルトの名無しさん
2023/07/08(土) 16:06:29.07ID:409zOGbF Ndarray構造体を全てArcとMutexで書きかえたけどそんなに実行速度が落ちなかった。
306デフォルトの名無しさん
2023/07/08(土) 16:08:46.88ID:b8BxfChJ >>302
大学でちゃんとソフトウェア工学なりプログラミング言語なり勉強した経験はあるん?
大学でちゃんとソフトウェア工学なりプログラミング言語なり勉強した経験はあるん?
307デフォルトの名無しさん
2023/07/08(土) 16:14:43.78ID:C0afRZOI >>305
スレッド間で試した?
スレッド間で試した?
308デフォルトの名無しさん
2023/07/08(土) 16:18:14.17ID:auRxfwEH >>306
俺の話は置いとけ。
Rustを作り始めた筆頭プログラマは、大学の専攻はバイオで
真菌を研究しており、真菌の生命力に見せられてRustの名は
真菌の一種から採ったんだそうだぞ。
そしてそのような工学とは縁もゆかりもない人が作った
言語を有りがたそうに崇拝しているのがRust信者なんだぞ。
俺の話は置いとけ。
Rustを作り始めた筆頭プログラマは、大学の専攻はバイオで
真菌を研究しており、真菌の生命力に見せられてRustの名は
真菌の一種から採ったんだそうだぞ。
そしてそのような工学とは縁もゆかりもない人が作った
言語を有りがたそうに崇拝しているのがRust信者なんだぞ。
309デフォルトの名無しさん
2023/07/08(土) 16:19:44.04ID:auRxfwEH Rustの速度の見積もりが間違っているのが前から謎だったが、
数学とは縁が無い人が作ったからだったんだな。
数学とは縁が無い人が作ったからだったんだな。
310デフォルトの名無しさん
2023/07/08(土) 16:23:14.66ID:auRxfwEH >>306
俺はそんなpopularな学科には行って無い。
俺はそんなpopularな学科には行って無い。
311デフォルトの名無しさん
2023/07/08(土) 16:25:41.23ID:409zOGbF312デフォルトの名無しさん
2023/07/08(土) 16:34:49.31ID:auRxfwEH313デフォルトの名無しさん
2023/07/08(土) 16:41:49.73ID:aF1ddcQd 水源とは何か良く分からんが、OSSでアメリカの大手ITをぶっ潰せるような仕組みを作れば日本には大きな得がある。出遅れた日本にとれる選択肢は少ない。
ビットコインのような非中央集権型のシステムを日本はITの全分野で押し進めていくべき。
ビットコインのような非中央集権型のシステムを日本はITの全分野で押し進めていくべき。
314デフォルトの名無しさん
2023/07/08(土) 16:43:47.67ID:gK2vRDVX 優秀でないから様々なオープンソースソフトウェアを使いこなせないのだろう
Rustのアンチ活動をしている人のレベルの低さを知った
Rustのアンチ活動をしている人のレベルの低さを知った
315デフォルトの名無しさん
2023/07/08(土) 16:44:42.96ID:u2zK5bfH >>310
大学では何やってたん?
大学では何やってたん?
316デフォルトの名無しさん
2023/07/08(土) 16:47:18.72ID:svPDr0rA 情報系産業は資本代替性が高いとは言うが殆どそれは資本力勝負となりアメリカには勝てない
なので別の方法で勝負しないといけない
流石にここまでのビッグテック支配は居心地が悪い
なので別の方法で勝負しないといけない
流石にここまでのビッグテック支配は居心地が悪い
317デフォルトの名無しさん
2023/07/08(土) 16:49:51.85ID:auRxfwEH >>316
技術と言うより金の問題になっている気がするな。
金で優秀な人や企業を吸収したり、あるいは、検索エンジン用や
AI用のスパコンみたいなものを持っていたり。
いまのITは大量のプログラマやデータセンターが無いと成り立たない様になってきている。
技術と言うより金の問題になっている気がするな。
金で優秀な人や企業を吸収したり、あるいは、検索エンジン用や
AI用のスパコンみたいなものを持っていたり。
いまのITは大量のプログラマやデータセンターが無いと成り立たない様になってきている。
318デフォルトの名無しさん
2023/07/08(土) 16:56:40.99ID:aF1ddcQd >>317
パブリッククラウドを国家が無償で日本国民に開放するべきだと思う。日本はアメリカの様に大規模な資本家がいないので政府主導で計算資源を国民に開放してくべきだと思う。
パブリッククラウドを国家が無償で日本国民に開放するべきだと思う。日本はアメリカの様に大規模な資本家がいないので政府主導で計算資源を国民に開放してくべきだと思う。
319デフォルトの名無しさん
2023/07/08(土) 16:57:28.70ID:svPDr0rA AIなんかも結局はぶん回し勝負ってことで電気エネルギーを如何に大量に安価に調達出来るかが勝負となってきている
なのでマイクロソフトやGoogleは核融合発電の研究開発に躍起になっている
資本さえあればなんとでもなる世界になってしまった
なのでマイクロソフトやGoogleは核融合発電の研究開発に躍起になっている
資本さえあればなんとでもなる世界になってしまった
320デフォルトの名無しさん
2023/07/08(土) 16:59:21.48ID:auRxfwEH 左翼がオープンソース化を進めた結果、ソフトウェアを個人で作って
売れる時代が終わってしをいました。
売れる時代が終わってしをいました。
321デフォルトの名無しさん
2023/07/08(土) 17:01:20.34ID:auRxfwEH322デフォルトの名無しさん
2023/07/08(土) 17:01:33.20ID:DfgvMNWU ID:auRxfwEHは自分で優秀と言うくらいだから
少なくともドクター取ってるんやろね
あれだけ自分で言っててまさか学部生ってことはあるまい
でも
発言からはアカデミックな香りを感じさせないのよね
数学や工学のバックグラウンドが見えないと言うか
文系かまったく畑違いなとこから来てるのかな?
少なくともドクター取ってるんやろね
あれだけ自分で言っててまさか学部生ってことはあるまい
でも
発言からはアカデミックな香りを感じさせないのよね
数学や工学のバックグラウンドが見えないと言うか
文系かまったく畑違いなとこから来てるのかな?
323デフォルトの名無しさん
2023/07/08(土) 17:10:00.07ID:p+sO9/0D NECや銀行とかでメインフレームを触ってた70代のおじいちゃんでしょ
324デフォルトの名無しさん
2023/07/08(土) 17:18:52.84ID:DfgvMNWU なんか山に籠もって一人でPC触ってるアマチュアって感じなんだよ正直
仕事からも学問からも遠いっていうか
自分たった一人でおうちで夢見ながら喋ってるような
批判や競争や責任からすごく遠いところに引きこもってるような
仕事からも学問からも遠いっていうか
自分たった一人でおうちで夢見ながら喋ってるような
批判や競争や責任からすごく遠いところに引きこもってるような
325デフォルトの名無しさん
2023/07/08(土) 17:58:46.48ID:M4Y1POjO326デフォルトの名無しさん
2023/07/08(土) 18:05:27.13ID:C0afRZOI 急にどうした?
発狂してからに
支離滅裂で会話が成立してないぞ
まずは強いお薬を飲め
発狂してからに
支離滅裂で会話が成立してないぞ
まずは強いお薬を飲め
327デフォルトの名無しさん
2023/07/08(土) 18:06:54.48ID:C0afRZOI >>311
スレッド間じゃないなら最適化されちゃうよ
スレッド間じゃないなら最適化されちゃうよ
328デフォルトの名無しさん
2023/07/08(土) 18:18:03.03ID:SdplvoMh Rustのライフタイムの型注釈についてちょっと真面目に資料読んでみたいんだけど「こういう時困る、だからこうしよう」的な文章しか転がってない
ちゃんと論文レベルで解説してる文章とかないですかね?
ちゃんと論文レベルで解説してる文章とかないですかね?
329デフォルトの名無しさん
2023/07/08(土) 18:32:09.99ID:p+sO9/0D ありませんね
次の患者さんどうぞー
次の患者さんどうぞー
330デフォルトの名無しさん
2023/07/08(土) 18:41:14.61ID:Yg5OnBqY >>328
現状の公式ドキュメントとしてはたぶんNLLのRFCが一番詳しいと思う
現状の公式ドキュメントとしてはたぶんNLLのRFCが一番詳しいと思う
331デフォルトの名無しさん
2023/07/08(土) 18:43:49.70ID:gK2vRDVX >>327
確認したことないからわからないけどSendしていないからといってそんな最適化するかな?
まずまったく異なる型のArcをRcへ変えてしまう無茶はしないはず
ではArcの中身のAtomicUsizeをusizeにしてしまう最適化をするだろうか
その両者の速度差はndarrayの計算覧ハと比べて微々bスる誤差にすぎbネい話だと思う
Mutexについても同様で最適化するとしたら丸ごと無くすことになるがそれは考えにくい
一方でスレッド間テストをすれば競合時のlockのwaitが起きるなどで少し遅くなる可能性はあるが
それはどのようにコードを書いても必須で避けられない正しい行為
確認したことないからわからないけどSendしていないからといってそんな最適化するかな?
まずまったく異なる型のArcをRcへ変えてしまう無茶はしないはず
ではArcの中身のAtomicUsizeをusizeにしてしまう最適化をするだろうか
その両者の速度差はndarrayの計算覧ハと比べて微々bスる誤差にすぎbネい話だと思う
Mutexについても同様で最適化するとしたら丸ごと無くすことになるがそれは考えにくい
一方でスレッド間テストをすれば競合時のlockのwaitが起きるなどで少し遅くなる可能性はあるが
それはどのようにコードを書いても必須で避けられない正しい行為
332デフォルトの名無しさん
2023/07/08(土) 18:51:22.44ID:SdplvoMh >>330
そうなんですか?
探してみます
ともかく“ライフタイム注釈”って“コンパイラが決定(推論)できないライフタイムを注釈する必要がある”というものらしいけど、どんな時は推論できてどんな時は推論できないのかさっぱり分からない
普通のHindley–Milner (HM) type systemとかだと論文レベルで解説文書がネットに転がっててわかるんですけど、ライフタイム注釈についてはどんな範囲では推論が可能なのかとか資料がひとつも見つからない
そうなんですか?
探してみます
ともかく“ライフタイム注釈”って“コンパイラが決定(推論)できないライフタイムを注釈する必要がある”というものらしいけど、どんな時は推論できてどんな時は推論できないのかさっぱり分からない
普通のHindley–Milner (HM) type systemとかだと論文レベルで解説文書がネットに転がっててわかるんですけど、ライフタイム注釈についてはどんな範囲では推論が可能なのかとか資料がひとつも見つからない
333デフォルトの名無しさん
2023/07/08(土) 18:52:33.75ID:auRxfwEH 日本の工学系は教授ですらIT技術の良し悪しを語る資格は無いのに。
334デフォルトの名無しさん
2023/07/08(土) 19:03:14.40ID:x767qEv3 このスレは各言語の特徴的なキーワードだけを参考にしている。
どっちが優れているとかどっちがゴミだとかという話は全く参考にならない。
どっちが優れているとかどっちがゴミだとかという話は全く参考にならない。
335デフォルトの名無しさん
2023/07/08(土) 19:11:01.12ID:p+sO9/0D >>332
論文レベルじゃないと理解できないのは困りものですね
論文レベルじゃないと理解できないのは困りものですね
336デフォルトの名無しさん
2023/07/08(土) 19:11:09.06ID:Yg5OnBqY >>332
lifetime elisionは別に推論じゃないぞ
borrowckとしてはライフタイムは必ず事前に注釈されなくてはならない
一部のよくあるパターンで省略を許可する、人間のためのルールがelision rules
lifetime elisionは別に推論じゃないぞ
borrowckとしてはライフタイムは必ず事前に注釈されなくてはならない
一部のよくあるパターンで省略を許可する、人間のためのルールがelision rules
337デフォルトの名無しさん
2023/07/08(土) 19:11:28.76ID:VdwsFu6Q Rustについて安全であるということだけを切り取って議論しているのは、現場も現実も知らない阿呆
338デフォルトの名無しさん
2023/07/08(土) 19:16:23.21ID:gK2vRDVX >>332
考え方が逆
ライフタイム注釈はコンパイラにとって常に必要
だからライフタイム注釈するのが基本しかしそれを省略することができる状況が多々あって
その省略された時にコンパイラが省略を補う規則が定められている
https://doc.rust-lang.org/book/ch10-03-lifetime-syntax.html#lifetime-elision
lifetime elision rules
The first rule is that
The second rule is that
The third rule is that
考え方が逆
ライフタイム注釈はコンパイラにとって常に必要
だからライフタイム注釈するのが基本しかしそれを省略することができる状況が多々あって
その省略された時にコンパイラが省略を補う規則が定められている
https://doc.rust-lang.org/book/ch10-03-lifetime-syntax.html#lifetime-elision
lifetime elision rules
The first rule is that
The second rule is that
The third rule is that
339デフォルトの名無しさん
2023/07/08(土) 19:18:56.60ID:auRxfwEH >>337
それ。
それ。
340デフォルトの名無しさん
2023/07/08(土) 19:19:42.70ID:7vcICBIU341デフォルトの名無しさん
2023/07/08(土) 19:32:01.59ID:p+sO9/0D ここで説明しても無駄だよ
彼は論文レベルじゃないと理解できないんだから
彼は論文レベルじゃないと理解できないんだから
342デフォルトの名無しさん
2023/07/08(土) 19:44:44.75ID:SdplvoMh みなさまありがとうございます
ちょっと私まだ疑問が解決してないです
私の認識書いてみます
私の認識だとrustの“ライフタイム”はコンパイラが確保したメモリを解放するタイミングを決定するために必須のものだと考えています
何故なら効率のためにrustは複数の参照が同じオブジェクトを参照する事を許す“参照の貸与”のシステムを導入してるからです
なので所有権を持ちその参照が切れる前に全ての“貸与”していた全ての参照の“ライフタイム”が切れていなければなりません
コンパイラは貸し出された参照のライフタイムが所有権を持つ参照のライフタイムより長いものが有ればそれを検出し、貸借規定違反としてコンパイル時にそれを検出する事でダングリング参照の発生を防ぐシステムだと認識してます
その“参照のライフタイム”はユーザーが宣言するものではなくて本来ならコンパイラが自動的に拾うべきものだと思ってます
何故ならばrustの参照のライフタイムが「プログラマが好き勝手に自由に設定していい」ものなら結局それは“コンパイラがダングリング参照の発生を未然に検出する”システムになど到底ならないからです
少なくともユーザーが“この関数の返り値のライフタイムは引数のこのライフタイム以前に切れる”と宣言してもその宣言の妥当性をコンパイラが検証しないなら意味がありません、もちろん検証すると思います、具体的には返り値として用意された値のライフタイムがその値を作成した右辺値に現れる参照のライフタイムより長ければその時点で不当なライフタイムの宣言を検出できてそれでコンパイラは不適切なライフタイム注釈を検出できると思います
分からないのはそれなら結局コンパイラはライフタイムをやろうと思えば自分で推論できるのではないかという事です、実際rustの初期のコンパイラでは必須だったライフタイム注釈はいくつかの推論可能なケースでは省略可能になっているようです
じゃあいつダメなのか?いつどんな時なら推論がうまくいかないのかの基本的な理論がよく分からないんです
ちょっと私まだ疑問が解決してないです
私の認識書いてみます
私の認識だとrustの“ライフタイム”はコンパイラが確保したメモリを解放するタイミングを決定するために必須のものだと考えています
何故なら効率のためにrustは複数の参照が同じオブジェクトを参照する事を許す“参照の貸与”のシステムを導入してるからです
なので所有権を持ちその参照が切れる前に全ての“貸与”していた全ての参照の“ライフタイム”が切れていなければなりません
コンパイラは貸し出された参照のライフタイムが所有権を持つ参照のライフタイムより長いものが有ればそれを検出し、貸借規定違反としてコンパイル時にそれを検出する事でダングリング参照の発生を防ぐシステムだと認識してます
その“参照のライフタイム”はユーザーが宣言するものではなくて本来ならコンパイラが自動的に拾うべきものだと思ってます
何故ならばrustの参照のライフタイムが「プログラマが好き勝手に自由に設定していい」ものなら結局それは“コンパイラがダングリング参照の発生を未然に検出する”システムになど到底ならないからです
少なくともユーザーが“この関数の返り値のライフタイムは引数のこのライフタイム以前に切れる”と宣言してもその宣言の妥当性をコンパイラが検証しないなら意味がありません、もちろん検証すると思います、具体的には返り値として用意された値のライフタイムがその値を作成した右辺値に現れる参照のライフタイムより長ければその時点で不当なライフタイムの宣言を検出できてそれでコンパイラは不適切なライフタイム注釈を検出できると思います
分からないのはそれなら結局コンパイラはライフタイムをやろうと思えば自分で推論できるのではないかという事です、実際rustの初期のコンパイラでは必須だったライフタイム注釈はいくつかの推論可能なケースでは省略可能になっているようです
じゃあいつダメなのか?いつどんな時なら推論がうまくいかないのかの基本的な理論がよく分からないんです
343デフォルトの名無しさん
2023/07/08(土) 19:52:23.40ID:7vcICBIU344デフォルトの名無しさん
2023/07/08(土) 19:53:38.62ID:p+sO9/0D 長文しか掛けんのかこいつは
全部関数など使わないで書けばライフタイム自体は一目瞭然
だが不注意な人はブロックから抜けて死んでる物を参照して使おうとする
それをコンパイラが阻止する
ライフタイムは基本的はこれだけ
これが前段階
全部関数など使わないで書けばライフタイム自体は一目瞭然
だが不注意な人はブロックから抜けて死んでる物を参照して使おうとする
それをコンパイラが阻止する
ライフタイムは基本的はこれだけ
これが前段階
345デフォルトの名無しさん
2023/07/08(土) 19:59:31.52ID:7vcICBIU 多分GC言語しか使ったことがないのだろう
参照がある限り値が生き続けるというぬるま湯に浸かってるから理解できない
参照がある限り値が生き続けるというぬるま湯に浸かってるから理解できない
346デフォルトの名無しさん
2023/07/08(土) 19:59:33.99ID:mgDMV1th すいません、私が知りたい事説明するのにこれ以上短くできませんでした
347デフォルトの名無しさん
2023/07/08(土) 20:00:38.48ID:p+sO9/0D それが途中で関数が使われてると戻り値のライフタイムがわからなくなる
入力した引数と戻り値のライフタイムが関連付けられるならその様にしなければならない
仮に a とbが与えられて戻り値がどちらかになるのであれば
「寿命が短い方を共通の寿命」と考えることが必要になる
そうしないと死んでる奴を参照しちゃうから
それを元にライフタイムの範囲を判定してはみ出てたらコンパイルエラーにする
入力した引数と戻り値のライフタイムが関連付けられるならその様にしなければならない
仮に a とbが与えられて戻り値がどちらかになるのであれば
「寿命が短い方を共通の寿命」と考えることが必要になる
そうしないと死んでる奴を参照しちゃうから
それを元にライフタイムの範囲を判定してはみ出てたらコンパイルエラーにする
348デフォルトの名無しさん
2023/07/08(土) 20:00:57.02ID:7vcICBIU 発想を逆転させな?
「変数が生きている間しか参照は存在できない」
「変数が生きている間しか参照は存在できない」
349デフォルトの名無しさん
2023/07/08(土) 20:08:08.08ID:gK2vRDVX350デフォルトの名無しさん
2023/07/08(土) 20:08:44.10ID:7vcICBIU 参照というのは実体がないと生きられないの
関数の引数や戻り値が参照だけだと実体がどれだけ生きてるかわからんでしょ?
関数の引数や戻り値が参照だけだと実体がどれだけ生きてるかわからんでしょ?
351デフォルトの名無しさん
2023/07/08(土) 20:13:07.67ID:p+sO9/0D ライフタイム自体はコードが書かれた時点で決まってる
それがおかしくないか判定するときのヒントがライフタイム注釈
それがおかしくないか判定するときのヒントがライフタイム注釈
352デフォルトの名無しさん
2023/07/08(土) 20:22:47.98ID:mgDMV1th >>349
はい、rustは型推論をしないのは知ってます
しかしそれが何故なのか分からないんです
例えばHaskellなら一才の型注釈は省略が可能です
全ての型は全てコンパイラによって推論され、型注釈を入れてコンパイルできるプログラムは型注釈を全消ししても(ただし効率のためにmtoplevel monomorphism restrictionというシステムが邪魔してくれますけどそれ外せば)必ずコンパイラが正しく推論してコンパイルしてくれます、その推論メカニズムの理論的根拠は論文として寄稿されネットにいくらでも転がってます
知りたいのはRustのライフタイム注釈は推論して省略可能だけどいつもいつも省略可能なわけではないのは、
・そもそもいつでも推論可能なわけではないので基本宣言させる、コンパイラが推論可能な限られたケースでは可能としている
・いつでも推論可能(私にはそう思える)のだけど効率を考えてそうしない(Haskell の toplevel monomorphic restrictionと同じように)
のどっちなんだろうと
そしてその話をtegulationに求めないのは必ずしもregulationは最新の研究を反映しているわけではないからです
つまり“現在のregulatinでは推論しない”という現状が必ずしも“そもそも推論などできない”を必ずしも意味しないからです
私ちょっとプログラミング言語論齧ってた事がありましてその辺の理論的背景どうなってるのかちょっと知りたいもので
はい、rustは型推論をしないのは知ってます
しかしそれが何故なのか分からないんです
例えばHaskellなら一才の型注釈は省略が可能です
全ての型は全てコンパイラによって推論され、型注釈を入れてコンパイルできるプログラムは型注釈を全消ししても(ただし効率のためにmtoplevel monomorphism restrictionというシステムが邪魔してくれますけどそれ外せば)必ずコンパイラが正しく推論してコンパイルしてくれます、その推論メカニズムの理論的根拠は論文として寄稿されネットにいくらでも転がってます
知りたいのはRustのライフタイム注釈は推論して省略可能だけどいつもいつも省略可能なわけではないのは、
・そもそもいつでも推論可能なわけではないので基本宣言させる、コンパイラが推論可能な限られたケースでは可能としている
・いつでも推論可能(私にはそう思える)のだけど効率を考えてそうしない(Haskell の toplevel monomorphic restrictionと同じように)
のどっちなんだろうと
そしてその話をtegulationに求めないのは必ずしもregulationは最新の研究を反映しているわけではないからです
つまり“現在のregulatinでは推論しない”という現状が必ずしも“そもそも推論などできない”を必ずしも意味しないからです
私ちょっとプログラミング言語論齧ってた事がありましてその辺の理論的背景どうなってるのかちょっと知りたいもので
353デフォルトの名無しさん
2023/07/08(土) 20:36:53.33ID:7vcICBIU お前のお気持ち表明はいらん
354デフォルトの名無しさん
2023/07/08(土) 20:42:31.52ID:gK2vRDVX >>352
Rustは型推論します
非常に便利です
ただし間違った型推論の連鎖を起こす混乱やニワタマ問題などを避けるために
関数の引数値と返値については(ジェネリックを除き)
敢えてプログラマーに明確に型宣言させています
つまり型推論が可能な領域はもっと広いけど
意図的にRustは一定の範囲内に抑えていることになります
ライフタイム注釈についても同様で
推論可能な領域は確かに存在するけれど
意図的にRustは推論をせずに機械的な省略補完ルールの適用のみに抑えていることになります
Rustは型推論します
非常に便利です
ただし間違った型推論の連鎖を起こす混乱やニワタマ問題などを避けるために
関数の引数値と返値については(ジェネリックを除き)
敢えてプログラマーに明確に型宣言させています
つまり型推論が可能な領域はもっと広いけど
意図的にRustは一定の範囲内に抑えていることになります
ライフタイム注釈についても同様で
推論可能な領域は確かに存在するけれど
意図的にRustは推論をせずに機械的な省略補完ルールの適用のみに抑えていることになります
355デフォルトの名無しさん
2023/07/08(土) 20:52:23.19ID:gK2vRDVX そして明確に型宣言することが基本である関数の引数値と返値についても
ジェネリックな型とそのトレイト境界による制限を用いることで個別の型宣言をさけることができるし
さらに型宣言の位置に「impl トレイト名」という形で静的なopaqueな型指定をしたり
「dyn トレイト名」という形で動的な型指定をすることで
幅広い型を受け付ける関数を書くこともできたり
複雑な型を返す時にそれを明示せずに済むなど
Rustでは型推論とは別のアプローチで利便性と可読性の向上に役立っています
ジェネリックな型とそのトレイト境界による制限を用いることで個別の型宣言をさけることができるし
さらに型宣言の位置に「impl トレイト名」という形で静的なopaqueな型指定をしたり
「dyn トレイト名」という形で動的な型指定をすることで
幅広い型を受け付ける関数を書くこともできたり
複雑な型を返す時にそれを明示せずに済むなど
Rustでは型推論とは別のアプローチで利便性と可読性の向上に役立っています
356デフォルトの名無しさん
2023/07/08(土) 21:00:55.19ID:p+sO9/0D ChatGPTみたいなレスだな…
357デフォルトの名無しさん
2023/07/08(土) 21:01:52.49ID:CoFTghq/ >>354
そうですね
一般的には“コンパイラにできないわけではない”場合でもユーザーにあえて“注釈をつけさせる”事が非常に便利な場合があります
多分Rustのライフタイム注釈もそれだと思ってはいるんですけど、ほんとにそれで間違い無いのか文書でまとめられたものがないか確認したいんです
HaskellやRustの型推論システムはもう論文でいくつか読んだ事があるのでそのメカニズムもまぁわかります
Rustのライフタイム注釈の場合も多分同じ事ができそうだとは思ってるんですけど敢えてか何故かやってない、それが“できそう”と思ってる自分の勘違いなのか、やはり“できるけど敢えてやってない”のか、あるいは現時点の最新研究でどこまではできることが確認されているのかとかその辺の情報持ってる人いないかなと
そうですね
一般的には“コンパイラにできないわけではない”場合でもユーザーにあえて“注釈をつけさせる”事が非常に便利な場合があります
多分Rustのライフタイム注釈もそれだと思ってはいるんですけど、ほんとにそれで間違い無いのか文書でまとめられたものがないか確認したいんです
HaskellやRustの型推論システムはもう論文でいくつか読んだ事があるのでそのメカニズムもまぁわかります
Rustのライフタイム注釈の場合も多分同じ事ができそうだとは思ってるんですけど敢えてか何故かやってない、それが“できそう”と思ってる自分の勘違いなのか、やはり“できるけど敢えてやってない”のか、あるいは現時点の最新研究でどこまではできることが確認されているのかとかその辺の情報持ってる人いないかなと
358デフォルトの名無しさん
2023/07/08(土) 21:16:10.37ID:p+sO9/0D いやいや
関数を使う人間側が推論不可だろ
関数を使う人間側が推論不可だろ
359デフォルトの名無しさん
2023/07/08(土) 22:06:00.43ID:7vcICBIU NGでスッキリ
360デフォルトの名無しさん
2023/07/08(土) 22:07:59.43ID:p+sO9/0D ググったら理由が出てきた
基本的に関数シグネチャが変わるような事態を避けたいようだ
関数内部を変更したら推論されるライフタイムを含んだシグネチャも変わってしまう事態が起こりうる
変更で呼び出した側であちこちにボコボココンパイルエラーが出るのはプログラマ的にうれしくないので避けてる
呼び出し規約は人間が決めてそれをコードを書く側が守ると言うこと
基本的に関数シグネチャが変わるような事態を避けたいようだ
関数内部を変更したら推論されるライフタイムを含んだシグネチャも変わってしまう事態が起こりうる
変更で呼び出した側であちこちにボコボココンパイルエラーが出るのはプログラマ的にうれしくないので避けてる
呼び出し規約は人間が決めてそれをコードを書く側が守ると言うこと
361デフォルトの名無しさん
2023/07/08(土) 22:12:52.52ID:0dKdZ1v3 Rustは関数単位で色んなチェックしてるけど
その関数が「どこでどう使われているか」を材料にして検証とか推論はしないし
最初からそんなつもりはないと思う
関数を全部インライン展開して1つのmain関数にできれば理論的には全部推論できそうだけど
関数ポインタとかdyn traitを使った動的な呼び出しが絡むと多分無理
Haskellレベルの推論は動的な呼び出しが存在しない参照透過性?が前提にあるはず
その関数が「どこでどう使われているか」を材料にして検証とか推論はしないし
最初からそんなつもりはないと思う
関数を全部インライン展開して1つのmain関数にできれば理論的には全部推論できそうだけど
関数ポインタとかdyn traitを使った動的な呼び出しが絡むと多分無理
Haskellレベルの推論は動的な呼び出しが存在しない参照透過性?が前提にあるはず
362デフォルトの名無しさん
2023/07/08(土) 22:13:25.29ID:p+sO9/0D 推論されたライフタイムを含むシグネチャと人間側が思ってる必要なシグネチャ(ライフタイム)と違うことが起こりうる
例えば他人が作ったライブラリのコードが変わって自分のところに波及してきたら嫌だろ?
従来のはそのままで別のシグネチャの関数を作れと思うだろ?
例えば他人が作ったライブラリのコードが変わって自分のところに波及してきたら嫌だろ?
従来のはそのままで別のシグネチャの関数を作れと思うだろ?
363デフォルトの名無しさん
2023/07/08(土) 22:19:22.93ID:+KTtE1Ht イヤ、ライふタイム注釈の推論に“使われる場所”まで検証する必要はないですよ
関数の返り値を作成してる右辺値を調べればそれで十分だと思います
その単位で返り値のライフタイム注釈が決定されれは、返り値が解放後に参照されるエラーが発生するか否かはその返り値を利用する呼び出し側関数のコンパイル時点で検出できると思います
関数の返り値を作成してる右辺値を調べればそれで十分だと思います
その単位で返り値のライフタイム注釈が決定されれは、返り値が解放後に参照されるエラーが発生するか否かはその返り値を利用する呼び出し側関数のコンパイル時点で検出できると思います
364デフォルトの名無しさん
2023/07/08(土) 22:20:56.17ID:ugEehqjn >>332
論文を探す前にチュートリアルを読みましょう
論文を探す前にチュートリアルを読みましょう
365デフォルトの名無しさん
2023/07/08(土) 22:24:17.70ID:p+sO9/0D せっかくググって答えを見つけてきたのにガン無視されてる…
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★2 [蚤の市★]
- 「偽サッチャー」「自滅的」「時代遅れ」 高市首相の経済政策を海外メディアが酷評 [蚤の市★]
- 【ド軍】山本由伸、WBC出場を決断!ドジャースが本人の意向を尊重、佐々木朗希はチームが故障歴を懸念で不参加 [鉄チーズ烏★]
- 米大統領報道官「日本と強固な同盟維持、中国とも協力」 [少考さん★]
- JA全農が「新おこめ券」…来年9月末の有効期限を新設、必要経費のみ上乗せ ★2 [蚤の市★]
- 【テレビ】粗品「THE W」バッサリ「おもんない、レベル低い」審査員就任で「日テレが“血の海”に…」 [湛然★]
- 女も昔は精子だったんだな
- 【未確認生ハメ情報】安倍晋三が高市早苗氏とチョメチョメしていたという噂が囁かれる。 [928194223]
- 【画像】地方局の女子アナさん、朝からエッチなおパンツを全国放送されてしまう😍
- 最近朝に暇だからラヴィット!見てるけど(´・ω・`)
- 【悲報】女さん「ハローワークで仕事を探してる3-40代の中年男性いるでしょ。あれ何?」 [483447288]
- 中国人、ガチ超正論。「日本人がアイヌに対してやったことを『問題ない』とするなら、中国が日本人に同じことをしても文句ないだろう?」 [314039747]
