Rust part15

■ このスレッドは過去ログ倉庫に格納されています
2022/05/12(木) 18:28:20.99ID:cuIcFT6k
公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust

Web上の実行環境
https://play.rust-lang.org

日本語の情報
https://rust-jp.rs/

※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/

※C++との比較は専用スレへ
C++ vs Rust
https://mevius.5ch.net/test/read.cgi/tech/1619219089/

※次スレは原則>>980が立てること

前スレ
Rust part14
https://mevius.5ch.net/test/read.cgi/tech/1644596656/
2022/06/14(火) 03:08:52.27ID:aUgYAX3K
>>661
アレをRustに取り入れようという動きはないのかな?
663デフォルトの名無しさん
垢版 |
2022/06/14(火) 18:56:17.12ID:HX1wvnNi
>>648
利便性ではなく一貫性で標準を決めているってことだろ
2022/06/15(水) 14:46:59.83ID:LjsAAUyE
>>658
Rustの利点はOption, Resultがmatchなどの構文で評価できる事、演算子もあるが演算子オーバーロードができる言語であれば同様のことができてしまうがC++23とか26とかで提案されていたinspectはmatchそのもの
2022/06/16(木) 15:29:08.46ID:13+3Y2cU
Rustの活用でElectronよりも軽くて速いアプリフレームワーク「Tauri」が安定版に

まずはデスクトップから。モバイル・Webへの対応も進行中

https://forest.watch.impress.co.jp/docs/news/1417148.html
2022/06/16(木) 16:07:33.42ID:Ry+36K98
TauriとYewで純正Rustデスクトップアプリ開発か、
あるいはTauriとVue.jsでフロントエンドのみJavascriptでデスクトップアプリ開発か、
2022/06/16(木) 16:51:56.72ID:TPrqrDPX
Tauri + Vite + Vue 3 + Vuetify 3でデスクトップアプリ開発オラァ!!!
2022/06/16(木) 19:39:52.77ID:3W1WJ+ID
そういやAtom開発者がRustで書き直した究極のエディター「Zed」はどうなったんや。
https://forest.watch.impress.co.jp/docs/serial/yajiuma/1374/986/amp.index.html
2022/06/16(木) 19:54:27.31ID:hIo52KfN
>>665
PC Watchが報じるほどのニュースか、これ?
2022/06/16(木) 20:36:05.07ID:qYRKaF3V
>>668
>>UIフレームワークには、GPUを活用した新設計のものを用意。このフレームワークは「GPUI」と呼ばれている。

これがどうなるかだな
2022/06/16(木) 20:52:57.67ID:rVOBJfNW
フレームワークおじさんきちゃったか
2022/06/16(木) 21:28:18.61ID:5USgn4My
rust製フレームワークの話なら歓迎、jsは該当スレでよろ
2022/06/16(木) 22:27:59.11ID:/ddt6fDk
>>670
俺的にはそれなんかバックにC/C++のVulkan系を用いたものって気がするんだよな
2022/06/17(金) 01:45:23.89ID:mZKsuJMX
rustでgpuなんか使い始めたらライブラリぶっ壊れまくるぞ
2022/06/17(金) 08:27:34.98ID:8YmvneAf
2022/06/17(金) 15:39:33.09ID:NH7eG327
俺も今日からラスタシアンだからよろしくな
シャドーイングいいねアンダースコアで区切った同じような名前の変数が同一スコープ内に増え続けるのが嫌でイライラしてたらからこの仕様はめちゃ好き
2022/06/17(金) 17:57:54.34ID:gT1dTx1o
>>676
カタカタで書くとラステイシャンかラステイションだからよろしくな
2022/06/18(土) 06:02:27.98ID:ib599DIL
全然関係無いんだけど
最近の言語って使ってる人達に名前つけるじゃん
パイソニスタとかPHPerみたいな
CとかC++にもあるのかなー?とか考えてた時に思い出したんだけど
Pythonでモヒカンとか言ってる人達いるじゃん
アレの語源は何なの?
2022/06/18(土) 11:43:40.01ID:vGEU23LW
>>678
Python 関連の用語としては知らんけど、これのこと?
https://ja.wikipedia.org/wiki/%E3%83%A2%E3%83%92%E3%82%AB%E3%83%B3%E6%97%8F_(%E3%83%8D%E3%83%83%E3%83%88%E7%94%A8%E8%AA%9E)
2022/06/18(土) 11:52:07.94ID:quioMmSC
モヒカン族とか、一部の人間が使ってるだけでネットではろくに聞かない言葉だね
2022/06/18(土) 12:19:14.82ID:ib599DIL
>>679
どうもありがとう
ネットスラングだったのか
でもPython界隈以外で聞いたことないや
2022/06/18(土) 12:29:31.13ID:XkkeHcIr
俺は本場海外の用語以外は一切使わない陰キャチー牛の日本人が勝手な造語の和製英語とかクソダサいからな
2022/06/18(土) 12:41:40.55ID:rUpNWN/L
2005~2010頃の技術コミュニティではよく聞いたけど
最近はアンチハラスメントポリシーに抵触するから使われなくなった
2022/06/18(土) 13:28:43.26ID:n5ZvcUIJ
Rust サビちゃん
Python ヘビちゃん
2022/06/18(土) 13:35:45.47ID:n5ZvcUIJ
サビちゃんでもありヘビちゃんでもありヘジたんでもあり職場では犬たん++
2022/06/18(土) 13:37:07.64ID:vGEU23LW
>>678
C 使いや C++ 使いのことは Cer とか C++er と書いたりすることはあるが、どう読むべきなのかわからぬ……。
2022/06/18(土) 13:42:03.39ID:n5ZvcUIJ
>>686
社畜
2022/06/18(土) 13:48:09.17ID:n5ZvcUIJ
この世の中あまたの言語があるのになぜCやC++でコード書くかと言えば仕事だから
2022/06/18(土) 14:09:02.52ID:XkkeHcIr
普段仕事でC++使わない俺からするとRustめちゃくちゃわかりやすくて触ってて楽しい
特に配列やコレクションの扱い易さが段違いだわ
2022/06/18(土) 14:30:49.67ID:n5ZvcUIJ
>>689
まあ他の言語触ると扱いやすくて気絶するから触るな
2022/06/18(土) 14:57:08.56ID:iczP/r4h
※お話の途中ですが蟹が通ります
      ,、_,、     
 三  ( ´・ω・`) 
  三 /ヽ  /ヽ        (V)  (V) 
  三ノ  ̄ ゝ      三 ミ (´・ω・`) ミ
     タタタッ                 サササッ
2022/06/18(土) 15:02:32.97ID:hqbe2tQH
そのカニもらって食べちゃうね
2022/06/18(土) 15:34:56.20ID:XkkeHcIr
命名規則のガイドラインがスネークケースなのがC/C++に配慮した結果なのかなぁって気がするけどまぁ慣れの問題だから文句ないよ
2022/06/18(土) 19:21:06.68ID:M9fy3K3m
公式ドキュメントにRustは式指向言語ですってあるんだが式指向とはなんぞや?
2022/06/18(土) 19:25:35.79ID:1ZLmOyHM
制御構文が文じゃなくて式になってて値を返すという意味かと
2022/06/18(土) 19:54:48.42ID:vxK0JF3c
終端にセミコロンつけたら式じゃなく文になっちゃうとか独特だよね
fn five() -> i32 { 5 }とかfn five() -> i32 { 5 };って書けた方が違和感ない気がするんだけどね
2022/06/18(土) 20:32:50.72ID:aTjkq+5e
Rustはラムダ引数の型推論が多くの他の言語とは異なって機能するんだよ
2022/06/18(土) 21:11:11.71ID:6CHzGsUP
最近、ゲームのRustが人気過ぎて検索に支障が出てる
2022/06/18(土) 22:17:14.37ID:ZZmk5y2Z
>>694
日本語訳は公式じゃないから
今はもう公式では式指向(expression oriented)という言葉は使われてない

式指向言語の意味を知りたければwikiでもどうぞ
https://en.wikipedia.org/wiki/Expression-oriented_programming_language
2022/06/19(日) 00:35:13.44ID:HLAvlKQn
VTuberやストリーマーの間で人気を博しているサバイバルゲーム「RUST」とは?
https://www.moguravr.com/vtuber-rust/
2022/06/19(日) 01:08:17.73ID:WtnMKA9r
Goを見習って、Rustlangで検索してくださいね
2022/06/19(日) 05:08:01.71ID:UsMsALi7
rust lang OR 言語 -go
2022/06/19(日) 07:36:52.36ID:kKndzz48
Rustではboolを論理値と訳してるけど言語ごとに揺らぎがあるのはなんでだろうね
個人的に真偽値を使ってるけど真理値って解釈もあるしこれも定義は別で厳密には違うけどRustとしては解釈は同じで違いはないってことなのかな
2022/06/19(日) 08:12:44.50ID:Nk1h87ob
作った人が違うんだから揺らぎがあるのは当然だろ
2022/06/19(日) 09:35:04.20ID:pSFkutGr
作った人というより訳した人の違い
Rustの日本語書籍でも統一されてるわけじゃない
論理値はもともとlogical valuesの訳語

>Rustではboolを論理値と訳してるけど
正しくは「The Bookの日本語訳ではBooleanを論理値と訳してるところがあるけど」
2022/06/19(日) 09:50:34.90ID:KbscZGS+
手元のRust本見てみたけど真偽値も真理値もあるね
個人的には真偽値かな
2022/06/19(日) 10:18:36.03ID:MGBoiv+i
型は論理型と言いたくなる。真偽値型ってのもたまに聞くけど。
2022/06/19(日) 10:32:50.28ID:YciZ0/bi
ブール型でええやん
2022/06/19(日) 11:02:28.95ID:McUuM60V
the bookの日本語訳は翻訳の質が低いしアップデートもされてないからrustを本気で勉強したい人は読まない方がいいと思う
2022/06/19(日) 11:11:00.25ID:KAsrUTco
https://jp.mathworks.com/help/matlab/logical-operations.html
> logical データ型を使用して boolean データを表現します

matlabではlogicalってデータ型があって中身は0か1
false, trueも結局はlogicalの0と1でしかない

https://doc.rust-lang.org/std/primitive.bool.html
> The bool represents a value, which could only be either true or false.
> If you cast a bool into an integer, true will be 1 and false will be 0.

一方rustではtrueもfalseも依然としてboolのまま
2022/06/19(日) 11:23:29.55ID:2cctUuao
ブール値のブールの意味を知らん人が多いのかもしれない
ブール値より真偽値型がいいな
2022/06/19(日) 11:33:06.55ID:YciZ0/bi
boolの意味なんか一般アメリカ人も知らんだろ
2022/06/19(日) 12:03:30.22ID:dg+pb++y
>>710
値の呼び名の話と、内部表現の話と、castせず別の型の値として利用可能かどうかという3つの異なる話を混同してる
2022/06/19(日) 13:11:53.53ID:61bWOpc5
ワットとかアンペアの語源を知ってるかって話?
2022/06/19(日) 13:14:46.84ID:vUT9u2r3
Rustを含めたほとんどの言語で
logical or/and/notと呼び
まとめてlogical operatorと言い
日本語で論理演算子と称するから
その対象となるbool値も論理値と訳すことが多く賛同だが
訳さずbool型とbool値のままが曖昧さがなくよいのではないか
もちろん文字列型も訳さない方がよい
2022/06/19(日) 13:33:48.08ID:vE0AzMds
おまえらってほんとう用語の定義とかそういう話になると生き生きしよるな
あと「許可されないなんちゃら」みたいな法律家談義みたいな話
2022/06/19(日) 13:35:46.28ID:Nk1h87ob
>>714
自分の呼び方が正しいんだー
っていうキチ同士の争い
2022/06/19(日) 14:12:32.07ID:T+HLe5Kk
>>714
ジュールとかニュートンのほうが先に頭に浮かんだ

>>716
とはいえ「所有権の複製」は見過ごせないって
2022/06/19(日) 14:17:42.75ID:kKndzz48
これはプログラミングに限定した話ではなく他のカテゴリでも用語を英語に統一すべきだと思うんだよな
世界の大学ランキングで日本の大学が少ないのは教科書や専門書が英語の国が対象だから教科書や専門書が日本語で学習できる日本はレベル高くて母国語ではなく英語でしか学べない他の国がレベル低い土人国家だと言ってるやつがいるけど逆じゃねーの?って思う
2022/06/19(日) 14:55:53.98ID:8/kH/R2d
自転車置き場の議論
2022/06/19(日) 15:31:58.19ID:N+aRTDUf
>>719
英語じゃなくてラテン語を
2022/06/19(日) 17:52:40.64ID:fArfwr+a
>>719
はぁ? 何を甘っちょろいこと言ってんだ。
日本語を押し付けていく気概もなしに学問をリードできるかいな。
2022/06/19(日) 18:18:54.31ID:lfAX8IzG
>>722
日本語だけは絶対にイヤ
Rubyも英語だったろ?英語でいいんだよ
2022/06/19(日) 18:25:22.30ID:ZgRIQXP3
>>723
なぜRuby?
2022/06/19(日) 19:22:19.06ID:xSCrTfK1
高階関数の解説を読むたびに出てくるカリー化がそれオーバーロードでよくね?って思うんだが誰か納得感ある説明頼む
2022/06/19(日) 19:29:05.73ID:YciZ0/bi
>>725
カリー化は、ElmとかF#みたいなパイプライン演算子を多用する言語じゃないとありがたみを感じない
2022/06/19(日) 19:43:10.79ID:Iqvgk6im
なんとRustには関数オーバーロードが存在しないのだ!
だからトレイトでクソ面倒臭い実装でむにゃむにゃしないと実現できない!
でもそんなことして何が嬉しいのかわからない!
Rustは可変長引数もないしC++と比較してまだまだ機能的にはぜんぜん追いついてないよ
2022/06/19(日) 19:47:20.02ID:WtnMKA9r
そうですね
あなたはRustではなくC++を使い続けてください
2022/06/19(日) 20:02:56.72ID:61bWOpc5
カリー化ってオーバーロードで代替できるのか?
2022/06/19(日) 21:29:31.34ID:10dVJy7y
// 引数2つの関数 (例としてたまたま足し算)
let add_x_y = |x, y| x + y;
assert_eq!(5, add_x_y(2, 3));

// 引数1つの関数をそこから作り出す (カリー化)
let add_x = |x| move |y| add_x_y(x, y);

// 段階適用
let add_2 = add_x(2);
assert_eq!(5, add_2(3));

// 一気適用
assert_eq!(5, add_x(2)(3));
2022/06/19(日) 22:04:00.15ID:gGrS7GAs
>>725
関数を書くたびにカリー化のためのオーバーロード書いていくのは面倒くさすぎるでしょ
2022/06/19(日) 22:26:44.97ID:fArfwr+a
カリー化なあ……
rust だとライフタイムの管理がちょっと複雑になると手におえんだろ
理屈はともかくとして、普通のプログラマにとっては割に合わない
2022/06/19(日) 22:32:20.86ID:8/kH/R2d
https://ja.cppreference.com/w/cpp/language/overload_resolution

これを少しでも理解しようとしたことがあるなら、RustにC++並の無制約なオーバーロードが欲しいとは思わないだろうよ
734デフォルトの名無しさん
垢版 |
2022/06/20(月) 06:57:08.63ID:E2oosySA
安直に引数個分のダミーパラメータを与えるカリー化マクロcurry!を用意してみた
macro_rules! curry (
($func_name:path, $first_arg:ident $(, $arg:ident )*) => {
|$first_arg| $(move |$arg|)* $func_name($first_arg $(, $arg)*)
};
);

引数が2つの例
let add = |x, y| x + y;
let curry_add = curry!(add, a, b);
assert_eq!(curry_add(1)(2), add(1, 2));

引数が5つの例
let func = |p, q, r, s, t| p + q * r - s / t;
let curry_func = curry!(func, a, b, c, d, e);
assert_eq!(curry_func(5)(4)(3)(2)(1), func(5, 4, 3, 2, 1));

標準ライブラリの文字列replace関数をカリー化
let curry_str_replace = curry!(str::replace, src, old, new);
assert_eq!(curry_str_replace("abcdefg")("cde")("CDE"), "abCDEfg");

let 自己紹介 = curry_str_replace("私の名前は_NAME_です")("_NAME_");
assert_eq!(自己紹介("名無し"), "私の名前は名無しです");

意外にそこそこ使えた
2022/06/20(月) 07:08:36.46ID:10Lmd2dP
>>733
rustを作る側からしたら嫌かもしれんけど、使う側からしたら有ったほうがいいんじゃない?
まぁ、俺がオーバーロードがある環境に慣れちゃってるからかもしれんけど
2022/06/20(月) 07:31:28.70ID:iAqd5FsI
シャドーイングは許容できて関数のオーバーロードが許容できない理由ってなんだろう
737デフォルトの名無しさん
垢版 |
2022/06/20(月) 07:34:05.79ID:E2oosySA
>>735
クロージャ多用のRustでオーバーロードってどうするの?
例えば>>734に挙げた例でカリー化を同名でオーバーロードにする場合
let add = |x, y| x + y;
let add = curry!(add, a, b); // = |a| move |b| a + b;
assert_eq!(add(1)(2), add(1, 2));
この引数の数が異なる二つのaddの存在をオーバーロードとして許すの?
オーバーロードのある言語ではこの問題をどう解決しているのだろう
738デフォルトの名無しさん
垢版 |
2022/06/20(月) 07:44:20.63ID:E2oosySA
>>736
シャドーイングは同時に存在できるのが一つだけで曖昧さがなくプログラミングにおいてプラス効果
オーバーロードは同時に異なるものが存在できるため可読性を下げたりミスを起こす機会を生じさせてマイナス効果
2022/06/20(月) 10:29:58.07ID:anfwvwwH
>>735
読む時にはどのオーバーロードが呼ばれるのかを確認するのが面倒
RustだとT, &T, &mut T違いもあるから他の言語よりもさらに面倒
メリットよりデメリットのほうが大きいと感じる人が多いんじゃないかな


デフォルト引数/オプション引数/キーワード引数はいずれ導入して欲しい
乱用されるとAPIが汚くなるがオーバーロードほどのデメリットはないと思ってる
740デフォルトの名無しさん
垢版 |
2022/06/20(月) 10:47:53.81ID:1agQsnkM
真理値なんてどんなアホが訳してんだ
2022/06/20(月) 11:11:29.76ID:G0GSIi1k
元の英語から違うので訳の問題ではありません (truth value)
2022/06/20(月) 11:17:59.13ID:c9A58FBc
logical values 論理値
truth values 真理値
true or false values 真偽値
Boolean values ブール値

ブール値じゃ分かりにくいと仮定して論理値、真理値、真偽値のどれを選ぶかってこと
the book日本語訳の人はRustの文脈での分かりやすさよりも土台となってる分野で広く使われてる訳語がいいと判断することが多い印象
2022/06/20(月) 11:29:41.63ID:qsA991ej
まぁプログラマーでござい(ドヤッ!な勘違いの陰キャチー牛の癖に英語読めないポンコツなの日本人くらいだからなwww
2022/06/20(月) 12:24:24.66ID:6BcBi/VL
同じ意味とされることもあるが、若干のニュアンスの差もあると思うんだよな。
ブールはブール代数から取ってるんだから当然に代数的な操作に使うという感覚があるし、
真理値は論理学の方面で抽象的な概念 (命題とか集合とか) に対応付く場合もある気がする。
個人的には論理値が最も中立というか、ただ真と偽の値を持つものという雰囲気を感じる。

ブール ⊂ 真理値 ⊂ 論理値 な感じ。
2022/06/20(月) 12:43:05.08ID:G0GSIi1k
たかが二値論理の値の型でしかないものを誰がboolだのbooleanだの呼び始めたのかと思って調べたらALGOL60だった
2022/06/20(月) 12:43:22.11ID:zDrv1zgC
真理値だけは3値以上の場合も含むからちょっと意味が広い感じはする
747デフォルトの名無しさん
垢版 |
2022/06/20(月) 13:11:27.43ID:bsAvnwWF
関数オーバーロードをありがたがってるのはジャバの連中だけ
2022/06/20(月) 15:32:26.58ID:nUFjxYTv
論理値は非古典論理の値も含むからさらに広いな。
2022/06/20(月) 15:34:13.37ID:rudBfZT/
>>746
どれも注記がなければ二値だけど
three logical valuesやthree-valued Booleanと言えば3値になりえるので
基本的に意味するところは同じだと思うよ
2022/06/20(月) 16:12:28.65ID:Wp6+mQEy
>>749
確かに論理値も多値ありうるのか
真偽値もそう?これ字面からは2値限定な気がするけど
2022/06/20(月) 16:33:57.18ID:vXHoc6MR
どうでもいいけどwasmerがaarch64 完全対応したということで、rust+wasm+wasmerでcliを試してみたけど完全にただのjavaで草生えた
2022/06/20(月) 16:55:48.44ID:6BcBi/VL
Wasm は JVM より低レイヤ寄りだから設計思想は違うんだが……。
でも Java がやってた領域をかなり奪うとは思う。

Android で JVM を使っている部分を Wasm に置き換えたような OS とかもその内に出てくるんじゃないかね?
2022/06/20(月) 17:33:23.64ID:ib2o9qWW
個人的にWasmよりもTauriの方が開発環境構築がめちゃ楽でシンプルだから好き
クロプラの一番の課題って今も昔も設定の煩わしさだよね俺はconfigマスターになりたいわけじゃねーんだよ!
モバイル対応がまだだけどちゃんと予定はあるからTauriが流行ってほしいな
2022/06/20(月) 17:52:06.79ID:cgMFd80D
wasmとtauriって別にそういう競合するポジションとかじゃなくね?
2022/06/20(月) 17:55:14.20ID:JDT/MbKD
Tauriはただのwasmのレンダラーだよ。Chromium内蔵をやめて実装をRustにしたElectron。
wasmerはレンダラーしないwasm実行環境。
756デフォルトの名無しさん
垢版 |
2022/06/20(月) 17:56:48.16ID:E2oosySA
>>744 >>748
Rustの公式referenceでもbool値に対してのoperatorをlogical and やlogical orと明記されているから日本語訳は論理値でもよいのではないかな
2022/06/20(月) 18:19:59.87ID:6BcBi/VL
>>756
論理和・論理積に対応する英語は logical disjunction / logical conjunction であって、 logical or / logical and ではない。
(でも演算子として OR / AND を使った表記をすることはよくあるし……。 カジュアルな場面では曖昧だったりするのかな?)

logical or / logical and は bitwise or / bitwise and と区別するために新しく作られたプログラミング用語として考えるべきで、
もちろん過去からの様々な分野の用語を踏襲してはいるにしてもあまり対応づけて考える必要はないと思う。
bool は人名 (固有名詞) に由来するんだからそのままブール値と訳すのに一票。
758デフォルトの名無しさん
垢版 |
2022/06/20(月) 18:37:04.96ID:E2oosySA
>>757
まずRustを含めてプログラミング用語の話においてのみboolが出てくるのだから他へ話を広げる必要なし
次にbitwise andに対してboolean andと言わずにlogical andと用いられているのはlogicalが説明としても用語としても妥当であるため
日本語としてもカタカナ訳語を使う必要はなく論理値や論理演算子でよいのではないかな
2022/06/20(月) 18:41:04.35ID:cgMFd80D
自転車置き場の議論楽しいんんねええええ
2022/06/20(月) 18:45:53.95ID:fDP2JAl4
Tauriのモバイル対応はwasmのUIフレームワークの整備が進んでいないから、まだいいかな
このままモバイル対応しても、せいぜいReact Native アプリのバックエンドがwasmになって実行速度を少し改善するくらい
全てはWASM実装可能なUIフレームワークの成長次第だから、Yewは頑張ってくれ!
2022/06/20(月) 18:51:29.68ID:vXHoc6MR
もしreact 自体をウェブアセンブリとしてビルドできたら、、革命起きそう
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況