TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼
簡単なプログラム言語って何?
【信者】C++の問題点【アンチ】
Androidプログラミング質問スレ revision54
Java/C++ VS C# どっちが好きか教えて
[特設]サマータイム対応相談室
ふらっと C#,C♯,C#(初心者用) Part141
Matplotlib でグラフプログラミング【Python】
Perl初心者スレ(マジレス回答)
ハッシュ使うのやめてクラスにしましょう
【Win/Mac/Linux/Android/iOS】 Qt 総合スレ 18

Rust Part7


1 :2019/07/14 〜 最終レス :2020/01/03
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.2ch.sc/test/read.cgi/tech/1532714678/

2 :
>>1おtsuR

3 :
ビルドエラーが出るのですが、なにか解決策はありますか?

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).

4 :
>cargo:warning=cc1.exe: sorry, unimplemented: 64-bit mode not compiled in

「rust unimplemented: 64-bit mode」で検索すれば?

5 :
32bit mingwで64bitのコンパイルしようとした時のエラーの話だからrust付けると出てこないだろうな。
*-pc-windows-gnuはツールチェーン含んでるから余計な環境でビルドせずに含んでるもの使えばいいんだよ。

6 :
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
みたいに関数を介せば出来ると思うけど

7 :
bitflags?

8 :
できない

9 :
>6 標準では用意されてないけど、名前の通りbitfieldってcrateがあるから試してみて
https://github.com/dzamlo/rust-bitfield

10 :
サンキュ。やっぱ無理か
こういう記法が出来る処理系って少ないですよね。言語レベルで対応しているか=の上書きと括弧無し関数呼び出しが出来るとかじゃないと難しい

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

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

>>9
読み出し:bit、書き込み:set_bitと実装されているみたいですね。こんな書き方しかないのかな

11 :
bitmapで良くない?外部クレートなかったっけ?

12 :
間違えたbitsetだ。

13 :
マクロ使えば見た目は似せられるかも?
bit! {
od = 0;
od.b0 = 1;
}
みたいにしてASTいじって関数呼び出し形式に変換する感じの。

14 :
初心者です。苦戦してます。お知恵を貸してください。
仮想端末を含んだ 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

15 :
すみません。誤爆しました。14は無視してください。

16 :
>>10
配列でいいじゃん

17 :
Rustって、なんでRustっていう名前なんですか

18 :
>>5
>>4
>>3
64bit のほうでやったらいけました

19 :
>>12
一応no_std予定なので・・・

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

>>16
あ、そうか。Index、IndexMutを書けば[]と[]=で読み書きできるようになりそう。やってみよう

20 :
そういや、マクロって保守性悪くなるんじゃない?

21 :
Cみたいに
port0 = BIT5
port0 = BIT2 | BIT4
val = port0 & BIT4
じゃあかんの?

22 :
>>19
enum Bit { On, Off }
let byte = [Bit::Off; 8]
こんなんじゃダメけ?

23 :
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 :
(1) .gitignore

に書かれてないやつ

25 :
レスdクス、実はcargo cleanして残ったやつ全部コミットにしといた…

それはそうとして分割コンパイル&リンクまでするには一体どうすれば…orz
実はmake不要でcargoが面倒を見てくれる…?
いやしかし次のサイトでは(VSCode環境ではないが)めっちゃmakefile書いてるし…
ttps://yoshitsugu.net/posts/2019-06-04-haribote-os-in-rust-day3.html

26 :
>>25
普通はmake不要でcargoのみ。そのサイトはどこかから持ってきたアセンブラをnasmするのにmakeつかってるだけっぽいのでrust関係ない。

27 :
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が行ってきた取り組みを今後も紹介していくという。

28 :
ああついにMicrosoftまでMozillaのステマの犠牲に…

29 :
参照しか返せない状態で計算結果を返すって方法ってあるんだっけ。通常なら値を返すように宣言すればすむ話ですが
Indexは参照しか返せないようです。たとえば*addr >> idx & 1の結果を返したいです

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

>>22
ググるとそのような例が出てきますね。Rust的に正論だと思いますが元となるハードウェアのマニュアルでは
0:○○になる
1:××になる
みたいな表記が主流に見えます。ここから外れた表現の強制は言語の安全性とは別なところでリスクを抱えるように思います

30 :
>>29
ほんなら0と1でプログラム書けやタコスケ
プログラミング言語ってのはハードウェアを抽象化するためにあるんだぞ

31 :
>>29
and or orと値の両方を変更せねばならずってどういうこと?

32 :
>>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やアセンブラで低レベルの処理をする場合は多用される書き方だと思いますが結構危なっかしいと思います

33 :
ビット反転するという脳味噌がないって話?

34 :
https://www.rust-lang.org/
Chromeの自動翻訳でサイトを見たら吹いてしまった。
「なぜ錆びるの?」って・・・。

35 :
翻訳しないと読めないやつ

36 :
義務教育受けてたらwhy rustの訳だろうなってすぐ分かるよなたとえ翻訳かけてたとしても

37 :
Index、IndexMutが何でこんな仕様なのかと思ったらC++の[]に合わせたのか
C++ぽく使えるがそれ以外の使い方は想定されていないと

結局普通の関数で妥協するしかないのかな。抽象度はCに毛が生えた程度、C++未満?か
どのみち組み込み用に拡張された処理系相当には出来そうにないっぽい

38 :
>>37
Rustは構文的な自由度あんまりないからね。Scalaが自由度ありすぎて混乱してた反省を踏まえてるのかな、って思ってる。どうしてもやりたいならマクロがあるし、妥当な落とし所では。

39 :
groovyと同じast変換するマクロもあるしcompiler pluginもあるし拡張は簡単。

40 :
rayonでzipイテレータを並列処理できますか?

41 :
rust未経験者がwebプログラミングをrustで始めるのってどう思う?
俺の背景としてはocamlを1年ぐらいやってて「Real World OCaml」みたいな定番書を読んで簡単なコンパイラとかVMを作ったっていうレベル

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

こういう理由

web自体が初心者だからrailsとかのチュートリアルぐらいは先にやっておくつもり

42 :
どうも何もWebアプリは言語の選定は大した問題じゃなくて、Webアプリの基礎がわかってるかどうかだぞ
セッション管理、Rest、クライアントスクリプト、見た目とロジックの分離等々

43 :
そうは言っても情報量の多さとかで挫折しにくい言語ってのはあるでしょ
Rustは明らかにきついほうだろうけど...

44 :
>ocamlを1年ぐらいやってて
>コンパイラとかVMを作った
能力的にはRustでWebするのも余裕なんじゃね;
もっとも、SQLインジェクションみたいな文字列解釈やセッション絡みの脆弱性を
思わず作りこんでしまうことはRustでも避けられないから>>42のは真実だと思うが

45 :
ocaml辺りやる人間にはつまらんぞwebは。

46 :
rustむずい
gcのついたrustが欲しい

47 :
存在意義を否定してどうするよ
go使えば

48 :
最低でもヴァリアントとレコードとパターンマッチがあって全体的に式指向な言語が良い

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

皆さんc/c++の置き換えとしてrustやってるの?
自分は関数型言語由来の機能が多くてネイティブで動く言語が欲しい
そういう理由でrustに手を出す人って少ないのかな
rust製のcliツールとかめっちゃ多いし、低レイヤのためだけにrustやってる人のほうが少ないんじゃないかな

49 :
多いか少ないかが気になる年頃

50 :
難しいからなんなんだよってかんじ
勉強すればそのうち使えるようになるんだからどうでもいいことじゃん
俺はPHPの置き換えで使ってるけど

51 :
rust, c++より少しはマシくらいの言語だわな。
実装系含めたらまだc++のがマシになるが。

52 :
C++がましってどのへん?学習コストはどうしようもないとして、学習してしまった今となってはC++に戻る気とか一切しないんだけど。

53 :
本当にGCが必要か?
https://boats.gitlab.io/blog/post/notes-on-a-smaller-rust/

54 :
ながいから要約たのむ

55 :
初代wiiもいらんだろ

56 :
>>46
pony。cliツールっていうかcoreutilsとbusyboxの代替実装とかならあるけど。

57 :
>>52
cとかより低いレイヤーの言語をバインドしようとした時、より素直。

58 :
お前らが本当に必要としてるのはRustじゃなくて
ziglangなのでは?

59 :
流行ってる言語じゃないとしんどいってocamlで学んだ

60 :
デストラクタ的なのがあればなんでも良い

61 :
>>58
zigはGCあるからダメ

62 :
rustがリアルタイムで使われてるの聞いたこと無いんだけど
どうせgcあるから駄目とか言ってるやつはメモリの開放タイミングが
予測不能でも致命的にならない事しかしてないんだろ?

63 :
Option<char>とStringを結合させたいんですけど、どうすればいいんですか?

64 :
>>63
Option<char>はList<char>の特殊な例と考えて良い
これ、関数型言語の常識

65 :
let x: String = "Hello World!".toString();
s += Some(x)?;
いや知らんけど

66 :
xはcharやったorz,

67 :
リアルタイムでってなに?
目の前でrust書いてくれるってこと?

68 :
致命的(画面が時々固まる)

69 :
>>63
>>64
unwrapしてformat!で結合できましたm(_ _)m

70 :
GCは結局メモリ以外のリソースはまともに管理できなくて、自分でデストラクタ呼ぶはめになるのがつらい

71 :
rustでc++のtemplate<class T, size_t N>struct array{T elm[N];}みたいな事可能なの?

72 :
抜け道はあるかも知れんがジェネリクスでは型しか取れない

73 :
https://github.com/rust-lang/rfcs/blob/master/text/2000-const-generics.md
https://github.com/rust-lang/rust/issues/44580

できるようにする構想はあるっぽい

74 :
まだ実装終わってないけどnightlyなら一応使えるっぽいよ

#![feature(const_generics)]

75 :
高機能なマクロもクロージャも使えるのだから値パラメータなジェネリクスは冗長
なキモス

76 :
C++から機能取り入れるとクソ言語化するからやめてほしい

77 :
んまー値パラメータなクラステンプレートを実現しようとしたらマクロでは済まないのか
そうか

78 :
>>70
GCは全く関係ないがな。
try使うとかwith使うとかgoならdefer使うとかそういう話だろ。
オーバーヘッドガー言い出すやつって
ただまともにメトリックとるスキルがないってだけだろ。

79 :
この国語力はやばい

80 :
>>78
RustやC++のスマートポインタならスコープ抜けたときのデストラクタできれいにリソース解放できるけどGCだとできないね、って話なんだが。
それを部分的に解決する方法としてC#のusingとかがあるけど、関数を跨ぐような寿命の長いリソースには使えない。
try-finallyやGoのdeferなんて、絶対書き忘れてリソースリークするパターンだろ。

81 :
現状静的配列が使い物にならないから const generics は必要だと思う

82 :
いらねーだろ
それでどんだけ速くなんだよ

83 :
ゼロコスト抽象化を標榜してる以上は行列計算をVecでやれとは言えんだろ

84 :
それはzero costの履き違え

85 :
お前にとってはそうなんだろう

86 :
>try-finallyやGoのdeferなんて、絶対書き忘れてリソースリークするパターンだろ。
一理あるが、資源を正しく管理するデストラクタ書くのそんなに楽じゃねーぞ。
舐めすぎだわ。

87 :
>>86
他言語でもさんざん書いたからデストラクタの難しさは知ってるつもりだけど、
ライブラリ作成者が注意深く書いたデストラクタをみんなで使うのと、各自finallyやdeferを正しく実装しましょう、なら前者がましでは?

88 :
ちょっデストラクタで開放処理を書けない資源とかもはやプロセスをkillするしか、

89 :
Vecはただのfat pointerのnewtype patternだからアラインが合えば自動ベクトル化できるんじゃないの?

>>80
gcあるならref objectあるだろ。今どき。

90 :
ていうかデストラクタ自体は問答無用に資源を開放するように作ればよいのであって
そうならないのは上位の設計がおかしい
例外のスローが許されないなどただでさえ制約が厳しいところに小難しいロジックを押し込んでどうするんじゃ…

資源の開放に一定の手順が必要ならそれはデストラクタの中ではなくデストラクタが呼ばれる前にすませるべきだし、
必要な手順が抜かされたみたいなバグのケースの救済までデストラクタの任に負わせるのはおかしい
資源の開放自体にエラーの危険性があるならインスタンスの製造元(ファクトリ)にエラー通知してから死ぬ等の
パターンに従うべき

91 :
>>89
ref objectがなんなのかよく分からないが、GCにリソース解放させる場合の問題はタイミングを制御できないことだと思ってる。
スコープを抜けて回収可能になったからといってすぐ回収されるわけではないから次の確保が早すぎると死ぬ。
まぁたいていの場合問題ないってのはあるけど、本質的にはGCに合ってないと思う。

92 :
すぐに開放されないだけの問題なら開放されるまで待てば良いではありませんか、
さすがに今日日のGCは開放可能な資源の発生と資源の獲得要求がmeetした場合に何もしないほど馬鹿ではないと思われ
(meetのトリガタイミングがなんと2回もある

致命的に問題なのはGCには資源に空きがあるように見えるが、GCが知りようがない上位のロジックで循環依存が生じる場合
ファイルをN個まで同時に複数開けるシステムで、a、bの2個しかファイルが開かれていないんだけど
スレッドAがファイルaを出力し終えた後ファイルbのクローズを待っており、スレッドBはファイルaのクローズを待ってからbを出力せんとしている場合等、

93 :
>>87
俺は後者のがマシだと思うけどね。
資源解放のパターンをオブジェクトで判断するとか自然な設計だと思えんよ。
解放ルーチンなりをシチュエーションごとに用意する方が明らかに自然だわ。

94 :
>>92
実際問題例えばC#のGCはそれくらい馬鹿ではある。
というかファイルハンドルの中身と次のリソース要求を見て、適切に回収してくれるGCってあるの?
メモリ解放のタイミングでたまたまその他のリソースも解放されてるだけでは?

95 :
https://i.imgur.com/l91swsP.jpg

96 :
>>95
グロ

97 :
効率的なTreeの書き方どこかに書いてあったはずなんだけど忘れてしまった

どこにかいてあるかわかるひといますか?

98 :
enumをつかっていたような気がするんですが・・・

99 :
効率的なTreeってなに?
代数的データ型なら普通はsum type(rustのenum)で書くけど。

100 :
???@???
Rustとの戦いにつかれたのでDを触った次第

↑RustでコンパイラとかVM作ってる人のツイート
Rustってそんなに難しい?


100〜のスレッドの続きを読む
【モダン推奨】Perlについての質問箱 50箱目
くだすれDelphi(超初心者用)その55
Visual Studio IDE環境
仮想環境コンテナ総合スレ Docker、Vagrant等
【Alloy】形式言語による仕様記述【VDM】
Javaはもう死んだの?
Excel VBA 質問スレ Part63
monazilla Part 6
Visual Studio Code / VSCode Part4
JavaScript 4
--------------------
日ナレ総合・その15
あるあるwwwwwねーよwww×37のガイドライン
DTM MAGAZINE -12- 【DTMマガジン】
まんがタイムきらら総合150
【厨二】ロレチョン、ヘタレになる【ハーツ】
【画像】100円均の材料で作る保冷剤クーラーがガチで話題にwww ちょっと待て!これもうエアコンいらねえだろ…
【韓国】 世界がうらやみ驚嘆する奇跡の大韓民国70年史、だれが消そうとしているのか/朝鮮日報社説★3[08/16]
劇団美鳳
ゆうきまさみ総合21【新九郎 奔る!】
【MHFZ】モンスターハンターフロンティア Part5762
【WHTW】Total War: WARHAMMER その9【トータルウォー】
【国有地売却】安倍記念小、4月1日開校なのに未認可
【私立大学裁可順】@早稲田A慶應B中央C日大D法政E明治【明治は6番目wwwwwwwwww】
◆好きだけど人に言えない 58◆
【韓国】 外交官経験者66人 「GSOMIA破棄の即時撤回を」 「5200万の国民がハイジャックされた」 [08/28]
宇宙速度の間違いを発見したった
逢田さんで抜いてしまった…
どうしてESETはこんなに叩かれるの??
しんぶん赤旗が変態新聞に☆裸より強いものは無い
【全板集合】2chにある無駄な知識を集めるスレ294
TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼