Mozilla発のRust言語のスレ
公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust
Web上の実行環境
https://play.rust-lang.org
前スレ
Rust part8
https://mevius.5ch.net/test/read.cgi/tech/1579834072/
探検
Rust part9
■ このスレッドは過去ログ倉庫に格納されています
2020/08/23(日) 01:07:35.52ID:MgEpWwVh
>>438
>自分と自分の周りの価値観がすべてだと思っている。
私は私の持つ価値観以外にも、別の価値観やセンスオブバリューが存在し、かつ、私の持つ価値観よりも優れた価値観が存在し得ることも想定していますが、
私の発言の中に「自分と自分の周りの価値観がすべてだと思っている」とあなたに感じさせた部分がありましたら、是非ご指摘いただけるととても嬉しいです
>自分と自分の周りの価値観がすべてだと思っている。
私は私の持つ価値観以外にも、別の価値観やセンスオブバリューが存在し、かつ、私の持つ価値観よりも優れた価値観が存在し得ることも想定していますが、
私の発言の中に「自分と自分の周りの価値観がすべてだと思っている」とあなたに感じさせた部分がありましたら、是非ご指摘いただけるととても嬉しいです
440デフォルトの名無しさん
2020/12/18(金) 17:46:11.20ID:OB9lVkoO 経験的に数学的に完全に安全
これが高IQ語法か
これが高IQ語法か
>>440
それって変てこな語法ですよね
数学的に正しいのであれば、それは経験とか履歴とかヒストリーとかにまったく関係なく、
数学的に正しいと証明された時点で、現存宇宙のビッグバン以前、宇宙死以後にも、数学的に正しいのに
ど う し て 「 経 験 的 」 と い う 単 語 を 使 用 し て い る の で し ょ う か ?
それって変てこな語法ですよね
数学的に正しいのであれば、それは経験とか履歴とかヒストリーとかにまったく関係なく、
数学的に正しいと証明された時点で、現存宇宙のビッグバン以前、宇宙死以後にも、数学的に正しいのに
ど う し て 「 経 験 的 」 と い う 単 語 を 使 用 し て い る の で し ょ う か ?
442デフォルトの名無しさん
2020/12/18(金) 19:22:04.03ID:ZgVdoEAh >>425
残念ながらお前の同僚や部下は違うんだ
残念ながらお前の同僚や部下は違うんだ
443デフォルトの名無しさん
2020/12/18(金) 19:41:43.87ID:0PDslekh >>436
年内に会費払わなきゃいけないのを思い出した。ありがとう。
年内に会費払わなきゃいけないのを思い出した。ありがとう。
>>436
メンサの人ってどんな人なんでしょう?
一度お会いしたいです
お話しするなかで、私のような馬鹿がもう少し生きやすくなるコツみたいなものが私にも感じられたら(多分理解は無理だと思います…)とても嬉しいですね
メンサの人ってどんな人なんでしょう?
一度お会いしたいです
お話しするなかで、私のような馬鹿がもう少し生きやすくなるコツみたいなものが私にも感じられたら(多分理解は無理だと思います…)とても嬉しいですね
445デフォルトの名無しさん
2020/12/18(金) 22:14:54.92ID:+Wrhvh6s せっかくのRustスレなのにどうしてこんなカオスなスレになっちまったんだ…
446デフォルトの名無しさん
2020/12/18(金) 22:29:37.14ID:y5YMvzUM キチガイに構っても得るものはない
447デフォルトの名無しさん
2020/12/18(金) 22:30:30.78ID:tYOLON+r unsafeの必要性がよくわかっていいじゃない
448デフォルトの名無しさん
2020/12/18(金) 22:40:26.63ID:CFV0tuU9 専門板名物
449デフォルトの名無しさん
2020/12/22(火) 13:40:54.01ID:n+6lDw0n from_str を実装しようとしています。
入力となる文字列 (の一部) をスライスとして保持するようなデザインにしたいのですが、
ライフタイムの整合性を取れる書き方が出来ません。
FromStr はそういうことが出来ないように制約付けられたトレイトということなのでしょうか?
それとも工夫してどうにか出来るでしょうか?
やりたいことをコードで言えばこんな感じです。
use std::str::FromStr;
struct foo<'a>(&'a str);
impl<'a> FromStr for foo<'a> {
type Err = &'static str;
fn from_str(s: &'a str) -> std::result::Result<Self, Self::Err> {
Ok(foo(s))
}
}
入力となる文字列 (の一部) をスライスとして保持するようなデザインにしたいのですが、
ライフタイムの整合性を取れる書き方が出来ません。
FromStr はそういうことが出来ないように制約付けられたトレイトということなのでしょうか?
それとも工夫してどうにか出来るでしょうか?
やりたいことをコードで言えばこんな感じです。
use std::str::FromStr;
struct foo<'a>(&'a str);
impl<'a> FromStr for foo<'a> {
type Err = &'static str;
fn from_str(s: &'a str) -> std::result::Result<Self, Self::Err> {
Ok(foo(s))
}
}
450デフォルトの名無しさん
2020/12/22(火) 15:57:10.65ID:RsVnnyiY >>449
できない
できない
451デフォルトの名無しさん
2020/12/22(火) 16:08:49.13ID:I4oG7AXR452デフォルトの名無しさん
2020/12/22(火) 16:33:15.01ID:n+6lDw0n453デフォルトの名無しさん
2020/12/24(木) 02:29:50.39ID:MTdaKV6Z 高IQの自分は、Cでメモリーマネジメントに悩まされたことは無かった。
一方、Rustはメモリーマネジメントが言語の中心に有り、プログラムの
アルゴリズムや本質的な処理よりもメモリーマネジメントに意識が集中して
しまう傾向がるため、人によるだろうが自分にとっては効率的な言語ではない。
一方、Rustはメモリーマネジメントが言語の中心に有り、プログラムの
アルゴリズムや本質的な処理よりもメモリーマネジメントに意識が集中して
しまう傾向がるため、人によるだろうが自分にとっては効率的な言語ではない。
454デフォルトの名無しさん
2020/12/24(木) 02:43:25.72ID:MTdaKV6Z 一般プログラマにとっては層ではないかも知れないが、
高IQのエキスパートにとっては、もっと安全に書ける方法を高頻度で天才的に
思いつくが、それはRustのチェッカと戦いとなる。
高IQのエキスパートにとっては、もっと安全に書ける方法を高頻度で天才的に
思いつくが、それはRustのチェッカと戦いとなる。
455デフォルトの名無しさん
2020/12/24(木) 06:27:27.80ID:NfngU3lj その話前も聞いた
456デフォルトの名無しさん
2020/12/24(木) 07:10:24.63ID:nIBEXBhK 糖質には構わず黙ってNGせよ
457デフォルトの名無しさん
2020/12/24(木) 07:21:13.47ID:0tNyylQf D言語使えよ
458デフォルトの名無しさん
2020/12/24(木) 10:57:33.54ID:wstK+Rzy Rustは、海外では既に大量の問題点が指摘されている:
https://www.reddit.com/r/rust/comments/ggyo51/criticisms_of_rust/
https://www.reddit.com/r/rust/comments/ggyo51/criticisms_of_rust/
459デフォルトの名無しさん
2020/12/24(木) 12:13:15.97ID:bpYd2wwx 日本語で頼む
460デフォルトの名無しさん
2020/12/24(木) 12:13:28.21ID:bpYd2wwx ヘタレなもんで
461デフォルトの名無しさん
2020/12/24(木) 12:41:29.49ID:5ZTYEX+H 学習曲線、ライブラリが未成熟、コンパイル遅い、っていういつものやつをみんながコメントしてるだけ
まぁ問題には違いないし改善も試みてるわけだけど
まぁ問題には違いないし改善も試みてるわけだけど
462デフォルトの名無しさん
2020/12/24(木) 12:46:16.64ID:QpBp7gJf >>461
それだけではないぞ。
それだけではないぞ。
463デフォルトの名無しさん
2020/12/24(木) 12:52:51.59ID:5ZTYEX+H464デフォルトの名無しさん
2020/12/24(木) 13:18:18.43ID:QpBp7gJf >>463
453, 454 もその一部に書いてあったものだ。覚えているものだけでも:
・Rustでは、本質ではなくメモリーマネジメントが前面に出たプログラミングとなってしまう。
・もっと良いモデルで書こうとしてもRustが安全性を理解できずエラーになってしまう。
・unsafeモードは悪者扱いされた結果ドキュメントが乏しく進化も遅いため使いにくい。
・長い歴史で実績の有るクラスの継承や例外機構が使えない言語設計。
・抽象化が深すぎて最適化を前提としているので最適化しないと極端に遅い。
・抽象化が深すぎるしマクロが多用されているためデバッガが使いにくくprintfデバッグ中心で行かざるを得ない。
・正確で詳細な言語仕様に乏しいためシステムプログラミングや組み込みには向いていない。
・コンパイラの多様性に乏しい(今のところrustc一個しかない)。
・ターゲットCPUがLLVMのものに限られるため、組み込みには向いていない。
・グラフィックが弱い。
・OpenGL、DirectXと併用するのが難しい。
・コンパイルが極端に遅い。
まだまだある。
453, 454 もその一部に書いてあったものだ。覚えているものだけでも:
・Rustでは、本質ではなくメモリーマネジメントが前面に出たプログラミングとなってしまう。
・もっと良いモデルで書こうとしてもRustが安全性を理解できずエラーになってしまう。
・unsafeモードは悪者扱いされた結果ドキュメントが乏しく進化も遅いため使いにくい。
・長い歴史で実績の有るクラスの継承や例外機構が使えない言語設計。
・抽象化が深すぎて最適化を前提としているので最適化しないと極端に遅い。
・抽象化が深すぎるしマクロが多用されているためデバッガが使いにくくprintfデバッグ中心で行かざるを得ない。
・正確で詳細な言語仕様に乏しいためシステムプログラミングや組み込みには向いていない。
・コンパイラの多様性に乏しい(今のところrustc一個しかない)。
・ターゲットCPUがLLVMのものに限られるため、組み込みには向いていない。
・グラフィックが弱い。
・OpenGL、DirectXと併用するのが難しい。
・コンパイルが極端に遅い。
まだまだある。
465デフォルトの名無しさん
2020/12/24(木) 13:20:42.91ID:QpBp7gJf >>464
[追加]
・抽象化が深すぎるため最適化無しでは極端に遅くなるため、デバッグ時も
最適化しなくてはまともに動作確認できない。これもデバッガが使い物に
ならなくてprintfデバッグ中心になる理由。
[追加]
・抽象化が深すぎるため最適化無しでは極端に遅くなるため、デバッグ時も
最適化しなくてはまともに動作確認できない。これもデバッガが使い物に
ならなくてprintfデバッグ中心になる理由。
466デフォルトの名無しさん
2020/12/24(木) 13:35:19.50ID:QpBp7gJf >>465
[追加2]
・リンカをVC++のlink.exeに頼っている。
・ツール類がVC++に比べてとても貧弱(赤ちゃんのおもちゃ)。
・unsafeを使わないととても面倒なことが多い。
・C++では、newとdelete以外にはコンパイラが独自提供しているもの(Hooks)
がないが、Rustでは大量に有る。例えば、Box<T>はソースがあるようにみえて
実質はコンパイラ提供のものなので途中でソースがなくなっている。
・C++を含めた多くの言語では、コードの位置の任意の一部を切り取って関数化する
ことは平易に機械的に(一般的に)できるが、Rustだと一般的には出来ない。
なぜならRustのコードは、その文脈においてのみ有効なコードに過ぎないからである。
文脈に応じて書き換えなければボローチェッカに文句を言われてコンパイルが通らない
から。
[追加2]
・リンカをVC++のlink.exeに頼っている。
・ツール類がVC++に比べてとても貧弱(赤ちゃんのおもちゃ)。
・unsafeを使わないととても面倒なことが多い。
・C++では、newとdelete以外にはコンパイラが独自提供しているもの(Hooks)
がないが、Rustでは大量に有る。例えば、Box<T>はソースがあるようにみえて
実質はコンパイラ提供のものなので途中でソースがなくなっている。
・C++を含めた多くの言語では、コードの位置の任意の一部を切り取って関数化する
ことは平易に機械的に(一般的に)できるが、Rustだと一般的には出来ない。
なぜならRustのコードは、その文脈においてのみ有効なコードに過ぎないからである。
文脈に応じて書き換えなければボローチェッカに文句を言われてコンパイルが通らない
から。
467デフォルトの名無しさん
2020/12/24(木) 13:38:01.51ID:QpBp7gJf >>466
[追加3]
・「Rustは独断的な言語です。それは良いことも悪いこともあります。
あなたがたまたまその意見に同意するならそれは良いことです、
さもなければそれは信じられないほど迷惑です。」
[追加3]
・「Rustは独断的な言語です。それは良いことも悪いこともあります。
あなたがたまたまその意見に同意するならそれは良いことです、
さもなければそれは信じられないほど迷惑です。」
468デフォルトの名無しさん
2020/12/24(木) 13:48:59.29ID:jsfyfwVN 「システムタイプのプロジェクトでやらなければならないことの多くは、Rustでは実行できず、安全でないコードが必要になります。そしてもちろん、使用する基盤となるモジュールの多くには、安全でないコードが含まれています。したがって、ある意味で、メモリの安全性の約束は実際には真実ではありません。それらのいずれかが、現在または将来、コードの他の場所で量子力学的問題を引き起こす可能性のあるメモリの問題を抱えている可能性があります。もちろん、それを実行する可能性のあるコードの量を大幅に削減しますが、それでもかなりの量があります。」
「RustがC ++の句読点の爆発を起こし、さらに悪化させたように感じます。コードのコンパクトさは、読みやすさに比べてそれほど価値があるとは思いません。Rustはシステムの言語であり、SPAフレームワークではありません。それを速くすることは目標ではありません、それを正しくすることは目標です、そしてそれはそれを何年にもわたって書くよりもそれを読んで編集することに非常に多くの時間を費やすことを含みます。」
「コンパイラには、C ++よりも多くのライブラリへのフックがあります。大規模で完全にコヒーレントなシステムの構築に関心のある私たちの中には、それを困難にしている人もいます。C ++では、基本的に新しく削除され、他のすべては完全に自分で行うことができます。」
「Rustは、例外や継承など、何十年にもわたる成功を無視していると感じています。私は自分が書いているコードを見て、ほとんどすべての呼び出しが?で終わる場所で、手作業で効果的に例外を実行しています。そして、すべてのメソッドは、自動的に伝播される可能性のあるエラーを手動で返す必要があります。」
「Rustの安全規則は、より安全なコードを作成しようとする試みと戦う場合があります。」
「RustがC ++の句読点の爆発を起こし、さらに悪化させたように感じます。コードのコンパクトさは、読みやすさに比べてそれほど価値があるとは思いません。Rustはシステムの言語であり、SPAフレームワークではありません。それを速くすることは目標ではありません、それを正しくすることは目標です、そしてそれはそれを何年にもわたって書くよりもそれを読んで編集することに非常に多くの時間を費やすことを含みます。」
「コンパイラには、C ++よりも多くのライブラリへのフックがあります。大規模で完全にコヒーレントなシステムの構築に関心のある私たちの中には、それを困難にしている人もいます。C ++では、基本的に新しく削除され、他のすべては完全に自分で行うことができます。」
「Rustは、例外や継承など、何十年にもわたる成功を無視していると感じています。私は自分が書いているコードを見て、ほとんどすべての呼び出しが?で終わる場所で、手作業で効果的に例外を実行しています。そして、すべてのメソッドは、自動的に伝播される可能性のあるエラーを手動で返す必要があります。」
「Rustの安全規則は、より安全なコードを作成しようとする試みと戦う場合があります。」
469デフォルトの名無しさん
2020/12/24(木) 13:57:55.75ID:FVOPSkk3 僕は絶対にミスはしませんって言って全部unsafeで包もうぜ
470デフォルトの名無しさん
2020/12/24(木) 14:21:36.07ID:7F4cW8XH >>464
> ・長い歴史で実績の有るクラスの継承や例外機構が使えない言語設計。
クラスの継承や例外機構は長い社会実験の末クソだったって結論出たろ。
だからGoだってわざわざ外してる。
C++にあるものを「実装できない」訳がないよな。わざわざ外してんだよ。
> ・長い歴史で実績の有るクラスの継承や例外機構が使えない言語設計。
クラスの継承や例外機構は長い社会実験の末クソだったって結論出たろ。
だからGoだってわざわざ外してる。
C++にあるものを「実装できない」訳がないよな。わざわざ外してんだよ。
471デフォルトの名無しさん
2020/12/24(木) 14:28:12.73ID:YICz7XpS 読んだのか、凄いなw
しかし、スルー検定3級不合格です
しかし、スルー検定3級不合格です
472デフォルトの名無しさん
2020/12/24(木) 14:56:25.90ID:TzdYJrci スル検は難関だからな。
473デフォルトの名無しさん
2020/12/24(木) 20:14:08.88ID:OKXZXV0n CやC++の批判で同じようにredditでコメント集めたらこんなもんじゃ済まないだろ
474デフォルトの名無しさん
2020/12/24(木) 21:01:24.33ID:3B9cL9c2 c++と結局同じ道を辿ってるというところが一番愚かな点。
rust覚える早道が結局c/c++勉強することっていう。
rust覚える早道が結局c/c++勉強することっていう。
475デフォルトの名無しさん
2020/12/24(木) 21:42:23.65ID:OKXZXV0n476デフォルトの名無しさん
2020/12/24(木) 21:44:10.79ID:5ZTYEX+H FFIのデファクトとしてのC ABIはしょうがないけど
C++とか一切触れる必要ないだろ
C++とか一切触れる必要ないだろ
477デフォルトの名無しさん
2020/12/24(木) 22:57:56.32ID:NfngU3lj レディットの負け犬に反論する必要なくない
賢さでいったらポメラニアンと同じくらいの連中なのに
賢さでいったらポメラニアンと同じくらいの連中なのに
478デフォルトの名無しさん
2020/12/25(金) 01:07:22.65ID:8LlCCPCm 所有権の重要さを実感するのは結局c++やってたやつだけだろ。
本当に一切c++触らないでrustだけで覚えたとかいう奴はいないわ。
いてもまともなコードは書けないだろう。
本当に一切c++触らないでrustだけで覚えたとかいう奴はいないわ。
いてもまともなコードは書けないだろう。
479デフォルトの名無しさん
2020/12/25(金) 02:44:51.30ID:M0TXsabA >>475
俺はそいつじゃないが、二文は繋がってない独立した文。
俺はそいつじゃないが、二文は繋がってない独立した文。
480デフォルトの名無しさん
2020/12/25(金) 02:53:15.82ID:M0TXsabA >>477
redditみたいなアメリカ最大の一般的な掲示板に書き込む人が皆、負け犬なんて
分けはない。
むしろSourceForgeみたいなところは、プログラミング関連の掲示板だから、
プライドだけが高くて力が無い人が集まることも有り得て、ずっと偏りが
あるため、負け犬率が高い可能性がありそこの好きな言語ランキング
なんて信用なら無い。
redditみたいなアメリカ最大の一般的な掲示板に書き込む人が皆、負け犬なんて
分けはない。
むしろSourceForgeみたいなところは、プログラミング関連の掲示板だから、
プライドだけが高くて力が無い人が集まることも有り得て、ずっと偏りが
あるため、負け犬率が高い可能性がありそこの好きな言語ランキング
なんて信用なら無い。
481デフォルトの名無しさん
2020/12/25(金) 02:56:53.96ID:M0TXsabA はっきいり言って、2ch/5chでも人が大量に来る一般的な板は平均程度の
知的レベルはあるが、この板みたいな技術系の板は、なぜか平均より低い人が
集まりがち。
なぜならリアルで認めてもらえない人がストレスのはけ口のようにして
書いてくる率が高いから。
その意味でSourceForgeは一般人より馬鹿が集まり易く、redditは一般人と
同程度のレベルがある。
2ch/5chもニュース意が見たいなのは一般人と同じくらいの知的水準だが
プログラム技術板は一般人よりも何故か劣っている。
知的レベルはあるが、この板みたいな技術系の板は、なぜか平均より低い人が
集まりがち。
なぜならリアルで認めてもらえない人がストレスのはけ口のようにして
書いてくる率が高いから。
その意味でSourceForgeは一般人より馬鹿が集まり易く、redditは一般人と
同程度のレベルがある。
2ch/5chもニュース意が見たいなのは一般人と同じくらいの知的水準だが
プログラム技術板は一般人よりも何故か劣っている。
482デフォルトの名無しさん
2020/12/25(金) 02:59:57.47ID:M0TXsabA githubも負け犬や雑魚が集まり易い。
有名な凄腕シェアウェア作家などはそんなとこに投稿せずに稼いでいる。
自分の腕ひとつでは稼げない人が、最後の手段としてなんとか名声を得てサラリーマン
として雇ってもらうためにgithubに投稿する傾向がある。
SourceForgeも同様。
有名な凄腕シェアウェア作家などはそんなとこに投稿せずに稼いでいる。
自分の腕ひとつでは稼げない人が、最後の手段としてなんとか名声を得てサラリーマン
として雇ってもらうためにgithubに投稿する傾向がある。
SourceForgeも同様。
483デフォルトの名無しさん
2020/12/25(金) 03:33:01.51ID:0bOU3lsT なんかそういデータあるんですか?
484デフォルトの名無しさん
2020/12/25(金) 04:00:24.23ID:wGSzow97 糖質に構ってはいけません
485デフォルトの名無しさん
2020/12/25(金) 07:45:07.16ID:0J2Xi2Rb >>483
サンプル数1(自分自身)で100%という調査結果があるんだろう
サンプル数1(自分自身)で100%という調査結果があるんだろう
486デフォルトの名無しさん
2020/12/25(金) 13:26:59.56ID:8LlCCPCm >>485
なんかそういうデータがあるんですか?
なんかそういうデータがあるんですか?
487デフォルトの名無しさん
2020/12/25(金) 19:42:11.03ID:mWI3ilc1 >>486
サンプル数1(自分自身)で100%という調査結果があるんだろう
サンプル数1(自分自身)で100%という調査結果があるんだろう
488デフォルトの名無しさん
2020/12/26(土) 02:24:44.32ID:xFdgYNcK489デフォルトの名無しさん
2020/12/26(土) 09:20:22.55ID:QvgSObSy >>488
D言語でいう契約を静的に検証できるみたいな感じかな? いいね
D言語でいう契約を静的に検証できるみたいな感じかな? いいね
490デフォルトの名無しさん
2020/12/26(土) 10:09:44.78ID:q2RopqqH いいね
盛り上がりはしないとは思うけど…
盛り上がりはしないとは思うけど…
491デフォルトの名無しさん
2020/12/26(土) 11:37:01.29ID:Gj+PzIiF OSS界隈で盛り上がる感じはしないけど
自動車とかはそっちのほうが見込みありそう
自動車とかはそっちのほうが見込みありそう
492デフォルトの名無しさん
2020/12/26(土) 13:21:33.22ID:qrKCtheG Vecのget()メソッドがi32とかも受け取ってくれればよかったのにとよく思う
結局、負方面については自分でインデックス内か検証しないといけないし
結局、負方面については自分でインデックス内か検証しないといけないし
493デフォルトの名無しさん
2020/12/26(土) 15:29:03.87ID:PUwCvC/R extension traitとかnewtypeで拡張すればいいんでは?
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=1b575c52e97e24c3ae345e945ec7dbbd
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=1b575c52e97e24c3ae345e945ec7dbbd
494デフォルトの名無しさん
2020/12/26(土) 16:18:17.43ID:qrKCtheG はえ〜ありがとうございます!
これ標準ライブラリに採用してほしい(我儘)
これ標準ライブラリに採用してほしい(我儘)
495デフォルトの名無しさん
2020/12/26(土) 20:14:31.56ID:q2RopqqH 貴様だってnewtypeだろうに!
496デフォルトの名無しさん
2020/12/27(日) 03:56:05.63ID:iVarltSe 小賢しいことを少年が言うのか!
497デフォルトの名無しさん
2020/12/27(日) 04:20:16.63ID:a9FVrfkC ガンダムハラスメントはやめてください
498デフォルトの名無しさん
2020/12/27(日) 13:57:50.83ID:gMdNxh6H たとえばこのように書いたときに
fn zero_bytes<T :Sized>() -> [u8; std::mem::size_of::<T>()] {
[0u8; std::mem::size_of::<T>()]
}
エラーとして
the size for values of type `T` cannot be known at compilation time
となってしまいます。
型の大きさに依存した配列を生成するには (実際にはコンパイル時に確定するはずでも)
Vec などを利用するしか仕方がないのでしょうか?
fn zero_bytes<T :Sized>() -> [u8; std::mem::size_of::<T>()] {
[0u8; std::mem::size_of::<T>()]
}
エラーとして
the size for values of type `T` cannot be known at compilation time
となってしまいます。
型の大きさに依存した配列を生成するには (実際にはコンパイル時に確定するはずでも)
Vec などを利用するしか仕方がないのでしょうか?
499デフォルトの名無しさん
2020/12/27(日) 16:28:27.67ID:VS6+Jx70 >>498
配列の要素数はconstじゃないとだめだからジェネリックには今のところできないみたい
どこかで型を書かないと
const SIZE: usize = std::mem::size_of::<i32>();
let foo = [0u8; SIZE];
https://github.com/rust-lang/rust/issues/43408
配列の要素数はconstじゃないとだめだからジェネリックには今のところできないみたい
どこかで型を書かないと
const SIZE: usize = std::mem::size_of::<i32>();
let foo = [0u8; SIZE];
https://github.com/rust-lang/rust/issues/43408
500デフォルトの名無しさん
2020/12/27(日) 19:25:21.46ID:UNA5PysG const fn, lazy_static のあたりは他の言語やってた人にはわかりづらいよな
501デフォルトの名無しさん
2020/12/27(日) 20:30:38.54ID:iVarltSe コンパイル時計算は最近の言語じゃ普通だけどな。
コンパイル時リフレクション使える言語も増えたし。
>>498
ttps://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=e09bdfe4323f597481eae11421777cc3
ttps://rust-lang.github.io/rfcs/2000-const-generics.html
ttps://github.com/rust-lang/rust/issues/44580
一時間前にマージされたばかりで1.51.0のマイルストーン完了したからそのうちnightlyに来る。
ttps://github.com/rust-lang/rust/pull/79135
edition 2021には間に合うんじゃないの?
コンパイル時リフレクション使える言語も増えたし。
>>498
ttps://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=e09bdfe4323f597481eae11421777cc3
ttps://rust-lang.github.io/rfcs/2000-const-generics.html
ttps://github.com/rust-lang/rust/issues/44580
一時間前にマージされたばかりで1.51.0のマイルストーン完了したからそのうちnightlyに来る。
ttps://github.com/rust-lang/rust/pull/79135
edition 2021には間に合うんじゃないの?
502デフォルトの名無しさん
2020/12/28(月) 02:45:21.79ID:UcUcH/pf Java では、class Foo{ Bar bar; } で済むところが、Rustでは以下の様な選択肢に悩まされる。
struct Foo { bar: Bar }
struct Foo<'a> { bar: &'a Bar }
struct Foo<'a> { bar: &'a mut Bar }
struct Foo { bar: Box<Bar> }
struct Foo { bar: Rc<Bar> }
struct Foo { bar: Arc<Bar> }
そして特に、'aの部分やBox, Rc, Arcの取り扱いやRcとArcの違いなどに悩まされる
ことになる。
これに加えて実践的にはOption, RefCellなどを何重にも組み合わせて使うことが必要となり
正しく理解するのはC++より遙かに難しい。
struct Foo { bar: Bar }
struct Foo<'a> { bar: &'a Bar }
struct Foo<'a> { bar: &'a mut Bar }
struct Foo { bar: Box<Bar> }
struct Foo { bar: Rc<Bar> }
struct Foo { bar: Arc<Bar> }
そして特に、'aの部分やBox, Rc, Arcの取り扱いやRcとArcの違いなどに悩まされる
ことになる。
これに加えて実践的にはOption, RefCellなどを何重にも組み合わせて使うことが必要となり
正しく理解するのはC++より遙かに難しい。
503デフォルトの名無しさん
2020/12/28(月) 02:52:18.54ID:UcUcH/pf >>502
ちなみに、plain Cの場合、
struct Foo { struct Bar *bar; }; // (1)
で済む。C++の場合、もちろんこれでもいけるが、
class Foo { Bar *bar; }; // (2)
1つでも特に問題ない。
uniqu_ptr<Bar>やshared_ptr<Bar>
も使えるが (2)で出来ないことは特に無いし、難しくも無く
Javaのclass Foo{ Bar bar; }
と使い勝手も余り変わらない。
違うのはbarが不要になった時に自分で deleteするだけで、
多くの場合、
class Foo {
Bar *bar;
Foo() { bar = NULL; }
~Foo() { delete bar; }
};
と書けばよいだけで、これはパターンなので丸覚えでも良いし、意味の理解も
難しくも無く、悩むことも無い。
それに比べればRustが如何に複雑なことか。
ちなみに、plain Cの場合、
struct Foo { struct Bar *bar; }; // (1)
で済む。C++の場合、もちろんこれでもいけるが、
class Foo { Bar *bar; }; // (2)
1つでも特に問題ない。
uniqu_ptr<Bar>やshared_ptr<Bar>
も使えるが (2)で出来ないことは特に無いし、難しくも無く
Javaのclass Foo{ Bar bar; }
と使い勝手も余り変わらない。
違うのはbarが不要になった時に自分で deleteするだけで、
多くの場合、
class Foo {
Bar *bar;
Foo() { bar = NULL; }
~Foo() { delete bar; }
};
と書けばよいだけで、これはパターンなので丸覚えでも良いし、意味の理解も
難しくも無く、悩むことも無い。
それに比べればRustが如何に複雑なことか。
504デフォルトの名無しさん
2020/12/28(月) 02:57:07.20ID:UcUcH/pf [補足]
C++の場合も、
class Foo { Bar *bar; }; // (1)
class Foo { unique_ptr<Bar> bar; }; // (2)
class Foo { shared_ptr<Bar> bar; }; // (3)
の選択肢は有るには有るが、常に(1)を使ってもコンパイルエラーに悩まされる
事はないし、できないこともなく、特に危険でもない。
ところがRustの場合、状況に応じて>>502のどれか一つしか選択できない
ことが多く、柔軟性に乏しい。
プログラムに僅かな変更があったときに、C++の場合、(1)なら修正が全く
必要がないが、Rustの場合は>>502のうちのどれかからどれかに修正しなくては
ならないことが多い。
C++の場合も、
class Foo { Bar *bar; }; // (1)
class Foo { unique_ptr<Bar> bar; }; // (2)
class Foo { shared_ptr<Bar> bar; }; // (3)
の選択肢は有るには有るが、常に(1)を使ってもコンパイルエラーに悩まされる
事はないし、できないこともなく、特に危険でもない。
ところがRustの場合、状況に応じて>>502のどれか一つしか選択できない
ことが多く、柔軟性に乏しい。
プログラムに僅かな変更があったときに、C++の場合、(1)なら修正が全く
必要がないが、Rustの場合は>>502のうちのどれかからどれかに修正しなくては
ならないことが多い。
505デフォルトの名無しさん
2020/12/28(月) 03:21:57.08ID:UcUcH/pf https://matklad.github.io/2020/09/20/why-not-rust.html
「Rust lacks an official specification. The reference is a work in progress,
and does not yet document all the fine implementation details.」
Rustは公式の使用が欠如している。
リファレンスマニュアルの作成は発展途上中(作成中、作業中、進展中)で、
しっかりした実装の詳細を全てドキュメント化してはいない。
Rustのコンパイル時間がとても長いことを直後に指摘した上で、
「A program written in a slower to run but faster to compile programming
language can be faster to run because the programmer
will have more time to optimize!」
実行速度が遅いがコンパイルが速い言語で書かれたプログラムは、
実際には速く実行できるようになる。
なぜなら、プログラマが最適化する時間をより沢山得ることが出来るためだ。
「Rust lacks an official specification. The reference is a work in progress,
and does not yet document all the fine implementation details.」
Rustは公式の使用が欠如している。
リファレンスマニュアルの作成は発展途上中(作成中、作業中、進展中)で、
しっかりした実装の詳細を全てドキュメント化してはいない。
Rustのコンパイル時間がとても長いことを直後に指摘した上で、
「A program written in a slower to run but faster to compile programming
language can be faster to run because the programmer
will have more time to optimize!」
実行速度が遅いがコンパイルが速い言語で書かれたプログラムは、
実際には速く実行できるようになる。
なぜなら、プログラマが最適化する時間をより沢山得ることが出来るためだ。
506デフォルトの名無しさん
2020/12/28(月) 03:37:08.29ID:UcUcH/pf 現実のプログラムでは、CやC++とRustのプログラムを連携しなければならない
ということと指摘した上で、Cargoがそれを難しくしているかも知れないことを
指摘している:
「One specific gotcha is that Cargo’s opinionated world view
(which is a blessing for pure Rust projects) might make
it harder to integrate with a bigger build system.」
具体的には、Cargo主張する世界観(これは純粋なRustプロジェクトにとっては
幸いなことです)が、より大きなビルドシステムとの統合を
難しくしているかもしれないということです。
ということと指摘した上で、Cargoがそれを難しくしているかも知れないことを
指摘している:
「One specific gotcha is that Cargo’s opinionated world view
(which is a blessing for pure Rust projects) might make
it harder to integrate with a bigger build system.」
具体的には、Cargo主張する世界観(これは純粋なRustプロジェクトにとっては
幸いなことです)が、より大きなビルドシステムとの統合を
難しくしているかもしれないということです。
507デフォルトの名無しさん
2020/12/28(月) 03:48:47.51ID:UcUcH/pf 「First, there’s no definition of Rust memory model, so it is impossible to
formally check if a given unsafe block is valid or not. There’s informal
definition of “things rustc does or might rely on” and in in-progress
runtime verifier, but the actual model is in flux. So there might be some
unsafe code somewhere which works OK in practice today, might be
declared invalid tomorrow, and broken by a new compiler optimization
next year.」
第一に、Rustのメモリモデルの定義がないので、与えられた安全でないブロック
が有効かどうかを正式にチェックすることができません。非公式な定義として、
"rustc が行う、または依存しているかもしれないこと "と、進行中のランタイム
ベリファイアがありますが、実際のモデルは流動的です。つまり、どこかに安全
でないコードがあるかもしれませんが、今日は問題なく動作していても、明日
には無効と宣言され、来年の新しいコンパイラの最適化で壊れてしまうかも
しれません。
formally check if a given unsafe block is valid or not. There’s informal
definition of “things rustc does or might rely on” and in in-progress
runtime verifier, but the actual model is in flux. So there might be some
unsafe code somewhere which works OK in practice today, might be
declared invalid tomorrow, and broken by a new compiler optimization
next year.」
第一に、Rustのメモリモデルの定義がないので、与えられた安全でないブロック
が有効かどうかを正式にチェックすることができません。非公式な定義として、
"rustc が行う、または依存しているかもしれないこと "と、進行中のランタイム
ベリファイアがありますが、実際のモデルは流動的です。つまり、どこかに安全
でないコードがあるかもしれませんが、今日は問題なく動作していても、明日
には無効と宣言され、来年の新しいコンパイラの最適化で壊れてしまうかも
しれません。
508デフォルトの名無しさん
2020/12/28(月) 03:52:06.86ID:UcUcH/pf Second, there’s also an observation that unsafe blocks are not, in fact, modular.
Sufficiently powerful unsafe blocks can, in effect, extend the language. Two such
extensions might be fine in isolation, but lead to undefined behavior if used
simultaneously: Observational equivalence and unsafe code.
第二に、安全でないブロックは実際にはモジュール化されていないという観察もあります。
十分に強力な安全でないブロックは、事実上、言語を拡張することができます。
そのような2つの拡張は単独では問題ないかもしれませんが、同時に使用されると定義
されていない動作になります。観測的等価性と安全でないコードです。
Finally, there are outright bugs in the compiler.
最後に、コンパイラには明らかなバグがあります。
https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3A%22I-unsound+%F0%9F%92%A5%22
Sufficiently powerful unsafe blocks can, in effect, extend the language. Two such
extensions might be fine in isolation, but lead to undefined behavior if used
simultaneously: Observational equivalence and unsafe code.
第二に、安全でないブロックは実際にはモジュール化されていないという観察もあります。
十分に強力な安全でないブロックは、事実上、言語を拡張することができます。
そのような2つの拡張は単独では問題ないかもしれませんが、同時に使用されると定義
されていない動作になります。観測的等価性と安全でないコードです。
Finally, there are outright bugs in the compiler.
最後に、コンパイラには明らかなバグがあります。
https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3A%22I-unsound+%F0%9F%92%A5%22
509デフォルトの名無しさん
2020/12/28(月) 08:35:49.12ID:1wnarVmc まあ大体その通りだわな。matkladはわかりやすい文章書くわ。
510デフォルトの名無しさん
2020/12/28(月) 11:36:31.94ID:OYitjU6y スマートポインタ絶対に使いたくない理由はよくわからんが
rustでも生ポインタ使えばよいのでは
コンパイル時間についてはcraneliftと差分コンパイルの進化に期待かな
その他の議論については影響は限定的だし
影響を受けない領域でrustを使えば良いのでは
議論の俎上には挙がっているし徐々に改善されていくでしょう
rustでも生ポインタ使えばよいのでは
コンパイル時間についてはcraneliftと差分コンパイルの進化に期待かな
その他の議論については影響は限定的だし
影響を受けない領域でrustを使えば良いのでは
議論の俎上には挙がっているし徐々に改善されていくでしょう
511デフォルトの名無しさん
2020/12/28(月) 12:53:26.99ID:UcUcH/pf >>510
>その他の議論については影響は限定的だし
ところがC/C++が担ってきた領域ではそれが大問題になることが多いので
RustはC/C++の代替には成りえない。
>議論の俎上には挙がっているし徐々に改善されていくでしょう
少子化も日本の経済衰退も非常に何十年間も議論の俎上に上がっている
のに改善されていく気配は全く無いことからも分かる様に、
そんなことは一般的には成り立たない。
>その他の議論については影響は限定的だし
ところがC/C++が担ってきた領域ではそれが大問題になることが多いので
RustはC/C++の代替には成りえない。
>議論の俎上には挙がっているし徐々に改善されていくでしょう
少子化も日本の経済衰退も非常に何十年間も議論の俎上に上がっている
のに改善されていく気配は全く無いことからも分かる様に、
そんなことは一般的には成り立たない。
512デフォルトの名無しさん
2020/12/28(月) 12:58:19.94ID:UcUcH/pf513デフォルトの名無しさん
2020/12/28(月) 13:13:50.09ID:N6A7dpOQ514デフォルトの名無しさん
2020/12/28(月) 13:15:56.66ID:UcUcH/pf515デフォルトの名無しさん
2020/12/28(月) 18:08:21.04ID:1npJXF9+ >実行速度が遅いがコンパイルが速い言語で書かれたプログラムは、
>実際には速く実行できるようになる。
最近この苦情よく聞くんだけどどんなもんなの
コンパイル時間のボトルネックなんて
考える時間に比べたらたいしたことなくない
何十分もかからんだろ
>実際には速く実行できるようになる。
最近この苦情よく聞くんだけどどんなもんなの
コンパイル時間のボトルネックなんて
考える時間に比べたらたいしたことなくない
何十分もかからんだろ
516デフォルトの名無しさん
2020/12/28(月) 18:22:47.18ID:1wnarVmc お前が弄る小さいプログラムではそうなんだろうね。
517デフォルトの名無しさん
2020/12/28(月) 18:27:17.21ID:1npJXF9+ どんなん
518デフォルトの名無しさん
2020/12/28(月) 18:58:25.81ID:9g/X/cXA CIとかでめちゃくちゃ時間かかるのはRustの醍醐味
519デフォルトの名無しさん
2020/12/28(月) 19:03:06.03ID:yEfXJ2Ei >>515
今のRustコンパイラはコア数で良くスケールするので
開発用の32コアマシンなら快適だけど、古いノートPCだと辛い、みたいなことはあるな
Actixみたいに大量の依存関係を要求するやつ+しょぼいシングルコアなら数十分かかるかもね
今のRustコンパイラはコア数で良くスケールするので
開発用の32コアマシンなら快適だけど、古いノートPCだと辛い、みたいなことはあるな
Actixみたいに大量の依存関係を要求するやつ+しょぼいシングルコアなら数十分かかるかもね
520デフォルトの名無しさん
2020/12/28(月) 19:27:10.85ID:yEfXJ2Ei 個人的にはクレート単体で遅いと思ったことはなくて、体感では数万行のコードでもgccより速いかな、という感じ
なので遅い要因はほぼ依存関係の多さだと思っている
C++とかだと特定のディストリビューションの特定のバージョンでコンパイルエラー、みたいな地獄のデバッグが待っているので、それを回避するコストとしては十分安いと思うけど
なので遅い要因はほぼ依存関係の多さだと思っている
C++とかだと特定のディストリビューションの特定のバージョンでコンパイルエラー、みたいな地獄のデバッグが待っているので、それを回避するコストとしては十分安いと思うけど
521デフォルトの名無しさん
2020/12/28(月) 22:08:45.00ID:mQPXLAV2 今の方法だとまだ依存crateのコンパイル待ちになるのにスケールする?
>>518に尽きる
>>518に尽きる
522デフォルトの名無しさん
2020/12/28(月) 22:37:04.04ID:yEfXJ2Ei523デフォルトの名無しさん
2020/12/29(火) 01:19:43.87ID:k23+wtCh >>520
>個人的にはクレート単体で遅いと思ったことはなくて、体感では数万行のコードでもgccより速いかな、という感じ
C言語のコンパイル意が遅くなるのは、Win32のヘッダファイルの巨大さが原因
であることが多い。
それが50MB位有ったりして、ヘッダファイルだけで数万行から数10万行くらいあったりする。
そのパースが遅い。
なので、VC++では precompiled header を使っている。
>個人的にはクレート単体で遅いと思ったことはなくて、体感では数万行のコードでもgccより速いかな、という感じ
C言語のコンパイル意が遅くなるのは、Win32のヘッダファイルの巨大さが原因
であることが多い。
それが50MB位有ったりして、ヘッダファイルだけで数万行から数10万行くらいあったりする。
そのパースが遅い。
なので、VC++では precompiled header を使っている。
524デフォルトの名無しさん
2020/12/29(火) 08:29:57.63ID:+jeJmMuS cとc++じゃコンパイル速度は桁違いだけどな。
525デフォルトの名無しさん
2020/12/29(火) 10:56:10.54ID:2ROJabla ライブラリの依存関係を自動で解決するエコシステムがあると
依存関係が巨大になりがちっていうのは
Haskell や JavaScript でもよく聞くけどな。
まあ自分でそのライブラリ群を書く手間、
既存のものを使うにしても導入の仕方を調べる手間に比べたら
多少の時間はかかっても自動でやってくれるほうがマシではあるし、
度を越したときは個別に改善するしか仕方がないんだろう。
依存関係が巨大になりがちっていうのは
Haskell や JavaScript でもよく聞くけどな。
まあ自分でそのライブラリ群を書く手間、
既存のものを使うにしても導入の仕方を調べる手間に比べたら
多少の時間はかかっても自動でやってくれるほうがマシではあるし、
度を越したときは個別に改善するしか仕方がないんだろう。
526デフォルトの名無しさん
2020/12/29(火) 15:03:36.81ID:FJxczyqV 依存関係のコンパイルは初回しかやらないんだから多少遅くても気にはならない
CIの場合はtargetディレクトリキャッシュすれば良いし
rust-analyzerの起動時間がちょっと気になるくらい
CIの場合はtargetディレクトリキャッシュすれば良いし
rust-analyzerの起動時間がちょっと気になるくらい
527デフォルトの名無しさん
2020/12/29(火) 23:35:14.28ID:1sbIl3YX >>522
昔より増えたapiとimplを分離したクレートは
自分のプロジェクト->api->impl->implが依存するcrate(s)->...
と直列に依存してる。log,slog,serde,thiserror,webrender(etc.)
それに直列に依存するかどうかよりcargoもrustcのフロントエンドもまだ並列化対応が部分的でコンパイル単位の粒度が大きいのが並列ビルドの妨げになるでしょ。
>>526
CIはたしかにキャッシュが効けばいいけど、アナライザの話なら初回しかやらないことはないよ。
アナライザの場合は解析結果が無効になるたびに起きる。
intellij rustはプロジェクト開くたびにやってるし。
JDTみたいにon the fly analyzeするとソースコード変更するたびに解析するから依存グラフは使い回せても他は都度、解析する必要がある。
昔より増えたapiとimplを分離したクレートは
自分のプロジェクト->api->impl->implが依存するcrate(s)->...
と直列に依存してる。log,slog,serde,thiserror,webrender(etc.)
それに直列に依存するかどうかよりcargoもrustcのフロントエンドもまだ並列化対応が部分的でコンパイル単位の粒度が大きいのが並列ビルドの妨げになるでしょ。
>>526
CIはたしかにキャッシュが効けばいいけど、アナライザの話なら初回しかやらないことはないよ。
アナライザの場合は解析結果が無効になるたびに起きる。
intellij rustはプロジェクト開くたびにやってるし。
JDTみたいにon the fly analyzeするとソースコード変更するたびに解析するから依存グラフは使い回せても他は都度、解析する必要がある。
528デフォルトの名無しさん
2020/12/30(水) 00:32:35.13ID:5c2z0B/k >>527
言葉足らずですまん
(解析結果をメモリ上にしか持たない設計だから起動時に解析を全部やり直す)rust-analyzerの起動時間が気になるくらい(がコンパイル時間に関して気になる点)
と言いたかった
言葉足らずですまん
(解析結果をメモリ上にしか持たない設計だから起動時に解析を全部やり直す)rust-analyzerの起動時間が気になるくらい(がコンパイル時間に関して気になる点)
と言いたかった
529デフォルトの名無しさん
2021/01/01(金) 09:10:16.97ID:WB+Ueidc #![feature(min_const_generics)]だけじゃなく#![feature(const_generics)]も2021に入って欲しいな
530デフォルトの名無しさん
2021/01/01(金) 12:06:39.72ID:y/yrEKhd 全く話は変わるけど、メモリ不足で Box::new に失敗したら、panicが起きて
プログラムがそこで停止するだけ?
プログラムがそこで停止するだけ?
531デフォルトの名無しさん
2021/01/01(金) 12:08:13.77ID:y/yrEKhd >>530
仮にそうだとすると、Cのmalloc()やC++のnew TYPEに比べるとエラー処理は
省ける反面、エラー処理を書きたくてもかけないね。
まあ、滅多に起きないので書いてもしょうがないけれども。
仮にそうだとすると、Cのmalloc()やC++のnew TYPEに比べるとエラー処理は
省ける反面、エラー処理を書きたくてもかけないね。
まあ、滅多に起きないので書いてもしょうがないけれども。
532デフォルトの名無しさん
2021/01/01(金) 12:36:28.83ID:y/yrEKhd *C++
TYPE *ptr = new TYPE; //メモリ不足の場合ptrにはNULLが返される。
*Java
TYPE obj = new TYPE; //メモリ不足の場合例外がthrowされる。
*Rust
Box<T> obj = Box<T>::new(T()); //メモリ不足の場合panicが生じアプリがダウンする。
Rustは、高度な安全性を要する分野や組み込みでは困るかも。
それに記述が長い。
TYPE *ptr = new TYPE; //メモリ不足の場合ptrにはNULLが返される。
*Java
TYPE obj = new TYPE; //メモリ不足の場合例外がthrowされる。
*Rust
Box<T> obj = Box<T>::new(T()); //メモリ不足の場合panicが生じアプリがダウンする。
Rustは、高度な安全性を要する分野や組み込みでは困るかも。
それに記述が長い。
533デフォルトの名無しさん
2021/01/01(金) 12:40:33.89ID:mLxH8qq6 C++のnewはメモリ不足のとき通常は例外が送出されるぞ
メモリ不足でnullptrを返すにはnew(nothrow)にしないといけない
メモリ不足でnullptrを返すにはnew(nothrow)にしないといけない
534デフォルトの名無しさん
2021/01/01(金) 12:54:35.66ID:y/yrEKhd >>533
昔、
TYPE *ptr;
if ( (ptr = new TYPE) == NULL ) {
printf( "Memory allocation erro has occured.\n" );
}
みたいに書いていたことがあるけど、これは昔のC++でも間違っていたのだろうか?
昔、
TYPE *ptr;
if ( (ptr = new TYPE) == NULL ) {
printf( "Memory allocation erro has occured.\n" );
}
みたいに書いていたことがあるけど、これは昔のC++でも間違っていたのだろうか?
535デフォルトの名無しさん
2021/01/01(金) 12:57:46.63ID:y/yrEKhd Javaは、例外をthrowする関数を呼び出した場合、必ずtryブロックで囲むか、
または、呼び出しもとの関数の宣言の最後にthrow/throws属性をつけるかしないと
いけないんだけど、なぜかnew演算子の場合だけはこの規則の例外で、
tryブロックで囲むこともthrow/throws属性を付ける必要も無いらしい。
ただし、tryブロックで囲んでcatch文でOutOfMemoryErrorという例外を
捉えることは出来るらしい。
意外と良く考えられていて、便利そう。
または、呼び出しもとの関数の宣言の最後にthrow/throws属性をつけるかしないと
いけないんだけど、なぜかnew演算子の場合だけはこの規則の例外で、
tryブロックで囲むこともthrow/throws属性を付ける必要も無いらしい。
ただし、tryブロックで囲んでcatch文でOutOfMemoryErrorという例外を
捉えることは出来るらしい。
意外と良く考えられていて、便利そう。
536デフォルトの名無しさん
2021/01/01(金) 17:48:44.20ID:tSM4l1tY 検査例外等も知らない人が言語仕様にケチつけるなよ
537デフォルトの名無しさん
2021/01/01(金) 18:19:22.53ID:y/yrEKhd 知識が無くてもそれが使いにくいことが分かる人もいれば、
知識があってもそれが使いにくいことが分からない人もいる。
その差はイマジネーションや経験や頭の良さの差。
知識があってもそれが使いにくいことが分からない人もいる。
その差はイマジネーションや経験や頭の良さの差。
538デフォルトの名無しさん
2021/01/01(金) 19:06:09.23ID:tSM4l1tY 知識も経験もイマジネーションも頭の良さもない
お前さんどうすんの?
お前さんどうすんの?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- パワフル女性世界3位に高市首相 米誌フォーブス選出 [蚤の市★]
- テレ朝本社から社外スタッフの男性が転落し死亡 テレビ朝日がコメント [ひかり★]
- アイヌ民族の「戸籍簿」がヤフオクで落札 団体「人権無視」と憤り [蚤の市★]
- 【米FRB】0.25%利下げ決定 3会合連続、雇用下支え [蚤の市★]
- 「身を切る改革」どこへ? 維新「身内」への公金支出、地方でも続々 [蚤の市★]
- 訪米認証「ESTA」、SNS利用情報の提出義務化へ 日本人観光客も対象に [蚤の市★]
- スクリプトまじでやめてください
- 【画像】東京都民「助けて!満員電車もう無理いいぃぃいいぃぃぃいいいいいぃ😭」!!!! [732289945]
- 【誰食】おせち料理で確実にゴミ箱行きになる食材1位、「黒豆」 [748563222]
- 「おとうとのびょうきをなおして」7歳の兄がサンタに託した切実な願い
- 一般人「起きなきゃ…」 俺ら「寝ようかなzzz」
- AIに言われたからサブスマホ売ったよ
