Rust Part7

■ このスレッドは過去ログ倉庫に格納されています
2019/07/14(日) 23:31:47.54ID:PySyhRf9
Mozilla発のRust言語のスレ

公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust

Web上の実行環境
https://play.rust-lang.org

前スレ
Rust Part6
http://mevius.5ch.net/test/read.cgi/tech/1532714678/
2019/07/15(月) 14:42:37.66ID:Xch0qlQL
>>1おtsuR
3デフォルトの名無しさん
垢版 |
2019/07/15(月) 17:56:25.13ID:9ryZm2UI
ビルドエラーが出るのですが、なにか解決策はありますか?

Compiling backtrace-sys v0.1.30
error: failed to run custom build command for `backtrace-sys v0.1.30`
process didn't exit successfully: `C:\Programming\Rust_project\socket_programming\target\debug\build\backtrace-sys-159a954e4a82ac78\build-script-build` (exit code: 1)
--- stdout
cargo:rustc-cfg=rbt
TARGET = Some("x86_64-pc-windows-gnu")
OPT_LEVEL = Some("0")
HOST = Some("x86_64-pc-windows-gnu")
CC_x86_64-pc-windows-gnu = None
CC_x86_64_pc_windows_gnu = None
HOST_CC = None
CC = None
CFLAGS_x86_64-pc-windows-gnu = None
CFLAGS_x86_64_pc_windows_gnu = None
HOST_CFLAGS = None
CFLAGS = None
CRATE_CC_NO_DEFAULTS = None
CARGO_CFG_TARGET_FEATURE = Some("fxsr,sse,sse2")
running: "gcc.exe" "-O0" "-ffunction-sections" "-fdata-sections" "-m64" "-I" "src/libbacktrace" "-I"
"C:\\Programming\\Rust_project\\socket_programming\\target\\debug\\build\\backtrace-sys-361946668d7e8f79\\out"
cargo:warning=cc1.exe: sorry, unimplemented: 64-bit mode not compiled in
exit code: 1

--- stderr


error occurred: Command "gcc.exe" "-O0" "-ffunction-sections" "-fdata-sections" "-m64" "-I" "src/libbacktrace" "-I"
"C:\\Programming\\Rust_project\\socket_programming\\target\\debug\\build\\backtrace-sys-361946668d7e8f79\\out" with args "gcc.exe" did not execute successfully (status code exit code: 1).
2019/07/15(月) 18:45:30.04ID:y88H95dP
>cargo:warning=cc1.exe: sorry, unimplemented: 64-bit mode not compiled in

「rust unimplemented: 64-bit mode」で検索すれば?
2019/07/15(月) 23:08:24.27ID:VplRLaA9
32bit mingwで64bitのコンパイルしようとした時のエラーの話だからrust付けると出てこないだろうな。
*-pc-windows-gnuはツールチェーン含んでるから余計な環境でビルドせずに含んでるもの使えばいいんだよ。
2019/07/16(火) 15:23:57.01ID:jMFvbE2f
Rustで
port0.od = 0; // 0b00000000
port0.od.b0 = 1; // 0b00000001
port0.od.b5 = 1; // 0b00100001
port0.od.b0 = 0; // 0b00100000
みたいな実装って出来るんだっけ?
port0.od = 0; // 0b00000000
port0.od.b1(1); // 0b00000010
とか
port0.od = 0; // 0b00000000
port0.od.bitset(6); // 0b01000000
みたいに関数を介せば出来ると思うけど
2019/07/16(火) 19:08:19.57ID:JinG5ry6
bitflags?
8デフォルトの名無しさん
垢版 |
2019/07/16(火) 19:17:48.80ID:HPUIeONI
できない
2019/07/16(火) 20:14:44.06ID:56kV8Vkg
>6 標準では用意されてないけど、名前の通りbitfieldってcrateがあるから試してみて
https://github.com/dzamlo/rust-bitfield
106
垢版 |
2019/07/16(火) 22:09:31.51ID:mK/lXdx0
サンキュ。やっぱ無理か
こういう記法が出来る処理系って少ないですよね。言語レベルで対応しているか=の上書きと括弧無し関数呼び出しが出来るとかじゃないと難しい

どうやって実装しよう
1.読み出し:b0()、書き込み:b0set([0|1])
2.読み出し:bit(n)、書き込み:bitset(n)、bitclear(n)
どちらもスマートじゃないな。Rustだと引数の初期値を取れないから一つの関数で読み書き兼用というのも出来ないし

>>7
機能上はマスクで足りるのですが名前でビットを指定できた方が読みやすいので

>>9
読み出し:bit、書き込み:set_bitと実装されているみたいですね。こんな書き方しかないのかな
2019/07/16(火) 22:19:22.64ID:BU48xkSV
bitmapで良くない?外部クレートなかったっけ?
2019/07/16(火) 22:25:39.33ID:BU48xkSV
間違えたbitsetだ。
2019/07/16(火) 22:30:18.97ID:p9rPVFUU
マクロ使えば見た目は似せられるかも?
bit! {
od = 0;
od.b0 = 1;
}
みたいにしてASTいじって関数呼び出し形式に変換する感じの。
14デフォルトの名無しさん
垢版 |
2019/07/17(水) 00:27:23.47ID:OvMw+j5/
初心者です。苦戦してます。お知恵を貸してください。
仮想端末を含んだ GTK+3 アプリを C++ で作りたいです。
gtkmm だと vte が使えない(?)ので、gtk-3.0 を使って試してます。
サンプルを下のリンクに置きました。

make すると main 最後の return app->run(window); の所で、
[no member named 'run' in '_GtkApplication']とエラーになってしまいます。
この部分は gtkmm の例から持って来たもなので、変える必要があるのですが、
gtk+3 ではどう書くのが正解でしょうか?よろしくお願いします。
あるいは、gtkmm でも vte を使う簡単な方法がもしあれば、教えてください。

Makefile
http://codepad.org/wldK76KY

main_test_3.cc
http://codepad.org/NopgbNXP

sample_3.h
http://codepad.org/BiQt354F

sample_3.cc
http://codepad.org/I1B7AyJL
1514
垢版 |
2019/07/17(水) 00:29:17.38ID:OvMw+j5/
すみません。誤爆しました。14は無視してください。
16デフォルトの名無しさん
垢版 |
2019/07/17(水) 04:37:31.38ID:0r3gt+vm
>>10
配列でいいじゃん
2019/07/17(水) 06:40:54.65ID:miXA5FV0
Rustって、なんでRustっていう名前なんですか
2019/07/17(水) 14:51:22.82ID:HPA9WgE0
>>5
>>4
>>3
64bit のほうでやったらいけました
196
垢版 |
2019/07/17(水) 17:35:45.39ID:rYwqYjNV
>>12
一応no_std予定なので・・・

>>13
スマン。マクロ書いたことないんで理解できないです

>>16
あ、そうか。Index、IndexMutを書けば[]と[]=で読み書きできるようになりそう。やってみよう
2019/07/17(水) 17:43:48.56ID:qxRR1SXW
そういや、マクロって保守性悪くなるんじゃない?
2019/07/17(水) 18:02:15.81ID:v7+Dn7CU
Cみたいに
port0 = BIT5
port0 = BIT2 | BIT4
val = port0 & BIT4
じゃあかんの?
22デフォルトの名無しさん
垢版 |
2019/07/17(水) 21:24:51.41ID:0r3gt+vm
>>19
enum Bit { On, Off }
let byte = [Bit::Off; 8]
こんなんじゃダメけ?
2019/07/17(水) 23:44:22.07ID:7KdSCzvc
VSCodeにrustupとrlsとC++のツールチェーンを入れてcargo new hello --bin
をShift+Ctrl+Bでビルドしてデバッグ実行もできるようにしたのですが、
できたファイルのうちのどれとどれをGitにコミットすれば一番幸せになれるの?
(1) .gitignore
(2) Cargo.toml
(3) Cargo.lock
(4) main.rs
(5) main.exe
(6) main.pdb
(7) ./vscode/task.json
24デフォルトの名無しさん
垢版 |
2019/07/18(木) 05:56:44.97ID:5vDlE6vb
(1) .gitignore

に書かれてないやつ
2019/07/18(木) 22:17:54.85ID:tHz4DA4Z
レスdクス、実はcargo cleanして残ったやつ全部コミットにしといた…

それはそうとして分割コンパイル&リンクまでするには一体どうすれば…orz
実はmake不要でcargoが面倒を見てくれる…?
いやしかし次のサイトでは(VSCode環境ではないが)めっちゃmakefile書いてるし…
ttps://yoshitsugu.net/posts/2019-06-04-haribote-os-in-rust-day3.html
2019/07/18(木) 22:23:30.40ID:cexb+rGl
>>25
普通はmake不要でcargoのみ。そのサイトはどこかから持ってきたアセンブラをnasmするのにmakeつかってるだけっぽいのでrust関係ない。
2019/07/18(木) 23:36:01.21ID:JZFbYeti
Microsoft、安全で高効率のプログラミング言語として「Rust」を高く評価:メモリ破壊
バグを避けるには 2019年07月18日 19時00分 公開
https://www.atmarkit.co.jp/ait/articles/1907/18/news122.html

 Microsoft Security Response Center(MSRC)は2019年7月16日(米国時間)、ソフト
ウェアのセキュリティを確保しつつ、効率性も保ちたい場合、利用可能なシステムプロ
グラミング言語として、「Rust」を高く評価した。

 MSRCによれば、Microsoftが「CVE(共通脆弱性識別子)」を割り当て、修正してきた同社
ソフトウェアのセキュリティ脆弱(ぜいじゃく)性の大部分は1つの要因から起こっている。
開発者がC/C++コードにうっかりメモリ破壊バグを作り込んでしまったことだ。(中略)

C#とC++のメリットを兼ね備えるのは
 C#のような言語が提供するメモリ関連のセキュリティと、C++の効率性を兼ね備えた言語
があれば、開発者にとって理想的だ。MSRCは、両方の要件を満たす最も有望なシステムプロ
グラミング言語として、Mozillaの公式プロジェクトとして進化してきた「Rust」を挙げて
いる。

 さらにMSRCは、業界として真のセキュリティ対策を進めるには、脆弱性に対処するための
ツールやガイダンスを提供するよりもむしろ、「開発者にそもそも脆弱性を発生させない
ための取り組みを行わなければならない」との見解を示した。

 MSRCは、安全性の低いレガシー言語から、モダンで安全なシステムプログラミング言語
への移行を促進するという観点から、Rustをはじめとする安全なシステムプログラミング
言語の活用に向けて、Microsoftが行ってきた取り組みを今後も紹介していくという。
2019/07/19(金) 01:03:06.37ID:GCRlNtpT
ああついにMicrosoftまでMozillaのステマの犠牲に…
296
垢版 |
2019/07/19(金) 03:55:32.80ID:vDoYj/5c
参照しか返せない状態で計算結果を返すって方法ってあるんだっけ。通常なら値を返すように宣言すればすむ話ですが
Indexは参照しか返せないようです。たとえば*addr >> idx & 1の結果を返したいです

>>21
それだとセットとクリアでAND or ORと値の両方を変更せねばならずどちらかを忘れてバグを産む可能性があります

>>22
ググるとそのような例が出てきますね。Rust的に正論だと思いますが元となるハードウェアのマニュアルでは
0:○○になる
1:××になる
みたいな表記が主流に見えます。ここから外れた表現の強制は言語の安全性とは別なところでリスクを抱えるように思います
30デフォルトの名無しさん
垢版 |
2019/07/19(金) 06:34:47.15ID:hHIdkAH0
>>29
ほんなら0と1でプログラム書けやタコスケ
プログラミング言語ってのはハードウェアを抽象化するためにあるんだぞ
2019/07/19(金) 08:09:28.17ID:1jAR2vN7
>>29
and or orと値の両方を変更せねばならずってどういうこと?
326
垢版 |
2019/07/19(金) 11:55:39.50ID:vDoYj/5c
>>31
port0.od = 0b00000000 // 右端を0ビット目とする
port0.od |= 0b00000100 // 2ビット目を1に → 0b00000100
port0.od |= 0b00100000 // 5ビット目を1に → 0b00100100
port0.od &= 0b11111011 // 2ビット目を0に → 0b00100000
ビット列は抽象化できるけどANDとORは一連の処理をラップできない限り手動で変更する必要があります
Cやアセンブラで低レベルの処理をする場合は多用される書き方だと思いますが結構危なっかしいと思います
2019/07/19(金) 12:19:48.14ID:4A+dpHhz
ビット反転するという脳味噌がないって話?
2019/07/19(金) 17:33:35.07ID:ARm0Ww4L
https://www.rust-lang.org/
Chromeの自動翻訳でサイトを見たら吹いてしまった。
「なぜ錆びるの?」って・・・。
2019/07/19(金) 21:01:17.76ID:wRHB2w4J
翻訳しないと読めないやつ
36デフォルトの名無しさん
垢版 |
2019/07/19(金) 21:05:45.56ID:g6GhiJm/
義務教育受けてたらwhy rustの訳だろうなってすぐ分かるよなたとえ翻訳かけてたとしても
376
垢版 |
2019/07/19(金) 21:40:27.14ID:EuFVnXjl
Index、IndexMutが何でこんな仕様なのかと思ったらC++の[]に合わせたのか
C++ぽく使えるがそれ以外の使い方は想定されていないと

結局普通の関数で妥協するしかないのかな。抽象度はCに毛が生えた程度、C++未満?か
どのみち組み込み用に拡張された処理系相当には出来そうにないっぽい
2019/07/19(金) 22:09:36.92ID:0WNLW8m0
>>37
Rustは構文的な自由度あんまりないからね。Scalaが自由度ありすぎて混乱してた反省を踏まえてるのかな、って思ってる。どうしてもやりたいならマクロがあるし、妥当な落とし所では。
2019/07/19(金) 23:31:27.88ID:ysC8gi5X
groovyと同じast変換するマクロもあるしcompiler pluginもあるし拡張は簡単。
2019/07/20(土) 12:57:28.24ID:rHpvZKFq
rayonでzipイテレータを並列処理できますか?
2019/07/20(土) 22:15:20.44ID:AjHY8stg
rust未経験者がwebプログラミングをrustで始めるのってどう思う?
俺の背景としてはocamlを1年ぐらいやってて「Real World OCaml」みたいな定番書を読んで簡単なコンパイラとかVMを作ったっていうレベル

rustでやるモチベーションとしては
・OCaml誰もやってなくて未来が見えない
・最低でもバリアントとパターンマッチが欲しい
・ネイティブが良いからscala/F#は嫌だ

こういう理由

web自体が初心者だからrailsとかのチュートリアルぐらいは先にやっておくつもり
2019/07/20(土) 22:46:21.59ID:wwp1044b
どうも何もWebアプリは言語の選定は大した問題じゃなくて、Webアプリの基礎がわかってるかどうかだぞ
セッション管理、Rest、クライアントスクリプト、見た目とロジックの分離等々
2019/07/21(日) 00:44:57.93ID:Ct/mrgVP
そうは言っても情報量の多さとかで挫折しにくい言語ってのはあるでしょ
Rustは明らかにきついほうだろうけど...
2019/07/21(日) 01:53:54.94ID:iF1O4o5j
>ocamlを1年ぐらいやってて
>コンパイラとかVMを作った
能力的にはRustでWebするのも余裕なんじゃね;
もっとも、SQLインジェクションみたいな文字列解釈やセッション絡みの脆弱性を
思わず作りこんでしまうことはRustでも避けられないから>>42のは真実だと思うが
2019/07/21(日) 22:07:53.58ID:SjT3tKFm
ocaml辺りやる人間にはつまらんぞwebは。
2019/07/25(木) 18:18:35.03ID:lKY1yvEr
rustむずい
gcのついたrustが欲しい
2019/07/25(木) 19:38:42.91ID:5L4KGe8+
存在意義を否定してどうするよ
go使えば
2019/07/25(木) 20:37:16.64ID:lKY1yvEr
最低でもヴァリアントとレコードとパターンマッチがあって全体的に式指向な言語が良い

ocamlがマルチスレッドに対応しててもっと流行ってれば...
scala/f#がネイティブであれば...
haskellが正格評価でもっとパフォーマンスが良ければ...

皆さんc/c++の置き換えとしてrustやってるの?
自分は関数型言語由来の機能が多くてネイティブで動く言語が欲しい
そういう理由でrustに手を出す人って少ないのかな
rust製のcliツールとかめっちゃ多いし、低レイヤのためだけにrustやってる人のほうが少ないんじゃないかな
2019/07/25(木) 21:49:12.38ID:E2feltVj
多いか少ないかが気になる年頃
50デフォルトの名無しさん
垢版 |
2019/07/25(木) 21:54:26.88ID:6TAkPITO
難しいからなんなんだよってかんじ
勉強すればそのうち使えるようになるんだからどうでもいいことじゃん
俺はPHPの置き換えで使ってるけど
2019/07/25(木) 22:40:39.89ID:PNoIdPh5
rust, c++より少しはマシくらいの言語だわな。
実装系含めたらまだc++のがマシになるが。
2019/07/25(木) 22:50:06.02ID:w/leXg8D
C++がましってどのへん?学習コストはどうしようもないとして、学習してしまった今となってはC++に戻る気とか一切しないんだけど。
2019/07/26(金) 15:42:10.78ID:I3xx9WAP
本当にGCが必要か?
https://boats.gitlab.io/blog/post/notes-on-a-smaller-rust/
54デフォルトの名無しさん
垢版 |
2019/07/26(金) 18:13:40.72ID:a+EwZNsG
ながいから要約たのむ
2019/07/26(金) 18:54:02.12ID:EH3/YLuD
初代wiiもいらんだろ
2019/07/26(金) 22:09:00.78ID:6wMSM/4s
>>46
pony。cliツールっていうかcoreutilsとbusyboxの代替実装とかならあるけど。
2019/07/27(土) 01:35:00.73ID:KwccJBez
>>52
cとかより低いレイヤーの言語をバインドしようとした時、より素直。
2019/07/27(土) 10:26:09.62ID:T7BomvTp
お前らが本当に必要としてるのはRustじゃなくて
ziglangなのでは?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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