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:ri7dLd1B115デフォルトの名無しさん
2018/03/08(木) 13:42:39.37ID:XQ95i3sC いくつか言語……?ってなるのが混じってるな
116デフォルトの名無しさん
2018/03/08(木) 17:46:17.85ID:3H4xAb5h >>114
Rust評価高いくてGoは糞って評価だな。
Rust評価高いくてGoは糞って評価だな。
117デフォルトの名無しさん
2018/03/08(木) 20:48:12.88ID:Qr0iRnUQ 絶対一緒に仕事したくないようなコード書きそうな人柄なのがよくわかるのはいいことだね。
118デフォルトの名無しさん
2018/03/09(金) 02:34:49.09ID:C5IjE5Kn スタック使うかヒープ使うか考えなきゃいけないしマジで低級言語だなRust
119デフォルトの名無しさん
2018/03/09(金) 09:09:56.97ID:MtNghMxY 低級プログラミング言語というときの低級は必ずしも蔑む意味とはならない
120デフォルトの名無しさん
2018/03/09(金) 12:35:50.11ID:Awo4Q9T/ >>118は別に蔑んでないと思うが…
121デフォルトの名無しさん
2018/03/09(金) 12:41:07.31ID:X+hGjMr5 118が低級
122デフォルトの名無しさん
2018/03/09(金) 13:10:31.19ID:Awo4Q9T/ どう読んでも>>118は事実を言っただけでrustを誉めても貶してもいないと思うが…
「CはPythonよりも低級言語」これC言語を蔑んでる意味で取るアホなんているの?
「CはPythonよりも低級言語」これC言語を蔑んでる意味で取るアホなんているの?
123デフォルトの名無しさん
2018/03/09(金) 17:25:20.32ID:4MawrcZA 初心者は大体そのように取るよ
124デフォルトの名無しさん
2018/03/09(金) 17:29:38.88ID:Oir5mzi3 はいはいわかったわかった
125デフォルトの名無しさん
2018/03/09(金) 18:10:23.86ID:TjQY2cN8 枯れてる言われて古いんだなと思ってそう
126デフォルトの名無しさん
2018/03/10(土) 02:47:36.63ID:RGnl5SiL 高級言語のcobol最強ですかね
127デフォルトの名無しさん
2018/03/10(土) 04:12:59.75ID:YINDWKAW 蔑んでいるように見えるのはあなた自身が心の奥底でRustを蔑んでいるのです
128デフォルトの名無しさん
2018/03/10(土) 07:06:56.73ID:PbOmOUXH はいはいわかったわかった
129デフォルトの名無しさん
2018/03/11(日) 03:31:49.17ID:UKNdLJMW 1つのstructにいっぱい詰め込むと初期化が面倒なんですが
130デフォルトの名無しさん
2018/03/11(日) 04:15:48.10ID:4b/1QsDB new()用意しとけ
131デフォルトの名無しさん
2018/03/11(日) 13:22:28.79ID:vP34sga0 derive(Default)使えば
132デフォルトの名無しさん
2018/03/11(日) 13:57:51.99ID:91F3yKR+ よくインターネット上の広告で半年でエンジニアに!みたいなのあるけど、インターネット不得手、プログラム未経験者が真剣に半年頑張れば本当にそんなこと可能なんですか?
可能ならその理由はなんでしょう?人材が足りていないというのは存じ上げていますが
可能ならその理由はなんでしょう?人材が足りていないというのは存じ上げていますが
133デフォルトの名無しさん
2018/03/11(日) 13:58:22.81ID:91F3yKR+ ごめんなさい誤爆しました
134デフォルトの名無しさん
2018/03/11(日) 14:13:04.94ID:zWe+i43K >>132
言われたことやるだけなら可能じゃね?
言われたことやるだけなら可能じゃね?
135デフォルトの名無しさん
2018/03/18(日) 21:30:14.47ID:jQGugCpv >>8
今更だけどこれ書いた奴もブコメした奴も誰一人rustまともに使ったこと無さそうで草
今更だけどこれ書いた奴もブコメした奴も誰一人rustまともに使ったこと無さそうで草
136デフォルトの名無しさん
2018/03/19(月) 15:39:12.03ID:dH7nnHk9137デフォルトの名無しさん
2018/03/19(月) 19:45:41.61ID:ahbMAcYG 俺の技量不足なんだろうけどmutmut地獄は確かにわかる
138デフォルトの名無しさん
2018/03/19(月) 20:01:00.05ID:dH7nnHk9139デフォルトの名無しさん
2018/03/19(月) 20:11:12.51ID:bbBltail C++erだったのでconst地獄はむしろ慣れてるので歓迎
140デフォルトの名無しさん
2018/03/19(月) 20:37:55.38ID:+FMR/dfx 一方、記述の美しさを重視する Nim では let と var に分けた
141デフォルトの名無しさん
2018/03/19(月) 21:23:39.57ID:dH7nnHk9 Nimは引数を可変にしようとすると下記のようになる。
proc test(x: var string): string =
x = x & " world"
return x
var x = "hello"
let y = test(x)
echo y
関数宣言で引数にvarと書かなきゃ可変にできないんじゃRustとそれほど手間は変わらない
それに、宣言はvarと書かせるクセに呼び出し側がtest(var x)じゃなくてtest(x)となるのが解せない
これじゃ呼び出し側を見ただけじゃxが不変か可変か判断できない
C++と同じ類の過ちを犯してる
簡潔ではあるかもしれないが全然美しくない(美しいの定義によるが…)
https://play.nim-lang.org/?gist=9e8b6b6059cf8640f6c71fd2075b07c8
proc test(x: var string): string =
x = x & " world"
return x
var x = "hello"
let y = test(x)
echo y
関数宣言で引数にvarと書かなきゃ可変にできないんじゃRustとそれほど手間は変わらない
それに、宣言はvarと書かせるクセに呼び出し側がtest(var x)じゃなくてtest(x)となるのが解せない
これじゃ呼び出し側を見ただけじゃxが不変か可変か判断できない
C++と同じ類の過ちを犯してる
簡潔ではあるかもしれないが全然美しくない(美しいの定義によるが…)
https://play.nim-lang.org/?gist=9e8b6b6059cf8640f6c71fd2075b07c8
142デフォルトの名無しさん
2018/03/19(月) 21:32:11.25ID:dH7nnHk9 あとRustの場合はそもそもmutは出来るだけ使うなという方針だから
mutの記述が面倒なのはワザとやってるという点もあるし…
mutの記述が面倒なのはワザとやってるという点もあるし…
143デフォルトの名無しさん
2018/03/20(火) 08:39:12.91ID:iuzVSye9 なるほど
144デフォルトの名無しさん
2018/03/20(火) 14:11:19.46ID:J0Id73NT > これじゃ呼び出し側を見ただけじゃxが不変か可変か判断できない
珍しいご意見ですよね。
珍しいご意見ですよね。
145デフォルトの名無しさん
2018/03/20(火) 16:01:11.80ID:/+MVnq9/ >>144
よくよく考えるとRustも呼び出し側にmut付けること自体は必須ではないんだよな
所有権を借用するために大抵は&mutを書かされるってだけで…
渡す変数の型がもともと&mut Tだった場合は書かなくてもいい…
Rustの場合は呼び出し側で&mut書く羽目になる経験が多かったので
俺が勝手に「可変にしたければmutを絶対に書かないといけない」という勘違いをしていただけか…
でも、書かされた方が読むときには分かりやすいので個人的にはこっちの方が好き
俺自身がNimはどうしても好きになれなくて不満点を挙げたつもりが自ら墓穴を掘ってしまった感じだな
一般的にはNimの方がよっぽど簡潔で美しいのかもしれない…
ただ単に俺の感性の方が狂ってるだけっぽいな…
よくよく考えるとRustも呼び出し側にmut付けること自体は必須ではないんだよな
所有権を借用するために大抵は&mutを書かされるってだけで…
渡す変数の型がもともと&mut Tだった場合は書かなくてもいい…
Rustの場合は呼び出し側で&mut書く羽目になる経験が多かったので
俺が勝手に「可変にしたければmutを絶対に書かないといけない」という勘違いをしていただけか…
でも、書かされた方が読むときには分かりやすいので個人的にはこっちの方が好き
俺自身がNimはどうしても好きになれなくて不満点を挙げたつもりが自ら墓穴を掘ってしまった感じだな
一般的にはNimの方がよっぽど簡潔で美しいのかもしれない…
ただ単に俺の感性の方が狂ってるだけっぽいな…
146デフォルトの名無しさん
2018/03/20(火) 16:05:30.99ID:ck80uwiX そんな珍しくもない気もするが
147デフォルトの名無しさん
2018/03/20(火) 21:24:24.10ID:kx/m1AUo 俺もそんな珍しくもないと思う
148デフォルトの名無しさん
2018/03/20(火) 23:15:30.72ID:RYTCq15b 「変数」が値に名前を付けたイメージに人とメモリ領域に名前を付けたイメージの人と
149デフォルトの名無しさん
2018/03/21(水) 00:20:42.31ID:mtmyqFMA データがメモリのスタック領域ヒープ領域あるいは別の領域などどこに記憶されるのかという低レベルなことを考慮しながらプログラミングしなきゃならない
変数とは何かと言えば
スタック領域の特定のメモリ番地に名前をつける行為でしかなく
所有権の委譲って何かと思えばそのメモリ番地の名前を変える行為でしかない
クソ
変数とは何かと言えば
スタック領域の特定のメモリ番地に名前をつける行為でしかなく
所有権の委譲って何かと思えばそのメモリ番地の名前を変える行為でしかない
クソ
150デフォルトの名無しさん
2018/03/21(水) 21:34:47.63ID:JvyRf7uK 分かりやすい説明だね
151デフォルトの名無しさん
2018/03/23(金) 00:30:01.20ID:DIa3/8ef GBAのプログラムを書いてみたいな。どうせならRustでやってみるか
ARMポートあったよね。Thumbコードも吐けるのかな
とか思ってググっていたら先人がいた。考えることはみんな一緒かw
ARMポートあったよね。Thumbコードも吐けるのかな
とか思ってググっていたら先人がいた。考えることはみんな一緒かw
152デフォルトの名無しさん
2018/03/23(金) 08:40:36.80ID:yG5SnYrv Unityが北欧のニートから生まれたって話を聞いて
Rustでゲームエンジン作ればワンチャンあるんじゃないかと思い始めてきた。
Rustでゲームエンジン作ればワンチャンあるんじゃないかと思い始めてきた。
153デフォルトの名無しさん
2018/03/23(金) 08:44:26.71ID:0DDzAR5J 気のせい。
154デフォルトの名無しさん
2018/03/23(金) 10:01:19.78ID:+d3L/XtB あるかもね
155デフォルトの名無しさん
2018/03/24(土) 02:46:18.89ID:Q4O/QWqD unsafe使い始めたらCのがやっぱ楽じゃね?ってことにすぐなる。
156デフォルトの名無しさん
2018/03/24(土) 07:57:37.67ID:AYaIp/Or そしてメモリ周りのバグで悩まされた時にやっぱRustで書いときゃ良かったってなる
157デフォルトの名無しさん
2018/03/24(土) 11:41:10.67ID:lA18Hk/y バグなんてメモリに限ったことじゃないのにね
158デフォルトの名無しさん
2018/03/24(土) 12:51:11.00ID:6E9wdkyi 要因の種類が減るのは良いことだ
159デフォルトの名無しさん
2018/03/24(土) 19:57:38.34ID:Hl/X5tEX rust未経験者なんだけど、この言語ってweb開発には向いてないの?
goより高度なこと出来るならweb開発も全然苦じゃないように思うんだけど
何かしらweb開発に向いてない要素あんるんかな?
goより高度なこと出来るならweb開発も全然苦じゃないように思うんだけど
何かしらweb開発に向いてない要素あんるんかな?
160デフォルトの名無しさん
2018/03/24(土) 20:11:16.11ID:lcHhOSrB DOMいじれんの?
161デフォルトの名無しさん
2018/03/24(土) 20:22:46.33ID:Hl/X5tEX ごめん。聞き方がふんわりしてた。
webのバックグラウンドで動いてるrestAPIサーバに向いてない要因は何かあるのかな?
SPAとかマイクロサービスとかの構成でjavaとかgoとかの代わりに成り得るのかなって。
webのバックグラウンドで動いてるrestAPIサーバに向いてない要因は何かあるのかな?
SPAとかマイクロサービスとかの構成でjavaとかgoとかの代わりに成り得るのかなって。
162デフォルトの名無しさん
2018/03/24(土) 20:22:52.79ID:6E9wdkyi 一応WebAssemblyで吐けばRustのコードとJavaScriptのコードを混在出来るけど
軽く触っただけなんでデバッグなどの開発環境の事は未知数
軽く触っただけなんでデバッグなどの開発環境の事は未知数
163デフォルトの名無しさん
2018/03/24(土) 20:22:54.62ID:eKuOy/a9 >>160
無理
無理
164デフォルトの名無しさん
2018/03/24(土) 20:25:44.26ID:bGodUaM+ サーバ側でしょ?言語としては代わりになるだろうけどwebに向いてる部分てのが何を指してるかによるんじゃない
165デフォルトの名無しさん
2018/03/24(土) 20:33:09.05ID:Hl/X5tEX hello world出たからもう初心者と言っても過言ではない。。
>>164
個人的には静的言語ならどれも大差ないと思ってるんだけど、
その方面では全然注目されてないように見えたから何か原因があるのかなって。
>>164
個人的には静的言語ならどれも大差ないと思ってるんだけど、
その方面では全然注目されてないように見えたから何か原因があるのかなって。
166デフォルトの名無しさん
2018/03/24(土) 20:36:37.33ID:6E9wdkyi >>161
以前Goでサーバーサイド書いたことあって、バイナリ一つデプロイするお手軽さがとにかく良かった
といってもほんとに小機能で、WAFにEcho使って静的ファイル(CSS・画像)とか
レスポンスにDBから引っ張ったJSON返すRESTfulの出来損ないみたいのだけど
開発はWindows、デプロイ先がCentOSだったんだけど、
WindowsでCentOS用のバイナリ吐けるし、プロセスの再起動監視も今はDocker-composeがやってくれてるし(restart: always オプション)
Windowsで開発してPUSH、CIツールがCentOS用にバイナリ吐いて、CentOSではバイナリ受け取ったら
$ docker-compose down && docker-compose up -d --build
叩くだけでデプロイ完了っていう超絶お手軽、もちろんデプロイはAnsibleやItamaeで自動化しても良い
以前Goでサーバーサイド書いたことあって、バイナリ一つデプロイするお手軽さがとにかく良かった
といってもほんとに小機能で、WAFにEcho使って静的ファイル(CSS・画像)とか
レスポンスにDBから引っ張ったJSON返すRESTfulの出来損ないみたいのだけど
開発はWindows、デプロイ先がCentOSだったんだけど、
WindowsでCentOS用のバイナリ吐けるし、プロセスの再起動監視も今はDocker-composeがやってくれてるし(restart: always オプション)
Windowsで開発してPUSH、CIツールがCentOS用にバイナリ吐いて、CentOSではバイナリ受け取ったら
$ docker-compose down && docker-compose up -d --build
叩くだけでデプロイ完了っていう超絶お手軽、もちろんデプロイはAnsibleやItamaeで自動化しても良い
167デフォルトの名無しさん
2018/03/24(土) 20:51:06.97ID:Hl/X5tEX hello worldが10個出た。
>>166
goのシングルバイナリ良さそうだよね。
全然分かってないんだけど、rustでもちょびっと頑張れば
クロスコンパイルできるって認識なんだけど間違ってるのかな?
>>166
goのシングルバイナリ良さそうだよね。
全然分かってないんだけど、rustでもちょびっと頑張れば
クロスコンパイルできるって認識なんだけど間違ってるのかな?
168デフォルトの名無しさん
2018/03/24(土) 21:09:10.81ID:6E9wdkyi Rust経験浅いんで良く分かってない、一応nickelってWAFあるしrustupでコンパイル出来るから土台はあるけど
RustってわりとカジュアルにC製のライブラリをdllとして利用してるからそこが未知数
まあそれらのライブラリを使わなきゃいいんだろうけど
RustってわりとカジュアルにC製のライブラリをdllとして利用してるからそこが未知数
まあそれらのライブラリを使わなきゃいいんだろうけど
169デフォルトの名無しさん
2018/03/24(土) 21:09:38.20ID:6E9wdkyi rustupでクロスコンパイル
170デフォルトの名無しさん
2018/03/24(土) 21:17:38.55ID:Hl/X5tEX171デフォルトの名無しさん
2018/03/24(土) 21:29:23.70ID:LUxFSHaJ >>165
そういう観点なら学習コストが高いのがじゃくてんだと思う
そういう観点なら学習コストが高いのがじゃくてんだと思う
172デフォルトの名無しさん
2018/03/24(土) 21:45:47.85ID:glWbEBFl >>165
個人的にはGCありなしの差が大きい気はする。
特にweb系はGCがあって当たり前だから
急にlifetimeとか言われても…ってなりそうな。
C/C++だと結局脳内でlifetime管理してるから
そこの学習コストは相対的には低い。
個人的にはGCありなしの差が大きい気はする。
特にweb系はGCがあって当たり前だから
急にlifetimeとか言われても…ってなりそうな。
C/C++だと結局脳内でlifetime管理してるから
そこの学習コストは相対的には低い。
173デフォルトの名無しさん
2018/03/24(土) 22:12:42.54ID:AYaIp/Or174165
2018/03/24(土) 23:05:16.49ID:YaLUXLZ4 >>171
>>172
なるほど。確かにWEB系だと短い納期+人海戦術で乗り切ることも多いから
そういうのには辛そうだね。でも言語仕様的にWEB(の裏のサービス)が不得意という
訳では無さそうだから、細く長くやるようなサービスなら導入もアリっちゃアリという認識でいいのかな。
>>173
そだね。なんにもわからんわw っていうかWEBやっててGCであんまり困ったことないかも知れん。
困ったことがないことに起因して難易度が上がった言語を「使いたいです」って提案するにはちょっと強引さが必要そうやね。
今、初心者用の練習問題やってるんだけどメモリの管理なんて全然出てこない。
みんなどうやってRUSTの勉強してるの?やっぱり何か動くもの作ってみるのが早いかな?
>>172
なるほど。確かにWEB系だと短い納期+人海戦術で乗り切ることも多いから
そういうのには辛そうだね。でも言語仕様的にWEB(の裏のサービス)が不得意という
訳では無さそうだから、細く長くやるようなサービスなら導入もアリっちゃアリという認識でいいのかな。
>>173
そだね。なんにもわからんわw っていうかWEBやっててGCであんまり困ったことないかも知れん。
困ったことがないことに起因して難易度が上がった言語を「使いたいです」って提案するにはちょっと強引さが必要そうやね。
今、初心者用の練習問題やってるんだけどメモリの管理なんて全然出てこない。
みんなどうやってRUSTの勉強してるの?やっぱり何か動くもの作ってみるのが早いかな?
175デフォルトの名無しさん
2018/03/24(土) 23:11:45.93ID:gYQh0+lt 簡単なApp serverならrocketが楽だった
早くstableで動くようになってほしい
早くstableで動くようになってほしい
176デフォルトの名無しさん
2018/03/24(土) 23:49:05.34ID:AYaIp/Or177デフォルトの名無しさん
2018/03/24(土) 23:59:12.17ID:Z79Bg+7E GCは甘え。
プロなら自分で管理するべき。
プロなら自分で管理するべき。
178デフォルトの名無しさん
2018/03/25(日) 01:19:49.91ID:8WSI8ZZL GC無い言語でもファイルディスクリプタの解放は自前でする必要あるしリークの根幹はどっちも変わらんと思うけどな
むしろGC無い言語の方が循環参照の時の解放が面倒、C++でもweak_ptr使う必要出てきたり
むしろGC無い言語の方が循環参照の時の解放が面倒、C++でもweak_ptr使う必要出てきたり
179デフォルトの名無しさん
2018/03/25(日) 01:28:22.61ID:4Rittzre c++はやっぱraiiが便利。
gcあったって結局outofmemoryerrorになるなからなぁ。
だったらrustのようにコンパイラが所有権やライフタイムをチェックしてくれるのはいいと思う。
けど学習障壁高過ぎとも思う。
gcあったって結局outofmemoryerrorになるなからなぁ。
だったらrustのようにコンパイラが所有権やライフタイムをチェックしてくれるのはいいと思う。
けど学習障壁高過ぎとも思う。
180デフォルトの名無しさん
2018/03/25(日) 01:43:12.83ID:U5SlEUJl Nodeのメモリーリークはみんな苦戦してるみたいだけど。
181デフォルトの名無しさん
2018/03/25(日) 01:51:32.26ID:8WSI8ZZL Nodeは全部グローバル変数にするのが悪いんや
182デフォルトの名無しさん
2018/03/25(日) 02:05:56.01ID:BP/bYIjb183デフォルトの名無しさん
2018/03/25(日) 02:09:49.87ID:U5SlEUJl エラーにならないことが多すぎる。
忖度しすぎ言語の称号を与えたい。
忖度しすぎ言語の称号を与えたい。
184デフォルトの名無しさん
2018/03/25(日) 02:10:42.60ID:U5SlEUJl Nodeの問題点を一言でいえば、Javascript。
185デフォルトの名無しさん
2018/03/25(日) 03:01:01.34ID:wEE2niQx >>174
コストかけられるなら規模の大小関わらず大アリだよ
コストかけられるなら規模の大小関わらず大アリだよ
186174
2018/03/25(日) 08:53:35.72ID:tMB2K7Zl187デフォルトの名無しさん
2018/03/25(日) 09:17:52.51ID:2sZ1RJA+ >>182
イベントハンドラ解除は他言語でも明示的に書く必要ある
だけどクラスのデストラクタ・ファイナライザに書いといて各スコープで変数の寿命をちゃんと管理するコーディングの基本を守ってるだけで問題ないと言える
ここはRAII使えるC++やRustが最強、なんせ何も書かなくてもスコープから外れたらそれぞれデストラクタ・Dropを呼んでくれるんだし
次点でC#のDisposeとusingなどの専用構文、Javaはtry..finallyあるから及第点
でもグローバル変数だとそんなの働かない、プログラマが仕様とにらめっこしながらリークに気を使わないといけない、めんどい
イベントハンドラ解除は他言語でも明示的に書く必要ある
だけどクラスのデストラクタ・ファイナライザに書いといて各スコープで変数の寿命をちゃんと管理するコーディングの基本を守ってるだけで問題ないと言える
ここはRAII使えるC++やRustが最強、なんせ何も書かなくてもスコープから外れたらそれぞれデストラクタ・Dropを呼んでくれるんだし
次点でC#のDisposeとusingなどの専用構文、Javaはtry..finallyあるから及第点
でもグローバル変数だとそんなの働かない、プログラマが仕様とにらめっこしながらリークに気を使わないといけない、めんどい
188デフォルトの名無しさん
2018/03/25(日) 10:33:04.02ID:BP/bYIjb >>186
Cさえやったことないんじゃメモリ管理について説明するのは難しいな
ざっくり説明すると
C言語ではmalloc, freeを使ってプログラマが自力でメモリ管理を行う
よって、きちんとメモリ管理ができていない場合は実行時にバグになる。
対して、GCありの言語は実行時にGCがバックグラウンドで動いて自動でメモリ管理を行ってくれる
メモリ管理は実行時に自動で行われるのでプログラマは基本的にメモリ管理を行う必要はない
ただし、GCの挙動をしっかり理解していないとメモリリークのバグになることもある
そして、Rustはメモリ管理をコンパイラがコンパイル時に行う
つまり、メモリ管理ができていない場合はコンパイルエラーになる
コンパイラが正しくメモリ管理を行うためにRustには
所有権・借用・ライフタイムというルールが存在する
このルールを守らないとコンパイルが通らないため絶対に理解する必要があるが
このルールをきちんと理解してコードを書くのがなかなかに難しい
それと、このルールを完璧に遵守しようとすると循環参照さえ出来なくなる
なので循環参照等の少し複雑なことをやろうとした場合は
標準ライブラリとして用意されているRc, Weak, RefCell等の使い方も知る必要がある
因みにRc, Weak, RefCellの中身ではunsafeコードが多用されていている
unsafeコードの中ではルールを無視できる代わりにコンパイラがチェックを行わない
つまり、unsafeの中だけはCと同じように自力でメモリ管理する必要がある
だからこの言語は他言語と比べて学習コストが圧倒的に高い
Cさえやったことないんじゃメモリ管理について説明するのは難しいな
ざっくり説明すると
C言語ではmalloc, freeを使ってプログラマが自力でメモリ管理を行う
よって、きちんとメモリ管理ができていない場合は実行時にバグになる。
対して、GCありの言語は実行時にGCがバックグラウンドで動いて自動でメモリ管理を行ってくれる
メモリ管理は実行時に自動で行われるのでプログラマは基本的にメモリ管理を行う必要はない
ただし、GCの挙動をしっかり理解していないとメモリリークのバグになることもある
そして、Rustはメモリ管理をコンパイラがコンパイル時に行う
つまり、メモリ管理ができていない場合はコンパイルエラーになる
コンパイラが正しくメモリ管理を行うためにRustには
所有権・借用・ライフタイムというルールが存在する
このルールを守らないとコンパイルが通らないため絶対に理解する必要があるが
このルールをきちんと理解してコードを書くのがなかなかに難しい
それと、このルールを完璧に遵守しようとすると循環参照さえ出来なくなる
なので循環参照等の少し複雑なことをやろうとした場合は
標準ライブラリとして用意されているRc, Weak, RefCell等の使い方も知る必要がある
因みにRc, Weak, RefCellの中身ではunsafeコードが多用されていている
unsafeコードの中ではルールを無視できる代わりにコンパイラがチェックを行わない
つまり、unsafeの中だけはCと同じように自力でメモリ管理する必要がある
だからこの言語は他言語と比べて学習コストが圧倒的に高い
189デフォルトの名無しさん
2018/03/25(日) 10:35:30.44ID:BP/bYIjb 「ざっくり」と言っておきながら気付けばそれなりの長文になってるな…
190デフォルトの名無しさん
2018/03/25(日) 10:49:11.63ID:130KAu9X なんで聞かれてもいないことを長文で答えるのか
プログラマにはありがちだけど
プログラマにはありがちだけど
191デフォルトの名無しさん
2018/03/25(日) 10:51:36.32ID:GhdgZmXr >なので循環参照等の少し複雑なことをやろうとした場合は
>標準ライブラリとして用意されているRc, Weak, RefCell等の使い方も知る必要がある
>因みにRc, Weak, RefCellの中身ではunsafeコードが多用されていている
>unsafeコードの中ではルールを無視できる代わりにコンパイラがチェックを行わない
>つまり、unsafeの中だけはCと同じように自力でメモリ管理する必要がある
>だからこの言語は他言語と比べて学習コストが圧倒的に高い
この辺考えたら結局C++で、できる限りスマートポインタ使うってのと大して変わらなくね?
て話になりそう。
>標準ライブラリとして用意されているRc, Weak, RefCell等の使い方も知る必要がある
>因みにRc, Weak, RefCellの中身ではunsafeコードが多用されていている
>unsafeコードの中ではルールを無視できる代わりにコンパイラがチェックを行わない
>つまり、unsafeの中だけはCと同じように自力でメモリ管理する必要がある
>だからこの言語は他言語と比べて学習コストが圧倒的に高い
この辺考えたら結局C++で、できる限りスマートポインタ使うってのと大して変わらなくね?
て話になりそう。
192デフォルトの名無しさん
2018/03/25(日) 11:32:48.19ID:MQLp3NAe ライブラリの中でunsafe使ってたからといって、そのライブラリ使用したコード全てがunsafeになる訳でなし
気にし過ぎじゃないか
気にし過ぎじゃないか
193デフォルトの名無しさん
2018/03/25(日) 12:12:47.18ID:2sZ1RJA+ いやなるで
unsafe内Cのリソース確保を呼んだなら同じく解放処理も呼ばないとリークする
unsafe内Cのリソース確保を呼んだなら同じく解放処理も呼ばないとリークする
194デフォルトの名無しさん
2018/03/25(日) 12:21:31.84ID:5S2tvSOb195186
2018/03/25(日) 13:06:55.41ID:tMB2K7Zl196デフォルトの名無しさん
2018/03/25(日) 13:44:46.25ID:NiWlHtrf197デフォルトの名無しさん
2018/03/25(日) 14:35:43.51ID:wEE2niQx198デフォルトの名無しさん
2018/03/25(日) 14:38:16.26ID:ndR60cG+ java10出たってどうせ現場じゃ使わせてくれないんだろ?
んで未だにstrutsとかオレオレフレームワーク強要するんだろ?
んで未だにstrutsとかオレオレフレームワーク強要するんだろ?
199デフォルトの名無しさん
2018/03/25(日) 16:39:02.18ID:I+zotbSu WindowsでRust使っている人ってほとんどいないんだろうな
rustupを実行する前にVC++をインスコしろとか書いてあるし
rustupを実行する前にVC++をインスコしろとか書いてあるし
200デフォルトの名無しさん
2018/03/26(月) 00:20:12.61ID:D5Wnx0sa 生で動かす組み込み系の情報収集をしているんだけど半年前よりはだいぶ増えた感があるけどまだまだ少ないなぁ
特にRust以外のツールとCargoの連携について説明されている記事はほとんど見あたらない
ローレベルではユーザーツールやアセンブラ、リンカとビルドシステムの連携は必須だからな
Cargo前提のRustだとシェルスクリプトやバッチファイルでビルドというわけにも行かないし(それらに必要な情報も同じく少ない)
既成のCライブラリやクレートを使う記事はちらほらあるけどそれらが使えないケースだと参考にならない
このへんで役立ちそうな記事って今のところこれくらいしか見つけられていない
ttps://nkon.github.io/Rust-embedded/
もっともRust抜きでも最近は高レベルのフレームワークを使っていたりOS上での動作だったりするからローレベルの情報は減少傾向だけど
特にRust以外のツールとCargoの連携について説明されている記事はほとんど見あたらない
ローレベルではユーザーツールやアセンブラ、リンカとビルドシステムの連携は必須だからな
Cargo前提のRustだとシェルスクリプトやバッチファイルでビルドというわけにも行かないし(それらに必要な情報も同じく少ない)
既成のCライブラリやクレートを使う記事はちらほらあるけどそれらが使えないケースだと参考にならない
このへんで役立ちそうな記事って今のところこれくらいしか見つけられていない
ttps://nkon.github.io/Rust-embedded/
もっともRust抜きでも最近は高レベルのフレームワークを使っていたりOS上での動作だったりするからローレベルの情報は減少傾向だけど
201デフォルトの名無しさん
2018/03/26(月) 01:29:55.31ID:TdhbSc50202デフォルトの名無しさん
2018/03/26(月) 01:31:01.61ID:TdhbSc50 >>201
ごめん、募集終了してたわw
ごめん、募集終了してたわw
203デフォルトの名無しさん
2018/03/27(火) 09:28:53.61ID:OlyQwcXt 集まったのかな?それとも応募が無かったか。
どちらにせよ気概は応援する
どちらにせよ気概は応援する
204デフォルトの名無しさん
2018/03/27(火) 09:38:34.01ID:e5+YaH9t 会社的にゲームのサーバーサイドかな
C++からの乗り換えならビルド時間の削減が一番効果あるかもね
C++からの乗り換えならビルド時間の削減が一番効果あるかもね
205デフォルトの名無しさん
2018/03/27(火) 13:51:08.35ID:7OwU1Hvz ニコ生は、Rust で、各サーバーに分かれているシステムを、
統合しようとしているらしい
Rust, Elixir は注目されてる
統合しようとしているらしい
Rust, Elixir は注目されてる
206デフォルトの名無しさん
2018/03/27(火) 14:06:18.97ID:k3vzHZG7 >>200
rustでおもちゃのOS書いてる(た)んだけどローレベルな部分にも適してるみたいなことを謳ってる割にcargoがほんとクソなんだよなぁ
rustでおもちゃのOS書いてる(た)んだけどローレベルな部分にも適してるみたいなことを謳ってる割にcargoがほんとクソなんだよなぁ
207デフォルトの名無しさん
2018/03/27(火) 21:01:56.04ID:14Lqu+tl >>206
またcargoがクソって話か…別にそれほど使いづらいとは思わないんだけど…
(使い方に関する情報が少ないという意味で使いづらいという意見なら分かるんだけど…)
どこら辺がクソと思ってて、どうなってれば満足なわけ?
なんだか実現不可能なくらい賢いツールを「ないものねだり」してるように聞こえるんだよね…
というわけで、実在するツールで最も理想に近いツール(もちろん他言語のパッケージ管理ツール)の例を挙げてくれる?
またcargoがクソって話か…別にそれほど使いづらいとは思わないんだけど…
(使い方に関する情報が少ないという意味で使いづらいという意見なら分かるんだけど…)
どこら辺がクソと思ってて、どうなってれば満足なわけ?
なんだか実現不可能なくらい賢いツールを「ないものねだり」してるように聞こえるんだよね…
というわけで、実在するツールで最も理想に近いツール(もちろん他言語のパッケージ管理ツール)の例を挙げてくれる?
208デフォルトの名無しさん
2018/03/27(火) 21:18:04.54ID:IpDwkilL Rustのwebフレームワークでなんとなく一番使えそうなRocketとかいうのがnightlyでしか動かない
209デフォルトの名無しさん
2018/03/27(火) 21:25:14.30ID:OIszsbzb 組み込みでパッケージ管理ツールの需要はあまり無いはず。ビルド管理ツールの方が重要
しかも言語の垣根を越えて使いやすい奴
システムプログラミング用を謳っているんだから
「Cやアセンブラで生で動くプログラムを書いたことがあるんだけどRustに興味がある」
位の人を対象にしたチュートリアル的な物が欲しいな。もちろんある程度実践的な内容で
そういえば調べている中でLチカのウェイトにビジーループを使っているコーディング例がいくつも出てきた
自分はタイマと割り込みを使うのが普通だと思っていたんだけど(勉強するという意味でも)最近は違うのかな?
しかも言語の垣根を越えて使いやすい奴
システムプログラミング用を謳っているんだから
「Cやアセンブラで生で動くプログラムを書いたことがあるんだけどRustに興味がある」
位の人を対象にしたチュートリアル的な物が欲しいな。もちろんある程度実践的な内容で
そういえば調べている中でLチカのウェイトにビジーループを使っているコーディング例がいくつも出てきた
自分はタイマと割り込みを使うのが普通だと思っていたんだけど(勉強するという意味でも)最近は違うのかな?
210デフォルトの名無しさん
2018/03/27(火) 21:43:56.53ID:14Lqu+tl ビルド管理ツールでも良いから、とりあえず、使いやすいツールの例を挙げて欲しんだけど…
「〇〇というツールがあって、××が出来て便利。それに比べてcargoは…」みたいなさぁ…
「使いやすい奴」とだけ書かれても「使いやすい」の基準がさっぱり分からん
「〇〇というツールがあって、××が出来て便利。それに比べてcargoは…」みたいなさぁ…
「使いやすい奴」とだけ書かれても「使いやすい」の基準がさっぱり分からん
211デフォルトの名無しさん
2018/03/27(火) 22:08:40.15ID:H//ajCL2 >>207
ごく普通に使うぶんには俺もディスるほどではないとは思うよ
ただOS書いたりみたいな部分では不満を感じることが多かった
例えばビルドスクリプトとしてのbuild.rsがビルド前のいわゆるpreしかなくてpost的な使い方が出来ないとか
カスタムターゲット書くにしてもlinker-flavorとかそれに対応するリンカに渡されるオプションの一部とかがコンパイラのソースにハードコーディングされてるんで制約ばっかで柔軟性が低いとか
ごく普通に使うぶんには俺もディスるほどではないとは思うよ
ただOS書いたりみたいな部分では不満を感じることが多かった
例えばビルドスクリプトとしてのbuild.rsがビルド前のいわゆるpreしかなくてpost的な使い方が出来ないとか
カスタムターゲット書くにしてもlinker-flavorとかそれに対応するリンカに渡されるオプションの一部とかがコンパイラのソースにハードコーディングされてるんで制約ばっかで柔軟性が低いとか
212デフォルトの名無しさん
2018/03/27(火) 22:34:11.89ID:Ua6DMzOD rustのwebフレームワークはもうひと世代先のが出るまで本命は決まらなそうだ
213デフォルトの名無しさん
2018/03/27(火) 22:46:58.51ID:OlyQwcXt214デフォルトの名無しさん
2018/03/27(火) 23:03:51.77ID:YR27q37n >>209
タイマ割り込みは環境依存度が高いから、サンプルとして適さないんじゃね?
タイマ割り込みは環境依存度が高いから、サンプルとして適さないんじゃね?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 東京都「都民の税金1.5兆円が国に奪われている」「全国に分配されている」に地方民ブチギレ [Hitzeschleier★]
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 [蚤の市★]
- 「もうキモくてキモくて…」29歳女性が語る“おぢアタック”の実態。「俺ならイケるかも」年下女性を狙う勘違い中年男性に共通点が★4 [Hitzeschleier★]
- 自民・麻生太郎副総裁 石破政権の1年は「どよーん」 高市政権発足で「何となく明るくなった」「世の中のことが決まり動いている」★2 [Hitzeschleier★]
- 1人3千円の食品高騰対策、何に使える? あいまいなまま衆院通過 [蚤の市★]
- 【おこめ券】鈴木憲和農相 小泉前農相の備蓄米放出を“反省”「備蓄の円滑な運営を図ってまいります」 [Hitzeschleier★]
