Rust part10

■ このスレッドは過去ログ倉庫に格納されています
2021/04/02(金) 21:38:04.11ID:L7IeSfpL
Mozilla発のRust言語のスレ

公式
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 part9
https://mevius.5ch.net/test/read.cgi/tech/1598112455/
2021/04/06(火) 02:13:12.02ID:/NFP4YRd
そういう人は低レイヤーを触るのがそもそも間違ってる。
2021/04/06(火) 02:33:17.68ID:G1ho10ZT
まともなマニュアルすらないからな。魔境
2021/04/06(火) 04:24:25.20ID:BW0cQchg
>>15
独学するしかないと思ってた
2021/04/06(火) 09:55:26.42ID:Jj+MMoYg
cmakeやmesonやIDEの支援があると言ってもやはり敷居は高いわな

だがrust使うにせよC/C++のライブラリ使ったりドキュメント読む羽目になるのでやはりある程度相互運用の知識は必要
2021/04/06(火) 11:13:42.73ID:gf2H4NQV
オープンソースの makefile は無意味なごみが集まってるから読みにくいだけ。
特に gnu makeがおかしい。
gnu 系はヘッダファイルもソース本体も汚い事が多い。
2021/04/06(火) 12:13:30.74ID:cPUJlmRG
ここにはC++使いしかいないのか
2021/04/06(火) 12:16:43.42ID:jsUZfCa/
その類のmakefileはautoconfとautomakeで自動生成されるもので、人間が読むものじゃないでしょ
2021/04/06(火) 12:28:15.32ID:wB2vBd3T
C++03の地獄を見てきた者達だ
面構えが違う
2021/04/06(火) 16:42:56.60ID:23z+dMzq
Rust の世界だけを考えるならビルドプロセスは Cargo に書いておけばそれで OK だけどね。
全て Rust だけでは書けない場合には従来のツールチェインに更に Cargo が加わって余計にややこしくなってるとも言える。
https://xkcd.com/927/

ツールが汚いのは現実が汚いからだよ。
汚い現実から目をそらして綺麗なルールの中に閉じこもっても、
汚い現実が消えてなくなるわけじゃない。

Makefile が不愉快なら Makefile を使わないプロジェクトを増やすのを頑張るこったな。
2021/04/06(火) 17:35:44.74ID:EMKAWWjR
rustだけのプロジェクトでもcargo-xtaskを使ってたりするからcargoだけですべてOKかというと微妙だけどね
タスクランナーやビルドのポストプロセスなんかのサポートって予定されてるの?
2021/04/06(火) 18:23:14.98ID:dIxoLwXV
Rust版makeみたいなツール見かけた気がする
2021/04/06(火) 19:12:35.86ID:i3cN7eS9
>>26
https://github.com/sagiegurari/cargo-make
2021/04/06(火) 23:23:49.86ID:cPUJlmRG
そういうのあるの知ってるけどcargo本体に取り込む予定があるかが気になってる
グローバルにその手のツールインストールするとバージョン固定が難しいので
npmみたいにlocal installできるならそれでも良いけど
2021/04/07(水) 09:04:42.45ID:rL66qkG6
対応は結構してるわな。ただここの連中はこれくらいもできなさげ。
ttps://qiita.com/mutuya/items/f00a5b99a3f047dc3cb3
2021/04/07(水) 13:04:30.43ID:zl6LVrRO
>>27
使ってる人いる?
2021/04/07(水) 13:14:18.37ID:nIst5pc0
>>30
マルチプラットフォームで単純なmakeより複雑なことをしたいときには使っている。ただ大抵の場合makeでいいんじゃないかとも思う。
2021/04/07(水) 13:18:48.25ID:uzth3iNv
Rust in the Android platform
https://security.googleblog.com/2021/04/rust-in-android-platform.html
2021/04/07(水) 14:06:22.69ID:g0cTo5ct
>>22
ところがそのautoconf系そのものがそもそも汚い。
そして、autoというのは真っ赤な嘘であることが知られている。
2021/04/07(水) 14:24:24.61ID:zl6LVrRO
たまにCMakeが無いとcargo installがこけるツールがあってげんなりするわ
35デフォルトの名無しさん
垢版 |
2021/04/07(水) 15:05:49.86ID:JRewXnwY
m4マクロで書くというのはそろそろやめにしてもらいたい
2021/04/07(水) 18:53:05.80ID:4oC9i5VP
>>30
既定のタスクをそのまま使う分には便利だけど、ちょっとアレンジしようとするとめんどくさかったという感想。
単に慣れの問題かもだが、gnu makeのMakefile中でcargo叩く方がやりやすかった。
2021/04/08(木) 16:35:24.79ID:1ecqYbtl
>>32

Rust言語でAndroidはより強固・安全に 〜GoogleがOS開発への導入を進める
https://forest.watch.impress.co.jp/docs/news/1317183.html
2021/04/08(木) 16:40:19.95ID:dggq93E7
Rustバイナリにユーザー名が埋め込まれる脆弱性が発見された
2021/04/08(木) 19:01:45.52ID:gM5Az3ay
スーパーでよく見かける生産者表示だ、気にするな
2021/04/08(木) 19:25:11.32ID:Y7HoyqEo
ユーザー名といかコンパイル時のソースのフルパスね
ホームディレクトリ配下にソースがあるならログインユーザー名が含まれる
あと発見されたのは最近ではなかったはず
2021/04/08(木) 20:20:07.26ID:mAsGX/mS
それを消すためのオプションは数年前から付いてて
そのオプションがうまく効かないケースがあるってバグが修正中なはず
最近あったのは単にその話を記事に書いた人がいるってだけ
2021/04/08(木) 20:20:24.34ID:bT2+gYi+
ディレクトリ名にマイナンバーを入れてる人がいたらどうすんだまったく
2021/04/08(木) 20:46:41.37ID:KJ+7YtJl
どんな間抜けだよ
2021/04/08(木) 21:41:22.53ID:2f4Y47iQ
ディレクトリ名につい「クソプロジェクト」とか入れてるやつはいるだろ
2021/04/09(金) 01:29:12.23ID:q4HnPycb
ていうかログインユーザー名に実名いれるとかバカなんじゃないか
2021/04/09(金) 01:29:59.12ID:q4HnPycb
>>44
たしかに・・それに近いことは・・ある。
2021/04/09(金) 11:49:57.87ID:GRSPIdCN
fuck_you_cplusplus とか普通にありそう
2021/04/09(金) 15:11:34.90ID:6eEbkgDq
どこのモジラだよ。
2021/04/09(金) 20:07:51.03ID:+qIWqkLA
Linusじゃないの
2021/04/10(土) 00:22:28.46ID:mUxV1BIo
Linusが吠えた! ─中指立てて「NVIDIAは世界最悪の企業」
https://gihyo.jp/admin/clip/01/linux_dt/201206/18

それはそうとして、Rustの(Goもだが)「..」が
begin〜lastの意味ではなくて
begin〜last+1なのは
コメントに「arr[0..3]」とか書きたい場合に地味に困る
2021/04/10(土) 02:24:29.60ID:0NXaZP8I
>>42
ネタにマジレスするけどマイナンバーはただの概念で
国民識別番号は国のサーバーに有る。

>>50
last+1って何? ..は[begin, last)だぞ。
左閉右開半開区間はPLじゃ一般的だけど。
2021/04/10(土) 03:35:58.01ID:mUxV1BIo
>>51
begin〜last すわなち [begin, last] をRustで書いたら
begin..last+1
になる、という意味やったサーセン、

しかしコメント内に現れた「a..b」は、Rust式に[a, b)と解釈すべきなのか、
それとも伝統的な[a, b]解釈とすべきなのか
というのがそこはかとなく疑問が……
2021/04/10(土) 03:38:59.03ID:mUxV1BIo
同じことは「=」と「==」(代入と等値)の使い分けを
コメント内にまで持ち込むべきかどうかという意味で
昔から迷う感じだったものがRust(やGo)の「..」のせいで悩みの種が増えたは!
2021/04/10(土) 10:43:41.15ID:+2v3HD7B
>>52
Rustコード中ではbegin..=lastって書いたほうがいい(>=rust-1.26.0)
知ってたらすまん

>>53
Rubyもそうだぞ
2021/04/10(土) 10:51:20.63ID:gEDOL+ak
pythonもじゃないか?
C系のfor(int i=0;i<5;i++)の終了条件に合わせてあるのかと思う
2021/04/10(土) 11:33:17.54ID:0qKWjqEq
最後の要素を意味するときは last で、
最後の要素のひとつ後を指すときは end を使う習慣があると
どこかで見た覚えがあるんだけど、
別の言語だったかもしれないしどこかの数学分野だったかもしれない。
うろおぼえでスマソ
2021/04/10(土) 11:52:10.96ID:K51XBEHT
既存の言語でも a..b が [a,b] になるもの、[a,b) になるものが混在してたこと、
また、見た目で意味が明確にわかることから a..b と a..=b を採用したという経緯だった気がする
2021/04/10(土) 16:42:23.36ID:l4RzKTvO
https://doc.rust-lang.org/book/ch02-00-guessing-game-tutorial.html
の一番最後のコードをコピペしてもエラーで動かないのですが
どこをなおしたらいいのでしょうか?
2021/04/10(土) 17:11:01.23ID:gEDOL+ak
cargo. tomlそのままってオチかな?
2021/04/10(土) 17:13:25.76ID:l4RzKTvO
randの追加はしております
2021/04/10(土) 17:23:47.25ID:+2v3HD7B
エラーメッセージを
2021/04/10(土) 17:24:38.49ID:gEDOL+ak
エラーそのまま貼らないとわからないわ
と言うか頭からやりなよ
2021/04/10(土) 17:50:35.32ID:gEDOL+ak
せっかく日本語訳だってあるわけだし
https://doc.rust-jp.rs/book-ja/ch02-00-guessing-game-tutorial.html
2021/04/10(土) 21:25:06.44ID:l4RzKTvO
あ、すいません
randのバージョンを最新版のものにしてました
チュートリアルで指定されているバージョンにしたら動きました
失礼しました
2021/04/10(土) 21:28:15.45ID:ugs90wL2
乱数なんて超基本的なライブラリが
コンパイル通らないぐらいのAPI変更を簡単にやってしまうなんて大丈夫なのかこの言語
2021/04/10(土) 21:58:15.68ID:gEDOL+ak
この場合は言語の責任でもないしそのためのcargoだし
2021/04/10(土) 22:07:11.12ID:gEDOL+ak
でもせっかくこういう体験したのであればソースの方を直すのも正しき甲殻類な気がするな
2021/04/10(土) 22:55:00.58ID:DbIYjEaQ
最近使ってないけど
randってなんか使いにくいAPIだった気がする
2021/04/11(日) 01:46:09.52ID:+yU+1pdE
最近マシになってきた
2021/04/11(日) 03:28:20.09ID:FNN81f5r
マシにする為だろうが一度決めたAPIは変えない
それがC/C++界の掟じゃないのか?
2021/04/11(日) 08:22:28.91ID:/Boh3f8b
絶対に変えないようにした結果かえってひどいことになってるイメージ
2021/04/11(日) 08:57:50.42ID:SN158GXT
普通は破壊的仕様変更のときはメジャーバージョン変えそうなもんだがバージョン0だからな
2021/04/11(日) 09:07:58.37ID:QZzlCmlR
バージョン0のうちは破壊的な変更もし放題ということか
2021/04/11(日) 09:12:29.26ID:SN158GXT
そいや非推奨や廃止の警告出せたっけ?
2021/04/11(日) 10:02:11.52ID:8BAcJ5Wr
>>74
deprecatedアトリビュートで出せるよ
2021/04/11(日) 10:25:10.63ID:SN158GXT
Microsoftがプログラミング言語「Rust」への支援を強化
https://news.yahoo.co.jp/articles/d9e8b5acb96920789bb4364951481f074bfd93d8

visual rustとか出さないでよね…

>>75
だよねえ
どのバージョンで変えるか警告はするよねえ
2021/04/11(日) 10:47:22.32ID:SN158GXT
んでバージョン指定変えてみたら

get_rangeの引数が最小、最大+1の2つから最小..最大+1の範囲リテラルに変わったのね

カンマを..に一ヵ所変えるだけだったから修正自体は対したことなかったけどオーバロードがあればもっと緩やかな改変が出来るのだろうか?
ゼロコスト抽象化の方針上仕方ないのだろうか?
2021/04/11(日) 11:24:02.64ID:FNN81f5r
>>77
そんなしょうもない変更の為に互換性破壊したのか
2021/04/11(日) 11:29:55.74ID:duIaxYyg
>>78
..= が使えるようになったとあるのでインターフェースの改善ではあるのでは
あと破壊的変更はこれだけではない
https://rust-random.github.io/book/update-0.8.html
2021/04/11(日) 12:27:09.74ID:SN158GXT
マイナーバージョンが上がるのでも結構変わると言うことか
81デフォルトの名無しさん
垢版 |
2021/04/11(日) 13:05:02.83ID:/JadX22/
バージョン0のうちはね
2021/04/11(日) 13:15:29.70ID:SN158GXT
誰かも言ってたけどこう言うのは標準ライブラリで整備してほしい所だあな
2021/04/11(日) 13:43:12.49ID:4rSwKpry
乱数は用途によってアルゴリズム使い分けにゃならんからなぁ
Cのrandはまぁ使えないとしてC++のrandomまで行くと重い
2021/04/11(日) 14:40:26.89ID:duIaxYyg
randの設計が安定しない現状でstdに入れるにしても
かなり限定されたサブセットしか入れられないのでは
2021/04/11(日) 17:41:37.63ID:aRgjPq06
それで十分だろ。
メルセンヌツイスターとか必要な場合は各々入れたら良い。
手軽な乱数を必要とする場面は割とある。
2021/04/11(日) 21:41:09.50ID:LXnW0jT4
メルセンヌ・ツイスタ、MT19937 を使っているのは、Ruby ぐらい

他の言語は、低品質
2021/04/11(日) 22:30:00.44ID:2GAqbccY
一瞬信じかけたけど、pythonもboostもmtだったわ
2021/04/11(日) 22:41:39.90ID:FNN81f5r
何でそんなとこで嘘つくん?
2021/04/11(日) 23:24:19.82ID:REr5r+Uo
>>85
直近でThreadRngやRngも破壊的変更されてて
乱数生成器の種類を充実させるとかそういうレベルにすら達してないのよ
90デフォルトの名無しさん
垢版 |
2021/04/12(月) 16:58:50.31ID:JNYj24al
一部のプログラミング言語では、デフォルトの疑似乱数生成器としてメルセンヌ・ツイスタが
標準ライブラリに取り入れられている。そのような言語の例として、 Python,[2][3] Ruby,[4]
R,[5] PHP,[6] MATLAB, C++[7](C++11から) がある。
2021/04/12(月) 19:41:31.46ID:bbHno7r0
よそはよそ!うちはうち!
2021/04/12(月) 21:18:15.82ID:z80SpJNy
線形合同が、あまりに低品質
2021/04/12(月) 21:49:55.90ID:b3c5oHjh
オライリー調査で明らかに--Go、Rust、Ruby、Dartに関心高まる - ZDNet Japan

https://japan.zdnet.com/article/35169143/
2021/04/12(月) 22:02:51.56ID:mno1Imjq
fn main() {
let n = 100;

println!("{}", type_of(n));
}

これを実行すると
E0425: cannot find function `type_of` in this scope not found in this scope
になるのですがtype_ofは使えないのでしょうか?

rustc -V
1.51.0です
2021/04/12(月) 22:08:31.70ID:mno1Imjq
すいません
とほほのRust入門見て解決しました
type_ofを関数として定義しないとダメなんですね

https://docs.rs/typed/1.0.0/typed/fn.type_of.html
にページがあったので組み込み関数があるものだと思いこんでたら
そういうものは存在しなくて,type_ofの関数を定義しないとダメだったようです

kindleで入門書を購入したのですがそこが省略されておりはまりました
失礼しました
2021/04/12(月) 22:40:04.94ID:J2Rjxost
乱数ってxorshiftとかxoroshiroもあるわけで
まぁアルゴリズム固定は難しいでしょう
2021/04/12(月) 23:08:15.49ID:/+zeTQQu
no_std環境も考えるともし一つ選ぶならMTよりxorshiftかなぁ。Rustの方針に合わないから入ることはないだろうけど。
2021/04/13(火) 00:51:04.66ID:zVaLotRH
APIをどうするかどこまでリッチにするかとかも難しいんだろ
2021/04/13(火) 01:57:46.80ID:dtk27dGR
xoroshiro1024がないんだよね。

>>95
```shell
rustup doc --std
```
2021/04/15(木) 21:01:10.98ID:aIjUzI+d
パニックお断り―Linus,"Rust for Linux"の盛り上がりに釘を刺す
https://gihyo.jp/admin/clip/01/linux_dt/202104/15
2021/04/15(木) 21:13:33.74ID:aIjUzI+d
JavaScript/TypeScriptランタイム環境「Deno 1.9」がリリース、パフォーマンス向上に寄与する機能追加など
https://codezine.jp/article/detail/13970
2021/04/16(金) 04:30:01.56ID:h4psCBcA
>>100
メモリの確保に失敗したくらいでpanicはしないが
alloc::alloc::Allocatorの一部メソッドはpanicするから
no_core上にpanicしないアロケータ実装すればよさそう。

コンパイル遅いのはキャッシュするしかない。
2021/04/16(金) 09:28:25.44ID:eEnfPPGg
結局kernelやるならunsafeつけまくりにしかならんだろ。
そうするとなぜrustで?という事になる。
2021/04/16(金) 09:50:50.04ID:MkjaOpjL
>>102
その「panicしないアロケータ」を使った Vec やらなんやら全部実装しなおさないといけなくならない?
2021/04/16(金) 18:31:00.46ID:7IMcJQmu
>>104
といっても変えるのはnewとかくらいで大半の実装はそのままもってくればいいんじゃない?
まあパッチ投げてる人もそこは作業量多いとは言ってるけど。
2021/04/16(金) 18:54:38.72ID:GwffY4ld
>>104
Vec等のコンテナにはtry_reserveとかのメモリ割り当て失敗でエラーにする関数用意されているから
メモリ割り当ての失敗だけが問題ならliballocの使い方を変えるだけでよいのでは
他にpanic要因あるならだめだけど
ちなみにnewはメモリ割り当てしないから変更不要
2021/04/16(金) 21:12:31.63ID:eEnfPPGg
ある種の「コンテキストに対するunsafe」をつけて回らなきゃ無理。
でもってそれはmoonshotだって言ってるわな。
https://lkml.org/lkml/2021/4/14/1140
2021/04/16(金) 21:47:54.90ID:GwffY4ld
特定の関数が割り込みのコンテキストから呼び出されたときにコンパイルエラーにすることは
今の言語機能では不可能という話か
2021/04/16(金) 23:21:39.03ID:Xc/jdFUF
>>107
role orientedな言語でコンパイラが特別扱いする
コンテキストを指定できれば実現できる、
ここまで考えてだからmoonshotなのかと。
2021/04/16(金) 23:46:26.48ID:Kk/3g/Ul
Cでも出来てないことを要求してどうすんの
2021/04/17(土) 00:54:40.80ID:r+Flv24K
知らんがな。どうしてもrustでkernel作りたいってやつに言えや。
2021/04/17(土) 02:30:05.79ID:V2rXjiTW
Linux のカーネルはカーネルとは言ってもかなり巨大なので
現状の Rust でも採用可能な箇所もあるんでないの。
知らんけど。
2021/04/17(土) 08:49:33.19ID:r+Flv24K
>>112
だからその考えでドライバーならということで始めたら上記の問題が出てきたってところだよ。
何周遅れてんだよ。
2021/04/17(土) 09:05:35.37ID:dMPv+0ET
グーグル、Linuxカーネル開発における「Rust」採用の動きをサポートする考え
https://japan.zdnet.com/article/35169455/

利用が進めば問題点も見えてくるし何らかの対策は追加されるだろうな
2021/04/17(土) 09:33:32.53ID:tTsG+vVF
linusすごいな
Rust関わってる人全員子供扱いかよ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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