Rust part25

■ このスレッドは過去ログ倉庫に格納されています
2024/07/31(水) 00:46:26.17ID:DBMWY2QT
公式
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 part24
https://mevius.5ch.net/test/read.cgi/tech/1716759686/

ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.5ch.net/test/read.cgi/tech/1514107621/
2024/08/15(木) 14:43:48.85ID:vVr6IPen
>>219
整合性が求められるのはどの言語でも同じ
どの言語でもgitを使うかどうかブランチを切るかどうかの方針や判断は同じようになされて言語とは関係ない
221デフォルトの名無しさん
垢版 |
2024/08/15(木) 15:14:57.56ID:Q4hz384o
Rustはコンパイル通らないと嫌な気持ちになるから整合性が必要
動的言語はバグってても笑えるから整合性は不要
2024/08/15(木) 15:28:46.91ID:bVAhHZZX
>>218
Rustはリファクタリングに適していて
そのプログラムの本質のロジック以外のほとんどのミスをコンパイルエラーにしてくれるから
いきなり書き出し始めていってもなんとかなるよ
同じ機能が出てきた時点でtraitにして重複コードがあればそのprovided methodにするとかね
2024/08/15(木) 15:33:22.56ID:ntgKOifP
「全体の整合性が求められるから」は「全体の整合性をコンパイラにチェックされるから」に読み替えてくれ
コンパイル通らないと嫌な気持ちになる以前にテストできないだろw
2024/08/15(木) 16:10:36.88ID:bOFVyCO2
モノリシックな巨大なコードを作らずにクレイトに分けよう
クレイト毎にコンパイルできる
225デフォルトの名無しさん
垢版 |
2024/08/15(木) 16:13:34.27ID:gPssFbVF
自分だけかもしれないけど、新規にコードを書くとき/リファクタするときにエディタにワーニングが表示された状態になるのが精神的に負荷がかかるんだよね
だから新しく作ったファイルの先頭でまず #![allow(dead_code)] するね…
(ある程度コードができてきたら取り払うけど)
226デフォルトの名無しさん
垢版 |
2024/08/15(木) 16:23:19.81ID:gPssFbVF
>>218
分野によってはそう思う
探索的なデータ分析をするとか画像処理のアルゴリズムを考えるとか、そういう場面だとPython等で試してからRust等に移植というのは分かる
「書いて捨てる」を前提にするにはRustはやや重い
2024/08/15(木) 16:53:43.32ID:afsyCbP1
それはPythonに慣れてるだけじゃないか?
Python使ったことない人でもそうなるわけではない
228デフォルトの名無しさん
垢版 |
2024/08/15(木) 17:04:07.16ID:WFExrDMY
コンパイルワーニングやエラーが負荷になる人は動的言語でのテストファーストな開発も負荷になりそうだね。
229デフォルトの名無しさん
垢版 |
2024/08/15(木) 17:18:57.30ID:gPssFbVF
慣れというのは否定しないけど、そもそもコンパイル必要な言語とそうでない言語の違いだな
コード書いて Ctrl + S で保存すればすぐに変更後の動作を試せるのは大きい
特にRustなんてコンパイル時間長いんだし
書き捨てる前提の実験的なコードで完璧を目指すものでもないでしょ
2024/08/15(木) 17:31:23.55ID:2Mk02GNe
そんなにコンパイル言語が嫌いなら使うな
このスレから永久に出ていけ
231デフォルトの名無しさん
垢版 |
2024/08/15(木) 17:40:55.12ID:gPssFbVF
自分は用途によっては他の言語も使うとしか書いてないんだが
宗教的あるいは能力的に一つの言語しか使えないんです?
2024/08/15(木) 17:53:40.88ID:KHsgBa/H
特性の真逆なスクリプト言語と比較しても既知の話ばかりで新たな知見も情報も得られないからなあ
ノイズとなるだけのスクリプト言語との比較の話は禁止しようぜ
やりたい人は別スレを立ててやればいい
233デフォルトの名無しさん
垢版 |
2024/08/15(木) 18:21:12.60ID:gPssFbVF
自分が言いたかったのは「Rustは清書用」というレスへの同意だけなんだよな
特定の言語を推したり比較したりしたいわけではなく
これ以上の話はスレチになりそうだからやめとく
2024/08/15(木) 18:25:33.11ID:IG6WI0D2
俺はRustの方が慣れてるため最初からRust使うので慣れの問題だと思う
2024/08/15(木) 18:46:44.09ID:OZNxhJTv
スクリプト言語で下書きするっていっても直和型もないような言語だと
Rustで清書するときにデータ構造からやり直しだし
どういう言語を想定してるんだろ
TSとか?
2024/08/15(木) 18:58:18.84ID:OZNxhJTv
画像処理みたいな純粋なアルゴリズムの検討ならあまりそういう問題はないだろうけど
単なる数値計算なら別に最初からRustでいいと思うんだよな
DLみたいに既存のフレームワーク使うためにPythonで検討したいとかなら分かるんだけど
237デフォルトの名無しさん
垢版 |
2024/08/15(木) 18:59:39.70ID:gPssFbVF
アプリ全体の設計レベルだと流石に下書きなんてしないと思う
あくまでも部分的な話で、例えば画像処理なんかだと整数または小数型の多次元配列だけ扱えれば良いので
2024/08/15(木) 19:32:04.42ID:+y/e/IpZ
RustやC++で書かれたライブラリを呼び出すだけの話ならばどの言語でも同じだから議論の意味ない
そうではなく自分でプログラムを組んで実行するなら最初からRustで書けば高速実行できる
2024/08/15(木) 20:01:33.38ID:mLyUPHca
実験的な変更の波及範囲が広いんだよね
エラーの種類を増やすためにenum ErrorKindに新しい要素を追加したらErrorKindをmatchで網羅してるDisplayの修正も必要になるとか
最終的には必要な変更だから修正漏れを防ぐ意味では助かるけど一時的な変更だとちょっと大変
バージョン管理が適当だと戻すのも面倒になる
2024/08/15(木) 20:17:28.56ID:cCrv94Lj
>>239
thiserrorを使いなさい
2024/08/15(木) 22:15:21.69ID:nyOB87vc
不満を言う人は単なる不慣れとそれによる知識不足という感じですねー
2024/08/15(木) 22:23:50.08ID:J+lHdaYT
慣れてくるとサボり方も分かってくるからあまり困らんよね
とりあえずunwrapやtodo!多用してメインのパスだけ作ってしまうみたいなのはよくやる
243デフォルトの名無しさん
垢版 |
2024/08/16(金) 01:41:31.76ID:n83uLnGm
で、Rustのコンパイル時間は改善されてるのかい?
244デフォルトの名無しさん
垢版 |
2024/08/16(金) 08:44:44.18ID:AlUb7wqr
>>242
あとはclone連打したりBoxに入れたり
245デフォルトの名無しさん
垢版 |
2024/08/16(金) 11:16:32.52ID:NCq9ClXr
cargo build とかで rustc にオプションを渡すにはどうすれば良いですか
特定の hoge.rs に対してだけ出来ると有難いです
2024/08/16(金) 11:33:25.98ID:aaHau8VO
clone減らしても結局処理速度変わらなかったりする
2024/08/16(金) 11:41:08.16ID:ig7l4HYj
>>245
cargo rustcかRUSTFLAGS
2024/08/16(金) 13:42:33.29ID:PUHP0I+b
>>244
おまえらのために作ったった

// お手軽グローバル変数キット
#[macro_use]
mod x {
pub struct X<T>(pub std::sync::LazyLock<std::sync::Mutex<T>>);
#[macro_export]
macro_rules! x_init { ($x:expr) => { X(std::sync::LazyLock::new(|| std::sync::Mutex::new($x))) } }
#[macro_export]
macro_rules! x { ($x:ident) => (*($x.0.lock().unwrap())) }
}
use x::X;

// グローバル変数の宣言の仕方
static FOO: X<i32> = x_init!(999);
static BAR: X<Vec<i32>> = x_init!(vec![1, 2, 3]);

// グローバル変数の使い方
fn main_() {
x!(FOO) += 1;
assert_eq!(x!(FOO), 1000);
x!(BAR).push(777);
assert_eq!(x!(BAR), [1, 2, 3, 777]);
}
249デフォルトの名無しさん
垢版 |
2024/08/16(金) 14:04:22.59ID:l1JK1BDI
純粋な質問だけどマクロ使わずにできる?
以下のような感じに

static x: X<中身の型> = X::new(初期化式);
assert_eq!(&x, 中身の型と比較可能な値);
x.do_something(); // メソッド呼び出し
2024/08/16(金) 14:20:39.96ID:PUHP0I+b
>>249
Mutexへの参照を持つMutexGuardを持つスコープ内でしかDerefできない
つまりメソッドを定義してDerefした結果の参照を返すのは無理
この仕組みにより参照をスコープ外へ持ち出せなくしていることが肝
ただしMutexGuardを返すメソッドは実現できる
その場合は自分でDerefして使うことになる
それにより具体的には *Foo.x() += 1; として使うメソッドx(&self)は実現可能
2024/08/16(金) 14:28:26.26ID:2XNA/Shu
>>249
それだけならできるよ
2024/08/16(金) 14:28:39.39ID:aaHau8VO
>>248
こんなのZigならcomptime付ければ解決だろ
2024/08/16(金) 14:43:23.29ID:/FTYasP4
>>252
グローバル変数、すなわち、タスクやスレッドが排他制御して安全に扱える話をしているところで、comptime??
254デフォルトの名無しさん
垢版 |
2024/08/16(金) 15:12:00.16ID:l1JK1BDI
Rustでもコンパイル時に作れるものは簡単にグローバルな定数にできる
問題なのは HashMap みたいなヒープを使うもので、LazyLockが必要になるのもほぼこのようなもののためだと思う
初期化した以降は不変な操作しかしない定数のような使い方をする場合でもMutexが必要なのは仕方ないという感じなのか
255デフォルトの名無しさん
垢版 |
2024/08/16(金) 15:14:27.12ID:l1JK1BDI
>>254
すまんこれは勘違い
不変ならLazyLockだけで足りそうだ
2024/08/16(金) 15:20:06.84ID:PUHP0I+b
>>254
読み出しだけならMutexは不要

static READ_ONLY: LazyLock<Vec<i32>> = LazyLock::new(|| vec![1, 2, 3]);
assert_eq!(*READ_ONLY, [1, 2, 3]);
2024/08/16(金) 17:40:52.16ID:n/S+hvuh
LazyLockは油断するとデッドロックの要因になりそうだな
初期化が単純なうちはいいけど
2024/08/16(金) 18:31:48.52ID:/FTYasP4
LazyLockは排他制御をRust1.0からあるstd::sys::Onceに任せている
その部分はOS依存だが例えばLinuxなどの場合、
未初期化か初期化中か初期化済かなどの状態を示すatomic整数で管理している
そして初期化実行は最初のスレッドのみで起きてそこでの競合は起きないことを保証している

一方で、あるLazyLock利用変数Aの初期化関数で資源Xを利用している時に、
資源Xをロックしたままの状態でその変数Aに最初にアクセスすればデッドロックとなりうる
これは一般的な話と同じなので今回特有の問題ではない
いわゆる資源ロック優先順序付けをA>Xとするだけで回避できる

ちなみに、LazyLock初期化後のT読み出し追加コストはその状態整数を見ることだけになり、
「初期化済」状態でずっと変わらないため分岐予測もおそらくずっと成功
そのためコストは気にせずに使える
2024/08/17(土) 01:30:12.83ID:OMSBWIoV
小さなTauri v1アプリをv2 RCにアップグレードしたら
リリースビルドのファイルサイズが2倍になったんだが

ファイルサイズ小さいのが売りじゃなかったのか?
6MBが12MBになったぞ
2024/08/17(土) 13:50:23.56ID:kywszD5m
TauriのことはJavaScript/TypeScriptスレでやれよ
2024/08/17(土) 14:00:58.13ID:w43wc/GB
>>260
Rust のバイナリにリンクする部分は Rust の話じゃね?
2024/08/17(土) 14:22:14.92ID:wXTvB1/z
もしRustやRustの汎用ライブラリのバージョンを変えてバイナリサイズが増えたのならRustの話なのでここでやればいい
しかしアプリのバージョンを変えてサイズが増えたのだからアプリの話であってRustスレで語ることはなにもない
2024/08/17(土) 14:27:21.91ID:OMSBWIoV
もしかしてTauriがRustのライブラリだと知らない人?
2024/08/17(土) 14:30:56.85ID:G1OfNx36
Rustに問題があると読めそうな文章なら手段を選ばずに排除する人
2024/08/17(土) 15:23:05.55ID:Qf5pJUWp
rustコードをコンパイルしたwasmバイナリが増えたってこと?
2024/08/17(土) 15:45:50.91ID:EpylkaBR
>>265
Tauriは各OSの他のアプリと同様に各ネイティブで動作するためwasmは関係ない
TauriはWebブラウザと同じ立場なので同様にJavaScriptとwasmが使えるが
そこでのwasmのコードはどのWebブラウザやTauriからも独立していて関係がない
2024/08/17(土) 15:53:49.31ID:bT3U9dm8
tauriはネイティブ部分とwebviewでプロセス間通信させて動いてるんだっけか
2024/08/17(土) 15:55:16.69ID:w43wc/GB
tauri は基本的にはその環境にあるウェブコントロールを使う。
生成される実行ファイルにリンクされるのは外部のウェブコントロールとの橋渡しに過ぎないからそんなに大きくないはずなのに……なんで?
っていう話。
269デフォルトの名無しさん
垢版 |
2024/08/17(土) 16:01:00.63ID:zPjNywzn
tauriは糞
270デフォルトの名無しさん
垢版 |
2024/08/17(土) 16:05:04.51ID:K84lbgy4
TauriはGUI以外のロジックをTS/JS側で書くかRust側で書くかみたいな話もあるよな
2024/08/17(土) 16:32:34.13ID:b7Mo3s6c
>>268
ウェブコントロールなんて分かりづらい言葉を使わずにWebViewと言ってくれ
2024/08/17(土) 16:36:42.10ID:dIGhUzjt
>>261
numpyのバージョン上げたら動かなくなったなどと言ってpythonやnumpyのスレではなくCのスレに乗り込んでるようなもんだぞ
2024/08/17(土) 16:47:26.11ID:YqZ4otqM
https://tauri.app/v1/guides/building/app-size/
Tauri v1のページだけど、ここに書いてある手法自体はたぶんv2でも有効だから比較調査してみるとよし
274デフォルトの名無しさん
垢版 |
2024/08/17(土) 16:50:47.17ID:K84lbgy4
>>272
TauriはRust部分もちゃんと使うフレームワークだぞ
アプリとして必要な処理をRustで書いてそれをJS/TSから呼んだり、データをRust側とフロント側で受け渡したりできる
ほぼTS/JSだけで書くこともできるけど、逆にUI以外のロジックはRustをメインに書くといった使い方もできる

実際のプロジェクトでどう使われてるのかは自分も知らないけど
2024/08/17(土) 16:53:38.16ID:bEXpluCi
一般的にバイナリサイズは動的リンクの共有ライブラリの使用が多ければその分だけ小さくなり逆は大きくなる
だからバイナリサイズとプログラム全体のサイズは関係がない
そのver.1とver.2でバイナリに含まれていないライブラリの変化を調べて違いを投稿してください
276デフォルトの名無しさん
垢版 |
2024/08/17(土) 16:55:44.18ID:K84lbgy4
ビルドはCargoを使うし、「生成されたバイナリが大きい」みたいな問題もRustのカテゴリーで良い思う
フロント側に使ってるReactやVueについての質問ならJS/TSスレで聞くべきだけど
2024/08/17(土) 17:04:38.57ID:tGKWZUAz
>「生成されたバイナリが大きい」みたいな問題もRustのカテゴリーで良い思う
意味わからんわwww
278デフォルトの名無しさん
垢版 |
2024/08/17(土) 17:19:21.92ID:K84lbgy4
解決するかはともかく、質問先としてはJavascriptスレよりはRustスレの方が回答してもらえる可能性が高いじゃん
公式のリポジトリのissue見ろって話になるかもしれないけど
279デフォルトの名無しさん
垢版 |
2024/08/17(土) 17:24:48.12ID:K84lbgy4
>>259のレスを見落としてるせいでバイナリサイズの話が唐突な話に見えてるのだったらすまん
2024/08/17(土) 17:35:27.19ID:bEXpluCi
まずは動的リンクしているライブラリの変化を調べなよ
例えばもしそれが減ってるなら
依存していた外部ライブラリの不自由さから解放されて状況が良くなっている話の可能性もある
2024/08/17(土) 17:40:36.43ID:SISNcxTZ
普通にissueで報告したらええやん
Rustのバージョンもビルド方法もビルドオプションも変えてないんやろ?
2024/08/17(土) 17:47:51.42ID:co5P0ZaQ
>>279
むしろ>>259のレスが総スカンくらう理由だぞ
環境情報も無く自分で調べたり切り分けをした痕跡が全く見えないから
2024/08/17(土) 18:16:28.63ID:OMSBWIoV
試しにTauri v1とv2-RCのscaffold同士で比較してみる

共にWindows 11のrustc 1.80.1 (x86_64-pc-windows-msvc)で
フロントエンドはnpm/Vanilla/TypeScriptを選択する

# v1
cargo create-tauri-app
npm run tauri build

src-tauri\target\release\v1-test.exe 5,271 KB


# v2
cargo create-tauri-app --rc
npm run tauri build

src-tauri\target\release\v2rc-test.exe 10,076 KB


やっぱりv2の方が2倍ぐらい大きいんじゃないの?
2024/08/17(土) 18:41:27.25ID:I1dGWckH
今も小さい方のバイナリも生成できていることから
Rustとは無関係な話であると切り分けできてよかったね
285デフォルトの名無しさん
垢版 |
2024/08/17(土) 18:46:42.10ID:AaqttF5e
tauriのことはjavascriptの範囲 (キリッ)
って書いてたやつが的外れなのは変わらない
286デフォルトの名無しさん
垢版 |
2024/08/17(土) 19:34:46.59ID:w2zHmV9M
全部issueで聞くべきなのでこのスレは存在意義がないんだよね
2024/08/17(土) 21:17:58.40ID:WUwor7aX
tauri2で
cargo tauri android init
cargo tauri android dev
ってやったらエミュレーターでスプラッシュ画面までは出るんだけど
コンテンツのところで↓みたいなエラーになるんだけど試した人いる?
error sending request for url
(http://127.0.01:1430/)
2024/08/17(土) 21:22:36.94ID:bEXpluCi
>>286
アドバイスしても反応ないからもういいのだろう
2024/08/17(土) 21:26:19.66ID:OMSBWIoV
Tauri v1もv2も動的リンクしているライブラリはいっしょだよ
2024/08/17(土) 21:28:39.15ID:I1dGWckH
Rustの話ならともかく
Rust製の個別のアプリの話は知ってる人がたまたまいたらラッキー
他の言語のスレでも同じ
2024/08/17(土) 22:26:04.77ID:Lg9B4E9Y
>>290
>他の言語のスレでも同じ
同じじゃないでしょ
君はvscodeがTypeScript製だからといって
バージョンアップで問題が発生したら
TypeScriptスレに書き込みするのかい?

Tauriでもバックエンドやプラグイン開発の話ならわかるんだけどさ
2024/08/17(土) 22:55:19.71ID:I1dGWckH
Rust言語自体の話以外は
もし誰からの反応が無くても当然だから
反応が来ることをアテにするな、という意味だぞ

一方でTauriはRustのクレイトの一つだから
ここで話題にすること自体は全く問題がない
version 2.0の人柱なんてレアな話に誰も反応がなくて当たり前
2024/08/17(土) 23:48:49.41ID:Isu8e7gT
WebでのWasmバイナリなら各利用者ブラウザによるリアルタイムのダウンロードとなりサイズを気にするけど、
WebブラウザやTauriアプリのバイナリのサイズはどうでもいいって立場。
2024/08/18(日) 01:26:09.33ID:c9N8aWZH
倍といっても所詮は 5MB 増しでしかないならたいしたことではないとは言えるが……。
でも益なく増えてるのなら改善が望ましいのは確かだし、益があるならどんな益なのか知っておきたくもあるよ。
2024/08/18(日) 02:36:20.00ID:BU3f2kLL
複おじに振り回されっ放しのバカばっか
2024/08/18(日) 08:12:37.69ID:7bUmcmUR
>>283
そのexeは解凍できないん?中にjs/ts要素と一緒にリンクライブラリが入っとるだろうからそれ比較すればと思った
2024/08/18(日) 13:27:09.96ID:gYLk4pIA
tauri って新しいので servo 使うようになるんじゃなかったっけ?
それでバイナリサイズ増えてるんじゃ?

servo 使うようになるのは tauri 自身のコアコンセプト否定してる感じがして謎いが。
2024/08/18(日) 14:43:03.93ID:tu42Sbmi
こいつ前からずっと1人でWebView推してるおじさんでしょ
変なのが居着いちゃったな
2024/08/18(日) 15:04:00.99ID:RAsFRw0P
tauriのスレはちゃんとあるからそっちいけば?
【Electron】ハイブリッドアプリ開発総合【Cordova】 [無断転載禁止]©2ch.net
https://mevius.5ch.net/test/read.cgi/tech/1498985597/
2024/08/18(日) 23:46:45.47ID:C/oeXKJM
Tauri自体はcrates.ioにもある普通のRustのcrateで普通にRustのコードを書いてcargoで開発するものだから
それらcrateやRustコードやcargoの話はここでやっても構わない
Rust以外の話はこのスレの対象外
多少の脱線に限れば他の話題と同様に許容範囲
2024/08/19(月) 00:46:11.66ID:40PoSJGp
許容範囲が広いなら、話題に反応しない自由も大きくなってしまう
すべての話題・情報をノーカットで処理すべきと思う人は
反応しない自由は容認できないだろう
知らんけど
2024/08/19(月) 03:37:53.96ID:fUo70iyi
「Rustは良い」の結論に結びつかない話題はスレチです
2024/08/19(月) 08:28:41.87ID:E6sjrlZi
君らは
僕が選んだ(rust)は凄い
でしょ?
iPhone絶対正義やってる人と一緒
2024/08/19(月) 08:33:51.85ID:QEF3ueHi
>>303
個人的にはZig至上派でRustはC++よりマシという思いでやってる
305デフォルトの名無しさん
垢版 |
2024/08/19(月) 11:20:06.32ID:2cTqvZHP
Xで、Hideyuki Tanakaは、Rust信者の典型的な説を言ってると思うけど、
ほとんど同意できない。
2024/08/19(月) 11:57:13.33ID:40PoSJGp
無課金という選択がすごい
二刀流でも三刀流でもできるのは課金しないからだ
有限のリソースがといって宗教を一つしか選べない人達が戦争を始める
307デフォルトの名無しさん
垢版 |
2024/08/19(月) 12:14:50.01ID:BR0GvBMw
Rustはすごい
だからRustスレにいる俺はすごい
俺が知らない話題がRustスレにあると自分がすごくない気がするから許せない
2024/08/19(月) 15:34:27.05ID:sXHwNQud
RustよりZigのほうがすごい
2024/08/19(月) 16:46:33.01ID:KiHLz2jZ
米国国防総省のDARPA、CからRustへのコード変換を自動化する「TRACTOR」プログラムを開始
https://atmarkit.itmedia.co.jp/ait/spv/2408/14/news045.html
2024/08/19(月) 17:48:38.35ID:5GtswNJ5
あ、zig要らなくなったな
2024/08/19(月) 18:09:59.20ID:CLLx5KNp
C/C++からRustへの変換こそ自然言語処理技術を使えばいいのに
2024/08/19(月) 18:18:10.95ID:fUo70iyi
プログラムって、計画とかそっちの意味のプログラムかい
313デフォルトの名無しさん
垢版 |
2024/08/19(月) 22:28:35.76ID:HWmXMBa7
>>304
1.0になるまで黙ってろ
314デフォルトの名無しさん
垢版 |
2024/08/19(月) 23:09:53.72ID:qGtdUYlI
Cがやるような低レイヤ側だったらZigの方がシンプルだと思う
自分は式や型の表現力の高さの点でRustが好きだけど、これが強みになるのってより上位のレイヤーな気がする
RustでFFI用のC互換のコードを書こうとするとRustの管理を回避するためのコードが必要で、それが煩雑になりがち (基本的にunsafeが必要だったり、オブジェクトをCに渡すために Box から into_raw するのが必要だったり)
2024/08/19(月) 23:37:07.40ID:53YDPjss
>>314
低レイヤも全てRustで書くことに支障はない
Cと連携する場合でもFFI部分はパターン化していてすぐ書けるから困らない
2024/08/19(月) 23:47:50.44ID:fihfH3vm
低レイヤと高レイヤを別言語にしたら接続箇所がいくらか煩雑になるが
全部 Rust にすれば低レイヤ部分は unsafe ばっかりで Rust の良さが活きてこない。
低レイヤで便利な言語は高レイヤでは抽象度の不足などで使い勝手が悪い。

全部が楽ってことはないので煩雑さをどこに持ってくるかの問題じゃないの。
ある程度は煩雑な部分があるのは仕方がないとして仕方ない部分を (快適とは言えずとも) 及第点に出来てれば十分に良い言語でしょ。
2024/08/19(月) 23:57:37.03ID:53YDPjss
>>316
unsafeばっかりになる、が妄想思い込み
318デフォルトの名無しさん
垢版 |
2024/08/20(火) 09:21:19.12ID:5ubxjraY
変なことやることになった時にはRustのアロケーター指定面倒でZigはその辺楽だなってなる
2024/08/20(火) 10:15:16.56ID:8nEEv7Ra
同一言語内で失敗例と成功例があるのは客観的事実だから
「言語を変えたら成功した」という因果関係は妄想と言われても仕方ない
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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