【超高速】C/C++に代わる低級言語を開発したい 8 (364レス)
【超高速】C/C++に代わる低級言語を開発したい 8 http://mevius.5ch.net/test/read.cgi/tech/1345730580/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
1: デフォルトの名無しさん [] 2012/08/23(木) 23:03:00.69 70年代、Cは生まれ、それから30余年、現代においてもなお、低レベルなシステム開発に広く使われている。 しかし、2010年の今、もしもCが発明されていなかったとして、低レベルなシステム開発のためのプログラミング言語を 新たに作るとしたら、Cとは違う言語になるだろう。少なくとも、全く同じにはならないはずだ。 そこで、このスレッドでは、 低レベルなシステム開発のためのプログラミング言語 を一から考えたい。 既存の言語を使って何かをすることが目的ではなく、新たなプログラミング言語を考えることが目的であるから、 「既存のXX言語を使えばいい。」という類の発言は無意味である。 「既存のYY言語のZZ機能は、WWと言う点で有用だから採用したい。」という発言は歓迎だ。 現代の一流のプログラミング言語研究者が、最先端の研究成果を盛り込んで、 一から低レベルなシステム開発のためのプログラミング言語を作るとしたら、どのような言語になるだろうか、 という観点で考えたい。 ◆前スレ 【超高速】C/C++に代わる低級言語を開発したい 7 http://toro.2ch.net/test/read.cgi/tech/1275235018/l50 http://mevius.5ch.net/test/read.cgi/tech/1345730580/1
335: デフォルトの名無しさん [sage] 2025/03/25(火) 19:08:05.91 ID:d+t8RnIb byteやword単位のリトルエンディアンじゃなくて 1bit単位のリトルエンディアンだと思えば自然 http://mevius.5ch.net/test/read.cgi/tech/1345730580/335
336: デフォルトの名無しさん [sage] 2025/03/27(木) 07:21:00.91 ID:vU3T1Sq/ Rustのオペレーターオーバーロードについて質問です とりあえずtraitを使って let a: X = X::new(); let b: X = X::new(); let c = a + b; は出来たのですが let a = &X::new(); let b = &X::new(); let c = a + b; だと定義が無いと言われるのでtraitに&のバージョンを追加したら出来ました ところが let a = &mut X::new(); let b = &mut X::new(); let c = a + b; だとまた出来ないのでtraitに&mutバージョンを追加したら出来ました ところが let a = &X::new(); let b = &mut X::new(); let c = a + b; や let a = X::new(); let b = &mut X::new(); let c = a + b; や let a = &X::new(); let b = X::new(); let c = a + b; が全部出来ません こういうのはすべての組み合わせをtraitで作っておく必要があるのでしょうか? それとも一つの表現で全部定義してくれる仕組みは? http://mevius.5ch.net/test/read.cgi/tech/1345730580/336
337: デフォルトの名無しさん [sage] 2025/03/27(木) 09:14:29.90 ID:vU3T1Sq/ これかな https://stackoverflow.com/questions/57911001/how-to-combine-all-operator-overloading-combinations-into-a-single-trait-in-rust http://mevius.5ch.net/test/read.cgi/tech/1345730580/337
338: デフォルトの名無しさん [sage] 2025/03/27(木) 09:22:10.62 ID:UV4Rce1I >>336 >>337 ここに回答があるよ https://stackoverflow.com/questions/38811387/how-to-implement-idiomatic-operator-overloading-for-values-and-references-in-rus http://mevius.5ch.net/test/read.cgi/tech/1345730580/338
339: デフォルトの名無しさん [sage] 2025/03/27(木) 09:56:58.93 ID:vU3T1Sq/ ああこれinternalなのね macro_rules! add_impl とか macro_rules! forward_ref_binop (unop とか op_assign とかもあるけど) http://mevius.5ch.net/test/read.cgi/tech/1345730580/339
340: デフォルトの名無しさん [sage] 2025/03/27(木) 09:59:54.17 ID:vU3T1Sq/ これでいいのかな https://crates.io/crates/forward_ref_generic http://mevius.5ch.net/test/read.cgi/tech/1345730580/340
341: デフォルトの名無しさん [sage] 2025/03/27(木) 10:02:25.16 ID:vU3T1Sq/ ああこっちか https://crates.io/crates/forward_ref >>328 それは >>327 の中にリンクがあったので既視です?? http://mevius.5ch.net/test/read.cgi/tech/1345730580/341
342: デフォルトの名無しさん [sage] 2025/03/27(木) 11:15:21.43 ID:vU3T1Sq/ よさげだったけど&mutのが出来なかったorz http://mevius.5ch.net/test/read.cgi/tech/1345730580/342
343: デフォルトの名無しさん [sage] 2025/03/27(木) 11:35:25.37 ID:vU3T1Sq/ 結局自前でmacroコピペして&mutの定義も追加したらいけたわthx http://mevius.5ch.net/test/read.cgi/tech/1345730580/343
344: デフォルトの名無しさん [] 2025/03/27(木) 11:46:57.39 ID:HDQeQZ5r Copyトレイトは無闇に付けたくないな http://mevius.5ch.net/test/read.cgi/tech/1345730580/344
345: デフォルトの名無しさん [sage] 2025/03/27(木) 11:59:13.89 ID:JG6/gkrB Trait爆発ですね判ります http://mevius.5ch.net/test/read.cgi/tech/1345730580/345
346: デフォルトの名無しさん [sage] 2025/03/27(木) 12:14:45.69 ID:UV4Rce1I >>342 Addでは不変参照しか使わないから& mutは不要 & mutが必要となるのはAddAssignだがこれは& mut selfになる http://mevius.5ch.net/test/read.cgi/tech/1345730580/346
347: デフォルトの名無しさん [sage] 2025/03/28(金) 09:26:28.67 ID:VPiwRdmL Rust使ってても暗黙のCopyとかに無関心だと【超高速】名乗れなくない? http://mevius.5ch.net/test/read.cgi/tech/1345730580/347
348: デフォルトの名無しさん [sage] 2025/04/05(土) 10:41:53.71 ID:wy4OM/NR 包丁も食材も上手く使えないと料理は不味い http://mevius.5ch.net/test/read.cgi/tech/1345730580/348
349: デフォルトの名無しさん [sage] 2025/04/06(日) 07:52:19.40 ID:IvdHyMZx 料理が上手なヤツはRustは使わない http://mevius.5ch.net/test/read.cgi/tech/1345730580/349
350: デフォルトの名無しさん [sage] 2025/04/06(日) 23:21:04.80 ID:p+WNSwb1 >>347 暗黙のコピーが発生しまくる諸言語とは異なり RustではCopyトレイト実装型のみ暗黙のコピーが行われるので最もRustが好ましい 具体的にCopyトレイト実装型とは整数値やポインタおよび不変参照であり それらを用いた複合型は明示的にCopyトレイト実装することもできる ちなみに整数値などがなぜ暗黙のコピーが起きても構わないかというと CPUにとってそれらをポインタ経由で間接的に扱う方が遅くなるからであり値をコピーして用いたほうが速いため http://mevius.5ch.net/test/read.cgi/tech/1345730580/350
351: デフォルトの名無しさん [sage] 2025/04/07(月) 10:58:45.39 ID:fwcAlCQF はあ… http://mevius.5ch.net/test/read.cgi/tech/1345730580/351
352: デフォルトの名無しさん [sage] 2025/04/07(月) 12:23:44.19 ID:yN1PvO54 >>349 マにだって料理が得意な奴はいるだろ http://mevius.5ch.net/test/read.cgi/tech/1345730580/352
353: デフォルトの名無しさん [sage] 2025/04/07(月) 14:31:02.06 ID:w0rhHNCz >>350 お前レベル低過ぎ 黙ってろ http://mevius.5ch.net/test/read.cgi/tech/1345730580/353
354: デフォルトの名無しさん [sage] 2025/04/07(月) 14:50:26.71 ID:k98JYePi >>350で合ってるでしょ コストの係るものは明示的に.clone()しないとコピーできないし コストの係らないものはCopyトレイトのおかげで.clone()しなくてもコピーされるよ http://mevius.5ch.net/test/read.cgi/tech/1345730580/354
355: デフォルトの名無しさん [sage] 2025/05/02(金) 09:39:27.39 ID:k5bGwZZ0 Rustの最大の教訓は、どんな言語でも有名になればバカ(必ずしも頭が悪いわけではなく、本来その言語が想定しない用途に使おうとする奴も含む)が使うってことだろう Rustの仕様はそれほど効率が重要でない分野でテキトーに使おうとすると無駄なコピーが増えたりしてかえって非効率になりがちな面がある http://mevius.5ch.net/test/read.cgi/tech/1345730580/355
356: デフォルトの名無しさん [sage] 2025/05/02(金) 18:23:29.41 ID:kIVCyVUc >>355 Rustは明示的にclone()を呼んだりCopy実装しないとコピーされないから大丈夫だよ 暗黙にコピーされないから無駄なことをしていればコード見るとすぐバレちゃう まともなコードは必要な極一部を除いてほとんど参照で渡されるね ちなみに数値や不変参照(ポインタ)はCopy実装されてるため暗黙にコピーされるけどそれが一番速いから問題なし http://mevius.5ch.net/test/read.cgi/tech/1345730580/356
357: デフォルトの名無しさん [sage] 2025/05/03(土) 12:05:28.26 ID:ekVKJoF2 最適化されることを主張するなら証拠を示すべきなのは当然だが、 コピーの最適化を前提にするのなら例えば安易にCopy実装したりcloneしたりすんな、 みたいな意識高い言説は多くの場合無意味になっちゃうわけだけど、Rustおじはそれでいいのだろうか http://mevius.5ch.net/test/read.cgi/tech/1345730580/357
358: デフォルトの名無しさん [sage] 2025/05/03(土) 13:36:23.13 ID:BbjMJMxS >>357 頭悪いから違いを理解できないのか? まずCPUのMOVE命令は全てコピーだ だから数値や参照(アドレス)がCopy実装されていても何のペナルティも存在しない むしろ数値や参照を参照で扱う方が間接となり遅い 次にCPUのMOVE命令は全てコピーだがコピー元が使われてなければ純粋なムーブと見なすことができる そのため最適化が可能で例えば2回のムーブは1回に減らすことができる これはスタック上の変数を扱う場合も同様でレジスタへMOVEした後にレジスタ間の演算で終わるならスタック上の領域は不要で最適化できる http://mevius.5ch.net/test/read.cgi/tech/1345730580/358
359: デフォルトの名無しさん [sage] 2025/05/03(土) 13:38:21.80 ID:BbjMJMxS RustやC++のムーブも同じで一次的にはコピーをして元を使わないため最適化できる場合が多い 一方でプログラマがコピーやクローンを明示的にした場合は元が生きていて全く異なる そもそも元も後で使いたいからコピーしているわけだ だからムーブとは異なり最適化でコピーが消えることはない もちろん後で使いたい場合はコピーして渡すのではなく参照を渡すのが正解だ http://mevius.5ch.net/test/read.cgi/tech/1345730580/359
360: デフォルトの名無しさん [sage] 2025/05/03(土) 13:39:26.21 ID:BbjMJMxS したがってプログラマはコピーを可能な限り避けるべきである 暗黙のコピーが行われるプログラミング言語では意識せずコピーしてしまう プログラムを見ただけですぐにコピーしてあることがわかる方が望ましい RustではCopyトレイト実装した型のみ暗黙のコピーが起きる 前述のように数値などはその方が有利なので最初からCopy実装されている ヒープを用いない型ならばプログラマは自由にCopy実装できるがコード上でそれが明示され読む側は気付ける サイズが大きく参照で扱った方がよい型をCopy実装していればおかしいことがわかる 一方でヒープを用いていればCopy実装はできないがClone実装はできる これはコード上でfoo.clone()とコピーすることを明示的に記述する必要がある したがって参照を使えばよいのに無駄なコピーをしていればすぐにわかる http://mevius.5ch.net/test/read.cgi/tech/1345730580/360
361: デフォルトの名無しさん [sage] 2025/05/04(日) 11:58:45.22 ID:RkNPiBO2 区別できないバカなのか? ムーブの時などを含めて実態がコピーになるといってもコピー元は二度と使われないのだから最適化できる 一方でclone()などはコピー元をその後も使うためにコピーしている コピー元を二度と使わないならclone()の必要がない そしてコピー元をその後も使うから最適化の前提さえ成立しない http://mevius.5ch.net/test/read.cgi/tech/1345730580/361
362: デフォルトの名無しさん [sage] 2025/05/05(月) 10:09:59.16 ID:20YqVkB+ RustはC++より描き易いけどC++からの置き換えには不適 RustはCより面倒だけどCからの置き換えには最適 http://mevius.5ch.net/test/read.cgi/tech/1345730580/362
363: デフォルトの名無しさん [sage] 2025/05/06(火) 06:06:18.29 ID:JTtajrxW 低レベル言語の開発だよね? 皆さんの会話が高級すぎて戸惑いを隠せない。 OS記述も十分に低レベルだけど、ハードウエア操作はもっと低レベルじゃないかな? http://mevius.5ch.net/test/read.cgi/tech/1345730580/363
364: デフォルトの名無しさん [sage] 2025/05/06(火) 10:06:47.77 ID:K1Pjz07i Rustで低レベルするとunsafeだらけになる (悪いとは言ってない面倒臭いとは思う) http://mevius.5ch.net/test/read.cgi/tech/1345730580/364
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
1.406s*