Rust part28

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2025/03/24(月) 17:37:00.15ID:NJwebgj2
公式
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 part27
https://mevius.5ch.net/test/read.cgi/tech/1733146370/

ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.5ch.net/test/read.cgi/tech/1514107621/
2025/04/11(金) 22:11:47.10ID:cSKsCytU
>>434
とはいえあれでISO 26262とかの認定は通ってるんだよね
ああいう審査って何を見られてるんだろ
436デフォルトの名無しさん
垢版 |
2025/04/12(土) 06:43:32.65ID:IMDrBc8a
USO-800
2025/04/12(土) 11:10:12.54ID:mEwUzKIx
Rust境界例
2025/04/12(土) 12:46:42.80ID:G/Z86Z6L
>>430
トレイト境界はあらゆる観点で間違った訳語なのでまともな回答を期待しても無駄だよ

難しい概念ではないのに「境界」を使った途端に簡潔な説明ができなくなるんだから訳語としての用を成してない
439デフォルトの名無しさん
垢版 |
2025/04/12(土) 13:53:53.64ID:Mda8ZghK
このスレの結論
trait boundの翻訳の議論を除けばRustには欠点がないと思っていいかな?
2025/04/12(土) 13:55:52.66ID:0buiik+f
GC言語経験者には、難しいというのは欠点かも
2025/04/12(土) 14:14:59.77ID:6rJMqtUM
文字列処理の経験者は案外GCを使わない経験をしているはず
だが文字列指向を捨てるよう訓練された人が一番苦労する
2025/04/12(土) 14:32:57.78ID:fDddIcJn
toastyっていつになったら使えるようになるの?
2025/04/12(土) 16:12:49.92ID:l+qhzSG7
>>442
toastyがどこまでやるのか途上でわからんけどさ
O/Rマッパーを名乗ってるから単純なものには使えても一般的にはORMの様々な欠点を抱えるっしょ
だからORMではないSQLxが人気だけど非同期ORMの需要もあるから既にSeaORMやDiesel-asyncがある状況で
新たにtoastyをtokio直下プロジェクトで進めようとしてるのはRDBよりむしろNoSQL対策がメインと見ていいのかね
2025/04/12(土) 16:14:41.99ID:kMx1QAlk
>>435
品質管理系の規格 (ISO9001) だと「発生したトラブル (不良品) に対して対策をする手続きが存在していてその手続き通りに実施しているか」を審査されるが、対策の効果や妥当性は審査対象ではない。
実際問題として作ってる製品の性質によるから審査しようがないし。
26262 がどういう性質のものなのかググったくらいでは全然わからんが 9001 と同じようにメタな部分を審査するんじゃないかな……。
ダングリング防止の機能があることなどは審査されてもどういうメカニズムで実現されるかは審査対象外なのかもしれん。
2025/04/12(土) 17:46:03.85ID:GwdhqqDc
>>438
まともな回答じゃなくても妥当性を判断する材料にはなる
2025/04/12(土) 20:51:24.81ID:6rJMqtUM
ニューメディアには二種類ある
知りたいことだけを問い合わせるメディアと
従来は網羅できなかったことを網羅するメディア
447デフォルトの名無しさん
垢版 |
2025/04/13(日) 10:15:42.59ID:9+E6vnhP
これよな

そう思えるのはお前も信者だからだろ

結局のところRust信者はポリコレ過ぎる
これも「政治的に」Linusにチクって解決しようとしたところ、ブチ切れられただけ
記事の話が全部本当だとして総合的に推定すると、
Rustから叩く為のラッパ的な物を用意しようとしたところ政治闘争となり、両者辞任の痛み分け、
カーネル自体のコードには今後ともRustは無し、という所ではないかと
これは「支持」ではなく「容認」だろうよ

ただまあ、何でそんな物が『カーネル側に』必要なのか技術的に疑問ではあるがな
RustからCのAPIを叩けないなんて事はあり得ないだろうし、仮にそうだとしても、API変換をRust側でやればよかっただけの話
俺はHellwigの方が正しいと思う。まあLinus案も落とし所としてはありなだろうけど
(というかLinusはこの辺が断然上手い)

Rust信者は、技術的理由ではなく、非Rust話者を排除する為にRustを使う
TypeScriptにも似たような奴はいると思うけど
448デフォルトの名無しさん
垢版 |
2025/04/13(日) 13:34:29.88ID:2lLYGSci
ボランティア翻訳に訳の分からんいちゃもん付けるのはたいてい技術評論社
奴らは本を売りたいだけだから無視して良いと思う
2025/04/13(日) 13:40:39.46ID:4yNzrwxr
抽象化モデルが非効率だったと何年もたってから発覚したときにはそのモデルに依存しきっていて全体の書き直ししか修正しようがないということをリーナスは書いている。
プログラムを凝らずに書けることが良いというよりは、凝ったプログラムが柔軟性がない (修正しにくい) ことを問題視してるように見える。

実行効率はやってみないとわからん場合もあるし事情が変わる場合もあるから、ある時点で設計として真っ当であってもずっとそうだとは限らんのだな。
2025/04/13(日) 15:14:15.49ID:1Z67A7m7
>>448
問題のボランティア翻訳に深く関わってる人達が書いた本を出版してるのが技術評論社だぞ
jp.mercari.com/item/m61131849914
451デフォルトの名無しさん
垢版 |
2025/04/13(日) 15:55:50.50ID:c6Sg9WHG
突然メルカリのリンクを貼られてドン引き
2025/04/13(日) 16:47:42.50ID:h93U4QKi
会社もメルカリで売ってるのかすごいな
2025/04/13(日) 17:58:50.92ID:gxlD4b+C
SDGsの時代だからね
454デフォルトの名無しさん
垢版 |
2025/04/14(月) 14:43:52.73ID:NMEkC5si
ますます怪しいな
455デフォルトの名無しさん
垢版 |
2025/04/14(月) 16:15:10.37ID:w0ewOdij
ボランティアは文句つけられるけど
うちから出せば金が出るよってことか
456デフォルトの名無しさん
垢版 |
2025/04/14(月) 16:17:16.70ID:w0ewOdij
ボランティア叩き企業なのに
指摘されて即座に擁護が湧くのが怪しいと思う
2025/04/14(月) 23:45:08.90ID:5Y8yian5
>>447
そうではなくて、
既に進みつつある(デバイスドライバを含めた)カーネルモジュールのRust化の利便性のために、
Rust用のAPIをLinux公式としてサポートする方針でLinusもOKを出したんだよ。
カーネルのコア部分はC言語のままだけど、各カーネルモジュールは新規分からRustへ置き換わっていってる。
2025/04/14(月) 23:48:27.55ID:bfiqihn+
マジかー
お爺ちゃん達Rustやりだすの?
2025/04/15(火) 10:08:30.99ID:CbsPdu2a
Option<Ordering> を得たいときに i64 とか i32 の integer 型の condition があるとして
let hoge =
if condition == 0 { Some(Ordering::Equal) }
else if condition < 0 { Some(Ordering::Less) }
else if condition > 0 { Some(Ordering::Greater) }
else { None }
;
で hoge に Option<Ordering> が得られるのですが
hoge を反転させた状態を hoge から直接得るにはどうすれば良いのでしょうか
上の例のコードで -condition に置き換えたときに得られる結果と同じものを
コードの重複を避けて hoge から !hoge みたいに取得したいのです
2025/04/15(火) 10:42:57.35ID:5gq1dzTA
hoge.map(Ordering::reverse)
2025/04/15(火) 10:51:02.82ID:b7lMQ02q
>>459
反転はreverseすればいいとして
普通にcondition.cmp(0)したほうがいい

事情があってOption化したいとしても
cmpできる場合とそうでない場合の2つに分岐させる
462デフォルトの名無しさん
垢版 |
2025/04/15(火) 11:01:31.96ID:l4YFawe/
【脳科学】「政治行動の激しさ」に関連する脳回路の存在が研究で判明 [すらいむ★]
http://egg.5ch.net/test/read.cgi/scienceplus/1744637408/

上記のリンクをたどったリンク先の本文とコメントを読まれると・・・
余裕ありますか・・・
大々的にインターネット上にばらまかれました!
2025/04/15(火) 17:11:35.23ID:8Z5eSApz
PartialOrdを実装してるようには見えんよな
2025/04/15(火) 21:09:18.10ID:r3aLc7OM
XY問題っぽいけど本人がいいなら別にいいんじゃね
2025/04/15(火) 23:20:57.63ID:I/RUKS+a
>>459
それらi32やi64はOrd境界を満たしている
そしてOrdにはsupertrateとしてのトレイト境界PartialOrdがある
まずそのifの4分岐を使わずともx.partial_cmp(&0)でOption<Ordering>を得ることができる
ただしOrdも満たす整数型では常にSomeとなりNoneになることはない

一方でf64などの浮動小数点は!Ordなのでpartial_cmpでNoneが返りうる
自分でstruct Pair(i32, i32)を作り二つのi32のcmpが同じ時のみpartial_cmpをSomeにする型等も同様にNoneが返りうる
そのためにPartialOrdとOrd(: PartialOrd)の二段階に分かれている

今回のi32型やi64型はOrdも実装されているためNoneが返ることは絶対にない
したがって今回はx.cmp(&0)でOrderingを返すのが正しい
2025/04/16(水) 00:32:42.55ID:BZ2/m9bV
>それらi32やi64はOrd境界を満たしている
トレイト制約とトレイト実装の区別ができてないやつをちょくちょく見かけるけどあれ境界本の影響だったのか
2025/04/16(水) 00:40:00.05ID:nlneFEtY
ある型がXxx境界を満たすこと=その型がXxxを実装していること、だから正しいよね
2025/04/16(水) 09:39:47.23ID:VD2CYluq
境界を満たすことって表現が気持ち悪い
日本語的じゃない

区域に含まれるようでいてそういう話でもない
2025/04/16(水) 10:00:02.42ID:kz9c6vLk
>>468
英語的にも自然ではない。 でも Rust 用語ではこう言うことになっている。
テクニカルタームってのはそういうもんなので自然かどうかを論じるのは無意味。
2025/04/16(水) 11:16:05.15ID:DaU8fra8
明らかに間違った言葉を使っていても”テクニカルタームってそういうもんなので”で済ませるメンタリティの持ち主が誤訳を生み出して広めるってことだな

役に立つ誤訳ならいいけど>>465からも分かるように境界は足を引っ張る誤訳だから早く止めるに越したことはない
2025/04/16(水) 11:28:23.19ID:aXNp1hi+
traitボヨヨ~ンでいいよ。
2025/04/16(水) 11:30:24.19ID:PbGbU7xO
普通にC#/TypeScript/Kotlinあたりで採用されているconstraint: 制約 でよかったと思うけどね
Rustは変な選民意識が足を引っ張っている
2025/04/16(水) 11:33:26.57ID:aXNp1hi+
Cの置き換え言語に高尚な意識は要らん
2025/04/16(水) 11:34:30.78ID:aXNp1hi+
組込みやってる人達と接点は持ったほうがいいね
2025/04/16(水) 12:15:29.62ID:zTEGEKkW
くだらない議論する労力あるならとっととthe rust book 最新版を翻訳して用語統一しろよ。
2025/04/16(水) 12:22:24.48ID:D06utXB5
プログラム という単語自体がもうおかしいからな
そこに目を瞑ってる時点で同じ穴の狢よ
2025/04/16(水) 12:41:52.97ID:ApyifYby
>>460
Option<Ordering> に .map(Ordering::reverse) ってゼロコストなんか
可読性がどうでも良いなら
>>459 でそのまま -condition した方が速いんじゃね
2025/04/16(水) 12:48:16.89ID:QI1tlKT9
>>469
>英語的にも自然ではない。
CPU boundsとか聞いたことないの?
2025/04/16(水) 15:44:17.59ID:PbGbU7xO
意識高い系プログラミング言語界隈はbindを多用しすぎていて曖昧になってしまっているのは問題
ネイティブにとってクールで知的な語感なのか知らんがどんだけ束縛プレイ好きなんだよ
2025/04/16(水) 16:00:15.57ID:aXNp1hi+
緊縛緊縛
2025/04/16(水) 18:39:21.33ID:VD2CYluq
AとBの境界を満たすって意味がもうすでに訳が分からないので気持ち悪い
2025/04/16(水) 19:25:04.78ID:vwXsH1ob
上界下界
2025/04/16(水) 19:28:02.69ID:VD2CYluq
AとBの条件を満たすならわかる
AとBの境界を満たすのは意味不明

Aの境界を満たすですら意味不明
2025/04/16(水) 19:31:37.92ID:vwXsH1ob
簡単な概念に難しい言葉使いすぎ。共和党党員でも理解出来るdealみたいな簡単な単語にする
computerとかラテン語っぽいのは嫌われちゃうぞ
2025/04/16(水) 21:14:58.28ID:kz9c6vLk
テクニカルタームってのは「その分野に固有の定義がある語」なので日常用語の意味で解釈されないようにしなきゃならないんだよ。
その分野を学んだことがない初心者でも自然に読めてしまうのは用語の選定が失敗した証だとも言える。
法律用語の「悪意」「ないし」あたりは日常用語とは明瞭に意味が異なるのに日常用語としても解釈できてしまうので良くない例だ。
その一方では全く由来のないデタラメに作り出した語は単純に言いにくいし覚えにくい。
境界と言うかわりにププイータとかフニャコソとか言ったって (それで統一されるなら) 辻褄は合うが、さすがにそれはあんまりというものだろう。
そういう微妙な機微を踏まえて選定するものなんだよ。
2025/04/16(水) 21:17:18.07ID:Owp+m7kF
ボヨヨ~ン一択
2025/04/16(水) 21:24:19.59ID:nlneFEtY
>>477
それは最適化されるので大丈夫
「-condition」を使ってはいけない
これはi32::MIN時にoverflowする
したがってそのif文で書くならばGREATERとLESSを入れ替えるか
「condition > 0」と「condition < 0」を入れ替えることになる

しかしOrderingについて「if文で多分岐させる」こと自体がいけない
可読性に劣るとともにケアレスミスも起きうるだけでなく
生成コードを見ると以下の正解よりも少し長くなりえて遅くなりうることがわかる

正解はこれ
普通のまま: condition.partial_cmp(&0)
逆にする時: condition.partial_cmp(&0).map(|x| x.reverse())
逆にする時: condition.partial_cmp(&0).map(Ordering::reverse) 【上記と同じ】
いずれも生成コードがそのif文より短くなりうる
そして可読性も優れている

ただしconditionにi32やi64の整数型を使うとpartial_cmp()がNoneになることはない
Option<Ordering>を使う必要はなくcmp()でOrderingを得れば十分
真の正解はこれ
普通のまま: condition.cmp(&0)
逆にする時: condition.cmp(&0).reverse()
488デフォルトの名無しさん
垢版 |
2025/04/16(水) 22:12:59.22ID:talPcQtH
てすと
2025/04/16(水) 23:55:34.09ID:4m7V5jbh
Rustでの抽象化したコードの方が可読性の良さだけでなく速いんだよな
様々な抽象化したコードの連鎖もRustでの最適化と下請けのLLVMでの最適化のおかげで速くなってる
2025/04/17(木) 00:27:01.07ID:IaMMIkKx
エイリアス解析は最適化の重要な要素だから参照関係を明瞭に追える Rust は有利。
2025/04/17(木) 06:01:08.25ID:KpBsw54w
Rustはオワコン
2025/04/17(木) 11:32:45.05ID:W4vMp3MB
>>485
bind (bound, boundary, 等々)なんて、特に固有の定義を持たない雰囲気ワードの最たるものだろう
なんとなくオシャレだからというだけで乱用されすぎてもはや意味不明
2025/04/17(木) 11:47:53.19ID:pEkBySlv
>>477
反転するコストがあるんだからゼロコストではない
でも反転前の値が既にある前提なら.map(Ordering::reverse)より速くするのは無理
conditionから新規に反転した値を取得したいのなら当たり前だけど.map(Ordering::reverse)を使わないほうが速い
(ただし>>459の実装ではなくstdと同じ実装を使わないと最適化の度合いで差が出る)
2025/04/17(木) 12:04:31.60ID:tER9i4ve
これは嘘です
その場合でも.map(Ordering::reverse)が一番速いです

>>493
>>conditionから新規に反転した値を取得したいのなら当たり前だけど.map(Ordering::reverse)を使わないほうが速い
495デフォルトの名無しさん
垢版 |
2025/04/17(木) 12:20:41.10ID:Yukgj1cx
ところがRustならゼロコストなんだなあ
2025/04/17(木) 13:46:18.29ID:oKypZfow
ユースケース説明してくれないのに速いとかなんとか言っても不毛だし境界の話に戻ろうぜ!
2025/04/17(木) 14:21:55.09ID:fw0OLUjq
>>487
論理的に反転したいときにreverseって一般的なのかな
negateの方がふさわしいと思うが
498デフォルトの名無しさん
垢版 |
2025/04/17(木) 15:59:50.14ID:szbpCwWd
【AI】OpenAIが「GPT 4.1」のAPIを公開、100万トークン対応と実用性能で飛躍的進化を遂げた次世代AIモデル [すらいむ★]
http://egg.5ch.net/test/read.cgi/scienceplus/1744724723/


上記のリンク先のコメントを読んでもまだ医者の威厳を保てるのか?
2025/04/17(木) 18:53:03.37ID:47PJMP+S
>>459
それと全く同じ動作をする関数fはこれが速さも簡潔さもベスト

fn f(condition: i64) -> Option<Ordering> {
 condition.partial_cmp(&0)
}

Less/Greaterを反転させた関数f_revはこれが速さも簡潔さもベスト

fn f_rev(condition: i64) -> Option<Ordering> {
 0.partial_cmp(&condition)
}

アセンブリ手書きでもこれらの生成コードより速くできないことをx86-64で確認した
500デフォルトの名無しさん
垢版 |
2025/04/17(木) 19:35:44.38ID:Yukgj1cx
>>497
Rustではサイドエフェクトが無いことを保証できるので
どちらでも同じコードに落ちます
2025/04/17(木) 19:48:15.83ID:47PJMP+S
>>497
論理反転ではないからreverseだと思う
論理反転ならlt⇔ge gt⇔le eq⇔neだろうけど
Orderingはlt,eq,gtの3種
そしてOrdering::reverseはlt⇔gtだから
2025/04/17(木) 22:47:28.82ID:wYSSkCRf
結局RustではC風に書くより抽象的に書いた方が、
可読性が良いだけでなく実行速度でも有利なんだな。
2025/04/17(木) 22:49:00.49ID:p3EBjLeO
>>499
でも>>494
condition.partial_cmp(&0).map(Ordering::reverse)のほうが
0.partial_cmp(&condition)より速いって言ってるけどどっちが本当?
2025/04/17(木) 23:42:56.97ID:oLU/r15m
simple is best
505デフォルトの名無しさん
垢版 |
2025/04/17(木) 23:59:58.22ID:VFw/RNHq
この本の帯すき

https://i.imgur.com/gVFQctS.png
2025/04/18(金) 06:24:24.51ID:cH2b3I6U
なんでビルドのときからボコボコボコボコDLさせるの?

なんでアクセスさせようとするの?
2025/04/18(金) 07:02:30.53ID:AZglsXQc
他の言語も同じ
2025/04/18(金) 07:04:06.26ID:5hEkFobl
>>506
標準ライブラリだけ使っていればDLしないよ
他のライブラリを使うなら自動的に依存関係がDLされるのは当たり前
もちろん事前にDLしておけばオフラインでも cargo build −−offline できるよ
2025/04/18(金) 07:57:54.21ID:x/7ySqvh
>>505
ScalaやHaskellとかと同じ道を歩んでるな
2025/04/18(金) 08:25:24.05ID:P5voSsBY
>>509
それらはRustのように速く動くわけではなく
Wasm上でもランタイムによるバイナリサイズ大きくてメリットが何もない
2025/04/18(金) 09:03:11.60ID:mYy6SV15
>>503
わざわざ人に聞かなくてもわかるでしょ
某オジのレスはほぼフェイクと思っておくくらいで丁度いい
2025/04/18(金) 09:55:44.96ID:D+dZTohS
.partial_cmp(&0) ってダサくない?
なんで
.partial_cmp(0) に出来ないの?
2025/04/18(金) 10:28:07.41ID:ZAhA/Z3u
0と比較した結果をOrderingで返す関数とか無用の長物じゃね?
2025/04/18(金) 10:32:03.94ID:D+dZTohS
確かに >>499 は無駄そのもの
2025/04/18(金) 10:47:04.28ID:OYio1Suj
>>512
出来ない
2025/04/18(金) 10:47:35.98ID:FSJ/87pm
>>514
話の流れを理解できてなさそうだな
if文で4分岐する関数を作るのはコードが見にくく実行も遅くなる可能性があって無駄だから素直にpartial_cmp()を使おうって話だろ
2025/04/18(金) 11:56:29.53ID:iABbAYzg
>>494>>499も複オジだった件w
この嘘吐きおじさんの振る舞いはいくらなんでも酷すぎるだろ
2025/04/18(金) 12:06:41.66ID:l4HkHLRc
>>512
初心者っぽいから説明すると
大きな構造体や文字列やBigIntなど含めた様々なデータを比較する関数だよ
参照を渡す方が良いことを理解できるよね?
もちろん数値の場合はコード上は他のデータと同じく参照を渡していても最適化で参照を使わずに数値同士が比較されるから心配しなくていい
2025/04/18(金) 12:21:49.30ID:9tQNo+Cx
gpt o3がバックエンドはRustがオススメです。
みたいに推してくるから、理由を聞いたら、「何にでも雑に強い」からだって開き直りよった
2025/04/18(金) 12:25:55.76ID:LTc7knjt
可読性ですね判ります
2025/04/18(金) 12:29:26.06ID:LQ9k+WsD
政治を嫌うやつがほしがるのは共感でも最適解でもなく、政治的ではないことが保証された解だな
だから乱数や賭博を嫌いになれないのか
522デフォルトの名無しさん
垢版 |
2025/04/18(金) 20:38:04.94ID:8ipzMSW5
Rustで書くとLLVMが最適化するので事実上最速のコードであることが保証されます
2025/04/18(金) 21:32:44.78ID:LQ9k+WsD
単に競争を回避するだけならできなくはないと思うが
政治家の競争と民間企業?の競争を区別するのは無理ゲーだ
2025/04/18(金) 21:55:39.18ID:U7NtBk6M
>>514
それコンパイルしたらSETccとCMOVcc使って最短最速の分岐していて無駄ないよ
525デフォルトの名無しさん
垢版 |
2025/04/19(土) 04:04:16.66ID:FhCqpqMY
【2025年最新】自然な声の音声読み上げソフト5選!AI技術で ...
https://ondoku3.com/ja/post/natural-voice-software/
※無料で5000文字まで音声合成エンジンで読み上げ可能
※音声合成エンジンは人間の声のサンプルから声質が作成されている
「Grok」が過去の会話を覚え続けるようになった--ChatGPTに追従 オフにする方法は?
2025年04月18日 05時20
http://japan.cnet.com/article/35231959/
>>「ChatGPT」やGoogleの「Gemini」も同様の記憶機能を導入している。これらのサービスも、長期的な会話履歴を保持し、ユーザーに合わせた回答が可能となっている。
※GrokはChatGPTで規制されていることも返答するようになっている
統合失調症の幻聴で半分人間半分AIと申されていた
統合失調症の幻聴で宇宙人とも話されていたのでかなり昔からできていたと思われる
※対象者【統合失調症】の考えに対しては何を考えているかは対象者【統合失調症】に聞いてみないことには意味不明⒮
2025/04/19(土) 21:57:19.62ID:fY+o1xZs
>>524
それRustのOption<Ordering>が速い理由がわかったわ
Orderingが8bitであることに加えてOption<Ordering>も8bitに抑えてる
しかもOrderingとSome(Ordering)が同じ8bit表現になるようにしている
それらにより8bitしか変化させてくれないsetCC命令をゼロ拡張や事前ゼロクリア無しに使えるわけだ
2025/04/19(土) 22:46:36.80ID:cJmAkIgz
Option が特別扱いなわけではなく、全般に空いているビットに詰め込む仕組みがあるのでいろんなところで効いてくる
2025/04/19(土) 22:55:31.71ID:vmwnv5nR
Option持たない言語や持っていても使われない言語は別途bool値などで表すしかないためOptionのような対応処理ができずに不利だね
2025/04/19(土) 23:14:20.43ID:cJmAkIgz
詰め込む分だけ取り出すコストが生じる場合もあって、どちらが良いとは一概には言えないんだけど Rust は上手くやれてるみたいだね。
2025/04/19(土) 23:27:11.24ID:9Z8ZvqW5
Optionを持たない流派とかどうでもいい
相性に依存したくないし
2025/04/20(日) 02:35:00.94ID:q3Yzhl/7
Some(Equal)
どちらが良いとも言えない

None
どうでもいい
532デフォルトの名無しさん
垢版 |
2025/04/20(日) 08:28:25.78ID:8i8LLpN+
ぬるぽ
533デフォルトの名無しさん
垢版 |
2025/04/20(日) 10:53:41.23ID:stub9h6D
今どきの言語だと大体は string? みたいな記法はあるし
unwrap_or や map, and_then に相当する操作も普通にできるから、 optional は実はあまり困らない
(演算子で書けるぶん、こちらのほうが記述も簡潔)

Resultは無いから、欲しい場面は結構ある
534デフォルトの名無しさん
垢版 |
2025/04/20(日) 11:10:13.02ID:stub9h6D
HaskellはリストやOption (Maybe), Tree などをモナドという構造として抽象化できると考えた
これは理論的な美しさはあるけど、実用的にはエラーハンドリングのための専用の構文があつた方が多くの場面で便利

Optionに限れば、C#やTS, Kotlin などにもそういうものがある
Resultも含めるとRustの?演算子はバランスがいいと思う
(これを monadic bind と説明せず、エラーの場合の早期リターンとして説明してる点も含めて)
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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