Rust Part6

1デフォルトの名無しさん2018/07/28(土) 03:04:38.63ID:kAX50nYD

2302262018/09/12(水) 03:38:36.44ID:SKJk4QVS
んーん、なるほど。
Rustには現状、スタックを伸長するalloca相当がないから件の場合、固定配列を求める事は出来ないってことですかね。

231デフォルトの名無しさん2018/09/12(水) 19:11:41.82ID:VZx7VRPz
cloneていつ付けてる?
不用意にcloneするのを避けたくて最小限にしていたんだけどテスト書くとき辛い
derefでcloneされるのはcopyついているやつだけ?

232デフォルトの名無しさん2018/09/12(水) 20:48:13.21ID:SMBzO3VC
テストの時辛いってのは
↓のアトリビュートじゃ解決できないの?

#[cfg_attr(test, derive(Clone))]

233デフォルトの名無しさん2018/09/12(水) 20:56:43.30ID:VZx7VRPz
omg
それでいきますわ!ありがとう!

234デフォルトの名無しさん2018/09/12(水) 22:49:53.02ID:b/qs2bwP
>>224
> 型推論できなくする
できるよ。
rust by exampleを例にすると
ttps://play.rust-lang.org/?gist=3cbef33631cbed2a2f0dce6439da4942&version=stable&mode=debug&edition=2015

上記の`i32::from_str`や`<i32 as std::str::FromStr>::from_str`のi32を見て推論してる。
ただのstd::str::FromStrでは推論できないってエラーになる。

235デフォルトの名無しさん2018/09/13(木) 18:02:19.58ID:k7xTaVQM
低コストで探索できるらしいB+木ってなんぞや。ググるといっぱい出てくるがどいつもこいつも抽象的
「で、それがどう活用できるのか?」と言う疑問が解決しない
もちろんRustでコーディングする予定

236デフォルトの名無しさん2018/09/13(木) 20:57:57.27ID:uqZEQXfr
>>235
てけとーにググってきたやつ
https://christina04.hatenablog.com/entry/2017/05/17/190000

で、B+ツリーはリーフノード間にリンクがある構造。

リンクがあると何が嬉しいかというと、
データベースで値の範囲で検索する際、先頭が見つかればリンクをたどってレコードが抽出できる。一例として。

237デフォルトの名無しさん2018/09/13(木) 21:29:20.76ID:IjhCAeem
B木とそのバリエーションは、ディスクのように一定の大きさを持ったブロック単位で読み書きする
記憶装置上に置くのに適した木構造。
そういう使い方をしないんだったら効率が悪い木構造でしかない。

2382352018/09/13(木) 22:11:03.43ID:bNNEFAck
ありがとう

>>236
そのような説明はいっぱい出てくるんですがそれを実用へ落とし込むのに必要なピースがわかりません
データベースやファイルシステムを作れる人ならその説明で十分なのだろうと思いますが
自分はそのような経験がないので「ファイルシステム」や「B+木」等のキーワードからその不足分にたどり
着けないでいます

>>237
まさしくその用途を考えています
・大容量のボリュームを扱う (数百GB〜TB)
・ファイルをたくさん入れる (万〜)
・ファイルの中身へのアクセスコストが低い
・充填率に優れる
・フラッシュメモリベースのメディアで使用する
みたいなファイルシステムを作れないかなーと。個人が扱うファイルシステムだとFAT32あたりがよく使われると思いますが
そろそろ最大ボリュームの上限を突破しそうだし、ディレクトリの探索が容易じゃないし(特にLFN使用時)
充填率も良いとは言えないしと、いろいろ課題が多いのでいっそ俺ファイルシステムを作ろうかと

239デフォルトの名無しさん2018/09/13(木) 22:24:39.91ID:IjhCAeem
B木の実装は、共立出版の「ファイル構造」という本が詳細に分かりやすく説明されていてよかった。
残念ながらもう絶版らしいが。

240デフォルトの名無しさん2018/09/13(木) 23:23:13.30ID:pq1/pryD
bit別冊は大部処分したけど似た本はもう無いと判断して捨てなかった一冊

今ファイルシステムの勉強しようと思ったらLinuxや*BSDのソースコードよむぐらいしか無さそう

241デフォルトの名無しさん2018/09/14(金) 00:34:41.33ID:6kvA3LxK
>>239
英語版ならまだあるようだし、pdfでも見れるな。

242デフォルトの名無しさん2018/09/14(金) 11:13:17.17ID:hSQdDwhc
1.29.0来たね

243デフォルトの名無しさん2018/09/14(金) 17:04:14.02ID:zZtMiOUI
来たー

2442352018/09/14(金) 22:55:36.33ID:L0IQQp+4
ありがとう

>>239-241
尼のマケプレの値段ヤバイですね。原書?のPDFは入手できたので見てみます

>今ファイルシステムの勉強しようと思ったらLinuxや*BSDのソースコードよむぐらいしか無さそう
うへぇ。ファイルシステムドライバの仕様がどうなっているのかを理解した上で、ジャーナリングや
スナップショットなどの付加機能を分離しつつ読む必要がありそう
オープンソースといえどもこの辺の情報はお世辞にも豊富ではないのもつらいところです

245デフォルトの名無しさん2018/09/14(金) 23:38:15.74ID:SIPw8V9s
まあ読むならext3ぐらいからじゃないかな?
losetupやbrdで小規模なデバイス上にmkfsしてhexdump使って媒体構造見るとか
system tapやblktraceで処理やアクセス箇所見るとか
crashでカレントプロセス覗くとか
printk仕込んで処理フロー確認するとか

昔勉強したけど他に何やったかもう覚えてないや

246デフォルトの名無しさん2018/09/14(金) 23:52:28.71ID:KYDDV16J
まさかこんなところで共立出版というガチな名前を聞くとは思わなかった。
ねねっちがいるのかこのスレには。最近Rと統計ばっかだよねあそこ。

ところでファイル構造の古書店の通販見つけたけど長すぎてurl貼れない。

247デフォルトの名無しさん2018/09/15(土) 00:11:05.25ID:UUtHx4qg
共立出版って大学数学やら物理やらの教科書としてはまあまあ使われてるんじゃない?

248デフォルトの名無しさん2018/09/15(土) 00:35:58.43ID:DqLr8CXZ
テキストとワインバーグ本とすべての人のためのJavaプログラミングのところだね。

249デフォルトの名無しさん2018/09/15(土) 03:08:49.57ID:aty0PGwQ
>>247
共立出版で情報系の教科書としては次の2つのシリーズは好著が多い良いシリーズだ
・情報数学講座
・アルゴリズムサイエンスシリーズ

あと、共立出版でプログラミングの本と言えばとっくに時代遅れになっているが
カーニハン&リッチーの『プログラミング言語C』は外せない
恐らくこの訳書は初版と第2版とを合わせると、共立出版の情報系の書籍の中で圧倒的な部数を稼いだはず

それ以外にもカーニハン本の翻訳を日本で最初に出したのは共立出版だ
『プログラム書法』、『ソフトウェア作法』、『プログラミング作法』とね

今の若い人たちは存在していたことすら知らないだろうけど、共立出版は bit という月刊誌を出していた
これはB5版のころはソフトウェア技術者にとっての教養雑誌で、理論的な話題の記事も載せていたし
チューリング賞の受賞記念講演の翻訳も毎年載せていた

上に名前が出てた『ファイル構造』は元は bit誌の別冊か臨時増刊として出版されたものが
需要が多かったので増刷を機に単行本化されたものだ

だが部数が徐々に減ってきたのをテコ入れとばかりに編集長が変わって、版型をB5版からA4版に変え
記事も教養的なのから実用的なもの中心に変えてしまったら、昔からの読者の多くが離れて
急激に廃刊(建前上は休刊)に追い込まれた

bit誌の廃刊以降、共立出版の情報科学系の書籍の出版点数はかなり減少したような印象がある
現在の共立出版は数学書の出版に特に力を入れているみたいだね

250デフォルトの名無しさん2018/09/15(土) 08:36:15.98ID:h1bufCaZ
bit本誌、いまだに捨てられなくて本棚1段占領している。
ユニマガは引っ越しの時に全部捨てちゃったが。

251デフォルトの名無しさん2018/09/16(日) 01:33:00.78ID:w5/Hy2b1
rustの複数行文字列って空白消されちゃうの?

https://stackoverflow.com/questions/29483365/what-is-the-syntax-for-a-multiline-string-literal

252デフォルトの名無しさん2018/09/17(月) 00:20:05.94ID:XaZEKwwx
>>251
そんな話してない

253デフォルトの名無しさん2018/09/17(月) 20:15:25.23ID:aiBl5TGk
ここで質問しても許されるのでしょうか?ダメそうなら、申し訳ないです。
S式を使って遊ぼうとしてRustで見様見真似で書こうとしたんですが、コンパイルすらできません…。
ヘッタクソなコードで恐縮ですが、以下の52行目で「`s` does not live long enough」と怒られます。
https://pastebin.com/94ZPh2dL

まず、's'がスタックに確保されていて、parseから返った先で(つまり、スタックが解放されたあとで)
sを使う可能性があるから駄目だと言っているという認識ですが、正しいのでしょうか。
また、どのように対処すればよろしいでしょうか。

たぶん、根本的なところから理解できていないのだと思いますが、ご教授お願いいたします。

254デフォルトの名無しさん2018/09/17(月) 22:18:18.83ID:faCDAGdL
Nodeがsへの参照を持っているのにsが解放されちゃうからじゃないかなあ

255デフォルトの名無しさん2018/09/17(月) 22:22:00.90ID:faCDAGdL
みたかんじsymbolを&strじゃなくてStringにしてsをmoveさせればよいと思うけど

256デフォルトの名無しさん2018/09/17(月) 23:12:20.37ID:vky9u9CI
>>253
>sを使う可能性があるから駄目だと言っているという認識ですが、正しいのでしょうか。
合ってる。
sはparse関数の中で確保されてる。
そのsの借用(as_strしてるから借用することになる)をparse関数の外に出そうとしてるから
sの借用がsより長命になるのでrustではエラーになる。
sはparse関数の呼び出しが終わると解放されるからこれはダングリングポインタだよね。

>また、どのように対処すればよろしいでしょうか。
この場合、Node<'a>は文字列のsymbolフィールドを所有する側だから&strじゃなくてStringにすればいい。
apiの設計の時点でownd valueとborrowed valueを意識すればいい。
あとleftとrightが借用になってて、これはこれで設計的に間違いじゃないんだけど問題出るかも。

257デフォルトの名無しさん2018/09/18(火) 22:40:54.20ID:1KtNrcTb
コピーのコストが嫌だからとりあえず参照にしとこう、の精神は早々に破綻するよね
似たようなパーサ書いてて同じようにコンパイラにボロクソに言われたことがある

それ以来、このデータは誰が持っているべきなのか?を意識して書くようにして、
コンパイラに怒られたら「何か抜け道がきっとある」って思うようになれたし、リファレンス探すと大体解決するようになったよ

258デフォルトの名無しさん2018/09/19(水) 11:41:33.60ID:PupZqwJJ
The Creator

259デフォルトの名無しさん2018/09/20(木) 01:17:05.56ID:U3x/57bG
皆さん、お返事ありがとうございます。
とても参考になります。
もう少し、頑張ってみます。

# ピンポイントで質問できるのは、本当にありがたいです。

2602352018/09/21(金) 16:03:14.74ID:orU60ay9
ありがとう。File Structuresを眺めていますが英語なのであまりはかどらないです
二分木およびその発展系の説明は十中八九キーとして数字が使われているけど
ファイルシステムの入力はファイルパスであり可変長の文字列。この部分はどう埋めればいいのだろうか
ハッシュテーブルでも使えという話なのか?しかしそれならハッシュテーブルを使ってファイルのメタデータを
探索してしまった方が早そうだけどそういう問題ではないんだろうな

261デフォルトの名無しさん2018/09/21(金) 21:05:15.62ID:8EH2XxrU
最近でたオライリーの本って
Rust公式ドキュメントの2018でもSecond Editionでもなく
明らかに初版が元になってるよね時期的に

262デフォルトの名無しさん2018/09/21(金) 21:54:00.31ID:QjgEKJ4o
>>260
ブロック管理に使うからキーは数字で問題ない

263デフォルトの名無しさん2018/09/22(土) 11:42:21.78ID:wuQrrLSf
>>261
つまりオライリーの本は地雷?

264デフォルトの名無しさん2018/09/22(土) 12:08:43.13ID:avc67xv+
Second Edition出てるんだっけ?
ググってみても First Edition, Third Release が 2018-6-22 としか見つからないんだけど。

265デフォルトの名無しさん2018/09/22(土) 12:28:30.62ID:zH/ripxa
目次の構成はSecondに近いか?

サンプルプログラムの発行時期は10ヶ月前だからそんなに古くはないのかもな

オライリー原書
http://shop.oreilly.com/product/0636920040385.do
公式ドキュメント日本語訳
https://doc.rust-jp.rs/

ちな最新の2018版ってGithubみた感じリアルタイムに更新されてるっぽいな
https://doc.rust-lang.org/book/index.html

2662352018/09/22(土) 12:29:23.44ID:+vE2oHEK
>>262
ありがとう。あれ?自分が勘違いしているのかな
B+木やB*木をファイルのメタデータの探索に使っていると思っていたけどそうではなくデータを格納しているブロックの探索に使っているということ?

267デフォルトの名無しさん2018/09/22(土) 13:25:51.18ID:avc67xv+
翻訳元のISBNと原書3rd releaseのISBNが違うことは確認したけど、たぶんこのerrataに載ってる修正くらいだろう。
https://www.oreilly.com/catalog/errata.csp?isbn=9781491927212

268デフォルトの名無しさん2018/09/22(土) 23:23:20.56ID:c8wHmvAd
>>261,265
オライリーのカニ本の初版一版は1.17.0。TRPLの日本語訳は相当古い。
2018はverでいうと1.31.0に相当する。いまのstabuleは1.29.0。
それにTRPLでもまだ文書化されてない機能あるしな。
非初学者向けならStep Ahead with Rustもある。

269デフォルトの名無しさん2018/09/23(日) 00:32:53.25ID:v7lwqtna
6週間で0.1バージョン上がるから一年半前のバージョンか
進化はえーな

270デフォルトの名無しさん2018/09/24(月) 14:27:54.43ID:98z19Ykt
>>266
> ファイルシステムの入力はファイルパスであり可変長の文字列
ファイルシステムへの入力は inode、dir、dentry がほとんどじゃないか?
create:dir と dentry をキーにinode作成
readdir:dir をキーに dirent を作成
open:inode をキーに open
ext4 を少し読んだ感じこうだった
inode 番号をキーに管理すればよいのでは?

271デフォルトの名無しさん2018/10/08(月) 18:00:08.98ID:QFhDw4cQ
https://play.rust-lang.org/?gist=d668e212c4d0abf7d0e9fd4c76ea4a56&version=stable&mode=debug&edition=2015

これどうしたらいい?

272デフォルトの名無しさん2018/10/08(月) 18:41:33.75ID:tthsf3cJ
>>271
これってたぶん自己参照構造体(self-referential struct)の話だよね?
自己参照構造体は未定義動作の危険性があるので現状のRustでは表現できない
詳しくは↓の「自己参照構造体」のところを読んで
ttps://qiita.com/ubnt_intrepid/items/df70da960b21b222d0ad

273デフォルトの名無しさん2018/10/08(月) 18:44:43.33ID:3nZaN/dO
RC使うが正解

274デフォルトの名無しさん2018/10/08(月) 21:00:25.91ID:tthsf3cJ
>>273
>>271の場合だとRc使っても無理な気がするんだけど…
ソースコード見せて

275デフォルトの名無しさん2018/10/09(火) 01:15:58.85ID:C4dQJ/Ib
>>271
>>272と同意見だけど27行目でどうやっても自分の参照を関数外に出すから無理だな。
借用じゃなくてBoxでもってクローンすればよくね?

276デフォルトの名無しさん2018/10/09(火) 02:03:50.07ID:ErN4eNsC
タプルにFromStrトレイトを実装するのって無理なんですか?

https://ideone.com/iNMuPL

277デフォルトの名無しさん2018/10/13(土) 02:22:04.65ID:6mWkEB0Z
implしたい型か、traitのどっちかが自分のものでないと駄目って制約があるから駄目です
何でこんな制約があるかは理解してないけど

278デフォルトの名無しさん2018/10/14(日) 00:02:45.49ID:mv7/qGuI
open等させるものか!っていう強い意志。new type patterns使え。

279デフォルトの名無しさん2018/10/23(火) 00:25:24.72ID:vm0fIWWq
Rustに関しての発信の多い日本人のツイッターアカウントを何人か教えて
フォローしてRustの情報集めたい

280デフォルトの名無しさん2018/10/23(火) 07:44:49.73ID:TD4ftrwf
普通に検索すりゃいいじゃん

新着レスの表示
レスを投稿する