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:ri7dLd1B714デフォルトの名無しさん
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 本が出る頃には内容が古くなってるやつだろ
718デフォルトの名無しさん
2018/06/27(水) 14:44:22.85ID:3NxQrIF4719デフォルトの名無しさん
2018/06/27(水) 17:59:19.20ID:06nI5JoX 不買運動何人参加するの?大規模にやろうぜ
720デフォルトの名無しさん
2018/06/27(水) 18:21:05.70ID:nwq6g8g7 英語なら多目に見るwwwwwwww
721デフォルトの名無しさん
2018/06/27(水) 18:35:05.31ID:hr/rqCUy >>712
ありがとう、そういうオチか。&で正常に動かないのも納得です
暗黙の変換って便利ですけど理解が浅いとハマる元だったりしますよね
不適切な入力を入れると自分が書いたつもりのコードとは無関係っぽいエラーを出して???になったり
>>713
#[link(name = "・・・")]
extern {
fn func1(x: *const u8) -> u32;
fn func2(y: u32);
fn func3(z: &u32);
}
fn main() {
unsafe {
let mut a = func1("foo.dat".as_ptr()); //C側でメモリが確保されアドレスが帰ってくる
func2(a); //アドレスを使って処理
func3(&a); //確保したメモリを解放
}
}
これは動きます。u32をstd::os::raw::c_voidにするとfunc2のaで
>use of moved value: `a`
>= note: move occurs because `a` has type `std::os::raw::c_void`, which does not implement the `Copy` trait
そんな事を言われても困る・・・ついでにenumなので格納されているアドレス値の確認も面倒
usizeなら問題ない。ドキュメントが正しいならusizeはポインタのサイズらしいしこっちの方が楽かも
ありがとう、そういうオチか。&で正常に動かないのも納得です
暗黙の変換って便利ですけど理解が浅いとハマる元だったりしますよね
不適切な入力を入れると自分が書いたつもりのコードとは無関係っぽいエラーを出して???になったり
>>713
#[link(name = "・・・")]
extern {
fn func1(x: *const u8) -> u32;
fn func2(y: u32);
fn func3(z: &u32);
}
fn main() {
unsafe {
let mut a = func1("foo.dat".as_ptr()); //C側でメモリが確保されアドレスが帰ってくる
func2(a); //アドレスを使って処理
func3(&a); //確保したメモリを解放
}
}
これは動きます。u32をstd::os::raw::c_voidにするとfunc2のaで
>use of moved value: `a`
>= note: move occurs because `a` has type `std::os::raw::c_void`, which does not implement the `Copy` trait
そんな事を言われても困る・・・ついでにenumなので格納されているアドレス値の確認も面倒
usizeなら問題ない。ドキュメントが正しいならusizeはポインタのサイズらしいしこっちの方が楽かも
722デフォルトの名無しさん
2018/06/27(水) 19:40:13.19ID:5BauIrrs 訳本情報どこにある?
723デフォルトの名無しさん
2018/06/27(水) 19:41:49.80ID:Z4vkTjjE てかrust覚えるなら普通にc++のスマポくらいは知っとかんとわけわからんだろ。
724デフォルトの名無しさん
2018/06/27(水) 19:45:28.45ID:luhHLeJ1 今日発売の新しいrust本買った人いるのかな
評判良ければKindle出た頃に買おうかなと思うけど
評判良ければKindle出た頃に買おうかなと思うけど
725デフォルトの名無しさん
2018/06/27(水) 20:11:21.04 貧乏なのでPacktの糞本を$10セールの時しか買えない
726デフォルトの名無しさん
2018/06/27(水) 20:16:03.57ID:aPrQo9aq 訳本amazonにあったわ
早速予約した
早速予約した
727デフォルトの名無しさん
2018/06/27(水) 20:16:12.37ID:YMyBwU5o オライリーの本って、オンラインに無料であるやつとおなじやなかったん?
728デフォルトの名無しさん
2018/06/27(水) 21:01:38.86ID:IGU3gLqH729デフォルトの名無しさん
2018/06/28(木) 01:06:21.38ID:cJz1WTLf730デフォルトの名無しさん
2018/06/28(木) 06:00:08.46ID:YYPKz5qu rustやるのにあったほうがいい前提知識ってどれくらい?
c++とhaskellがまともに出来ないときつい?
c++とhaskellがまともに出来ないときつい?
731デフォルトの名無しさん
2018/06/28(木) 06:30:25.53ID:fobuFGlz そんなわけないだろw
どっちかてと根気が必要だ
どっちかてと根気が必要だ
732デフォルトの名無しさん
2018/06/28(木) 07:54:11.40ID:1UW06GNd いや最低限c++のコンストラクタ、デストラクタの動くタイミングくらいは知っとかないと無理だろ。
733デフォルトの名無しさん
2018/06/28(木) 08:12:22.16ID:MOChRiis >>729
一応deriveでCopy(とClone)を実装すればいいらしいと言うところまでは確認しているのですが
1.std::os::raw::c_voidへ追加で実装できるのか未確認(できたとしてもモンキーパッチになってしまう)
2.別名の型を新規に作る(usizeもしくはusizeへのエイリアスに対するメリットが思いつかない)
なもんで問題なさそうならusizeで良いかなと・・・
というかCのライブラリを使うと>>721みたいなケースは良くあると思うけど他の人はどうしているんだろ
libcのc_voidもlib.rsを見るとstd::os::raw::c_voidと同じみたいだし同様の現象が起きそうです
ググると引数はc_voidを使って戻り値はusizeを使っているようなコードも出てくるしusizeが正攻法なのか?
ちなみにこのコードだとusizeを使ってもmutが不要の警告が出るんですよね。これもそんな事を言われても
困るのですが
一応deriveでCopy(とClone)を実装すればいいらしいと言うところまでは確認しているのですが
1.std::os::raw::c_voidへ追加で実装できるのか未確認(できたとしてもモンキーパッチになってしまう)
2.別名の型を新規に作る(usizeもしくはusizeへのエイリアスに対するメリットが思いつかない)
なもんで問題なさそうならusizeで良いかなと・・・
というかCのライブラリを使うと>>721みたいなケースは良くあると思うけど他の人はどうしているんだろ
libcのc_voidもlib.rsを見るとstd::os::raw::c_voidと同じみたいだし同様の現象が起きそうです
ググると引数はc_voidを使って戻り値はusizeを使っているようなコードも出てくるしusizeが正攻法なのか?
ちなみにこのコードだとusizeを使ってもmutが不要の警告が出るんですよね。これもそんな事を言われても
困るのですが
734デフォルトの名無しさん
2018/06/28(木) 08:55:27.92ID:bLMLowda >>733
Cで確保したポインタ(特に○○ハンドルみたいなリソース)は普通はopaque structで受けると思う。
https://rust-lang-ja.github.io/the-rust-programming-language-ja/1.6/book/ffi.html#%E3%82%AA%E3%83%9A%E3%83%BC%E3%82%AF%E6%A7%8B%E9%80%A0%E4%BD%93%E3%81%AE%E8%A1%A8%E7%8F%BE
どちらかというと、func2の引数が参照渡しでなくて値渡しなのが問題では。
見た感じfunc2では借用して呼び出し後に返してもらえばいいっぽいけど。
Cで確保したポインタ(特に○○ハンドルみたいなリソース)は普通はopaque structで受けると思う。
https://rust-lang-ja.github.io/the-rust-programming-language-ja/1.6/book/ffi.html#%E3%82%AA%E3%83%9A%E3%83%BC%E3%82%AF%E6%A7%8B%E9%80%A0%E4%BD%93%E3%81%AE%E8%A1%A8%E7%8F%BE
どちらかというと、func2の引数が参照渡しでなくて値渡しなのが問題では。
見た感じfunc2では借用して呼び出し後に返してもらえばいいっぽいけど。
735デフォルトの名無しさん
2018/06/28(木) 10:18:12.24ID:MyWFnKdA >>732
えーなんで?rust書いてる人の大半は知らないでしょ
えーなんで?rust書いてる人の大半は知らないでしょ
736デフォルトの名無しさん
2018/06/28(木) 10:38:48.43ID:LheEK93m こりゃC++まだ覚えてない人はrustなんか勉強してる場合じゃないねw
737デフォルトの名無しさん
2018/06/28(木) 12:56:07.56ID:rDWw9n99 c++といってもRAIIとスマートポインタくらいで良いのでは
知らなくてもtrplなど読めばなんとかなるとは思うが
代数的データ型なども同様
あとは用途次第だけどFFIやるならCのメモリレイアウトくらいは押さえておいた方がよい
知らなくてもtrplなど読めばなんとかなるとは思うが
代数的データ型なども同様
あとは用途次第だけどFFIやるならCのメモリレイアウトくらいは押さえておいた方がよい
738デフォルトの名無しさん
2018/06/28(木) 13:32:58.62ID:LheEK93m そんないい加減なことでいいのだろうか?
ちゃんとC/C++一から十まできちんと理解した方がよいのでは?
それからじゃないとそこがいい加減でRustなんて本当に使えるようになったと言える?
ちゃんとC/C++一から十まできちんと理解した方がよいのでは?
それからじゃないとそこがいい加減でRustなんて本当に使えるようになったと言える?
739デフォルトの名無しさん
2018/06/28(木) 14:08:04.32ID:QGaIyydK C++完全に理解した人間なんて世界中に何人いるやら
740デフォルトの名無しさん
2018/06/28(木) 14:14:44.86ID:rY43/kt0 Cはともかく、C++に時間を割く必要はないじゃろ
741デフォルトの名無しさん
2018/06/28(木) 14:20:27.58ID:61gzDvUq むしろCすら知らないほうが変な先入観とか無くて所有権とかライフタイムとか素直に理解しやすそうな気もする
742デフォルトの名無しさん
2018/06/28(木) 14:28:13.71ID:MyWFnKdA 必要という理由が分からない
言語なんて使いながら覚えていくもんでしょ
言語なんて使いながら覚えていくもんでしょ
743デフォルトの名無しさん
2018/06/28(木) 15:28:41.63ID:a2wUxb0k744デフォルトの名無しさん
2018/06/28(木) 16:07:41.79ID:cJz1WTLf >>730
確かにC++とHaskellが出来きればRustの習得にはそれほど苦労しないだろうとは思う
ただ、理解できるまでにかかる時間量の問題であって、それがないとキツイってわけじゃない
むしろ、Rustの学習するためにC++とHaskellを先に学習するとか時間の無駄
The Bookが懇切丁寧に解説してくれるので前提知識はなくても全く問題ないと思う
ただし、Goみたいな言語と違ってサンプルコード読めばある程度理解できて
何となくで書けてしまうような言語ではないのでThe Bookの熟読は必須
それと、FFIする場合はある程度のCの知識は必要だよ
確かにC++とHaskellが出来きればRustの習得にはそれほど苦労しないだろうとは思う
ただ、理解できるまでにかかる時間量の問題であって、それがないとキツイってわけじゃない
むしろ、Rustの学習するためにC++とHaskellを先に学習するとか時間の無駄
The Bookが懇切丁寧に解説してくれるので前提知識はなくても全く問題ないと思う
ただし、Goみたいな言語と違ってサンプルコード読めばある程度理解できて
何となくで書けてしまうような言語ではないのでThe Bookの熟読は必須
それと、FFIする場合はある程度のCの知識は必要だよ
745デフォルトの名無しさん
2018/06/28(木) 16:49:45.85ID:Z76aQv2+ FFIしたいけどCは知らん、とかレアケースだから
そんな心配はせんでいい
そんな心配はせんでいい
746デフォルトの名無しさん
2018/06/28(木) 16:53:35.27ID:rY43/kt0 別にRustは大して関数型言語じゃないし、Rustのために他の関数型言語から、っていうのは本末転倒すぎるな
747デフォルトの名無しさん
2018/06/28(木) 16:59:30.65ID:Z76aQv2+ 全然モナドってないし、関数型言語フレーバーぐらいでしょ
748デフォルトの名無しさん
2018/06/28(木) 17:13:53.31 C++は速いがコーディングストレスで禿げる
Rustで若干のパフォーマンスを犠牲にしてでも、いかに毛髪を守れるかがテーマ
Rustで若干のパフォーマンスを犠牲にしてでも、いかに毛髪を守れるかがテーマ
749デフォルトの名無しさん
2018/06/28(木) 17:18:23.47ID:GP5sTNn0750デフォルトの名無しさん
2018/06/28(木) 17:41:56.51ID:BmtmAhz0 結論: やっぱりC++からしっかりやったほうがよい
751デフォルトの名無しさん
2018/06/28(木) 17:46:58.11ID:GP5sTNn0752デフォルトの名無しさん
2018/06/28(木) 17:47:09.81ID:tKvy+NRw C++98
C++03
C++TR1
C++11
C++14
C++17
C++20
C++23
C++26
C++29
C++32
C++35
C++38
C++03
C++TR1
C++11
C++14
C++17
C++20
C++23
C++26
C++29
C++32
C++35
C++38
753デフォルトの名無しさん
2018/06/28(木) 17:56:38.73ID:MyWFnKdA なんだコンパイルできないおじさんか。。
754デフォルトの名無しさん
2018/06/28(木) 18:32:36.30ID:f0Ft93Jb >>746
単純に最初期のRustコンパイラはOcamlで組まれてたからって事情でないの
単純に最初期のRustコンパイラはOcamlで組まれてたからって事情でないの
755デフォルトの名無しさん
2018/06/28(木) 18:34:20.70ID:f0Ft93Jb >>749
C++より潜在的なメモリ管理バグを減らせるってのは十分有用な話では
C++より潜在的なメモリ管理バグを減らせるってのは十分有用な話では
756デフォルトの名無しさん
2018/06/28(木) 18:54:33.03ID:frbOjHXy リストとリスト操作をなんで組み込んでくれなかったのかな?
::とか@とかあるだけでだいぶ捗るよね(一部の人にとって)
::とか@とかあるだけでだいぶ捗るよね(一部の人にとって)
757デフォルトの名無しさん
2018/06/28(木) 19:41:35.09ID:Z76aQv2+ パフォーマンス面だけで言えば、リンクトリストは問題外だからじゃない?
758デフォルトの名無しさん
2018/06/28(木) 20:19:23.05ID:X+ujNNAX コンパイルできないおじさんのコードもNLL有効にしたらコンパイルできたから
来年にはrust書けるようになるよ
来年にはrust書けるようになるよ
759デフォルトの名無しさん
2018/06/28(木) 20:29:59.05ID:1UW06GNd 別にどの言語だろうと所有権を考えるってのは普遍的に必要だとは思うぞ。
rustだろうとc++だろうとはたまた動的言語でもメモリ以外にも資源管理なんて
問題はどこにでも出てくるわけで。
rustだろうとc++だろうとはたまた動的言語でもメモリ以外にも資源管理なんて
問題はどこにでも出てくるわけで。
760デフォルトの名無しさん
2018/06/28(木) 20:30:03.07ID:rY43/kt0 consとかが使えないのはmutとの兼ね合いもあるんじゃないの
あれ完全にイミュータブルリスト向けだもんよ
あれ完全にイミュータブルリスト向けだもんよ
761デフォルトの名無しさん
2018/06/28(木) 21:16:31.35ID:YYPKz5qu762デフォルトの名無しさん
2018/06/28(木) 21:22:26.06ID:MOChRiis >>734
なるほど。c_voidの正体はそれでしたか
引数は既成Cライブラリの仕様なのでなるべく変更したくありません
*mutを使うコードを検討していて気がつきましたがRustの生ポインタにfunc1が返すアドレスを入れると
Cと同じ危険を抱えますよね。func3でアドレスがNULL=0になりますからその後に触ると当然クラッシュします
なるほど。c_voidの正体はそれでしたか
引数は既成Cライブラリの仕様なのでなるべく変更したくありません
*mutを使うコードを検討していて気がつきましたがRustの生ポインタにfunc1が返すアドレスを入れると
Cと同じ危険を抱えますよね。func3でアドレスがNULL=0になりますからその後に触ると当然クラッシュします
763デフォルトの名無しさん
2018/06/28(木) 21:27:33.58ID:wCMJyKP8 NLLいまだに理解できなくて使えない
764デフォルトの名無しさん
2018/06/28(木) 21:36:28.71ID:cJz1WTLf >>761
actixとactix-webのメインコントリビュータもよく見ると普通にMS所属の人だった
ttps://github.com/actix/actix/graphs/contributors
ttps://github.com/actix/actix-web/graphs/contributors
actixとactix-webのメインコントリビュータもよく見ると普通にMS所属の人だった
ttps://github.com/actix/actix/graphs/contributors
ttps://github.com/actix/actix-web/graphs/contributors
765デフォルトの名無しさん
2018/06/28(木) 21:45:00.19ID:CykyBbY/ MSは英語なので、大目に見てもらえる
766デフォルトの名無しさん
2018/06/28(木) 22:08:43.56ID:fobuFGlz > Please never sell Rust to Microsoft!
ちょっとわらった
ちょっとわらった
767デフォルトの名無しさん
2018/06/28(木) 22:56:56.15ID:mQsBu3Yx 言語に関してはMSがオーナーになるのは大勝利だろ
768デフォルトの名無しさん
2018/06/28(木) 23:58:14.47ID:aJbqINcy ではここからはC# おじさんどぞー
769デフォルトの名無しさん
2018/06/29(金) 00:13:26.39ID:9NU4CCEP770デフォルトの名無しさん
2018/06/29(金) 00:20:17.66ID:1B/tcpoY 汎用言語でないからRustと競合はしないな
771デフォルトの名無しさん
2018/06/29(金) 05:02:04.02ID:HciN/Bk/ Visual StudioでRustサポートされないかな
rlsが不安定すぎるのでMSが作り直して欲しい...
rlsが不安定すぎるのでMSが作り直して欲しい...
772デフォルトの名無しさん
2018/06/29(金) 07:15:45.03ID:pVbM0h49 rlsもracerもポンコツよね
あんまり力入れてないのかな
あんまり力入れてないのかな
773デフォルトの名無しさん
2018/06/29(金) 10:18:57.05ID:azKeAftH intelliJ使えばええやん
インテリじゃない人もタダで使えるよ
インテリじゃない人もタダで使えるよ
774デフォルトの名無しさん
2018/06/29(金) 11:21:37.40ID:eINaY/I2 支援機能だけ考えるとそうなんだけどさ
手に馴染んだemacsから離れるのは簡単じゃない
手に馴染んだemacsから離れるのは簡単じゃない
775デフォルトの名無しさん
2018/06/29(金) 12:06:31.66ID:1B/tcpoY ワイもIDE使いこなせない
776デフォルトの名無しさん
2018/06/29(金) 12:09:37.82ID:l0U/js7n intellijをつかうのです…
vsなんかよりよっぽどいいですよ…
vsなんかよりよっぽどいいですよ…
777デフォルトの名無しさん
2018/06/29(金) 12:09:46.01ID:ZOJKMSLg >>763
従来のborrow checkerの制約が緩くなるだけだから従来の理解してれば不自由なく使えるはず
従来のborrow checkerの制約が緩くなるだけだから従来の理解してれば不自由なく使えるはず
778デフォルトの名無しさん
2018/06/29(金) 12:27:36.55ID:1B/tcpoY intelij買ったけどemacs使っちゃうのよね。コード書くのにmouseが必要になるのが受け付けないみたい。
779デフォルトの名無しさん
2018/06/29(金) 18:17:46.77ID:HciN/Bk/ intellijちゃん自力でパースしてるのアホでしょ
CLionもclang使わず自力でやってるけどリリースから随分経つのに初歩的なバグ残ってるみたいだし
CLionもclang使わず自力でやってるけどリリースから随分経つのに初歩的なバグ残ってるみたいだし
780デフォルトの名無しさん
2018/06/29(金) 18:55:33.43ID:abdfGqyU >>734の方法だとこんな感じなのかな
enum ABC {}
#[link(name = "・・・")]
extern {
fn func1(x: *const u8) -> *mut ABC
fn func2(y: *mut ABC);
fn func3(z: &*mut ABC);
}
fn main() {
unsafe {
let a = func1("foo.dat".as_ptr()); //C側でメモリが確保されアドレスが帰ってくる
func2(a); //アドレスを使って処理
func3(&a); //確保したメモリを解放(以降aを触ってはいけない)
}
}
中身にアクセスしたいならenumを#[repr(C)]付きのstructにして構造を定義すればいいのかな
読み書きするRustのコード全てをunsafeにする必要がありそうだけど
enum ABC {}
#[link(name = "・・・")]
extern {
fn func1(x: *const u8) -> *mut ABC
fn func2(y: *mut ABC);
fn func3(z: &*mut ABC);
}
fn main() {
unsafe {
let a = func1("foo.dat".as_ptr()); //C側でメモリが確保されアドレスが帰ってくる
func2(a); //アドレスを使って処理
func3(&a); //確保したメモリを解放(以降aを触ってはいけない)
}
}
中身にアクセスしたいならenumを#[repr(C)]付きのstructにして構造を定義すればいいのかな
読み書きするRustのコード全てをunsafeにする必要がありそうだけど
781デフォルトの名無しさん
2018/06/29(金) 20:25:27.91ID:jUvi1FZV 英語は多めに見るおじさん、今頃rustについて必死で勉強して弱点探してるのかな
782デフォルトの名無しさん
2018/06/30(土) 01:38:16.37ID:bJf+PXWq >>780
func1とfunc2は関数プロトタイプがわかるけど
fn func1(x: *const u8) -> *mut ABC; → ABC* func1(const char *x);
fn func2(y: *mut ABC); → void func2(ABC *y);
fn func3(z: &*mut ABC);に相当するCのプロトタイプはないよね?
func1とfunc2は関数プロトタイプがわかるけど
fn func1(x: *const u8) -> *mut ABC; → ABC* func1(const char *x);
fn func2(y: *mut ABC); → void func2(ABC *y);
fn func3(z: &*mut ABC);に相当するCのプロトタイプはないよね?
783デフォルトの名無しさん
2018/06/30(土) 01:40:31.49ID:bJf+PXWq func1のxはu8だからunsigned charかuint8_tだね
784デフォルトの名無しさん
2018/06/30(土) 01:59:30.31ID:VVUAg8sI >>782
func1の引数はRustのコンパイラにその型を使えと言われたから
func2の引数はfunc1の返値に合わせた
func3の引数はfunc1が返したアドレスが格納されているアドレス。Cで言うポインタのポインタでABC **z
自分も詳しいわけではないので勘違いしているかもしれないが一応動いている
func1の引数はRustのコンパイラにその型を使えと言われたから
func2の引数はfunc1の返値に合わせた
func3の引数はfunc1が返したアドレスが格納されているアドレス。Cで言うポインタのポインタでABC **z
自分も詳しいわけではないので勘違いしているかもしれないが一応動いている
785デフォルトの名無しさん
2018/06/30(土) 05:09:23.98ID:bJf+PXWq >>784
ダブルポインタだったのか
それならvoid func3(ABC **z); → fn func3(z: *mut *mut ABC);
let mut p = func1(...);
let pp = &mut p as *mut *mut ABC;
func3(pp); // 単にfunc3(&mut p)で大丈夫なはず
ダブルポインタだったのか
それならvoid func3(ABC **z); → fn func3(z: *mut *mut ABC);
let mut p = func1(...);
let pp = &mut p as *mut *mut ABC;
func3(pp); // 単にfunc3(&mut p)で大丈夫なはず
786デフォルトの名無しさん
2018/06/30(土) 11:01:24.70ID:6fEIEQu0 ダブルポインタはあんま想定してなさげな気はする。
俺だったらもう一枚、インターフェイスかましてもう少し楽なインターフェイスにしてから
rustと繋げるわ。
俺だったらもう一枚、インターフェイスかましてもう少し楽なインターフェイスにしてから
rustと繋げるわ。
787デフォルトの名無しさん
2018/06/30(土) 11:27:27.95ID:BB0BPsjY 結局C/C++ある程度わかってないと話にならないよね。
経験ないやつはいきなりrust勉強してる場合ではない。
経験ないやつはいきなりrust勉強してる場合ではない。
788デフォルトの名無しさん
2018/06/30(土) 12:46:04.79ID:gEYLih9T コンパイルできないならまずプログラミングを勉強しなおしたほうがいいよ
789デフォルトの名無しさん
2018/06/30(土) 14:28:27.26ID:d1l1Trl+ FFIの話をrust全体の話に主語をでかくしてるおっさんがおるな
790デフォルトの名無しさん
2018/06/30(土) 16:28:11.02ID:oxrLiD+S FFIもrustの魅力の一つなのですが?
C/C++知らないやつはいつまでたってもrustを全て分かったことにならない
半人前のまま
別に必要なとこだけ使うスタンスでもいいけど半人前のクセにいっぱしのrustプログラマーヅラしないでね
C/C++知らないやつはいつまでたってもrustを全て分かったことにならない
半人前のまま
別に必要なとこだけ使うスタンスでもいいけど半人前のクセにいっぱしのrustプログラマーヅラしないでね
791デフォルトの名無しさん
2018/06/30(土) 16:34:04.77ID:WiulWXxB 昔はアセンブラ知らずにC++語るなとか言われてたが時代は変わったもんだな
792デフォルトの名無しさん
2018/06/30(土) 16:40:34.19ID:jlw7G6p9 結局どの言語を選べばいいのかわからなくなった
C++?Go?
C++?Go?
793デフォルトの名無しさん
2018/06/30(土) 17:06:44.52ID:NH6TT+Fu Coqを選べばいいと思うよ
794デフォルトの名無しさん
2018/06/30(土) 17:07:23.25ID:QJJEkoJ9 目的に合ったもの
やりたいものをやればいい
やりたいものをやればいい
795デフォルトの名無しさん
2018/06/30(土) 17:07:54.55ID:5+sKgUjT 迷うならGoでいいんでは。
796デフォルトの名無しさん
2018/06/30(土) 17:10:05.48ID:CMs/fWc6 Prolog
797デフォルトの名無しさん
2018/06/30(土) 17:38:54.49ID:RHrrdh8p rustを視野に入れながらgoという選択はない
kotkinかswiftかgoかってなら分かるけど
kotkinかswiftかgoかってなら分かるけど
798デフォルトの名無しさん
2018/06/30(土) 17:52:45.29ID:5+sKgUjT 分からないなら無理してrust使わなくていいって意味じゃろ
799デフォルトの名無しさん
2018/06/30(土) 18:08:54.39ID:9Q6R3Qzj800デフォルトの名無しさん
2018/06/30(土) 18:21:37.09ID:UB7qEnEv クロージャで再帰が出来ないのって所有権的な問題?
801デフォルトの名無しさん
2018/06/30(土) 18:24:45.75ID:cH9c2bse802デフォルトの名無しさん
2018/06/30(土) 18:38:35.11ID:cH9c2bse クロージャの再帰ってこれのこと?
recursion - Is it possible to make a recursive closure in Rust? - Stack Overflow
https://stackoverflow.com/questions/16946888/is-it-possible-to-make-a-recursive-closure-in-rust
recursion - Is it possible to make a recursive closure in Rust? - Stack Overflow
https://stackoverflow.com/questions/16946888/is-it-possible-to-make-a-recursive-closure-in-rust
803デフォルトの名無しさん
2018/06/30(土) 18:57:41.58ID:dTg1EP/S >>802
おー、できた
ありがとう
ローカル関数だと外部変数キャプチャできないし、クロージャだと再帰できないし、
同時にしたいときどうすんのかなーって思ってたから
そんなに使うこともないだろうけど、心に留めときます
おー、できた
ありがとう
ローカル関数だと外部変数キャプチャできないし、クロージャだと再帰できないし、
同時にしたいときどうすんのかなーって思ってたから
そんなに使うこともないだろうけど、心に留めときます
804デフォルトの名無しさん
2018/06/30(土) 22:59:14.25ID:pdhum8J2 >>785
ありがとう。なるほどそういう書き方もあるのか。確かに書き換わるので&mutの方が適切ですね
欲しいのはアドレスなのだからと単にアドレス演算子&を付けていました
unsafe外から任意のアドレスにあるデータへアクセスするにはその部分を関数化するようなのかな
一般的に言うプロパティの読み書きをプログラマブルに出来れば綺麗に書けるけど無理なんだろうなぁ
()無しの関数呼び出しとも言えるけどこれが出来る言語は少ない
ありがとう。なるほどそういう書き方もあるのか。確かに書き換わるので&mutの方が適切ですね
欲しいのはアドレスなのだからと単にアドレス演算子&を付けていました
unsafe外から任意のアドレスにあるデータへアクセスするにはその部分を関数化するようなのかな
一般的に言うプロパティの読み書きをプログラマブルに出来れば綺麗に書けるけど無理なんだろうなぁ
()無しの関数呼び出しとも言えるけどこれが出来る言語は少ない
805デフォルトの名無しさん
2018/06/30(土) 23:04:00.05ID:BB0BPsjY 相変わらず驚き最大の言語だな
806デフォルトの名無しさん
2018/07/01(日) 07:43:42.19ID:XZ+Fcjv4807デフォルトの名無しさん
2018/07/01(日) 08:30:53.21ID:vf9gJxu2 マルチパラダイムの場合、驚き最小の原則の法則に反するかどうかは実装者の責任じゃないだろうか
808デフォルトの名無しさん
2018/07/01(日) 08:46:31.97ID:E4o6QfBe 抽象的なことしか言わなくなったんだよ
機械語のレベルと相性が悪いし
機械語のレベルと相性が悪いし
809デフォルトの名無しさん
2018/07/01(日) 11:50:23.63ID:YY7LPhac >>807
半分はその通りだが、それならc++で良くね?になるぞ。
半分はその通りだが、それならc++で良くね?になるぞ。
810デフォルトの名無しさん
2018/07/01(日) 13:30:01.00ID:TGjVBuJr 日本語でこんなに議論が行われてることに驚いた
811デフォルトの名無しさん
2018/07/01(日) 13:37:40.54 恥ずかしくて外国人には見せられない掲示板だ
812デフォルトの名無しさん
2018/07/01(日) 13:54:17.46ID:YY7LPhac そもそもcの呼び出しはメモリ管理モデルのギャップがあるんだから
どうあがいてもc++のが簡易にできるのは当然なんだよ。
どうあがいてもc++のが簡易にできるのは当然なんだよ。
813デフォルトの名無しさん
2018/07/01(日) 15:26:57.84ID:HnzLcrw0 >>810
このスレは英語推奨だぞ
このスレは英語推奨だぞ
814デフォルトの名無しさん
2018/07/02(月) 01:23:28.76ID:5g9b1rVY >ローカル関数だと外部変数キャプチャできないし、クロージャだと再帰できないし、
ここに関してはクロージャでないものをクロージャと呼ばなければ誰も驚かなかっただろうな。
javaは似非クロージャのことはラムダ式と呼んでるし。
ここに関してはクロージャでないものをクロージャと呼ばなければ誰も驚かなかっただろうな。
javaは似非クロージャのことはラムダ式と呼んでるし。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「1800万円の売り上げゼロに…」中国インバウンドに特化の宿の今 [蚤の市★]
- 「中国人の訪日熱は冷めた」 人気旅行先から日本外れる 14日で自粛呼びかけ1カ月 [蚤の市★]
- クリスマスの「予定なし」54% [少考さん★]
- 【話題】好きな鍋は?! 「寄せ鍋」「キムチ鍋」「水炊き」「もつ鍋」「豆乳鍋」「ちゃんこ鍋」「ごま坦々鍋」「トマト鍋」 [ひぃぃ★]
- 地震 [Hitzeschleier★]
- 【STARTO ENTERTAINMENT】SUPER EIGHTの横山裕、フジ『ドッキリGP』ロケで全治2ヶ月の重傷 [Ailuropoda melanoleuca★]
- 【実況】博衣こよりのえちえち機動戦士ガンダム逆襲のシャア🧪
- 【実況】博衣こよりのえちえち機動戦士ガンダム逆襲のシャア🧪★2
- 日本人「これが中国伝来でない日本独自の伝統工芸!」識者「実はそれも中国から伝来した物なんだよ」ネトウヨ大発狂へ [165981677]
- 官僚が夜中まで頑張って作った答弁書には「台湾有事答えない」と書いてあったのに、高市が答えてしまったことが発覚🤦‍♂ [271912485]
- 茶ぁしばこうや···
- J( 'ー`)し「で、アンタなんで働かないの?」 ワイ👶「理由は2つありまして~」🏡
