Rust part20

■ このスレッドは過去ログ倉庫に格納されています
2023/03/03(金) 00:45:28.73ID:vTVY069B
公式
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 part19
https://mevius.5ch.net/test/read.cgi/tech/1673926892/

ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.5ch.net/test/read.cgi/tech/1514107621/
2023/04/03(月) 12:04:38.11ID:GLvgK6Zq
組み込みかどうかと言うより
ミッションクリティカルかどうかと言ったほうが正確か
2023/04/03(月) 12:08:34.80ID:+ZHaYieR
同等以上に曖昧に思う。
2023/04/03(月) 12:26:19.63ID:NFGj33Dp
組み込みならFORTHだよね。
289デフォルトの名無しさん
垢版 |
2023/04/03(月) 15:05:13.27ID:KUJKPBk4
ミッションクリティカルの意味わかってないだろw
2023/04/03(月) 15:14:52.29ID:bhpxOZS2
javaですら使われるんだから場所によってはpythonもあるだろう
2023/04/03(月) 16:24:30.55ID:0x65F9Io
このスレ複製おじ来なくなって平和になったなw
2023/04/03(月) 17:14:33.32ID:XRTgFvZO
10年後くらいには組み込みの指すやつが10GHz・20GBくらいになってんだよ
2023/04/03(月) 22:15:51.09ID:OPvO6xnV
Python だって組み込みに使われるのはわかるよ。
でもそれをホスティングする環境は何で書くんだって話よ。
アプリケーション部分だけ書ければ良しというわけにもいかんだろう。 組み込みってのは。
294デフォルトの名無しさん
垢版 |
2023/04/03(月) 22:22:41.19ID:6LaoLj6b
組み込みの定義次第
2023/04/03(月) 22:46:10.84ID:uCVDtc7z
自分の中の組み込みはリアルタイムシステム
CかC++
2023/04/03(月) 23:08:31.70ID:NUuZ0KjY
>>290
javaですらというか、javaはもともと組込みを視野に入れて開発されたものだしな
2023/04/04(火) 12:59:01.65ID:9wA8JWJA
普通のWindowsPCを何かの筐体に入れればそれは組み込みだがそういう話じゃないよな
実装的には一般的なアプリと何も変わらないわけだし
2023/04/04(火) 19:20:19.03ID:WPLXkRn6
みんな、組み込みに食いつくね
連想するの分野がひとそれぞれなんだね
おいらは組み込みといったらファームウェアだな
2023/04/04(火) 20:28:06.15ID:ktWoV7jH
PICじゃなきゃ組み込みじゃないって感じなのかな?
数年前に関わった仕事じゃFPGAとARMが両方乗っかってて
OSも入ってるやつで測定データをCのソケットでUDP送信させたけどこれ組み込み?
2023/04/04(火) 20:50:26.77ID:vWHz0hKB
>>297
それも組み込みだがなんらかのデバイスの制御はするだろ。
しないってのならさすがに組み込みとは言わんと思うが……。
2023/04/04(火) 21:47:02.28ID:LgI/21ca
技術的には低レイヤーと称する方が適しているのだろうな。せいぜい軽量のRTOSあたりまで

>>300
汎用性に乏しい装置は原則組み込みじゃね
ゲームコンソールもどちらかと言えば組み込みだと思うし
デジタルサイネージとかも該当するだろう(ラズパイ使っている例もあるらしい)
2023/04/05(水) 02:16:43.52ID:SGxKhieo
>>301
steam deckがLinuxベースという話もあるので
ゲームコンソールが組み込みかどうか…

テレビもLinuxが入ってたりするしなあ
2023/04/05(水) 11:08:42.58ID:vYYfy7R4
>>302
Steam Deckは携帯ゲーム機の形をしているだけで任意のOSを使用できるのだからPCでしょ
>>301でいうゲームコンソールはCS機やAC機等のゲームを実行することしか想定していない装置のこと
テレビもどちらかと言えばゲームコンソールよりでは
2023/04/06(木) 10:45:28.99ID:E/e3rQLj
>>303
デバイスドライバやファームウェアをひとつも書いてないってことはなかろうし、
デバイスに固有の低レイヤプログラミングの部分は組み込みと言ってもいいんじゃないの。
2023/04/06(木) 11:27:07.02ID:k0Faa7D2
普通組み込み用途と言えばコンピュータ制御の電子機器のために使う用途やろな
・メモリなどのリソースが少ない環境でも使える
・応答時間などのタイミング制御のために実時間処理ができる
こういうのにRustが強いのは何となくわかる
コンパイル時に静的に解決できる範囲が広いからな
2023/04/06(木) 12:37:50.23ID:HSw9WEQy
全然違う話でごめん
以下のような処理がある時にf(**item)と参照外しを2回も必要とするのは違和感あるけどそういうもの?

let v: Vec<i32> = vec![1, 8, 4, 5, 9, 6, 3];
let valid_index_list: Vec<usize> = v
.iter()
.enumerate()
.filter(|(_, item)| f(**item))
.map(|(index, _)| index)
.collect();
307デフォルトの名無しさん
垢版 |
2023/04/06(木) 12:42:05.41ID:0BpFn4iz
組み込みシステムと組み込みプログラミングで微妙に境界線が異なる

例えばサーマルカメラ内蔵のAndroid端末を使った検温システムは組み込みシステムだけど
サーマルカメラのSDKを利用した検温アプリ開発は組み込みプログラミングとは呼ばないかもしれない
サーマルカメラのSDKを作る開発は組み込みプログラミングと呼べる
2023/04/06(木) 12:56:01.04ID:UmwXRZgB
確かにSoCや基板の事情がソフト側から見えてると
(memory mapped I/O直接叩くとか)
OSの有無によらず組み込みっぽい感じはするな
309デフォルトの名無しさん
垢版 |
2023/04/06(木) 15:14:50.96ID:f3OaQ0al
>>306
なんかオジっぽいコードだね
普通はDeref Coercionを活用する
その例ならfを&i32 -> boolにすれば明示的derefは不要
filter関数がownership取るのは変

ついでにfilter_mapでまとめて
.filter_map(|(index, item)| f(item).then_some(index))
シグニチャ変えられない特別な事情があるならパターンマッチで|(index, &item)|としてderefしておく
2023/04/06(木) 16:55:58.17ID:E/e3rQLj
>>306
値を返すイテレータも参照を返すイテレータもあるから
どちらでも不都合のない仕組みにしようとするとそうなるんじゃないの。
参照が二重になるのはごく普通のこと。

その二重の参照をどうやって剥がすかには選択肢があるけど。
2023/04/06(木) 18:19:32.48ID:ypjpS3Va
>>306 >>309
Vecのインデックスをフィルタリングしているだけだから
iter()もenumerate()もmap部分も不要
シンプルにこれだけでよい
(0..v.len())
.filter(|&index| f(v[index]))
.collect();
312デフォルトの名無しさん
垢版 |
2023/04/06(木) 18:50:13.90ID:uKOnYkHi
俺はそれやだな
313デフォルトの名無しさん
垢版 |
2023/04/06(木) 19:01:16.65ID:1W2y5liy
俺もそれはちょっと遠慮したい

でもまぁそこは論点じゃないんでしょ
iter().filter()は常に&&Tになるから**itemするのが一般的かどうかを聞いてるんだよね?
2023/04/06(木) 19:34:52.41ID:E/e3rQLj
>>311
イテレータでのアクセス (シーケンシャルアクセス) とランダムアクセスが混ざるのがなんか嫌な気持ちになる。
Vec や配列であることが分かっているときなら問題はないというか、
むしろ状況が整理された良いコードだとも思うんだけどなんか心理的な抵抗感が……。
2023/04/06(木) 21:02:27.27ID:cLuUm0Wb
またイテレータの話してる
2023/04/06(木) 22:26:13.61ID:Ejh1MMKT
>>313
into_iter()でT自体を回してるときにfilterで消費しないように&Tを使っているために
iter()で&Tを回してるときは&&Tになってしまうわけだな
3つの点
・&&Tを考える概念的なわかりにくさ
・記述と可読性
・最適化後の最終コード
それそれで不利があるのかどうか?
2023/04/08(土) 17:58:41.25ID:mPm1zhb4
イテレータおじさん.....。
2023/04/08(土) 23:26:42.03ID:JVh6Wuqn
多数の文字列をいくつでも追加で登録できて、
その登録した各文字列の参照(&str)を、
その登録オブジェクトが生きてる間は自由に使えるような機能のクレートありますか?

追加のみで削除機能がなければ安全に参照&strを返してその参照をずっと安全に使い続けられるインタフェースを提供できそうですが、
実現にはunsafeを使わざるを得ないため何かデファクトスタンダードなクレートがあるか知りたいです。
2023/04/09(日) 00:21:16.51ID:mvoikQEA
Vec<String>
2023/04/09(日) 00:32:20.15ID:optZAiB4
Vecは追加のために&mutを使うから&strを持ち続けられないか
321デフォルトの名無しさん
垢版 |
2023/04/09(日) 01:16:25.16ID:uCQZ544j
は?
2023/04/09(日) 01:36:27.91ID:o+9ttclI
もしかしてこういうこと?
let mut v = Vec::new();
v.push("first".to_string());
let first: &str = &v[0];
v.push("second".to_string());
let second: &str = &v[1];
println!("{first} and {second}");
コンパイルエラーだな
2023/04/09(日) 01:42:07.16ID:Xj6NS6Ie
文字列専用じゃないけどarena系の実装でいいのかな
typed_arena(https://docs.rs/typed-arena/latest/typed_arena/index.html)がよく使われてるみたい

use typed_arena::Arena;

fn main() {
let arena = Arena::new();
let a: &mut str = arena.alloc_str("abc");
let b: &mut str = arena.alloc_str("def");
let c: &str = arena.alloc_str("ghi");
println!("{a}, {b}, {c}"); // abc, def, ghi

a.make_ascii_uppercase();
b.make_ascii_uppercase();
let d: &str = arena.alloc_str("jkl");
println!("{a}, {b}, {c}, {d}"); // ABC, DEF, ghi, jkl
}
324デフォルトの名無しさん
垢版 |
2023/04/09(日) 01:56:50.49ID:awfxf9QU
だとしたらinterior mutabilityでやる話だね
2023/04/09(日) 02:19:43.49ID:fcL4nlHr
use string_cache::DefaultAtom;

fn main() {
let s1 = DefaultAtom::from("example");
let s2 = DefaultAtom::from("example");

assert_eq!(s1, s2);

let s1_ref: &str = &*s1;
let s2_ref: &str = &*s2;

assert_eq!(s1_ref, s2_ref);
}
2023/04/09(日) 02:43:31.70ID:vz6m7/QT
シンボルテーブルか
327デフォルトの名無しさん
垢版 |
2023/04/09(日) 16:31:56.46ID:CdUYcfdD
>>323,325
質問者はコレクションを求めてるんだろ
328デフォルトの名無しさん
垢版 |
2023/04/10(月) 08:37:09.69ID:DyZbTzV6
Rustのwebフレームワークって2023年現在どれがおすすめですか?
2023/04/10(月) 10:35:11.69ID:wa5pv4tn
そんなに数多くないと思うから10~20個くらい試して何が良かったか教えてよ

オススメ聞くってことはここで挙げられるようなやつ全部試して感想聞かせてくれるってことでしょ
決めるのに好みも入ってていいんだから
なんなら「名前が気にくわない」「アイコンがダサい」くらいの理由でもいい
2023/04/10(月) 10:45:58.73ID:yiM3eSrr
規模とか構成とかでも良い選択は違うのでなんとも言いにくいな。
比較的に万能で定番なものは actix, axum, rocket あたりだと思うが。
2023/04/10(月) 12:38:17.63ID:GqegRxcS
Tide 使っとけば間違いない
2023/04/10(月) 15:48:33.90ID:4HpjR3/Y
パフォーマンスより、単純明快なwebフレームワークが知りたいな
PythonならFlask的な
どうせDBがボトルネックになるし
333デフォルトの名無しさん
垢版 |
2023/04/10(月) 18:28:14.17ID:Mdv85xt7
そういうの自分で調べられない人はもう少しエコシステムが成熟してからRustを検討した方がいいよ
2023/04/10(月) 19:05:09.35ID:sUqOZltz
どうせ○○がボトルネックになるし

こういう発想は大事
細かいところにだけ着目してvtableのコストがどうのとか
クロック数でいくらどうのとか
そういう連中よりは遥かにセンスがある
2023/04/10(月) 19:20:23.61ID:yiM3eSrr
>>334
クラウドだとCPU時間やメモリに課金されるから
「ユーザの体感速度にほんど影響がないからいいや」とはならない。
スループットだけ見てればよい時代は終わった。

ローカルでちょっとした GUI がわりにする程度ならどうでもいいけど……。
2023/04/11(火) 23:57:13.30ID:+2ozf4Lx
ディスパッチの話で負けた負け犬が遠吠えこいてんのか
337デフォルトの名無しさん
垢版 |
2023/04/26(水) 20:19:48.59ID:WZHTU1Do
Rustに限った話じゃないけど非線形(条件分岐を少なからず含む)な関数のテスト条件って普通どうやって作るの?
例えばRGB888フォーマットの色1と色2を飽和加算合成する関数を作ったのでテストしたいとする
すべてのパターンをテストすれば確実だが2の24乗もあってあまり現実的ではない
最小値と最大値と線形から非線形に移行する付近のみテストするとか?
2023/04/26(水) 20:42:58.19ID:NF11/Xrv
境界付近をテストするので良いと思う。
網羅的にテストしたつもりでも実際の問題ってのはどうせ
想定してないところから出てくるもんだから事前に何もかも盛り込むのは無理。
問題が出たときにテストを追加して同じ問題をもう出さない (後退はしない) ようにして
徐々に良くしていくしかない。
339337
垢版 |
2023/04/29(土) 21:52:25.06ID:+xgAqXRk
>>338
あと追加するなら加算のテストくらいかな
0+1=1、1+1=0+C、1+0=1・・・ビット単位ならパターンはそこまで多くないし
ググっても具体的に何をテストすべきかみたいな解説はあまり出てこない気がする
2023/05/02(火) 10:56:16.58ID:j5a6+bQW
スレに人が来なくなったのはGWなのとchatGPTでPG需要減ってきたからか
341デフォルトの名無しさん
垢版 |
2023/05/02(火) 12:05:52.42ID:+0ZRIFR4
sudoとsuがRustで書き直される。メモリ安全性向上へ
https://news.yahoo.co.jp/articles/296d15d7c1f7190ff1646f4d52f8df8c56c0e132
2023/05/02(火) 12:09:31.43ID:XVCLDAkP
このままLinuxの公式言語になってしまうのだろうか?
それはそれでちょっと寂しい
2023/05/02(火) 12:15:20.08ID:GEufc0we
へぇ、Rustって知らないところで着実に市民権獲得し始めてるんやな
まぁ確かに“安全性”、“堅牢性”ってのは売りになるわな
2023/05/02(火) 12:21:25.01ID:xcMXGreF
とは言ってもパラダイムが違うものを組み合わせるのは
それはそれで色々としんどいから
新規プロジェクトからということにはなるわな。
あるいはモジュール単位で徐々に……といったところか。
2023/05/02(火) 13:10:44.65ID:SH4oCjNk
純粋に質問なのですが、Windowsだとユーザ権限プログラムから感知できない全画面確認画面(コード署名表示付き)を
手動クリックすることによって権限昇格するAPIやファイル実行オプションを用いるのですが、
Linuxのsudo、suはそういうOS提供APIの単純ラッパ以外の処理が必要なのですか?
2023/05/02(火) 14:14:52.25ID:kqtJfIHI
>>345さんの祖末なチソチソもっとよーく見たぃナ☆
>>345さん、またみんなの前でチソチソ出してくださいね☆
2023/05/02(火) 15:20:08.53ID:HqctS3p2
Qiitaで調べものをしていたらRustを広めたいというユーザーを
見かけたのですが実のあるRustの記事がありません

ここにいらっしゃるのですか?
2023/05/02(火) 16:34:54.41ID:IqyS7yAG
Rustはアマチュアがいじいじするだけの言語だから
349デフォルトの名無しさん
垢版 |
2023/05/02(火) 17:29:28.03ID:DSQza21A
Rustや情報科学みたいなものは、完全に自分の教養のためと思って勉強してるけど・・・・・
いつまで経っても実用の域に届かない
2023/05/02(火) 17:34:42.24ID:KHYt4fkx
R&D関係者と交流があるだけの人ってアマチュア?
351デフォルトの名無しさん
垢版 |
2023/05/02(火) 17:49:30.32ID:IqyS7yAG
アマチュアがあーでもないこーでもないと
持て余したヒマでいじくり回した結果
しょうもないポエムを生み出すだけ

この言語そのものというより
この言語を取り巻く状況はずっとこう
2023/05/02(火) 19:13:07.37ID:XhxCeHYa
Linux 6.3.1のtokeiしました

https://i.imgur.com/1xgblDP.png
2023/05/02(火) 19:48:58.54ID:TWDhbUOL
YouTube で有名な雑食系エンジニア・KENTA が、
初心者に推奨するキャリアパスは、Ruby on Rails → Go のみ

Rust, Elixir は普及のキャズムを超えなかった。
オワコン認定した言語は、Scala, PHP

米国年収でも、Rails, AWS Solution Architect が13万ドル

Ruby, Elixir : 9.3 万ドル
Go : 8.9
Rust : 8.7

多くの言語 : 6.5〜7

PHP : 5
Dart : 4.4

日本では、バックエンドの求人倍率が数倍で、
フロントが0.5倍と、10倍の開きがある。
フロントは供給過剰で、低価格競争になっている

欲しい人材は、Rails, Linux, Docker, AWS が出来る香具師。
つまり、ウェブサービスを作れる香具師

Railsは、作者のDHH が言うように、バックエンド技術者がフロントも兼ねるから、
バック/フロントの打ち合わせコストが掛からないのが強み

その代わり、あまりCSS を知らないので、デザイン性に欠ける。
Bootstrap, Tailwind などが多い

つまり、これが文系の低学歴でも、簡単に高収入を得られる方法。チート職業。
だから皆、月千円のKENTAの初心者向けRailsサロンへ入る。稼げるから
2023/05/02(火) 20:03:17.56ID:6g8Nsfp3
>>341,345
sudu-rsとsudo(original)のtokeiしました
LOCが違い過ぎて機能的に同等とは思えませんが誰か確認してください
https://i.imgur.com/wqUfNLQ.png
355デフォルトの名無しさん
垢版 |
2023/05/02(火) 22:59:03.14ID:3h/NlzQK
>>354
機能的に同等そうかどうかは
テストを比較すればいいよ
2023/05/03(水) 00:18:13.49ID:g1uPDP/x
>>355
なるほどテストを比較よろ
2023/05/03(水) 00:24:35.35ID:BA7Ot0nV
現時点のCurlからRustの跡形なくなってる

3年前のアナウンス
Memory Safe ‘curl’ for a More Secure Internet - Oct 9, 2020
https://www.memorysafety.org/blog/memory-safe-curl/

言及されてるhyper(-rs)がなくて、C実装になったc-hyper
https://github.com/curl/curl/blob/master/lib/c-hyper.c
Rustlsはそれらしきものが全くない
2023/05/03(水) 00:49:48.46ID:CZOik0F4
>>341
これ別にsudo(sudo.ws)やsu(GNU)がRustに移行しますって発表じゃなくて
GNU grepに対するripgrep的なプロジェクトってことで合ってます?
2023/05/03(水) 08:45:46.83ID:I87taHnB
>>357
HTTPバックエンドとして使えるって話だから元々本体にRustコードは入ってないと思うけど
この辺見ればわかるけど、hyperやrustlsは別途ビルドしてるよ
https://github.com/curl/curl/blob/master/.github/workflows/linux.yml
2023/05/03(水) 11:25:57.48ID:iEII6Ca5
もうChatGPTあるしRustの存在意義がほとんど無くなっちゃったね
361デフォルトの名無しさん
垢版 |
2023/05/03(水) 12:08:28.90ID:QeIlVi4X
>>360
どういう関係が?
362デフォルトの名無しさん
垢版 |
2023/05/03(水) 15:58:21.31ID:FU/0xIZ5
>>358
移行を目指して開発するということです
2023/05/03(水) 17:41:36.60ID:gBESz1Qj
>>360
Linuxをrustで書き直して

はい、できました
364デフォルトの名無しさん
垢版 |
2023/05/03(水) 20:37:19.00ID:C/1gxzck
数千トークンの単位でしかやり取りできないって知らないんだろうな
2023/05/05(金) 20:25:46.02ID:zl0JqMlo
この手のシステムプログラミング?できる言語って何から始めたら良いんですかね
いきなりRustから入ってもいいのかそれともC言語から始めるべきなのか

シェルスクリプトで作った自作ツールをバイナリ化して動作を早くしたいとかそれくらいしか今は用途ないんですけど
いやでも、既存のツールのソースが読めるようになるから難しくてもまずCをやるべきか…
2023/05/05(金) 20:44:06.81ID:ug2cMp38
>>365
隔離スレに帰れゴミ
2023/05/05(金) 21:21:06.18ID:zl0JqMlo
>>366
ええ…単にRustで検索してたどり着いて書き込んだだけなんだけど
368デフォルトの名無しさん
垢版 |
2023/05/05(金) 21:21:49.38ID:ZIYROKTz
>>365
そういう用途ならとりあえずはGoからはじめるといいよ
目的を実現するまでにかかる時間が5倍くらいは違うと思うから

シェルスクリプトも外部ツールをうまく利用してたら実質Cに近い速度で動いてる場合もあるからCやRustで自作したからといって速くなるとは限らないよ
369デフォルトの名無しさん
垢版 |
2023/05/05(金) 21:25:04.73ID:ZIYROKTz
Rustを学ぶために事前にCを学んだほうがいいかと言えば全くそんなことはない
2023/05/05(金) 21:46:33.98ID:zl0JqMlo
>>368,369
ありがとうございます

事前にCの知識が不要であれば、既存のツールのソースを読むのに便利くらいな感じなんですかね、Cは
自作スクリプトは最初からOSに入ってるコマンドを組み合わせる形で動いていて
なのでまあ多少早くなればいいなくらいで、後は趣味兼勉強で覚えたいと思ってます

GoについてはRustと双璧で名前が出てきますね
Rustの方が使われてる印象があったんでそっちを検討してたんですけど
GoについてもRustと違いを把握できる程度で調べて、どっちかで検討してみようと思います
2023/05/05(金) 23:01:41.02ID:6VYfhEYJ
>>370
システムプログラミングというのはシステム (OS やそれに近い層) のプログラミングを
想定したもので、システムのドキュメントでの説明やツールキットに C が使われていることはそれなりにある。
アプリケーション層でも C や C++ で書かれたライブラリと結合したいこともたまにはある。
(人気のあるライブラリなら Rust 用のラッパーライブラリが提供されていると思うが。)
そういうことをしたいのなら C を多少は読み書きできないとしんどいこともあるかもね。
そうでないなら C を扱える必要はない。

大きなコンポーネントを組み合わせる程度の使い方の場合は
シェルスクリプトを他の言語に置き換えても性能はほとんど変わらない。
実行時間のほとんどがそのコンポーネント内のコードの実行に費やされることが多いので
自分が書く部分の性能が少しばかり高性能でも全体の実行時間にはそれほど大きくは影響しない。
2023/05/05(金) 23:23:10.17ID:A/rFKldr
>>365
何らかの言語経験があるならいきなりRustで大丈夫だけど
C言語の基礎レベルの知識(ポインタ、スタックとヒープ、ヒープメモリ確保と解放)の有無の差を埋めておくのはよいかもね

>>370
GoはGC(ガベージコレクション)がある言語なのでどうしてもC/C++/Rustとは決定的な違いがあるね
例えばスクリプト言語の高速なライブラリを作るといったような速さや省メモリを追及するならC/C++/Rust
373デフォルトの名無しさん
垢版 |
2023/05/06(土) 04:59:19.62ID:cJf94Ar1
C++もGC使えるけどな
2023/05/06(土) 05:26:55.29ID:ZbAqT6nN
言語システムとしてGCを必須とする言語との区別がつかないアホか
2023/05/06(土) 06:16:27.47ID:6JUtkYO4
C++マネージ拡張
プログラミング言語
376デフォルトの名無しさん
垢版 |
2023/05/06(土) 06:21:14.86ID:cJf94Ar1
文字列は動的なアロケーションが必要な場合があるだろ?
じゃあ、文字列を動的配列に入れる場合どうなる?
コピーなどは動的配列のメンバで行われるだろ?
C++は、コンテナが使用するメモリーはGC、文字列のメモリー確保はマイアロケータ、なんてことが出来る
動的配列のメンバが文字列のメンバにマイアロケータを使わせるようになるってことだぞ
377デフォルトの名無しさん
垢版 |
2023/05/06(土) 06:22:08.86ID:cJf94Ar1
>>375
標準C++で使えるぞ
2023/05/06(土) 06:47:02.36ID:BGrqS5mo
GCが不可欠な言語とライブラリでGCする話は全く異なり関係ない
2023/05/08(月) 01:15:08.03ID:4H9Xfh5A
パーサジェネレータっていろいろあるけど今だと何が良いんだ?
パースターゲットはgas風のアセンブラリスト。取り扱いは今風な方が嬉しい
2023/05/08(月) 02:27:34.26ID:6qkGyJAY
文法にも種類があって文法と解析アルゴリズムの組み合わせ次第では定義不可能なこともある。
具体的な文法を検証しないとどれを使うのが妥当かは言えない。
2023/05/08(月) 06:50:07.08ID:4H9Xfh5A
>>380
gas系のIA-32/AMD64アセンブラリスト
gccやclang等が吐くものを想定している
2023/05/08(月) 08:35:46.67ID:Kh0HUP9F
nomでいいんじゃないかな
2023/05/08(月) 10:53:50.62ID:6qkGyJAY
gas の文法なら最も素朴な文法カテゴリである LL 文法の範疇に収まるはずなので
PEG 系のパーサコンビネータライブラリが適していると思う。

でも LL 文法は再帰下降で書いてもたいした手間ではないので
凝ったツール (またはライブラリ) を導入しても劇的に楽になるってほどでもない。
コードの見通しが良くはなるかなぁ……。
2023/05/08(月) 20:28:58.82ID:4H9Xfh5A
>>383
ググるとpegってクレートが引っかかるけどこれでいいのだろうか
というかgas系の文でもISAによって使えないパーサジェネレータとかあるのかな
2023/05/12(金) 21:22:48.00ID:rQCSntAC
わび、さび
が分かる日本人↓
2023/05/13(土) 06:51:26.85ID:7jqHwrc+
滑ってるぞ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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