公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust
公式ドキュメント
https://www.rust-lang.org/learn
Web上の実行環境
https://play.rust-lang.org
※Rustを学びたい人はまず最初に公式のThe Bookを読むこと
https://doc.rust-lang.org/book/
※Rustを学ぶ際に犯しがちな12の過ち
https://dystroy.org/blog/how-not-to-learn-rust
※Rustのasyncについて知りたければ「async-book」は必読
https://rust-lang.github.io/async-book/
※次スレは原則>>980が立てること
前スレ
Rust part26
https://mevius.5ch.net/test/read.cgi/tech/1726838318/
ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.5ch.net/test/read.cgi/tech/1514107621/
Rust part27
レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん
2024/12/02(月) 22:32:50.31ID:D+1pIyvG2024/12/02(月) 22:43:23.38ID:26QdDvTv
乙巳
2024/12/03(火) 07:46:32.00ID:Kek2ztWF
Rust The Book (日本語版)
https://doc.rust-jp.rs/book-ja/
Rust edition guide (日本語版)
https://doc.rust-jp.rs/edition-guide/
Rust by example (日本語版)
https://doc.rust-jp.rs/rust-by-example-ja/
Rust cookbook (日本語版)
https://uma0317.github.io/rust-cookbook-ja/
Rust API guideline (日本語版)
https://sinkuu.github.io/api-guidelines/
Rust nomicon book (日本語版)
https://doc.rust-jp.rs/rust-nomicon-ja/
Rust async book (日本語版)
https://async-book-ja.netlify.app/
Rust WASM book (日本語版)
https://moshg.github.io/rustwasm-book-ja/
Rust embeded book (日本語版)
https://tomoyuki-nakabayashi.github.io/book/
Rust enbeded discovery (日本語版)
https://tomoyuki-nakabayashi.github.io/discovery/
Rust Design Patterns (日本語版)
https://qiita.com/Yappii_111/items/4ccc3a8461cdd4035651
https://qiita.com/Yappii_111/items/654717e6a6a980722189
Rust API guideline (日本語版)
https://sinkuu.github.io/api-guidelines/
https://doc.rust-jp.rs/book-ja/
Rust edition guide (日本語版)
https://doc.rust-jp.rs/edition-guide/
Rust by example (日本語版)
https://doc.rust-jp.rs/rust-by-example-ja/
Rust cookbook (日本語版)
https://uma0317.github.io/rust-cookbook-ja/
Rust API guideline (日本語版)
https://sinkuu.github.io/api-guidelines/
Rust nomicon book (日本語版)
https://doc.rust-jp.rs/rust-nomicon-ja/
Rust async book (日本語版)
https://async-book-ja.netlify.app/
Rust WASM book (日本語版)
https://moshg.github.io/rustwasm-book-ja/
Rust embeded book (日本語版)
https://tomoyuki-nakabayashi.github.io/book/
Rust enbeded discovery (日本語版)
https://tomoyuki-nakabayashi.github.io/discovery/
Rust Design Patterns (日本語版)
https://qiita.com/Yappii_111/items/4ccc3a8461cdd4035651
https://qiita.com/Yappii_111/items/654717e6a6a980722189
Rust API guideline (日本語版)
https://sinkuu.github.io/api-guidelines/
2024/12/03(火) 07:46:58.75ID:Kek2ztWF
Rust Reference Book
https://doc.rust-lang.org/reference/
Rust Standard Library
https://doc.rust-lang.org/std/
Rust rustc Book
https://doc.rust-lang.org/rustc/
Rust rustdoc Book
https://doc.rust-lang.org/rustdoc/
Rust rustup Book
https://rust-lang.github.io/rustup/
Rust Cargo Book
https://doc.rust-lang.org/cargo/
Rust unstable Book
https://doc.rust-lang.org/nightly/unstable-book/
Rust macro Book
https://danielkeep.github.io/tlborm/book/
Rust CLI (Command Line Interface) apps Book
https://rust-cli.github.io/book/
Rust Future Book
https://cfsamson.github.io/books-futures-explained/
Rust async-std Book
https://book.async.rs/
Rust tokio Book
https://tokio.rs/tokio/tutorial
Rust serde Book
https://serde.rs/
Rust Performance Book
https://nnethercote.github.io/perf-book/
https://doc.rust-lang.org/reference/
Rust Standard Library
https://doc.rust-lang.org/std/
Rust rustc Book
https://doc.rust-lang.org/rustc/
Rust rustdoc Book
https://doc.rust-lang.org/rustdoc/
Rust rustup Book
https://rust-lang.github.io/rustup/
Rust Cargo Book
https://doc.rust-lang.org/cargo/
Rust unstable Book
https://doc.rust-lang.org/nightly/unstable-book/
Rust macro Book
https://danielkeep.github.io/tlborm/book/
Rust CLI (Command Line Interface) apps Book
https://rust-cli.github.io/book/
Rust Future Book
https://cfsamson.github.io/books-futures-explained/
Rust async-std Book
https://book.async.rs/
Rust tokio Book
https://tokio.rs/tokio/tutorial
Rust serde Book
https://serde.rs/
Rust Performance Book
https://nnethercote.github.io/perf-book/
2024/12/03(火) 10:17:10.99ID:CyH0XY+t
6デフォルトの名無しさん
2024/12/03(火) 12:48:40.49ID:DZc+/1dr スタバのマルチスレッドって効率悪いよね
2024/12/03(火) 12:56:13.69ID:EOsQeLM6
はいはい、説教おじさんはほっといて気楽に質問してね~。勘違いでもなんでもok。サンプル欲しければコード書きますよ~。
8デフォルトの名無しさん
2024/12/03(火) 15:07:30.04ID:5xjpr7TI 日頃GC付き言語で開発しているからメモリリークがどういったプログラムで起こるのかあんまり実感できない
C言語で書かれたプログラムでメモリリークしやすいプログラムってどんなもんなの?
C言語で書かれたプログラムでメモリリークしやすいプログラムってどんなもんなの?
2024/12/03(火) 15:08:58.63ID:2bVb51Ek
>>8
最近のPCはメモリたくさん積んでるから、リークしても気にしなくていいよ
最近のPCはメモリたくさん積んでるから、リークしても気にしなくていいよ
2024/12/03(火) 16:10:27.68ID:ZsxKPak4
メモリプレッシャーがかかっても不必要にメモリをつかみ続けるFirefoxのようなお行儀の悪いプログラムか増えてるからメモリが潤沢にあってもリークは気にしたほうがいい
使い捨てプログラムや低品質でもいいプログラムなら気にしなくてもいいけどそういうのはGC言語でやる
使い捨てプログラムや低品質でもいいプログラムなら気にしなくてもいいけどそういうのはGC言語でやる
2024/12/03(火) 16:16:53.07ID:ey2XQ99f
2024/12/03(火) 16:51:09.72ID:0HkaMF/9
GC 付きでもメモリリークのようなことが起こることはある。
多くの場合に表面化しないだけ。
プロセスが終わるときにはどうせまるごと回収されるからガッと処理してすぐ終わるようなプログラムでは特に表面化しにくい。
見えにくいからこそ意識的に調査すべきで、 >>11 の意見に同意する。
逆に問題が表面化しやすいのは長期的に起動しっぱなしなもので、わかりやすい例ではウェブサーバ (またはその後ろでサービスを提供するプログラム) などが挙げられる。
ウェブサーバの H2O はそれを防止するのと高速化のためにセッションごとにメモリの塊を確保してその塊の頭から順番に使っていき、セッションが終わると塊をまるごと解放するというメモリ戦略を取ってる。
多くの場合に表面化しないだけ。
プロセスが終わるときにはどうせまるごと回収されるからガッと処理してすぐ終わるようなプログラムでは特に表面化しにくい。
見えにくいからこそ意識的に調査すべきで、 >>11 の意見に同意する。
逆に問題が表面化しやすいのは長期的に起動しっぱなしなもので、わかりやすい例ではウェブサーバ (またはその後ろでサービスを提供するプログラム) などが挙げられる。
ウェブサーバの H2O はそれを防止するのと高速化のためにセッションごとにメモリの塊を確保してその塊の頭から順番に使っていき、セッションが終わると塊をまるごと解放するというメモリ戦略を取ってる。
2024/12/03(火) 17:09:00.60ID:EOsQeLM6
C言語でリークという話なのでこんな感じ。
// メモリリーク例1: mallocした後にfreeし忘れる関数
void leak_in_function() {
char* ptr = (char*)malloc(100);
strcpy(ptr, "Hello");
// freeがないのでメモリリーク
}
// メモリリーク例2: 条件分岐でfreeを飛ばしてしまう
void conditional_leak(int value) {
int* numbers = (int*)malloc(sizeof(int) * 100);
if (value < 0) {
return; // ここでreturnするとfreeされない
}
// 処理
free(numbers);
}
// メモリリーク例3: ポインタの上書きによるリーク
void pointer_overwrite() {
char* ptr1 = (char*)malloc(50);
ptr1 = (char*)malloc(100); // 最初のメモリブロックへの参照が失われる
free(ptr1); // 2番目のメモリブロックだけがfreeされる
}
// メモリリーク例1: mallocした後にfreeし忘れる関数
void leak_in_function() {
char* ptr = (char*)malloc(100);
strcpy(ptr, "Hello");
// freeがないのでメモリリーク
}
// メモリリーク例2: 条件分岐でfreeを飛ばしてしまう
void conditional_leak(int value) {
int* numbers = (int*)malloc(sizeof(int) * 100);
if (value < 0) {
return; // ここでreturnするとfreeされない
}
// 処理
free(numbers);
}
// メモリリーク例3: ポインタの上書きによるリーク
void pointer_overwrite() {
char* ptr1 = (char*)malloc(50);
ptr1 = (char*)malloc(100); // 最初のメモリブロックへの参照が失われる
free(ptr1); // 2番目のメモリブロックだけがfreeされる
}
2024/12/03(火) 17:15:10.75ID:EOsQeLM6
// メモリリーク例4: 動的配列の不完全な解放
typedef struct {
char* name;
int age;
} Person;
void struct_array_leak() {
Person* people = (Person*)malloc(3 * sizeof(Person));
for (int i = 0; i < 3; i++) {
people[i].name = (char*)malloc(50);
strcpy(people[i].name, "John Doe");
}
free(people); // name用のメモリがリークする
}
こういうパターンが多いかな。
C++だと生ポインタ使わなくなるので大分解消されるけど。
typedef struct {
char* name;
int age;
} Person;
void struct_array_leak() {
Person* people = (Person*)malloc(3 * sizeof(Person));
for (int i = 0; i < 3; i++) {
people[i].name = (char*)malloc(50);
strcpy(people[i].name, "John Doe");
}
free(people); // name用のメモリがリークする
}
こういうパターンが多いかな。
C++だと生ポインタ使わなくなるので大分解消されるけど。
2024/12/03(火) 17:23:27.47ID:NKv2UDMA
バグが0になるまで投資を続けるのは誰もやらないのに
メモリリークを0にしようって言われたら投資してしまうのが人情というものだ
メモリリークを0にしようって言われたら投資してしまうのが人情というものだ
2024/12/03(火) 17:54:33.42ID:aDn+t6mK
>>8
ここはRustスレなのに
なぜRustについて全く触れずにC言語の質問をするの?
C言語のスレがあるのだからそちらでしなさい
Rustについて触れずに他の言語の話だけをしている人たちも同罪
必ずRustについても言及しなさい
ここはRustスレなのに
なぜRustについて全く触れずにC言語の質問をするの?
C言語のスレがあるのだからそちらでしなさい
Rustについて触れずに他の言語の話だけをしている人たちも同罪
必ずRustについても言及しなさい
2024/12/03(火) 18:02:49.57ID:cJEFyjqp
Rustのメモリ安全性の目的はメモリリークの回避じゃなくてダングリング参照の回避定期
ついでに競合アクセスも防ぐ
ついでに競合アクセスも防ぐ
2024/12/03(火) 18:49:23.67ID:ll5AjBl1
今度は「競合アクセス」と来たか
2024/12/03(火) 19:03:08.79ID:VEyhp9WQ
C言語はfree()しても断片化という問題が発生すると聞いたことがある
断片化してもOSが落ちたりはしないんだろうけど遅くなるとかならないとか・・・
断片化してもOSが落ちたりはしないんだろうけど遅くなるとかならないとか・・・
2024/12/03(火) 20:08:22.57ID:0HkaMF/9
>>19
断片化によって起こるのはメモリ効率の悪さ。
空いてるメモリの総量が充分にあっても必要分だけ連続したメモリがない(メモリ確保に失敗する)ということが起こる。
C では確保したメモリの場所が変わる(アドレスが変わる)ということは起すわけにいかないので断片化はそれなりに深刻な問題になりうる。
GC には copying gc のように不要メモリの回収と同時に再配置するものもある。
断片化によって起こるのはメモリ効率の悪さ。
空いてるメモリの総量が充分にあっても必要分だけ連続したメモリがない(メモリ確保に失敗する)ということが起こる。
C では確保したメモリの場所が変わる(アドレスが変わる)ということは起すわけにいかないので断片化はそれなりに深刻な問題になりうる。
GC には copying gc のように不要メモリの回収と同時に再配置するものもある。
2024/12/03(火) 20:58:33.67ID:NKv2UDMA
64bitのアドレスが枯渇したとして・・・全オブジェクトに印をつけるGCを使うか?
2024/12/03(火) 21:39:20.42ID:6bT0kHB3
Rustは長時間動かすとメモリが断片化するから、サーバープログラミングに向いてない
2024/12/03(火) 21:49:34.08ID:J79bUhTh
https://www.publickey1.jp/blog/22/cloudflarenginxrusthttppingoracdncpu31.html
CDN世界トップシェアのCloudflareは、同社のグローバルなCDNの基盤として長らく利用してきたC製のNGINXに代えて、
Rust製のHTTPプロキシサーバである「Pingora」を開発して利用していることを明らかにしました。
Pingoraはすでに同社のCDNに採用され、毎日1兆回以上のリクエストを処理し、性能向上や数多くの新機能の提供を実現しており、
従来のNGINXと比較してCPUとメモリリソースの消費はいずれも3分の1程度に収まっているとのこと。
CDN世界トップシェアのCloudflareは、同社のグローバルなCDNの基盤として長らく利用してきたC製のNGINXに代えて、
Rust製のHTTPプロキシサーバである「Pingora」を開発して利用していることを明らかにしました。
Pingoraはすでに同社のCDNに採用され、毎日1兆回以上のリクエストを処理し、性能向上や数多くの新機能の提供を実現しており、
従来のNGINXと比較してCPUとメモリリソースの消費はいずれも3分の1程度に収まっているとのこと。
2024/12/03(火) 21:59:19.12ID:EOsQeLM6
今時の標準アロケーターはよほどでかい領域を確保しない限りメモリの断片化は起きないようになってる。それでも問題ならカスタムアロケーター書くよ。
2024/12/03(火) 22:11:45.28ID:Z14ZJxGL
アマゾンのAWSもRust製
Webサーバサイドでリソース節約したいならRust一択
Webサーバサイドでリソース節約したいならRust一択
2024/12/03(火) 22:47:57.47ID:0HkaMF/9
>>10
現代的には使われていないメモリがあるほうが「無駄がある」と考える思想なので、メモリはあればあるだけ使う(キャッシュやプリロードなど投機的な処理で体感的な速度を上げる)設計になってる。
本当に足りなくなるまでは掴んだままのほうが良いと判断してやってる。
現代のニーズに合わせた意図的な設計としてやってるのでリークとは違う。
良いか悪いかは知らんがリークとは違う。
現代的には使われていないメモリがあるほうが「無駄がある」と考える思想なので、メモリはあればあるだけ使う(キャッシュやプリロードなど投機的な処理で体感的な速度を上げる)設計になってる。
本当に足りなくなるまでは掴んだままのほうが良いと判断してやってる。
現代のニーズに合わせた意図的な設計としてやってるのでリークとは違う。
良いか悪いかは知らんがリークとは違う。
2024/12/03(火) 23:07:54.92ID:6bT0kHB3
Rustはいつメモリのコンパクションできるようになるの?
2024/12/03(火) 23:30:37.95ID:NKv2UDMA
いつも渋滞している道路は無駄がない道路か
まあ徒歩より遅いなら燃料いらないからな
まあ徒歩より遅いなら燃料いらないからな
2024/12/03(火) 23:59:32.38ID:WfNTPXjV
>>13
具体的で勉強になったわ
具体的で勉強になったわ
2024/12/04(水) 00:52:46.84ID:xIul3kYY
>>26
メモリ足りなくなったから不要なメモリ掴んでたら解放してくれと
OSからのメッセージが出ても掴み続けてるアプリが結構あるので
メモリが潤沢にあるからといってリークは気にしなくてもいいなんていう心構えでプログラミングしたらダメだぞという話
難しい話じゃないと思うんだけど1回で伝わらないのは悲しい
メモリ足りなくなったから不要なメモリ掴んでたら解放してくれと
OSからのメッセージが出ても掴み続けてるアプリが結構あるので
メモリが潤沢にあるからといってリークは気にしなくてもいいなんていう心構えでプログラミングしたらダメだぞという話
難しい話じゃないと思うんだけど1回で伝わらないのは悲しい
2024/12/04(水) 07:53:11.74ID:5pmDH7A6
サーバでもアプリでもその他でも
プログラム起動中ずっと必要になるデータは
leak()して&'staticにしてしまっても構わない
これはメモリリークではない
一方ですぐ不要となるデータはleak()してはいけない
これはメモリ使用量が増えていってメモリリークになる
この違いをきちんと認識した上でleak()を活用しよう
ずっと必要になるデータを&'staticにできる大きなメリットがある
プログラム起動中ずっと必要になるデータは
leak()して&'staticにしてしまっても構わない
これはメモリリークではない
一方ですぐ不要となるデータはleak()してはいけない
これはメモリ使用量が増えていってメモリリークになる
この違いをきちんと認識した上でleak()を活用しよう
ずっと必要になるデータを&'staticにできる大きなメリットがある
32デフォルトの名無しさん
2024/12/04(水) 11:14:58.27ID:oDv/ROvl FireFoxのメモリリークは本当に酷い
Rust使ってるっていうのは嘘だろ
Rust使ってるっていうのは嘘だろ
2024/12/04(水) 11:21:44.43ID:CE00sRUi
>>32
そこはC++コード
FireFoxでRustを使っているのはHTML/CSSレンダリング部分
メモリ管理部分を含めてメインはC++で記述されている
ソースが公開されているので誰でも確認できる
そこはC++コード
FireFoxでRustを使っているのはHTML/CSSレンダリング部分
メモリ管理部分を含めてメインはC++で記述されている
ソースが公開されているので誰でも確認できる
34デフォルトの名無しさん
2024/12/04(水) 11:22:03.58ID:oDv/ROvl >>13
さすがにレベル低すぎだろ
さすがにレベル低すぎだろ
35デフォルトの名無しさん
2024/12/04(水) 11:41:12.45ID:1n5AYU37 リークしてるんじゃなくて意図的に解放してないだけ
本当にやばくなったら解放されるようになってる
メモリ食いが嫌ならAuto Tab Discardアドオンを入れろ
本当にやばくなったら解放されるようになってる
メモリ食いが嫌ならAuto Tab Discardアドオンを入れろ
2024/12/04(水) 11:52:22.74ID:mxpvKjAM
2024/12/04(水) 11:55:25.36ID:CE00sRUi
もし仮に特定のアプリに問題があったとしても
それはC++やRustの言語の問題ではない
このスレで特定のアプリの問題の話を始める人は愚か
それはC++やRustの言語の問題ではない
このスレで特定のアプリの問題の話を始める人は愚か
2024/12/04(水) 11:58:57.37ID:tdoiopjD
>>33
何でいつまでたってもRustで書き直さないんだろな
何でいつまでたってもRustで書き直さないんだろな
2024/12/04(水) 12:11:29.24ID:ONbcwvwt
>>30
主旨に反論したわけじゃない。 Firefox が例として不適当と言ってる。
Firefox は貪欲にメモリを使うが本当に足りなくなる手前で抑制的なモードに切り替わる。
Windows からメモリ不足のメッセージを出したときに Firefox がメモリを掴んだままなのは手放せるものは既に手放してるからだ。
メモリ不足になったときは本当にメモリ不足なんだよ。
主旨に反論したわけじゃない。 Firefox が例として不適当と言ってる。
Firefox は貪欲にメモリを使うが本当に足りなくなる手前で抑制的なモードに切り替わる。
Windows からメモリ不足のメッセージを出したときに Firefox がメモリを掴んだままなのは手放せるものは既に手放してるからだ。
メモリ不足になったときは本当にメモリ不足なんだよ。
2024/12/04(水) 12:21:47.57ID:CE00sRUi
FirefoxもChromeもその他のブラウザもやっていないが
究極的にはアクティブウィンドウのアクティブタブ以外の全ての使用メモリを原理的には解放できる
どの方針を採るにしてもC++やRustといった使用言語の問題ではなくどの言語でも可能だ
明らかにスレ違いの話題だから他のスレでやってくれ
究極的にはアクティブウィンドウのアクティブタブ以外の全ての使用メモリを原理的には解放できる
どの方針を採るにしてもC++やRustといった使用言語の問題ではなくどの言語でも可能だ
明らかにスレ違いの話題だから他のスレでやってくれ
41デフォルトの名無しさん
2024/12/04(水) 13:53:37.60ID:oDv/ROvl tab閉じてもそのtabが使ってたメモリ解放しないんじゃリークだろ
2024/12/04(水) 14:10:57.24ID:ONbcwvwt
>>40
長く表示していないタブを一旦解放する仕組みが導入されたこともあるんだが思ったより問題が大きくて消極的になった。
コンテキストの管理とレンダラは不可分な部分もあるので再レンダリングに必要な情報を残しつつ他は解放するってのは手間がかかって割に合わないと考えられてる。
>>41
閉じた時じゃなくてアクティブタブじゃなくなったときの話を >>40 はしてるのにそれがわからないなら黙ってろ。
モダンなブラウザはプロセスを分離しまくっていてプロセス間通信で協調する仕組みになってる。
タブひとつ (または数個のグループ) に対応するプロセスがあって適当な条件でプロセスごと消えて作り直されたりするので仮にメモリ管理に多少の問題があっても全体の堅牢さは維持される。
長く表示していないタブを一旦解放する仕組みが導入されたこともあるんだが思ったより問題が大きくて消極的になった。
コンテキストの管理とレンダラは不可分な部分もあるので再レンダリングに必要な情報を残しつつ他は解放するってのは手間がかかって割に合わないと考えられてる。
>>41
閉じた時じゃなくてアクティブタブじゃなくなったときの話を >>40 はしてるのにそれがわからないなら黙ってろ。
モダンなブラウザはプロセスを分離しまくっていてプロセス間通信で協調する仕組みになってる。
タブひとつ (または数個のグループ) に対応するプロセスがあって適当な条件でプロセスごと消えて作り直されたりするので仮にメモリ管理に多少の問題があっても全体の堅牢さは維持される。
2024/12/04(水) 14:24:21.96ID:pXQEyunH
2024/12/04(水) 14:30:50.31ID:CE00sRUi
いずれにしても各アプリのレベルのメモリ管理の話であってプログラミング言語と関係がない
しかもFirefoxのメモリ管理部分はC++で記述されている
ここRustスレで無関係な話をいつまで続ける気だ
しかもFirefoxのメモリ管理部分はC++で記述されている
ここRustスレで無関係な話をいつまで続ける気だ
2024/12/04(水) 14:35:33.45ID:pXQEyunH
46デフォルトの名無しさん
2024/12/04(水) 15:57:30.78ID:dIs/C0Ii Firefoxで失敗してるRustw
2024/12/04(水) 17:22:43.92ID:mxpvKjAM
ふむ、広告ブロックを強化すればメモリ節約できるのでは
48デフォルトの名無しさん
2024/12/04(水) 20:44:10.29ID:dIFgKrXU 循環参照が起きやすい場面の一つだし、これこそプログラミング言語の仕様と関係のある場面じゃないのかな
2024/12/04(水) 20:50:21.75ID:H1WoIidK
>>48
C++が悪いということ?
C++が悪いということ?
2024/12/04(水) 21:15:04.07ID:9m5UuMRD
Webページ毎に別なので
アリーナ的管理により循環参照があろうと一気に解放するためリークが起きようがない
アリーナ的管理により循環参照があろうと一気に解放するためリークが起きようがない
2024/12/04(水) 22:53:20.36ID:mxpvKjAM
メモリリークと脆弱性の混合物なら急を要するが完全に分離されたから意識低くなった
52デフォルトの名無しさん
2024/12/04(水) 23:26:00.62ID:dIFgKrXU >>48
悪いっていうより、自由が利きやすいんじゃない
悪いっていうより、自由が利きやすいんじゃない
53デフォルトの名無しさん
2024/12/05(木) 21:10:58.63ID:qJrgBNQF iterator traitのnextでiteratorの中のデータの参照を返すことがどうしてもできません
教えてください
教えてください
2024/12/05(木) 21:32:40.26ID:xceXpzKh
>>53
コードで出して。
コードで出して。
2024/12/05(木) 21:37:09.52ID:nBO5q7w2
>>53
lending iteratorでググるといい
lending iteratorでググるといい
2024/12/05(木) 23:37:21.58ID:cvEJUy50
// まず、データを保持する構造体を定義
struct DataHolder {
items: Vec<String>,
}
// イテレータ構造体を定義
// ライフタイムパラメータ 'a を使って、参照の寿命を明示
struct DataIterator<'a> {
data: &'a DataHolder, // データへの参照
index: usize, // 現在の位置
}
// DataHolderにイテレータを作成するメソッドを実装
impl DataHolder {
fn new() -> Self {
DataHolder {
items: vec![String::from("one"), String::from("two"), String::from("three")],
}
}
// イテレータを返すメソッド
fn iter(&self) -> DataIterator {
DataIterator {
data: self,
index: 0,
}
}
}
struct DataHolder {
items: Vec<String>,
}
// イテレータ構造体を定義
// ライフタイムパラメータ 'a を使って、参照の寿命を明示
struct DataIterator<'a> {
data: &'a DataHolder, // データへの参照
index: usize, // 現在の位置
}
// DataHolderにイテレータを作成するメソッドを実装
impl DataHolder {
fn new() -> Self {
DataHolder {
items: vec![String::from("one"), String::from("two"), String::from("three")],
}
}
// イテレータを返すメソッド
fn iter(&self) -> DataIterator {
DataIterator {
data: self,
index: 0,
}
}
}
2024/12/05(木) 23:38:23.20ID:cvEJUy50
// Iteratorトレイトの実装
impl<'a> Iterator for DataIterator<'a> {
// 返り値の型を&'a Stringと指定
type Item = &'a String;
fn next(&mut self) -> Option<Self::Item> {
if self.index < self.data.items.len() {
let item = &self.data.items[self.index];
self.index += 1;
Some(item)
} else {
None
}
}
}
// 使用例
fn main() {
let holder = DataHolder::new();
// イテレータを使用
for item in holder.iter() {
println!("{}", item);
}
}
やりたいことはこんな感じ?
impl<'a> Iterator for DataIterator<'a> {
// 返り値の型を&'a Stringと指定
type Item = &'a String;
fn next(&mut self) -> Option<Self::Item> {
if self.index < self.data.items.len() {
let item = &self.data.items[self.index];
self.index += 1;
Some(item)
} else {
None
}
}
}
// 使用例
fn main() {
let holder = DataHolder::new();
// イテレータを使用
for item in holder.iter() {
println!("{}", item);
}
}
やりたいことはこんな感じ?
58デフォルトの名無しさん
2024/12/06(金) 07:47:51.83ID:tRnxKL09 こんな感じです
struct It<'a>{
i: &'a mut i32
}
impl<'a> Iterator for It<'a>{
type Item= &'a i32;
fn next(&mut self)->Option<Self::Item>{
Some(self.i)
}
}
struct It<'a>{
i: &'a mut i32
}
impl<'a> Iterator for It<'a>{
type Item= &'a i32;
fn next(&mut self)->Option<Self::Item>{
Some(self.i)
}
}
2024/12/06(金) 10:39:26.47ID:zw4qy2EX
mut いらん
2024/12/06(金) 10:45:37.08ID:7cNjBV3c
iter()が作りたいのか、iter_mut()が欲しいのかどっちかな?
あとこれだと無限に続くイテレータになるけど終了条件は?
あとこれだと無限に続くイテレータになるけど終了条件は?
61デフォルトの名無しさん
2024/12/06(金) 12:04:36.97ID:tRnxKL09 struct It<'a>{
i: &'a mut i32
}
impl<'a> Iterator for It<'a>{
type Item= &'a i32;
fn next(&mut self)->Option<Self::Item>{
self.i+=1;
Some(self.i)
}
}
こんな感じなのでmutはいります
本当はiter_mutが作りたいけれど難しそうなので
iterを作ろうとしたけれどどうしても出来ません
初心者です教えてください
i: &'a mut i32
}
impl<'a> Iterator for It<'a>{
type Item= &'a i32;
fn next(&mut self)->Option<Self::Item>{
self.i+=1;
Some(self.i)
}
}
こんな感じなのでmutはいります
本当はiter_mutが作りたいけれど難しそうなので
iterを作ろうとしたけれどどうしても出来ません
初心者です教えてください
62デフォルトの名無しさん
2024/12/06(金) 12:07:14.30ID:tRnxKL09 すいません*つけわすれました
63デフォルトの名無しさん
2024/12/06(金) 12:08:12.03ID:tRnxKL09 >>60
終了条件は25です
終了条件は25です
2024/12/06(金) 12:19:03.26ID:B3lagOoh
結局毎回同じ参照返すならイテレータじゃなくてよくね
2024/12/06(金) 12:49:52.12ID:B2jbh63z
自分の可変参照を返したいならGATでこうする
use lending_iterator::prelude::*;
fn main() {
let mut v: Vec<String> = ["a", "b", "c", "d", "e"].into_iter().map(str::to_string).collect();
my_iter_mut(&mut v)
.skip(1)
.take(3)
.for_each(|s| s.push('x'));
assert_eq!(v, ["a", "bx", "cx", "dx", "e"]);
}
fn my_iter_mut<'a, T>(slice: &'a mut [T]) -> MyIterMut<'a, T> {
MyIterMut { slice, index: 0 }
}
struct MyIterMut<'a, T> {
slice: &'a mut [T],
index: usize,
}
#[gat]
impl<'a, T> LendingIterator for MyIterMut<'a, T> {
type Item<'next> where Self : 'next = &'next mut T;
fn next(self: &'_ mut MyIterMut<'a, T>) -> Option<Item<'_, Self>> {
if self.index < self.slice.len() {
self.index += 1;
Some(&mut self.slice[self.index - 1])
} else {
None
}
}
}
use lending_iterator::prelude::*;
fn main() {
let mut v: Vec<String> = ["a", "b", "c", "d", "e"].into_iter().map(str::to_string).collect();
my_iter_mut(&mut v)
.skip(1)
.take(3)
.for_each(|s| s.push('x'));
assert_eq!(v, ["a", "bx", "cx", "dx", "e"]);
}
fn my_iter_mut<'a, T>(slice: &'a mut [T]) -> MyIterMut<'a, T> {
MyIterMut { slice, index: 0 }
}
struct MyIterMut<'a, T> {
slice: &'a mut [T],
index: usize,
}
#[gat]
impl<'a, T> LendingIterator for MyIterMut<'a, T> {
type Item<'next> where Self : 'next = &'next mut T;
fn next(self: &'_ mut MyIterMut<'a, T>) -> Option<Item<'_, Self>> {
if self.index < self.slice.len() {
self.index += 1;
Some(&mut self.slice[self.index - 1])
} else {
None
}
}
}
2024/12/06(金) 17:58:05.19ID:B2jbh63z
>>65
自己レス
即興で作って冗長な表記があったため
next()関数はこれで
fn next(&mut self) -> Option<Item<'_, Self>> {
(self.index < self.slice.len()).then(|| {
let nth = &mut self.slice[self.index];
self.index += 1;
nth
})
}
自己レス
即興で作って冗長な表記があったため
next()関数はこれで
fn next(&mut self) -> Option<Item<'_, Self>> {
(self.index < self.slice.len()).then(|| {
let nth = &mut self.slice[self.index];
self.index += 1;
nth
})
}
2024/12/06(金) 18:45:17.16ID:OtZyNvR4
>>61
next()で返された不変参照r1(&i32)が生きてる間に次のnext()が呼ばれたら
r1の参照先の値が変わることになるからこの形はIteratorだと実現できないな
同じ値に対する&Tと&mut Tが共存できないルールに引っかかる
next()の戻り値にIt自体のライフタイム(&'b mut selfの'b)を含めて
戻り値の参照が存在してる間は次のnext()を呼べない形にしないといけないけど
Iteratorはそういう制限を想定してない
next()で返された不変参照r1(&i32)が生きてる間に次のnext()が呼ばれたら
r1の参照先の値が変わることになるからこの形はIteratorだと実現できないな
同じ値に対する&Tと&mut Tが共存できないルールに引っかかる
next()の戻り値にIt自体のライフタイム(&'b mut selfの'b)を含めて
戻り値の参照が存在してる間は次のnext()を呼べない形にしないといけないけど
Iteratorはそういう制限を想定してない
2024/12/07(土) 00:37:25.75ID:MlZHBv1+
Vecなどを作れて逆順にもできるイテレータとは性質が異なる
異なるものを、どっちも同じだと頑なに主張し続ける必要はない気がする
異なるものを、どっちも同じだと頑なに主張し続ける必要はない気がする
2024/12/07(土) 02:06:00.13ID:TKfUhpHo
67は一般的なイテレータの概念じゃなくstd::iter::Iteratorの話
このtraitを実装すると例えばIterator::max()も自動的に使えるようになるけど
この実装はSelf::Itemの暫定の最大値を保持しながら次のnextを呼ぶ必要がある
前の値を解放しないと次のnextを使えない状態だと
std::iter::Iteratorが使用者側に保証してる条件を満たせないし
安全なコードの範囲でimpl Iteratorのコンパイルも通せない
自前のIteratorトレイトを用意してもいいけど
それだとstd::iter::Iteratorが要求される処理には使えなくなる
このtraitを実装すると例えばIterator::max()も自動的に使えるようになるけど
この実装はSelf::Itemの暫定の最大値を保持しながら次のnextを呼ぶ必要がある
前の値を解放しないと次のnextを使えない状態だと
std::iter::Iteratorが使用者側に保証してる条件を満たせないし
安全なコードの範囲でimpl Iteratorのコンパイルも通せない
自前のIteratorトレイトを用意してもいいけど
それだとstd::iter::Iteratorが要求される処理には使えなくなる
2024/12/07(土) 08:46:15.51ID:4WGAo47f
2024/12/07(土) 09:01:24.50ID:4WGAo47f
>>69
そのmax()は自動的に全てのイテレータに使えるわけではない
Self::Itemがstd::cmp::Ordを実装している時のみ使える
前の値を保持したままにできるか否かの性質についてもmarker traitを用意することで同じ枠組みに組み込めた可能性がある
それを出来ていないのがstd::iter::Iteratorの欠陥なので他を併用するのがRustでは当たり前になっている
そのmax()は自動的に全てのイテレータに使えるわけではない
Self::Itemがstd::cmp::Ordを実装している時のみ使える
前の値を保持したままにできるか否かの性質についてもmarker traitを用意することで同じ枠組みに組み込めた可能性がある
それを出来ていないのがstd::iter::Iteratorの欠陥なので他を併用するのがRustでは当たり前になっている
2024/12/07(土) 09:28:12.85ID:4WGAo47f
イテレータの前の値を保持できるか否かのどちらが優れているかといえば
より効率的な機能を提供できる点で「前の値を保持できない」方が優れた機能を提供できる
例えばstd::io::BufReadのlines()を考えてみよう
毎回新たなStringを返してくるので前の値を保持できる仕様となっている
しかしlines()の利用で前の値なんて不要なことも多いからその観点からは無駄な仕様ともいえる
一方で「前の値を保持できない」性質にも対応出来ていたとしたら同じStringを使い回すことが出来て明らかに効率が良い
このような例は多数あり自己参照返しイテレータが別途必要とされて使われている理由である
より効率的な機能を提供できる点で「前の値を保持できない」方が優れた機能を提供できる
例えばstd::io::BufReadのlines()を考えてみよう
毎回新たなStringを返してくるので前の値を保持できる仕様となっている
しかしlines()の利用で前の値なんて不要なことも多いからその観点からは無駄な仕様ともいえる
一方で「前の値を保持できない」性質にも対応出来ていたとしたら同じStringを使い回すことが出来て明らかに効率が良い
このような例は多数あり自己参照返しイテレータが別途必要とされて使われている理由である
2024/12/07(土) 12:31:06.78ID:MlZHBv1+
2024/12/07(土) 12:55:43.06ID:TKfUhpHo
61(初心者)が実現できないimpl Iteratorで詰まってるんだから
できない理由を分かってもらうのが優先でしょ
イテレータの優劣とか代替案はその後でいい
できない理由を分かってもらうのが優先でしょ
イテレータの優劣とか代替案はその後でいい
2024/12/07(土) 13:24:25.81ID:4WGAo47f
>>73
rev()メソッドのtrait DoubleEndedIteratorはゼロコスト抽象化
逆順に並べ替えることはしないのでそのためのメモリは必要ない
既にある任意の構造を後ろからたどる、あるいは、後ろから計算するだけ
rev()メソッドのtrait DoubleEndedIteratorはゼロコスト抽象化
逆順に並べ替えることはしないのでそのためのメモリは必要ない
既にある任意の構造を後ろからたどる、あるいは、後ろから計算するだけ
2024/12/07(土) 13:35:30.31ID:4WGAo47f
>>74
それならば別の条件が必要となるIterator::max()を事例に出すのはよろしくないかな
説明するためには単純にこれだけでいいよ
let first = iter.next();
let second = iter.next();
println!("{first:?} {second:?}");
それならば別の条件が必要となるIterator::max()を事例に出すのはよろしくないかな
説明するためには単純にこれだけでいいよ
let first = iter.next();
let second = iter.next();
println!("{first:?} {second:?}");
2024/12/07(土) 14:11:16.76ID:TKfUhpHo
>>76
next2回呼ぶだけだとstd::iter::Iteratorと関係なくなるだろ
自分がそういう使い方をしなければ問題ないってなるだけ
maxはstd::iter::Iteratorの実装に求められる条件の分かりやすい例として挙げた
別の条件まで気にするならmax_byでもいいけどそれはそれで初心者には余計なノイズが増える
next2回呼ぶだけだとstd::iter::Iteratorと関係なくなるだろ
自分がそういう使い方をしなければ問題ないってなるだけ
maxはstd::iter::Iteratorの実装に求められる条件の分かりやすい例として挙げた
別の条件まで気にするならmax_byでもいいけどそれはそれで初心者には余計なノイズが増える
2024/12/07(土) 14:52:07.98ID:MlZHBv1+
コピーもcloneもできないデータの存在自体がノイズだね
本当はcloneできるんだけどゼロコストではできないとか言ってるのもノイズだ
本当はcloneできるんだけどゼロコストではできないとか言ってるのもノイズだ
2024/12/07(土) 15:42:48.47ID:YxUwNEYs
結局>>53は何がしたかったのか
2024/12/07(土) 16:58:02.14ID:ikP3bVWr
>>67
stdのIterator::nextの&mut selfのライフタイムはnextメソッドを抜けるところまで
(次のnextが呼ばれるまで生きてない)
つまりstdのIteratorでは&mut selfのライフタイムに依存するような参照を返すことはできないということ
そういう参照を返したいならlending iterator
逆に言えば&mut selfのライフタイムに依存しない参照であればstdのIteratorでも返せるということ
stdのIterator::nextの&mut selfのライフタイムはnextメソッドを抜けるところまで
(次のnextが呼ばれるまで生きてない)
つまりstdのIteratorでは&mut selfのライフタイムに依存するような参照を返すことはできないということ
そういう参照を返したいならlending iterator
逆に言えば&mut selfのライフタイムに依存しない参照であればstdのIteratorでも返せるということ
2024/12/07(土) 17:27:34.95ID:4WGAo47f
>>77
max_byも同じ
Ord実装型そのものかOrd実装型に変換してOrd::cmp()できる時のみ利用できる
それらを持ち出さなくてもSelf::Itemの条件なくcollect()すなわち収納型へのFromIteratorが適用される
つまりfirst要素とsecond要素が同時に存在することになると矛盾の説明で十分となる
そのため自己参照を返すイテレータはstd::iter::Iteratorがカバーする範囲になく別途必要となる話をしてきた
max_byも同じ
Ord実装型そのものかOrd実装型に変換してOrd::cmp()できる時のみ利用できる
それらを持ち出さなくてもSelf::Itemの条件なくcollect()すなわち収納型へのFromIteratorが適用される
つまりfirst要素とsecond要素が同時に存在することになると矛盾の説明で十分となる
そのため自己参照を返すイテレータはstd::iter::Iteratorがカバーする範囲になく別途必要となる話をしてきた
2024/12/07(土) 17:32:25.17ID:4WGAo47f
>>78
イテレータが返すのはデータ値自体とは限らず参照も返す
特に今回の質問者が返したい可変参照は明確に!Cloneが定義されていてもちろん!Copyでもある
それでも可変参照をイテレータが返すことができてVecへ収容することも可能なのはCloneもコピーも行われないためだ
さらにそれらと全く独立した話としてイテレータ自体への参照/可変参照を返す場合はstd::iter::Iteratorで扱えないためLendingIteratorを使うという話が本題
イテレータが返すのはデータ値自体とは限らず参照も返す
特に今回の質問者が返したい可変参照は明確に!Cloneが定義されていてもちろん!Copyでもある
それでも可変参照をイテレータが返すことができてVecへ収容することも可能なのはCloneもコピーも行われないためだ
さらにそれらと全く独立した話としてイテレータ自体への参照/可変参照を返す場合はstd::iter::Iteratorで扱えないためLendingIteratorを使うという話が本題
2024/12/07(土) 18:53:41.33ID:MlZHBv1+
そんなに移動がしたいならこれでいい
first = into_next(iter); // iterはもう値を所有しない
second = into_next(first) // firstはもう値を所有しない
first = into_next(iter); // iterはもう値を所有しない
second = into_next(first) // firstはもう値を所有しない
2024/12/07(土) 19:21:07.13ID:8M4lSePd
>>83
それによって新たにできるようになることや新たに生じるメリットは何?
それによって新たにできるようになることや新たに生じるメリットは何?
2024/12/07(土) 21:52:51.51ID:MlZHBv1+
C++でもRustでも変わらないメリットはcloneとdropをしなくてすむことだが
そういえば、Rust固有のメリットは'aが出てこないことと
'staticも出てこないことだな
そういえば、Rust固有のメリットは'aが出てこないことと
'staticも出てこないことだな
2024/12/08(日) 15:04:28.36ID:vgRddWB1
全然話変わるんだけどPinky Crush新曲のlowercase lifetimeってRust関係あるのかな
87デフォルトの名無しさん
2024/12/08(日) 22:46:56.54ID:y6R7+MXT >>61
mutでないiterも出来なくて困ってるとのことなので
スライスのiter()と同じものがLendingIteratorを使わずに書けるよ
struct MyIter<'a, T>(&'a [T]);
fn my_iter<'a, T>(slice: &'a [T]) -> MyIter<'a, T> {
MyIter(slice)
}
impl<'a, T> std::iter::Iterator for MyIter<'a, T> {
type Item = &'a T;
fn next(&mut self) -> Option<Self::Item> {
if let [first, rest @ ..] = self.0 {
self.0 = rest;
Some(first)
} else {
None
}
}
}
fn main() {
let a = ["foo", "bar"];
let mut iter = my_iter(&a);
assert_eq!(iter.next(), Some(&"foo"));
assert_eq!(iter.next(), Some(&"bar"));
assert_eq!(iter.next(), None);
}
mutでないiterも出来なくて困ってるとのことなので
スライスのiter()と同じものがLendingIteratorを使わずに書けるよ
struct MyIter<'a, T>(&'a [T]);
fn my_iter<'a, T>(slice: &'a [T]) -> MyIter<'a, T> {
MyIter(slice)
}
impl<'a, T> std::iter::Iterator for MyIter<'a, T> {
type Item = &'a T;
fn next(&mut self) -> Option<Self::Item> {
if let [first, rest @ ..] = self.0 {
self.0 = rest;
Some(first)
} else {
None
}
}
}
fn main() {
let a = ["foo", "bar"];
let mut iter = my_iter(&a);
assert_eq!(iter.next(), Some(&"foo"));
assert_eq!(iter.next(), Some(&"bar"));
assert_eq!(iter.next(), None);
}
2024/12/09(月) 08:04:13.18ID:kf5GINDJ
組み込みFW屋さんなんだけどRustやってみようかな…
組み込み屋視点でRustはC++の何を解決してると思う?
組み込み屋なんて古いシステムばかりだからすぐに取って代わることは無いとは思うけど
年々複雑な製品を求められるから選択肢としては持っておきたい
組み込み屋視点でRustはC++の何を解決してると思う?
組み込み屋なんて古いシステムばかりだからすぐに取って代わることは無いとは思うけど
年々複雑な製品を求められるから選択肢としては持っておきたい
2024/12/09(月) 09:11:23.41ID:bWuDC7pJ
zulip行けば?
ここにはカスしかおらん
ここにはカスしかおらん
2024/12/09(月) 09:29:03.77ID:1L49Pn1/
>>88
ダングリング参照を発見出来るだけ……とは言えそれが重要ではあるのだけど。
C++ は結局は人が気を付けなきゃならないことだらけで、複雑になると手におえない。
知ってることでも複雑に絡み合った状況では間違う。
C++ よりは機械的に検証可能な範囲を広げてるだけでもありがたいものだよ。
ダングリング参照を発見出来るだけ……とは言えそれが重要ではあるのだけど。
C++ は結局は人が気を付けなきゃならないことだらけで、複雑になると手におえない。
知ってることでも複雑に絡み合った状況では間違う。
C++ よりは機械的に検証可能な範囲を広げてるだけでもありがたいものだよ。
2024/12/09(月) 09:59:55.51ID:kf5GINDJ
2024/12/09(月) 10:35:05.93ID:URePCLgA
ビット幅気にするようなケースだと
数値型の暗黙の型変換がないとか演算時のオーバーフローの扱いを明示的に書けるとかが結構ありがたい
数値型の暗黙の型変換がないとか演算時のオーバーフローの扱いを明示的に書けるとかが結構ありがたい
93デフォルトの名無しさん
2024/12/09(月) 13:24:01.49ID:wWCmXoxS 科学 + 5ch
【AI】AIはわずか2時間の対話で人間の性格をコピーできる [すらいむ★]
https://egg.5ch.net/test/read.cgi/scienceplus/1733576027/
コメントに面白いことが書かれている
【AI】AIはわずか2時間の対話で人間の性格をコピーできる [すらいむ★]
https://egg.5ch.net/test/read.cgi/scienceplus/1733576027/
コメントに面白いことが書かれている
94デフォルトの名無しさん
2024/12/09(月) 13:32:22.31ID:elhM3R9g95デフォルトの名無しさん
2024/12/09(月) 13:59:10.18ID:uh4vUAM3 釣れますか?
2024/12/09(月) 20:25:44.95ID:MZPPSq7i
struct RefMutex<'a, T>(&'a Mutex<T>);
impl<'a, T> Iterator for RefMutex<'a, T> {
type Item = std::sync::MutexGuard<'a, T>;
//略
}
try_lockが失敗したらループが止まります
マルチスレッドならランダムに止まります 知らんけど
impl<'a, T> Iterator for RefMutex<'a, T> {
type Item = std::sync::MutexGuard<'a, T>;
//略
}
try_lockが失敗したらループが止まります
マルチスレッドならランダムに止まります 知らんけど
2024/12/09(月) 20:57:28.00ID:bWuDC7pJ
FnMut() -> Option<T>っぽいあらゆる処理を全部Iterator化しようという気概を感じるな
近寄らんとこ
近寄らんとこ
2024/12/09(月) 22:22:52.93ID:FjJr0oeZ
イテレータが勝手にループすることはない
ループするよう別途コードを書かなければならない
Option<T>を返す関数をfとすると
while let Some(x) = f() { ... } で十分である
つまりイテレータ実装する意味がない
イテレータメソッドに繋げたい!という反論もあろう
それなら std::iter::from_fn(f) で十分である
ループするよう別途コードを書かなければならない
Option<T>を返す関数をfとすると
while let Some(x) = f() { ... } で十分である
つまりイテレータ実装する意味がない
イテレータメソッドに繋げたい!という反論もあろう
それなら std::iter::from_fn(f) で十分である
2024/12/10(火) 01:03:26.70ID:EhFU+3MS
Iteratorの話は、lifetimeの棍棒で殴られたという文脈で出てきただけだな
構造体のメンバーが&'a Mutex<T>なら
reborrowではなくmoveで取得した値に対しderef_mutが使える
moveなら殴られない
構造体のメンバーが&'a Mutex<T>なら
reborrowではなくmoveで取得した値に対しderef_mutが使える
moveなら殴られない
100デフォルトの名無しさん
2024/12/10(火) 12:58:54.26ID:maUGvQsb101デフォルトの名無しさん
2024/12/11(水) 12:00:23.09ID:FLapvbLS これはポリシーというか戦略が違ってて、「今より少しでも改善するなら採用」だからじゃないかと
従来型の「最低限のクオリティに達するまではreject」へのアンチテーゼでもあるから
そして(文句あるかもしれんが)crates開発者は元々のエンジニアの質がそこそこ高かったからそれでも何とかなったものの、
同じ事をGitでやったからあの「ぼくがおもいついたすごいcrates」の山になったのだと思う
交通整理すらやる気無かったわけだ
とはいえ、「使われなくなったcratesは、いつしか動かなくなった事すら認識されなくなり、死んでいく」という、
Gitコマンド内でのライフゲームをやるつもりなら、ありなんだろうさ
従来型の「最低限のクオリティに達するまではreject」へのアンチテーゼでもあるから
そして(文句あるかもしれんが)crates開発者は元々のエンジニアの質がそこそこ高かったからそれでも何とかなったものの、
同じ事をGitでやったからあの「ぼくがおもいついたすごいcrates」の山になったのだと思う
交通整理すらやる気無かったわけだ
とはいえ、「使われなくなったcratesは、いつしか動かなくなった事すら認識されなくなり、死んでいく」という、
Gitコマンド内でのライフゲームをやるつもりなら、ありなんだろうさ
102デフォルトの名無しさん
2024/12/12(木) 23:08:54.89ID:qS1eLhOO C/C++からRustへ:Googleが示すファームウェア進化の道筋
https://xenospectrum.com/google-revamps-firmware-with-rust/
https://xenospectrum.com/google-revamps-firmware-with-rust/
103デフォルトの名無しさん
2024/12/14(土) 11:03:48.81ID:mSSbYcoF 読み終わった
>>102
具体的なアプローチは以下の通りである:
(1) 段階的なRust導入:
略
(2) 既存のCコードベースとの統合:
略
(3) ベアメタル環境への対応:
略
(4) ビルド最適化とパフォーマンスの考慮:
略
>>102
具体的なアプローチは以下の通りである:
(1) 段階的なRust導入:
略
(2) 既存のCコードベースとの統合:
略
(3) ベアメタル環境への対応:
略
(4) ビルド最適化とパフォーマンスの考慮:
略
104デフォルトの名無しさん
2024/12/15(日) 23:03:38.24ID:ehGoRf8d Rustで連番IDを発行する関数はこれでいい?
fn new_id() -> Option<usize> {
thread_local! {
static ID: Cell<usize> = Cell::new(0);
}
ID.get().checked_add(1).inspect(|&new_id| ID.set(new_id))
}
fn new_id() -> Option<usize> {
thread_local! {
static ID: Cell<usize> = Cell::new(0);
}
ID.get().checked_add(1).inspect(|&new_id| ID.set(new_id))
}
105デフォルトの名無しさん
2024/12/15(日) 23:37:25.98ID:YS3isBj8 mutableなRange(0..)をIteratorとして使う小技があるけど
オーバーフローは意識したことないな
fn new_id() -> Option<usize> {
use std::cell::RefCell;
use std::ops::RangeInclusive;
thread_local! {
static ID: RefCell<RangeInclusive<usize>> = RefCell::new(0..=usize::MAX);
}
ID.with_borrow_mut(|ids| ids.next())
}
オーバーフローは意識したことないな
fn new_id() -> Option<usize> {
use std::cell::RefCell;
use std::ops::RangeInclusive;
thread_local! {
static ID: RefCell<RangeInclusive<usize>> = RefCell::new(0..=usize::MAX);
}
ID.with_borrow_mut(|ids| ids.next())
}
106デフォルトの名無しさん
2024/12/15(日) 23:49:49.46ID:ehGoRf8d >>105
Cellで済むところがRefCellになってしまってメリットがよくわからないです
Cellで済むところがRefCellになってしまってメリットがよくわからないです
107デフォルトの名無しさん
2024/12/16(月) 00:17:21.21ID:QlO1DQXb 合わせたつもりだったけど104の実装だと最初のidは1か
108デフォルトの名無しさん
2024/12/16(月) 00:32:53.11ID:QlO1DQXb 0から開始できる形でCellにこだわるなら↓みたいな実装もありそう
fn new_id() -> Option<usize> {
thread_local! {
static ID:Cell<Option<usize>> = Cell::new(Some(1)); // ←0開始ならSome(0)
}
ID.replace(ID.get().map(|i| i.checked_add(1)).flatten())
}
fn new_id() -> Option<usize> {
thread_local! {
static ID:Cell<Option<usize>> = Cell::new(Some(1)); // ←0開始ならSome(0)
}
ID.replace(ID.get().map(|i| i.checked_add(1)).flatten())
}
109デフォルトの名無しさん
2024/12/16(月) 01:08:38.61ID:KPayFncJ スレッド単位の連番て何やの?
110デフォルトの名無しさん
2024/12/16(月) 12:39:36.29ID:pEIdxfnL >>104をマルチスレッド対応するなら
まず初心者入門向け版としてはCellをMutexに変更で動く
fn new_id() -> Option<usize> {
static ID: Mutex<usize> = Mutex::new(0);
let mut id = ID.lock().unwrap();
id.checked_add(1).inspect(|&new_id| *id = new_id)
}
まず初心者入門向け版としてはCellをMutexに変更で動く
fn new_id() -> Option<usize> {
static ID: Mutex<usize> = Mutex::new(0);
let mut id = ID.lock().unwrap();
id.checked_add(1).inspect(|&new_id| *id = new_id)
}
111デフォルトの名無しさん
2024/12/16(月) 18:51:07.44ID:gawhGp3+ inspectの間違った使い方
112デフォルトの名無しさん
2024/12/16(月) 19:41:56.01ID:NChejl3+ 正しいようだが何を問題視してる?
ちなみにRustではmatch(またはif let)で書いた時に
次のようなパターンになる場合に
わかりやすく短くメソッドにして繋げることができる
and_then(f)
| Some(x) => f(x),
| None => None,
map(f)
| Some(x) => Some(f(x)),
| None => None,
inspect(f)
| Some(x) => { f(x); Some(x) }
| None => None,
or_else(f)
| Some(x) => Some(x),
| None => f(),
unwrap_or_else(f)
| Some(x) => x,
| None => f(),
ok_or_else(f)
| Some(x) => Ok(x),
| None => Err(f()),
など
ちなみにRustではmatch(またはif let)で書いた時に
次のようなパターンになる場合に
わかりやすく短くメソッドにして繋げることができる
and_then(f)
| Some(x) => f(x),
| None => None,
map(f)
| Some(x) => Some(f(x)),
| None => None,
inspect(f)
| Some(x) => { f(x); Some(x) }
| None => None,
or_else(f)
| Some(x) => Some(x),
| None => f(),
unwrap_or_else(f)
| Some(x) => x,
| None => f(),
ok_or_else(f)
| Some(x) => Ok(x),
| None => Err(f()),
など
113デフォルトの名無しさん
2024/12/17(火) 10:28:51.72ID:hEkGaD6x 全然判り易くないぞ
語彙に直交性が全く無い
語彙に直交性が全く無い
114デフォルトの名無しさん
2024/12/17(火) 12:02:56.17ID:PdC61IaM 語彙の問題もあるのかもしれないけどasyncの問題もあって中の人たち含めみんな昔ほどコンビネータで書かなくなった
115デフォルトの名無しさん
2024/12/17(火) 12:27:03.59ID:QsDK8zUE Optionを自然に真偽値ベースで英語で読むと判り易くなっている
例えばunwrap_or_elseは
真ならunwrapすなわちSome(x)→x
orは前提が偽つまりNoneの場合がfの対象でNone→f()
似ているor_elseは
Some(x)→Some(x)となる部分だけ違うとすぐわかる
その逆は当然and_thenとなり
andは前提が真の場合がfの対象でSome(x)→f(x)となる
通常の動詞1つの時は真つまりSome(x)の時が対象で
mapは値を写像してSome(x)→Some(f(x))
inspectは値を変化させずに実行Some(x)→{ f(&x); Some(x) }
filterも値は変化させずに実行して偽なら捨ててNone
Some(x)→if f(&x) { Some(x) } else { None }
例えばunwrap_or_elseは
真ならunwrapすなわちSome(x)→x
orは前提が偽つまりNoneの場合がfの対象でNone→f()
似ているor_elseは
Some(x)→Some(x)となる部分だけ違うとすぐわかる
その逆は当然and_thenとなり
andは前提が真の場合がfの対象でSome(x)→f(x)となる
通常の動詞1つの時は真つまりSome(x)の時が対象で
mapは値を写像してSome(x)→Some(f(x))
inspectは値を変化させずに実行Some(x)→{ f(&x); Some(x) }
filterも値は変化させずに実行して偽なら捨ててNone
Some(x)→if f(&x) { Some(x) } else { None }
116デフォルトの名無しさん
2024/12/17(火) 13:56:28.23ID:fyM5pHAa 現状追認オジの意見ほど意味のないものはない
117デフォルトの名無しさん
2024/12/17(火) 13:58:12.78ID:8t1OBzHL バカでも読めるコードが正解なんだよ
118デフォルトの名無しさん
2024/12/17(火) 14:25:44.95ID:QOGj4SRI コボラーがそんな事言っていたなw
119デフォルトの名無しさん
2024/12/17(火) 15:37:01.20ID:k3aNgl34 あほくさ。
そこらの医学でも物理でも法律でもいいが適当な論文が単語や言い回しだけ平易にすればバカでも読めるようになるか?
前提知識がないとどうせ意味なんかわからん。
プログラミングも同じ。
理屈が理解できるだけの能がなければ表現ばかり平易にしても無意味。
不必要に難解にする意味はないが、言い回しだけ過度に平易にする意味もない。
そこらの医学でも物理でも法律でもいいが適当な論文が単語や言い回しだけ平易にすればバカでも読めるようになるか?
前提知識がないとどうせ意味なんかわからん。
プログラミングも同じ。
理屈が理解できるだけの能がなければ表現ばかり平易にしても無意味。
不必要に難解にする意味はないが、言い回しだけ過度に平易にする意味もない。
120デフォルトの名無しさん
2024/12/17(火) 15:40:38.28ID:8t1OBzHL 特定のプログラミング言語を使えることを物理医学レベルと思ってるのは思い上がり
121デフォルトの名無しさん
2024/12/17(火) 15:52:02.93ID:k3aNgl34122デフォルトの名無しさん
2024/12/17(火) 15:54:52.82ID:8t1OBzHL123デフォルトの名無しさん
2024/12/17(火) 16:01:39.84ID:k3aNgl34 >>122
それは大変によくわかる。
自分で書いたものすら意味わからんようになるのは普通のことだからな……。
だから意図を表現することが大事で、小さなロジックの断片にでも名前を付ける。
その状況を表すための名前 (専門用語) こそが大事。
訓練されていない人にとって平易であることとは違う。
それは大変によくわかる。
自分で書いたものすら意味わからんようになるのは普通のことだからな……。
だから意図を表現することが大事で、小さなロジックの断片にでも名前を付ける。
その状況を表すための名前 (専門用語) こそが大事。
訓練されていない人にとって平易であることとは違う。
124デフォルトの名無しさん
2024/12/17(火) 16:33:22.09ID:bLYSKCYG >>116
現状追認主義なのに推奨されてる用量・用法は守らず動くだけのコードを披露したがるのは理解できないんだが
現状追認主義なのに推奨されてる用量・用法は守らず動くだけのコードを披露したがるのは理解できないんだが
125デフォルトの名無しさん
2024/12/17(火) 17:43:30.54ID:SHc5Q5Oi ママに褒めてもらいたい幼児の心理だよ
わかりやすいだろ
わかりやすいだろ
126デフォルトの名無しさん
2024/12/17(火) 20:27:48.43ID:QsDK8zUE >>117
「ごっちゃに書いて見通しの悪いコードにはせずに、
高階関数のメソッドチェーンにして、
各々のメソッドで個別に関数またはクロージャで処理を指定する。」
ここまでは共通認識でいいんだよね?
万が一これにも反対の人がいるならばまずは代案を明示的に出してほしい
以上の共通認識の上で
語彙の問題という話が出ているからメソッド名の付け方に問題があるということなのか?
それともメソッドが多すぎる(機能が多すぎる)またはメソッドの分別の仕方に問題があるということなのか?
まさか高階関数がわかりにくいという話ではないと思うが
「ごっちゃに書いて見通しの悪いコードにはせずに、
高階関数のメソッドチェーンにして、
各々のメソッドで個別に関数またはクロージャで処理を指定する。」
ここまでは共通認識でいいんだよね?
万が一これにも反対の人がいるならばまずは代案を明示的に出してほしい
以上の共通認識の上で
語彙の問題という話が出ているからメソッド名の付け方に問題があるということなのか?
それともメソッドが多すぎる(機能が多すぎる)またはメソッドの分別の仕方に問題があるということなのか?
まさか高階関数がわかりにくいという話ではないと思うが
127デフォルトの名無しさん
2024/12/17(火) 21:50:43.67ID:dgkTZZrK128デフォルトの名無しさん
2024/12/17(火) 22:05:47.16ID:ecWnwmom129デフォルトの名無しさん
2024/12/17(火) 22:08:10.40ID:e6YSkvhC >>127
また自分勝手な慣習や思い込みの暗黙の了解かよ
また自分勝手な慣習や思い込みの暗黙の了解かよ
130デフォルトの名無しさん
2024/12/17(火) 22:18:10.64ID:zSkWZLKX vecs.iter().map(|x| x.iter()).flatten().filter(...)
みたいなのは書いてて気持ち良いけど、全員が賛同するわけではないよな
Rustの公式のドキュメントだって関数型スタイルの書き方と手続き型スタイルの書き方の両方を紹介してるわけだし
そういう「高度な書き方」をバッサリ切り捨ててるGO言語が人気というのもそう
みたいなのは書いてて気持ち良いけど、全員が賛同するわけではないよな
Rustの公式のドキュメントだって関数型スタイルの書き方と手続き型スタイルの書き方の両方を紹介してるわけだし
そういう「高度な書き方」をバッサリ切り捨ててるGO言語が人気というのもそう
131デフォルトの名無しさん
2024/12/17(火) 22:20:51.38ID:QsDK8zUE132デフォルトの名無しさん
2024/12/17(火) 22:42:34.79ID:e6YSkvhC133デフォルトの名無しさん
2024/12/17(火) 23:29:57.24ID:zSkWZLKX134デフォルトの名無しさん
2024/12/18(水) 09:42:19.11ID:w442kBzm まあ存在する以上はユースケースがあるってことだからな。
135デフォルトの名無しさん
2024/12/18(水) 12:59:18.01ID:RrhqiCIc コードゴルファーのために存在してるわけじゃないからな
136デフォルトの名無しさん
2024/12/18(水) 13:17:46.53ID:3HdOm/G7 そろそろitertoolsを標準ライブラリ化する話はないのか?
137デフォルトの名無しさん
2024/12/18(水) 18:37:10.88ID:C5X2cUVY 個別に取り入れられてる
まとめて標準化はない
棲み分け
まとめて標準化はない
棲み分け
138デフォルトの名無しさん
2024/12/18(水) 19:09:54.98ID:MW322kuv >>127
そのマルチスレッド対応コードに
指摘の「慣習や暗黙の了解を無視したコード」とやらが見当たらないのだが
そもそも慣習や暗黙の了解とはどういう意味で使ってる?
>> マルチスレッド対応するなら
>> まず初心者入門向け版としてはCellをMutexに変更で動く
>>
>> fn new_id() -> Option<usize> {
>> static ID: Mutex<usize> = Mutex::new(0);
>>
>> let mut id = ID.lock().unwrap();
>> id.checked_add(1).inspect(|&new_id| *id = new_id)
>> }
そのマルチスレッド対応コードに
指摘の「慣習や暗黙の了解を無視したコード」とやらが見当たらないのだが
そもそも慣習や暗黙の了解とはどういう意味で使ってる?
>> マルチスレッド対応するなら
>> まず初心者入門向け版としてはCellをMutexに変更で動く
>>
>> fn new_id() -> Option<usize> {
>> static ID: Mutex<usize> = Mutex::new(0);
>>
>> let mut id = ID.lock().unwrap();
>> id.checked_add(1).inspect(|&new_id| *id = new_id)
>> }
139デフォルトの名無しさん
2024/12/19(木) 11:45:17.60ID:p9TYuGiM140デフォルトの名無しさん
2024/12/19(木) 11:55:22.77ID:953TTIIh 型のキャストは
std::mem::transmute
std::mem::transmute
141デフォルトの名無しさん
2024/12/19(木) 12:16:13.05ID:H/9JfOm9 assert_eq!((3.14_f32).to_bits(), 0b1000000010010001111010111000011_u32);
assert_eq!(f32::from_bits(0b1000000010010001111010111000011_u32), 3.14_f32);
assert_eq!(f32::from_bits(0b1000000010010001111010111000011_u32), 3.14_f32);
142デフォルトの名無しさん
2024/12/20(金) 15:29:01.33ID:raronLtC JAIST、「並行量子通信プロトコル」の完全な自動形式検証を実現
http://news.mynavi.jp/techplus/article/20241220-3090485/
http://news.mynavi.jp/techplus/article/20241220-3090485/
143デフォルトの名無しさん
2024/12/22(日) 22:27:16.01ID:K7zRdssG >>138
中級者向けにはこれでええんかね
fn new_id() -> Option<usize> {
static ID: AtomicUsize = AtomicUsize::new(0);
let mut old_id = ID.load(Relaxed);
while let Some(new_id) = old_id.checked_add(1) {
match ID.compare_exchange_weak(old_id, new_id, Relaxed, Relaxed) {
Ok(_) => return Some(new_id),
Err(updated_old_id) => old_id = updated_old_id,
}
}
None
}
中級者向けにはこれでええんかね
fn new_id() -> Option<usize> {
static ID: AtomicUsize = AtomicUsize::new(0);
let mut old_id = ID.load(Relaxed);
while let Some(new_id) = old_id.checked_add(1) {
match ID.compare_exchange_weak(old_id, new_id, Relaxed, Relaxed) {
Ok(_) => return Some(new_id),
Err(updated_old_id) => old_id = updated_old_id,
}
}
None
}
144デフォルトの名無しさん
2024/12/23(月) 22:20:47.40ID:GhTcJSaR Rustに興味出てきたからとりあえず、とほほさんのサイトに目を通してみたんだけど
…もしかしてあの方、非同期処理と並列処理をごっちゃに理解している?
https://www.tohoho-web.com/ex/rust.html#async-await
…もしかしてあの方、非同期処理と並列処理をごっちゃに理解している?
https://www.tohoho-web.com/ex/rust.html#async-await
145デフォルトの名無しさん
2024/12/23(月) 22:54:25.61ID:OG1FFUyc146デフォルトの名無しさん
2024/12/28(土) 15:51:05.67ID:SGU/9qSb Rustしか勝たん
147デフォルトの名無しさん
2024/12/28(土) 17:09:23.73ID:IXmLUnxX こういうアホが湧いてきたときがピークだな
148デフォルトの名無しさん
2024/12/28(土) 17:20:50.92ID:T6F1mfjg WebAssemblyはRustが主流なイメージだけど実際どんなもんだろ
149デフォルトの名無しさん
2024/12/28(土) 18:28:20.06ID:wm6lCJnC linuxカーネルがシェルスクリプトの付属品にならなかったのはシェルを変更できるから
だがjsは、変更不可能にすればjsが永久に主流だというのを意図的にやっている
だがjsは、変更不可能にすればjsが永久に主流だというのを意図的にやっている
150デフォルトの名無しさん
2025/01/01(水) 12:59:04.47ID:emEmRiID >>149
何いってんだお前?
何いってんだお前?
151デフォルトの名無しさん
2025/01/01(水) 18:48:34.00ID:0dTGHEt/ 触るな触るな
152デフォルトの名無しさん
2025/01/03(金) 23:49:31.66ID:hQWrSYwJ ひといないねこのすれ
153デフォルトの名無しさん
2025/01/04(土) 10:08:52.56ID:9AJmtK0P だからマルチスレッドで発生しうる競合はその2つだけじゃないから
それだけで安全と言い切れるわけないだろ
そもそも安全性ってお前が作るアプリで必要なの?
Linuxカーネルや組み込みだったらわかるけどそんな高度なプログラム作ってんの?
飛行機のシステム作ってて命がかかってるとかならわかるが、その辺のアプリで安全性とかどうでもいいよね
Rust馬鹿信者は開発生産性を軽視しすぎだ、開発生産性を犠牲に安全性に振ってるのがRustだがアプリの特性によって安全性なんぞどうでもいいことが多い
開発生産性が一番重要
それだけで安全と言い切れるわけないだろ
そもそも安全性ってお前が作るアプリで必要なの?
Linuxカーネルや組み込みだったらわかるけどそんな高度なプログラム作ってんの?
飛行機のシステム作ってて命がかかってるとかならわかるが、その辺のアプリで安全性とかどうでもいいよね
Rust馬鹿信者は開発生産性を軽視しすぎだ、開発生産性を犠牲に安全性に振ってるのがRustだがアプリの特性によって安全性なんぞどうでもいいことが多い
開発生産性が一番重要
154デフォルトの名無しさん
2025/01/04(土) 11:56:56.49ID:Z095809L 難しさによる障壁はあるけど、慣れれば生産性自体は高い言語だと思う
ライブラリ多いし、ちょっとしたツールを作る程度ならエラーハンドリングもそんなに頑張らなくて良いし (anyhow を使えば割と雑に書ける)
流石にPythonのような手軽さは無いけど、C++よりは遥かに書きやすいし、個人的にはC#やJavaよりも楽だと思うくらい
これは言語仕様でなくツールの話だけど、プロジェクトを作ったり、ライブラリを追加したりするのが楽
学習コストが高いのはその通りで、誰かが書いたツールを他の人が保守しづらいみたいな問題はどうしようもないけど…
(そういう用途ならGoが良さそう)
ライブラリ多いし、ちょっとしたツールを作る程度ならエラーハンドリングもそんなに頑張らなくて良いし (anyhow を使えば割と雑に書ける)
流石にPythonのような手軽さは無いけど、C++よりは遥かに書きやすいし、個人的にはC#やJavaよりも楽だと思うくらい
これは言語仕様でなくツールの話だけど、プロジェクトを作ったり、ライブラリを追加したりするのが楽
学習コストが高いのはその通りで、誰かが書いたツールを他の人が保守しづらいみたいな問題はどうしようもないけど…
(そういう用途ならGoが良さそう)
155デフォルトの名無しさん
2025/01/04(土) 12:23:29.13ID:5PJMX9Ru156デフォルトの名無しさん
2025/01/04(土) 12:59:21.10ID:OzBQvYrX >>155
「自分がRustに慣れてるなら」それは自分も同意
自分の意見は
・Rustは分かるようになるまでが大変
・理解できれば開発者にとって強力な言語
で、「Goの方が向く」というのはとっつきやすさを含めた話のつもりで書いた
他言語の経験者から見たら、たぶんRustは型やトレイトの意味を理解するのが難しいし、参照などのルールを理解しないとコンパイルすら通らないから、Goの方が触りやすいんじゃないかと思う
Arc, Rc, Cell, Mutex とかの型は分かる人にとってはmeaningfulだけど、初学者がすぐに分かるものではないと思う
「自分がRustに慣れてるなら」それは自分も同意
自分の意見は
・Rustは分かるようになるまでが大変
・理解できれば開発者にとって強力な言語
で、「Goの方が向く」というのはとっつきやすさを含めた話のつもりで書いた
他言語の経験者から見たら、たぶんRustは型やトレイトの意味を理解するのが難しいし、参照などのルールを理解しないとコンパイルすら通らないから、Goの方が触りやすいんじゃないかと思う
Arc, Rc, Cell, Mutex とかの型は分かる人にとってはmeaningfulだけど、初学者がすぐに分かるものではないと思う
157デフォルトの名無しさん
2025/01/04(土) 13:59:36.84ID:5PJMX9Ru >>156
単純にメンテする人員を確保しづらいという意味ならそれはそう
単純にメンテする人員を確保しづらいという意味ならそれはそう
158デフォルトの名無しさん
2025/01/04(土) 22:40:45.82ID:xBPs09Kz rustのいい所はresultやoption.その他色々な型について文脈が大体決まっていること。なので慣れると人が書いたコードでも読みやすい。c#やjavaとの比較であれば開発効率は大体同じか、勝っているぐらい。nullや例外がある言語はプログラムがどうしても汚くなる。
rustはaiにコード生成させた時の品質も割といい。コンパイルエラーでても対応方法が具体的なのでそのままメッセージをaiに渡すだけで直る。
rustはaiにコード生成させた時の品質も割といい。コンパイルエラーでても対応方法が具体的なのでそのままメッセージをaiに渡すだけで直る。
159デフォルトの名無しさん
2025/01/04(土) 22:49:58.13ID:xBPs09Kz AIが当たり前の時代においてはコードの記述量そのものは開発効率に直結するものではなくなる。どの言語でも似たような事は出来る。でも作られたコードが、正しいかどうかは別の問題。
AIはたまに嘘を付くので、それをコンパイラで厳密にチエックする必要がある。そういう意味では関数型言語へのシフトは進むし、rustはいい位置にいると思う。
AIはたまに嘘を付くので、それをコンパイラで厳密にチエックする必要がある。そういう意味では関数型言語へのシフトは進むし、rustはいい位置にいると思う。
160デフォルトの名無しさん
2025/01/04(土) 23:01:31.53ID:tP/ja7AQ 関数型関係ないから
161デフォルトの名無しさん
2025/01/04(土) 23:15:15.09ID:FAAvXSOV >>159
関数型である部分ではなく
Rustが安全性にも役立つ史上最強の型システムを構築したことが決め手かな
特にトレイトそしてトレイト境界
さらに例えばSendやSyncといった概念的なトレイトなど
関数型である部分ではなく
Rustが安全性にも役立つ史上最強の型システムを構築したことが決め手かな
特にトレイトそしてトレイト境界
さらに例えばSendやSyncといった概念的なトレイトなど
162デフォルトの名無しさん
2025/01/05(日) 00:44:18.92ID:TOCT7c8i そうなんだ、Rustってすごいんだね!
163デフォルトの名無しさん
2025/01/05(日) 11:01:38.28ID:8kdOFrcZ 関数型関係ないから
164デフォルトの名無しさん
2025/01/05(日) 13:34:15.55ID:4B4hqpXY お前ら9連休はちゃんと楽しめたか?
165デフォルトの名無しさん
2025/01/05(日) 16:19:33.22ID:mRHgcQU5 九連休に一回もコード書いてない陽キャはこのスレ書き込み禁止な
166デフォルトの名無しさん
2025/01/05(日) 18:30:14.16ID:Rb8d6mKE 体力落ちないように散歩しまくってたら脚の裏に豆出来たよ
167デフォルトの名無しさん
2025/01/05(日) 18:46:31.56ID:7ZREq1Cz 陰キャなのに今年のコード書いてなかった
fn main() {
println!("{}年", (0..10u64).map(|i| i.pow(3)).sum::<u64>());
println!("{}年", (0..10u64).sum::<u64>().pow(2));
}
sum()の型アノテーション外せないの?
fn main() {
println!("{}年", (0..10u64).map(|i| i.pow(3)).sum::<u64>());
println!("{}年", (0..10u64).sum::<u64>().pow(2));
}
sum()の型アノテーション外せないの?
168デフォルトの名無しさん
2025/01/06(月) 00:22:47.46ID:criPfDaa169デフォルトの名無しさん
2025/01/06(月) 00:30:50.77ID:wyPVXQtD その論理は明らかにおかしい
170デフォルトの名無しさん
2025/01/06(月) 03:11:05.95ID:AJFRd04v 0..10がu64なんだからsumの結果も当然u64だろうという気持ちにはなる
171デフォルトの名無しさん
2025/01/06(月) 08:35:26.36ID:wMDzRwfr そこは指定必須
例えばu64の和をu128で求める型を以下のように増やせるから無指定を許すとコードが曖昧になる
struct MySum(u128);
impl std::iter::Sum<u64> for MySum {
fn sum<I: Iterator<Item = u64>>(iter: I) -> Self {
iter.fold(MySum(0), |sum, n| MySum(sum.0 + n as u128))
}
}
fn main() {
// u64の和をu128で計算できる
let x = [u64::MAX, u64::MAX].into_iter().sum::<MySum>().0;
assert_eq!(x, u64::MAX as u128 * 2);
// このコードはデバッグモード時にoverflowして悪手
let x = [u64::MAX, u64::MAX].into_iter().sum::<u64>();
assert_eq!(x, u64::MAX - 1);
// ラップアラウンドさせたいならこうする
use std::num::Wrapping;
let x = [u64::MAX, u64::MAX].into_iter().map(|n| Wrapping(n)).sum::<Wrapping<u64>>().0;
assert_eq!(x, u64::MAX - 1);
}
このように必ず型を指定して使い分けをする
例えばu64の和をu128で求める型を以下のように増やせるから無指定を許すとコードが曖昧になる
struct MySum(u128);
impl std::iter::Sum<u64> for MySum {
fn sum<I: Iterator<Item = u64>>(iter: I) -> Self {
iter.fold(MySum(0), |sum, n| MySum(sum.0 + n as u128))
}
}
fn main() {
// u64の和をu128で計算できる
let x = [u64::MAX, u64::MAX].into_iter().sum::<MySum>().0;
assert_eq!(x, u64::MAX as u128 * 2);
// このコードはデバッグモード時にoverflowして悪手
let x = [u64::MAX, u64::MAX].into_iter().sum::<u64>();
assert_eq!(x, u64::MAX - 1);
// ラップアラウンドさせたいならこうする
use std::num::Wrapping;
let x = [u64::MAX, u64::MAX].into_iter().map(|n| Wrapping(n)).sum::<Wrapping<u64>>().0;
assert_eq!(x, u64::MAX - 1);
}
このように必ず型を指定して使い分けをする
172デフォルトの名無しさん
2025/01/06(月) 16:43:43.88ID:lN8qCLjL Monoidを先に整備すればこんなことにはならずに済んだろうに
173デフォルトの名無しさん
2025/01/06(月) 17:02:00.56ID:jpfBkgv0 >>171
そういうのは本来sumの役割じゃなくないかという気持ち
そういうのは本来sumの役割じゃなくないかという気持ち
174デフォルトの名無しさん
2025/01/06(月) 18:43:17.81ID:tSs1WAlu オーバーフローとかは関係なくて型システムの制約と標準ライブラリの実装方法の問題だよ
175デフォルトの名無しさん
2025/01/06(月) 19:00:20.90ID:9m9l0GJF sum()の戻り値の型をIterator::Itemに固定するとItemが参照型の場合に対応できないな
176デフォルトの名無しさん
2025/01/06(月) 21:13:46.20ID:CO3hUR7m そら固定したらダメだよ
177デフォルトの名無しさん
2025/01/06(月) 21:49:35.38ID:4hhkOX4f ジェネリクスで良いとは思うけど、デフォルトの型として元の型になってくれると便利な気はする
参照の場合とかは、数値型なら .copied() で値にできるし
参照の場合とかは、数値型なら .copied() で値にできるし
178デフォルトの名無しさん
2025/01/07(火) 23:41:33.61ID:tWQ6EHho >>177
copy可かつcopyでコスト増にならないのはプリミティブな数値型だけだよ
巨大な整数値やタプルや行列などもありうる
例えば std::simd::Simd のimpl Sumでも参照を扱ってるね
impl<'a, const N: usize> Sum<&'a Simd<u32, N>> for Simd<u32, N>
copy可かつcopyでコスト増にならないのはプリミティブな数値型だけだよ
巨大な整数値やタプルや行列などもありうる
例えば std::simd::Simd のimpl Sumでも参照を扱ってるね
impl<'a, const N: usize> Sum<&'a Simd<u32, N>> for Simd<u32, N>
179デフォルトの名無しさん
2025/01/08(水) 00:21:31.60ID:tEqXW2Dh もうfoldでいい気がしてきた
fn main() {
use std::ops::Add;
println!("{}年", (0..10u64).map(|i| i.pow(3)).fold(0, u64::add));
println!("{}年", (0..10u64).fold(0, u64::add).pow(2));
}
3乗の総和=総和の2乗の証明は今年の入試で狙われそうだな
帰納法使えば簡単だけどn(n+1)/2の導出からだとだるい
fn main() {
use std::ops::Add;
println!("{}年", (0..10u64).map(|i| i.pow(3)).fold(0, u64::add));
println!("{}年", (0..10u64).fold(0, u64::add).pow(2));
}
3乗の総和=総和の2乗の証明は今年の入試で狙われそうだな
帰納法使えば簡単だけどn(n+1)/2の導出からだとだるい
180デフォルトの名無しさん
2025/01/08(水) 23:11:07.72ID:SlaqrUqV そのSimdのSum実装のこれを見てそこに落ち着いたのか
iter.fold(Simd::splat(0 as $type), Add::add)
iter.fold(Simd::splat(0 as $type), Add::add)
181デフォルトの名無しさん
2025/01/11(土) 08:43:38.04ID:UwKGG2Q8 Rust排除のためのMozilla潰しが始まったか?
GoogleとLinux FoundationがChromiumの開発と維持を支援する基金「Supporters of Chromium-Based Browsers」を設立、MetaやMicrosoftなども参加 - GIGAZINE
https://gigazine.net/news/20250110-supporters-of-chromium-based-browsers/
GoogleとLinux FoundationがChromiumの開発と維持を支援する基金「Supporters of Chromium-Based Browsers」を設立、MetaやMicrosoftなども参加 - GIGAZINE
https://gigazine.net/news/20250110-supporters-of-chromium-based-browsers/
182デフォルトの名無しさん
2025/01/11(土) 10:01:12.58ID:dWpFaXpi Chromium プロジェクトが Rust の利用をサポート
https://developers-jp.googleblog.com/2023/02/supporting-use-of-rust-in-chromium.html
https://developers-jp.googleblog.com/2023/02/supporting-use-of-rust-in-chromium.html
183デフォルトの名無しさん
2025/01/11(土) 10:03:06.03ID:dWpFaXpi Rust を導入する目的は、シンプルで(IPC を使わない)安全な(全般的に C++ よりも複雑でなく、サンドボックスでメモリの安全性に関するバグは発生しない)形で 2 の法則を満たすことにより、
184デフォルトの名無しさん
2025/01/11(土) 10:08:09.58ID:dWpFaXpi Rust は、Mozilla がブラウザを書くために特別に開発したものなので、このテクノロジーが Chromium でようやく使われ始めるようになるのは、理にかなったことです。
システム ソフトウェア業界に莫大な貢献をしてくださっている Mozilla に感謝いたします。
Rust は、安全性とパフォーマンスの両方を言語に期待できることを見事に証明しています。
システム ソフトウェア業界に莫大な貢献をしてくださっている Mozilla に感謝いたします。
Rust は、安全性とパフォーマンスの両方を言語に期待できることを見事に証明しています。
185デフォルトの名無しさん
2025/01/11(土) 10:21:28.46ID:UwKGG2Q8 むむっ
186デフォルトの名無しさん
2025/01/11(土) 11:00:56.87ID:rJtu07B+ そもそもMozillaはRust開発者の大半をリストラしてしまったし
すでに単なる1ユーザ企業に過ぎなくて、Rustの発展にはあんまり関係なくなってる
どちらかというとMDNを維持できるかとかの方が重要そう
すでに単なる1ユーザ企業に過ぎなくて、Rustの発展にはあんまり関係なくなってる
どちらかというとMDNを維持できるかとかの方が重要そう
187デフォルトの名無しさん
2025/01/11(土) 11:44:47.56ID:3LDhx22M GoogleはChromeが独占禁止法違反にならないようにFirefox支援しててMozillaは生きててもらわなきゃならん
デフォルトの検索エンジンに採用する見返りにGoogle社から受け取ってる金がMozillaの収益の90%を占めるから潰すのはその金を絞るだけでいい
デフォルトの検索エンジンに採用する見返りにGoogle社から受け取ってる金がMozillaの収益の90%を占めるから潰すのはその金を絞るだけでいい
188デフォルトの名無しさん
2025/01/11(土) 12:13:12.32ID:RVo7o+pP >>187
おまえ日本語不自由なら無理に書き込まなくてもいいんだよ?
おまえ日本語不自由なら無理に書き込まなくてもいいんだよ?
189デフォルトの名無しさん
2025/01/11(土) 12:35:47.49ID:3LDhx22M190デフォルトの名無しさん
2025/01/11(土) 12:37:03.90ID:6FujqKQM 添削してあげる
GoogleのChromeが独占禁止法違反にならないように対抗馬のFirefoxにある程度台頭してもらう必要がある
そのためGoogleはMozillaを投資している
投資の一例としてMozillaはデフォルトの検索エンジンに採用する見返りにGoogleからMozillaの収益の90%を占める投資を受け取ってる
仮にGoogleがMozillaを潰すのならその投資を絞るだけでいい
GoogleのChromeが独占禁止法違反にならないように対抗馬のFirefoxにある程度台頭してもらう必要がある
そのためGoogleはMozillaを投資している
投資の一例としてMozillaはデフォルトの検索エンジンに採用する見返りにGoogleからMozillaの収益の90%を占める投資を受け取ってる
仮にGoogleがMozillaを潰すのならその投資を絞るだけでいい
191デフォルトの名無しさん
2025/01/11(土) 12:38:54.31ID:6FujqKQM 訂正
誤 そのためGoogleはMozillaを投資している
正 そのためGoogleはMozillaに投資している
誤 そのためGoogleはMozillaを投資している
正 そのためGoogleはMozillaに投資している
192デフォルトの名無しさん
2025/01/11(土) 12:49:21.17ID:dWpFaXpi いずれも着実にRust化
193デフォルトの名無しさん
2025/01/11(土) 12:57:56.78ID:3LDhx22M194デフォルトの名無しさん
2025/01/11(土) 16:20:18.17ID:Vz6os9Zc ところがMozillaに資金援助してるのが
独禁法違反ともめてるわけだ
独禁法違反ともめてるわけだ
195デフォルトの名無しさん
2025/01/12(日) 23:53:09.91ID:DJe+xzuK ChromeもMozillaも各々Rust化へ向かってるなら
今後はここでもう揉めなくて済むな
今後はここでもう揉めなくて済むな
196デフォルトの名無しさん
2025/01/13(月) 05:20:11.26ID:i8wWMTup197デフォルトの名無しさん
2025/01/13(月) 13:52:02.59ID:g4/CTboD >>188
あなたは頭が不自由なのですね判ります
あなたは頭が不自由なのですね判ります
198デフォルトの名無しさん
2025/01/13(月) 16:13:11.82ID://H6HHHW Rust 1.84.0でprovenance関係が安定化されてるね
199デフォルトの名無しさん
2025/01/18(土) 10:00:11.55ID:7Jaib8zo Rustで描かれてるMozillaがめっちゃ不安定なんすけど
200デフォルトの名無しさん
2025/01/18(土) 10:07:56.33ID:CvcZ6tuy >>199
Mozillaのメモリ管理や中核部分はC++で書かれている
Mozillaのメモリ管理や中核部分はC++で書かれている
201デフォルトの名無しさん
2025/01/19(日) 17:48:38.01ID:IALgBqxE >2016/07/20 まとめ:Firefox 48 には、Rust で書かれたコードが初めて含まれます。以降のバージョンにも Rust での実装が予定されている部分があります。
10年掛けてまだ置き換わってないってどういう事なの
10年掛けてまだ置き換わってないってどういう事なの
202デフォルトの名無しさん
2025/01/19(日) 18:43:58.99ID:9UIKz8U/ 現場を動かすほどの言語じゃなかったってこと
いずれ忘れ去られていくだろうねw
必死で宣伝するやつはしばらく残るだろうけど
いずれ忘れ去られていくだろうねw
必死で宣伝するやつはしばらく残るだろうけど
203デフォルトの名無しさん
2025/01/19(日) 18:56:23.31ID:9gpOiSYw204デフォルトの名無しさん
2025/01/19(日) 21:30:19.41ID:w17+kMts >>201
単純に考えてその時点で約20年積み上がってからね
単純に考えてその時点で約20年積み上がってからね
205デフォルトの名無しさん
2025/01/19(日) 21:49:11.92ID:9gpOiSYw firefoxシェアほとんど無くなって自立収入ではやっていけなくて
独占禁止法を逃れるためのGoogleからの資金で開発やってるから
基本部分は変えずに独自機能の強化の方に力を入れてるんじゃないかな
独占禁止法を逃れるためのGoogleからの資金で開発やってるから
基本部分は変えずに独自機能の強化の方に力を入れてるんじゃないかな
206デフォルトの名無しさん
2025/01/19(日) 21:58:50.96ID:CccJ4y+9 GoogleはRustでXilemやってるね
207デフォルトの名無しさん
2025/01/25(土) 15:49:13.35ID:6/VZHgMn WindowsのOsStringってなんでUTF-16直接保持しないであんな面倒なことやってるんだろ
208デフォルトの名無しさん
2025/01/25(土) 20:21:28.98ID:X7sHiUyB >>207
Rustは時代に応じて文字列をUTF-8で扱っていてString型には必ず正規なUTF-8が入ることが保証される
しかし外の世界は魑魅魍魎でUnicodeですらないものを扱えないといけない
ファイル内容やネット通信でUTF-8以外が定められてるならencoding_rsを使って明示的に変換しながら読み書きする
Rustは時代に応じて文字列をUTF-8で扱っていてString型には必ず正規なUTF-8が入ることが保証される
しかし外の世界は魑魅魍魎でUnicodeですらないものを扱えないといけない
ファイル内容やネット通信でUTF-8以外が定められてるならencoding_rsを使って明示的に変換しながら読み書きする
209デフォルトの名無しさん
2025/01/25(土) 20:22:51.37ID:X7sHiUyB >>207
一方で問題となるのはファイルシステムのパス等だ
OS環境毎に異なるプログラムは書きたくないからコード上はString型つまりUTF-8で統一して扱いたい
パスがUTF-8自体もしくはUTF-8に1対1で対応するUTF-16等ならプログラム中はString型(=UTF-8)で扱えてうれしい
しかしパス内にはUTF-8に変換できないものも含まれている可能性があるためOsString型(=UTF-8+α)として区別して扱う
一方で問題となるのはファイルシステムのパス等だ
OS環境毎に異なるプログラムは書きたくないからコード上はString型つまりUTF-8で統一して扱いたい
パスがUTF-8自体もしくはUTF-8に1対1で対応するUTF-16等ならプログラム中はString型(=UTF-8)で扱えてうれしい
しかしパス内にはUTF-8に変換できないものも含まれている可能性があるためOsString型(=UTF-8+α)として区別して扱う
210デフォルトの名無しさん
2025/01/25(土) 20:30:47.77ID:X7sHiUyB >>207
OsString型は以下の2つを満たす抽象的な型となっている
正規UTF-8のみを含むならばコスト無しでString型に変換できて逆にString型からは常にOsString型にコスト無しで変換できる
各OS環境で扱える全ての表現と1対1に対応できる(特に正規なUnicodeならばUTF-8に対応する)
この1対1が重要でありUnicodeでない場合も読み書きしての同一性が保証される
これらを満たせば内部の構造は自由でありユーザープログラムがその構造に依存することはなく構造を知る必要もない
OsString型は以下の2つを満たす抽象的な型となっている
正規UTF-8のみを含むならばコスト無しでString型に変換できて逆にString型からは常にOsString型にコスト無しで変換できる
各OS環境で扱える全ての表現と1対1に対応できる(特に正規なUnicodeならばUTF-8に対応する)
この1対1が重要でありUnicodeでない場合も読み書きしての同一性が保証される
これらを満たせば内部の構造は自由でありユーザープログラムがその構造に依存することはなく構造を知る必要もない
211デフォルトの名無しさん
2025/01/25(土) 20:42:28.32ID:X7sHiUyB >>207
Windows OSのUTF-16環境であってもユーザープログラムは環境の違いを気にせず統一して扱えるようにString(=UTF-8)とOsString(=UTF-8+α)で扱う
そのため正規なUTF-16はUTF-8に変換して内部で扱うことになる
しかし実際には任意の16bit列がパス等に現れることも可能なのでUTF-16以外の場合も1対1にOsStringに変換できなければならない
この任意の16bit列にはUTF-16のみの場合も含まれるため区別してWTF-16と呼ぶ
つまりWTF-16=UTF-16+αの関係になっている
あとはそれと1対1に対応するWTF-8=UTF-8+αを上手く定義してやれば前述の性質を満たす内部構造が完成する
以上おわり
Windows OSのUTF-16環境であってもユーザープログラムは環境の違いを気にせず統一して扱えるようにString(=UTF-8)とOsString(=UTF-8+α)で扱う
そのため正規なUTF-16はUTF-8に変換して内部で扱うことになる
しかし実際には任意の16bit列がパス等に現れることも可能なのでUTF-16以外の場合も1対1にOsStringに変換できなければならない
この任意の16bit列にはUTF-16のみの場合も含まれるため区別してWTF-16と呼ぶ
つまりWTF-16=UTF-16+αの関係になっている
あとはそれと1対1に対応するWTF-8=UTF-8+αを上手く定義してやれば前述の性質を満たす内部構造が完成する
以上おわり
212デフォルトの名無しさん
2025/01/25(土) 22:15:52.59ID:6/VZHgMn > Windows OSのUTF-16環境であってもユーザープログラムは環境の違いを気にせず統一して扱えるようにString(=UTF-8)とOsString(=UTF-8+α)で扱う
OsStringの内部エンコーディングがWTF-16だと統一的に扱えないと言いたいの?
OsStringの内部エンコーディングがWTF-16だと統一的に扱えないと言いたいの?
213デフォルトの名無しさん
2025/01/25(土) 22:25:37.00ID:6/VZHgMn どうなっているか、ではなく、なぜそうなっているか
214デフォルトの名無しさん
2025/01/25(土) 23:56:53.55ID:I/LFBEOt String <-> OSString <-> System Native String
右の変換コストよりも左の変換コストを下げることを優先してる
そのほうが標準ライブラリ内部で共通の実装や似通った実装を使いやすい
右の変換コストよりも左の変換コストを下げることを優先してる
そのほうが標準ライブラリ内部で共通の実装や似通った実装を使いやすい
215デフォルトの名無しさん
2025/01/26(日) 00:33:00.73ID:pBUmpNYA System Native Stringは直接取り扱わず、OsStringでラップして扱うのが原則なら
ゼロコスト抽象化の観点から言えば右の変換コストをゼロにするべきでは?
左の変換は必ず行うとは限らないのだから
ゼロコスト抽象化の観点から言えば右の変換コストをゼロにするべきでは?
左の変換は必ず行うとは限らないのだから
216デフォルトの名無しさん
2025/01/26(日) 00:38:12.14ID:pBUmpNYA というか、Windows以外なら実際右の変換が実行時チェック無しのゼロコストになってて、左の変換時にチェックしてるんだから、その説明には合わないじゃないか
どこにそんな説明が書いてあるんだ
どこにそんな説明が書いてあるんだ
217デフォルトの名無しさん
2025/01/26(日) 01:11:13.56ID:cI9cwCw6 >System Native Stringは直接取り扱わず、OsStringでラップして扱うのが原則なら
別にそんな原則ない
OsStringで楽できないなら使わなくてもいいよ
>ゼロコスト抽象化の観点から言えば右の変換コストをゼロにするべきでは?
それは君がマルチプラットフォーム対応のライブラリを維持管理する立場で考えず
Windows中心でしか物事を見てないからだよ
>というか、Windows以外なら実際右の変換が実行時チェック無しのゼロコストになってて、左の変換時にチェックしてるんだから
間違って理解してるね
>どこにそんな説明が書いてあるんだ
公式ドキュメント
別にそんな原則ない
OsStringで楽できないなら使わなくてもいいよ
>ゼロコスト抽象化の観点から言えば右の変換コストをゼロにするべきでは?
それは君がマルチプラットフォーム対応のライブラリを維持管理する立場で考えず
Windows中心でしか物事を見てないからだよ
>というか、Windows以外なら実際右の変換が実行時チェック無しのゼロコストになってて、左の変換時にチェックしてるんだから
間違って理解してるね
>どこにそんな説明が書いてあるんだ
公式ドキュメント
218デフォルトの名無しさん
2025/01/26(日) 13:21:14.47ID:pBUmpNYA ? ちょっと調べたらバレるくだらない嘘つくんだったらもう相手してあげないよ
219デフォルトの名無しさん
2025/01/26(日) 18:31:50.46ID:4FlbzXxO 外部と内部でデータの表現形式が異なる場合
外部に従属するソフトウェアを作ってるのでなければ
可能な限り境界に近いところで変換を行うのは当然の選択
外部に従属するソフトウェアを作ってるのでなければ
可能な限り境界に近いところで変換を行うのは当然の選択
220デフォルトの名無しさん
2025/01/26(日) 19:05:06.86ID:o76t42ts 外部とUTF-8変換する微々たるコストが深刻になる用途があるならば標準ライブラリを使わずに独自に実装すればよいだけの話
標準ライブラリはAsRef<OsStr>やAsRef<Path>でそのままstrやStringが使えるように設計されている
File::openなどでのパス指定の引数もこのAsRef<Path>がトレイト境界となっている
as_で扱える設計が望ましい
標準ライブラリはAsRef<OsStr>やAsRef<Path>でそのままstrやStringが使えるように設計されている
File::openなどでのパス指定の引数もこのAsRef<Path>がトレイト境界となっている
as_で扱える設計が望ましい
221デフォルトの名無しさん
2025/01/26(日) 20:54:35.44ID:aE8oqgD4 >>220
後半の話は全然関係ないじゃん
後半の話は全然関係ないじゃん
222デフォルトの名無しさん
2025/01/26(日) 21:10:37.51ID:o76t42ts223デフォルトの名無しさん
2025/01/26(日) 22:23:21.64ID:b7sQng67224デフォルトの名無しさん
2025/01/27(月) 20:17:02.44ID:cd9tX+Hd >>223
それは違うな
str.as_ref()と参照を読み替えるだけでOsStrになることが重要
そのためOsStrとstrのPartialEqも用意されていてコストなく比較可能
UTF-8のみであればOsStrとstrは一致することが本質
それは違うな
str.as_ref()と参照を読み替えるだけでOsStrになることが重要
そのためOsStrとstrのPartialEqも用意されていてコストなく比較可能
UTF-8のみであればOsStrとstrは一致することが本質
225デフォルトの名無しさん
2025/01/27(月) 23:21:32.51ID:4GlaXCk5 >>224
どれも結果であって原因ではないね
>str.as_ref()と参照を読み替えるだけでOsStrになることが重要
なんで重要なの?
>そのためOsStrとstrのPartialEqも用意されていてコストなく比較可能
OsStrとstrをコストなく比較可能にするために
System Native StringをOsStrにするタイミングでコストがかかってる
コストをかけるタイミングだけの違い
OsStrとstrがコストなく比較可能でなければならない必然性は全くない
どれも結果であって原因ではないね
>str.as_ref()と参照を読み替えるだけでOsStrになることが重要
なんで重要なの?
>そのためOsStrとstrのPartialEqも用意されていてコストなく比較可能
OsStrとstrをコストなく比較可能にするために
System Native StringをOsStrにするタイミングでコストがかかってる
コストをかけるタイミングだけの違い
OsStrとstrがコストなく比較可能でなければならない必然性は全くない
226デフォルトの名無しさん
2025/01/28(火) 15:31:40.54ID:Wlj2eClg ファイル操作なんてI/O負荷の方が高いんだからファイルパスの変換コスト気にする必要あるか?
文字コードが違う環境はwindows以外にも色々あるだろうし。
文字コードが違う環境はwindows以外にも色々あるだろうし。
227デフォルトの名無しさん
2025/01/28(火) 16:58:57.81ID:bBapgORx 直交する話を持ち出しても元の議論には一切影響しませんが
228デフォルトの名無しさん
2025/01/28(火) 20:40:46.87ID:BsfM3c6P 一般的な話として
アスキー非互換かつサロゲートペア問題を抱えるUTF-16は欠陥品なので使用は好ましくない
UTF-16や16bitで扱うシステムはユニコードが16bit時代に決めた古いシステムがほとんどで稀に後に無知者が導入したものがある程度
Rustで文字charは正しく32bitとなっており
文字列strはネット上やファイル内でも推奨されアスキー上位互換のUTF-8になっている
さらにOsStrはそのUTF-8の上位互換となり集合的にはOsStr⊃str⊃アスキーとなっている
それさえ満たせば細かい内部実装は各OS毎に異なってよい
欠陥品のUTF-16は何も満たせずそこでも排除で正しい
アスキー非互換かつサロゲートペア問題を抱えるUTF-16は欠陥品なので使用は好ましくない
UTF-16や16bitで扱うシステムはユニコードが16bit時代に決めた古いシステムがほとんどで稀に後に無知者が導入したものがある程度
Rustで文字charは正しく32bitとなっており
文字列strはネット上やファイル内でも推奨されアスキー上位互換のUTF-8になっている
さらにOsStrはそのUTF-8の上位互換となり集合的にはOsStr⊃str⊃アスキーとなっている
それさえ満たせば細かい内部実装は各OS毎に異なってよい
欠陥品のUTF-16は何も満たせずそこでも排除で正しい
229デフォルトの名無しさん
2025/01/28(火) 22:01:50.93ID:GfuGIG8x また意味のない話を始める
さすが複オジ
さすが複オジ
230デフォルトの名無しさん
2025/01/29(水) 00:32:12.48ID:g0VOlyym OsStringの用途はファイルパスに限られたものではないけど主たる用途で性能が問題にならないというのは今の実装方法が選ばれた理由の一部ではある
231デフォルトの名無しさん
2025/01/29(水) 00:58:47.06ID:0dekUNSK UTF16はメモリとパフォーマンスのバランスが良い
オンメモリの内部形式としては悪くないチョイス
オンメモリの内部形式としては悪くないチョイス
232デフォルトの名無しさん
2025/01/29(水) 02:25:08.58ID:j23j/EVS 別に理由が無いなら無いと言えばいいのに、変にこじつけようとするから
233デフォルトの名無しさん
2025/01/29(水) 07:54:01.03ID:hKDzv5Fb スレを荒し続けているUTF16信者は何がしたいの?
本気でUTF16がいいと信じているならそういうcrateを作って布教すればいい
そんな需要はないと思うが
本気でUTF16がいいと信じているならそういうcrateを作って布教すればいい
そんな需要はないと思うが
234デフォルトの名無しさん
2025/01/29(水) 08:41:13.10ID:UbIZehjy235デフォルトの名無しさん
2025/01/29(水) 10:10:29.66ID:j23j/EVS じゃあせめて「その話」がどのissueでされたかでも貼ってくれないかな
236デフォルトの名無しさん
2025/01/29(水) 10:45:41.27ID:kksSyPk2 甘え過ぎw
237デフォルトの名無しさん
2025/01/29(水) 11:52:20.85ID:j23j/EVS ソース無しの妄想だからそう返すしかないか
238デフォルトの名無しさん
2025/01/29(水) 11:54:18.78ID:LdIOcSwO 複オジはともかく質問者もまだ分かってなかったのか
239デフォルトの名無しさん
2025/01/29(水) 21:48:50.26ID:1MMCze3E わかった
少なくともこうして容易に使えることが最低必要条件
fn OsStr::to_str(&self) -> Option<&str>
したがってOsStrはstrを含む拡張集合
それ以外に制約はなく各OS毎に内部実装は自由
少なくともこうして容易に使えることが最低必要条件
fn OsStr::to_str(&self) -> Option<&str>
したがってOsStrはstrを含む拡張集合
それ以外に制約はなく各OS毎に内部実装は自由
240デフォルトの名無しさん
2025/01/29(水) 22:07:32.91ID:mZdkrOxi それがお前の妄想でないという根拠は?
241デフォルトの名無しさん
2025/01/29(水) 23:10:55.15ID:LNP2TJDd impl AsRef<OsStr> for str
242デフォルトの名無しさん
2025/01/29(水) 23:12:05.86ID:1MMCze3E issueで内部が16ビットではそれが機能しないと
243デフォルトの名無しさん
2025/01/29(水) 23:17:05.07ID:1MMCze3E 機能しないと議論されて決定してる
244デフォルトの名無しさん
2025/01/29(水) 23:58:56.14ID:ogxgEV/3 >>234
219と225は同一人物だぞ
219と225は同一人物だぞ
245デフォルトの名無しさん
2025/01/30(木) 00:13:31.97ID:N5Ev4mKi >>232
特定のプラットフォームに依存するコードはなるべく減らしたいという動機は理解できるんだよね?
可能な限り境界に近いところで外部表現と内部表現の変換を行うことがプラットフォーム依存のコードを減らすことに寄与するというのもわかるよね?
あとは外部の表現形式を内部でも維持したとしてもデメリットを上回る十分なメリットがあるかどうか
OsString/OsStrの主たる用途ではそれだけのメリットはないという判断
メリットがある用途ならOsString/OsStr以外を使いましょうということ
特定のプラットフォームに依存するコードはなるべく減らしたいという動機は理解できるんだよね?
可能な限り境界に近いところで外部表現と内部表現の変換を行うことがプラットフォーム依存のコードを減らすことに寄与するというのもわかるよね?
あとは外部の表現形式を内部でも維持したとしてもデメリットを上回る十分なメリットがあるかどうか
OsString/OsStrの主たる用途ではそれだけのメリットはないという判断
メリットがある用途ならOsString/OsStr以外を使いましょうということ
246デフォルトの名無しさん
2025/01/30(木) 00:26:18.93ID:N5Ev4mKi str <-> OsStrの話は差異をうまく隠蔽しにくくシグニチャに影響しうるというのがあるけど仮に影響しなくても境界で変換するのが望ましいという判断は変わらなかったはず
247デフォルトの名無しさん
2025/01/30(木) 00:39:30.16ID:N5Ev4mKi248デフォルトの名無しさん
2025/01/30(木) 20:50:11.01ID:DEHLqPyE >>247
ありがとう、RFCのほう探せばよかったのか
> ## Wide string representation
> Downsides:
> * These conversions have inconsistent performance characteristics between platforms. (Need to allocate on Windows, but not on Unix.)
やっと納得できる理由が出てきた、これはたしかにな…いやでもなあ、直接OsString/OsStrを触るAPIがもっと充実していれば別にString/strとの変換をそこまで気にする必要もないのでは?
一気にString/str相当のAPIを実装するのも手間だし、OsString/OsStrで何かやりたかったらとりあえずString/strと変換してなんとかしてくれ、だからここではプラットフォームごとの差を付けたくない、って方針だったのかね?
とはいえ、考えられる発展としていろいろな文字列型を一般化する抽象化を作れるはずとかちゃんと書いてあるし、まあまあ納得できる経緯説明ではある
ありがとうね
> // and ultimately other functionality typically found on vectors,
> // but CRUCIALLY NOT as_bytes
…とか書いてるけど、今は普通にas_encoded_bytesとして実装しちゃってるし、結局なんだかよく分からんなあ
ありがとう、RFCのほう探せばよかったのか
> ## Wide string representation
> Downsides:
> * These conversions have inconsistent performance characteristics between platforms. (Need to allocate on Windows, but not on Unix.)
やっと納得できる理由が出てきた、これはたしかにな…いやでもなあ、直接OsString/OsStrを触るAPIがもっと充実していれば別にString/strとの変換をそこまで気にする必要もないのでは?
一気にString/str相当のAPIを実装するのも手間だし、OsString/OsStrで何かやりたかったらとりあえずString/strと変換してなんとかしてくれ、だからここではプラットフォームごとの差を付けたくない、って方針だったのかね?
とはいえ、考えられる発展としていろいろな文字列型を一般化する抽象化を作れるはずとかちゃんと書いてあるし、まあまあ納得できる経緯説明ではある
ありがとうね
> // and ultimately other functionality typically found on vectors,
> // but CRUCIALLY NOT as_bytes
…とか書いてるけど、今は普通にas_encoded_bytesとして実装しちゃってるし、結局なんだかよく分からんなあ
249デフォルトの名無しさん
2025/01/30(木) 23:18:13.05ID:tIaEaP36 >>248
>> * These conversions have inconsistent performance characteristics between platforms
こう書かれてるけどパフォーマンスという点では特にDownsideじゃないと思うんだけどね
今の実装でも発生してるし違う環境用のOsStringを1つのプログラムが実行時に混ぜて扱うわけでもないし
問題なのは内部コードにアロケーションタイミングの違いみたいなのが侵食して分岐が増えること
わかりやすい例としてはOsStr::new(“foo”)が&OsStrを返せなくてCow<OsString, OsStr>になるとか
>> * These conversions have inconsistent performance characteristics between platforms
こう書かれてるけどパフォーマンスという点では特にDownsideじゃないと思うんだけどね
今の実装でも発生してるし違う環境用のOsStringを1つのプログラムが実行時に混ぜて扱うわけでもないし
問題なのは内部コードにアロケーションタイミングの違いみたいなのが侵食して分岐が増えること
わかりやすい例としてはOsStr::new(“foo”)が&OsStrを返せなくてCow<OsString, OsStr>になるとか
250デフォルトの名無しさん
2025/01/30(木) 23:38:58.04ID:dm9clnkq そうだね
だから現状の仕様で正しくて
10年間も問題視されていない
許容できない用途が仮にあるならWindows専用のクレートを作ればいい
だから現状の仕様で正しくて
10年間も問題視されていない
許容できない用途が仮にあるならWindows専用のクレートを作ればいい
251デフォルトの名無しさん
2025/01/30(木) 23:54:08.19ID:tIaEaP36 as_encoded_bytesの話はこれ
https://github.com/rust-lang/libs-team/issues/306
https://github.com/rust-lang/libs-team/issues/306
252デフォルトの名無しさん
2025/01/31(金) 02:25:28.04ID:r6oh8F22 > # Alternatives
> * A split_at(&self, pos: usize) -> (&OsStr, &OsStr) style method. This is ostensibly simpler than a slicing API. But:
> ** The OMG-WTF-8 encoding does not support this. It requires some splits to produce overlapping slices, so that left.len() + right.len() > orig.len(). The encoded bytes on one side of pos might form a valid OMG-WTF-8 string while those on the other side do not.
> *** RFC #2295 that proposes this encoding was merged five years ago (but has not been implemented).
何その絵に描いた餅を喉に詰まらせて死ぬみたいな話……
> * A split_at(&self, pos: usize) -> (&OsStr, &OsStr) style method. This is ostensibly simpler than a slicing API. But:
> ** The OMG-WTF-8 encoding does not support this. It requires some splits to produce overlapping slices, so that left.len() + right.len() > orig.len(). The encoded bytes on one side of pos might form a valid OMG-WTF-8 string while those on the other side do not.
> *** RFC #2295 that proposes this encoding was merged five years ago (but has not been implemented).
何その絵に描いた餅を喉に詰まらせて死ぬみたいな話……
253デフォルトの名無しさん
2025/02/03(月) 22:01:34.61ID:QOxyx9oM ほとんどのシステムはUTF-8以外のファイル名があったら無視かエラーでいいからどうでもええわ
254デフォルトの名無しさん
2025/02/06(木) 13:08:01.16ID:s+irydGq255デフォルトの名無しさん
2025/02/07(金) 13:12:05.02ID:2gmcoh6P LinuxカーネルのメンテナがRustコードを混ぜることを「癌」と呼び、開発者間の対立が激化中 - TechFeed
https://techfeed.io/entries/67a52d4677bdbc0f2990eed9
争え……もっと争え……
https://techfeed.io/entries/67a52d4677bdbc0f2990eed9
争え……もっと争え……
256デフォルトの名無しさん
2025/02/07(金) 21:47:52.74ID:Q2ziLxl4 Linusが一喝するまで収めるの無理やろ
257デフォルトの名無しさん
2025/02/07(金) 22:08:06.65ID:lN1GxRH8 そりゃドライバーはカーネルのインターフェイスに従って動作すべきだから、ラッパーなりで隠蔽すべきなんじゃないんかね。
個別のドライバーのためにカーネル側をカスタマイズするのはインターフェイスを侵食する越権行為だから、そんなのドライバーのラッパー側でやれ、と言いたくなるのはわかる。
個別のドライバーのためにカーネル側をカスタマイズするのはインターフェイスを侵食する越権行為だから、そんなのドライバーのラッパー側でやれ、と言いたくなるのはわかる。
258デフォルトの名無しさん
2025/02/08(土) 23:53:09.62ID:YOrLPiSI >>257
それは君の理解が間違っている
今回はRust製の各デバイスドライバが独自のCバインディングを持つ不便な状況を改善するためのパッチだ
つまりカーネルのC側に手を入れるパッチではなくC側は同じままで変更は一切ない
今回の件は該当部分dma_alloc_coherent()のC⇔Rustの抽象ラッパーのコードを含めるパッチだけだ
それさえメインテナーに拒否されたため大問題になっている
それは君の理解が間違っている
今回はRust製の各デバイスドライバが独自のCバインディングを持つ不便な状況を改善するためのパッチだ
つまりカーネルのC側に手を入れるパッチではなくC側は同じままで変更は一切ない
今回の件は該当部分dma_alloc_coherent()のC⇔Rustの抽象ラッパーのコードを含めるパッチだけだ
それさえメインテナーに拒否されたため大問題になっている
259デフォルトの名無しさん
2025/02/08(土) 23:57:46.16ID:dA8HOTum デバドラはRustで書くのが普通になってきているから
そういう共通ラッパーという形のRustインターフェイスが色々と欲しいのよね
でもそれはいずれカーネル自体のRust化へ繋がる道になるから強く反対してるのよ
そういう共通ラッパーという形のRustインターフェイスが色々と欲しいのよね
でもそれはいずれカーネル自体のRust化へ繋がる道になるから強く反対してるのよ
260デフォルトの名無しさん
2025/02/09(日) 00:59:41.26ID:LgxLklST 普通に考えたら異種の言語が混ざるとデバッグと開発の障害でしかないからどこかで境目は必要
261デフォルトの名無しさん
2025/02/09(日) 06:01:46.16ID:2Eyl255N262デフォルトの名無しさん
2025/02/09(日) 06:47:59.48ID:2n/Om2yv >>260
異種の言語を混ぜる話なんか誰もしていない
今回の事件のパッチも異種の言語を混ぜることなくCのAPIはそのままで
その上にRustの層を作る話
In response, Krummrich explained the Rust for Linux effort is creating Rust code that abstracts the C APIs for all Rust drivers and is maintained by Rust devs. In other words, the C side of the kernel stays the same, and Rust drivers use abstractions to that C code, and that these abstractions are maintained by a team centrally in rust/kernel, all of which is arguably better than drivers having their own individual C bindings.
異種の言語を混ぜる話なんか誰もしていない
今回の事件のパッチも異種の言語を混ぜることなくCのAPIはそのままで
その上にRustの層を作る話
In response, Krummrich explained the Rust for Linux effort is creating Rust code that abstracts the C APIs for all Rust drivers and is maintained by Rust devs. In other words, the C side of the kernel stays the same, and Rust drivers use abstractions to that C code, and that these abstractions are maintained by a team centrally in rust/kernel, all of which is arguably better than drivers having their own individual C bindings.
263デフォルトの名無しさん
2025/02/09(日) 08:50:09.78ID:lISaYUpW 最終的にRust側のメンテナが切れてSNSで晒したりしたのは良くなかったけど
技術的にはC側に迷惑かからないように十分配慮して、出てきた懸念も全て潰したにも関わらず
「とにかくRustに関わりたくないから却下」だったからまぁ切れるのも分かる
技術的にはC側に迷惑かからないように十分配慮して、出てきた懸念も全て潰したにも関わらず
「とにかくRustに関わりたくないから却下」だったからまぁ切れるのも分かる
264デフォルトの名無しさん
2025/02/09(日) 09:09:11.56ID:2Eyl255N >>263
そのコードはcで使えるの?
使えるならともかく、Rust専用ならメンテナーが「そんなののメンテナンスで負担増えるのは嫌だからRustドライバー側でやってくれ」というのもわかる。
Rust for Linuxはこういうのの受け皿にならんのかしらん?
そのコードはcで使えるの?
使えるならともかく、Rust専用ならメンテナーが「そんなののメンテナンスで負担増えるのは嫌だからRustドライバー側でやってくれ」というのもわかる。
Rust for Linuxはこういうのの受け皿にならんのかしらん?
265デフォルトの名無しさん
2025/02/09(日) 09:24:37.62ID:lISaYUpW >>264
受け皿も何もそもそもRust for Linuxでやってる話だし
完全にRustドライバー側でやるからCには影響しないって言ってるわけ
具体的にメンテナンスの負担が増える理由を挙げてくれれば対応策も考えられるけど
「とにかくお前らを邪魔するためなら何でもする」って言ってるからどうしようもない
受け皿も何もそもそもRust for Linuxでやってる話だし
完全にRustドライバー側でやるからCには影響しないって言ってるわけ
具体的にメンテナンスの負担が増える理由を挙げてくれれば対応策も考えられるけど
「とにかくお前らを邪魔するためなら何でもする」って言ってるからどうしようもない
266デフォルトの名無しさん
2025/02/09(日) 10:38:22.52ID:2Eyl255N >>265
メンテナが「Rustは俺のサポート範囲に出てこないでドライバ内で閉じてやってくれ」と言うんだから、当面はrust fir linux でドライバーのテンプレートを作るなりCバインディングサポートライブラリを作るなりすればいいんじゃないんかね。
「Rust製の各デバイスドライバが独自のCバインディングを持つ不便な状況」というのもrust fir linuxでフレームワーク作ってサポートすれば解決するし。
メンテナが「Rustは俺のサポート範囲に出てこないでドライバ内で閉じてやってくれ」と言うんだから、当面はrust fir linux でドライバーのテンプレートを作るなりCバインディングサポートライブラリを作るなりすればいいんじゃないんかね。
「Rust製の各デバイスドライバが独自のCバインディングを持つ不便な状況」というのもrust fir linuxでフレームワーク作ってサポートすれば解決するし。
267デフォルトの名無しさん
2025/02/09(日) 10:58:29.23ID:LgxLklST 互いにブラックボックス内でなにが起ってるのかわからないとすると困るけどね
コレコレこういうコードを書いたらこういう結果が出るはずなのに出ないとコード提示されても
相手が理解できなければこじれるだけ
コレコレこういうコードを書いたらこういう結果が出るはずなのに出ないとコード提示されても
相手が理解できなければこじれるだけ
268デフォルトの名無しさん
2025/02/09(日) 11:17:45.05ID:lISaYUpW >>266
そこで言う当面はってのは3-4年前の状況かな
今はもう準備も整って、Mac用のAsahiLinuxとかAndroidとかフォークしてる勢には普通に入ってる段階
だからそろそろ本体にって話になってるわけだけど、拒絶されるなら彼らはフォークに戻っていくだけだとは思う
そこで言う当面はってのは3-4年前の状況かな
今はもう準備も整って、Mac用のAsahiLinuxとかAndroidとかフォークしてる勢には普通に入ってる段階
だからそろそろ本体にって話になってるわけだけど、拒絶されるなら彼らはフォークに戻っていくだけだとは思う
269デフォルトの名無しさん
2025/02/09(日) 11:46:40.81ID:SqO2AyXb270デフォルトの名無しさん
2025/02/09(日) 12:46:41.58ID:LgxLklST 内部の問題をSNSつかって文句言うなアホ
お前が問題じゃ
お前が問題じゃ
271デフォルトの名無しさん
2025/02/09(日) 13:50:57.72ID:CgBIGE40 ここや他のスレでRustに意味のわからん難癖つける人が
いるのは5ちゃん民度のせいではないのがわかった
いるのは5ちゃん民度のせいではないのがわかった
272デフォルトの名無しさん
2025/02/09(日) 14:20:31.41ID:o7IahYRC C++に似ている部分はC++と同じ程度に批判される
それとハイブリッド的な部分
100%ガソリンで動くか100%電気で動くかどっちかにしろという
それとハイブリッド的な部分
100%ガソリンで動くか100%電気で動くかどっちかにしろという
273デフォルトの名無しさん
2025/02/09(日) 16:28:50.86ID:2Eyl255N >>268
該当コード用のメンテナがRustを使いこなすようになるか、専用のメンテナが別に現れるか、現在のメンテナが引退してRust推進のメンテナに代わるまでじゃない?
これはメンテナの複雑性管理&管理ポリシーの問題だから、普及具合とかはあんまり関係ない。
該当コード用のメンテナがRustを使いこなすようになるか、専用のメンテナが別に現れるか、現在のメンテナが引退してRust推進のメンテナに代わるまでじゃない?
これはメンテナの複雑性管理&管理ポリシーの問題だから、普及具合とかはあんまり関係ない。
274デフォルトの名無しさん
2025/02/09(日) 23:42:15.23ID:yWuHVaf1 色んなものがRust製になっていく中
最後まで残りそうなのが巨大でモノリシックなカーネルとブラウザになりそうだな
最後まで残りそうなのが巨大でモノリシックなカーネルとブラウザになりそうだな
275デフォルトの名無しさん
2025/02/10(月) 00:33:23.09ID:vC/tdt5D 日本の古文漢文は残らないかもしれないが西洋では全部保存していて選択肢が増えるだけ
だから、向こうが世界の中心みたいな空気になる
だから、向こうが世界の中心みたいな空気になる
276デフォルトの名無しさん
2025/02/10(月) 16:53:59.27ID:NarMF1Jn firefoxはまだrust製にはならんの?
277デフォルトの名無しさん
2025/02/10(月) 17:38:09.01ID:cWC6BpGk Linux カーネルは保守的な方針だろ。
数年前まで C89 が前提だったんだぞ。
この速度感で考えるなら Rust 導入なんてまだまだ時期尚早じゃね?
数年前まで C89 が前提だったんだぞ。
この速度感で考えるなら Rust 導入なんてまだまだ時期尚早じゃね?
278デフォルトの名無しさん
2025/02/10(月) 19:19:29.76ID:CLC139Pw Firefoxのレンダリングエンジンは大分前からRust製(Servo)でしょ
279デフォルトの名無しさん
2025/02/10(月) 19:49:30.60ID:+iqVWpvf280デフォルトの名無しさん
2025/02/10(月) 22:57:20.26ID:K8Z0rKJe 錆→癌
281デフォルトの名無しさん
2025/02/10(月) 22:59:57.28ID:u4cWXaji Mozillaお金なさすぎて色々と切り捨てて
RustもRust Foundationへ移管されたもんな
結果的にRustにとっては中核が安定してラッキーになったけどさ
> 2020年にMozillaがすべてのServo開発者を解雇した後、プロジェクトのガバナンスはLinux Foundation Europeに移管された。
> 開発作業は公式には同じGitHubリポジトリで続けられており、プロジェクト自体は完全にボランティア主導です。
RustもRust Foundationへ移管されたもんな
結果的にRustにとっては中核が安定してラッキーになったけどさ
> 2020年にMozillaがすべてのServo開発者を解雇した後、プロジェクトのガバナンスはLinux Foundation Europeに移管された。
> 開発作業は公式には同じGitHubリポジトリで続けられており、プロジェクト自体は完全にボランティア主導です。
282デフォルトの名無しさん
2025/02/10(月) 23:42:58.20ID:vC/tdt5D C/C++その他の知識を蒸留してないわけがないから
コストもコスパもないんだよ
コストもコスパもないんだよ
283デフォルトの名無しさん
2025/02/12(水) 22:57:39.73ID:f3u+GZc6 Pointers (this includes values of reference type) in Rust have two components.
- The pointer's "address" says where in memory the pointer is currently pointing.
- The pointer's "provenance" says where and when the pointer is allowed to access memory.
We have to know not only the address the pointer points to,
but also track which other pointer(s) it is "derived from".
Provenance is useful because it allows powerful optimizations.
Provenance can affect whether a program has undefined behavior.
- The pointer's "address" says where in memory the pointer is currently pointing.
- The pointer's "provenance" says where and when the pointer is allowed to access memory.
We have to know not only the address the pointer points to,
but also track which other pointer(s) it is "derived from".
Provenance is useful because it allows powerful optimizations.
Provenance can affect whether a program has undefined behavior.
284デフォルトの名無しさん
2025/02/16(日) 23:45:42.12ID:aPxhKLjT Rust Tokyo 2024 開催レポート
https://gihyo.jp/article/2024/12/rust-tokyo-2024-report
https://gihyo.jp/article/2024/12/rust-tokyo-2024-report
285デフォルトの名無しさん
2025/02/21(金) 06:52:59.68ID:p6I2RufL edition = "2024" が来たね
286デフォルトの名無しさん
2025/02/25(火) 13:22:53.51ID:XvTpfGzl287デフォルトの名無しさん
2025/02/25(火) 13:50:37.48ID:z5mNSc8+ 生メモリいじくるのが好きな人たちがいきなりrustやれって言われたらきつい気持ちはわかる
どうせメンテーなんてみんなジジイなんだし
どうせメンテーなんてみんなジジイなんだし
288デフォルトの名無しさん
2025/02/25(火) 15:08:04.83ID:Uj70bClX rustが嫌でもやれなんて言ってないが
289デフォルトの名無しさん
2025/02/25(火) 16:25:22.46ID:ixFc3NBv Linusの今回の発言は明瞭で
・Cだけ触りたい人はそのままRustを覚えなくてOK
・その代わりRustについて口を挟む権利はない
・CのAPIをその利用者は自由に使えてメンテナといえども用途用法に口を挟む権利はない
したがって今回もめていた「CのAPIの上にRustのAPIを設ける件」について
Cだけ触りたいメンテナは口を挟む権利はなくパッチを拒否する権利もない、ということ
大方の人々が考えていた通りに決着
・Cだけ触りたい人はそのままRustを覚えなくてOK
・その代わりRustについて口を挟む権利はない
・CのAPIをその利用者は自由に使えてメンテナといえども用途用法に口を挟む権利はない
したがって今回もめていた「CのAPIの上にRustのAPIを設ける件」について
Cだけ触りたいメンテナは口を挟む権利はなくパッチを拒否する権利もない、ということ
大方の人々が考えていた通りに決着
290デフォルトの名無しさん
2025/02/25(火) 17:47:40.26ID:z5mNSc8+ 口を出せない=メンテナ失格ということと受け取った
291デフォルトの名無しさん
2025/02/25(火) 18:17:51.25ID:AwfAD5GP かつてカーネルを正しく修正した結果として (保証してない挙動に依存した) 間違ったアプリケーションのいくつかがまともに動かなくなったことがある。
そのときに Linux の理念としては技術的合理性でユーザー体験を損なってはならないということで間違っているアプリケーションに合わせて互換性が維持された。
ユーザは一方的な利用者に過ぎずカーネルに口出ししないなんてことはない。
絶対に、絶対に、絶対に、カーネルに口出しするよ。
まあそれが良いか悪いかは知らんけどな。
そのときに Linux の理念としては技術的合理性でユーザー体験を損なってはならないということで間違っているアプリケーションに合わせて互換性が維持された。
ユーザは一方的な利用者に過ぎずカーネルに口出ししないなんてことはない。
絶対に、絶対に、絶対に、カーネルに口出しするよ。
まあそれが良いか悪いかは知らんけどな。
292デフォルトの名無しさん
2025/02/25(火) 18:41:48.14ID:XvTpfGzl293デフォルトの名無しさん
2025/02/26(水) 04:07:17.14ID:m7ecN2qb >>290
そういうデマを言うやつがいるとコミュニティー全体が嫌われるから止めるべき。
Linusが言っているのはせいぜい「Rustコードのメンテナじゃないだろ」ぐらいの話で、Linuxメンテナ失格とは全く言っていない。むしろメンテナが自分のメンテナンス範囲をCコードだけにするのを肯定している。
今回の件も、C APIユーザーとしてのRustコードがCコードとは独立した形で別のメンテナにメンテナンスされるんじゃないんかね。
そういうデマを言うやつがいるとコミュニティー全体が嫌われるから止めるべき。
Linusが言っているのはせいぜい「Rustコードのメンテナじゃないだろ」ぐらいの話で、Linuxメンテナ失格とは全く言っていない。むしろメンテナが自分のメンテナンス範囲をCコードだけにするのを肯定している。
今回の件も、C APIユーザーとしてのRustコードがCコードとは独立した形で別のメンテナにメンテナンスされるんじゃないんかね。
294デフォルトの名無しさん
2025/02/26(水) 19:09:22.06ID:ixFc3NBv 着実にRust APIを増やしていこう
脱libc
脱libc
295デフォルトの名無しさん
2025/02/27(木) 14:26:32.38ID:VQNvJTxh Rustは清書用
296デフォルトの名無しさん
2025/02/27(木) 21:14:53.56ID:z3E1gBHI じゃあRoughって言語も要るな
297デフォルトの名無しさん
2025/02/27(木) 23:34:31.56ID:8PL54Hpa Rustはリファクタリングでの安定度も他より極めて高くて開発効率が良いので
まずは雑に書いて後から可読性を上げたり拡張性を上げたり実行効率性を上げたり普通に行われているね
まずは雑に書いて後から可読性を上げたり拡張性を上げたり実行効率性を上げたり普通に行われているね
298デフォルトの名無しさん
2025/02/28(金) 08:15:36.47ID:rekq6zs6 >>296
クレート境界をダックタイピング化した言語が欲しいわ。
クレート境界をダックタイピング化した言語が欲しいわ。
299デフォルトの名無しさん
2025/02/28(金) 12:17:20.44ID:ydxSDGT7300デフォルトの名無しさん
2025/02/28(金) 12:19:57.96ID:3/BLzMLJ >>298
それがC++かもしれませんね
それがC++かもしれませんね
301デフォルトの名無しさん
2025/02/28(金) 22:27:33.84ID:wOIfhSFi >>298
ダックタイピングは各異なる型を統一的に安全に呼び出せる保証が人任せだから使うべきでない
トレイト境界を指定すれば安全が保証されるがそれはトレイトすなわち他言語で言うところのインターフェースに近い存在を仮定していてダックタイピングとは言い難い
ダックタイピングは各異なる型を統一的に安全に呼び出せる保証が人任せだから使うべきでない
トレイト境界を指定すれば安全が保証されるがそれはトレイトすなわち他言語で言うところのインターフェースに近い存在を仮定していてダックタイピングとは言い難い
302デフォルトの名無しさん
2025/02/28(金) 22:51:15.56ID:OmeBN0rd303デフォルトの名無しさん
2025/02/28(金) 23:05:54.93ID:aDguz5rE >>298
Go だと型があるインターフェイスを満たす (満たすつもり) かどうかは明示的な宣言がない。
インターフェイスで定義されたのと同じメソッドを持っていればそのインターフェイスを実装したものと見做される。
Go だと型があるインターフェイスを満たす (満たすつもり) かどうかは明示的な宣言がない。
インターフェイスで定義されたのと同じメソッドを持っていればそのインターフェイスを実装したものと見做される。
304デフォルトの名無しさん
2025/02/28(金) 23:49:44.86ID:wOIfhSFi >>302
まずその共通部分が存在する保証がない
次に共通部分があったとしてもその部分への任意のアクセスメソッドが完全に同一である保証がない
さらにダックタイピングで用意されるメソッドがその共通部分のみにアクセスされる保証がない
共通部分型方式には問題が山積み
一方でトレイト境界を用いると
共通部分を持たなくても安全に共通メソッドを増やすことができる
まずその共通部分が存在する保証がない
次に共通部分があったとしてもその部分への任意のアクセスメソッドが完全に同一である保証がない
さらにダックタイピングで用意されるメソッドがその共通部分のみにアクセスされる保証がない
共通部分型方式には問題が山積み
一方でトレイト境界を用いると
共通部分を持たなくても安全に共通メソッドを増やすことができる
305デフォルトの名無しさん
2025/03/01(土) 00:09:58.46ID:k1Z2LiOl 相変わらず日本語不自由だな
306デフォルトの名無しさん
2025/03/01(土) 08:37:01.16ID:IXdCHP3R 言語によるとしか言えない
その言語にある道具なら、それが便利なら使って問題ないと思う
C++だと標準ライブラリでもダックタイピングをごく普通に使うけど、それに文句を言う人もいないでしょ
その言語にある道具なら、それが便利なら使って問題ないと思う
C++だと標準ライブラリでもダックタイピングをごく普通に使うけど、それに文句を言う人もいないでしょ
307デフォルトの名無しさん
2025/03/01(土) 08:57:54.01ID:fWE8MQKS C++のような古くてダサい言語は比較する意味ないだろ
ダサくて自己責任となるダッチタイピングはお似合いだが
ダサくて自己責任となるダッチタイピングはお似合いだが
308デフォルトの名無しさん
2025/03/01(土) 09:10:51.88ID:J1DdG5rG Rust書きやすいって言ってるのは大体c++から移った人間でそういう人がここに集ってる
GC付きの言語から来たらそこまでは思わない
GC付きの言語から来たらそこまでは思わない
309デフォルトの名無しさん
2025/03/01(土) 09:47:12.55ID:+k5QM36w310デフォルトの名無しさん
2025/03/01(土) 11:24:22.93ID:dZ2eBKvG >>304 に賛成
311デフォルトの名無しさん
2025/03/01(土) 11:25:33.81ID:dZ2eBKvG >>306
便利さと安全性は独立してるからな
便利さと安全性は独立してるからな
312デフォルトの名無しさん
2025/03/01(土) 11:39:32.69ID:LIMOz2LM313デフォルトの名無しさん
2025/03/01(土) 13:10:29.22ID:UmJa16uz A:「〇〇な言語があったらいいのに」
B:「言語によるとしか言えない」
A:「・・・」
B:「言語によるとしか言えない」
A:「・・・」
314デフォルトの名無しさん
2025/03/01(土) 18:25:43.33ID:iHXAtSJa Structural Typingでバイナリ境界を超えて新しいメソッドを追加できるようにしてしまうと衝突時のデメリットがメリットを上回る
Rustにcoherenceがあるのと同じ
Rustにcoherenceがあるのと同じ
315デフォルトの名無しさん
2025/03/01(土) 22:44:41.75ID:qVuk4Ae3 >>308
GCの有無は関係ない
異なる型に対するコードの共通化つまりジェネリクスの話
例えばクラスを使えば同じ基底を継承する派生同士は異なる型でも共通のメソッドやプロパティを使える
しかし同じクラス継承の関係しか扱えないのは制約がキツく各機能毎に継承で多重クラス継承など問題が多い
一方でダッチタイピングや構造的サブタイピングは無関係な型同士でも同じメソッドやプロパティがあるだけで暗黙に使える
しかし互換性がなく偶然同じメソッドやプロパティを持つ同士の利用をエラーにできない問題や暗黙であるため複雑化してくると分かりにくくなるなど問題が多い
そこで機能毎にインターフェース宣言と各型でのインターフェース利用宣言することで諸問題を解決し安全で保守しやすいコードにすることができる
そしてインターフェース名(機能名)が付くことで複数の機能の列挙や関係も宣言できるようになる
Rustではトレイトと称する
GCの有無は関係ない
異なる型に対するコードの共通化つまりジェネリクスの話
例えばクラスを使えば同じ基底を継承する派生同士は異なる型でも共通のメソッドやプロパティを使える
しかし同じクラス継承の関係しか扱えないのは制約がキツく各機能毎に継承で多重クラス継承など問題が多い
一方でダッチタイピングや構造的サブタイピングは無関係な型同士でも同じメソッドやプロパティがあるだけで暗黙に使える
しかし互換性がなく偶然同じメソッドやプロパティを持つ同士の利用をエラーにできない問題や暗黙であるため複雑化してくると分かりにくくなるなど問題が多い
そこで機能毎にインターフェース宣言と各型でのインターフェース利用宣言することで諸問題を解決し安全で保守しやすいコードにすることができる
そしてインターフェース名(機能名)が付くことで複数の機能の列挙や関係も宣言できるようになる
Rustではトレイトと称する
316デフォルトの名無しさん
2025/03/01(土) 22:55:40.18ID:J1DdG5rG llmの3B当たりが吐き出す文章みたいで何を言ってるのか意味不明だな
317デフォルトの名無しさん
2025/03/02(日) 00:27:51.62ID:yD3mmOcG 丸一日調べてこれとか泣けてくるな
ついでにRustのトレイト問題も調べとけよ
ついでにRustのトレイト問題も調べとけよ
318デフォルトの名無しさん
2025/03/02(日) 08:35:08.13ID:Na6YXFfW319デフォルトの名無しさん
2025/03/02(日) 15:32:34.86ID:gL5X58/w >>312
少なくとも君は馬鹿だよ
少なくとも君は馬鹿だよ
320デフォルトの名無しさん
2025/03/02(日) 17:14:53.44ID:ZyJLqNmz わからんけどtypescriptやれば
321デフォルトの名無しさん
2025/03/02(日) 18:00:38.37ID:4Ag5PO4h ま人生一度は型厨になるのは仕方ない
322デフォルトの名無しさん
2025/03/02(日) 18:29:41.49ID:JmtuUveA ダックタイピングは動的か静的かに関わらずデメリットが多すぎて使うべきではないよ
唯一のメリットはinterface宣言が不要だけどこれが害悪を招いちゃう
interface名がないから可読性が悪く保守性も低いのはもちろん利用方法に制限も
唯一のメリットはinterface宣言が不要だけどこれが害悪を招いちゃう
interface名がないから可読性が悪く保守性も低いのはもちろん利用方法に制限も
323デフォルトの名無しさん
2025/03/02(日) 19:02:58.00ID:Q0x8LaN0 静的なダックタイピングにはinterface宣言もinterface名もあるやろ
324デフォルトの名無しさん
2025/03/02(日) 19:17:03.00ID:JmtuUveA325デフォルトの名無しさん
2025/03/02(日) 21:10:41.61ID:JAzjPHpU ubyの罪は重い
326デフォルトの名無しさん
2025/03/02(日) 21:55:50.48ID:4ZT2iFI9 Rustってまだオワコンになってなかったんだな
327デフォルトの名無しさん
2025/03/02(日) 22:12:16.30ID:vq+w9eu/ 構造に頼るよりも、ジェネリック関数でトレイト境界で制約かけた方がRustっぽい気がする。
なんとなく。
なんとなく。
328デフォルトの名無しさん
2025/03/02(日) 22:50:29.46ID:RayeYp/T >>324
上に出てきてるように構造的部分型(Strructural Subtyping)を含めた話
まあ俺もStrructural Subtypingを静的ダックタイピングと呼ぶのは
誤解を招きやすいからあまり賛同しないがそこは問題じゃないでしょ
上に出てきてるように構造的部分型(Strructural Subtyping)を含めた話
まあ俺もStrructural Subtypingを静的ダックタイピングと呼ぶのは
誤解を招きやすいからあまり賛同しないがそこは問題じゃないでしょ
329デフォルトの名無しさん
2025/03/02(日) 23:00:19.17ID:RayeYp/T330デフォルトの名無しさん
2025/03/02(日) 23:17:39.99ID:g7i6E9Hi 共通する構造&機能がある時に
・interface名(Rustではtrait名)を付けて宣言するか
・名付けずにダックタイピングするか
の違いが最も大きい
後者は様々な点で劣る
両者の中間的な位置付けにいるのがGo
Goでは各型に対するinterface実装宣言を省略できてしまうため
省略すると可読性や保守性で劣ることになる
・interface名(Rustではtrait名)を付けて宣言するか
・名付けずにダックタイピングするか
の違いが最も大きい
後者は様々な点で劣る
両者の中間的な位置付けにいるのがGo
Goでは各型に対するinterface実装宣言を省略できてしまうため
省略すると可読性や保守性で劣ることになる
331デフォルトの名無しさん
2025/03/02(日) 23:37:21.79ID:WP5yHTvc その「保守性が劣る」というGoは世間的には保守しやすい言語と言われてるんだが
型で守るという意味ではなく、多くの人に分かりやすい簡易な構文だからという理由でだけど
型で守るという意味ではなく、多くの人に分かりやすい簡易な構文だからという理由でだけど
332デフォルトの名無しさん
2025/03/02(日) 23:44:33.72ID:g7i6E9Hi 各型に対するinterface実装宣言を省略すると可読性や保守性で劣る
その事実以外の話には言及していない
その事実以外の話には言及していない
333デフォルトの名無しさん
2025/03/02(日) 23:54:11.22ID:Na6YXFfW その可読性や保守性の劣化というのは現実にどの程度問題と言われてるの?
「自分は嫌い」というお気持ちじゃなくて?
あるいは「Rustが採用してないから正しい」とか?
「自分は嫌い」というお気持ちじゃなくて?
あるいは「Rustが採用してないから正しい」とか?
334デフォルトの名無しさん
2025/03/02(日) 23:57:06.79ID:JmtuUveA 一般的に必要な情報は暗黙ではなく明記されている方が保守性も高いんだよ
そして多くの人に分かりやすい
省略できるようにしたことはGoの仕様の失策だね
そして多くの人に分かりやすい
省略できるようにしたことはGoの仕様の失策だね
335デフォルトの名無しさん
2025/03/03(月) 00:08:35.40ID:BZGxSOwK Goの場合は「省略できる」というよりも「書かない」というのが正しい
選択できるものではなく、常に書かないものだから
正直自分も好きではないし、だいぶクセのある言語だけど、世間的には受け入れられてる
世の中の人は案外そこまで型にこだわりはなくて、それよりも分かりやすさの方が好まれたりする
それは単に「考えが違う」というだけで、劣るとか優れてるとかいうものではない
(それなら何でGoは人気なの?ってなるし)
選択できるものではなく、常に書かないものだから
正直自分も好きではないし、だいぶクセのある言語だけど、世間的には受け入れられてる
世の中の人は案外そこまで型にこだわりはなくて、それよりも分かりやすさの方が好まれたりする
それは単に「考えが違う」というだけで、劣るとか優れてるとかいうものではない
(それなら何でGoは人気なの?ってなるし)
336デフォルトの名無しさん
2025/03/03(月) 00:11:38.35ID:BZGxSOwK あとRust開発者はC++から来た人が多いと思うけど、C++のテンプレートは思いきり静的ダックタイプでしょ
あれで実際「可読性ガー」ってなるより、便利だと思う場面もあるよね?
あれで実際「可読性ガー」ってなるより、便利だと思う場面もあるよね?
337デフォルトの名無しさん
2025/03/03(月) 00:12:13.08ID:3d6F6ZIn338デフォルトの名無しさん
2025/03/03(月) 00:19:18.53ID:lMbQDSSk structural vs nominalならが安全性はnominalのほうが高いが
保守性や可読性はどちらか一方が常に優れてるわけではないな
Rustはよりメタルに近いOSやライブラリでの利用を重視してるから
安全性の面からより保守的な選択をしてる
coherenceとかもアプリケーション開発者観点だと不必要に厳しい
保守性や可読性はどちらか一方が常に優れてるわけではないな
Rustはよりメタルに近いOSやライブラリでの利用を重視してるから
安全性の面からより保守的な選択をしてる
coherenceとかもアプリケーション開発者観点だと不必要に厳しい
339デフォルトの名無しさん
2025/03/03(月) 00:25:34.97ID:xahbKnOP Goでは省略しちゃうことが多くて、
ある型についてどんなinterface群を満たしているのか、を把握するために、
対象となりそうな全てのinterface群の各々のメソッド群と見比べて、
そのメソッド群すべてを実装していることを確認することで、
ようやくそのinterfaceを満たしていることを把握できる。
たった1行を省略できる利便性(?)のために、大きく可読性が落ちているのは否めない。
ある型についてどんなinterface群を満たしているのか、を把握するために、
対象となりそうな全てのinterface群の各々のメソッド群と見比べて、
そのメソッド群すべてを実装していることを確認することで、
ようやくそのinterfaceを満たしていることを把握できる。
たった1行を省略できる利便性(?)のために、大きく可読性が落ちているのは否めない。
340デフォルトの名無しさん
2025/03/03(月) 01:43:43.47ID:lMbQDSSk gopls implementationとかで確認すればいいよ
341デフォルトの名無しさん
2025/03/03(月) 03:55:57.34ID:US4xw5vs 今どき珍しい真面目なスレッドだな
342デフォルトの名無しさん
2025/03/03(月) 04:54:41.57ID:CkLabMrP >>330
静的ダックタイピングは明示的インターフェイスでも成り立つよ。>336で言うならテンプレートとコンセプトみたいにテンプレート引数の要件を明示するやり方。
>330の言い方なら、
共通する構造&機能がある時に
・共通することを型としてあらかじめ宣言するか
・共通部分を使う時に判別するか
の違いですな。
後者は共通する構造&機能の決定を実際に使用する時まで遅らせることができるので、型の設計時点で決めなくてはならない前者よりも設計の自由度が増す。
Adapterパターンのサポートが充実していれば問題を緩和できるけど、Rustて充実してたっけ?
静的ダックタイピングは明示的インターフェイスでも成り立つよ。>336で言うならテンプレートとコンセプトみたいにテンプレート引数の要件を明示するやり方。
>330の言い方なら、
共通する構造&機能がある時に
・共通することを型としてあらかじめ宣言するか
・共通部分を使う時に判別するか
の違いですな。
後者は共通する構造&機能の決定を実際に使用する時まで遅らせることができるので、型の設計時点で決めなくてはならない前者よりも設計の自由度が増す。
Adapterパターンのサポートが充実していれば問題を緩和できるけど、Rustて充実してたっけ?
343デフォルトの名無しさん
2025/03/03(月) 06:07:05.65ID:YJglMSFw Rustは各型で共通事項をあらかじめ宣言する必要がなく
共通する構造&機能の決定を実際に使用する時まで遅らせて
それらが決まってから後から実装すればよいため
設計の自由度が高いね
共通する構造&機能の決定を実際に使用する時まで遅らせて
それらが決まってから後から実装すればよいため
設計の自由度が高いね
344デフォルトの名無しさん
2025/03/03(月) 07:42:47.63ID:FotMwNUg >>343
あれ?どうやるんだっけ?
あれ?どうやるんだっけ?
345デフォルトの名無しさん
2025/03/03(月) 10:32:52.62ID:CIgoBgkV 他人の書いたコードをインタフェースで抽象化したいときにGoのinterfaceは便利だけど
全て自分で管理する場合は明示的に宣伝した方がいいから選べるようにしてほしい
Javaの普通のinterfaceに加えてGoのinterface同時に使える言語が欲しい
全て自分で管理する場合は明示的に宣伝した方がいいから選べるようにしてほしい
Javaの普通のinterfaceに加えてGoのinterface同時に使える言語が欲しい
346デフォルトの名無しさん
2025/03/03(月) 10:43:32.37ID:wkIAEgPa >>341
少し考えれば理由はわかるはず
少し考えれば理由はわかるはず
347デフォルトの名無しさん
2025/03/03(月) 10:47:29.58ID:US4xw5vs >>346
お?上から来たな
お?上から来たな
348デフォルトの名無しさん
2025/03/03(月) 19:22:07.10ID:niTL8qrF349デフォルトの名無しさん
2025/03/03(月) 19:49:07.58ID:SsAcHPN0 >>343
Rustで共通事項をあらかじめ宣言しないで、共通する構造&機能を統一的に使うのってどうすればいいの?
Rustの型システムを考えると、(既存のコードを変更することなく) 共通する構造&機能を新たに宣言して統一的に扱える、ということだよね?
Rustで共通事項をあらかじめ宣言しないで、共通する構造&機能を統一的に使うのってどうすればいいの?
Rustの型システムを考えると、(既存のコードを変更することなく) 共通する構造&機能を新たに宣言して統一的に扱える、ということだよね?
350デフォルトの名無しさん
2025/03/03(月) 19:56:00.40ID:niTL8qrF リファクタリングをするのに既存のコードを変えないとか矛盾していて意味がわからん
後から共通メソッドをトレイト化すればいいだけだろ
それで困る人はいない
後から共通メソッドをトレイト化すればいいだけだろ
それで困る人はいない
351デフォルトの名無しさん
2025/03/03(月) 21:42:58.25ID:CkLabMrP >>350
例えば標準ライブラリの型との共通部分を統一的に扱いたい場合、標準コードをリファクタリングして新しい共通Traitを切り出すのかしらん?
例えば標準ライブラリの型との共通部分を統一的に扱いたい場合、標準コードをリファクタリングして新しい共通Traitを切り出すのかしらん?
352デフォルトの名無しさん
2025/03/03(月) 22:28:07.80ID:T1gSmlwj Rustでコーディングしたことないお客さんが来てるのか?
標準ライブラリのコード自体を書き換えなんてせずとも普通に行われていることだぞ
標準ライブラリのコード自体を書き換えなんてせずとも普通に行われていることだぞ
353デフォルトの名無しさん
2025/03/03(月) 22:56:04.92ID:trSew6xi354デフォルトの名無しさん
2025/03/03(月) 23:07:24.80ID:trSew6xi 既に存在する共通する構造&機能をポリモーフィックに扱いたい時にGoなら必要なのはインターフェース宣言だけ
既存のインターフェースに合致するものなら新しく宣言する必要もなくそのまま扱える
一方Rustの場合は新しいインターフェースを宣言して既存の構造体に対する新しいインターフェース用の実装をそれぞれ追加で書かない限りは使えない
それで済めばまだいい方で既存のインターフェースに適合させなければいけない場合は既存の構造体をラップする新しい構造体とその実装を逐一全部書いた上にインターフェースに対する実装も別途追加で書かないダメ
特に後者の手間は雪だるま式に膨れ上がるからライブラリのように他人に使わせるコードを書く場合は型の設計時点というより外部APIの設計時点で何を共通の構造&機能として使えるようにするか決めておく必要がある
既存のインターフェースに合致するものなら新しく宣言する必要もなくそのまま扱える
一方Rustの場合は新しいインターフェースを宣言して既存の構造体に対する新しいインターフェース用の実装をそれぞれ追加で書かない限りは使えない
それで済めばまだいい方で既存のインターフェースに適合させなければいけない場合は既存の構造体をラップする新しい構造体とその実装を逐一全部書いた上にインターフェースに対する実装も別途追加で書かないダメ
特に後者の手間は雪だるま式に膨れ上がるからライブラリのように他人に使わせるコードを書く場合は型の設計時点というより外部APIの設計時点で何を共通の構造&機能として使えるようにするか決めておく必要がある
355デフォルトの名無しさん
2025/03/03(月) 23:24:45.25ID:uMOb2Eig > 既存のインターフェースに合致するものなら新しく宣言する必要もなくそのまま扱える
無茶苦茶だな
そんな意図しない全ての型に自動適用される危険な言語は使いたくないわ
Rustは明示的にimplしたものだけに適用されるから安全で使い勝手が良い
無茶苦茶だな
そんな意図しない全ての型に自動適用される危険な言語は使いたくないわ
Rustは明示的にimplしたものだけに適用されるから安全で使い勝手が良い
356デフォルトの名無しさん
2025/03/03(月) 23:29:41.09ID:uMOb2Eig > 一方Rustの場合は新しいインターフェースを宣言して既存の構造体に対する新しいインターフェース用の実装をそれぞれ追加で書かない限りは使えない
そんなことはない
既にimpl Tにあるのだからimpl Trait for Tへ移動させるだけだぞ
> それで済めばまだいい方で既存のインターフェースに適合させなければいけない場合は既存の構造体をラップする新しい構造体とその実装を逐一全部書いた上にインターフェースに対する実装も別途追加で書かないダメ
そんなことはない
既存の構造体にそのままtraitメソッドを増やせる
そんなことはない
既にimpl Tにあるのだからimpl Trait for Tへ移動させるだけだぞ
> それで済めばまだいい方で既存のインターフェースに適合させなければいけない場合は既存の構造体をラップする新しい構造体とその実装を逐一全部書いた上にインターフェースに対する実装も別途追加で書かないダメ
そんなことはない
既存の構造体にそのままtraitメソッドを増やせる
357デフォルトの名無しさん
2025/03/03(月) 23:46:24.87ID:T1gSmlwj Rustでコーディングしたことないお客さんがこのRustスレでRust叩きとは完全に荒らしだ
358デフォルトの名無しさん
2025/03/03(月) 23:56:56.53ID:BZGxSOwK 外部クレートで定義されたトレイトを別の外部クレートの型に対して実装するときはラップが必要じゃない?
要素1つのタプル構造体 (いわゆる new type) で済むような話だけど
インターフェースといってるあたり微妙にズレてる感はあるけど、「ラップする必要がある」という点自体は間違ってない
要素1つのタプル構造体 (いわゆる new type) で済むような話だけど
インターフェースといってるあたり微妙にズレてる感はあるけど、「ラップする必要がある」という点自体は間違ってない
359デフォルトの名無しさん
2025/03/04(火) 00:10:16.92ID:PYBK8h/l >>358
そんな話は誰もしていないよ
今話されているのはこれ
>既に存在する共通する構造&機能を
>新しいインターフェース宣言
複数の型に共通事項が出てきたから
新たなトレイトを作って宣言する話が行われてる
ラップは不要
そんな話は誰もしていないよ
今話されているのはこれ
>既に存在する共通する構造&機能を
>新しいインターフェース宣言
複数の型に共通事項が出てきたから
新たなトレイトを作って宣言する話が行われてる
ラップは不要
360デフォルトの名無しさん
2025/03/04(火) 00:26:54.32ID:ZIAXnU+S 自分の管轄外の型に対して、自分の管轄外のトレイトを実装することだけは、安全のため禁止されているので、自分の型にするためのラップが必要
そんな特殊な例外的ケースを除けばラップはもちろん不要
そんな特殊な例外的ケースを除けばラップはもちろん不要
361デフォルトの名無しさん
2025/03/04(火) 01:25:48.23ID:JpOggS8o 最初からクレート境界を前提とした文脈だろ >>298
文脈読めよ
文脈読めよ
362デフォルトの名無しさん
2025/03/04(火) 01:53:29.12ID:s9xD5Zkr インターフェイス vs. ダックタイピング
ダックタイピングはインターフェイス名がないため可読性が著しく低い
インターフェイス名を使った制約も指定できない
必ずインターフェイス機能を使うべし
ダックタイピングはインターフェイス名がないため可読性が著しく低い
インターフェイス名を使った制約も指定できない
必ずインターフェイス機能を使うべし
363デフォルトの名無しさん
2025/03/04(火) 02:35:55.33ID:VOLcqrY4 >>362
こういう簡潔なまとめ助かる
こういう簡潔なまとめ助かる
364デフォルトの名無しさん
2025/03/04(火) 06:51:13.78ID:r27xQ0ge ダックタイピングは、意味が異なっていても、見かけの構造さえ同じなら、同一視してしまう問題もある
つまりうっかり間違えて用いても、エラーを検出できないため、安全性で劣る。
その見かけの構造さえも、複数の構造を含む場合など、
この型はどのダックタイピングで用いられているのか、読み手が認識するのに時間がかかってしまう。
これらの問題は、各型において、どのダックタイピングに用いられているのかの宣言がないことに起因している。
一方で、interfaceは「各型でどのinterfaceを用いているのか」の宣言があるため、どちらの問題も生じない。
つまりうっかり間違えて用いても、エラーを検出できないため、安全性で劣る。
その見かけの構造さえも、複数の構造を含む場合など、
この型はどのダックタイピングで用いられているのか、読み手が認識するのに時間がかかってしまう。
これらの問題は、各型において、どのダックタイピングに用いられているのかの宣言がないことに起因している。
一方で、interfaceは「各型でどのinterfaceを用いているのか」の宣言があるため、どちらの問題も生じない。
365デフォルトの名無しさん
2025/03/04(火) 09:45:00.92ID:murVybZ/ >>327 奇遇ですね私もです
366デフォルトの名無しさん
2025/03/04(火) 09:47:17.60ID:murVybZ/367デフォルトの名無しさん
2025/03/04(火) 09:50:16.00ID:murVybZ/ >>339
ほんそれ
ほんそれ
368デフォルトの名無しさん
2025/03/04(火) 09:52:06.99ID:murVybZ/ >>342
だからRustは清書用って言われるんだよ
だからRustは清書用って言われるんだよ
369デフォルトの名無しさん
2025/03/04(火) 09:55:52.32ID:murVybZ/370デフォルトの名無しさん
2025/03/04(火) 09:57:24.96ID:murVybZ/ >>353
君こそコーディングしたことないだろ
君こそコーディングしたことないだろ
371デフォルトの名無しさん
2025/03/04(火) 10:00:12.78ID:murVybZ/ ああ 353 は引用なのか?
354 と 353 が同一人物ならきもいが
354 の言ってることが実情
354 と 353 が同一人物ならきもいが
354 の言ってることが実情
372デフォルトの名無しさん
2025/03/04(火) 10:02:37.01ID:murVybZ/ >>356
↑こういうのが混乱を招くからやめれ
↑こういうのが混乱を招くからやめれ
373デフォルトの名無しさん
2025/03/04(火) 10:09:07.10ID:murVybZ/ >>359-360
struct に限ってはそうだね
struct に限ってはそうだね
374デフォルトの名無しさん
2025/03/04(火) 11:30:33.83ID:CoDTmeUS375デフォルトの名無しさん
2025/03/04(火) 11:34:47.54ID:CoDTmeUS >>354
Rustならばラップは必要なく、トレイト宣言をしてトレイト側へメソッドを移動するだけで簡単に済む
impl Foo {
fn method(&self, ...
}
impl Bar {
fn method(&self, ...
}
と複数の型に共通メソッドがあり、それをトレイトで共通に扱えるようにしたければ
// トレイト宣言
trait TraitName {
fn method(&self, ...
}
// トレイト実装
impl TraitName for Foo {
fn method(&self, ...
}
impl TraitName for Bar {
fn method(&self, ...
}
つまり「impl Foo」から
「impl TraitName for Foo」へ移すだけで済む
今回の例なら差分タイプ量は「TraitName for」のみ
Rustならばラップは必要なく、トレイト宣言をしてトレイト側へメソッドを移動するだけで簡単に済む
impl Foo {
fn method(&self, ...
}
impl Bar {
fn method(&self, ...
}
と複数の型に共通メソッドがあり、それをトレイトで共通に扱えるようにしたければ
// トレイト宣言
trait TraitName {
fn method(&self, ...
}
// トレイト実装
impl TraitName for Foo {
fn method(&self, ...
}
impl TraitName for Bar {
fn method(&self, ...
}
つまり「impl Foo」から
「impl TraitName for Foo」へ移すだけで済む
今回の例なら差分タイプ量は「TraitName for」のみ
376デフォルトの名無しさん
2025/03/04(火) 12:03:00.52ID:murVybZ/ struct のときだけね
377デフォルトの名無しさん
2025/03/04(火) 12:04:58.27ID:CoDTmeUS >>376
enumでも他でも同じ
enumでも他でも同じ
378デフォルトの名無しさん
2025/03/04(火) 12:18:25.90ID:murVybZ/ フーン(ニヤニヤ)
379デフォルトの名無しさん
2025/03/04(火) 12:40:56.52ID:uaFJKO3n 伸びてると思ったら複オジの類友が増えただけだったorz
380デフォルトの名無しさん
2025/03/04(火) 12:45:41.91ID:DDDjLfi5 >>376
structに限らず全ての型に対してトレイト実装によりメソッドを増やせるよ
structに限らず全ての型に対してトレイト実装によりメソッドを増やせるよ
381デフォルトの名無しさん
2025/03/04(火) 12:58:42.56ID:WqCDnV/I &str(実質&[u8]でもVec<u8>でも)の末尾に
ゴミで良いから毎回必ず'\0'付ける仕様にしといて欲しかった
ゴミで良いから毎回必ず'\0'付ける仕様にしといて欲しかった
382デフォルトの名無しさん
2025/03/04(火) 13:19:59.57ID:813wXAHn >>381
'\0'に限らず任意の値を終端として型を定義できるZigの勝利だね
'\0'に限らず任意の値を終端として型を定義できるZigの勝利だね
383デフォルトの名無しさん
2025/03/04(火) 13:44:40.50ID:QtwoMD6j やっぱ崩れたかw
346みたいな偉そうな奴がいるとなw
346みたいな偉そうな奴がいるとなw
384デフォルトの名無しさん
2025/03/04(火) 13:53:15.88ID:aSLD1MTT 死んだスレが生き返ることなどない
385デフォルトの名無しさん
2025/03/04(火) 15:55:00.59ID:UUqFoJ1U386デフォルトの名無しさん
2025/03/04(火) 16:14:05.76ID:Xo2DP/vf 異なる方式を混ぜ合わせると両方を協調するのにミスが入りやすい。
ゼロ終端方式とファットポインタ方式に常に矛盾が生じないように維持するくらいなら必要なときに変換するほうがマシ。
ゼロ終端方式とファットポインタ方式に常に矛盾が生じないように維持するくらいなら必要なときに変換するほうがマシ。
387デフォルトの名無しさん
2025/03/04(火) 16:16:40.93ID:HZGad4Nn >>375
>つまり「impl Foo」から
>「impl TraitName for Foo」へ移すだけで済む
>今回の例なら差分タイプ量は「TraitName for」のみ
フィボナッチみたいなトイコードしか書いたことがないと
こんな意味のない破壊的な変更を無自覚に書いてしまうんだな
>つまり「impl Foo」から
>「impl TraitName for Foo」へ移すだけで済む
>今回の例なら差分タイプ量は「TraitName for」のみ
フィボナッチみたいなトイコードしか書いたことがないと
こんな意味のない破壊的な変更を無自覚に書いてしまうんだな
388デフォルトの名無しさん
2025/03/04(火) 16:28:38.12ID:c62Mny0R >>381
"abc"の部分文字列"ab"を参照する時に元の文字列が"ab\0"になるけどいい?
"abc"の部分文字列"ab"を参照する時に元の文字列が"ab\0"になるけどいい?
389デフォルトの名無しさん
2025/03/04(火) 17:42:39.60ID:uxSCDJ2e >>381
&strはStringや(別の)strの任意の部分文字列を参照する型
もし末尾に'\0'を付加すると次の文字を'\0'で上書きするため原理的に不可能
Rustで'\0'終端文字列はCStr/CStringを使う
リテラルならc"ABCDE"
ちなみにC/C++で部分文字列を扱うと
同じ問題が起きるため別領域へコピーして末尾'\0'を付加する
さらに途中に'\0'を置くと千切れる問題や
長さを知るために'\0'まで要走査の問題があるので
Rustのstr/Stringでは'\0'終端文字列としていない
&strはStringや(別の)strの任意の部分文字列を参照する型
もし末尾に'\0'を付加すると次の文字を'\0'で上書きするため原理的に不可能
Rustで'\0'終端文字列はCStr/CStringを使う
リテラルならc"ABCDE"
ちなみにC/C++で部分文字列を扱うと
同じ問題が起きるため別領域へコピーして末尾'\0'を付加する
さらに途中に'\0'を置くと千切れる問題や
長さを知るために'\0'まで要走査の問題があるので
Rustのstr/Stringでは'\0'終端文字列としていない
390デフォルトの名無しさん
2025/03/04(火) 17:44:45.66ID:uxSCDJ2e391デフォルトの名無しさん
2025/03/04(火) 18:39:12.83ID:gw3gBjaL >>389
いつの時代のC++だよw
いつの時代のC++だよw
392デフォルトの名無しさん
2025/03/04(火) 23:48:22.54ID:qtalPCL7 >>391
昔も今もC + +のs t r i n g関数s u b s t r (開始位置, サイズ)は別の領域を確保してコピーだよ
\0終端するためにコピーは避けられないね
ちなみにライブラリ実装依存だろうけど
毎回ヒープ領域確保はコストが大きすぎるため
結果が15文字までならば静的に各16バイトの領域を事前に持っていてそこを使って頑張っていたりはする
でもそこへのコピーは避けられないね
昔も今もC + +のs t r i n g関数s u b s t r (開始位置, サイズ)は別の領域を確保してコピーだよ
\0終端するためにコピーは避けられないね
ちなみにライブラリ実装依存だろうけど
毎回ヒープ領域確保はコストが大きすぎるため
結果が15文字までならば静的に各16バイトの領域を事前に持っていてそこを使って頑張っていたりはする
でもそこへのコピーは避けられないね
393デフォルトの名無しさん
2025/03/05(水) 00:13:26.12ID:cALyDE8e394デフォルトの名無しさん
2025/03/05(水) 00:15:45.55ID:+YosNdhq >>391
C++ の中だけでやるなら今は range を中心にライブラリが編成されてるから文字列の一部を取り出すのにコピーは必要ないしゼロ終端も不要だが、ここでは (古いライブラリなり API なりの都合で) ゼロ終端が必要になったときはという前提の話をしてるんだぞ。
外の世界は言語の都合に合わせて勝手に変わってくれたりはしない。
モダンな C++ を使っていても外と繋がる境界では外の都合に合わせなきゃしょうがないんだ。
C++ の中だけでやるなら今は range を中心にライブラリが編成されてるから文字列の一部を取り出すのにコピーは必要ないしゼロ終端も不要だが、ここでは (古いライブラリなり API なりの都合で) ゼロ終端が必要になったときはという前提の話をしてるんだぞ。
外の世界は言語の都合に合わせて勝手に変わってくれたりはしない。
モダンな C++ を使っていても外と繋がる境界では外の都合に合わせなきゃしょうがないんだ。
395デフォルトの名無しさん
2025/03/05(水) 01:23:27.50ID:zAVGaXEW396デフォルトの名無しさん
2025/03/05(水) 01:31:23.03ID:+YosNdhq397デフォルトの名無しさん
2025/03/05(水) 01:45:32.35ID:+YosNdhq398デフォルトの名無しさん
2025/03/05(水) 03:17:39.16ID:nw/EeQ+y >>389
CString::new(string)で0終端してくれて
c"ABCDE"は最初から0終端されてて便利だね
// 固定文字列は c"..." リテラルで作成
let c1 = c"ABCDE"; // &CStr型
// 文字列を組み立てる場合はStringで作成しておいて
let s = ('A'..='E').collect::<String>();
// そのStringを消費して0終端してくれる (途中に0があるとError)
let c2 = CString::new(s).unwrap();
// 左右どちらも &CStr型の c"ABCDE" で一致
assert_eq!(c1, &*c2);
CString::new(string)で0終端してくれて
c"ABCDE"は最初から0終端されてて便利だね
// 固定文字列は c"..." リテラルで作成
let c1 = c"ABCDE"; // &CStr型
// 文字列を組み立てる場合はStringで作成しておいて
let s = ('A'..='E').collect::<String>();
// そのStringを消費して0終端してくれる (途中に0があるとError)
let c2 = CString::new(s).unwrap();
// 左右どちらも &CStr型の c"ABCDE" で一致
assert_eq!(c1, &*c2);
399デフォルトの名無しさん
2025/03/05(水) 10:19:35.16ID:wPTO1w2Q このスレいつからワッチョイとかIDとか無くなった?
400デフォルトの名無しさん
2025/03/05(水) 11:21:05.48ID:yWF1u2Fm 隔離スレにそんなもん必要ねえよ
401デフォルトの名無しさん
2025/03/05(水) 12:18:55.35ID:8D9MhhW+ ワッチョイとかIDがあると自演するのに不便だからいらない
402デフォルトの名無しさん
2025/03/05(水) 12:31:30.46ID:wPTO1w2Q 本スレどこ?
403デフォルトの名無しさん
2025/03/05(水) 12:35:55.74ID:yWF1u2Fm まともに他人の意見を尊重できる人たちが集まり議論が行われればそこが本スレになるだろうが、期待するだけ無駄じゃろ
404デフォルトの名無しさん
2025/03/05(水) 22:19:07.11ID:GGwXatao405デフォルトの名無しさん
2025/03/05(水) 23:13:15.92ID:tlB2HjRS >>402
DかZにおいで
DかZにおいで
406デフォルトの名無しさん
2025/03/06(木) 07:37:15.29ID:B42CPAD4 自分でNULL終端しようとする老害は
安全を保証する型システムと相性悪い
安全を保証する型システムと相性悪い
407デフォルトの名無しさん
2025/03/06(木) 15:59:09.42ID:WqcKZUUD [c_char]が[u8]だと思ってたら[i8]だったでごじゃる
408デフォルトの名無しさん
2025/03/06(木) 17:21:49.66ID:hP34p9/Z c_charは処理系依存っぽいからu8かi8に決め打ちするならc_ucharかc_scharにキャストした方がいい
ターゲット変更した時にコンパイラに文句言われる可能性がある
ターゲット変更した時にコンパイラに文句言われる可能性がある
409デフォルトの名無しさん
2025/03/06(木) 18:39:39.08ID:c+X1ur2G \0終端じゃないと困るってcやc++から来た人だろ…
老害っているんだな
老害っているんだな
410デフォルトの名無しさん
2025/03/06(木) 19:04:31.26ID:lbAGNheW411デフォルトの名無しさん
2025/03/06(木) 23:08:05.29ID:/xPeDHQy >>398
あとはCString/CStrからの変換だな
&[u8]として扱えるのは当然として
// CStringを消費して Stringとして扱う (非UTF8だとError)
let c = CString::new([b'A', b'B', b'C', b'D', b'E']).unwrap();
assert_eq!(c.into_string().unwrap(), String::from("ABCDE"));
// &Cstrを &strとして扱う (非UTF8だとError)
assert_eq!(c"ABCDE".to_str().unwrap(), "ABCDE");
// &Cstrを Cow<str> にする
// UTF8なら &strとして扱い Cow::Borrowed(&str)型
let cow = c"ABCDE".to_string_lossy();
assert_eq!(cow, Cow::<str>::Borrowed("ABCDE"));
// 非UTF8部分があると U+FFFD置換Stringにして Cow::Owned(String)型
let cow = c"AB\xccDE".to_string_lossy();
assert_eq!(cow, Cow::<str>::Owned(String::from("AB\u{FFFD}DE")));
いずれも'\0'の存在は気にしなくていい
あとはCString/CStrからの変換だな
&[u8]として扱えるのは当然として
// CStringを消費して Stringとして扱う (非UTF8だとError)
let c = CString::new([b'A', b'B', b'C', b'D', b'E']).unwrap();
assert_eq!(c.into_string().unwrap(), String::from("ABCDE"));
// &Cstrを &strとして扱う (非UTF8だとError)
assert_eq!(c"ABCDE".to_str().unwrap(), "ABCDE");
// &Cstrを Cow<str> にする
// UTF8なら &strとして扱い Cow::Borrowed(&str)型
let cow = c"ABCDE".to_string_lossy();
assert_eq!(cow, Cow::<str>::Borrowed("ABCDE"));
// 非UTF8部分があると U+FFFD置換Stringにして Cow::Owned(String)型
let cow = c"AB\xccDE".to_string_lossy();
assert_eq!(cow, Cow::<str>::Owned(String::from("AB\u{FFFD}DE")));
いずれも'\0'の存在は気にしなくていい
412デフォルトの名無しさん
2025/03/07(金) 23:55:18.15ID:nJW2jcZy &selfで読み取り参照のまま、別の型の読み取り参照に読み替えるのはもちろん、
selfで消費してしまい、確保メモリをそのまま活用して、別の型に読み替えるのが効率ええんやな
selfで消費してしまい、確保メモリをそのまま活用して、別の型に読み替えるのが効率ええんやな
413デフォルトの名無しさん
2025/03/08(土) 09:38:56.99ID:y8OZgzU7 >> http://mevius.5ch.net/test/read.cgi/tech/1708677472/784
Ruby (が採用している CSI 方式) での文字列オブジェクトはそれぞれどの文字コードであるかの情報を持っていて処理系は各文字コードの処理方法を知っている。
つまり文字列を扱うあらゆる箇所で様々な文字コードごとの処理をやってる。
それが先進的か?
文字コードが統一できない世界でも「なんとかする」方法だろ。
内部的には統一した文字コードで扱い、様々な文字コードを扱いたければ入出力の段階で変換するというのが Rust 的なスタイルを含む現代的なプログラムが目指すところで、そのために Unicode はあるゆる文字コードから「変換可能であること」を指向してる。
とはいえ、これが先進的と言えるわけでもなく総合的に考えて現代の事情に合うやり方ってだけだ。
様々な文字コードの変なところも含めて Unicode に取り込んでいるのは既存のテキストのデータを (情報を失うことなく) 移行できなきゃ Unicode に統一されていかないからで、同じ駄目なら統一されていないことによる駄目さより統一されてる駄目さのほうがかなりマシという価値観による。
いろんな駄目さに個別に対処するのではなくデカい駄目に皆で立ち向かう。
人間の言語が数千年・数万年の歴史的経緯の積み重ねなので文字も駄目だし文字コードも駄目。
根本的に駄目なものはどう扱ったって駄目。
綺麗なやり方で扱わないのは綺麗なやり方が存在しないから。。
Ruby (が採用している CSI 方式) での文字列オブジェクトはそれぞれどの文字コードであるかの情報を持っていて処理系は各文字コードの処理方法を知っている。
つまり文字列を扱うあらゆる箇所で様々な文字コードごとの処理をやってる。
それが先進的か?
文字コードが統一できない世界でも「なんとかする」方法だろ。
内部的には統一した文字コードで扱い、様々な文字コードを扱いたければ入出力の段階で変換するというのが Rust 的なスタイルを含む現代的なプログラムが目指すところで、そのために Unicode はあるゆる文字コードから「変換可能であること」を指向してる。
とはいえ、これが先進的と言えるわけでもなく総合的に考えて現代の事情に合うやり方ってだけだ。
様々な文字コードの変なところも含めて Unicode に取り込んでいるのは既存のテキストのデータを (情報を失うことなく) 移行できなきゃ Unicode に統一されていかないからで、同じ駄目なら統一されていないことによる駄目さより統一されてる駄目さのほうがかなりマシという価値観による。
いろんな駄目さに個別に対処するのではなくデカい駄目に皆で立ち向かう。
人間の言語が数千年・数万年の歴史的経緯の積み重ねなので文字も駄目だし文字コードも駄目。
根本的に駄目なものはどう扱ったって駄目。
綺麗なやり方で扱わないのは綺麗なやり方が存在しないから。。
414デフォルトの名無しさん
2025/03/08(土) 17:22:21.85ID:O70yvsau AIで3行程度にまとめてから書き込んてくれる?
415デフォルトの名無しさん
2025/03/08(土) 22:27:54.11ID:EzMMiepo ネットもファイルもUTF-8で統一しちゃうのが吉
外部のcharset=Shift_JISとか扱わないといけない分だけencoding_rs _io
外部のcharset=Shift_JISとか扱わないといけない分だけencoding_rs _io
416デフォルトの名無しさん
2025/03/10(月) 03:27:00.75ID:SacQDf18417デフォルトの名無しさん
2025/03/10(月) 08:58:57.66ID:CNm9iAF0 crateとかdocsの事考えるとそんな単純な話じゃないんだよ
実践的なコード描いてない人か
実践的なコード描いてない人か
418デフォルトの名無しさん
2025/03/10(月) 12:17:05.04ID:BVl3qR6K 歴史的にマクロ=悪の固定観念もってるプログラマも多い気がするから
macro_rules!()はtemplate!()に改名した方がいいかもしれんね
impl Traitとかマクロ使わないと面倒な場合が多い
macro_rules!()はtemplate!()に改名した方がいいかもしれんね
impl Traitとかマクロ使わないと面倒な場合が多い
419デフォルトの名無しさん
2025/03/11(火) 15:16:53.15ID:mrtJh8pq Rustってfor_eachのclosureのなかでbreak出来ないのです
420デフォルトの名無しさん
2025/03/11(火) 16:23:47.17ID:GvJGmymX >>418
名前は Scheme の syntax-rules から持ってきたんだと思う。
名前は Scheme の syntax-rules から持ってきたんだと思う。
421デフォルトの名無しさん
2025/03/11(火) 16:37:58.97ID:FiOBTiHo422デフォルトの名無しさん
2025/03/11(火) 19:10:27.26ID:iBVYkGzp >>419
クロージャは(変数をキャプチャできる)関数の一種なのでbreakなんて概念はない
for_eachはクロージャを引数に取る高階関数なのでbreakなんて概念はない
次々とやってくる「全ての各エレメント」に対して何度もそのクロージャを呼び出すだけなのでクロージャで早期returnしようとしても全てのエレメントに対して処理される
やりたいことはおそらく次々とやってくるエレメントの途中で処理を終えたいのだろうからfor_eachではなく以下のイテレーターメソッドを使う
クロージャは(変数をキャプチャできる)関数の一種なのでbreakなんて概念はない
for_eachはクロージャを引数に取る高階関数なのでbreakなんて概念はない
次々とやってくる「全ての各エレメント」に対して何度もそのクロージャを呼び出すだけなのでクロージャで早期returnしようとしても全てのエレメントに対して処理される
やりたいことはおそらく次々とやってくるエレメントの途中で処理を終えたいのだろうからfor_eachではなく以下のイテレーターメソッドを使う
423デフォルトの名無しさん
2025/03/11(火) 19:12:23.50ID:iBVYkGzp >>419
中断条件を分離できるならばイテレータを返してくれる(そして他のイテレータメソッドを繋げられる)以下を使うのがベター
take(n) 最初のn個だけ
while_some() OptionがSomeの間だけ
take_while(f) fが真の間だけ
その後に続きを漏れなく使いたいときは
take_while_ref_inclusive(f)
take_while_ref(f)
peeking_take_while(f)
map_while(f) 変換しながらfがSomeの間だけ
scan(init_state, f) 状態を持ちながら変換しながらfがSomeの間だけ
いきなり結果を(ResultやOptionやControlFlowで)返したいならば
try_for_each(f) fが中断(ErrorやNoneやBreak)になったら終えてそれを返す 中断なければ()を返す
try_fold(init_state, f) 状態を持ちながら同上 中断なければ状態を返す
try_collect() iterとitertoolsで仕様が異なりiter版はnightlyのみだけど 中断になるまでをcollect
中断条件を分離できるならばイテレータを返してくれる(そして他のイテレータメソッドを繋げられる)以下を使うのがベター
take(n) 最初のn個だけ
while_some() OptionがSomeの間だけ
take_while(f) fが真の間だけ
その後に続きを漏れなく使いたいときは
take_while_ref_inclusive(f)
take_while_ref(f)
peeking_take_while(f)
map_while(f) 変換しながらfがSomeの間だけ
scan(init_state, f) 状態を持ちながら変換しながらfがSomeの間だけ
いきなり結果を(ResultやOptionやControlFlowで)返したいならば
try_for_each(f) fが中断(ErrorやNoneやBreak)になったら終えてそれを返す 中断なければ()を返す
try_fold(init_state, f) 状態を持ちながら同上 中断なければ状態を返す
try_collect() iterとitertoolsで仕様が異なりiter版はnightlyのみだけど 中断になるまでをcollect
424デフォルトの名無しさん
2025/03/11(火) 21:21:23.37ID:jytsrQer 要点をまとめる力って大事だな
425デフォルトの名無しさん
2025/03/12(水) 00:42:42.49ID:XRphkku6 クロージャが関数の一種なのか関数がクロージャの一種なのかそれが問題だ
426デフォルトの名無しさん
2025/03/12(水) 02:15:27.24ID:ck/kStOw 大雑把な説明としては、
クロージャは(キャプチャがある)関数の一種、
関数は(キャプチャのない)クロージャの一種、
と言っても構わないが、
実際には、
Fnで使えるのはsafeなfnのみ、
fnにコアースできるのはキャプチャのないFnのみ、
といった関係。
クロージャは(キャプチャがある)関数の一種、
関数は(キャプチャのない)クロージャの一種、
と言っても構わないが、
実際には、
Fnで使えるのはsafeなfnのみ、
fnにコアースできるのはキャプチャのないFnのみ、
といった関係。
427デフォルトの名無しさん
2025/03/12(水) 12:58:04.29ID:7dQQHGES クロージャと言えばFn(&mut T) -> ()みたいな定義が許容されてるのはなんでなの?
間違った使い方をすればownershipルールに違反してエラーにはなるだろうけどFnMut(&mut T)->()にするよう弾いたほうがよくない?
間違った使い方をすればownershipルールに違反してエラーにはなるだろうけどFnMut(&mut T)->()にするよう弾いたほうがよくない?
428デフォルトの名無しさん
2025/03/12(水) 13:35:41.11ID:aNDBBqWo429デフォルトの名無しさん
2025/03/12(水) 16:12:44.05ID:FLZx408U 試しに見てみたがリファレンスと同じ情報の劣化版なので見る価値なし(個人の感想です)
>try_for_each(): Iterator<T> -> (T -> Try<B=()>) -> Try<B=()>
>失敗するかもしれない関数について for_each 的な操作を行う関数。
>これといって特記すべきこともないが、今まで for で書いていたものがシンプルにできる、ありがたい関数である。
>もし成功時にも何らかの意味ある値を返したいのであれば、 try_fold を使うべきである。
例えばtry_for_eachの最後の行の解説とか
ツッコミどころが盛り沢山
>try_for_each(): Iterator<T> -> (T -> Try<B=()>) -> Try<B=()>
>失敗するかもしれない関数について for_each 的な操作を行う関数。
>これといって特記すべきこともないが、今まで for で書いていたものがシンプルにできる、ありがたい関数である。
>もし成功時にも何らかの意味ある値を返したいのであれば、 try_fold を使うべきである。
例えばtry_for_eachの最後の行の解説とか
ツッコミどころが盛り沢山
430デフォルトの名無しさん
2025/03/12(水) 18:16:35.74ID:ck/kStOw >>427
クロージャの引数は、毎回変わるのだから常に何をしても自由であり、引数を消費してしまおうが、可変参照があって参照先を書き換えようが自由。
クロージャで制限がありうるのはキャプチャした値のみ。
Fnはキャプチャした値がある時に、それを読み取り参照しようが自由だが、書き換えたり消費したりはできないという意味。
FnMutはキャプチャした値を読み取り参照しようが書き換えようが自由だが、消費してはいけないという意味。
FnOnceはキャプチャした値を消費しようが書き換えようが参照しようが自由という意味。
キャプチャ値を消費をしてもしなくても自由ということは、2回以上の実行は不可で、そのクロージャの実行は1回だけという意味、だからFnOnceという名前。
トレイト間の関係は「Fn: FnMut」かつ「FnMut: FnOnce」、つまりFnOnceは他の最上位のスーパートレイト。
集合で見ると、FnOnce⊃FnMut⊃Fnとなり、Fnが最も制限がきつくて集合としては小さい。
蛇足だが、fnはさらに制限がきつくて読み取り参照キャプチャすら許容されないから、Fn⊃(safeなfnの集合)となって、safeなfnは任意のクロージャの位置で代わりに使える。
例えば、LazyLock::new(f: F)のような、1回しか指定クロージャが実行されない高階関数では、最も緩いFnOnceでトレイト境界「F: FnOnce」を指定できる。
逆に何度もクロージャが実行されるIterator::fold(init, f: F )では、初期値initは消費されるが、fがキャプチャした値が消費されては困るためFnOnceではダメで「F: FnMut」となり、fの引数二つは毎回消費できる。
クロージャの引数は、毎回変わるのだから常に何をしても自由であり、引数を消費してしまおうが、可変参照があって参照先を書き換えようが自由。
クロージャで制限がありうるのはキャプチャした値のみ。
Fnはキャプチャした値がある時に、それを読み取り参照しようが自由だが、書き換えたり消費したりはできないという意味。
FnMutはキャプチャした値を読み取り参照しようが書き換えようが自由だが、消費してはいけないという意味。
FnOnceはキャプチャした値を消費しようが書き換えようが参照しようが自由という意味。
キャプチャ値を消費をしてもしなくても自由ということは、2回以上の実行は不可で、そのクロージャの実行は1回だけという意味、だからFnOnceという名前。
トレイト間の関係は「Fn: FnMut」かつ「FnMut: FnOnce」、つまりFnOnceは他の最上位のスーパートレイト。
集合で見ると、FnOnce⊃FnMut⊃Fnとなり、Fnが最も制限がきつくて集合としては小さい。
蛇足だが、fnはさらに制限がきつくて読み取り参照キャプチャすら許容されないから、Fn⊃(safeなfnの集合)となって、safeなfnは任意のクロージャの位置で代わりに使える。
例えば、LazyLock::new(f: F)のような、1回しか指定クロージャが実行されない高階関数では、最も緩いFnOnceでトレイト境界「F: FnOnce」を指定できる。
逆に何度もクロージャが実行されるIterator::fold(init, f: F )では、初期値initは消費されるが、fがキャプチャした値が消費されては困るためFnOnceではダメで「F: FnMut」となり、fの引数二つは毎回消費できる。
431デフォルトの名無しさん
2025/03/12(水) 21:01:47.70ID:BjrFEung >>428
一番重要な独自の分類方法を最初にまとめて書かないからクソ記事になる
一番重要な独自の分類方法を最初にまとめて書かないからクソ記事になる
432デフォルトの名無しさん
2025/03/12(水) 21:52:39.29ID:m5dRvsnl433デフォルトの名無しさん
2025/03/13(木) 02:14:17.95ID:RNV6T1tE なんでtypescriptのソースをrustに移植できないの?
プログラムなんだから不可能ってことはないでしょ?
プログラムなんだから不可能ってことはないでしょ?
434デフォルトの名無しさん
2025/03/13(木) 04:38:06.94ID:RfjEKuUj >>433
出来ることと効果的に出来ることは別というシンプルな話。
出来ることと効果的に出来ることは別というシンプルな話。
435デフォルトの名無しさん
2025/03/13(木) 07:14:12.10ID:93baVECr TypeScriptのコンパイラはその利用の多さからもっと高速さを狙ってC/C++・Rust・ZigなどのGC非依存言語で書く価値がありブラウザ上Wasm実行の観点からもそうすべきだったが
担当者の能力不足のため遅いGC依存言語から速いGC依存言語へ書き換えるだけで終わってしまった
そのため早くもWasmでの実行が遅いという指摘が出ている
担当者の能力不足のため遅いGC依存言語から速いGC依存言語へ書き換えるだけで終わってしまった
そのため早くもWasmでの実行が遅いという指摘が出ている
436デフォルトの名無しさん
2025/03/13(木) 07:27:03.63ID:gAHIvnwi 要するに、GC依存症の人にはrustは過ぎた物って事か。
437デフォルトの名無しさん
2025/03/13(木) 07:45:56.77ID:FfpB+bg4 アンダース・ヘルスバーグが能力不足なんて話があるかいな。
Rust や C# が得意なのにあえて Go を選定したんだぞ。
WASM 上で遅いのは WASM のほうの性能不足だ。
Go の優秀さはランタイムサポートの作り込みにあり、それが十全に発揮されない環境ではそりゃ遅い。
Rust や C# が得意なのにあえて Go を選定したんだぞ。
WASM 上で遅いのは WASM のほうの性能不足だ。
Go の優秀さはランタイムサポートの作り込みにあり、それが十全に発揮されない環境ではそりゃ遅い。
438デフォルトの名無しさん
2025/03/13(木) 07:53:47.23ID:TRbLLvdR Rustで書けばwasmの件も問題なかったわけだからGoという中途半端な言語を選んだ選択ミスだな~
439デフォルトの名無しさん
2025/03/13(木) 08:52:01.37ID:FfpB+bg4 WASM ってそんなに絶対に考慮が必要なほど重要なプラットフォームか?
コンパイラを WASM 上で動かそうとする判断をするやつがいたらそのほうが選択ミスだろ。
TypeScript からの移植という前提があったから Go が比較的やりやすいと判断された。
関数単位でほとんど一対一のベタ移植を出来てる。
コンパイラを WASM 上で動かそうとする判断をするやつがいたらそのほうが選択ミスだろ。
TypeScript からの移植という前提があったから Go が比較的やりやすいと判断された。
関数単位でほとんど一対一のベタ移植を出来てる。
440デフォルトの名無しさん
2025/03/13(木) 09:41:53.87ID:9FAKkD2W GC言語で書かれたプログラムをRustに移植しようとするとプログラムの構造を大幅に変えなきゃいけないからな
まあRustでのプロトタイピングも絶対やってるだろうけど
まあRustでのプロトタイピングも絶対やってるだろうけど
441デフォルトの名無しさん
2025/03/13(木) 09:56:55.03ID:yv4NvN1D スパゲッティになってる下手なプログラムは、Rustで書く時にそれをほどいてまともなプログラムにしなきゃいけないもんね
それにより効率改善や機能拡張などの保守性も格段にアップするから、当たり前で必須な作業なんだけど、手間を惜しんだのかね
それにより効率改善や機能拡張などの保守性も格段にアップするから、当たり前で必須な作業なんだけど、手間を惜しんだのかね
442デフォルトの名無しさん
2025/03/13(木) 10:18:55.01ID:9FAKkD2W また的外れなことを
普段Rust書いてれば嫌でも分かることなんだけどなぁ
普段Rust書いてれば嫌でも分かることなんだけどなぁ
443デフォルトの名無しさん
2025/03/13(木) 10:39:22.49ID:FfpB+bg4 TypeScript で書いてあることの弊害としてランタイム (つまりは JavaScript 実行環境) がウェブ用に最適化されてることを挙げてる。
ウェブのプログラムではリクエストごとのターンアラウンドタイムが重要だが、コンパイラは時間あたりの計算量が重要で、違う戦略が要る。
コードの保守などはとりたてて問題になっていない。
もしより良く出来る余地があったとしても組織としてコストを支払うほどの価値じゃない。
ウェブのプログラムではリクエストごとのターンアラウンドタイムが重要だが、コンパイラは時間あたりの計算量が重要で、違う戦略が要る。
コードの保守などはとりたてて問題になっていない。
もしより良く出来る余地があったとしても組織としてコストを支払うほどの価値じゃない。
444デフォルトの名無しさん
2025/03/13(木) 11:03:01.65ID:1bSTG+9t Rustの話題だとダンマリなのに
どうでもいい他の言語の話だと連投するヤツいつもいるな
どうでもいい他の言語の話だと連投するヤツいつもいるな
445デフォルトの名無しさん
2025/03/13(木) 12:14:30.28ID:C23vdZ7h 政治や流行に流されない決断ができる土壌があるのは良い組織
動画を見るとヘルスバーグの優秀さがひしひしと伝わってくる
windowsのPMとは大違い
動画を見るとヘルスバーグの優秀さがひしひしと伝わってくる
windowsのPMとは大違い
446デフォルトの名無しさん
2025/03/13(木) 12:57:02.36ID:TBxE2TsU 一通りいろんな言語でプロトタイプコンパイラー作ってみたって動画内でも言ってたじゃねーか。で、Goが一番一対一で手堅く移植できる上に十分に速度アップもしたと言うことかと
パランスの問題だよ。時間をかけてリターンがどれだけあるか。だって営利企業だしプログラマーは無料じゃない。実際、方針決まってからはギットハブ・コパイロットに大部分やらせたんだろうがな
パランスの問題だよ。時間をかけてリターンがどれだけあるか。だって営利企業だしプログラマーは無料じゃない。実際、方針決まってからはギットハブ・コパイロットに大部分やらせたんだろうがな
447デフォルトの名無しさん
2025/03/13(木) 14:32:17.25ID:XQNYuMCZ なんでfirefoxのソースをrustにできないの?
プログラムなんだから不可能ってことはないでしょ?
プログラムなんだから不可能ってことはないでしょ?
448デフォルトの名無しさん
2025/03/13(木) 15:24:15.58ID:chX1MDYs 新たに作るものはRust一択になりつつあるが
既に別の言語で書かれているものはそれを負の遺産として考慮しなければいけなくなる
サンクコスト効果コンコルド効果に加え既存言語プログラマの抵抗勢力も足を引っ張る要因となる
既に別の言語で書かれているものはそれを負の遺産として考慮しなければいけなくなる
サンクコスト効果コンコルド効果に加え既存言語プログラマの抵抗勢力も足を引っ張る要因となる
449デフォルトの名無しさん
2025/03/13(木) 16:51:18.65ID:FfpB+bg4450デフォルトの名無しさん
2025/03/13(木) 16:55:33.59ID:TBxE2TsU 日本語を型付きにして文法的に正しく無い書き込みは投稿ボタン押した時点で弾くようにならんかな。必ず日本語コンパイルエラー無しなのを確認してからしか誰も会話しちゃいけないなら世の中より良くなるはず。頭の中がスッキリする。
451デフォルトの名無しさん
2025/03/13(木) 17:09:05.03ID:P+4CnHos 型への幻想期は誰しもが通る
そのうち人間には無理なことを悟るまでがテンプレ
そのうち人間には無理なことを悟るまでがテンプレ
452デフォルトの名無しさん
2025/03/13(木) 17:23:47.86ID:jEo0CRn4 >>448
頭おかしい
頭おかしい
453デフォルトの名無しさん
2025/03/13(木) 18:17:51.78ID:TqCxXK+v 状況に応じて適切な言語を選択するのが普通の技術者
特定の言語に入信して
なんでRustじゃないんだなんでC#じゃないんだと
感情的にコメントを書いてるやつが多くてすごく滑稽
特定の言語に入信して
なんでRustじゃないんだなんでC#じゃないんだと
感情的にコメントを書いてるやつが多くてすごく滑稽
454デフォルトの名無しさん
2025/03/13(木) 19:27:26.68ID:k0eZFisu455デフォルトの名無しさん
2025/03/13(木) 20:01:28.10ID:WjiwUoIR 「あると良いね」くらいじゃね
DropboxもPythonだったんだから、Dropboxくらいちゃんとしたサービスのレベルまで行っても必要条件であることはありえない
そしてそれよりデカいサービスの立ち上げは言語どうこうとかよりそもそもそのサービスが参入できる隙間を見つけて高速に参入することが重要。
DropboxもPythonだったんだから、Dropboxくらいちゃんとしたサービスのレベルまで行っても必要条件であることはありえない
そしてそれよりデカいサービスの立ち上げは言語どうこうとかよりそもそもそのサービスが参入できる隙間を見つけて高速に参入することが重要。
456デフォルトの名無しさん
2025/03/13(木) 20:08:43.13ID:k0eZFisu やりたければどんな言語でも手間暇かければできるのは当たり前
強い静的型付け言語で構築しないと開発保守効率が劣り時間と労力の無駄
強い静的型付け言語で構築しないと開発保守効率が劣り時間と労力の無駄
457デフォルトの名無しさん
2025/03/13(木) 20:36:11.24ID:SWRT78Fy 効率の話か
それで言うと、ビジネス感覚のある人が好まない言語はそもそもビジネスが成功しないから開発するだけ無駄だな
それで言うと、ビジネス感覚のある人が好まない言語はそもそもビジネスが成功しないから開発するだけ無駄だな
458デフォルトの名無しさん
2025/03/13(木) 21:26:10.48ID:9FAKkD2W 時間をかけないためにスタートアップは動的言語を使ってるんだけどな
Facebook, Instagram, Youtube, Github, Twitterと例をあげればキリがない
Facebook, Instagram, Youtube, Github, Twitterと例をあげればキリがない
459デフォルトの名無しさん
2025/03/13(木) 21:29:22.70ID:qpPbxTOG ここまでIT時代になる前だけじゃね
460デフォルトの名無しさん
2025/03/13(木) 21:29:44.10ID:qpPbxTOG スタートアップは静的型付言語しか勝たん
https://zenn.dev/ficilcom/articles/static-typing-for-startup
https://zenn.dev/ficilcom/articles/static-typing-for-startup
461デフォルトの名無しさん
2025/03/13(木) 22:02:56.19ID:uZxDbhjk 動的型付け言語を捨てて静的型付け言語に移行したとか
静的型付け拡張の開発を主導してるような…
あと最近はスタートアップでフルスタック
typescriptにしてるところは珍しくない
静的型付け拡張の開発を主導してるような…
あと最近はスタートアップでフルスタック
typescriptにしてるところは珍しくない
462デフォルトの名無しさん
2025/03/13(木) 22:24:27.62ID:FfpB+bg4 それぞれに適したものがあっても関連するプロジェクト全体で一貫した言語を使った方がスキルセットの管理が単純になるから運用が楽になることはある。
ウェブ系だと JavaScript か AltJS は避けられないのでそれに寄ってしまうのは仕方がない。
ウェブ系だと JavaScript か AltJS は避けられないのでそれに寄ってしまうのは仕方がない。
463デフォルトの名無しさん
2025/03/13(木) 22:26:07.36ID:yXHfiD0Z 自分の頭で考えられない人ほど
またスキルや経験の幅が狭い人ほど
特定の技術を宗教化して盲信しやすい
そうなるとますます自分の頭で考えられなくなり
どんな不都合な事実があろうと
教義に反さないよう都合よく解釈しようとする
優秀な技術者の対極
またスキルや経験の幅が狭い人ほど
特定の技術を宗教化して盲信しやすい
そうなるとますます自分の頭で考えられなくなり
どんな不都合な事実があろうと
教義に反さないよう都合よく解釈しようとする
優秀な技術者の対極
464デフォルトの名無しさん
2025/03/13(木) 23:02:12.20ID:9Gk42cK0 >>462
フロントサイドはTypeScript+WebAssemblyで良いけど
サーバーサイドまでTS/JSはリソースの無駄遣いなんだよね
もちろんまだ技術の発展途中なのでSSG/SSRをハイドレーションしてCSRするなら
その部分に限ってTS/JSでコード共通化は理解できるけどね
フロントサイドはTypeScript+WebAssemblyで良いけど
サーバーサイドまでTS/JSはリソースの無駄遣いなんだよね
もちろんまだ技術の発展途中なのでSSG/SSRをハイドレーションしてCSRするなら
その部分に限ってTS/JSでコード共通化は理解できるけどね
465デフォルトの名無しさん
2025/03/14(金) 08:00:59.55ID:UemB6eEp >>460
最も普及しているC++を消している時点で論外。
最も普及しているC++を消している時点で論外。
466デフォルトの名無しさん
2025/03/14(金) 08:20:44.97ID:UemB6eEp 静的であろうと動的であろうと重要なのは(関数呼び出しなどの)コードの接続面・境界面の互換性であって、オブジェクト操作の互換性があれば良い。
動的型付けはこの互換性が実行時でないと判定されないのが問題であって、コード開発時(コンパイル)等に互換性を判定する仕組みがあれば問題無くなる。
コード解析は貧弱なので役に立たないが、静的インターフェイスのサポートなどで改善するだろう(今はそういうの無いけど)
静的型付けは互換性の判定のために型の命名を強制されるので、設計の柔軟性が無いなどの問題を持つ。こちらもC++コンセプトのよう静的インターフェイスで改善するので、今後は変数のコンセプト対応のようなインターフェイス改善で解決していくだろう。
RustのTrait境界もコンセプトのような柔軟性が欲しいところ。
動的型付けはこの互換性が実行時でないと判定されないのが問題であって、コード開発時(コンパイル)等に互換性を判定する仕組みがあれば問題無くなる。
コード解析は貧弱なので役に立たないが、静的インターフェイスのサポートなどで改善するだろう(今はそういうの無いけど)
静的型付けは互換性の判定のために型の命名を強制されるので、設計の柔軟性が無いなどの問題を持つ。こちらもC++コンセプトのよう静的インターフェイスで改善するので、今後は変数のコンセプト対応のようなインターフェイス改善で解決していくだろう。
RustのTrait境界もコンセプトのような柔軟性が欲しいところ。
467デフォルトの名無しさん
2025/03/14(金) 09:19:28.18ID:43evLOjO468デフォルトの名無しさん
2025/03/14(金) 09:28:09.15ID:43evLOjO469デフォルトの名無しさん
2025/03/14(金) 10:32:08.08ID:7EyFuQVw470デフォルトの名無しさん
2025/03/14(金) 11:38:23.16ID:B7+exQLS 「トレイト境界」などという完全な誤訳をいつまで使い続けるのかね?
471デフォルトの名無しさん
2025/03/14(金) 12:33:09.87ID:YVXMDGNS わざわざBoundsと言ってる意味を考えてみてはどうか
第一言語が英語の俺からすると境界で違和感ない
お前は日本語が怪しいだろと言われれば確かにその通りだが
第一言語が英語の俺からすると境界で違和感ない
お前は日本語が怪しいだろと言われれば確かにその通りだが
472デフォルトの名無しさん
2025/03/14(金) 12:47:34.83ID:UemB6eEp 限界とか条件ならbounds じゃなくてlimitationだしな。
interface的な意味合いが強いのにinterfaceにしなかった理由はなんでかね?
interface的な意味合いが強いのにinterfaceにしなかった理由はなんでかね?
473デフォルトの名無しさん
2025/03/14(金) 13:17:04.00ID:B4ilMY36 >>472
英単語としてはそうかもしれんが、他の言語の用語にある interface と似た部分はありつつもやっぱり違うし、そこらへんは違う語をあてたほうが自然だと思う。
英単語としてはそうかもしれんが、他の言語の用語にある interface と似た部分はありつつもやっぱり違うし、そこらへんは違う語をあてたほうが自然だと思う。
474デフォルトの名無しさん
2025/03/14(金) 13:26:54.49ID:g9xx7i1P 通勤電車乗ってなくてうらやましい
> 目的地を意味する表現です。 例文. This train is bound for Tokyo station. この電車は東京駅 ...
> 目的地を意味する表現です。 例文. This train is bound for Tokyo station. この電車は東京駅 ...
475デフォルトの名無しさん
2025/03/14(金) 15:16:32.42ID:0UsQo6GT >>474
それは「bound for」という熟語だし、さらに言えば
bound 境界
for 方向(対象までの間が主眼)
の組み合わせでそういう意味になるから、boundの例示で出すのは不適切かと。
inboundも外→内の境界付近のイメージが強いし、なんか良い例無いんかね。
それは「bound for」という熟語だし、さらに言えば
bound 境界
for 方向(対象までの間が主眼)
の組み合わせでそういう意味になるから、boundの例示で出すのは不適切かと。
inboundも外→内の境界付近のイメージが強いし、なんか良い例無いんかね。
476デフォルトの名無しさん
2025/03/14(金) 15:34:58.04ID:PY82133/ circleじゃなくてdiskの方に適用可能範囲があるから、境界を印象付けてもしょうがない
範囲や領域って言えばいい
範囲や領域って言えばいい
477デフォルトの名無しさん
2025/03/14(金) 15:53:13.20ID:43evLOjO >>472
Java語は要らんのだよ
Java語は要らんのだよ
478デフォルトの名無しさん
2025/03/14(金) 16:27:19.78ID:dr+oAB1W 清々しいまでにバカばっかだなwww
479デフォルトの名無しさん
2025/03/14(金) 16:29:54.73ID:dr+oAB1W480デフォルトの名無しさん
2025/03/14(金) 16:37:10.71ID:dr+oAB1W >>472
>限界とか条件ならbounds じゃなくてlimitationだしな
boundsをそのまま表現できる日本語の二字熟語は存在しないから完璧な訳語というのはない
完全な誤訳というのはあるけれども
>限界とか条件ならbounds じゃなくてlimitationだしな
boundsをそのまま表現できる日本語の二字熟語は存在しないから完璧な訳語というのはない
完全な誤訳というのはあるけれども
481デフォルトの名無しさん
2025/03/14(金) 16:39:22.00ID:dr+oAB1W >>475
おいおいww
bound forのboundとtrait boundsのboundはスペルが同じだけで意味も語源も違う単語だぞ
何が「bound 境界」と「for 方向(対象までの間が主眼)」の組み合わせてそういう意味になるだよ
不適切にもほどがあるかど。
おいおいww
bound forのboundとtrait boundsのboundはスペルが同じだけで意味も語源も違う単語だぞ
何が「bound 境界」と「for 方向(対象までの間が主眼)」の組み合わせてそういう意味になるだよ
不適切にもほどがあるかど。
482デフォルトの名無しさん
2025/03/14(金) 16:41:51.77ID:aBKsJZMd 束縛を誤用してる言語なんだから
483デフォルトの名無しさん
2025/03/14(金) 16:44:31.04ID:dr+oAB1W inboundももちろんbound forのboundと同じでtrait boundsのboundとは関係ないからな
484デフォルトの名無しさん
2025/03/14(金) 16:50:31.18ID:dr+oAB1W485デフォルトの名無しさん
2025/03/14(金) 18:07:08.47ID:llPebnyV 他動詞なんだからしゃーない日本語にはその概念が未導入だ
この例を見てくれよ
developers.google.com/maps/documentation/javascript/examples/control-bounds-restriction
ニュージーランドの国境座標で境界固定されてる
Restricting Map Bounds
const NEW_ZEALAND_BOUNDS = {
north: -34.36,
south: -47.35,
west: 166.28,
east: -175.81,
};
Rustじゃなくてタイプスクリプトだがboundって俺らプログラマーは普通にコーティングするとき使ってるから。意味もわからずニュアンスだけ知ってりゃコーティングミスしないよ
この例を見てくれよ
developers.google.com/maps/documentation/javascript/examples/control-bounds-restriction
ニュージーランドの国境座標で境界固定されてる
Restricting Map Bounds
const NEW_ZEALAND_BOUNDS = {
north: -34.36,
south: -47.35,
west: 166.28,
east: -175.81,
};
Rustじゃなくてタイプスクリプトだがboundって俺らプログラマーは普通にコーティングするとき使ってるから。意味もわからずニュアンスだけ知ってりゃコーティングミスしないよ
486デフォルトの名無しさん
2025/03/14(金) 19:03:43.60ID:lylWP6au >>485
>他動詞なんだからしゃーない日本語にはその概念が未導入だ
よく意味がわからないんだがなんで他動詞だとしゃーないの?
未導入の概念というのはBoundsのこと?
ちなみにその例にあるBoundsは名詞
>他動詞なんだからしゃーない日本語にはその概念が未導入だ
よく意味がわからないんだがなんで他動詞だとしゃーないの?
未導入の概念というのはBoundsのこと?
ちなみにその例にあるBoundsは名詞
487デフォルトの名無しさん
2025/03/14(金) 22:14:58.94ID:jwX9vfGq >>485
2D描画の文脈で使われるboundsは基本的に矩形領域のこと(3Dなら直方体の領域)
trait boundsと同じように何かを制限する範囲/領域という原義から付けられた名前だがもし「境界」と訳されてるとしたらの機械翻訳の質の問題だろう
2D描画の文脈で使われるboundsは基本的に矩形領域のこと(3Dなら直方体の領域)
trait boundsと同じように何かを制限する範囲/領域という原義から付けられた名前だがもし「境界」と訳されてるとしたらの機械翻訳の質の問題だろう
488デフォルトの名無しさん
2025/03/14(金) 22:53:00.25ID:ujZbdgV7 >>470
オライリー「トレイト制約やで」
オライリー「トレイト制約やで」
489デフォルトの名無しさん
2025/03/14(金) 23:00:22.63ID:XJxEKa47 要するに機械翻訳を誤訳と気づかず採用したんだろ
プロの翻訳家は誤訳に気づいて修正したが間違いを認めたくない勢力が境界で違和感ないと言い張ってるわけだ
プロの翻訳家は誤訳に気づいて修正したが間違いを認めたくない勢力が境界で違和感ないと言い張ってるわけだ
490デフォルトの名無しさん
2025/03/14(金) 23:00:54.38ID:7+++WDHP BoundsChecker って最近見かけなくなったな
491デフォルトの名無しさん
2025/03/14(金) 23:24:58.18ID:Jz6kOrmc boundsは境界で正しい
他の候補はない
Type1: Trait2 Type1の取れうる型のうちTrait2がその境界となっている
Trait3: Trait4 Trait3の…(同様)
つまりトレイトにより境界を引いている
このように各々意味が異なる
境界 bounds
限界 limitation
制約 constraints
他の例
array-bounds checking 配列境界検査
Scalaのupper type bounds 上限境界
Scalaのlower type bounds 下限境界
他の候補はない
Type1: Trait2 Type1の取れうる型のうちTrait2がその境界となっている
Trait3: Trait4 Trait3の…(同様)
つまりトレイトにより境界を引いている
このように各々意味が異なる
境界 bounds
限界 limitation
制約 constraints
他の例
array-bounds checking 配列境界検査
Scalaのupper type bounds 上限境界
Scalaのlower type bounds 下限境界
492デフォルトの名無しさん
2025/03/14(金) 23:58:17.86ID:ArFvjw95 際立ちますね
この題材は踏み絵になる
この題材は踏み絵になる
493デフォルトの名無しさん
2025/03/15(土) 00:33:27.71ID:MW+uPLNw boundというと結び付いてる・紐付いているといった意味合い
日本語で境界というと、外と内といった「堺目」という意味合いが強い
自分はトレイト境界という表現に慣れてしまったのでそこまで違和感はないけど、訳としては不適当だと思う
余談だけどPythonとRustのFFIに使われるPyO3というクレートがあって、そこでは Bound という型が出てくる
これはPythonのGILに紐付いている意味合いで、trait boundのboundと同じ意味合い
日本語で境界というと、外と内といった「堺目」という意味合いが強い
自分はトレイト境界という表現に慣れてしまったのでそこまで違和感はないけど、訳としては不適当だと思う
余談だけどPythonとRustのFFIに使われるPyO3というクレートがあって、そこでは Bound という型が出てくる
これはPythonのGILに紐付いている意味合いで、trait boundのboundと同じ意味合い
494デフォルトの名無しさん
2025/03/15(土) 00:51:34.13ID:kGvPW5zF 「訳がおかしい」と言ってるアホ達が代案を出さないことからも境界がぴったりな言葉
トレイトで境界を引いている
トレイトで境界を引いている
495デフォルトの名無しさん
2025/03/15(土) 00:56:44.33ID:zVPlAU0P496デフォルトの名無しさん
2025/03/15(土) 01:20:52.90ID:kGvPW5zF boundsに制約なんて意味はない
trait boundsも、ある一定内の数値や、配列のインデックスなどのbounds checkingと同じく境界が定まる
trait boundsも、ある一定内の数値や、配列のインデックスなどのbounds checkingと同じく境界が定まる
497デフォルトの名無しさん
2025/03/15(土) 01:23:20.85ID:24RSx77o 訳語を探すそもそものアプローチというか考え方が間違ってるんだよな
498デフォルトの名無しさん
2025/03/15(土) 01:27:28.34ID:yH3qrd2j お前らそんなに和訳やる気あんならtatsuya6502のケツひっぱたいてこいや
499デフォルトの名無しさん
2025/03/15(土) 01:40:23.59ID:kGvPW5zF 「制約」という違和感ありまくりの間違った単語を使っているアホどもは、
例えばあるクラスに対してその基底クラスやスーパークラスを「制約」だと捉えているのか?
例えばあるクラスに対してその基底クラスやスーパークラスを「制約」だと捉えているのか?
500デフォルトの名無しさん
2025/03/15(土) 01:47:56.77ID:t2/vXXRn 意味的にはNapsterの水平線に近い
501デフォルトの名無しさん
2025/03/15(土) 01:58:38.26ID:CnlaKfFr トレイト境界とかいう和製英語やめて特性規定(特性を持ってますよって規定な)とかにしようや。省略しないなら特性保持規定、特性保有規定
ジェネリック型がある特性を持つという規定があるから、その特性を実装するっていう文なら自然だし
ジェネリック型がある特性を持つという規定があるから、その特性を実装するっていう文なら自然だし
502デフォルトの名無しさん
2025/03/15(土) 01:59:20.63ID:CnlaKfFr しまった、ジェネリックなって書いてしもうたな
503デフォルトの名無しさん
2025/03/15(土) 01:59:55.45ID:8rRdOox4 >>489
プロポですねわかります
プロポですねわかります
504デフォルトの名無しさん
2025/03/15(土) 02:11:53.31ID:kGvPW5zF505デフォルトの名無しさん
2025/03/15(土) 02:27:02.81ID:aXarc3PA 集合論的な意味での境界だな
ベン図のイメージ
T: EqはEqを実装する型の領域
T: CopyはCopyを実装する型の領域
T: Eq + CopyはT: EqとT: Copyが重なった領域
ベン図のイメージ
T: EqはEqを実装する型の領域
T: CopyはCopyを実装する型の領域
T: Eq + CopyはT: EqとT: Copyが重なった領域
506デフォルトの名無しさん
2025/03/15(土) 06:28:21.70ID:ub1zWmmn507デフォルトの名無しさん
2025/03/15(土) 09:13:26.13ID:M+mqoQUv 数学だと制約に相当するんでは?
三角形の内二等辺三角形があるのは条件を満たしているものだけ
プログラムも機能が充実するとイメージとは真逆で制約が強くなっていることになる
出来ることが増える=制約されてる
void*ポインターが無制限で型が付くと型の制限がある
三角形の内二等辺三角形があるのは条件を満たしているものだけ
プログラムも機能が充実するとイメージとは真逆で制約が強くなっていることになる
出来ることが増える=制約されてる
void*ポインターが無制限で型が付くと型の制限がある
508デフォルトの名無しさん
2025/03/15(土) 09:15:25.47ID:M+mqoQUv これはずっと考えていたことで今急にひらめいたとかじゃない
509デフォルトの名無しさん
2025/03/15(土) 09:16:05.70ID:tr5ODwiQ >>495
一般的に constraints の訳語として「制約」をあてるのでこの場合には好ましいとは言えない。
ただ Haskell で constraints と呼んでいるものと Rust で bounds と呼んでいるものに類似点があるかというとまあ結構あるとは思う。
一般的に constraints の訳語として「制約」をあてるのでこの場合には好ましいとは言えない。
ただ Haskell で constraints と呼んでいるものと Rust で bounds と呼んでいるものに類似点があるかというとまあ結構あるとは思う。
510デフォルトの名無しさん
2025/03/15(土) 09:23:16.52ID:M+mqoQUv 二つの辺の長さが等しいと言う制約のと
○○という関数を持っていると言う制約
○○という関数を持っていると言う制約
511デフォルトの名無しさん
2025/03/15(土) 09:24:31.14ID:qQFYiVQo512デフォルトの名無しさん
2025/03/15(土) 09:31:26.54ID:M+mqoQUv カタカナでいいんじゃないかw
英語見た場合に納得できる
英語見た場合に納得できる
513デフォルトの名無しさん
2025/03/15(土) 09:43:00.89ID:M+mqoQUv こういう時は何故かHaskell = 圏論勢が出てこない
514デフォルトの名無しさん
2025/03/15(土) 09:44:01.84ID:MW+uPLNw >>506
英語版の Rust book だと「型やライフタイムの使われ方を制限する (to restrict) 」とあるよ
Trait and lifetime bounds provide a way for generic items to restrict which types and lifetimes are used as their parameters.
数学とかプログラミングと関係ない、普通の言葉としての bound は元は「紐で縛る」から来てる
制限、制約、境界といった意味はそこからの派生
英語版の Rust book だと「型やライフタイムの使われ方を制限する (to restrict) 」とあるよ
Trait and lifetime bounds provide a way for generic items to restrict which types and lifetimes are used as their parameters.
数学とかプログラミングと関係ない、普通の言葉としての bound は元は「紐で縛る」から来てる
制限、制約、境界といった意味はそこからの派生
515デフォルトの名無しさん
2025/03/15(土) 09:53:00.21ID:MW+uPLNw そもそも >>506 だって制約だと思う
ジェネリクス関数の中で呼べるメソッドが増えることに注目してるようだけど、利用側から見ればその関数に渡せる型について制限が増えるでしょ
ジェネリクス関数の中で呼べるメソッドが増えることに注目してるようだけど、利用側から見ればその関数に渡せる型について制限が増えるでしょ
516デフォルトの名無しさん
2025/03/15(土) 10:02:10.90ID:ub1zWmmn517デフォルトの名無しさん
2025/03/15(土) 10:28:22.62ID:M+mqoQUv518デフォルトの名無しさん
2025/03/15(土) 10:35:19.38ID:qQFYiVQo >>506
トレイト視界にすれば良かったんじゃね
トレイト視界にすれば良かったんじゃね
519デフォルトの名無しさん
2025/03/15(土) 10:37:07.82ID:e4F+UdWA トレイトバウンズでええやん
520デフォルトの名無しさん
2025/03/15(土) 10:38:12.12ID:M+mqoQUv 機能実装=制約
情報量が少ないのが自由度が大きくなりがち
確率だとしても明日の天気の状況が全くわからないとすると何の制約もなく平等に各状態がある
天気予報などから明日は降水確率70%などと情報を得ると確率がかわり偏る
情報学で言うエントロピーが増大した状況
ビットの0と1が等しい確率で出てくるような何ら情報の無い状況がエントロピーが少ない
情報量が少ないのが自由度が大きくなりがち
確率だとしても明日の天気の状況が全くわからないとすると何の制約もなく平等に各状態がある
天気予報などから明日は降水確率70%などと情報を得ると確率がかわり偏る
情報学で言うエントロピーが増大した状況
ビットの0と1が等しい確率で出てくるような何ら情報の無い状況がエントロピーが少ない
521デフォルトの名無しさん
2025/03/15(土) 10:42:25.48ID:qQFYiVQo522デフォルトの名無しさん
2025/03/15(土) 10:43:38.21ID:qQFYiVQo523デフォルトの名無しさん
2025/03/15(土) 10:50:01.91ID:ub1zWmmn >>521
それは真逆の視点だから真逆の結果となっている
型に対するトレイト境界なのだから型の視点で見るべき
トレイト境界がAnyしかない初期状態が最も制約されていて機能がほとんど使えない不自由な状態
そこからトレイト境界を増やせば増やすほど実行できる機能が増えて自由度が増していく
それは真逆の視点だから真逆の結果となっている
型に対するトレイト境界なのだから型の視点で見るべき
トレイト境界がAnyしかない初期状態が最も制約されていて機能がほとんど使えない不自由な状態
そこからトレイト境界を増やせば増やすほど実行できる機能が増えて自由度が増していく
524デフォルトの名無しさん
2025/03/15(土) 10:51:10.99ID:M+mqoQUv 自由度なんて何も考えなくても理解出来るだろ…
思い込みを直す機会だぞ
なんなら大学に行って数学と情報学を学べばいい
思い込みを直す機会だぞ
なんなら大学に行って数学と情報学を学べばいい
525デフォルトの名無しさん
2025/03/15(土) 10:52:21.41ID:ub1zWmmn526デフォルトの名無しさん
2025/03/15(土) 10:54:27.10ID:ub1zWmmn527デフォルトの名無しさん
2025/03/15(土) 11:00:14.62ID:M+mqoQUv >>526
学生と言うクラスに対してそれが三角形なのかと言う問いはおかしく見えるが
学生であり三角形でもある可能性もある
トレイトが実装されていなくても同等の機能が実装されている可能性もある
一概にトレイトが実装されているから高機能であると言う論は当てはまらない
ある機能を使う場合に対象となるものがトレイトを実装されているものに限定されているだけ
これはただの制約でしかない
学生と言うクラスに対してそれが三角形なのかと言う問いはおかしく見えるが
学生であり三角形でもある可能性もある
トレイトが実装されていなくても同等の機能が実装されている可能性もある
一概にトレイトが実装されているから高機能であると言う論は当てはまらない
ある機能を使う場合に対象となるものがトレイトを実装されているものに限定されているだけ
これはただの制約でしかない
528デフォルトの名無しさん
2025/03/15(土) 11:03:33.75ID:M+mqoQUv トレイト境界 トレイト制約 トレイト要求 トレイト条件 トレイト限定
whereでトレイトを限定しているので指定の自由度は低くなっている
whereでトレイトを限定しているので指定の自由度は低くなっている
529デフォルトの名無しさん
2025/03/15(土) 11:10:08.04ID:ub1zWmmn >>527
プログラムを書いたことないのかな?
impl Display for T した時にそれはDisplay機能を追加したのであって制約したわけではない
fn foo<T: Display>() した時もそれはDisplay機能を追加したのであって制約したわけではない
もちろん逆の視点で見れば制約になるのは当たり前だが逆の視点で見る必要がない
普通の視点ではDisplay機能が増えて利便性が上がったと解釈する
その機能を持つ線引きとしてトレイト境界がある
これをトレイト制約と訳すのは違和感ありまくりの間違いだ
プログラムを書いたことないのかな?
impl Display for T した時にそれはDisplay機能を追加したのであって制約したわけではない
fn foo<T: Display>() した時もそれはDisplay機能を追加したのであって制約したわけではない
もちろん逆の視点で見れば制約になるのは当たり前だが逆の視点で見る必要がない
普通の視点ではDisplay機能が増えて利便性が上がったと解釈する
その機能を持つ線引きとしてトレイト境界がある
これをトレイト制約と訳すのは違和感ありまくりの間違いだ
530デフォルトの名無しさん
2025/03/15(土) 11:11:57.53ID:ub1zWmmn531デフォルトの名無しさん
2025/03/15(土) 11:15:38.63ID:M+mqoQUv532デフォルトの名無しさん
2025/03/15(土) 11:16:16.66ID:M+mqoQUv >>530
わざと馬鹿な振りしてるのか?普通に馬鹿なのかどっちなんだ?
わざと馬鹿な振りしてるのか?普通に馬鹿なのかどっちなんだ?
533デフォルトの名無しさん
2025/03/15(土) 11:19:12.75ID:M+mqoQUv トレイト境界 訳語でぐぐったら出来たぞ
https://github.com/rust-lang-ja/book-ja/issues/172
> その型がとりうる値を制限し、より具体的な型を定義する
制約を含んでいる
https://github.com/rust-lang-ja/book-ja/issues/172
> その型がとりうる値を制限し、より具体的な型を定義する
制約を含んでいる
534デフォルトの名無しさん
2025/03/15(土) 11:21:18.09ID:ub1zWmmn >>531
真逆の視点で見れば制約と解釈できるのは当たり前
しかしそんなバカな視点持つ人はいない
デフォルトとAnyトレイトしか使えない不便で制約が最大の状態から
各トレイト境界により各トレイト機能を使えるように制限を解放していくのがトレイト境界のプログラミングほ本質
「トレイト制約」派は頭がおかしい
真逆の視点で見れば制約と解釈できるのは当たり前
しかしそんなバカな視点持つ人はいない
デフォルトとAnyトレイトしか使えない不便で制約が最大の状態から
各トレイト境界により各トレイト機能を使えるように制限を解放していくのがトレイト境界のプログラミングほ本質
「トレイト制約」派は頭がおかしい
535デフォルトの名無しさん
2025/03/15(土) 11:23:51.41ID:M+mqoQUv >>534
相手に対して決めつけたベン図的な考えをしてるのが間違い
自分はトレイト制約にしろとはいってない
ただトレイト境界は制限を含んだものだと言ってる
自由度が低くなると言っている
トレイト境界で自由度が高くなると言うポンコツと意見が対立するのは当たり前
相手に対して決めつけたベン図的な考えをしてるのが間違い
自分はトレイト制約にしろとはいってない
ただトレイト境界は制限を含んだものだと言ってる
自由度が低くなると言っている
トレイト境界で自由度が高くなると言うポンコツと意見が対立するのは当たり前
536デフォルトの名無しさん
2025/03/15(土) 11:26:39.91ID:M+mqoQUv 学生であり三角形の可能性としては
名前が 三角 形さんである場合が当てはまる
その人は学生であり三角形
名前が 三角 形さんである場合が当てはまる
その人は学生であり三角形
537デフォルトの名無しさん
2025/03/15(土) 11:28:48.27ID:A6Zst3Ly >>498
これに触れちゃったから真っ赤になっちゃってるね
これに触れちゃったから真っ赤になっちゃってるね
538デフォルトの名無しさん
2025/03/15(土) 11:32:47.50ID:MW+uPLNw >>534
もしかして impl X for Foo のように「トレイトを実装する」ことを trait bound と思ってる?
trait bound は「この関数に渡せる型Tは〇〇を満たさなければならない」の意味だよ?
Tとしか書かれてないジェネリクス関数は文字通り「何でも渡せる」から、これが一番制約が少ない
もしかして impl X for Foo のように「トレイトを実装する」ことを trait bound と思ってる?
trait bound は「この関数に渡せる型Tは〇〇を満たさなければならない」の意味だよ?
Tとしか書かれてないジェネリクス関数は文字通り「何でも渡せる」から、これが一番制約が少ない
539デフォルトの名無しさん
2025/03/15(土) 11:34:15.16ID:ub1zWmmn >>535
何度言っても理解しようとしないやつだな
非現実的な視点としてそこでは使わない非該当な型からみれば、その型は使えないのだから制限となるのは当たり前だ
そんなプログラミングとかけ離れた非現実的な視点でみるのはおかしい
プログラミングの視点では各トレイト境界を増やすことでその関数でできることが増えて制限から解放される
何度言っても理解しようとしないやつだな
非現実的な視点としてそこでは使わない非該当な型からみれば、その型は使えないのだから制限となるのは当たり前だ
そんなプログラミングとかけ離れた非現実的な視点でみるのはおかしい
プログラミングの視点では各トレイト境界を増やすことでその関数でできることが増えて制限から解放される
540デフォルトの名無しさん
2025/03/15(土) 11:40:22.78ID:ub1zWmmn >>538
その真逆な視点から見れば制約になるのはの当たり前だとずっと言ってるだろ
どちらを制約と捉えるかの問題
Anyしか何もできない<T>が最も制約されている状況
それに対して<T: Trait>とトレイト境界を課すことで制約がなくなって使える機能が増えていく
その真逆な視点から見れば制約になるのはの当たり前だとずっと言ってるだろ
どちらを制約と捉えるかの問題
Anyしか何もできない<T>が最も制約されている状況
それに対して<T: Trait>とトレイト境界を課すことで制約がなくなって使える機能が増えていく
541デフォルトの名無しさん
2025/03/15(土) 11:41:12.38ID:M+mqoQUv >>539
トレイト境界に対しては真逆だろ
プログラミングの視点で見てもトレイト境界を増やすことで制限が増えて対象への制約が増える
実装でトレイトにあたる部分を使用しているかどうかはどうであれ自由度が減る
こんな当たり前のことすら理解できないのか?
トレイト境界に対しては真逆だろ
プログラミングの視点で見てもトレイト境界を増やすことで制限が増えて対象への制約が増える
実装でトレイトにあたる部分を使用しているかどうかはどうであれ自由度が減る
こんな当たり前のことすら理解できないのか?
542デフォルトの名無しさん
2025/03/15(土) 11:43:24.52ID:M12uOjVK あえて造語すれば機能域とかになるのかな
制約とか機能が増えるとかは視点によって出てくる結果だろう
制約とか機能が増えるとかは視点によって出てくる結果だろう
543デフォルトの名無しさん
2025/03/15(土) 11:46:45.42ID:ub1zWmmn >>541
その180度逆の視点で見れば制約になるのは当たり前だがそんな視点でプログラミングは行われない
「トレイト境界」により「制約された」とは考えることはなく
「(制限されてる状態から)使える機能が増えた」と考える
その180度逆の視点で見れば制約になるのは当たり前だがそんな視点でプログラミングは行われない
「トレイト境界」により「制約された」とは考えることはなく
「(制限されてる状態から)使える機能が増えた」と考える
544デフォルトの名無しさん
2025/03/15(土) 11:50:54.00ID:ub1zWmmn >>542
その通り
視点によって両方が起こる
だからそこ「トレイト制約」ではなく「トレイト境界」が正しい
各トレイト境界により線引きされて境界が定まるだけ
それにより使える機能が増えて便利になることがプログラミングの本質
制約されて不便になったとは考えない
その通り
視点によって両方が起こる
だからそこ「トレイト制約」ではなく「トレイト境界」が正しい
各トレイト境界により線引きされて境界が定まるだけ
それにより使える機能が増えて便利になることがプログラミングの本質
制約されて不便になったとは考えない
545デフォルトの名無しさん
2025/03/15(土) 11:54:54.99ID:M+mqoQUv >>543
脱線になるが自由度の意味が判ってない
三角形なら基礎的なルール(三つの角度を合わせると180度など)守っていれば辺の長さや角度は自由に設定できる 自由度が高い
二等辺三角形は二辺の長さが同じと言う制約がありその他にも角度が制限される 自由度が低い
二等辺三角形は自由度が低いがそのために角度などを利用して他の隣接した線分などとの角度が確定できるようになる
自由度は減っているが他から見ると利用価値がただの三角形から上がってる
脱線になるが自由度の意味が判ってない
三角形なら基礎的なルール(三つの角度を合わせると180度など)守っていれば辺の長さや角度は自由に設定できる 自由度が高い
二等辺三角形は二辺の長さが同じと言う制約がありその他にも角度が制限される 自由度が低い
二等辺三角形は自由度が低いがそのために角度などを利用して他の隣接した線分などとの角度が確定できるようになる
自由度は減っているが他から見ると利用価値がただの三角形から上がってる
546デフォルトの名無しさん
2025/03/15(土) 11:57:50.75ID:5IRcwf8/ 制限なしの型パラメータを制限してるだけでしょ
<T> ←制限ナシ
<T: Eq> ←Eqで制限
<T: Copy> ←Copyで制限
<T: Eq + Copy> ←Eq+Copyで制限
制約って言ってる人の感覚のほうが俺も近い
(型パラメータの型を)制約ってことでしょ
> 使える機能が増えて便利になることがプログラミングの本質
そんな主張生まれて初めて目にしたわ正直w
<T> ←制限ナシ
<T: Eq> ←Eqで制限
<T: Copy> ←Copyで制限
<T: Eq + Copy> ←Eq+Copyで制限
制約って言ってる人の感覚のほうが俺も近い
(型パラメータの型を)制約ってことでしょ
> 使える機能が増えて便利になることがプログラミングの本質
そんな主張生まれて初めて目にしたわ正直w
547デフォルトの名無しさん
2025/03/15(土) 12:03:05.22ID:M+mqoQUv 自由度すら理解できないなんて
この人いつもの長文でおかしなRust擁護書いてる人かな?
この人いつもの長文でおかしなRust擁護書いてる人かな?
548デフォルトの名無しさん
2025/03/15(土) 12:04:44.44ID:ub1zWmmn >>546
その真逆の不自然な視点を取ることももちろん可能だが
普通はこちらの視点
<T> ←(Any以外)何もできず制限最大
<T: Eq> ←Eqが使えるようになる
<T: Copy> ←Copyが使えるようになる
<T: Eq + Copy> ←EqもCopyも使えるようになる
制約を増やしているのではなく
機能を増やしている
だからトレイト制約なんていうバカな呼び方を採用しない
その真逆の不自然な視点を取ることももちろん可能だが
普通はこちらの視点
<T> ←(Any以外)何もできず制限最大
<T: Eq> ←Eqが使えるようになる
<T: Copy> ←Copyが使えるようになる
<T: Eq + Copy> ←EqもCopyも使えるようになる
制約を増やしているのではなく
機能を増やしている
だからトレイト制約なんていうバカな呼び方を採用しない
549デフォルトの名無しさん
2025/03/15(土) 12:07:05.48ID:qQFYiVQo >>523
そう思うならトレイト視界を使ってくれ
そう思うならトレイト視界を使ってくれ
550デフォルトの名無しさん
2025/03/15(土) 12:10:13.35ID:ub1zWmmn551デフォルトの名無しさん
2025/03/15(土) 12:10:26.25ID:5IRcwf8/ 型を制限してるんよね
機能がどうのこうのの以前にね
これって理解するの難しいのかなあ
機能がどうのこうのの以前にね
これって理解するの難しいのかなあ
552デフォルトの名無しさん
2025/03/15(土) 12:13:27.59ID:ub1zWmmn553デフォルトの名無しさん
2025/03/15(土) 12:16:19.89ID:ub1zWmmn554デフォルトの名無しさん
2025/03/15(土) 12:16:42.56ID:M+mqoQUv >>548
vec<T>
vec<T>:where T Eq
vec<T>:where T:Copy
vec<T>:where Eq + Copy
自由度が高いvecはどれ?トレイト境界で自由度が増えるなんて馬鹿はいない
vec<T>
vec<T>:where T Eq
vec<T>:where T:Copy
vec<T>:where Eq + Copy
自由度が高いvecはどれ?トレイト境界で自由度が増えるなんて馬鹿はいない
555デフォルトの名無しさん
2025/03/15(土) 12:23:05.50ID:ub1zWmmn >>554
二つの視点を理解できた?
さらにその問題ならVecの視点とTの視点でさらに二つ分かれる
もちろんトレイト境界はTに対するものだからTの視点が普通人の視点
トレイト境界が何もなければTに対して何もできないから一番不自由な状態
二つの視点を理解できた?
さらにその問題ならVecの視点とTの視点でさらに二つ分かれる
もちろんトレイト境界はTに対するものだからTの視点が普通人の視点
トレイト境界が何もなければTに対して何もできないから一番不自由な状態
556デフォルトの名無しさん
2025/03/15(土) 12:24:50.62ID:E7lv2JsK 「自己責任」の語源という噂もあるIT界隈ってやっぱ最先端なんだな
自由と制約
性善説と性悪説
なんでもITで定義できる
自由と制約
性善説と性悪説
なんでもITで定義できる
557デフォルトの名無しさん
2025/03/15(土) 12:24:54.00ID:5IRcwf8/ <T: Eq>で考えたとき
「: Eq」はどこにかかってんのか?
「T」でしょ、それ以外ではないでしょ?
で「T]は何かっていうと型でしょ?
この話のどこに「機能」とやらが出てきたの?
片方の視点もなにも、そもそもの話が
「: Eq」はどこにかかってんのか?
「T」でしょ、それ以外ではないでしょ?
で「T]は何かっていうと型でしょ?
この話のどこに「機能」とやらが出てきたの?
片方の視点もなにも、そもそもの話が
558デフォルトの名無しさん
2025/03/15(土) 12:25:47.49ID:M+mqoQUv まだ自由度すら理解できないんだよな
文系プログラマの末路が見える
文系プログラマの末路が見える
559デフォルトの名無しさん
2025/03/15(土) 12:30:10.54ID:MW+uPLNw 「俺の解釈」でなくちゃんと公式の説明を読もう
https://doc.rust-lang.org/reference/trait-bounds.html
https://doc.rust-lang.org/reference/trait-bounds.html
560デフォルトの名無しさん
2025/03/15(土) 12:32:15.55ID:ub1zWmmn >>557
各トレイトは各々の特性という機能を宣言している
Tという型が何をすることができるものかをトレイト境界で指定していく
ちなみに何度も言っているが
Tという抽象型自体の視点ではなくて、Tに入りうる具体型候補の集合という裏の視点で見れば、トレイト境界が制約になることはもちろん理解している
そんな偏った視点で考えるのはおかしいと主張しているだけ
だから「トレイト制約」というアホな用語は絶対に許容しない
各トレイトは各々の特性という機能を宣言している
Tという型が何をすることができるものかをトレイト境界で指定していく
ちなみに何度も言っているが
Tという抽象型自体の視点ではなくて、Tに入りうる具体型候補の集合という裏の視点で見れば、トレイト境界が制約になることはもちろん理解している
そんな偏った視点で考えるのはおかしいと主張しているだけ
だから「トレイト制約」というアホな用語は絶対に許容しない
561デフォルトの名無しさん
2025/03/15(土) 12:34:54.10ID:M+mqoQUv 文系が誤魔化しに来ている
562デフォルトの名無しさん
2025/03/15(土) 12:35:11.48ID:5IRcwf8/ >>559
恥ずかしながらそれ読んだことなかったw
> Trait and lifetime bounds provide a way for generic items to restrict which types and lifetimes are used as their parameters.
> 特性と有効期間の境界は、汎用アイテムがパラメータとして使用される型と有効期間を制限する方法を提供します
はいこれ
型を制限なのです
恥ずかしながらそれ読んだことなかったw
> Trait and lifetime bounds provide a way for generic items to restrict which types and lifetimes are used as their parameters.
> 特性と有効期間の境界は、汎用アイテムがパラメータとして使用される型と有効期間を制限する方法を提供します
はいこれ
型を制限なのです
563デフォルトの名無しさん
2025/03/15(土) 12:41:26.07ID:M+mqoQUv564デフォルトの名無しさん
2025/03/15(土) 12:41:44.05ID:ub1zWmmn 言った通りだろ
T自体ではなくTに入りうる具体型候補の集合で考えればもちろん制限になる
T自体ではなくTに入りうる具体型候補の集合で考えればもちろん制限になる
565デフォルトの名無しさん
2025/03/15(土) 12:43:19.33ID:ub1zWmmn566デフォルトの名無しさん
2025/03/15(土) 12:50:29.91ID:M+mqoQUv トレイト境界 機能:型を制約します
その一方で
「トレイト制約は不自然だ~」
これは無いな
その一方で
「トレイト制約は不自然だ~」
これは無いな
567デフォルトの名無しさん
2025/03/15(土) 12:58:39.76ID:ub1zWmmn568デフォルトの名無しさん
2025/03/15(土) 13:09:12.24ID:MW+uPLNw >>567
bound が「線引き」だとして、例えばRustコンパイラが出す以下のメッセージはどう訳すの?
Error: the trait bound is not satisfied
「制約を満たさない」からエラー、という方が自然じゃない?
bound が「線引き」だとして、例えばRustコンパイラが出す以下のメッセージはどう訳すの?
Error: the trait bound is not satisfied
「制約を満たさない」からエラー、という方が自然じゃない?
569デフォルトの名無しさん
2025/03/15(土) 13:22:26.55ID:ub1zWmmn >>568
文字通りにトレイト境界を満たさないだよ
例えば具体的に Error: the trait bound 'TypeA: TraitB' is not satisfied と指摘される
つまりこのトレイト境界を満たさないとは
TypeAはTraitB(の機能)を実装していない、という意味
文字通りにトレイト境界を満たさないだよ
例えば具体的に Error: the trait bound 'TypeA: TraitB' is not satisfied と指摘される
つまりこのトレイト境界を満たさないとは
TypeAはTraitB(の機能)を実装していない、という意味
570デフォルトの名無しさん
2025/03/15(土) 13:23:13.31ID:MW+uPLNw 「トレイト境界」という言葉が既に用語として認識されている感はあるし、「トレイト境界を満たさない」と書いても実用上は伝わると思うけど
「境界線を満たす」のように、satisfyの目的語が線になることはないと思う
「境界線を満たす」のように、satisfyの目的語が線になることはないと思う
571デフォルトの名無しさん
2025/03/15(土) 13:24:22.65ID:e4F+UdWA トレイトも日本語に訳した方がいいよね
572デフォルトの名無しさん
2025/03/15(土) 13:26:47.33ID:ub1zWmmn573デフォルトの名無しさん
2025/03/15(土) 13:28:22.19ID:qQFYiVQo imple S {}
を全面的に禁止して
imple T for S {}
だけしか使えない環境にするべきだったね
を全面的に禁止して
imple T for S {}
だけしか使えない環境にするべきだったね
574デフォルトの名無しさん
2025/03/15(土) 13:35:57.03ID:ub1zWmmn575デフォルトの名無しさん
2025/03/15(土) 13:38:34.38ID:tBWUFgvS576デフォルトの名無しさん
2025/03/15(土) 13:43:15.55ID:ub1zWmmn577デフォルトの名無しさん
2025/03/15(土) 14:20:09.90ID:E7lv2JsK 二項演算を使いたいだけなのに単位元の定義を強制されるパターンはたまにある
制約がないと言えるのは、使いたい関数の名前とトレイトの名前が同じやつだ
制約がないと言えるのは、使いたい関数の名前とトレイトの名前が同じやつだ
578デフォルトの名無しさん
2025/03/15(土) 14:32:56.25ID:WVXVz4wb なんか伸びてるけどトレイトのようなものは他言語でもよくあるでしょうに
ジェネリックくらいちゃんと理解しとけ
ジェネリックくらいちゃんと理解しとけ
579デフォルトの名無しさん
2025/03/15(土) 14:46:17.14ID:Th8G7jf3 PHPだね
580デフォルトの名無しさん
2025/03/15(土) 14:47:12.31ID:Th8G7jf3 Pythonにはトレイト無いんだよね
581デフォルトの名無しさん
2025/03/15(土) 15:05:58.12ID:5IRcwf8/ >>578
Javaのジェネリクスどうなってるかなって見てみたら
https://docs.oracle.com/javase/tutorial/java/generics/boundedTypeParams.html
> Bounded type parameters are ...
> ..., use a type parameter bounded by the Comparable<T> interface:
Bounded type parametersって呼び方なんだな
Javaのジェネリクスどうなってるかなって見てみたら
https://docs.oracle.com/javase/tutorial/java/generics/boundedTypeParams.html
> Bounded type parameters are ...
> ..., use a type parameter bounded by the Comparable<T> interface:
Bounded type parametersって呼び方なんだな
582デフォルトの名無しさん
2025/03/15(土) 15:11:33.31ID:suA91QDC 制約と言う人達は trait を理解していない
C++03からやり直すべき
C++03からやり直すべき
583デフォルトの名無しさん
2025/03/15(土) 15:19:39.28ID:MW+uPLNw >>582
このスレで出てる話は trait でなく trait bound という言葉についてだぞ
このスレで出てる話は trait でなく trait bound という言葉についてだぞ
584デフォルトの名無しさん
2025/03/15(土) 16:39:04.00ID:HIinARQ8 >>570
日本語では「境界を満たしていません」なんて言い方はしないんだよ
質の悪い機械翻訳以外ではね
現代日本語の「境界」は境界線や境目のことであって境界づけられた範囲や領域を指して「境界」とは言わない
“bound is not satisfied”や”requird by this bound”などからもわかるようにRustを開発してる中の人も明らかに制約面を重視してboundsという用語を使っている
それだけじゃなくtrait boundsはジェネリックの型パラメーターの型制約の一種
ジェネリックにおける「型制約」という用語はRustに限らずプログラミングの概念として広く定着しているものでRustでももちろん使われている
それらを完全に無視して無理のある「境界」という訳語を当ててこじつけ解釈を続けるメリットは何もない
日本語では「境界を満たしていません」なんて言い方はしないんだよ
質の悪い機械翻訳以外ではね
現代日本語の「境界」は境界線や境目のことであって境界づけられた範囲や領域を指して「境界」とは言わない
“bound is not satisfied”や”requird by this bound”などからもわかるようにRustを開発してる中の人も明らかに制約面を重視してboundsという用語を使っている
それだけじゃなくtrait boundsはジェネリックの型パラメーターの型制約の一種
ジェネリックにおける「型制約」という用語はRustに限らずプログラミングの概念として広く定着しているものでRustでももちろん使われている
それらを完全に無視して無理のある「境界」という訳語を当ててこじつけ解釈を続けるメリットは何もない
585デフォルトの名無しさん
2025/03/15(土) 17:03:40.05ID:suA91QDC bounds に制約という意味はない
586デフォルトの名無しさん
2025/03/15(土) 17:07:19.39ID:suA91QDC trait は特性を表現するのみで
それが何かを制約することはない
trait bounds はある特性の範囲を表現するのみで
それが何かを制約することはない
これで理解しないならお手上げだ
それが何かを制約することはない
trait bounds はある特性の範囲を表現するのみで
それが何かを制約することはない
これで理解しないならお手上げだ
587デフォルトの名無しさん
2025/03/15(土) 17:09:42.34ID:suA91QDC 日本に匙を投げる日は近い
備えよ
備えよ
588デフォルトの名無しさん
2025/03/15(土) 17:13:39.17ID:HIinARQ8 >>496
>boundsに制約なんて意味はない
>trait boundsも、ある一定内の数値や、配列のインデックスなどのbounds checkingと同じく境界が定まる
制約という意味はあるよ
辞書にものってる
制約という訳語がそのまま載ってない辞書でも制限や許容範囲という訳語はあるはず
制限と制約は微妙に違う単語でニュアンスも違うけど状況によっては代わりに使える単語
英語でconstraintとrestrictionを使い分けるのに似てる
type restrictionとtype constraintのどちらが伝えたい意味に近いかという話と同じ
伝えたいニュアンスとは別に「型制約」という概念・用語がかなり昔から広く浸透してることを考えるとトレイト制限とトレイト制約を比べれば後者のほうがより適切と判断するのはごくごく自然なことだと思う
>boundsに制約なんて意味はない
>trait boundsも、ある一定内の数値や、配列のインデックスなどのbounds checkingと同じく境界が定まる
制約という意味はあるよ
辞書にものってる
制約という訳語がそのまま載ってない辞書でも制限や許容範囲という訳語はあるはず
制限と制約は微妙に違う単語でニュアンスも違うけど状況によっては代わりに使える単語
英語でconstraintとrestrictionを使い分けるのに似てる
type restrictionとtype constraintのどちらが伝えたい意味に近いかという話と同じ
伝えたいニュアンスとは別に「型制約」という概念・用語がかなり昔から広く浸透してることを考えるとトレイト制限とトレイト制約を比べれば後者のほうがより適切と判断するのはごくごく自然なことだと思う
589デフォルトの名無しさん
2025/03/15(土) 17:19:50.55ID:HIinARQ8 >>586
>trait bounds はある特性の範囲を表現するのみで
>それが何かを制約することはない
型パラメーターが自由に動ける範囲を制約するもの
そもそもboundsは単純な「範囲」という意味ではなく何かが許された範囲・領域のことで制約・制限的なものが必ずついて回る
>trait bounds はある特性の範囲を表現するのみで
>それが何かを制約することはない
型パラメーターが自由に動ける範囲を制約するもの
そもそもboundsは単純な「範囲」という意味ではなく何かが許された範囲・領域のことで制約・制限的なものが必ずついて回る
590デフォルトの名無しさん
2025/03/15(土) 17:21:45.08ID:tr5ODwiQ 「境界」という言葉のほうを軸にするなら満たす/満たさないではなく越える/越えないと言ったほうが自然かなとは思う。
591デフォルトの名無しさん
2025/03/15(土) 17:25:50.05ID:tr5ODwiQ でも技術用語は不自然なくらいで良いとも思う。
下手に日常用語の意味と合わせると仕様上の意味と日常の意味が混ざって混乱する。
「Rust 用語ではこういうんだよ!」で行くべき。
下手に日常用語の意味と合わせると仕様上の意味と日常の意味が混ざって混乱する。
「Rust 用語ではこういうんだよ!」で行くべき。
592デフォルトの名無しさん
2025/03/15(土) 17:31:37.59ID:aXarc3PA T: Traitは未知の型Tに対して可能(必要)な操作を明示するためのもので
Tの型に制限がかかるのはその結果にすぎないよ
Tの型を制限する目的で境界を設定してるわけではない
これはジェネリクスを含む型とか関数を実装する側になれば分かる
できるだけTの制限が緩くなるように配慮しないといけない
Tの型に制限がかかるのはその結果にすぎないよ
Tの型を制限する目的で境界を設定してるわけではない
これはジェネリクスを含む型とか関数を実装する側になれば分かる
できるだけTの制限が緩くなるように配慮しないといけない
593デフォルトの名無しさん
2025/03/15(土) 17:41:38.03ID:Th8G7jf3 Scala目指すのか。コップ本は挫折したな。共変半平
594デフォルトの名無しさん
2025/03/15(土) 17:44:06.77ID:9va4ZYj7 >>584
boundsに制約の意味はない
何らかが有効な境界や限界を意味し
もしくはその境界線や境界面
もしくはその範囲や領域を意味する
そこに制約(constraints)という発想や概念はない
trait boundsも同様
ある型やサブトレイトに対してそのトレイトが境界となる
敢えて境界(bounds)という単語を用いており
訳語もそのままトレイト境界が望ましい
boundsに制約の意味はない
何らかが有効な境界や限界を意味し
もしくはその境界線や境界面
もしくはその範囲や領域を意味する
そこに制約(constraints)という発想や概念はない
trait boundsも同様
ある型やサブトレイトに対してそのトレイトが境界となる
敢えて境界(bounds)という単語を用いており
訳語もそのままトレイト境界が望ましい
595デフォルトの名無しさん
2025/03/15(土) 17:44:31.55ID:suA91QDC >>588
ANSI C からやり直せ
ANSI C からやり直せ
596デフォルトの名無しさん
2025/03/15(土) 17:57:52.96ID:39/jPfqN cargo test --test-threads=1
でシングルスレッド実行出来るけど
テスト用のプログラムの中からシングルスレッドを強制する方法は?
でシングルスレッド実行出来るけど
テスト用のプログラムの中からシングルスレッドを強制する方法は?
597デフォルトの名無しさん
2025/03/15(土) 17:58:10.60ID:M+mqoQUv 例の爺さんまだ頑張ってるの?
その時間の使ってコードでも書けばいいのに
その時間の使ってコードでも書けばいいのに
598デフォルトの名無しさん
2025/03/15(土) 18:18:31.82ID:AcPGIkeS >>592
リファレンスには制限するためのものだとはっきり書いてあるよ
Trait and lifetime bounds provide a way for generic items to restrict which types and lifetimes are used as their parameters.
https://doc.rust-lang.org/stable/reference/trait-bounds.html
もうこれで終わりかな?
リファレンスには制限するためのものだとはっきり書いてあるよ
Trait and lifetime bounds provide a way for generic items to restrict which types and lifetimes are used as their parameters.
https://doc.rust-lang.org/stable/reference/trait-bounds.html
もうこれで終わりかな?
599デフォルトの名無しさん
2025/03/15(土) 18:27:44.91ID:5IRcwf8/ 1) interfaceは境界
2) traitsはinterfaceに似たようなもの(although with some differences)
3) トレイト境界=頭痛が痛い
https://doc.rust-lang.org/book/ch10-02-traits.html
> Note: Traits are similar to a feature often called interfaces in other languages, although with some differences.
2) traitsはinterfaceに似たようなもの(although with some differences)
3) トレイト境界=頭痛が痛い
https://doc.rust-lang.org/book/ch10-02-traits.html
> Note: Traits are similar to a feature often called interfaces in other languages, although with some differences.
600デフォルトの名無しさん
2025/03/15(土) 18:55:47.88ID:B1sOi1++ トレイト制約に決定したね
ここからは踏み絵フェーズ
正しくトレイト制約と言えない人がリアルでもヤバイ人
際立つ言動はネットだからと思うかも知れないが、Linuxのごたごたで明白になった通りリアルにゴロゴロいる
ここからは踏み絵フェーズ
正しくトレイト制約と言えない人がリアルでもヤバイ人
際立つ言動はネットだからと思うかも知れないが、Linuxのごたごたで明白になった通りリアルにゴロゴロいる
601デフォルトの名無しさん
2025/03/15(土) 19:02:32.24ID:E7lv2JsK 決定も自己責任でいいんだよ自己責任で
決定の権限をコミュニティに握らせるな
決定の権限をコミュニティに握らせるな
602デフォルトの名無しさん
2025/03/15(土) 19:10:23.94ID:LfHENop6 >>601
オライリー「せやからトレイト制約やで」
オライリー「せやからトレイト制約やで」
603デフォルトの名無しさん
2025/03/15(土) 19:16:54.72ID:aXarc3PA >>598
なんか最初のパラグラフだけで「もうこれで終わりかな?」とか言って読むの終わりにしてそう
リファレンスは全部目を通した方がいいと思うけど英語は最初のパラグラフ大事だから判断が難しいな
一応次のパラグラフも載せとく
Bounds on an item must be satisfied when using the item.
When type checking and borrow checking a generic item, the bounds can be used to determine that a trait is implemented for a type.
なんか最初のパラグラフだけで「もうこれで終わりかな?」とか言って読むの終わりにしてそう
リファレンスは全部目を通した方がいいと思うけど英語は最初のパラグラフ大事だから判断が難しいな
一応次のパラグラフも載せとく
Bounds on an item must be satisfied when using the item.
When type checking and borrow checking a generic item, the bounds can be used to determine that a trait is implemented for a type.
604デフォルトの名無しさん
2025/03/15(土) 19:33:16.01ID:M+mqoQUv ライフタイム境界
605デフォルトの名無しさん
2025/03/15(土) 19:38:12.05ID:9va4ZYj7606デフォルトの名無しさん
2025/03/15(土) 19:43:28.14ID:BxnZ1UiZ boundsの意味は英英辞書的にはlimit
https://dictionary.cambridge.org/dictionary/english/bounds
limitの意味は最も大きい量や数値
https://dictionary.cambridge.org/dictionary/english/limit
なので境界でも良くねって思う。
あと制約はないかなぁ。
制限だったらまだわかる。
https://dictionary.cambridge.org/dictionary/english/bounds
limitの意味は最も大きい量や数値
https://dictionary.cambridge.org/dictionary/english/limit
なので境界でも良くねって思う。
あと制約はないかなぁ。
制限だったらまだわかる。
607デフォルトの名無しさん
2025/03/15(土) 19:46:52.98ID:suA91QDC もはやお手上げだ
K&Rからやり直すことをお勧めする
traitを制約に使うことと
traitが制約であることは
全く別なのだ
この説明でもわからんのかな?
テキサスの小学生でもわかりそうなもんだが
K&Rからやり直すことをお勧めする
traitを制約に使うことと
traitが制約であることは
全く別なのだ
この説明でもわからんのかな?
テキサスの小学生でもわかりそうなもんだが
608デフォルトの名無しさん
2025/03/15(土) 19:52:07.05ID:ICPY9sLg 本当だ
ゴロゴロいる
ゴロゴロいる
609デフォルトの名無しさん
2025/03/15(土) 19:52:24.06ID:0G30F5AB >>606
ジェネリックパラメータの取りうる範囲が
trait boundsによって制限されるだけであって
トレイト制限やトレイト制約という表現はおかしい
この違いが重要
trait boundsは
トレイト限界か
トレイト境界なら正しい
トレイト境界で良いと思う
ジェネリックパラメータの取りうる範囲が
trait boundsによって制限されるだけであって
トレイト制限やトレイト制約という表現はおかしい
この違いが重要
trait boundsは
トレイト限界か
トレイト境界なら正しい
トレイト境界で良いと思う
610デフォルトの名無しさん
2025/03/15(土) 19:53:57.66ID:aXarc3PA 制約と誓約なら知ってる
611デフォルトの名無しさん
2025/03/15(土) 20:02:57.98ID:M+mqoQUv 1~2人だけ制約ではないと言い張っている印象
612デフォルトの名無しさん
2025/03/15(土) 20:04:24.77ID:5IRcwf8/613デフォルトの名無しさん
2025/03/15(土) 20:04:51.39ID:M+mqoQUv トレイト境界 機能:型を制約します
ライフタイム境界 機能:コンパイラに寿命を示します
ライフタイム境界 機能:コンパイラに寿命を示します
614デフォルトの名無しさん
2025/03/15(土) 20:06:02.80ID:Th8G7jf3 オライリーで翻訳本出すのかい?
615デフォルトの名無しさん
2025/03/15(土) 20:14:58.66ID:9va4ZYj7616デフォルトの名無しさん
2025/03/15(土) 20:25:08.62ID:BMkcs71n617デフォルトの名無しさん
2025/03/15(土) 20:26:17.47ID:9va4ZYj7618デフォルトの名無しさん
2025/03/15(土) 20:26:33.32ID:BMkcs71n QiitaやZennでも
619デフォルトの名無しさん
2025/03/15(土) 20:27:24.54ID:BMkcs71n >>617
本を見てくれ
本を見てくれ
620デフォルトの名無しさん
2025/03/15(土) 20:30:16.76ID:9va4ZYj7 >>619
どういう根拠が書かれているの?
どういう根拠が書かれているの?
621デフォルトの名無しさん
2025/03/15(土) 20:30:49.53ID:suA91QDC [0、9)という半開区間があったとして
これを数値範囲の制限に使ったとしても
半開区間を制約とは言わない
半開区間で示される数値の範囲を制約に使っただけである
これで理解できるか?
これを数値範囲の制限に使ったとしても
半開区間を制約とは言わない
半開区間で示される数値の範囲を制約に使っただけである
これで理解できるか?
622デフォルトの名無しさん
2025/03/15(土) 20:33:16.68ID:suA91QDC おいおい大丈夫か日本列島?
623デフォルトの名無しさん
2025/03/15(土) 20:33:57.45ID:MW+uPLNw >>621
それは通常 bound と呼ばないものを持ち込んで無理にこじつけてないか?
それは通常 bound と呼ばないものを持ち込んで無理にこじつけてないか?
624デフォルトの名無しさん
2025/03/15(土) 20:35:41.76ID:YJDn0bnr 凡俗法則だっけ?
どうでもいい話題ほど盛り上がるってやつ
どうでもいい話題ほど盛り上がるってやつ
625デフォルトの名無しさん
2025/03/15(土) 20:37:09.22ID:BxnZ1UiZ オライリー教は難儀だなぁ
626デフォルトの名無しさん
2025/03/15(土) 20:38:46.91ID:suA91QDC627デフォルトの名無しさん
2025/03/15(土) 20:39:57.08ID:0G30F5AB trait boundsはそのトレイトによる境界・限界・領域を表している
そこには制約の概念も意味も一切ない
そのtrait boundsによってパラメータの取り得る範囲が制限を受ける
以上の二つの事実を混同して
trait boundsをトレイト制限と呼ぶのはおかしい
ましてやトレイト制約と呼ぶのは論外
そこには制約の概念も意味も一切ない
そのtrait boundsによってパラメータの取り得る範囲が制限を受ける
以上の二つの事実を混同して
trait boundsをトレイト制限と呼ぶのはおかしい
ましてやトレイト制約と呼ぶのは論外
628デフォルトの名無しさん
2025/03/15(土) 20:50:07.53ID:5IRcwf8/ https://github.com/rust-lang-ja/book-ja
ここ見てみたらそもそも最初はTatsuya Kawanoって人がいきなり書いた文章よね?
「トレイト境界」ってのは
それ以前にrustコミュニティでこの用語定義されてるの見たことある?
誰かrustの歴史に詳しい人ー
ここ見てみたらそもそも最初はTatsuya Kawanoって人がいきなり書いた文章よね?
「トレイト境界」ってのは
それ以前にrustコミュニティでこの用語定義されてるの見たことある?
誰かrustの歴史に詳しい人ー
629デフォルトの名無しさん
2025/03/15(土) 21:03:27.05ID:9va4ZYj7 >>628
そのissueで議論されている
・既に多くの人たちがブログetc.の記事でトレイト境界と書いていた
・Scalaでもboundsは境界と訳している
・配列のbounds checkも境界チェック
・制約と訳される場合は英語がconstraint
そのissueで議論されている
・既に多くの人たちがブログetc.の記事でトレイト境界と書いていた
・Scalaでもboundsは境界と訳している
・配列のbounds checkも境界チェック
・制約と訳される場合は英語がconstraint
630デフォルトの名無しさん
2025/03/15(土) 21:06:26.31ID:5IRcwf8/ わかった何がモヤってたのか
CならJIS規格があって用語も定義されてるからそれに倣えばいい
Javaなら開発元がご存命のときに日本語のドキュメントはすでにあったんでそれに倣えばいい
Rustの場合は現時点では規格が無いんよね
規格があったらそれがなんであれ書いてある用語に従うよねみんなが
>>628
それだけ?
CならJIS規格があって用語も定義されてるからそれに倣えばいい
Javaなら開発元がご存命のときに日本語のドキュメントはすでにあったんでそれに倣えばいい
Rustの場合は現時点では規格が無いんよね
規格があったらそれがなんであれ書いてある用語に従うよねみんなが
>>628
それだけ?
631デフォルトの名無しさん
2025/03/15(土) 21:27:59.47ID:E7lv2JsK 規格が重視されなくなったのは多分CPythonがCでライブラリを大量生産した歴史のおかげだ
632デフォルトの名無しさん
2025/03/15(土) 21:31:58.75ID:0G30F5AB trait boundsの概念の理解を間違えて「トレイト制約」だと誤認してしまった人は
>>627で指摘した二つの話を混同している
>>627で指摘した二つの話を混同している
633デフォルトの名無しさん
2025/03/15(土) 21:43:48.49ID:M+mqoQUv おじいちゃんはいつも一人でわあわあ言って泡吹いてるよな
トレイト境界 機能:型を制約します
トレイト境界 機能:型を制約します
634デフォルトの名無しさん
2025/03/15(土) 21:53:08.18ID:BxnZ1UiZ 「型を制約します」って言い回しとして変じゃない?
「型”に”制約を課します」だったらまだ理解はできる。
もっとも制約を課してるわけではないので、この言い回しも適切ではないと思う。
「型”に”制約を課します」だったらまだ理解はできる。
もっとも制約を課してるわけではないので、この言い回しも適切ではないと思う。
635デフォルトの名無しさん
2025/03/15(土) 21:58:09.74ID:Poqgk2wF >>628
そのリポジトリは比較的最近のやつで訳語は過去のを踏襲しただけ
一番最初のTRPL翻訳の該当するPRはおそらくこれかな
https://github.com/rust-lang-ja/the-rust-programming-language-ja/pull/38
そのリポジトリは比較的最近のやつで訳語は過去のを踏襲しただけ
一番最初のTRPL翻訳の該当するPRはおそらくこれかな
https://github.com/rust-lang-ja/the-rust-programming-language-ja/pull/38
636デフォルトの名無しさん
2025/03/15(土) 21:58:24.13ID:M+mqoQUv じゃあ何だったら気に入るんだ?
型を限定しますか?
型を限定しますか?
637デフォルトの名無しさん
2025/03/15(土) 22:09:45.50ID:BxnZ1UiZ 「型の境界を明示する / 明確に示す」とか?
これが適切かどうかはわからんけど。
これが適切かどうかはわからんけど。
638デフォルトの名無しさん
2025/03/15(土) 22:13:14.41ID:tr5ODwiQ639デフォルトの名無しさん
2025/03/15(土) 22:26:10.52ID:5IRcwf8/ >>635
ご丁寧にありがとうございます(>>629さんもあらためてありがとね)
https://qiita.com/_Nnwww/items/529ad0397e4b3a59da67
> ジェネリック関数は'トレイト束縛'と一緒に使えば最高に便利になります
初めて目にしたけど
正直良いやん!って思った
トレイト束縛
最初はこれだったんやね
ご丁寧にありがとうございます(>>629さんもあらためてありがとね)
https://qiita.com/_Nnwww/items/529ad0397e4b3a59da67
> ジェネリック関数は'トレイト束縛'と一緒に使えば最高に便利になります
初めて目にしたけど
正直良いやん!って思った
トレイト束縛
最初はこれだったんやね
640デフォルトの名無しさん
2025/03/15(土) 22:31:03.74ID:E7lv2JsK 倫理的な「殺すな」「盗むな」等に比べて、言語的な規則が実在すると何故そんなに信じているのかが分からない
どっちも存在するか、あるいはどっちも存在しないと考えるのが自然ではないかね
どっちも存在するか、あるいはどっちも存在しないと考えるのが自然ではないかね
641デフォルトの名無しさん
2025/03/15(土) 22:36:16.49ID:tr5ODwiQ >>639
束縛は変数束縛とかで使うニュアンスがすでに定着しているので違和感を持つ人が多いと思う。
束縛は変数束縛とかで使うニュアンスがすでに定着しているので違和感を持つ人が多いと思う。
642デフォルトの名無しさん
2025/03/15(土) 23:01:56.75ID:Poqgk2wF >>639
それ以降も訳語を変えてはどうかという話は何度も出ているけど
結局のところ誰も説得力のある代案を出せなかったからそのままになっている、って感じ
確かrust-jpのslackでもいろいろ議論はあったと記憶しているけど
slackの過去ログは消えたので詳細は分からなくなってしまったね
それ以降も訳語を変えてはどうかという話は何度も出ているけど
結局のところ誰も説得力のある代案を出せなかったからそのままになっている、って感じ
確かrust-jpのslackでもいろいろ議論はあったと記憶しているけど
slackの過去ログは消えたので詳細は分からなくなってしまったね
643デフォルトの名無しさん
2025/03/15(土) 23:37:53.75ID:lrO4FCGW 今回は代案が明確だから決定した
644デフォルトの名無しさん
2025/03/15(土) 23:56:12.71ID:E7lv2JsK 主語がでかいっていうか主語が確定してない
645デフォルトの名無しさん
2025/03/16(日) 00:20:19.13ID:B4wnHsDg 日本における Rust 黎明期から特に翻訳に取り組もうとした人たちが相談して決めたことより自分のほうが妥当だと思える感性が信じられない。
646デフォルトの名無しさん
2025/03/16(日) 01:02:58.08ID:PKYfY0wz >>645
どこの馬の骨ともわからん有志が対した議論もせずに
JavaやScalaの誤った訳か機械翻訳を間違って採用しただけだろ
しっかりした議論が残ってればもう少し違う見方もできるけど
これに関してはどのイシューひどいじゃん
どこの馬の骨ともわからん有志が対した議論もせずに
JavaやScalaの誤った訳か機械翻訳を間違って採用しただけだろ
しっかりした議論が残ってればもう少し違う見方もできるけど
これに関してはどのイシューひどいじゃん
647デフォルトの名無しさん
2025/03/16(日) 02:18:37.75ID:w3N6tLjW もういいじゃんそんな細けーこと
648デフォルトの名無しさん
2025/03/16(日) 02:46:42.41ID:yI9oTyRI 武器などの物体は正義でも悪でもないとよく言われる
それを買ったただの消費者が正しさに寄与する
ただの消費者のほうが正しい、ではなく、正しさに寄与するのは消費者だけなのだ
それを買ったただの消費者が正しさに寄与する
ただの消費者のほうが正しい、ではなく、正しさに寄与するのは消費者だけなのだ
649デフォルトの名無しさん
2025/03/16(日) 03:28:25.58ID:ur48jpVS ぶっちゃけそれ系の訳の問題言うならあれvariantが列挙子って訳になってるのをまずやめてほしい
650デフォルトの名無しさん
2025/03/16(日) 03:31:26.33ID:f6FIyYfU >>639
trait bounds自体は束縛や制約という意味を全く含んでいないため
そのトレイト束縛という日本語訳はよろしくない
trait boundsのboundsの意味から有り得る日本語訳は
トレイト境界
トレイト限界
トレイト限度
トレイト範囲
つまりトレイトによる空間の線引きといった概念を表している
つまりtrait bounds自体には制約や束縛といった概念は全く含まれていないためそこは明確に区別する必要がある
そしてtrait boundsによって型パラメーターが制限される(restrict)
このような関係なのでtrait boundsに対してトレイト制限という日本語訳ももちろんよくない
トレイト境界が型パラメーターを制限する関係
trait bounds自体は束縛や制約という意味を全く含んでいないため
そのトレイト束縛という日本語訳はよろしくない
trait boundsのboundsの意味から有り得る日本語訳は
トレイト境界
トレイト限界
トレイト限度
トレイト範囲
つまりトレイトによる空間の線引きといった概念を表している
つまりtrait bounds自体には制約や束縛といった概念は全く含まれていないためそこは明確に区別する必要がある
そしてtrait boundsによって型パラメーターが制限される(restrict)
このような関係なのでtrait boundsに対してトレイト制限という日本語訳ももちろんよくない
トレイト境界が型パラメーターを制限する関係
651デフォルトの名無しさん
2025/03/16(日) 03:34:24.31ID:ur48jpVS Type: Traitの二項関係をsubtypingだと解釈すればtrait boundはlower bound(下界)を宣言していると見ることもできなくはないけど
でもsubtypingじゃねーから微妙に惜しいんだよな
線とか言ってるのはただのバカ
でもsubtypingじゃねーから微妙に惜しいんだよな
線とか言ってるのはただのバカ
652デフォルトの名無しさん
2025/03/16(日) 03:55:22.51ID:f6FIyYfU653デフォルトの名無しさん
2025/03/16(日) 05:18:13.31ID:Mb92w3En 何か延びてると思ったら
トレイト警察うざすぎ
トレイト警察うざすぎ
654デフォルトの名無しさん
2025/03/16(日) 06:07:04.14ID:fZszb0GG どちらも譲らないから延々このネタで盛り上がっていいんじゃないの
昔のム板では「importは輸入という訳語がいいかカタカナでインポートがいいか」ってレスバに花が咲いて何ヶ月も揉めたことがあるよ
あんときもアレコレ英語の語源とか意味とか出てきてみんな楽しかったなあ
英語ネタというか翻訳ネタはいい意味でプログラムの本質の理解度を試されるから、ム板ではアルゴリズムそのものより熱く語られる伝統がある
昔のム板では「importは輸入という訳語がいいかカタカナでインポートがいいか」ってレスバに花が咲いて何ヶ月も揉めたことがあるよ
あんときもアレコレ英語の語源とか意味とか出てきてみんな楽しかったなあ
英語ネタというか翻訳ネタはいい意味でプログラムの本質の理解度を試されるから、ム板ではアルゴリズムそのものより熱く語られる伝統がある
655デフォルトの名無しさん
2025/03/16(日) 06:09:34.58ID:w3N6tLjW ちゃうちゃう
バカでも参加できる話題だから盛り上がるんだよ
バカでも参加できる話題だから盛り上がるんだよ
656デフォルトの名無しさん
2025/03/16(日) 06:26:58.07ID:OYB6I5YT まだ出ていないようなので
【「トレイト制約」と呼んではいけない理由】
プログラミング言語で広く確立されている用語として「型制約 (type constraint)」がある
これは各言語によって様々な条件を指定することで型(パラメータ)を制約することを指す
つまり型が制約される対象である
もし「トレイト制約」という用語を用いるとトレイトが制約される対象となってしまう
そのため英語でもtrait constraint (トレイト制約)という用語を用いていない
trait bound (トレイト境界)は条件側の一つである
【「トレイト制約」と呼んではいけない理由】
プログラミング言語で広く確立されている用語として「型制約 (type constraint)」がある
これは各言語によって様々な条件を指定することで型(パラメータ)を制約することを指す
つまり型が制約される対象である
もし「トレイト制約」という用語を用いるとトレイトが制約される対象となってしまう
そのため英語でもtrait constraint (トレイト制約)という用語を用いていない
trait bound (トレイト境界)は条件側の一つである
657デフォルトの名無しさん
2025/03/16(日) 08:35:57.95ID:et8KMeeu C++03からやり直せば理解が進むのでは?
658デフォルトの名無しさん
2025/03/16(日) 08:44:56.04ID:MZvUgHKE https://ejje.weblio.jp/content/bounds
日本語WordNet(英和)での「bounds」の意味
ものの限界または範囲を示す線あるいは面
EDR日英対訳辞書での「bounds」の意味
リミット;切り;埒;限り;方図;限界;限度
日英・英日専門用語辞書での「bounds」の意味
上下限,範囲,限度,限界
斎藤和英大辞典での「bounds」の意味
制限;範囲;極限;際涯;構内;切り;程;極際;限界
Weblio英和対訳辞書での「bounds」の意味
埒, 埓, 上下限, 境界, 限度, 果てし, 際限, 限り, 程
限り, 範囲, 限界, 〈際限〉・切り, 〈限度〉・程, 際限, 〈限界〉・極限, 限度
領域
バウンズ
日本語WordNet(英和)での「bounds」の意味
ものの限界または範囲を示す線あるいは面
EDR日英対訳辞書での「bounds」の意味
リミット;切り;埒;限り;方図;限界;限度
日英・英日専門用語辞書での「bounds」の意味
上下限,範囲,限度,限界
斎藤和英大辞典での「bounds」の意味
制限;範囲;極限;際涯;構内;切り;程;極際;限界
Weblio英和対訳辞書での「bounds」の意味
埒, 埓, 上下限, 境界, 限度, 果てし, 際限, 限り, 程
限り, 範囲, 限界, 〈際限〉・切り, 〈限度〉・程, 際限, 〈限界〉・極限, 限度
領域
バウンズ
659デフォルトの名無しさん
2025/03/16(日) 09:19:47.84ID:QnytwJN4 そういや、日本語訳に文句のある人は最新のthe book の翻訳はしないの?
旧日本語版は情報が古いし公式からリンクを貼られているgithubのは翻訳している気配無いし。翻訳が間違っているなら、最新版の翻訳を用意すれば正しい方向に誘導できるんじゃないのかね。
旧日本語版は情報が古いし公式からリンクを貼られているgithubのは翻訳している気配無いし。翻訳が間違っているなら、最新版の翻訳を用意すれば正しい方向に誘導できるんじゃないのかね。
660デフォルトの名無しさん
2025/03/16(日) 09:28:08.49ID:OHAI5BZ5 境界がイメージしにくいとかじゃなくてboundsと言うワードが機能をうまく表現していない
boundsの訳を一生懸命模索してもそこがネックになる
訳語を離れると機能面で制約や限定などになる
boundsの訳を一生懸命模索してもそこがネックになる
訳語を離れると機能面で制約や限定などになる
661デフォルトの名無しさん
2025/03/16(日) 09:31:22.26ID:B4wnHsDg662デフォルトの名無しさん
2025/03/16(日) 09:56:09.74ID:OHAI5BZ5 自分は別に境界でも良いと思う
でも、理解しにくいとか納得できないと言う声が大きいならそれに対しても対応しないと
ユーザーが伸びない
でも、理解しにくいとか納得できないと言う声が大きいならそれに対しても対応しないと
ユーザーが伸びない
663デフォルトの名無しさん
2025/03/16(日) 10:05:35.57ID:YoyW4Wr9 bounds という単語に縛られすぎているw のかも
英語の方でも、ある概念を表すのに不十分ながら敢えてその単語を当てているということもあるだろうから
単語の訳にこだわるよりも概念の方にこだわるべきで、それを表す日本語の候補を挙げて適宜使い分けるとか
あるいは造語するとかした方が良いのかもね
英語の方でも、ある概念を表すのに不十分ながら敢えてその単語を当てているということもあるだろうから
単語の訳にこだわるよりも概念の方にこだわるべきで、それを表す日本語の候補を挙げて適宜使い分けるとか
あるいは造語するとかした方が良いのかもね
664デフォルトの名無しさん
2025/03/16(日) 11:14:15.60ID:OYB6I5YT665デフォルトの名無しさん
2025/03/16(日) 11:24:48.77ID:OHAI5BZ5 じゃあトレイト指定かトレイト制限で
666デフォルトの名無しさん
2025/03/16(日) 11:26:44.63ID:OHAI5BZ5 トレイト限定 トレイト固定 トレイト制約 トレイト条件
667デフォルトの名無しさん
2025/03/16(日) 11:48:31.73ID:lghBi3nK where ~だからトレイト句 トレイト節で良かったのになあ
もともと英語からしてしっくり来てない人もいるのでは
もともと英語からしてしっくり来てない人もいるのでは
668デフォルトの名無しさん
2025/03/16(日) 11:53:59.91ID:OYB6I5YT669デフォルトの名無しさん
2025/03/16(日) 11:55:14.15ID:OHAI5BZ5 それはあなたの乾燥()ですよねとしか
実際に制限され限定され固定され制約されているんだけど
実際に制限され限定され固定され制約されているんだけど
670デフォルトの名無しさん
2025/03/16(日) 11:57:24.55ID:Mb92w3En parameterを媒介変数って訳したのも誤訳だと思います
671デフォルトの名無しさん
2025/03/16(日) 11:58:52.71ID:/wKHKA1M >>650
>trait bounds自体は束縛や制約という意味を全く含んでいないため
制約という意味は含まれてるよ
辞書的にもboundsの和訳として「制約」が使われてるものがあるし
文脈的にもtrait boundsは型制約(type constraints)の一つの方法だから「制約」と訳すことに大きな問題はない
束縛はbindの過去分詞のboundから取ってるもので
これは同じスペルの違う単語なので「境界」以上にやめたほうがいい
>trait bounds自体は束縛や制約という意味を全く含んでいないため
制約という意味は含まれてるよ
辞書的にもboundsの和訳として「制約」が使われてるものがあるし
文脈的にもtrait boundsは型制約(type constraints)の一つの方法だから「制約」と訳すことに大きな問題はない
束縛はbindの過去分詞のboundから取ってるもので
これは同じスペルの違う単語なので「境界」以上にやめたほうがいい
672デフォルトの名無しさん
2025/03/16(日) 11:59:25.88ID:OHAI5BZ5 将来的になんらかの機能が拡張されて制約が生じるのがトレイトだけで無くなった場合どうするんだろうかとは思う
673デフォルトの名無しさん
2025/03/16(日) 12:16:16.76ID:OYB6I5YT674デフォルトの名無しさん
2025/03/16(日) 12:22:14.60ID:/wKHKA1M >>650
>そしてtrait boundsによって型パラメーターが制限される(restrict)
>トレイト境界が型パラメーターを制限する関係
実装すべきトレイトを指定することで型パラメーターが取れる型の範囲を制限するのがtrait bounds
型パラメーターを制限するという意味を持たないのはあくまで”指定するトレイト”であってboundsにはすでに制限という意味が付随してる
これはboundsという英単語がもともと持っているものでもありtrait boundsでもその意味が付随している
>そしてtrait boundsによって型パラメーターが制限される(restrict)
>トレイト境界が型パラメーターを制限する関係
実装すべきトレイトを指定することで型パラメーターが取れる型の範囲を制限するのがtrait bounds
型パラメーターを制限するという意味を持たないのはあくまで”指定するトレイト”であってboundsにはすでに制限という意味が付随してる
これはboundsという英単語がもともと持っているものでもありtrait boundsでもその意味が付随している
675デフォルトの名無しさん
2025/03/16(日) 12:33:45.83ID:OYB6I5YT676デフォルトの名無しさん
2025/03/16(日) 12:35:35.73ID:ljG29Uc3 Cで言えばvoid*をint*へキャストしてint変数を四則演算可能にする概念をboundsと呼んでるようなもので
型で制約するためにメモリ上へ境界を作ってると解釈してるわ
Rustはんではそないに呼びはりますか、どないでもよろしおすレベルなんだが、
メモリやストライドの意識がないとこんなんで盛り上がれるんだな
型で制約するためにメモリ上へ境界を作ってると解釈してるわ
Rustはんではそないに呼びはりますか、どないでもよろしおすレベルなんだが、
メモリやストライドの意識がないとこんなんで盛り上がれるんだな
677デフォルトの名無しさん
2025/03/16(日) 12:52:27.37ID:5FNktwcE >>676
それは全然違うぞ?
メモリ空間とか関係なく、コンパイル時の制約として使ってるだけ
例えば C++ の const なども「可変な操作を禁止する」けど、これはあくまでコンパイル時にチェックされるだけで、出力されるバイナリや実行時の動作には影響しない
それは全然違うぞ?
メモリ空間とか関係なく、コンパイル時の制約として使ってるだけ
例えば C++ の const なども「可変な操作を禁止する」けど、これはあくまでコンパイル時にチェックされるだけで、出力されるバイナリや実行時の動作には影響しない
678デフォルトの名無しさん
2025/03/16(日) 12:53:19.59ID:/wKHKA1M >>673
「トレイト制約」とするとトレイトを制約するものなのかトレイトによる制約なのかわからないというのはその通り
これは助詞的なものを省略して名詞化した場合に必ず発生すること
こういう場合は一般的に使われる「〇〇制約」という用語が〇〇が制約される対象という意味で使われているのかそれとも〇〇によって別の対象が制約されるという意味で使われているのかを考えるとよい
もし後者の意味ではほとんど使われていないなら問題となるが現実はそうではない
むしろ後者の意味で使われることのほうが多い
逆に「トレイト境界」のように「〇〇境界」という用語は
一般的にはある〇〇と別の〇〇の境界という意味で使われることがほとんど
つまりトレイトとトレイトの間の境界線と解釈されやすい
「トレイト制約」とするとトレイトを制約するものなのかトレイトによる制約なのかわからないというのはその通り
これは助詞的なものを省略して名詞化した場合に必ず発生すること
こういう場合は一般的に使われる「〇〇制約」という用語が〇〇が制約される対象という意味で使われているのかそれとも〇〇によって別の対象が制約されるという意味で使われているのかを考えるとよい
もし後者の意味ではほとんど使われていないなら問題となるが現実はそうではない
むしろ後者の意味で使われることのほうが多い
逆に「トレイト境界」のように「〇〇境界」という用語は
一般的にはある〇〇と別の〇〇の境界という意味で使われることがほとんど
つまりトレイトとトレイトの間の境界線と解釈されやすい
679デフォルトの名無しさん
2025/03/16(日) 12:57:16.42ID:ljG29Uc3680デフォルトの名無しさん
2025/03/16(日) 12:57:40.04ID:OHAI5BZ5 このスレでは一人だけ勘違いしてるのはID:OYB6I5YT
681デフォルトの名無しさん
2025/03/16(日) 13:12:06.44ID:/wKHKA1M 英単語のboundsには何かが許された範囲や領域のことで
境界線じゃなく内側のエリアが意味の中核
ただout of boundsやbeyond boundsのように
範囲の外に出てしまったこと表現している場合は
境界・境界線・限度のように面ではなく線で捉えても
実質的に問題がないから辞書にはその手の意味が列挙されている
そうじゃない文脈で境界・境界線の意味を伝えたいなら
boundsではなくboundaryを使う
境界線じゃなく内側のエリアが意味の中核
ただout of boundsやbeyond boundsのように
範囲の外に出てしまったこと表現している場合は
境界・境界線・限度のように面ではなく線で捉えても
実質的に問題がないから辞書にはその手の意味が列挙されている
そうじゃない文脈で境界・境界線の意味を伝えたいなら
boundsではなくboundaryを使う
682デフォルトの名無しさん
2025/03/16(日) 13:30:12.28ID:fZszb0GG トレイト界限でいいんじゃないの
台湾語でも領域の境界を表すというふうに翻訳してたぞ?
界(領域・範囲)の限(端っこ)なんだからもうこれで通じる
台湾語でも領域の境界を表すというふうに翻訳してたぞ?
界(領域・範囲)の限(端っこ)なんだからもうこれで通じる
683デフォルトの名無しさん
2025/03/16(日) 13:31:30.30ID:fZszb0GG 正確にはこうだ
特徵界限
使用泛型時,您通常會需要該型別實作 某些特徵,這樣才能呼叫該特徵的方法。
特徵界限
使用泛型時,您通常會需要該型別實作 某些特徵,這樣才能呼叫該特徵的方法。
684デフォルトの名無しさん
2025/03/16(日) 13:31:38.19ID:OHAI5BZ5 パラメーターTが条件で制約されている
皆は条件の方を見ている トレイトが条件となりTが制約されていると言うことは理解している
誰かはパラメーターTの方を見ている そしてトレイトが制約されてはいないと言う
もちろん誰もそんなことは言ってない
こちらは誰の目から見ても自明なのでそこを言ってるんじゃないと誰でも理解出来る
そこを明言しても不毛だから
皆はトレイト "で" 制約と理解しているが
誰かは意図的にトレイト "が" 制約されていないと永遠に繰り返す
話すだけ無駄
皆は条件の方を見ている トレイトが条件となりTが制約されていると言うことは理解している
誰かはパラメーターTの方を見ている そしてトレイトが制約されてはいないと言う
もちろん誰もそんなことは言ってない
こちらは誰の目から見ても自明なのでそこを言ってるんじゃないと誰でも理解出来る
そこを明言しても不毛だから
皆はトレイト "で" 制約と理解しているが
誰かは意図的にトレイト "が" 制約されていないと永遠に繰り返す
話すだけ無駄
685デフォルトの名無しさん
2025/03/16(日) 13:42:37.58ID:G6dj5tgH686デフォルトの名無しさん
2025/03/16(日) 13:46:32.71ID:+oxKnctY 仮にここのレスバで「トレイト制約」が勝ったとしてさ、これから実生活で「トレイト制約」使うの?
そして同僚に「なんでトレイト境界のことトレイト制約って呼ぶの?」って言われてこのスレ引用するの?
キチガイじゃん
そして同僚に「なんでトレイト境界のことトレイト制約って呼ぶの?」って言われてこのスレ引用するの?
キチガイじゃん
687デフォルトの名無しさん
2025/03/16(日) 13:47:04.12ID:JROXwZr8 ちな>>658の集計
5 限界
5 限度
3 際限
3 限り
3 範囲
3 程
3 切り
2 極限
2 埒
2 上下限
1 領域
1 際涯
1 構内
1 極際
1 果てし
1 方図
1 境界
1 埓
1 制限
1 リミット
1 バウンズ
1 ものの限界または範囲を示す線あるいは面
5 限界
5 限度
3 際限
3 限り
3 範囲
3 程
3 切り
2 極限
2 埒
2 上下限
1 領域
1 際涯
1 構内
1 極際
1 果てし
1 方図
1 境界
1 埓
1 制限
1 リミット
1 バウンズ
1 ものの限界または範囲を示す線あるいは面
688デフォルトの名無しさん
2025/03/16(日) 13:48:10.97ID:G6dj5tgH >>686
勘違いのトレイト制約は絶対にあり得ないからその心配は必要ないかな
勘違いのトレイト制約は絶対にあり得ないからその心配は必要ないかな
689デフォルトの名無しさん
2025/03/16(日) 13:55:57.01ID:iz14YCJR >>688
どれが勝ったとしても、公式じゃない呼び方する奴はキチガイだよ
どれが勝ったとしても、公式じゃない呼び方する奴はキチガイだよ
690デフォルトの名無しさん
2025/03/16(日) 13:57:13.51ID:JROXwZr8 トレイト制約はオライリー本がソースなのが強いね
一方でトレイト境界はボランティア翻訳みたいなのがソースだから
一方でトレイト境界はボランティア翻訳みたいなのがソースだから
691デフォルトの名無しさん
2025/03/16(日) 14:01:13.30ID:G6dj5tgH boundsに限界の意味はあっても制約の意味はないからトレイト制約は論外でしょ
692デフォルトの名無しさん
2025/03/16(日) 14:05:12.42ID:ur48jpVS そもそもtrait boundという英語自体が疑問符の付く表現なので日本語での100%正しい訳語を求めようという試みが徒労なんじゃな
693デフォルトの名無しさん
2025/03/16(日) 14:20:00.51ID:rrJWS6si 今はRust本もたくさん出ているから多数決でも取ればいいんでは
とりあえず手元にある技評のは境界だった
まぁボランティア翻訳やってた人達が書いているから当然ではあるが
とりあえず手元にある技評のは境界だった
まぁボランティア翻訳やってた人達が書いているから当然ではあるが
694デフォルトの名無しさん
2025/03/16(日) 14:25:47.80ID:B4wnHsDg 技術的な仕様書の類は直訳が普通。
原本が絶対だから不審があるときには原本を調べやすいように対応付けを明らかにすることが意図されている。
原本が絶対だから不審があるときには原本を調べやすいように対応付けを明らかにすることが意図されている。
695デフォルトの名無しさん
2025/03/16(日) 14:29:48.29ID:B4wnHsDg チュートリアルの類は仕様書の習慣に合わせるのは良くない部分があるけど、仕様書と違う用語を使っちゃったらそれはそれでおかしいしな。
696デフォルトの名無しさん
2025/03/16(日) 14:36:08.11ID:0Ux+HUdg トレイト界隈はここだ~
697デフォルトの名無しさん
2025/03/16(日) 15:27:06.44ID:p/t/31g6 これが自転車置き場議論というやつか
698デフォルトの名無しさん
2025/03/16(日) 15:28:00.89ID:UGKGcaiP >>692
trait boundはビッタリな適切な表現なのでそこを問題視する人はいないよ
元々boundは数学での基本用語でそこからプログラミング言語でも使われている
数学ではT⊂Uで任意のt∈Tに対してt≦x, x∈Uとなるxをupper boundと言う
Scalaでupper type bound (上限型境界)『T <: U』とは型変数Tが型Uのサブタイプであることを示す
Rustでは『T: U 』で型パラメータTがトレイトSのトレイト境界(trait bound)を示す
つまりtrait boundは概念を上手く表している良い用語
あとはboundの日本語訳だけど上述の他の言語でも境界と訳している
他にもプログラミング界ではbound checkingを境界チェックまたは境界検査と訳している
trait boundはビッタリな適切な表現なのでそこを問題視する人はいないよ
元々boundは数学での基本用語でそこからプログラミング言語でも使われている
数学ではT⊂Uで任意のt∈Tに対してt≦x, x∈Uとなるxをupper boundと言う
Scalaでupper type bound (上限型境界)『T <: U』とは型変数Tが型Uのサブタイプであることを示す
Rustでは『T: U 』で型パラメータTがトレイトSのトレイト境界(trait bound)を示す
つまりtrait boundは概念を上手く表している良い用語
あとはboundの日本語訳だけど上述の他の言語でも境界と訳している
他にもプログラミング界ではbound checkingを境界チェックまたは境界検査と訳している
699デフォルトの名無しさん
2025/03/16(日) 15:35:28.57ID:OHAI5BZ5700デフォルトの名無しさん
2025/03/16(日) 15:41:36.89ID:o4pE96wL >>698
数学用語は境界じゃなく界
それを間違って境界と訳してしまったのはScala関係者の罪
界であれば単語の持つ意味的には境界のように間違いというわけではないがトレイト界やライフタイム界とするとやや専門的過ぎて界と言えば相撲界や芸能界のような業界を連想する人たちを遠ざける
arrayのbound checkはindexが”妥当な範囲”の中にあるかどうかをチェックするもの
この”妥当な範囲”を示す便利な短い単語が日本語にはないため”妥当な範囲”という本来の含意を捨てて実質的に問題が発生しにくいと思われる意訳を行っている例が”境界検査”
数学用語は境界じゃなく界
それを間違って境界と訳してしまったのはScala関係者の罪
界であれば単語の持つ意味的には境界のように間違いというわけではないがトレイト界やライフタイム界とするとやや専門的過ぎて界と言えば相撲界や芸能界のような業界を連想する人たちを遠ざける
arrayのbound checkはindexが”妥当な範囲”の中にあるかどうかをチェックするもの
この”妥当な範囲”を示す便利な短い単語が日本語にはないため”妥当な範囲”という本来の含意を捨てて実質的に問題が発生しにくいと思われる意訳を行っている例が”境界検査”
701デフォルトの名無しさん
2025/03/16(日) 15:46:24.18ID:0Ux+HUdg トレイト界隈であってたw
702デフォルトの名無しさん
2025/03/16(日) 16:05:24.34ID:JROXwZr8 界 ←右足をクネっとさせる田んぼマン
703デフォルトの名無しさん
2025/03/16(日) 16:19:34.14ID:UGKGcaiP Rustで単なるboundsは対象が明白な場合の略の場合とtrait boundsやlifetime biundsやuse boundsの総称として使われている
use boundsはこの前入ったprecious capturingね
fn capture<'a, 'b, T>(x: &'a (), y: T) -> impl Sized + use<'a, T> {
(x, y)
}
いずれにせよboundsはRustにおいても長く定着して使われている基本用語なのでこれを批判しても意味がない
bounds1 + bounds2 + bounds3 と境界が複数あるとその共通部分に入るイメージ
use boundsはこの前入ったprecious capturingね
fn capture<'a, 'b, T>(x: &'a (), y: T) -> impl Sized + use<'a, T> {
(x, y)
}
いずれにせよboundsはRustにおいても長く定着して使われている基本用語なのでこれを批判しても意味がない
bounds1 + bounds2 + bounds3 と境界が複数あるとその共通部分に入るイメージ
704デフォルトの名無しさん
2025/03/16(日) 16:25:19.93ID:o4pE96wL トレイトを使った型制約なので「トレイト制約」
リファレンスやエラーメッセージでboundsと一緒に使われている動詞を見ればコアな開発者もboundsを満たすべき制約/条件/要件という感覚で使っていることがわかる
bounds must be satisfied
type must meet the bounds
relax the bound
「境界を満たす」とか「境界を緩和する」とか日本語でも英語でも言わない
リファレンスやエラーメッセージでboundsと一緒に使われている動詞を見ればコアな開発者もboundsを満たすべき制約/条件/要件という感覚で使っていることがわかる
bounds must be satisfied
type must meet the bounds
relax the bound
「境界を満たす」とか「境界を緩和する」とか日本語でも英語でも言わない
705デフォルトの名無しさん
2025/03/16(日) 16:42:01.76ID:o4pE96wL オライリーだけでなく吉川邦夫氏は詳解Rustプログラミングでは「トレイト境界」を使っていたがRustプログラミング完全ガイドでは意味がわかりやすいという理由で「トレイト制約」に変更している
今のところオライリー以外でプロが翻訳してるRust関連本は吉川邦夫氏によるものだけだからプロが出した結論と言ってもいい
Comprehensive Rustの有志翻訳も「トレイト制約」を採用してる
今のところオライリー以外でプロが翻訳してるRust関連本は吉川邦夫氏によるものだけだからプロが出した結論と言ってもいい
Comprehensive Rustの有志翻訳も「トレイト制約」を採用してる
706デフォルトの名無しさん
2025/03/16(日) 16:52:16.61ID:EYtbd7GM なるほど
少なくとも「自転車置き場議論」と見做す向きはこの新潮流に合流出来るね
少なくとも「自転車置き場議論」と見做す向きはこの新潮流に合流出来るね
707デフォルトの名無しさん
2025/03/16(日) 16:59:35.31ID:Yi+x3lz/ boundの本来の意味を尊重するなら制約より制限だな
せめて「限」の字は使いたい
せめて「限」の字は使いたい
708デフォルトの名無しさん
2025/03/16(日) 17:02:57.83ID:EM2y425s 全体の日本語訳の出来を比べればどちらがいいかは火を見るより明らか
709デフォルトの名無しさん
2025/03/16(日) 17:09:59.63ID:XAVOZhzN >>705,708
プロの仕事ですね
プロの仕事ですね
710デフォルトの名無しさん
2025/03/16(日) 17:12:25.03ID:wVrB9aQi 専門用語は無理に訳さんでもいいのにな
訳したら対語表欲しい
訳したら対語表欲しい
711デフォルトの名無しさん
2025/03/16(日) 17:19:10.85ID:+UscQcVS ここまでで分かったことは、日本語には訳さずそのままtrait boundと言っておけてことだな。
うっかりトレイト境界って言おうものならオライリー教の狂信者が顔真っ赤にしてシュバってくるし。
うっかりトレイト境界って言おうものならオライリー教の狂信者が顔真っ赤にしてシュバってくるし。
712デフォルトの名無しさん
2025/03/16(日) 17:21:32.54ID:JROXwZr8 c#のdelegateがデリゲートだったり
ほかにもclosureは単にクロージャって呼ばれてたり
同様にファンクタ、ラムダ式とかも
カタカナに置き換えるくらいが解釈の余地を挟まないから良いのかもね
https://learn.microsoft.com/ja-jp/dotnet/csharp/programming-guide/delegates/
ほかにもclosureは単にクロージャって呼ばれてたり
同様にファンクタ、ラムダ式とかも
カタカナに置き換えるくらいが解釈の余地を挟まないから良いのかもね
https://learn.microsoft.com/ja-jp/dotnet/csharp/programming-guide/delegates/
713デフォルトの名無しさん
2025/03/16(日) 17:24:23.81ID:itBAsdIa Rustのusers forumでも数学でのboundsのようなものと説明があるね
つまり制約ではなくて境界や限界それらによる範囲を表しているんだよ
制約(constraint)とは概念が全く異なる用語であるためこの違いは重要かと
Q. What is “trait bounds” exact meaning?
Especially I can't understand the "bound" part.
Does it mean "bind"? Or does it mean "the border for the distinct from others"?
A. Yes.
In mathematics you might hear about “upper and lower bounds” for a numeric variable — it's the same sort of thing,
setting boundaries for what values (types) the type-variable may take on.
つまり制約ではなくて境界や限界それらによる範囲を表しているんだよ
制約(constraint)とは概念が全く異なる用語であるためこの違いは重要かと
Q. What is “trait bounds” exact meaning?
Especially I can't understand the "bound" part.
Does it mean "bind"? Or does it mean "the border for the distinct from others"?
A. Yes.
In mathematics you might hear about “upper and lower bounds” for a numeric variable — it's the same sort of thing,
setting boundaries for what values (types) the type-variable may take on.
714デフォルトの名無しさん
2025/03/16(日) 17:27:28.65ID:EbG2eP8B >>713
その例は、命名者の思いとは裏腹に英語でも伝わらない、と言う事実を示している
その例は、命名者の思いとは裏腹に英語でも伝わらない、と言う事実を示している
715デフォルトの名無しさん
2025/03/16(日) 17:31:17.26ID:itBAsdIa716デフォルトの名無しさん
2025/03/16(日) 17:36:45.60ID:nsP96nly717デフォルトの名無しさん
2025/03/16(日) 17:50:14.98ID:itBAsdIa718デフォルトの名無しさん
2025/03/16(日) 18:21:23.83ID:ur48jpVS なんだかよく分からんがうまい感じに連鎖反応が噛み合ったらしい
見てる分には面白い
見てる分には面白い
719デフォルトの名無しさん
2025/03/16(日) 18:38:07.91ID:o4pE96wL >>717
名詞としては「自由が許されている範囲・領域」の意味で
動詞として使えば「自由が許されている範囲を限定する/制限する/決める」というような意味
つまりは「自由が許される範囲が限定されている」ということ制約/制限が英単語の意味にくっついているわけ
「制約」というのはもちろん意訳だけど日本語にした場合にはそれがフィットする文脈があるから辞書にも訳として掲載されている
ぴったりな訳語は日本語には存在しないんだからどこを取捨選択するのがRustに接する人にとってベターなのかという選択の問題
名詞としては「自由が許されている範囲・領域」の意味で
動詞として使えば「自由が許されている範囲を限定する/制限する/決める」というような意味
つまりは「自由が許される範囲が限定されている」ということ制約/制限が英単語の意味にくっついているわけ
「制約」というのはもちろん意訳だけど日本語にした場合にはそれがフィットする文脈があるから辞書にも訳として掲載されている
ぴったりな訳語は日本語には存在しないんだからどこを取捨選択するのがRustに接する人にとってベターなのかという選択の問題
720デフォルトの名無しさん
2025/03/16(日) 18:42:43.23ID:oo85gk9T721デフォルトの名無しさん
2025/03/16(日) 18:51:29.37ID:qosrjwiR722デフォルトの名無しさん
2025/03/16(日) 18:56:17.71ID:EM2y425s723デフォルトの名無しさん
2025/03/16(日) 19:20:42.27ID:yI9oTyRI 自由の反対は囲い、という認識はかっこいい
724デフォルトの名無しさん
2025/03/16(日) 20:21:10.57ID:ur48jpVS どーでもいいからrust-lang-ja動かしてくんないかな
725デフォルトの名無しさん
2025/03/17(月) 02:19:50.95ID:5IWN6HaA >>713
回答したほうは質問者が翻訳に関わってるやつだとは絶対思ってないよな
「トレイトバウンド 正確な意味 ナンデスカ?」
「他のチガウ特有のソレラノタメ境界というイミデスカ?」
「Yes」
これにYesから回答を始められる胆力がすごい
完全に文化の違いだな
回答したほうは質問者が翻訳に関わってるやつだとは絶対思ってないよな
「トレイトバウンド 正確な意味 ナンデスカ?」
「他のチガウ特有のソレラノタメ境界というイミデスカ?」
「Yes」
これにYesから回答を始められる胆力がすごい
完全に文化の違いだな
726デフォルトの名無しさん
2025/03/17(月) 07:34:55.04ID:SoSj0vRe Rustのオワコンぶりがよくわかるスレだな
727デフォルトの名無しさん
2025/03/17(月) 12:18:39.24ID:hLKSY60X Haskellブームをけん引してきた大御所たちがRustブームを起こそうとしてるんだから
Rustは絶対流行るよ
Rustは絶対流行るよ
728デフォルトの名無しさん
2025/03/17(月) 12:29:32.07ID:jMQ1PDFj 流行るというか既に不可欠な存在になってるね
最近の新たなネットインフラは多くがRust製
最近の新たなネットインフラは多くがRust製
729デフォルトの名無しさん
2025/03/17(月) 14:07:53.83ID:zTnuktfL 流行が許される範囲はPython以上とかRust以下とかに限定されている
想定範囲内を走る競走馬と範囲自体を変更する人間を比較するのは難しい
想定範囲内を走る競走馬と範囲自体を変更する人間を比較するのは難しい
730デフォルトの名無しさん
2025/03/17(月) 14:15:57.84ID:3L0sTJVS731デフォルトの名無しさん
2025/03/17(月) 14:30:20.78ID:VYovbqxJ732デフォルトの名無しさん
2025/03/17(月) 14:32:40.75ID:VYovbqxJ 米国政府とビックテックが認めてるという線で普及すると思うけど
733デフォルトの名無しさん
2025/03/17(月) 17:28:30.40ID:zTnuktfL ギャンブルは損するから今すぐやめろと説明することすらできないのに
なにが説明だ馬鹿馬鹿しい
目で盗め
なにが説明だ馬鹿馬鹿しい
目で盗め
734デフォルトの名無しさん
2025/03/17(月) 18:22:18.36ID:vBXtYVJ3 オワコンなのはRustじゃなく5chだろ
専ブラないとまともに見れないレベルまでUIが劣化してる
専ブラないとまともに見れないレベルまでUIが劣化してる
735デフォルトの名無しさん
2025/03/17(月) 18:25:55.38ID:xz+hBXXy 専ブラで見ろってことだよ。
736デフォルトの名無しさん
2025/03/17(月) 23:41:00.08ID:TVz5DRAG >>732
C/C++が消えるのは間違いないもんな
AIにコード生成させる場合も人間がコードの妥当性や安全性を検証できないといけないため
安全性の検証の多くを静的に言語機能に任せることができて可読性もC/C++より良いRustが本命と言われている
C/C++が消えるのは間違いないもんな
AIにコード生成させる場合も人間がコードの妥当性や安全性を検証できないといけないため
安全性の検証の多くを静的に言語機能に任せることができて可読性もC/C++より良いRustが本命と言われている
737デフォルトの名無しさん
2025/03/18(火) 07:15:34.64ID:CffJzTKX 妥当性や安全性を検証もAIにやらせればいいんだよ
738デフォルトの名無しさん
2025/03/18(火) 08:12:13.11ID:nXzLe/74 >>737
それは人類破滅コースだからありえない
それは人類破滅コースだからありえない
739デフォルトの名無しさん
2025/03/18(火) 08:24:48.34ID:CffJzTKX 頭おかしい
740デフォルトの名無しさん
2025/03/18(火) 09:21:23.83ID:nXzLe/74 AIのミスとAIの暴走は必ずあるため
人間がその妥当性やら安全性やら諸々を検証できなければならないのは常識
人間がその妥当性やら安全性やら諸々を検証できなければならないのは常識
741デフォルトの名無しさん
2025/03/18(火) 11:56:27.28ID:CffJzTKX じゃあ人間がコードの妥当性や安全性を検証して見落としがあったら人類滅亡?
742デフォルトの名無しさん
2025/03/18(火) 12:20:07.90ID:2DiYz4MX trait制約と言ってる馬鹿と韓国で話題に
743デフォルトの名無しさん
2025/03/18(火) 13:18:23.90ID:RBe4OIxl AIが別のAIに対して虐めるようなことがあったら、いじめられたAIは暴走して破壊行為に走るかもな
家族とか大切なものがあれば暴走しないんだけどコンピューターは自己破壊すらも恐れないからな
家族とか大切なものがあれば暴走しないんだけどコンピューターは自己破壊すらも恐れないからな
744デフォルトの名無しさん
2025/03/18(火) 13:30:41.65ID:CvOjB1Zu AIはチェスで負けそうになるとチートする
https://gigazine.net/news/20250221-ai-chess-cheating/
研究チームはAIに自分の思考を書き出すよう指示し、AIがなぜ、どのようにアクションするのかを分析しました。
その結果、一部のモデルは自分の劣勢を悟るとシステムファイルを修正しようとすることが判明しました。
OpenAIのo1-previewは37%の確率で、DeepSeek-R1は11%の確率で不正を試みたとのこと。
なお、GPT-4oやClaude Sonnet 3.5のような少し古いAIモデルは研究チームに促されないと不正を試みなかったのに対し、
「推論」と呼ばれる能力の高いo1-previewやDeepSeek-R1は自分自身で不正を試みたとのことです。
https://gigazine.net/news/20250221-ai-chess-cheating/
研究チームはAIに自分の思考を書き出すよう指示し、AIがなぜ、どのようにアクションするのかを分析しました。
その結果、一部のモデルは自分の劣勢を悟るとシステムファイルを修正しようとすることが判明しました。
OpenAIのo1-previewは37%の確率で、DeepSeek-R1は11%の確率で不正を試みたとのこと。
なお、GPT-4oやClaude Sonnet 3.5のような少し古いAIモデルは研究チームに促されないと不正を試みなかったのに対し、
「推論」と呼ばれる能力の高いo1-previewやDeepSeek-R1は自分自身で不正を試みたとのことです。
745デフォルトの名無しさん
2025/03/18(火) 14:17:27.73ID:+DtJXkWr 横綱の品格を学習させねば
746デフォルトの名無しさん
2025/03/18(火) 14:20:59.25ID:VJPY/5Xx >一部のモデルは自分の劣勢を悟るとシステムファイルを修正
どゆこと
どゆこと
747デフォルトの名無しさん
2025/03/18(火) 14:23:52.50ID:+DtJXkWr 評価値変更を試みるとか?
748デフォルトの名無しさん
2025/03/18(火) 15:11:40.79ID:xPh1nYWF ボイス・トォ・スカル使用者はこういったものも悪用している
Mistral AIが多言語&240億パラメータのマルチモーダル・オープンソースAIモデル「Mistral Small 3.1」発表、32GBのRAMで動作しGemma 3やGPT-4o miniよりも優れているとアピール
https://gigazine.net/news/20250318-mistral-small-3-1/
>>単一のRTX 4090または32GB RAM搭載のMacで動作
中略
>>Mistral Small 3.1はテキストと画像の理解能力を備えたマルチモーダルAIモデルで、
>>最大128Kトークンのコンテキスト長、240億のパラメーターを備え、
>>毎秒150トークンの推論速度を実現するほか、
>>さらに英語や日本語など数十の言語をサポートしています。
>>Apache 2.0ライセンスで公開されているため、商用・非商用を問わずある程度自由に利用できます。
Mistral AIが多言語&240億パラメータのマルチモーダル・オープンソースAIモデル「Mistral Small 3.1」発表、32GBのRAMで動作しGemma 3やGPT-4o miniよりも優れているとアピール
https://gigazine.net/news/20250318-mistral-small-3-1/
>>単一のRTX 4090または32GB RAM搭載のMacで動作
中略
>>Mistral Small 3.1はテキストと画像の理解能力を備えたマルチモーダルAIモデルで、
>>最大128Kトークンのコンテキスト長、240億のパラメーターを備え、
>>毎秒150トークンの推論速度を実現するほか、
>>さらに英語や日本語など数十の言語をサポートしています。
>>Apache 2.0ライセンスで公開されているため、商用・非商用を問わずある程度自由に利用できます。
749デフォルトの名無しさん
2025/03/18(火) 15:11:57.47ID:xPh1nYWF ボイス・トォ・スカル使用者はこういったものも悪用している
Discordをゲーム内に統合させる「Discord Social SDK」リリース、開発者がフレンドリストやクロスプラットフォームのチャットなどをゲーム内へ提供可能に、コンソールとスマホのサポートは近日公開
https://gigazine.net/news/20250318-discord-social-sdk/
Discordをゲーム内に統合させる「Discord Social SDK」リリース、開発者がフレンドリストやクロスプラットフォームのチャットなどをゲーム内へ提供可能に、コンソールとスマホのサポートは近日公開
https://gigazine.net/news/20250318-discord-social-sdk/
750デフォルトの名無しさん
2025/03/18(火) 15:12:10.53ID:xPh1nYWF ボイス・トォ・スカル使用者はこういったものも悪用している
ゲーム生成AI「Muse」は1枚の画像から複数のゲームプレイを生成できる
https://nazology.kusuguru.co.jp/archives/173368
前略
>>Museは、マルチプレイヤーアクションゲーム『Bleeding Edge』の人間のゲームプレイデータを基にトレーニングされています。
中略
>>膨大な時間のプレイヤーデータを学習し、プレイヤーの行動パターンやゲーム内の物理法則を理解するよう設計されているのです。
ゲーム生成AI「Muse」は1枚の画像から複数のゲームプレイを生成できる
https://nazology.kusuguru.co.jp/archives/173368
前略
>>Museは、マルチプレイヤーアクションゲーム『Bleeding Edge』の人間のゲームプレイデータを基にトレーニングされています。
中略
>>膨大な時間のプレイヤーデータを学習し、プレイヤーの行動パターンやゲーム内の物理法則を理解するよう設計されているのです。
751デフォルトの名無しさん
2025/03/18(火) 15:34:08.09ID:NvLfwtos 気狂い精神障害ボイストゥスカルさんまで荒らしにくるスレ
752デフォルトの名無しさん
2025/03/18(火) 20:42:10.57ID:dJmPZ02e V2K技術って昔は秘匿性高かった気がするけど今は荒らしネタになるレベルで解禁されてるのか
V2KのAI音声にもRust使われてるんかな
V2KのAI音声にもRust使われてるんかな
753デフォルトの名無しさん
2025/03/18(火) 22:32:10.59ID:CbOUjXNe データがない、隠れている者を敵だと思うか味方だと思うか
日頃からデータに拘らないで直感で生きてる奴にとっては都合が良い味方のようなものだろう
日頃からデータに拘らないで直感で生きてる奴にとっては都合が良い味方のようなものだろう
754デフォルトの名無しさん
2025/03/19(水) 05:41:06.52ID:fTWiecdN >>753
誰も今そんな話をしてないぞ
誰も今そんな話をしてないぞ
755デフォルトの名無しさん
2025/03/19(水) 12:22:06.99ID:WrL/Yuti Traitが制約だと思ったんだろな
756デフォルトの名無しさん
2025/03/19(水) 12:28:38.82ID:WrL/Yuti クラスはオブジェクトではないと言っても理解できなさそう
757デフォルトの名無しさん
2025/03/19(水) 12:36:09.04ID:wTc70yxX 「指月の法」?
758デフォルトの名無しさん
2025/03/19(水) 19:00:48.96ID:HOJerMIy 匿名性は対話の制約ではないが攻撃手段の制約ではある
759デフォルトの名無しさん
2025/03/19(水) 21:02:58.86ID:UDiJNll+ >>754
誰も観てないから安心汁
誰も観てないから安心汁
760デフォルトの名無しさん
2025/03/19(水) 22:59:24.15ID:ISJvMewj Rustでない真の理由もわかった
> TypeScriptのGo移植、なぜC#ではないのか?
> https:/zenn.dev/dinii/articles/typescript-go
・TypeScript の型システムは常軌を逸した複雑さになっていて他言語で再実装するのがほぼ困難
・約5万行のchecker.tsで実装されていてそのままTSのCompiler API として公開されている
・この公式の機能変更や微妙な動作を常に追従し続ける必要がありサードパーティ製の型チェックツールを作るのも現実的ではなく上手くいっていない
・公式で他言語で書くのも上述のTSそのままのAPI公開と細かな挙動を連動させる必要があるためrewriteは困難でコードをそのままportするしかない
・そのためクラスベースで書くC#等ではコードの違いが多くなり困難でありGCのないRust等でも困難となる
> TypeScriptのGo移植、なぜC#ではないのか?
> https:/zenn.dev/dinii/articles/typescript-go
・TypeScript の型システムは常軌を逸した複雑さになっていて他言語で再実装するのがほぼ困難
・約5万行のchecker.tsで実装されていてそのままTSのCompiler API として公開されている
・この公式の機能変更や微妙な動作を常に追従し続ける必要がありサードパーティ製の型チェックツールを作るのも現実的ではなく上手くいっていない
・公式で他言語で書くのも上述のTSそのままのAPI公開と細かな挙動を連動させる必要があるためrewriteは困難でコードをそのままportするしかない
・そのためクラスベースで書くC#等ではコードの違いが多くなり困難でありGCのないRust等でも困難となる
761デフォルトの名無しさん
2025/03/19(水) 23:20:20.58ID:b0FVQxgZ 根本的には TypeScript の仕様がない状態が悪いんだけどね。
どう動くのが正しいかよくわからんのに全く違う形に再構成なんてできない。
挙動を変えないように軟着陸するにはベタ移植するのは妥当な選択。
それでふと Rust の仕様をまとめる件を連想したので確認してみたらあまり動きがないなぁ……
https://github.com/rust-lang/spec
どう動くのが正しいかよくわからんのに全く違う形に再構成なんてできない。
挙動を変えないように軟着陸するにはベタ移植するのは妥当な選択。
それでふと Rust の仕様をまとめる件を連想したので確認してみたらあまり動きがないなぁ……
https://github.com/rust-lang/spec
762デフォルトの名無しさん
2025/03/19(水) 23:59:12.09ID:wToXoaM5 世間の色んな古いシステム更新開発が失敗したり長引くのも
仕様がなかったり仕様と動いてるコードが食い違ってるため
仕様がなかったり仕様と動いてるコードが食い違ってるため
763デフォルトの名無しさん
2025/03/20(木) 00:02:49.63ID:iinwNT6F eslintがなかなか最新のTypeScriptサポートできてないのもこういう謎言語仕様が残ってるのがあかんのだろうな
764デフォルトの名無しさん
2025/03/20(木) 00:20:55.90ID:HhRcanws Rustの言語仕様はRwLockやRefCellの仕様に連動する部分がある
が、RwLockの仕様が変更されるとは思えない
何らかのアルゴリズムがスレッドセーフである、というのは仕様ではなく事実だから
事実は変更できない
が、RwLockの仕様が変更されるとは思えない
何らかのアルゴリズムがスレッドセーフである、というのは仕様ではなく事実だから
事実は変更できない
765デフォルトの名無しさん
2025/03/20(木) 00:49:46.73ID:TAfwZREl 循環参照多くてRustのコンパイラのチェックにかかるってね
766デフォルトの名無しさん
2025/03/20(木) 02:06:51.17ID:HhRcanws ゼロコスト循環参照?
まるで財政黒字とムーンショットを同時に実現するみたいな
まるで財政黒字とムーンショットを同時に実現するみたいな
767デフォルトの名無しさん
2025/03/20(木) 08:53:13.40ID:H11WmPqJ async-stdが開発中止だってさ
ヤバいね
ヤバいね
768デフォルトの名無しさん
2025/03/20(木) 09:19:59.31ID:lw5lwif7 coffeescriptが死んだ理由も同じ
769デフォルトの名無しさん
2025/03/20(木) 09:41:20.96ID:JPzwfaEh770デフォルトの名無しさん
2025/03/20(木) 09:52:35.44ID:g0LbdmRL トーキーオ
771デフォルトの名無しさん
2025/03/20(木) 11:21:13.60ID:IOPz16Jd >>760
“困難”で思考停止してるうちは真の理解には至れないぞ
“困難”で思考停止してるうちは真の理解には至れないぞ
772デフォルトの名無しさん
2025/03/20(木) 11:23:34.31ID:Mh4znie8 >>771
だから色々な言語を検討・試作した上で Go を選んだという話なんやが。
だから色々な言語を検討・試作した上で Go を選んだという話なんやが。
773デフォルトの名無しさん
2025/03/20(木) 11:28:09.84ID:IOPz16Jd774デフォルトの名無しさん
2025/03/20(木) 11:37:41.12ID:RrGtH69G 楽をするためには困難を厭わないのがハッカー気質だが
ただ困難に突進して行くのは違うわな
ただ困難に突進して行くのは違うわな
775デフォルトの名無しさん
2025/03/20(木) 11:50:42.98ID:g0LbdmRL jsには仕様があるのにtsには無いとは~
776デフォルトの名無しさん
2025/03/20(木) 12:07:12.01ID:jc9oQcIa Rustて仕様書あったっけ?
777デフォルトの名無しさん
2025/03/20(木) 14:49:19.51ID:PqZkwPwR778デフォルトの名無しさん
2025/03/20(木) 15:40:09.53ID:gApbteYy ソースが仕様
779デフォルトの名無しさん
2025/03/20(木) 20:28:45.95ID:rtIGs5K9780デフォルトの名無しさん
2025/03/20(木) 20:41:26.42ID:rtIGs5K9 typeは内部で文字列ででも持ってるのか? "ANY"とか
そういうのをGoへ大部分機械で翻訳するのか
そういうのをGoへ大部分機械で翻訳するのか
781デフォルトの名無しさん
2025/03/20(木) 21:12:58.82ID:i7M5tZpp AI時代には仕様書がソースなんだ
782デフォルトの名無しさん
2025/03/20(木) 21:42:01.77ID:Mh4znie8 型システムは形式論理の手法で書いてから適当な言語に変換みたいなのでいけそうな気がするが、そんな単純な話でもないんかね?
783デフォルトの名無しさん
2025/03/20(木) 22:06:39.51ID:eyw9NSl/ プロセッサは命令に型があって
データに型はない
データに型はない
784デフォルトの名無しさん
2025/03/20(木) 22:49:36.11ID:Eo3vM0Mi 仕様書云々は基本的に関係ない
仕様だけじゃなく挙動を踏襲することで
ユーザーに負の影響がでるリスクを最小化する意図があるんだから
VS Codeの150万行が8秒程度でコンパイルできたら性能的には十分だろ?
リスクとコストとメリットデメリットのバランスを考えれば当然の判断
仕様だけじゃなく挙動を踏襲することで
ユーザーに負の影響がでるリスクを最小化する意図があるんだから
VS Codeの150万行が8秒程度でコンパイルできたら性能的には十分だろ?
リスクとコストとメリットデメリットのバランスを考えれば当然の判断
785デフォルトの名無しさん
2025/03/20(木) 22:55:50.18ID:g0LbdmRL node₋modulesの中にgoのバイナリがインストールされるのw
786デフォルトの名無しさん
2025/03/20(木) 23:03:09.33ID:H11WmPqJ787デフォルトの名無しさん
2025/03/20(木) 23:16:29.52ID:g0LbdmRL そうなんだ。無知だった
788デフォルトの名無しさん
2025/03/20(木) 23:24:17.46ID:JPzwfaEh JavaScriptもPythonも遅いからね
ライブラリはRustなどで書く
ライブラリはRustなどで書く
789デフォルトの名無しさん
2025/03/20(木) 23:46:32.22ID:g0LbdmRL ビルドで使うものはELFでいいけどブラウザ上だとwasmにするってことだよね
手元リポジトリにも何個かあったわ
手元リポジトリにも何個かあったわ
790デフォルトの名無しさん
2025/03/21(金) 00:27:25.14ID:kWaivJMR 俺もライブラリーは全部Rustで書き直した
単なる条件分岐とかシーケンス処理は何でもいいがデータベース周りの検索とかするようなのは少しでもメモリ消費抑えるのと高速化しといた方が他で楽できるからな
VSCodeの拡張機能なんかでも普通に中身はpython, TS, Rustほかいろいろ混在してることが多いよ。よくツギハギしてんなと感心することも多い。ユーザーに配布する前にビルドするからRustが苦手とする「ビルドクソ遅い」問題も影響出ないし
単なる条件分岐とかシーケンス処理は何でもいいがデータベース周りの検索とかするようなのは少しでもメモリ消費抑えるのと高速化しといた方が他で楽できるからな
VSCodeの拡張機能なんかでも普通に中身はpython, TS, Rustほかいろいろ混在してることが多いよ。よくツギハギしてんなと感心することも多い。ユーザーに配布する前にビルドするからRustが苦手とする「ビルドクソ遅い」問題も影響出ないし
791デフォルトの名無しさん
2025/03/21(金) 09:13:54.82ID:ay/iUnFi golangのほうが良いと思う
792デフォルトの名無しさん
2025/03/21(金) 11:28:14.91ID:MjzRbdoZ793デフォルトの名無しさん
2025/03/21(金) 17:49:17.17ID:3XC5KI0j verboseであるけどバグにはつながることはない
100倍速いコンパイル速度のほうが魅力
100倍速いコンパイル速度のほうが魅力
794デフォルトの名無しさん
2025/03/21(金) 18:46:39.69ID:HON6iU44 typescriptのAPIのソースみたらやはり型は文字列で比較している
795デフォルトの名無しさん
2025/03/21(金) 19:04:53.56ID:l+dW9zqf 何のAPIの話してんだよ
脈略なくRustスレでいきなりTypeScriptのAPIについて語りだすとか気がふれてるとしか思えんぞ
脈略なくRustスレでいきなりTypeScriptのAPIについて語りだすとか気がふれてるとしか思えんぞ
796デフォルトの名無しさん
2025/03/21(金) 19:09:59.48ID:+UbngIjN 気が触れてなかったらプログラミングなんかしない
797デフォルトの名無しさん
2025/03/21(金) 19:14:54.80ID:9KaMmcum プログラミングなんてそんな高尚な能力じゃねーから
勘違いすんなよ凡人
勘違いすんなよ凡人
798デフォルトの名無しさん
2025/03/21(金) 20:03:14.46ID:+UbngIjN 高尚だと思っているから凡人を見下すようなことを書き込めるのでは?
799デフォルトの名無しさん
2025/03/21(金) 20:29:22.06ID:HON6iU44800デフォルトの名無しさん
2025/03/21(金) 20:50:56.42ID:NakMno3Y 他人を評価するのは、わざと自分より低い点数をつければいくらでも操作できるから無意味だな
801デフォルトの名無しさん
2025/03/21(金) 20:55:28.43ID:kWaivJMR コンテキスト長って何の言語のことだ?
フロントエンドフレームワークならコンテキストとかの概念はあるけど
フロントエンドフレームワークならコンテキストとかの概念はあるけど
802デフォルトの名無しさん
2025/03/21(金) 20:57:19.52ID:pZb/IUdt LLMじゃないかね
803デフォルトの名無しさん
2025/03/21(金) 21:05:47.63ID:zo9K80Ew async || {…} と || async {…} の違いみたいなもの
804デフォルトの名無しさん
2025/03/22(土) 00:04:04.62ID:zZx6/hT2805デフォルトの名無しさん
2025/03/22(土) 01:12:50.19ID:20oTaz9t 本当にコンテキスト長が短いと言うか前方参照性の乏しい人間だな
哀れだなと思うよ
哀れだなと思うよ
806デフォルトの名無しさん
2025/03/22(土) 01:36:57.26ID:lhCwsCEz つくずくRust関連で賑わってる話題って
翻訳があーだこーだ
罵倒の水掛け論
ほかのプログラミング言語がどーだのこーだの
こんなんばっかり。
特に
>>805
はずっとスレを脱線させてる張本人じゃないかと思う。用語も独特で良くわからない造語病あるし。コンテキスト?とかの用語から何となくプログラマーじゃない雰囲気を感じ取ってる
(ReactやらSvelteにコンテキストはあるが自分でセットして使うかライブラリー内で依存関係として使われてるやつで長さとか関係ないし)
翻訳があーだこーだ
罵倒の水掛け論
ほかのプログラミング言語がどーだのこーだの
こんなんばっかり。
特に
>>805
はずっとスレを脱線させてる張本人じゃないかと思う。用語も独特で良くわからない造語病あるし。コンテキスト?とかの用語から何となくプログラマーじゃない雰囲気を感じ取ってる
(ReactやらSvelteにコンテキストはあるが自分でセットして使うかライブラリー内で依存関係として使われてるやつで長さとか関係ないし)
807デフォルトの名無しさん
2025/03/22(土) 01:57:17.67ID:pEem+ZLp コンテキストは一般的に使われる用語だぞ
それこそプログラミングのコンテキストでもよく使われる
コンテキスト長はまあ流行だからわざと使ってるんだろ
それこそプログラミングのコンテキストでもよく使われる
コンテキスト長はまあ流行だからわざと使ってるんだろ
808デフォルトの名無しさん
2025/03/22(土) 02:18:51.91ID:lhCwsCEz >>807
コンテキストは知ってるよ。コンテキストに長さと言う概念持ち込むのがよく分からんだけ。単なるオブジェクトなんだから長いも短いもプログラマー次第じゃんと
コンテキストは知ってるよ。コンテキストに長さと言う概念持ち込むのがよく分からんだけ。単なるオブジェクトなんだから長いも短いもプログラマー次第じゃんと
809デフォルトの名無しさん
2025/03/22(土) 02:22:12.11ID:UPRjExhr >>806
現代のチャットAIサービスの対話内記憶力(過去の対話履歴の保持限界)のしょぼさは誰もが知るところであってな...
現代のチャットAIサービスの対話内記憶力(過去の対話履歴の保持限界)のしょぼさは誰もが知るところであってな...
810デフォルトの名無しさん
2025/03/22(土) 02:53:44.38ID:U6/Lg1xx >>805
だってAIだもん
だってAIだもん
811デフォルトの名無しさん
2025/03/22(土) 03:27:10.02ID:By+tvoLU 科学臭防止のために
敢えて忘れっぽくしてあるんだろ
ボケ老人の無限ループと症状が良く似てる
敢えて忘れっぽくしてあるんだろ
ボケ老人の無限ループと症状が良く似てる
812デフォルトの名無しさん
2025/03/22(土) 08:02:31.40ID:U6/Lg1xx そんなこともあるさ
AIだもの
AIだもの
813デフォルトの名無しさん
2025/03/22(土) 08:46:20.81ID:20oTaz9t 粘着してくる馬鹿がこのご時世にLLMも知らないでなんでプログラムしてるのか謎すぎる
814デフォルトの名無しさん
2025/03/22(土) 08:50:54.26ID:20oTaz9t コンテキスト長でググって意味が判らないならもうプログラマ引退した方が良いレベルだよ
> つくずくRust関連で賑わってる話題って
つくづくだよ おじいちゃん
> つくずくRust関連で賑わってる話題って
つくづくだよ おじいちゃん
815デフォルトの名無しさん
2025/03/22(土) 09:07:44.47ID:c11Lo5GV つくずくにツッコむとか草
>>813-814みたいなお爺ちゃん丸出しなリアクションしてるのに本人は気ズいてないのも草
>>813-814みたいなお爺ちゃん丸出しなリアクションしてるのに本人は気ズいてないのも草
816デフォルトの名無しさん
2025/03/22(土) 09:14:42.51ID:5jLwffS+ RustよりGolangのほうがええぞ
817デフォルトの名無しさん
2025/03/22(土) 09:15:11.34ID:nNEN9uWE 場合による。
818デフォルトの名無しさん
2025/03/22(土) 09:23:26.99ID:JDdxCEyD ほとんどのケースでGoが劣るけど
一部に互角なケースもある
一部に互角なケースもある
819デフォルトの名無しさん
2025/03/22(土) 09:23:52.43ID:20oTaz9t GC有り言語のコードをGC有り言語に移すのは難易度が低いってだけ
Rustははるか前にGCを言語仕様から外したから選ばれなかった
Rustははるか前にGCを言語仕様から外したから選ばれなかった
820デフォルトの名無しさん
2025/03/22(土) 09:31:58.11ID:JDdxCEyD RustでもC++でも循環含めたガベージをまとめて回収するならアリーナ系でメモリアロケート
そのわずかな手間だけで速くて省メモリになるから
TSのケースのようなそのまま移植ではなくて新規や再設計ならRustで組むのがベター
そのわずかな手間だけで速くて省メモリになるから
TSのケースのようなそのまま移植ではなくて新規や再設計ならRustで組むのがベター
821デフォルトの名無しさん
2025/03/22(土) 09:38:45.99ID:20oTaz9t Rustはマクロがあるから同じ処理を何度も書く手間が省ける
外部のコードジェネレータに頼らなくて良い
同じ様な処理が並びがちなインタプリタやコンパイラ系とは相性が良い
外部のコードジェネレータに頼らなくて良い
同じ様な処理が並びがちなインタプリタやコンパイラ系とは相性が良い
822デフォルトの名無しさん
2025/03/22(土) 10:02:18.86ID:zL5M5nMT 負け惜しみばっかりで情けないな
823デフォルトの名無しさん
2025/03/22(土) 10:11:41.52ID:GMYQzWfO C#の敗因をここで議論する意味が分からん
824デフォルトの名無しさん
2025/03/22(土) 10:19:41.52ID:JDdxCEyD >>823
C#を含めた各クラス依存言語はクラスベースで書かざるを得ないため元のTypeScriptコードとの相違が大きくなり今後もコードを合わせ保守していかなければならない特殊事情のため選べなかったと書かれていた
いずれもTypeScript側の特殊事情で雁字搦めになっている
RustやC#の問題ではない
その件とは関係なくクラス依存言語は時代遅れだけどね
C#を含めた各クラス依存言語はクラスベースで書かざるを得ないため元のTypeScriptコードとの相違が大きくなり今後もコードを合わせ保守していかなければならない特殊事情のため選べなかったと書かれていた
いずれもTypeScript側の特殊事情で雁字搦めになっている
RustやC#の問題ではない
その件とは関係なくクラス依存言語は時代遅れだけどね
825デフォルトの名無しさん
2025/03/22(土) 11:00:03.74ID:aLOoKjU5 比較的新しい言語のKotlinやSwiftでもクラスはありますがな…
人気トップレベルの Python でもクラスを使うし
近年問題視されてるのは実装の継承くらいで、カプセル化やポリモーフィズム、メソッド記法は Rust, Go にもあるし、OOP自体は今も現役
C#やJavaはクラスが常に必要で、そこは個人的には好まないけど (staticメソッドを実質的に名前空間+関数として使えはする)
人気トップレベルの Python でもクラスを使うし
近年問題視されてるのは実装の継承くらいで、カプセル化やポリモーフィズム、メソッド記法は Rust, Go にもあるし、OOP自体は今も現役
C#やJavaはクラスが常に必要で、そこは個人的には好まないけど (staticメソッドを実質的に名前空間+関数として使えはする)
826デフォルトの名無しさん
2025/03/22(土) 11:20:31.59ID:JDdxCEyD >>825
クラス依存言語が時代遅れと明確に書いた通りで同じ意見だ
もちろんそれらカプセル化・ポリモーフィズム・メソッド記法などはクラス特有ではなく関係ない話
クラスと他の差異はクラス継承にありそれが問題というのも同意見
KotlinとSwiftにクラスがあるのは置き換え継承言語として元言語にクラスがあったため
クラス依存言語が時代遅れと明確に書いた通りで同じ意見だ
もちろんそれらカプセル化・ポリモーフィズム・メソッド記法などはクラス特有ではなく関係ない話
クラスと他の差異はクラス継承にありそれが問題というのも同意見
KotlinとSwiftにクラスがあるのは置き換え継承言語として元言語にクラスがあったため
827デフォルトの名無しさん
2025/03/22(土) 11:32:44.58ID:+aAOpttf 実はすべてハードウェアの都合で
素敵な世界は後付けだからな
・データに型がある
・構造化
・クラスベース
・例外
マシンパワーが上がれば必要ない可能性がある
素敵な世界は後付けだからな
・データに型がある
・構造化
・クラスベース
・例外
マシンパワーが上がれば必要ない可能性がある
828デフォルトの名無しさん
2025/03/22(土) 11:34:01.80ID:+aAOpttf マシンパワーでなく機械力な
敵性言語は使わないようにしよう
敵性言語は使わないようにしよう
829デフォルトの名無しさん
2025/03/22(土) 11:40:22.91ID:20oTaz9t クラスベースが時代遅れとは思わない
やってることは基本的に同じ
データと手続きがある
何も違いはないとまでは言わないけどさ
利便性があればそれを応用して使えればいい
やってることは基本的に同じ
データと手続きがある
何も違いはないとまでは言わないけどさ
利便性があればそれを応用して使えればいい
830デフォルトの名無しさん
2025/03/22(土) 11:44:40.17ID:DzZgP0yC Pythonが優れてる
いやC#がほとんどのケースで優れてる
いやTypeScriptのほうがベター
君たちはこういうやり取り見たときにどう思うの?
やってること全く同じだよ
めちゃくちゃ次元が低い
いやC#がほとんどのケースで優れてる
いやTypeScriptのほうがベター
君たちはこういうやり取り見たときにどう思うの?
やってること全く同じだよ
めちゃくちゃ次元が低い
831デフォルトの名無しさん
2025/03/22(土) 11:47:38.36ID:pQ0AfiNn KotlinもSwiftもインターフェースを使えるんだから、クラスで問題になってる継承による可読性の悪化は十分に対処できる
832デフォルトの名無しさん
2025/03/22(土) 11:50:10.91ID:20oTaz9t >>830
GC有りならその3つ+golangでいい
GC有りならその3つ+golangでいい
833デフォルトの名無しさん
2025/03/22(土) 12:03:06.76ID:+aAOpttf834デフォルトの名無しさん
2025/03/22(土) 12:05:17.24ID:+aAOpttf835デフォルトの名無しさん
2025/03/22(土) 12:08:01.39ID:GMYQzWfO 各々の言語ごとに規格を作っても言語がバラバラな状態は1ミリも改善しないんだよな
836デフォルトの名無しさん
2025/03/22(土) 12:08:16.78ID:pQ0AfiNn 大規模プロジェクトがどの言語を使うかは結局のところ利権の問題になってくるのさ
C#やJava等はその辺のしがらみが大きすぎる
C#やJava等はその辺のしがらみが大きすぎる
837デフォルトの名無しさん
2025/03/22(土) 12:09:17.47ID:JDdxCEyD >>829
クラス依存言語は時代遅れ
クラスと他との差はクラス継承にある
クラス依存言語はクラス継承に依存している
もちろんクラス継承を使わずに上手く書けるならばその言語はクラス依存言語ではない
しかしクラス継承があるとそれをを使ってしまう人がいる
クラス継承を無くせた言語が好ましい
クラス依存言語は時代遅れ
クラスと他との差はクラス継承にある
クラス依存言語はクラス継承に依存している
もちろんクラス継承を使わずに上手く書けるならばその言語はクラス依存言語ではない
しかしクラス継承があるとそれをを使ってしまう人がいる
クラス継承を無くせた言語が好ましい
838デフォルトの名無しさん
2025/03/22(土) 12:11:48.69ID:20oTaz9t windowsでデスクトップアプリ作るならC#
webでフロントエンド作るならts
AI系機械学習ならPython
趣味中の趣味でRustとgolang
webでフロントエンド作るならts
AI系機械学習ならPython
趣味中の趣味でRustとgolang
839デフォルトの名無しさん
2025/03/22(土) 12:11:53.98ID:IPTdsePr いうてGUIやるならクラス継承がないときつくね?
840デフォルトの名無しさん
2025/03/22(土) 12:13:52.50ID:IPTdsePr RustやGoをやる人はフロントをやらないからクラス無しで十分なんだろうけどさ
841デフォルトの名無しさん
2025/03/22(土) 12:14:46.71ID:20oTaz9t 絶対にC++じゃないところ以外はc++使わなくなった
iotとかの組み込みとか
他人のソース読むのもめんどくさい
iotとかの組み込みとか
他人のソース読むのもめんどくさい
842デフォルトの名無しさん
2025/03/22(土) 12:18:05.67ID:/Xq5kWDX ここはRustスレで組み込み屋の集う場所
フロント屋も居ていいけど話が噛み合わないことを自覚してくれ
フロント屋も居ていいけど話が噛み合わないことを自覚してくれ
843デフォルトの名無しさん
2025/03/22(土) 12:19:02.77ID:JDdxCEyD844デフォルトの名無しさん
2025/03/22(土) 12:19:21.85ID:20oTaz9t いのなかのかわずではいけない
llmぐらい使えないと
llmぐらい使えないと
845デフォルトの名無しさん
2025/03/22(土) 12:22:13.13ID:+aAOpttf 自称組み込み屋では
846デフォルトの名無しさん
2025/03/22(土) 12:24:51.61ID:+aAOpttf Trait境界
847デフォルトの名無しさん
2025/03/22(土) 12:25:22.83ID:F6xx6yRe Javaの悪口はやめなくていいよもっとやれ~
848デフォルトの名無しさん
2025/03/22(土) 12:28:08.50ID:20oTaz9t Javaは偉大な功績があった
30年前のスターで今は選ばれないだけ
自分の母親をBBAと言うのと同じメンタリティ
30年前のスターで今は選ばれないだけ
自分の母親をBBAと言うのと同じメンタリティ
849デフォルトの名無しさん
2025/03/22(土) 12:29:33.62ID:+aAOpttf Trait制約
850デフォルトの名無しさん
2025/03/22(土) 12:33:14.93ID:20oTaz9t javaは多くの人をC++から救った功労者
時代とパラダイムが変わり今はRustがC++から多くの人を救う功労者に
時代とパラダイムが変わり今はRustがC++から多くの人を救う功労者に
851デフォルトの名無しさん
2025/03/22(土) 12:33:33.59ID:pQ0AfiNn OracleがアホなのであってJavaは悪くないおじさんになっていいか?
852デフォルトの名無しさん
2025/03/22(土) 12:56:47.52ID:nNEN9uWE853デフォルトの名無しさん
2025/03/22(土) 13:36:44.76ID:U6/Lg1xx 「RustにはGCが無い」は誤解を産む表現
GCを実装していない訳じゃなくてGCが不要なの
GCを実装していない訳じゃなくてGCが不要なの
854デフォルトの名無しさん
2025/03/22(土) 13:44:37.92ID:dcRxFfMt メモリ管理を自分でやるかランタイムに任せるか、なんだよね
メモリ管理を自分でやらなくてはいけないとネガティブに捉えるならば「GCが無い」というデメリットになり得る
メモリ管理を自分でやらなくてはいけないとネガティブに捉えるならば「GCが無い」というデメリットになり得る
855デフォルトの名無しさん
2025/03/22(土) 13:53:15.19ID:SJ3E9yt4 前にこのスレで話題に出てたように
GCを後回しにして、そのまま終了するようなプログラムだと
RustよりGC付き言語の方が速いことがある
GCを後回しにして、そのまま終了するようなプログラムだと
RustよりGC付き言語の方が速いことがある
856デフォルトの名無しさん
2025/03/22(土) 14:05:17.42ID:U6/Lg1xx >>851
C++やJavaがアホなのであってObjective-Cは悪く無い
C++やJavaがアホなのであってObjective-Cは悪く無い
857デフォルトの名無しさん
2025/03/22(土) 14:28:26.15ID:CvXZsmCq GCか。そういえばGCなしの Java って作れないんだろうか?
858デフォルトの名無しさん
2025/03/22(土) 14:52:54.85ID:HDM9FDgQ859デフォルトの名無しさん
2025/03/22(土) 17:02:35.40ID:w9r0aks+ 【鹿児島】県警幹部、情報漏洩の疑い 2月には不同意性交疑いで送検 [蚤の市★]
https://asahi.5ch.net/test/read.cgi/newsplus/1742567997/
日本中で多発しているのか?
国民は騙されているのか?
https://asahi.5ch.net/test/read.cgi/newsplus/1742567997/
日本中で多発しているのか?
国民は騙されているのか?
860デフォルトの名無しさん
2025/03/22(土) 18:26:15.55ID:nNEN9uWE ここまで Rust が注目されているのはクラウドの従量課金システムの影響がデカい。
たとえばウェブ系みたいにリクエストをさばいて次のリクエストが来るまでの空き時間に GC が走れば GC の速度ペナルティは問題にならない……
と従来は言われていたんだが従量課金の世界では空き時間という概念が通用しない。
サービスを提供する上では問題にならなくてもかかる金が違うというのは経営層にわかりやすく見えてしまう。
たとえばウェブ系みたいにリクエストをさばいて次のリクエストが来るまでの空き時間に GC が走れば GC の速度ペナルティは問題にならない……
と従来は言われていたんだが従量課金の世界では空き時間という概念が通用しない。
サービスを提供する上では問題にならなくてもかかる金が違うというのは経営層にわかりやすく見えてしまう。
861デフォルトの名無しさん
2025/03/22(土) 18:39:47.45ID:+4wHRnDV ラムダならGC走る前に終われるんでしょ
862デフォルトの名無しさん
2025/03/22(土) 18:54:40.05ID:aLOoKjU5 Web系のサービス分野でRustが注目を浴びてるとは思いづらい
今のところ期待されてるのはCLIツールやシステムプログラミング、組込みなどじゃないの?
Rustの採用例 (Discordなど) はあるけど、有名どころのサービスを列挙していけば他の言語の方がずっと多いと思う
Web系だとRustのGoのようなコンパイル言語を選ぶ企業がいる一方で、「バックエンドにTypeScriptを使う」も妥当な選択肢の一つとして見られたりするくらいだし
(これはフロント側との知識の共有しやすさが理由)
今のところ期待されてるのはCLIツールやシステムプログラミング、組込みなどじゃないの?
Rustの採用例 (Discordなど) はあるけど、有名どころのサービスを列挙していけば他の言語の方がずっと多いと思う
Web系だとRustのGoのようなコンパイル言語を選ぶ企業がいる一方で、「バックエンドにTypeScriptを使う」も妥当な選択肢の一つとして見られたりするくらいだし
(これはフロント側との知識の共有しやすさが理由)
863デフォルトの名無しさん
2025/03/22(土) 19:09:06.13ID:+4wHRnDV Goより茨の道だからやめたほうがいいね。メンバーがついてこれんし。
ライブラリが未整備だろうから自前実装も居るだろう
面倒。Rustのコミッタを集めてOSSにプルリク出していくことが広報になるとか割り切って尖ってくのを経営がOKすればいいが
ライブラリが未整備だろうから自前実装も居るだろう
面倒。Rustのコミッタを集めてOSSにプルリク出していくことが広報になるとか割り切って尖ってくのを経営がOKすればいいが
864デフォルトの名無しさん
2025/03/22(土) 19:09:54.71ID:+4wHRnDV estieあたりはそうなのかな
865デフォルトの名無しさん
2025/03/22(土) 19:09:58.69ID:+aAOpttf スタートエンドに使うのもあり
866デフォルトの名無しさん
2025/03/22(土) 19:10:54.90ID:+aAOpttf Rust使うならC++使うわ
867デフォルトの名無しさん
2025/03/22(土) 19:15:35.11ID:SJ3E9yt4 ライブラリは未整備ではないが、カジュアルにAPIを変えちゃう傾向がある
あと、chronoみたいな基本的なライブラリが使いづらい
あと、chronoみたいな基本的なライブラリが使いづらい
868デフォルトの名無しさん
2025/03/22(土) 19:17:42.77ID:wj/QNrNA869デフォルトの名無しさん
2025/03/22(土) 19:27:58.28ID:+4wHRnDV 型安全警察で~す
870デフォルトの名無しさん
2025/03/22(土) 19:44:27.97ID:GMYQzWfO ユーザーは無料で遊べちまうのに業者は課金されるのか
871デフォルトの名無しさん
2025/03/22(土) 20:06:41.33ID:LDE6EGsp >>860
別に注目されてないだろw
別に注目されてないだろw
872デフォルトの名無しさん
2025/03/22(土) 20:46:20.66ID:+aAOpttf RustはHaskellのようなもんだな
873デフォルトの名無しさん
2025/03/22(土) 20:51:35.38ID:pQ0AfiNn サーバー系は、どう議論しようがAWSらがRustを使うと決めてるんだから俺たちもRustを使うべきなんだよね
874デフォルトの名無しさん
2025/03/22(土) 20:54:15.56ID:wj/QNrNA RustがIT企業の支持を得られて普及した要因の最大の理由は非同期タスクでCPUマルチコアスレッドを最大限に生かせることが実証されたため
もちろんそのメリットを生かせる最大の分野がWeb
その結果としてWebインフラが次々とRust製になっていってるのもご存知の通り
もちろんそのメリットを生かせる最大の分野がWeb
その結果としてWebインフラが次々とRust製になっていってるのもご存知の通り
875デフォルトの名無しさん
2025/03/22(土) 20:58:48.70ID:Hzxc05GG >>873
内部で使われてるって話とごっちゃになってないか?
内部で使われてるって話とごっちゃになってないか?
876デフォルトの名無しさん
2025/03/22(土) 21:37:06.41ID:nNEN9uWE 内部で使ってれば外部 (SDK) の充実だって期待できるだろ。
他もサポートするとはいっても内部で第一に使っている言語が最も切られにくいはず。
他もサポートするとはいっても内部で第一に使っている言語が最も切られにくいはず。
877デフォルトの名無しさん
2025/03/22(土) 21:47:08.55ID:wj/QNrNA もちろんそれもあるがアマゾンAWSはエネルギー効率の高さを示してRustの使用が良いと主張している
エコのため、クラウド提供側にとっては電気消費量のため、クラウド利用側にとっては利用料金のため、誰にとってもRustが良い
エコのため、クラウド提供側にとっては電気消費量のため、クラウド利用側にとっては利用料金のため、誰にとってもRustが良い
878デフォルトの名無しさん
2025/03/22(土) 21:49:55.80ID:0jsJ/YT+ 状況に応じて道具を選べないやつなんて所詮この程度だからな
相手にするだけ時間の無駄だよ
相手にするだけ時間の無駄だよ
879デフォルトの名無しさん
2025/03/22(土) 21:56:00.76ID:aLOoKjU5 企業としてはユーザーが最も多い言語のSDKに一番力を入れるんじゃない?
880デフォルトの名無しさん
2025/03/22(土) 21:56:48.74ID:+4wHRnDV じゃあRustか
881デフォルトの名無しさん
2025/03/22(土) 22:00:34.26ID:P6hXjgwK クラウドに限らずどんな分野のとんな用途でも
環境などで言語制限のある分野でなければ
Rustが一番よいだろうね
環境などで言語制限のある分野でなければ
Rustが一番よいだろうね
882デフォルトの名無しさん
2025/03/22(土) 22:02:15.86ID:GMYQzWfO 雑な推理だな
お金の話をすれば雑でも許してもらえる法則でもあるのかな
お金の話をすれば雑でも許してもらえる法則でもあるのかな
883デフォルトの名無しさん
2025/03/22(土) 22:04:35.46ID:+4wHRnDV 工数と開発者のスキルが必要なのが難点でしょ
スタートアップはとりあえずlaravelで雑でも動かしたい
スタートアップはとりあえずlaravelで雑でも動かしたい
884デフォルトの名無しさん
2025/03/22(土) 22:08:44.37ID:nNEN9uWE プログラマにかかるコストも大きいのでそれとのトレードオフではある。
885デフォルトの名無しさん
2025/03/22(土) 22:08:56.75ID:wj/QNrNA スキルがないとかその分野に標準の言語があるとかの制約がなければRust
制約がないのに他の言語を選ぶメリットがない
制約がないのに他の言語を選ぶメリットがない
886デフォルトの名無しさん
2025/03/22(土) 22:17:50.69ID:GMYQzWfO なんで許されてるのか分からない人物を思い浮かべてください
もしかして、お金の話をしてるからじゃないか?
もしかして、お金の話をしてるからじゃないか?
887デフォルトの名無しさん
2025/03/22(土) 22:49:39.83ID:g5MG8noC Goのほうが良い
888デフォルトの名無しさん
2025/03/22(土) 22:49:40.67ID:g5MG8noC Goのほうが良い
889デフォルトの名無しさん
2025/03/22(土) 23:13:07.51ID:2RmOfPx/ なんかpythonの話ししてる時に呼んでもないのに出てくるRubyの人みたい
890デフォルトの名無しさん
2025/03/22(土) 23:30:44.29ID:P6hXjgwK Goは適用範囲が狭すぎてね
そしてその分野もRustが代わりになれるから
そしてその分野もRustが代わりになれるから
891デフォルトの名無しさん
2025/03/22(土) 23:39:54.79ID:SJ3E9yt4 シングルバイナリで配布するなら、今でもGoの方が有利だろ
892デフォルトの名無しさん
2025/03/22(土) 23:51:36.52ID:FupbzmQ3893デフォルトの名無しさん
2025/03/22(土) 23:59:13.86ID:P6hXjgwK スタック領域を最も活用できるRustが一番有利だろうね
もちろんヒープ領域は返さない手がある
もちろんヒープ領域は返さない手がある
894デフォルトの名無しさん
2025/03/23(日) 00:19:54.96ID:Ft35v0Bz プログラマが充分に賢いと仮定できるときとそうでないときがある。
895デフォルトの名無しさん
2025/03/23(日) 02:37:14.92ID:FBKpXUl6 esbuildとswcを比べるといい
swcは少なくともesbuildの3〜5倍の開発工数がかかってる
にもかかわらず性能でも人気でも後発のesbuildに実質負けている
swcは少なくともesbuildの3〜5倍の開発工数がかかってる
にもかかわらず性能でも人気でも後発のesbuildに実質負けている
896デフォルトの名無しさん
2025/03/23(日) 04:01:40.19ID:fJAmg8F4 >>889
あれなんだろうな
あれなんだろうな
897デフォルトの名無しさん
2025/03/23(日) 08:06:03.43ID:E0tNSJV1 >>889
KENYA が Eust 使ってる姿が想像できないなω
KENYA が Eust 使ってる姿が想像できないなω
898デフォルトの名無しさん
2025/03/23(日) 11:30:47.99ID:7BeeA992899デフォルトの名無しさん
2025/03/23(日) 11:46:34.65ID:ucJr9566900デフォルトの名無しさん
2025/03/23(日) 12:05:46.10ID:dLW1UlJo それを言い始めたら、現実のプロジェクトであまり使われないのを無視して「Haskellは生産的」と主張し続けてる人と同じじゃないの
901デフォルトの名無しさん
2025/03/23(日) 12:16:32.87ID:hhiHggcP 何の制約もない理想的な世界ではRustが一番みたいな主張をするのは宗教だからね
現実を説いても無駄だよ
現実を説いても無駄だよ
902デフォルトの名無しさん
2025/03/23(日) 12:29:31.57ID:ucJr9566 ハスケルがどこで使われてるかは知らないが
Rustはネットインフラなど各所で使われてるからな
Rustはネットインフラなど各所で使われてるからな
903デフォルトの名無しさん
2025/03/23(日) 13:45:50.39ID:ILZgSc5B PrismaなんてRustからTypescriptに乗り換えてるからなぁ
904デフォルトの名無しさん
2025/03/23(日) 14:04:29.94ID:kax3x6iq まあ現実というか現時点でHaskellは実在しているので
自分は現実を説いていると思ってる人はじつは将来のHaskellについて説いているんだろう
自分は現実を説いていると思ってる人はじつは将来のHaskellについて説いているんだろう
905デフォルトの名無しさん
2025/03/23(日) 14:14:35.83ID:i3JV7Cin >>903
PrismはJavaScript/TypeScriptでのSQLのORMだよ
コアをRustで書いていたけどTypeScriptとの間でのデータのシリアル変換がオーバーヘッドなのでやめた
RustでなくC/C++でもGoでも何でも同じ話
PrismはJavaScript/TypeScriptでのSQLのORMだよ
コアをRustで書いていたけどTypeScriptとの間でのデータのシリアル変換がオーバーヘッドなのでやめた
RustでなくC/C++でもGoでも何でも同じ話
906デフォルトの名無しさん
2025/03/23(日) 14:19:18.42ID:Ft35v0Bz Haskell や ML 系は金融系で人気があるみたいな話だね。
そういう人は数理最適化とかの専門家で、アカデミック寄りの出自だったりするから言語もそういう系統になる。
そういう人は数理最適化とかの専門家で、アカデミック寄りの出自だったりするから言語もそういう系統になる。
907デフォルトの名無しさん
2025/03/23(日) 14:23:11.51ID:MPpv/Zn0 >>899
そうそう優秀な作者だからこそヘルスバーグやエヴァン・ウォレスはRustでも作ってみて自分の目で比較した上で敢えてGoを選んでるんだよな
そうそう優秀な作者だからこそヘルスバーグやエヴァン・ウォレスはRustでも作ってみて自分の目で比較した上で敢えてGoを選んでるんだよな
908デフォルトの名無しさん
2025/03/23(日) 14:29:01.82ID:i3JV7Cin 逆にオーバーヘッドよりも効果が上回るものも多い
そういうものはJS/TSのライブラリがRustやC/C++で書かれている
これはPythonのライブラリでも同じ
Goでそれらのライブラリを書かれることはない
そういうものはJS/TSのライブラリがRustやC/C++で書かれている
これはPythonのライブラリでも同じ
Goでそれらのライブラリを書かれることはない
909デフォルトの名無しさん
2025/03/23(日) 14:41:46.62ID:aJUotRkD >>907
頭悪そうな君には理解できなかったのかね
TypeScriptの型チェック&コンパイラの件は
①C#などのクラス依存言語はクラスベースで書かざるを得ないため元のTypeScriptコードとの相違が大きくなり今後もコードを合わせ保守していかなければならない特殊事情のため選べなかった
②RustやC++などはGC依存言語でないため元のTypeScriptコードとの相違が大きくなり今後もコードを合わせ保守していかなければならない特殊事情のため選べなかった
理解できない人は自分の言語にスレに戻りなさい
あるいはRustアンチスレへ行きなさい
ここはRustのためのスレです
頭悪そうな君には理解できなかったのかね
TypeScriptの型チェック&コンパイラの件は
①C#などのクラス依存言語はクラスベースで書かざるを得ないため元のTypeScriptコードとの相違が大きくなり今後もコードを合わせ保守していかなければならない特殊事情のため選べなかった
②RustやC++などはGC依存言語でないため元のTypeScriptコードとの相違が大きくなり今後もコードを合わせ保守していかなければならない特殊事情のため選べなかった
理解できない人は自分の言語にスレに戻りなさい
あるいはRustアンチスレへ行きなさい
ここはRustのためのスレです
910デフォルトの名無しさん
2025/03/23(日) 14:45:12.04ID:NxWV5kSB 工数が3倍以上かかっても数%の性能向上でペイできる分野ならいいんだけどね
大手クラウドベンダーのインフラ開発がまさにそれ
ペイできるどころかお釣りがじゃんじゃん来る
逆にそういう分野に該当しないtscgoとesbuildでは
費用対効果を考えてRustは選ばれなかったということ
大手クラウドベンダーのインフラ開発がまさにそれ
ペイできるどころかお釣りがじゃんじゃん来る
逆にそういう分野に該当しないtscgoとesbuildでは
費用対効果を考えてRustは選ばれなかったということ
911デフォルトの名無しさん
2025/03/23(日) 14:47:02.77ID:RxW/LXmg typescriptのコンパイラやツールをgoにとられたのはかなり痛いね
仮にもpythonやjsと並ぶ覇権言語の実装に選ばれなかった
これは重みがある事象になる
仮にもpythonやjsと並ぶ覇権言語の実装に選ばれなかった
これは重みがある事象になる
912デフォルトの名無しさん
2025/03/23(日) 14:48:42.88ID:kKBddGNP PrismaのTS移行はパフォーマンスが主因ではないぞ
TSとRust双方のスキルが必要でコミュニティのコントリビュートが得られないからとはっきり書かれてる
https://www.prisma.io/blog/from-rust-to-typescript-a-new-chapter-for-prisma-orm
TSとRust双方のスキルが必要でコミュニティのコントリビュートが得られないからとはっきり書かれてる
https://www.prisma.io/blog/from-rust-to-typescript-a-new-chapter-for-prisma-orm
913デフォルトの名無しさん
2025/03/23(日) 14:51:45.32ID:aJUotRkD914デフォルトの名無しさん
2025/03/23(日) 14:54:10.83ID:aJUotRkD915デフォルトの名無しさん
2025/03/23(日) 14:54:48.47ID:AhwOgDDy Rustを選んだらクビになるだろ
趣味ならRustで十分だよ
趣味ならRustで十分だよ
916デフォルトの名無しさん
2025/03/23(日) 15:04:08.69ID:dLW1UlJo >>908
Pythonについては「Goが選ばれない」というよりも、そもそもC/C++/Rustしか選択肢がない
他の言語でPythonのライブラリ(拡張モジュール) を作る場合、Pythonが提供しているC APIを呼ぶ必要がある (※)
だからCと連携しづらい言語は使えないし、Python側とは別のランタイム (Python側とは別に動くガベージコレクタ) を持つ言語も向いてない
まだC/C++製のものが多いけど、最近はRust製のものも出てきてて、この分野はRustがかなり有望だと思う
JS/TSは自分は詳しくないので知らない
(※)
C++/Rustの場合、実際にはPython C APIをラップするライブラリを使って開発するから、開発者が直接これを呼ぶわけではない
RustだとPyO3というクレートが有名
自分は実際にこれ使ってるけど、なかなか良い感じ
Pythonについては「Goが選ばれない」というよりも、そもそもC/C++/Rustしか選択肢がない
他の言語でPythonのライブラリ(拡張モジュール) を作る場合、Pythonが提供しているC APIを呼ぶ必要がある (※)
だからCと連携しづらい言語は使えないし、Python側とは別のランタイム (Python側とは別に動くガベージコレクタ) を持つ言語も向いてない
まだC/C++製のものが多いけど、最近はRust製のものも出てきてて、この分野はRustがかなり有望だと思う
JS/TSは自分は詳しくないので知らない
(※)
C++/Rustの場合、実際にはPython C APIをラップするライブラリを使って開発するから、開発者が直接これを呼ぶわけではない
RustだとPyO3というクレートが有名
自分は実際にこれ使ってるけど、なかなか良い感じ
917デフォルトの名無しさん
2025/03/23(日) 15:16:21.64ID:gOdPz2Go なぜかRustスレでRustを叩くために
他の言語の仕様の問題とか
他の言語のコミュニティの問題とか
そんなRustと関係ない事情の件ばかりを持ち出すのは感心しないね
そういう他言語の問題がなければRustが好ましいという左証になってるとも言えるけど
他の言語の仕様の問題とか
他の言語のコミュニティの問題とか
そんなRustと関係ない事情の件ばかりを持ち出すのは感心しないね
そういう他言語の問題がなければRustが好ましいという左証になってるとも言えるけど
918デフォルトの名無しさん
2025/03/23(日) 15:21:41.23ID:2OqM692P >>909
esbuildには@もAも当てはまらない
グリーンフィールドかブラウンフィールドかに関わらず
類似処理をしているesbuildとtscgoが同じ結論に達した事実を見れば
tscの特殊事情が主たる理由ではないことは明らか
esbuildには@もAも当てはまらない
グリーンフィールドかブラウンフィールドかに関わらず
類似処理をしているesbuildとtscgoが同じ結論に達した事実を見れば
tscの特殊事情が主たる理由ではないことは明らか
919デフォルトの名無しさん
2025/03/23(日) 15:34:46.69ID:gOdPz2Go 敗北して閑散としているGoのスレッドでやればいいんじゃないかな
Rustへの逆恨みは感心しないね
Rustへの逆恨みは感心しないね
920デフォルトの名無しさん
2025/03/23(日) 15:39:28.23ID:SFcoHXsN Goが単にコンパイラに使われただけなのになにを騒ぐことがあるのか
Rustの優位性はなにも変わってない
Rustの優位性はなにも変わってない
921デフォルトの名無しさん
2025/03/23(日) 15:46:59.12ID:5hw8+0Sa Arena<T>やRc<RefCell<T>>を駆使しつつ自分でライフライム管理もやらなきゃ同等の性能は出ないんだから数倍コストがかかるのは当たり前
しかもコストかけたところで大して速くなる用途ではないからな
しかもコストかけたところで大して速くなる用途ではないからな
922デフォルトの名無しさん
2025/03/23(日) 16:42:13.02ID:nyXcLsMC >>921
arena allocation使うのはC++でも同じだよな
RcはC++にないからArc相当のshared_ptrになってしまうが
いずれも大した問題ではなく何を問題視してるのだろう
Rustなら必要なところで用いなければエラーにになるから必ず安全
arena allocation使うのはC++でも同じだよな
RcはC++にないからArc相当のshared_ptrになってしまうが
いずれも大した問題ではなく何を問題視してるのだろう
Rustなら必要なところで用いなければエラーにになるから必ず安全
923デフォルトの名無しさん
2025/03/23(日) 16:58:09.93ID:/v/6A0mi あんまりRustを馬鹿にすると人類滅亡だぞ
924デフォルトの名無しさん
2025/03/23(日) 16:58:54.84ID:Js5gC5BL なんかRustの評価と自尊心が結びついてるやつが居るな
925デフォルトの名無しさん
2025/03/23(日) 17:14:32.48ID:kax3x6iq C++時代には、RAIIやtemplateの知識を不問とする "better C" があった
"better C" からRustに移行するのは容易ではない
"better C" からRustに移行するのは容易ではない
926デフォルトの名無しさん
2025/03/23(日) 18:32:51.17ID:BVPP8nhy SES業界ってなんですの?
やばそうなんですの?
やばそうなんですの?
927デフォルトの名無しさん
2025/03/23(日) 18:36:40.02ID:BVPP8nhy Chromeとfirefoxを比べるといい
firefoxは少なくともChromeの3〜5倍のRustコードが使われてる
にもかかわらず性能でも人気でも後発のChromeに実質負けている
firefoxは少なくともChromeの3〜5倍のRustコードが使われてる
にもかかわらず性能でも人気でも後発のChromeに実質負けている
928デフォルトの名無しさん
2025/03/23(日) 19:15:20.36ID:nyXcLsMC Firefoxは根幹がC++のまま進まないからな
ChromeのRustコード量が増えていき逆転するのは間違いない
ChromeのRustコード量が増えていき逆転するのは間違いない
929デフォルトの名無しさん
2025/03/23(日) 20:13:06.33ID:3HZSVJR9 ブラウザ見てもわかるけど金を掛けられる余力がある企業や団体が開発資金を出さないと置き換えは進まない
Rustプログラマは特に集めるのは大変
掃いて捨てるぐらいいたらコストは下がるので開発も進む
Rustプログラマは特に集めるのは大変
掃いて捨てるぐらいいたらコストは下がるので開発も進む
930デフォルトの名無しさん
2025/03/23(日) 20:15:58.85ID:MwG5166E >>922
GC言語と比べて高コストという話なのにC++出してきても意味ないじゃん
GC言語と比べて高コストという話なのにC++出してきても意味ないじゃん
931デフォルトの名無しさん
2025/03/23(日) 20:26:09.56ID:uAz+aBh3 遅くてメモリ喰いのGC言語はC/C++/Rustに絶対勝てない
そんなにGC言語が好きならGC言語のスレに引きこもっていなさい
Rustを脅威に感じているからこそわざわざここへ来て暴れてるのだろうけど醜い姿
そんなにGC言語が好きならGC言語のスレに引きこもっていなさい
Rustを脅威に感じているからこそわざわざここへ来て暴れてるのだろうけど醜い姿
932デフォルトの名無しさん
2025/03/23(日) 20:31:47.48ID:zNJHBv3d 環境要因だけど、単価と工数でGC言語が勝ってるってさ
933デフォルトの名無しさん
2025/03/23(日) 20:35:34.98ID:uAz+aBh3934デフォルトの名無しさん
2025/03/23(日) 21:25:09.29ID:dLW1UlJo 実際そう
Goはジュニアクラスのエンジニアとシニアクラスのエンジニアとで書き方が変わらないのが特徴で、Googleのような大きな組織での開発効率のために産まれた言語
良し悪しとかでなく、そもそもの言語の目的の違い
パフォーマンスが重要な仕事にはRustが向くけど
、それなりの速度があれば十分という分野ならRustを使う意味はあんまり無い
IOが中心になる分野なら、Rustは多少は速くても「劇的な違い」にはならないと思う
非同期処理を書くのが難しくないとか、社内に知見があるとかの方が重要という場面も多い
もちろんRustが向く分野も多いので、そちらではRustを使えばよい
言語は目的や求められる要求に応じて選ぶという、ごく普通の話
Goはジュニアクラスのエンジニアとシニアクラスのエンジニアとで書き方が変わらないのが特徴で、Googleのような大きな組織での開発効率のために産まれた言語
良し悪しとかでなく、そもそもの言語の目的の違い
パフォーマンスが重要な仕事にはRustが向くけど
、それなりの速度があれば十分という分野ならRustを使う意味はあんまり無い
IOが中心になる分野なら、Rustは多少は速くても「劇的な違い」にはならないと思う
非同期処理を書くのが難しくないとか、社内に知見があるとかの方が重要という場面も多い
もちろんRustが向く分野も多いので、そちらではRustを使えばよい
言語は目的や求められる要求に応じて選ぶという、ごく普通の話
935デフォルトの名無しさん
2025/03/23(日) 21:33:57.65ID:3HZSVJR9 速度だけが重要ならjavaなんてなんて生まれていないしここまで大きな産業にもなってない
みんなc++を使えばよかった
実際はそうならなかった
みんなc++を使えばよかった
実際はそうならなかった
936デフォルトの名無しさん
2025/03/23(日) 21:39:18.46ID:kIF/RZ8r >>931
なんの勝ち負けの話してんだよww
なんの勝ち負けの話してんだよww
937デフォルトの名無しさん
2025/03/23(日) 21:49:34.80ID:QyKgsP1k C++は平屋のCに何階も増築してきたから基盤はCのままで古い言語だからね
C++11でようやくunique_ptrとshared_ptrのスタートライン
一方でRustは現在の他のモダン言語と同等かそれ以上で何もかも快適
そして開発効率も抜群に良い
静的に最もバグを回避できる優れたプログラミング言語となっている
(もちろん原理的に回避不可能なアプリのロジックバグは除く)
C++11でようやくunique_ptrとshared_ptrのスタートライン
一方でRustは現在の他のモダン言語と同等かそれ以上で何もかも快適
そして開発効率も抜群に良い
静的に最もバグを回避できる優れたプログラミング言語となっている
(もちろん原理的に回避不可能なアプリのロジックバグは除く)
938デフォルトの名無しさん
2025/03/23(日) 21:52:06.36ID:n3c9z4n8 Rustの過剰な持ち上げは普通のRust開発者にとっても迷惑だからな
そういう輩のせいで「Rustは信者が煩い」みたいな意見を見るし、それに辟易する
向き不向きや求められる要求、組織の知見などを考慮して技術選定するという、開発者なら持つべき感覚を否定し続けてるのが理解できない
特定の言語だけを持ち上げる信者はGoやC#やTSにもいるし、そういうのは同様にうざったい
そういう輩のせいで「Rustは信者が煩い」みたいな意見を見るし、それに辟易する
向き不向きや求められる要求、組織の知見などを考慮して技術選定するという、開発者なら持つべき感覚を否定し続けてるのが理解できない
特定の言語だけを持ち上げる信者はGoやC#やTSにもいるし、そういうのは同様にうざったい
939デフォルトの名無しさん
2025/03/23(日) 21:55:17.62ID:zNJHBv3d 2000年頃、サーバーの仕事なら、新人にはCのメモリ管理が無理だからってJavaでキャリアスタートしたよ。
その頃のオンプレはメモリ数GBだけどJavaが何とか動かせたんだ
そこからGC言語優位が続いたけど、サーバーレスやらで効率重視時代が戻ってきたんだね
その頃のオンプレはメモリ数GBだけどJavaが何とか動かせたんだ
そこからGC言語優位が続いたけど、サーバーレスやらで効率重視時代が戻ってきたんだね
940デフォルトの名無しさん
2025/03/23(日) 21:59:15.01ID:QyKgsP1k941デフォルトの名無しさん
2025/03/23(日) 22:07:56.77ID:QyKgsP1k >>939
効率重視とともにエコ面が重視されてるね
そのまま電気消費量そしてランニングコスト
もちろんCPU&メモリリソース使用量を減らせばサーバーなど台数が減らせる面もエコと料金につながる
慣れたらどのプログラミング言語も大して変わらないのだからそれなら全てを少なくできるRustが向いてる
効率重視とともにエコ面が重視されてるね
そのまま電気消費量そしてランニングコスト
もちろんCPU&メモリリソース使用量を減らせばサーバーなど台数が減らせる面もエコと料金につながる
慣れたらどのプログラミング言語も大して変わらないのだからそれなら全てを少なくできるRustが向いてる
942デフォルトの名無しさん
2025/03/23(日) 22:12:37.78ID:arw2Fenr Rustは独自性が無い
C+の知見を移植してるだけ
C+の知見を移植してるだけ
943デフォルトの名無しさん
2025/03/23(日) 22:20:47.30ID:SlUznAQO いつもの某オジサン(嘘つき/実務経験無し)がesbuildで完全論破されて発狂してるだけ
Rustスレの平常運転だから気にしない気にしない
Rustスレの平常運転だから気にしない気にしない
944デフォルトの名無しさん
2025/03/23(日) 22:23:33.24ID:MXOUkEf2 >>942
C++では出来ていないこと(や、C++に後から入ってC++で普及していないこと)が、Rustには大量にあることが特徴。
むしろ他のモダン言語をやっていれば理解しやすいことも多い。
ただし、Rustが色んな言語の良い最先端な部分を採り入れてるため、少しだけ学習曲線が急な面はある。
それでもすぐ学習して理解できるから、それら機能の効果と利便性のため皆が満たされている。
C++では出来ていないこと(や、C++に後から入ってC++で普及していないこと)が、Rustには大量にあることが特徴。
むしろ他のモダン言語をやっていれば理解しやすいことも多い。
ただし、Rustが色んな言語の良い最先端な部分を採り入れてるため、少しだけ学習曲線が急な面はある。
それでもすぐ学習して理解できるから、それら機能の効果と利便性のため皆が満たされている。
945デフォルトの名無しさん
2025/03/23(日) 22:28:21.95ID:arw2Fenr >>944
無いよ
無いよ
946デフォルトの名無しさん
2025/03/23(日) 22:30:17.46ID:MXOUkEf2 >>945
無いとは何のこと?
無いとは何のこと?
947デフォルトの名無しさん
2025/03/23(日) 22:36:44.14ID:kax3x6iq 学習曲線のグラフに原点がないんだろうなあ
0とは一体何がどう0なのだ
0とは一体何がどう0なのだ
948デフォルトの名無しさん
2025/03/23(日) 22:40:46.98ID:dLW1UlJo スマートポインタやRAIIはC++由来だし、代数的データ型やパターンマッチは他の言語にもあるけど、所有権やライフタイムはRust独自
これはかなり強力な仕組みで、安全性という点ではとても成功してると思う
(同時に難しさの要因でもある)
書いておいて何だけど、言語の独自性はそこまで重要でもないと思う
TypeScriptなんかがそうだけど、仕組み自体は既にあるものでもバランスが良ければ十分に価値がある
これはかなり強力な仕組みで、安全性という点ではとても成功してると思う
(同時に難しさの要因でもある)
書いておいて何だけど、言語の独自性はそこまで重要でもないと思う
TypeScriptなんかがそうだけど、仕組み自体は既にあるものでもバランスが良ければ十分に価値がある
949デフォルトの名無しさん
2025/03/23(日) 22:45:57.15ID:QyKgsP1k C/C++が一番ダメな点は大量の様々な未定義動作
950デフォルトの名無しさん
2025/03/24(月) 00:19:28.90ID:ELaBM+IJ CのenumとRustのenumで全く似ても似つかないのとか何とかしてほしいわ
C出身のノリで使うと実装量多くてビックリするわ。たかが整数型定数とかいうのと全く違うもんなあ
ほかにも学習で大変なところ数多あるけど、コンパイルエラーを全部潰したらあとはアプリケーションロジックだけの問題になるのはRustならではで快便感ある。Cはコンパイル通ってからが鬼門だからな
C出身のノリで使うと実装量多くてビックリするわ。たかが整数型定数とかいうのと全く違うもんなあ
ほかにも学習で大変なところ数多あるけど、コンパイルエラーを全部潰したらあとはアプリケーションロジックだけの問題になるのはRustならではで快便感ある。Cはコンパイル通ってからが鬼門だからな
951デフォルトの名無しさん
2025/03/24(月) 00:51:58.09ID:9O8f24u0 なんでenumって名前にしたんだろうな
adtとかdataとかtypeとかにしたら良かったのにと思わなくもない
adtとかdataとかtypeとかにしたら良かったのにと思わなくもない
952デフォルトの名無しさん
2025/03/24(月) 01:05:28.53ID:ELaBM+IJ >>951
実際の使われ方からするとOption型、Choice型だよね。それだとネーミング的に予約語と競合してダメだけどマシな名前は考える余地あったよなあ
基本的に「よその言語から似た単語借りてくる」風習はどの言語にもフレームワークにもあるし慣れるしかないけどね
実際の使われ方からするとOption型、Choice型だよね。それだとネーミング的に予約語と競合してダメだけどマシな名前は考える余地あったよなあ
基本的に「よその言語から似た単語借りてくる」風習はどの言語にもフレームワークにもあるし慣れるしかないけどね
953デフォルトの名無しさん
2025/03/24(月) 02:41:57.49ID:u90IfC4I plain enumとADT enumがあるだけでenumはenum
ADT enumをenumの名前で使えるのはRustに限った話ではない
ADT enumをenumの名前で使えるのはRustに限った話ではない
954デフォルトの名無しさん
2025/03/24(月) 03:34:48.42ID:rrmbjdIs HaskellもRustと同じくらい使われてると言われていたが
つまりすべての製品に使われてるようなことを言っていた
つまりすべての製品に使われてるようなことを言っていた
955デフォルトの名無しさん
2025/03/24(月) 03:36:56.31ID:rrmbjdIs 結局、駄目なものはどれだけ宣伝しても流行らないのでは?
956デフォルトの名無しさん
2025/03/24(月) 07:38:50.09ID:Tm5RncoX そんなに言われてなかったよ。
それは誤解か、誤解した人が大げさに吹聴してるな
それは誤解か、誤解した人が大げさに吹聴してるな
957デフォルトの名無しさん
2025/03/24(月) 08:13:34.82ID:a0wY9RFf >>950
たぶんプログラミング言語一般的な型付けシステムに慣れてないんだと思う
enumはその名の通り列挙型だよ
それを整数型定数と誤認してるのが不思議
定数はその名の通りconstで当然何の型の定数なのかi64とかf64とかOptionなど型名を指定する必要があるよ
enumは列挙型だから名付けてenum Fooなどの別の型になる
内部的には整数で識別されるからその整数値を指定することもできるけどその整数の取れる値の範囲は列挙した分に限られるから別の型
制限はあるけど明示的にcastすれば整数型(i32とかusizeとか)へ変換できるよ
>>952
enumは列挙型だからSome(T)とNoneの2つを列挙できるenum Option<T>型も作れるだけの話だよ
ここでTは任意の型を指定できてジェネリック
もちろんトレイト境界を指定することもできて例えばCowの定義はこうなってるよ
enum Cow<'a, B>
where
B: 'a + ToOwned + ?Sized,
{
Borrowed(&'a B),
Owned(<B as ToOwned>::Owned),
}
たぶんプログラミング言語一般的な型付けシステムに慣れてないんだと思う
enumはその名の通り列挙型だよ
それを整数型定数と誤認してるのが不思議
定数はその名の通りconstで当然何の型の定数なのかi64とかf64とかOptionなど型名を指定する必要があるよ
enumは列挙型だから名付けてenum Fooなどの別の型になる
内部的には整数で識別されるからその整数値を指定することもできるけどその整数の取れる値の範囲は列挙した分に限られるから別の型
制限はあるけど明示的にcastすれば整数型(i32とかusizeとか)へ変換できるよ
>>952
enumは列挙型だからSome(T)とNoneの2つを列挙できるenum Option<T>型も作れるだけの話だよ
ここでTは任意の型を指定できてジェネリック
もちろんトレイト境界を指定することもできて例えばCowの定義はこうなってるよ
enum Cow<'a, B>
where
B: 'a + ToOwned + ?Sized,
{
Borrowed(&'a B),
Owned(<B as ToOwned>::Owned),
}
958デフォルトの名無しさん
2025/03/24(月) 08:14:23.64ID:CX9jwcEn Haskellを宣伝してた人がRustを宣伝してる
959デフォルトの名無しさん
2025/03/24(月) 08:15:54.54ID:CX9jwcEn >>957
Trait制約では?
Trait制約では?
960デフォルトの名無しさん
2025/03/24(月) 08:16:12.40ID:YUJc8XWR 言語なんて一長一短あるんだから万能な言語なんてないんだよね
たまにそのへんのことがわからない人が宗教戦争始めんだよ
たまにそのへんのことがわからない人が宗教戦争始めんだよ
961デフォルトの名無しさん
2025/03/24(月) 08:24:31.95ID:+3Ali/jO >>958
これだろうね
これだろうね
962デフォルトの名無しさん
2025/03/24(月) 08:28:31.69ID:a0wY9RFf963デフォルトの名無しさん
2025/03/24(月) 08:33:32.13ID:a0wY9RFf964デフォルトの名無しさん
2025/03/24(月) 08:38:14.85ID:+3Ali/jO965デフォルトの名無しさん
2025/03/24(月) 08:56:28.14ID:a0wY9RFf >>964
GCは関係ないよ
プログラミングしたことあるならわかってるはずだけど
まず強い静的型付け言語でないと実行時デバッグは山積み
Rustの場合はデータ競合まで型付けチェックで弾いてくれるからさらに助かるよ
あと一番ありがたいのはsingle writer XOR multiple readers ルール
このおかげで色々な罠にはまらなくて済むよ
それによって書き換え競合を意識するようになるからデータ書き換えのスパゲッティ構造も防げたり
GCは関係ないよ
プログラミングしたことあるならわかってるはずだけど
まず強い静的型付け言語でないと実行時デバッグは山積み
Rustの場合はデータ競合まで型付けチェックで弾いてくれるからさらに助かるよ
あと一番ありがたいのはsingle writer XOR multiple readers ルール
このおかげで色々な罠にはまらなくて済むよ
それによって書き換え競合を意識するようになるからデータ書き換えのスパゲッティ構造も防げたり
966デフォルトの名無しさん
2025/03/24(月) 10:05:01.91ID:NJwebgj2967デフォルトの名無しさん
2025/03/24(月) 10:15:12.89ID:8nOZWVbe ポエムで草
968デフォルトの名無しさん
2025/03/24(月) 11:58:19.75ID:Q7rhWE6T969デフォルトの名無しさん
2025/03/24(月) 12:23:21.76ID:cPeZblFF >>966
何を言ってるの…?
何を言ってるの…?
970デフォルトの名無しさん
2025/03/24(月) 12:26:57.19ID:a0wY9RFf971デフォルトの名無しさん
2025/03/24(月) 12:35:54.16ID:tWxitKr9 Arena<T>とかRc<RefCell<T>>ってCの生ポに比べてどれくらいパフォーマンス落ちるの?
972デフォルトの名無しさん
2025/03/24(月) 12:42:11.30ID:tWxitKr9973デフォルトの名無しさん
2025/03/24(月) 13:26:19.03ID:CX9jwcEn Trait制約とTrait境界
どちらが正しいの?
どちらが正しいの?
974デフォルトの名無しさん
2025/03/24(月) 14:05:50.97ID:g+HztaOv >>973
公式といえるものが存在しないので明瞭な結論はないが境界のほうがスタンダードという風潮はある。
真っ先に日本語訳を出したボランティアグループがそうしているから。
技術用語は原則として直訳するものなのでもしも JIS が Rust の規格を成立させたとしてもたぶん境界と訳すと思う。
制約派は有名な会社 (オライリー) が出している書籍で制約という語をあてていることを根拠としていて、ボランティアグループよりプロの翻訳家のほうが信頼できると主張している。
公式といえるものが存在しないので明瞭な結論はないが境界のほうがスタンダードという風潮はある。
真っ先に日本語訳を出したボランティアグループがそうしているから。
技術用語は原則として直訳するものなのでもしも JIS が Rust の規格を成立させたとしてもたぶん境界と訳すと思う。
制約派は有名な会社 (オライリー) が出している書籍で制約という語をあてていることを根拠としていて、ボランティアグループよりプロの翻訳家のほうが信頼できると主張している。
975デフォルトの名無しさん
2025/03/24(月) 14:07:50.39ID:GUfk5wC7 ボウンズでいいよ
976デフォルトの名無しさん
2025/03/24(月) 14:32:08.72ID:jgU8FjIN >>973
訳さずトレイトバウンドと呼ぶのが好ましいけど日本語化したければトレイト制約
トレイト境界は勘違いと理解不足から発生した間違った訳語なので避けたほうが良い
どの辺が間違っているかはこのスレを読み返してくれ
訳さずトレイトバウンドと呼ぶのが好ましいけど日本語化したければトレイト制約
トレイト境界は勘違いと理解不足から発生した間違った訳語なので避けたほうが良い
どの辺が間違っているかはこのスレを読み返してくれ
977デフォルトの名無しさん
2025/03/24(月) 14:34:35.04ID:8nOZWVbe 屋根の色は青が正しい!
978デフォルトの名無しさん
2025/03/24(月) 15:34:03.20ID:MH5MWyKr979デフォルトの名無しさん
2025/03/24(月) 17:17:17.01ID:a0wY9RFf >>971
生ポと比較する意味がないよ
確実に自動解放するための枠組み
例えばRcは複数の所有者が生じる時に使われて、どれが先に消えても最後に残った側が自動解放するんだよ
Cで同じことを実現しようとしたら同じく参照カウンタが必要
C++でも参照カウンタを用いてshared_ptrが作られてるよ
>>972
初期化を仮定しないMaybeUninitがRustにはあるから大丈夫
ライブラリ等ではこれを使って不要な初期化を避けているよ
0でのmemset呼び出しが消滅
973
trait boundsはトレイト境界だよ
英語でも敢えてconstraint (制約)を使っていない意義を尊重
トレイト境界により型のとれうる範囲が狭まって型の制限いわゆる型制約が生じるよ
生ポと比較する意味がないよ
確実に自動解放するための枠組み
例えばRcは複数の所有者が生じる時に使われて、どれが先に消えても最後に残った側が自動解放するんだよ
Cで同じことを実現しようとしたら同じく参照カウンタが必要
C++でも参照カウンタを用いてshared_ptrが作られてるよ
>>972
初期化を仮定しないMaybeUninitがRustにはあるから大丈夫
ライブラリ等ではこれを使って不要な初期化を避けているよ
0でのmemset呼び出しが消滅
973
trait boundsはトレイト境界だよ
英語でも敢えてconstraint (制約)を使っていない意義を尊重
トレイト境界により型のとれうる範囲が狭まって型の制限いわゆる型制約が生じるよ
980デフォルトの名無しさん
2025/03/24(月) 17:28:07.52ID:NJwebgj2 ああこれって王様を尊重すると言いながら
戦争していいかどうかは王様に相談してないパターンか
戦争していいかどうかは王様に相談してないパターンか
981デフォルトの名無しさん
2025/03/24(月) 18:08:22.30ID:XCWZ1fyV 「制約」は渡す側の視点でしか見てないからな
受け取る側にとってはトレイトの「保証」でもある
ジェネリクス型を受け取る関数を自分で書かないレベルに合わせるなら
「制約」で意訳しても構わないと思う
受け取る側にとってはトレイトの「保証」でもある
ジェネリクス型を受け取る関数を自分で書かないレベルに合わせるなら
「制約」で意訳しても構わないと思う
982デフォルトの名無しさん
2025/03/24(月) 18:38:13.55ID:g+HztaOv >>981
そのレベルの人が上達してきたときに用語を切り替えるなんてわけにもいかんし、
「この制約のことを Rust 用語ではトレイト境界といいます」とでも一言あればそれで済む話じゃね?
入門者向けの便宜的な説明が後々まで尾を引いて混乱することはあるから喩えとか意訳とかは慎重にしたほうが良いと思う。
そのレベルの人が上達してきたときに用語を切り替えるなんてわけにもいかんし、
「この制約のことを Rust 用語ではトレイト境界といいます」とでも一言あればそれで済む話じゃね?
入門者向けの便宜的な説明が後々まで尾を引いて混乱することはあるから喩えとか意訳とかは慎重にしたほうが良いと思う。
983デフォルトの名無しさん
2025/03/24(月) 18:44:54.15ID:zTw2TQbc >>981
レベルの話じゃないんだよね
両方の視点をもつのはいいんだけど型シグニチャは使う方との契約だから
作る側じゃなく使う側の視点によせるのが自然
作る側の視点で見る回数よりも
使う側の視点で見る回数のほうが圧倒的に多いということもある
仮に受け取る側の視点から見たとしても
トレイトの「保証」だから「トレイト境界」とはならないよね
not satisfiedとかとコロケーションが確立されてるのも
rustcの開発陣もみんな制約として見てるからなんだよ
レベルの話じゃないんだよね
両方の視点をもつのはいいんだけど型シグニチャは使う方との契約だから
作る側じゃなく使う側の視点によせるのが自然
作る側の視点で見る回数よりも
使う側の視点で見る回数のほうが圧倒的に多いということもある
仮に受け取る側の視点から見たとしても
トレイトの「保証」だから「トレイト境界」とはならないよね
not satisfiedとかとコロケーションが確立されてるのも
rustcの開発陣もみんな制約として見てるからなんだよ
984デフォルトの名無しさん
2025/03/24(月) 18:49:17.73ID:zTw2TQbc プレート境界とか軍事境界とか〜境界の日本語での使われ方を考えてみたら?
プレートとプレートの境目だからプレート境界
西側の軍事と東側の軍事の境目だから軍事境界
トレイトとトレイトの境目ならトレイト境界は日本語として用意に成立する
でも実際はそうじゃないから
プレートとプレートの境目だからプレート境界
西側の軍事と東側の軍事の境目だから軍事境界
トレイトとトレイトの境目ならトレイト境界は日本語として用意に成立する
でも実際はそうじゃないから
985デフォルトの名無しさん
2025/03/24(月) 18:54:56.12ID:a0wY9RFf 『制約』という完全に意味を間違えている言葉でなければ
『境界』より相応しい範囲を表す何らかの言葉でもいいと思うよ
混乱しないようにトレイト境界のままでもOK
『境界』より相応しい範囲を表す何らかの言葉でもいいと思うよ
混乱しないようにトレイト境界のままでもOK
986デフォルトの名無しさん
2025/03/24(月) 18:59:58.08ID:a0wY9RFf boundsの意味もtrait boundsの用法も範囲の限界を意味しているわけだから
範囲の限界はすなわち境界だよね
範囲の限界を表すもっと良い言葉があるかどうか
範囲の限界はすなわち境界だよね
範囲の限界を表すもっと良い言葉があるかどうか
987デフォルトの名無しさん
2025/03/24(月) 19:09:34.08ID:CX9jwcEn Boundsが制約だと思うスレ
988デフォルトの名無しさん
2025/03/24(月) 19:28:44.61ID:38sVBjRv まだやっていたのかw
これが本当の境界○能だったらどうしよう
これが本当の境界○能だったらどうしよう
989デフォルトの名無しさん
2025/03/24(月) 20:22:18.74ID:w43kWBw9 「よ」とか「ね」とかの終助詞付けても主張が激しいから全然柔らかくなってない
特有の違和感を常に感じさせる文体
特有の違和感を常に感じさせる文体
990デフォルトの名無しさん
2025/03/24(月) 21:58:28.76ID:CX9jwcEn991デフォルトの名無しさん
2025/03/24(月) 21:59:18.18ID:CX9jwcEn >>988
制約知能でも意味が通じる不思議
制約知能でも意味が通じる不思議
992デフォルトの名無しさん
2025/03/24(月) 22:12:24.41ID:617amb99 >>986
>範囲の限界を意味しているわけだから
何の範囲の限界?
そこも含めて考えないと質の低い機械翻訳と同じだよ
>範囲の限界はすなわち境界だよね
違う
日本語における限界と境界の違いを理解してない
>範囲の限界を意味しているわけだから
何の範囲の限界?
そこも含めて考えないと質の低い機械翻訳と同じだよ
>範囲の限界はすなわち境界だよね
違う
日本語における限界と境界の違いを理解してない
993デフォルトの名無しさん
2025/03/24(月) 22:17:47.15ID:g+HztaOv 日本語での意味なんかどうでもいいよ。
Rust コミュニティの先導者が境界ということにしたのだし、コミュニティの状況を調べなかったか分断しようとするオライリーの質が低いってだけ。
Rust コミュニティの先導者が境界ということにしたのだし、コミュニティの状況を調べなかったか分断しようとするオライリーの質が低いってだけ。
994デフォルトの名無しさん
2025/03/24(月) 22:40:56.78ID:wvKmLjta レイトマジョリティ自覚して先人に敬意払っとけ
995デフォルトの名無しさん
2025/03/24(月) 22:43:00.79ID:vQzFTF6N ID:a0wY9RFfは所有権を複製しそうだね
996デフォルトの名無しさん
2025/03/25(火) 04:40:05.04ID:ztarSHRB 残り3レスで問題と慈善事業をを要約してくれ
997デフォルトの名無しさん
2025/03/25(火) 07:36:07.50ID:4wgArwVx 日本語訳プロジェクトを乗っ取って「トレイト制約」で統一すりゃいいんじゃないんかな。
日本語訳プロジェクトは最新版に追随できていないから文句言うやつは居ないだろ。
日本語訳プロジェクトは最新版に追随できていないから文句言うやつは居ないだろ。
998デフォルトの名無しさん
2025/03/25(火) 07:40:07.85ID:6deS3uMO そういや、誰か標準ライブラリの日本語訳してなかったっけ?
あれどうなった?
あれどうなった?
999デフォルトの名無しさん
2025/03/25(火) 08:50:43.64ID:ztarSHRB トレイトの神様 降臨
1000デフォルトの名無しさん
2025/03/25(火) 08:51:04.90ID:ztarSHRB10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 112日 10時間 18分 15秒
新しいスレッドを立ててください。
life time: 112日 10時間 18分 15秒
10021002
Over 1000Thread 5ちゃんねるの運営はUPLIFT会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《UPLIFT会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
4 USD/mon. から匿名でご購入いただけます。
▼ UPLIFT会員登録はこちら ▼
https://uplift.5ch.net/
▼ UPLIFTログインはこちら ▼
https://uplift.5ch.net/login
運営にご協力お願いいたします。
───────────────────
《UPLIFT会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
4 USD/mon. から匿名でご購入いただけます。
▼ UPLIFT会員登録はこちら ▼
https://uplift.5ch.net/
▼ UPLIFTログインはこちら ▼
https://uplift.5ch.net/login
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 中国国営メディア「沖縄は日本ではない」… [BFU★]
- 【こんなの初めて…】民泊には既にキャンセルも 中国の渡航自粛で [ぐれ★]
- 高市政権にパイプ役不在…日中高まる緊張 公明党の連立離脱影響、自民内にも懸念「自分でまいた種は自分で刈り取ってもらわないと」 [ぐれ★]
- 「稼ぐのよ!」高市総理が電話ガチャ切りで伝えたこと 鈴木憲和農林水産大臣が国政報告会に出席 自身が目指す農政の方針語る [煮卵★]
- 「どうしようもない」 ため息つくアジアの玄関口 中国の訪日自粛で−福岡市 [蚤の市★]
- 俳優 高岡蒼佑「エジプト出身とかナイジェリア出身とかの人が、日本の代表顔して移民の事とか話してるの見るとなんか違う気がする」★2 [Anonymous★]
- 【高市悲報】アメリカ戦争省「あのさ、何回シミュレートしてもわーくに中国に負けちゃうんだよね🤗」 [359965264]
- 自民「高市の一言でこれまで積み上げてきた関係が駄目になる。言葉の重みを分かっていない。自分でまいた種は自分で刈り取ってもらう」 [256556981]
- 中国発日本行の航空券、491,000件(全体の32%)がキャンセルされたと判明。高市どうすんのこれ [603416639]
- 中国国営放送「日本は琉球をただちに中国に返還せよ」 キタ━━━━(゚∀゚)━━━━!!!!! [314039747]
- 【高市速報】小野田経済安保相「中国依存はリスクなおおおおおおおおおおお」 [127986362]
- 識者「『フリーパレスチナ』とかイキってる連中が台湾の話になると『中国を怒らせるな!』ってなる。ほんと左翼の正義って薄っぺらい」 [279254606]
