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://mevius.5ch.net/test/read.cgi/tech/1507970294/
探検
Rust Part5
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2018/02/11(日) 20:07:24.54ID:ri7dLd1B618デフォルトの名無しさん
2018/06/20(水) 18:54:56.56ID:Vsx9tnAR >>616
dreadedに水増ししたの?w
dreadedに水増ししたの?w
619デフォルトの名無しさん
2018/06/20(水) 18:55:44.33ID:CaLRYR6s >>617
お前と匿名の一人で統計語ろうっておかしいと思わん?
お前と匿名の一人で統計語ろうっておかしいと思わん?
620デフォルトの名無しさん
2018/06/20(水) 18:57:44.45ID:CaLRYR6s あとこいつ好感度と使用者の数をごっちゃにしてるの?凄いよそれは
フィボナッチ数列も書けないだけはあると思うよ
フィボナッチ数列も書けないだけはあると思うよ
621デフォルトの名無しさん
2018/06/20(水) 20:41:21.29ID:Hd+sK95t フィボナッチ数列って円周率みたくいまもなお計算され続けてたりするのかな
622デフォルトの名無しさん
2018/06/20(水) 21:15:36.40ID:vXpw0FFs どう考えてもRustなんかよりJavaのほうが愛好家多いだろ
プロダクトの数考えろよ
プロダクトの数考えろよ
623デフォルトの名無しさん
2018/06/20(水) 21:52:02.37ID:x0fgVEGk GithubではJavaScriptが一番多いからJavaScriptが一番愛された言語だよ(お前の中で)
この記事オカズに1年ぐらい黙れそう?
http://wolfbash.hateblo.jp/entry/2017/07/30/193412
この記事オカズに1年ぐらい黙れそう?
http://wolfbash.hateblo.jp/entry/2017/07/30/193412
624デフォルトの名無しさん
2018/06/20(水) 22:24:58.84 ハンバーガーはマクドナルドが世界一売上高いんだから、マクドナルドのハンバーガーが世界一美味いに決まってるだろ?
625デフォルトの名無しさん
2018/06/20(水) 22:35:12.33ID:6Ldi6ZQ0626デフォルトの名無しさん
2018/06/20(水) 23:15:44.76ID:kIAOzAlL そういや何でmainが必要なんだろね
627デフォルトの名無しさん
2018/06/21(木) 07:34:12.21ID:yU20OhIB Nimへの風評被害記事を貼るのはやめろ
628デフォルトの名無しさん
2018/06/21(木) 09:00:57.14ID:osGR8xHL629デフォルトの名無しさん
2018/06/21(木) 10:39:54.15ID:n536ipp2630デフォルトの名無しさん
2018/06/21(木) 12:34:03.16ID:c3YkgC6b 真正のアホだった
631デフォルトの名無しさん
2018/06/21(木) 17:49:56.62ID:ay5pVfJh だからさー。文句あるなら記事に反論してみなよ
取り下げられた記事以外誰も出せないまま人格批判だけとか全く理論的じゃないし
そういう人ばっかだよねRust信者って
取り下げられた記事以外誰も出せないまま人格批判だけとか全く理論的じゃないし
そういう人ばっかだよねRust信者って
632デフォルトの名無しさん
2018/06/21(木) 18:20:34.36ID:tEqpfdQL ここ本スレじゃなかったのか
お邪魔しました
お邪魔しました
633デフォルトの名無しさん
2018/06/21(木) 18:35:12.47ID:ZtwQwgWl634デフォルトの名無しさん
2018/06/21(木) 18:46:46.63ID:ay5pVfJh635デフォルトの名無しさん
2018/06/21(木) 19:00:49.88ID:c3YkgC6b636デフォルトの名無しさん
2018/06/21(木) 20:30:12.03ID:Do17eRfw637デフォルトの名無しさん
2018/06/21(木) 21:05:10.85ID:6Hcg3ucp ある人がどのレベルでプログラミングしてるか、という差がある
ある人にとってはプログラミングとは設計作業に他ならず
ある人にとってはプログラミングが指の労働でしかない
書き間違えるから、書き忘れるから、という理由でもって
しょうもないバッドノウハウを拝み続ける者すらいる
塩と砂糖を入れ間違う、塩を入れ忘れる、自称料理人
そーいうレベルのプログラマ
ある人にとってはプログラミングとは設計作業に他ならず
ある人にとってはプログラミングが指の労働でしかない
書き間違えるから、書き忘れるから、という理由でもって
しょうもないバッドノウハウを拝み続ける者すらいる
塩と砂糖を入れ間違う、塩を入れ忘れる、自称料理人
そーいうレベルのプログラマ
638デフォルトの名無しさん
2018/06/21(木) 21:10:50.36ID:tPTNHe4P クソ言語はRuで始まるの法則。
ソースはRubywwwww
ソースはRubywwwww
639デフォルトの名無しさん
2018/06/21(木) 21:12:31.35ID:c3YkgC6b >>636
何故取り下げたかの理由も書いてあったがそっちのほうは完全に消えたかな…
アーカイブすら残ってなさそうだ…
「他の記事を貶めるような記事は品性が疑われるからやっぱり取り下げる」
みたいな理由だっと思うけど、どうせお前はそれも認めないんだろ…
………ふぅ………もういいよ……
お前の頭ん中ではRustはクソ言語で良いよ……
何故取り下げたかの理由も書いてあったがそっちのほうは完全に消えたかな…
アーカイブすら残ってなさそうだ…
「他の記事を貶めるような記事は品性が疑われるからやっぱり取り下げる」
みたいな理由だっと思うけど、どうせお前はそれも認めないんだろ…
………ふぅ………もういいよ……
お前の頭ん中ではRustはクソ言語で良いよ……
640デフォルトの名無しさん
2018/06/21(木) 21:16:43.31ID:THBJN+Sm まあ人気であることは否定できないし好きに言わせとけば
641デフォルトの名無しさん
2018/06/21(木) 21:55:24.51ID:cUkhcSdq Rubyスレいってこい
642デフォルトの名無しさん
2018/06/21(木) 22:10:18.40ID:IDDH/Zj5643デフォルトの名無しさん
2018/06/22(金) 06:32:29.82ID:dlC04wo2 rustup update stable
644デフォルトの名無しさん
2018/06/22(金) 07:54:28.27ID:eG6Vx+RS クソ言語に固執し続けるクソ人間
645デフォルトの名無しさん
2018/06/22(金) 08:36:26.70ID:YRNyKvjT 1.27.0がstableになったんね
646デフォルトの名無しさん
2018/06/23(土) 08:31:56.29ID:XcMMhDbo rustは個人開発向けで仕事に使うものじゃないのね。
647デフォルトの名無しさん
2018/06/23(土) 09:39:24.90ID:tcOUUI9f ソースは?
648デフォルトの名無しさん
2018/06/23(土) 10:17:10.81ID:YCFgkK7r Cargo.tomlに対応するrustcの最低バージョン番号を書く方法ってある?
649デフォルトの名無しさん
2018/06/23(土) 10:36:49.30ID:SR6K28vn ネタスレで質問するやつはキチガイ
650デフォルトの名無しさん
2018/06/23(土) 11:42:32.40ID:FNwUUYYn スレチ
Rustスレに行け
Rustスレに行け
651デフォルトの名無しさん
2018/06/23(土) 12:03:08.67ID:SR6K28vn キチガイがまともなふりして質問するふりするんだよなー
652デフォルトの名無しさん
2018/06/23(土) 12:36:47.01ID:VZhdie4n >>648
https://qiita.com/tatsuya6502/items/8b31e2b162aff78787fe
プロジェクトフォルダにrust-toolchainファイル置いてその中で指定出来るみたい
toolchain指定なんでrustup必須になるのと固定指定しかできないっぽいけど
https://qiita.com/tatsuya6502/items/8b31e2b162aff78787fe
プロジェクトフォルダにrust-toolchainファイル置いてその中で指定出来るみたい
toolchain指定なんでrustup必須になるのと固定指定しかできないっぽいけど
653デフォルトの名無しさん
2018/06/23(土) 17:56:54.88ID:ADF05MCP みんな英語どうやって勉強したの
>>653
受験勉強で
受験勉強で
655デフォルトの名無しさん
2018/06/23(土) 18:09:55.67ID:592i1cd7 >>653
俺は英語なら分かるんだけど、日本語はさっぱり分からん
俺は英語なら分かるんだけど、日本語はさっぱり分からん
656デフォルトの名無しさん
2018/06/23(土) 18:11:27.27ID:ADF05MCP657デフォルトの名無しさん
2018/06/23(土) 18:27:07.96ID:ADF05MCP >>655
英語圏に生まれたかったと切に思う
英語圏に生まれたかったと切に思う
658デフォルトの名無しさん
2018/06/23(土) 19:52:59.41ID:1v1LX/MG 訳さず英語で読んだ方が…
情報の早さ・量・正確さが段違いだし原著読むと意外と難しい単語使われてない。
bind(bound)を束縛とかアホかと。
せめて結びつけとかにしろよと。
翻訳のセンス無さすぎ。
もしくはわざと小難しくして地位を守ってるのか…
情報の早さ・量・正確さが段違いだし原著読むと意外と難しい単語使われてない。
bind(bound)を束縛とかアホかと。
せめて結びつけとかにしろよと。
翻訳のセンス無さすぎ。
もしくはわざと小難しくして地位を守ってるのか…
659デフォルトの名無しさん
2018/06/23(土) 19:59:41.54ID:G+zkBspm 結びつけだとassociateの訳ともとれそう
英語と一対一で対応できる和訳の方があとから英語情報に触れるときのハードルを下げると思う
英語と一対一で対応できる和訳の方があとから英語情報に触れるときのハードルを下げると思う
>>658
get / put / take なんかで言い換えしたからといって、わかりやすくなったとは思わない
get / put / take なんかで言い換えしたからといって、わかりやすくなったとは思わない
661デフォルトの名無しさん
2018/06/23(土) 20:13:20.08ID:1v1LX/MG それにしても〜を〜に束縛しますとかセンス無さすぎる。
明治時代の翻訳見習ってほしい。
漢籍の素養が必要だが…
明治時代の翻訳見習ってほしい。
漢籍の素養が必要だが…
662デフォルトの名無しさん
2018/06/23(土) 20:59:38.24ID:hXAC/kvi 逆に聞くが「変数にbindする」って日本語にどう訳したら自然なんだ?「結びつける」は別の意味になるぞ
明治期のアレは翻訳っていうよりは対応する訳語を創出するって感じだから、単純な翻訳じゃないぞ
「縛りつける」みたいな感じになるしかないと思うんだが
束縛は単純に漢語にしただけで大差なかろう
明治期のアレは翻訳っていうよりは対応する訳語を創出するって感じだから、単純な翻訳じゃないぞ
「縛りつける」みたいな感じになるしかないと思うんだが
束縛は単純に漢語にしただけで大差なかろう
663デフォルトの名無しさん
2018/06/23(土) 21:03:29.72ID:YCFgkK7r664デフォルトの名無しさん
2018/06/23(土) 21:53:58.53ID:eYj7ZreJ > 翻訳のセンス無さすぎ。
お前にはあるかのような口ぶりで
> せめて結びつけとかにしろよと。
↑こんなこと言い放ちつつも
> もしくはわざと小難しくして地位を守ってるのか…
束縛っていうふつうの単語を小難しく感じると白状し
地位を守るだのなんだのという珍妙な価値観まで丸出しにするとは恐れ入る
お前にはあるかのような口ぶりで
> せめて結びつけとかにしろよと。
↑こんなこと言い放ちつつも
> もしくはわざと小難しくして地位を守ってるのか…
束縛っていうふつうの単語を小難しく感じると白状し
地位を守るだのなんだのという珍妙な価値観まで丸出しにするとは恐れ入る
665デフォルトの名無しさん
2018/06/23(土) 22:00:12.26ID:iDCSFlv+ まあ、英語のbindからして数理論理の変数束縛と同じ単語を別の意味で使いまわしてる
近い分野なんだから専門用語もう少し考えてくれても良かったのに
近い分野なんだから専門用語もう少し考えてくれても良かったのに
666デフォルトの名無しさん
2018/06/23(土) 22:31:42.63ID:3sIWKIRG 慣れちゃってるから気づきもしなかったけど代入からして大概だよな。
英語だと単にassignだぞ。
英語だと単にassignだぞ。
667デフォルトの名無しさん
2018/06/23(土) 22:44:14.17ID:YCFgkK7r その点、グーグルは気が利いてて、
「錆は、安全性、スピード、並行性に重点を置いたシステムプログラミング言語です。
以前のバージョンのRustが錆びてインストールされている場合、」
だからな
「錆は、安全性、スピード、並行性に重点を置いたシステムプログラミング言語です。
以前のバージョンのRustが錆びてインストールされている場合、」
だからな
668デフォルトの名無しさん
2018/06/24(日) 00:43:46.88ID:8RP1t8O+ 「バインドする」で良いのでは
traitとかcrateとか訳すとよくわからなくなるもの多いし全部カタカナでよい
traitとかcrateとか訳すとよくわからなくなるもの多いし全部カタカナでよい
669デフォルトの名無しさん
2018/06/24(日) 00:53:31.43ID:EUL7CrQi a に 1 を綴じます。
670デフォルトの名無しさん
2018/06/24(日) 01:02:45.16ID:AYN9x63N タイプアノテーションのないバリアブルのタイプはライトサイドをエバリューションしたときのタイプになります
671デフォルトの名無しさん
2018/06/24(日) 02:00:22.91ID:cQRh0RXw 是々非々だな。
型アノテーションのない変数の型は右側を評価したときの型になります
束縛するはバインドするでよかった。SMの趣味ないし。
型アノテーションのない変数の型は右側を評価したときの型になります
束縛するはバインドするでよかった。SMの趣味ないし。
672デフォルトの名無しさん
2018/06/24(日) 07:41:58.64ID:yrJGTcca 束縛と代入ってなにか違うんけ?
673デフォルトの名無しさん
2018/06/24(日) 08:29:18.59ID:4dDfbtJe 誰に確認したわけじゃないが、変数に何か値を設定するのが代入で、値に名前を付けるのが束縛だという認識
fn foo(...) {...} は、ある関数に対しfooという名前をつけるので「関数をfooに束縛する」とは言うかもしれないけど、
「fooに関数を代入している」とは言わない、みたいな
fn foo(...) {...} は、ある関数に対しfooという名前をつけるので「関数をfooに束縛する」とは言うかもしれないけど、
「fooに関数を代入している」とは言わない、みたいな
674デフォルトの名無しさん
2018/06/24(日) 09:14:33.52ID:aLprG8s0 緊縛と挿入!
675デフォルトの名無しさん
2018/06/24(日) 09:46:27.06ID:dcl6yRWH 単にイミュータブルかミュータブルかの違いでないの?
676デフォルトの名無しさん
2018/06/24(日) 09:52:28.95ID:yrJGTcca >>673
伝統的な表現だと宣言に近いニュアンスかな
伝統的な表現だと宣言に近いニュアンスかな
677デフォルトの名無しさん
2018/06/24(日) 10:29:37.13ID:O0XPf3sp rustはバインドしていない状態の変数も合法だからややこしい
let hoge;
hoge = 100; // これをコメントアウトするとコンパイルできない
println!("{}", hoge);
let hoge;
hoge = 100; // これをコメントアウトするとコンパイルできない
println!("{}", hoge);
678デフォルトの名無しさん
2018/06/24(日) 12:51:16.68ID:1I2gvIDj 初心者なんですが、文字列を作成して返す関数を作るときって、
fn hoge() -> String { "hoge".to_string() }
と書くものですか?
それとも
fn hoge() -> &'static str { "hoge" }
と書くべきでしょうか?
fn hoge() -> String { "hoge".to_string() }
と書くものですか?
それとも
fn hoge() -> &'static str { "hoge" }
と書くべきでしょうか?
679デフォルトの名無しさん
2018/06/24(日) 13:59:02.13ID:yrJGTcca その例だと関数にする必要なくない
680デフォルトの名無しさん
2018/06/24(日) 15:24:02.20ID:7t4PbT1U681デフォルトの名無しさん
2018/06/24(日) 18:18:06.50ID:ImbiQntl Stringもstrも返す可能性があるなら Cow<str> で
それ以外なら使えるときは &str を使うのが良いのでは
それ以外なら使えるときは &str を使うのが良いのでは
682デフォルトの名無しさん
2018/06/24(日) 19:01:12.28ID:n+g5Cjrk Stringとstrを両方残しちゃうあたり
優柔不断でグダグダな言語に思えてしまう
優柔不断でグダグダな言語に思えてしまう
683デフォルトの名無しさん
2018/06/24(日) 19:14:57.34ID:knj+uGWY はあ…?
684デフォルトの名無しさん
2018/06/24(日) 19:22:46.99ID:rqN/F7y5 C FFIに関する技術資料ってどこにあるんだろ?
ttps://rust-lang-ja.github.io/the-rust-programming-language-ja/1.6/book/ffi.html
にチュートリアルはあるけどexternの記述方法とかがわからない
見よう見まねで書けなくはないけどそのまま行くのは事故の元だし
ついでにlibcが何をしているのかもわからない
ttps://rust-lang-ja.github.io/the-rust-programming-language-ja/1.6/book/ffi.html
にチュートリアルはあるけどexternの記述方法とかがわからない
見よう見まねで書けなくはないけどそのまま行くのは事故の元だし
ついでにlibcが何をしているのかもわからない
685デフォルトの名無しさん
2018/06/24(日) 20:18:07.31ID:gRETAB5B >>684
CのヘッダからRustのインターフェースを自動生成してくれる
bindgenを追っかけてみればよいかと
https://github.com/rust-lang-nursery/rust-bindgen
CのヘッダからRustのインターフェースを自動生成してくれる
bindgenを追っかけてみればよいかと
https://github.com/rust-lang-nursery/rust-bindgen
686デフォルトの名無しさん
2018/06/24(日) 22:15:14.01ID:W9MJDxOG >>683
せめて理論的に反論しろよグダグダ言語の信者
せめて理論的に反論しろよグダグダ言語の信者
687デフォルトの名無しさん
2018/06/24(日) 22:29:21.43ID:ztKvyOBw688デフォルトの名無しさん
2018/06/24(日) 23:26:54.62ID:rqN/F7y5689デフォルトの名無しさん
2018/06/24(日) 23:57:53.79ID:O0XPf3sp >>684,685
unsafeまわりの文書に入ってる(ただしdraft)
https://doc.rust-lang.org/nomicon/ffi.html
公式文書はgithubのorganization(rust-lang、rust-lang-nursery)から探している
unsafeまわりの文書に入ってる(ただしdraft)
https://doc.rust-lang.org/nomicon/ffi.html
公式文書はgithubのorganization(rust-lang、rust-lang-nursery)から探している
690デフォルトの名無しさん
2018/06/25(月) 00:22:53.39ID:U0L6J6Ez C言語ライブラリの関数を3回呼び出すコードと格闘すること数時間。ようやく動いた
まだ不明点は残っている
・#[link(〜のkindが何を示しているのか判らない
C FFIの使用例を見るとよく見るんだが・・・
・C言語配列の渡し方が不明
元は
>int p[]={16,9};
>foo(p);
とりあえず
>foo("\x10\x09".as_ptr());
などと書けばデータ上は整合するから動くけどどう見てもスマートな記述方法ではない
・文字リテラルの仕様が不明
↑の表記を得るのに数回試行錯誤した
データの与え方もCStringを使った(=\x00終端する)方法は出てくるけど、そうではない方法は
中々見つからなかった。結局↑の表記に落ち着いたが
>>689
ありがとう。kind値について書いてありますね。静的リンクだとkind = "static"らしいですが
付けても付けなくてもファイルサイズは大差ないようです。何が違うのだろう
まだ不明点は残っている
・#[link(〜のkindが何を示しているのか判らない
C FFIの使用例を見るとよく見るんだが・・・
・C言語配列の渡し方が不明
元は
>int p[]={16,9};
>foo(p);
とりあえず
>foo("\x10\x09".as_ptr());
などと書けばデータ上は整合するから動くけどどう見てもスマートな記述方法ではない
・文字リテラルの仕様が不明
↑の表記を得るのに数回試行錯誤した
データの与え方もCStringを使った(=\x00終端する)方法は出てくるけど、そうではない方法は
中々見つからなかった。結局↑の表記に落ち着いたが
>>689
ありがとう。kind値について書いてありますね。静的リンクだとkind = "static"らしいですが
付けても付けなくてもファイルサイズは大差ないようです。何が違うのだろう
691デフォルトの名無しさん
2018/06/25(月) 12:50:29.35ID:vFqeQKwN Cの配列は第一級の値じゃないからas_ptrが正攻法だと思う
692デフォルトの名無しさん
2018/06/25(月) 20:19:17.73ID:U0L6J6Ez693デフォルトの名無しさん
2018/06/25(月) 20:24:02.61ID:J2kal8dh Rustの側では変更しないけどCの側で変更するような変数ってmutにしないと駄目よね?
694デフォルトの名無しさん
2018/06/25(月) 22:00:13.27ID:U0L6J6Ez あっ、ヤベェ・・・いきなり重大なバグ出してら
× foo("\x10\x09".as_ptr());
○ foo("\x10\x00\x00\x00\x09\x00\x00\x00".as_ptr());
こうだよな
標準で[16: i32, 9: i32]を"\x10\x00\x00\x00\x09\x00\x00\x00"に変換してくれるようなのが欲しい
× foo("\x10\x09".as_ptr());
○ foo("\x10\x00\x00\x00\x09\x00\x00\x00".as_ptr());
こうだよな
標準で[16: i32, 9: i32]を"\x10\x00\x00\x00\x09\x00\x00\x00"に変換してくれるようなのが欲しい
695デフォルトの名無しさん
2018/06/25(月) 22:05:44.09ID:KKbqvHaH うわこれは読みたくないw
難しいもんだな
難しいもんだな
696デフォルトの名無しさん
2018/06/25(月) 22:59:19.25ID:U0L6J6Ez ちなみに間違っている状態でも呼んだC関数は正常に終了します。まさにunsafeです。怖いです
何か対策を考えないと大事故を起こしそう
要素数2しかないのにstructを書くのはコード効率の点からも可読性の面からもあまり良いとは思えないし・・・
いろいろ試してみたら
>let p: [i32; 2] = [16, 9];
>foo(&p);
ならいけるようだ。コンパイラは何も言わないけどこの表記が適切かどうかは不明
Rubyだと
foo([16,9].pack("i2")) #配列をint2個分の文字列(=8byteのバイナリ列)に変換
とか書けるんだよなぁ。コストは安くないけど>>694みたいなポカミスは起こらない
何か対策を考えないと大事故を起こしそう
要素数2しかないのにstructを書くのはコード効率の点からも可読性の面からもあまり良いとは思えないし・・・
いろいろ試してみたら
>let p: [i32; 2] = [16, 9];
>foo(&p);
ならいけるようだ。コンパイラは何も言わないけどこの表記が適切かどうかは不明
Rubyだと
foo([16,9].pack("i2")) #配列をint2個分の文字列(=8byteのバイナリ列)に変換
とか書けるんだよなぁ。コストは安くないけど>>694みたいなポカミスは起こらない
697デフォルトの名無しさん
2018/06/25(月) 23:46:12.87ID:kYoiRQin >>696
何がしたいかよく分からんが
何故にC側がintの配列なのにRust側では文字列を使おうとしてるんだ?
C側がintってことはRust側で対応する型はisizeだろ
(Cのintが事前に32bitと分かってる場合はi32でも可
同様に64bitだと分かっている場合は対応する型はi64)
つまり、Cで
int[] x = {16, 9};
なら、Rustで同じデータを表すものは
let x: [isize; 2] = [16, 9]; // let x = [16_isize, 9]; でもおk
って書けば良いはず
Rubyと同じように考えようとするから変なことになる
RustでFFIするならCと対応する型は何かを考えれば良い
何がしたいかよく分からんが
何故にC側がintの配列なのにRust側では文字列を使おうとしてるんだ?
C側がintってことはRust側で対応する型はisizeだろ
(Cのintが事前に32bitと分かってる場合はi32でも可
同様に64bitだと分かっている場合は対応する型はi64)
つまり、Cで
int[] x = {16, 9};
なら、Rustで同じデータを表すものは
let x: [isize; 2] = [16, 9]; // let x = [16_isize, 9]; でもおk
って書けば良いはず
Rubyと同じように考えようとするから変なことになる
RustでFFIするならCと対応する型は何かを考えれば良い
698デフォルトの名無しさん
2018/06/26(火) 00:21:30.73ID:kImvQJUH >>697
いや、isizeはまずいんじゃない?
例えばx86_64だとisize:64bit,int:32bitだし。
libcクレートのc_intならアーキテクチャ毎に適切なサイズになるから
こちらがいいかと。
いや、isizeはまずいんじゃない?
例えばx86_64だとisize:64bit,int:32bitだし。
libcクレートのc_intならアーキテクチャ毎に適切なサイズになるから
こちらがいいかと。
699デフォルトの名無しさん
2018/06/26(火) 00:26:36.57ID:kImvQJUH ついでに言うとFFIするときの型はプリミティブ型以外でも
とりあえずlibcクレートを探すといい。
まぁマイナーなアーキテクチャだと間違ってたりすることもあるから
確認は必要だけど。
とりあえずlibcクレートを探すといい。
まぁマイナーなアーキテクチャだと間違ってたりすることもあるから
確認は必要だけど。
700デフォルトの名無しさん
2018/06/26(火) 00:50:28.55ID:85MS96V/ とりあえず仕返しにrubyスレ荒らそうぜ
http://mevius.5ch.net/test/read.cgi/tech/1523954817/
http://mevius.5ch.net/test/read.cgi/tech/1523954817/
701デフォルトの名無しさん
2018/06/26(火) 00:50:41.38ID:Hc+GAUt1702デフォルトの名無しさん
2018/06/26(火) 01:08:16.37ID:Hc+GAUt1 調べたらCのintにRustで対応する型はisizeじゃなくてstd::os::raw::c_intだったわ
libcのc_intとの違いがよく分からん
対応アーキテクチャの数か?
libcのc_intとの違いがよく分からん
対応アーキテクチャの数か?
703デフォルトの名無しさん
2018/06/26(火) 02:21:07.36ID:kImvQJUH704デフォルトの名無しさん
2018/06/26(火) 08:11:12.99ID:xzmHFSgh705デフォルトの名無しさん
2018/06/26(火) 08:35:08.35ID:Hc+GAUt1 >>704
資料が少ないのはまだ普及してない言語では仕方がない
FFIとか皆が頻繁に使う機能じゃないようなものはなおさら
Cの配列とRustの配列は互換があるはずだけど
悪いがその情報をどこから手に入れたかは覚えていないし
信用されても困る(ついさっきも間違えたしね)
場合によっては資料探すよりソースコード読んだほうが早いことも多いし
根気良く調べるしかないとしか言いようがない
あとはFFIみたいなunsafe部分は出来る限り念入りにテストを書くとか
資料が少ないのはまだ普及してない言語では仕方がない
FFIとか皆が頻繁に使う機能じゃないようなものはなおさら
Cの配列とRustの配列は互換があるはずだけど
悪いがその情報をどこから手に入れたかは覚えていないし
信用されても困る(ついさっきも間違えたしね)
場合によっては資料探すよりソースコード読んだほうが早いことも多いし
根気良く調べるしかないとしか言いようがない
あとはFFIみたいなunsafe部分は出来る限り念入りにテストを書くとか
706デフォルトの名無しさん
2018/06/26(火) 09:06:54.14ID:ffYAyO/t707デフォルトの名無しさん
2018/06/26(火) 10:23:55.54ID:MUW40HUm 今のnightlyだとclippyビルド出来ないよね?
ビルド出来る最後のバージョンと、それをインストールする方法教えてください
ビルド出来る最後のバージョンと、それをインストールする方法教えてください
708デフォルトの名無しさん
2018/06/26(火) 12:18:25.05ID:8xBVh24a RustのABIについてはドキュメント増やすことはできるだろうけど
それ以前の問題としてCのABI知らないとFFIつらいのでは
それ以前の問題としてCのABI知らないとFFIつらいのでは
709デフォルトの名無しさん
2018/06/26(火) 18:47:03.15ID:xzmHFSgh 付き合ってくれてありがとう
まとめるとFFIで使えるのは
・#[repr(C付きのstruct
・#[repr(C付きのunion
・#[repr(C付きのenum ←条件付き
・box?
・vec ←非推奨?
・str
・array
・slice
・std::os::rawの中にある物
このへんで良いのかな
std::os::rawの中とarray、struct、union、strがあれば一通り出来そうか
まとめるとFFIで使えるのは
・#[repr(C付きのstruct
・#[repr(C付きのunion
・#[repr(C付きのenum ←条件付き
・box?
・vec ←非推奨?
・str
・array
・slice
・std::os::rawの中にある物
このへんで良いのかな
std::os::rawの中とarray、struct、union、strがあれば一通り出来そうか
710デフォルトの名無しさん
2018/06/26(火) 20:49:29.40ID:qO0rk7ac vecもas_ptr用意されているし非推奨と言うことはないはず
sliceにderefできるし
sliceにderefできるし
711デフォルトの名無しさん
2018/06/26(火) 23:28:33.57ID:+xThVrkU IDが変わっています
vecの件
>extern {fn foo(p: &std::vec::Vec<i32>);}
>foo(&vec![16, 9]);
これだと
>warning: `extern` block uses type `std::vec::Vec<i32>` which is not FFI-safe: this struct has unspecified layout
>・・・
> = help: consider adding a #[repr(C)] or #[repr(transparent)] attribute to this struct
と言われ正常に動作しない。クラッシュはしないが実行結果がおかしい
>extern {fn foo(p: *const i32);}
>foo(vec![16 as i32, 9 as i32].as_ptr());
これなら問題ないようだ。奥が深い
あとC関数から帰ってきたアドレスをu32へ入れていたのをc_voidへ入れるようにしたら所有権で怒られて動かなくなった
同じコードでも型によって所有権の移動のしかたが違うのか
vecの件
>extern {fn foo(p: &std::vec::Vec<i32>);}
>foo(&vec![16, 9]);
これだと
>warning: `extern` block uses type `std::vec::Vec<i32>` which is not FFI-safe: this struct has unspecified layout
>・・・
> = help: consider adding a #[repr(C)] or #[repr(transparent)] attribute to this struct
と言われ正常に動作しない。クラッシュはしないが実行結果がおかしい
>extern {fn foo(p: *const i32);}
>foo(vec![16 as i32, 9 as i32].as_ptr());
これなら問題ないようだ。奥が深い
あとC関数から帰ってきたアドレスをu32へ入れていたのをc_voidへ入れるようにしたら所有権で怒られて動かなくなった
同じコードでも型によって所有権の移動のしかたが違うのか
712デフォルトの名無しさん
2018/06/27(水) 00:01:15.59ID:a5PFJKPe RustのVec自体には確かCとの互換性はないはずだよ
ただし、Vecはsliceにderefが可能でsliceはCの配列と互換がある
vec![16 as i32, 9 as i32].as_ptr()
はVecに対してas_ptr()メソッドを呼んでるように見えるけど
(ドキュメントを確認すれば分かるが)実際にはVecにas_ptr()メソッドなんて定義されていない
as_ptr()はsliceの方に定義されていて、暗黙的にderefされてからas_ptr()が呼ばれてる
つまり上のコードは丁寧に書き直すと↓と同じ意味(のはず)
let vec: Vec<i32> = vec![16, 9];
let slice: &[i32] = vec.deref();
let ptr: *const i32 = slice.as_ptr();
ただし、Vecはsliceにderefが可能でsliceはCの配列と互換がある
vec![16 as i32, 9 as i32].as_ptr()
はVecに対してas_ptr()メソッドを呼んでるように見えるけど
(ドキュメントを確認すれば分かるが)実際にはVecにas_ptr()メソッドなんて定義されていない
as_ptr()はsliceの方に定義されていて、暗黙的にderefされてからas_ptr()が呼ばれてる
つまり上のコードは丁寧に書き直すと↓と同じ意味(のはず)
let vec: Vec<i32> = vec![16, 9];
let slice: &[i32] = vec.deref();
let ptr: *const i32 = slice.as_ptr();
713デフォルトの名無しさん
2018/06/27(水) 00:13:14.65ID:95B8/IDl あとC関数の引数&戻り値はmove(ポインターか実値)しないとだめじゃない?
&付けて参照渡しにするのはよく分からない、たぶん未定義動作じゃないかなあ
&付けて参照渡しにするのはよく分からない、たぶん未定義動作じゃないかなあ
714デフォルトの名無しさん
2018/06/27(水) 01:04:32.64ID:9Rd9nmLi >>707
clippyは最新のnightlyは**追ってない**けど常に開発中だから
ビルドできるバージョンは常に変わる。
自分の環境のビルドできる最大のnightlyに合わせろしか言えん。
常にclippyを使い続けたいなら環境の方をclippyに合わせないとだめ。
>>709
- cの配列はraw pointer
- 配列以外ならrepr(C)してメモリレイアウト合わせるか
- C側でopaque pointer定義してas_ptr
- 汎用ポインタはrust側は
pub enum Void;
type VoidRef = *mut Void;
- cのvoid*がrust側にほしいならlibcクレート
- VLAや不完全配列はrustnomicon読む
まずC abi覚えろ。
std140レイアウトならクレートあるぞ。
clippyは最新のnightlyは**追ってない**けど常に開発中だから
ビルドできるバージョンは常に変わる。
自分の環境のビルドできる最大のnightlyに合わせろしか言えん。
常にclippyを使い続けたいなら環境の方をclippyに合わせないとだめ。
>>709
- cの配列はraw pointer
- 配列以外ならrepr(C)してメモリレイアウト合わせるか
- C側でopaque pointer定義してas_ptr
- 汎用ポインタはrust側は
pub enum Void;
type VoidRef = *mut Void;
- cのvoid*がrust側にほしいならlibcクレート
- VLAや不完全配列はrustnomicon読む
まずC abi覚えろ。
std140レイアウトならクレートあるぞ。
715デフォルトの名無しさん
2018/06/27(水) 02:41:49.66ID:yfKVc+j6 Rustだけ覚えればいい時代はまだ来ない
C/C++の知識皆無では
C/C++の知識皆無では
716デフォルトの名無しさん
2018/06/27(水) 09:44:32.66ID:SAllJH2o オライリーの訳本が8月に出るのね
717デフォルトの名無しさん
2018/06/27(水) 10:05:32.17ID:YMyBwU5o 本が出る頃には内容が古くなってるやつだろ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「もうキモくてキモくて…」29歳女性が語る“おぢアタック”の実態。「俺ならイケるかも」年下女性を狙う勘違い中年男性に共通点が★4 [Hitzeschleier★]
- ミス・ユニバース フィンランド代表の「つり目」写真が波紋… 本人釈明も批判やまず 協会謝罪「徹底的に検証」へ [冬月記者★]
- 【おこめ券】鈴木憲和農相 小泉前農相の備蓄米放出を“反省”「備蓄の円滑な運営を図ってまいります」 [Hitzeschleier★]
- 自民・麻生太郎副総裁 石破政権の1年は「どよーん」 高市政権発足で「何となく明るくなった」「世の中のことが決まり動いている」★2 [Hitzeschleier★]
- 1人3千円の食品高騰対策、何に使える? あいまいなまま衆院通過 [蚤の市★]
- ゆたぼん 二重手術を報告「めちゃくちゃ気に入っています」 [muffin★]
