- Kotlin 6
878 :デフォルトの名無しさん[sage]:2020/03/24(火) 00:18:55.74 ID:T0vrM+QL - >>873
NULLは、「無い」という真空状態のようなものに対応している。 (古典物理学的にはだが原則的に)真空は唯一のものであるから、 親ウィンドウがないことと、Menuがないことで、別の真空が存在する わけではなく、唯一無二の真空で十分だとも考えられる。 それとマジックナンバーでは全く異なる、 マジックナンバーが問題なのは、後で修正しようとした時に簡単に修正できないことや、 その意味での定数を使っている場所をgrep検索で発見できないことだ。 親ウィンドウやMenuが無い事をgrep検索する必要はないし、「無い」状態を 簡単に修正する必要もない。WindowNullやMenuNullと区別した所で何か便利になる 可能性は低い。 マジックナンバーとは、 int TOMATO_PRICE = xxx; int NUMBER_OF_TOMATO = xxx; ・・・ int TOTAL_PRICE = TOMATO_PRICE * NUMBER_OF_TOMATO + CAROT_PRICE * NUMBER_OF_CAROT; みたいにしてから、 func(TOTAL_PRICE); とするのと、いきなり合計価格を計算してしまった結果だけを使って func(4032); などとするのでは大きく分かり易さも訂正し易さも変わってくると言うことだ。 この場合、TOMATOの一個当りの値段を変えたり、個数を変えたりすることが、4032という数値では 簡単に修正できなくなってしまうのだ。 そのような問題点は、NULLにはない。
|
- Kotlin 6
881 :デフォルトの名無しさん[sage]:2020/03/24(火) 01:42:20.76 ID:T0vrM+QL - >>880
偉いとされる人が言った、または、有名な団体が作ったようなものを無条件で信じるあなたのような権威主義者が多いだけ。 有名な所が出してきたものは初期の衣の凄くもてはやされる。 使ったこともちゃんと学んだことも無いのに多くの人が褒めちぎる。 それはなぜかというと、そうすることで自分が新しいものに追いついていると 人に錯覚させることが出来ると思い込んでいるからだ。 実際には何も知らないくせに適当に新しいものを褒めているだけ。
|
- Rust part8
252 :デフォルトの名無しさん[sage]:2020/03/24(火) 02:50:53.94 ID:T0vrM+QL - 体制側と違う意見は大事。
自分の頭で考えない人は、効能書きや権威やネットで書かれたことを鵜呑みにしてしまう。
|
- Rust part8
255 :デフォルトの名無しさん[sage]:2020/03/24(火) 12:20:20.31 ID:T0vrM+QL - >>250
こんな出てきたばかりの言語に慣れてる人なんているかい。
|
- Rust part8
257 :デフォルトの名無しさん[sage]:2020/03/24(火) 14:22:30.48 ID:T0vrM+QL - Box<T>のソースを見ていたら、Box::new が次のような1行だけのソースで、
box キーワードを調べてみたら、組み込みの Box::new の実装とだけしか 情報がない。つまり、ソースがあるようで実質的には無い: impl<T> Box<T> { pub fn new(x: T) -> Box<T> { box x } } 同様に Vec<T> のソースを見ていたら、RawVec なるものが出ていて、 RawVecのソースもあったがそこで、core::ptr なるものが使ってあり、 そのソースはないようだ。 Cにとってかわるシステム言語と言いながら、本質的には組み込み関数ばかりで ソースを追っていくことができない。 Cは最初から理解できて、このような闇が存在しないので、高級アセンブラであり、 システム言語であった。 Rustにはその代わりは務まらないのではないか。
|
- Rust part8
261 :デフォルトの名無しさん[sage]:2020/03/24(火) 14:44:12.30 ID:T0vrM+QL - Rustは概念が整理されてない。
Cは、ポインタという概念さえ理解すれば(そしてそれは、プログラミングに適性が有る人にはそんなに難しいわけではない)、それだけを頼りにあらゆるものが構築できた。 ところが、Rustはいくら学んでも終わりが無いくらい基礎の部分が難しい。 Box<T>が何をやっているかは、自然言語で説明されるばかりで肝心の コードも擬似コードもなかなか見つからない。
|
- Rust part8
262 :デフォルトの名無しさん[sage]:2020/03/24(火) 15:04:27.63 ID:T0vrM+QL - Box<T>のデストラクタである所の Drop trait の drop 関数を調べてみると、
次のようになっており、compilerの埋め込み処理というコメントになっている。 恐らく、Box<T>が削除される際にコンパイラが何らかの処理を入れているが、 ソース中には書いてない。 こんな状態で Cの後釜を名乗ってほしくない。 unsafe impl<#[may_dangle] T: ?Sized> Drop for Box<T> { fn drop(&mut self) { // FIXME: Do nothing, drop is currently performed by compiler. } }
|
- Rust part8
264 :デフォルトの名無しさん[sage]:2020/03/24(火) 16:11:12.01 ID:T0vrM+QL - Option<Box<T>> で、Some(Box::new<xxx>)
とした場合に、どういう状況の時に このメモリが解放されるのか、 その仕組みも分かりにくい。
|
- Rust part8
265 :デフォルトの名無しさん[sage]:2020/03/24(火) 16:46:57.83 ID:T0vrM+QL - >>264
誤: Some(Box::new<xxx>) 正: Some(Box<T>::new(値))
|
- Rust part8
267 :デフォルトの名無しさん[sage]:2020/03/24(火) 17:20:04.56 ID:T0vrM+QL - Rustでの代入記号は、i32/f32/bool/str などのprimitive型以外は原則的に copy動作
ではなく、move 動作のようなもので、所有権の移動が発生する。 例外は、Copy traitsが実装されている型の場合で、その場合も copy動作になる。 Option<XXX>は、Copy traitsが実装されているらしく、Optionが他動詞で代入記号 を使うと、copy動作になるらしい。 ただし、これは文書で明確には述べられてないのでよくわからない。 根拠は、Optionのソースは以下のようになっていて、#[derive(Copy, ...)]の部分が、 Copy traitsを自動実装する、という意味になるらしいからだ: #[derive(Copy, PartialEq, PartialOrd, Eq, Ord, Debug, Hash)] #[rustc_diagnostic_item = "option_type"] #[stable(feature = "rust1", since = "1.0.0")] pub enum Option<T> { /// No value #[stable(feature = "rust1", since = "1.0.0")] None, /// Some value `T` #[stable(feature = "rust1", since = "1.0.0")] Some(#[stable(feature = "rust1", since = "1.0.0")] T), }
|
- Rust part8
268 :デフォルトの名無しさん[sage]:2020/03/24(火) 17:21:21.85 ID:T0vrM+QL - >>267
誤:Optionが他動詞で 正:Option型同士で
|
- C++相談室 part149
998 :デフォルトの名無しさん[sage]:2020/03/24(火) 22:49:16.96 ID:T0vrM+QL - >>993
数学の記号法と言うのは本によって違ってるから。 特に物理学は必要に迫られて新しい記法を発明してしまう。
|