[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 04/11 13:12 / Filesize : 252 KB / Number-of Response : 1025
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

プログラミング言語 Rust 3



1 名前:デフォルトの名無しさん [2017/05/21(日) 14:04:29.55 ID:9L9dm7b/.net]
Mozillaがリリースした、プログラミング言語「Rust」について語るスレです。

www.rust-lang.org/
https://github.com/rust-lang/rust

Servo
https://servo.org/
https://github.com/servo/servo

◆前スレ
プログラミング言語 Rust 2
echo.2ch.net/test/read.cgi/tech/1478023960

388 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 17:42:42.26 ID:cNiju5gN.net]
clippyインストールできないclippyインストールできないclippyインストールできない
clippyインストールできないclippyインストールできないclippyインストールできない
clippyインストールできないclippyインストールできないclippyインストールできない
修正したコミットがが日曜の夜にコミットするって作者が言ってるけど遅すぎ 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)


389 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 19:43:29.15 ID:IhAKIxVt.net]
CランタイムをスタティックリンクしたくてRUSTFLAGSに以下のフラグを設定しています。

RUSTFLAGS='-C target-feature=+crt-static'

これを環境変数で設定するのではなくCargo.tomlで指定するにはどうすればいいんでしょうか?
doc.crates.io/config.html を参考に下のように書いてみたのですが効いてないようでした。

[build]

rustflags = ["-C target-feature=+crt-static"]

オプションの書き方が違っているんですかね?

390 名前:デフォルトの名無しさん [2017/07/30(日) 19:51:11.45 ID:m1nsIIH9.net]
["-C", "target-feature=+crt-static"]
でどうかしら

391 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 20:00:04.61 ID:IhAKIxVt.net]
うーん、このへん試してみたんですけどだめなんですよね。

["-C", "target-feature=+crt-static"]

["target-feature", "+crt-static"]

392 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 22:39:37.27 ID:KR/rniwV.net]
>>381
一時的に古いnightly使えば良いのでは

393 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 23:38:44.64 ID:dsY+op8E.net]
まだruct学んで2日目だけど
これパッケージ入れる時のコンパイルが長いね
補完強化のためにracer入れようとしたらsyntax_syntaxから全然進まなくてCTRL+C押しちゃったよ
基本的なものを覚えるだけならパッケージなんて入れなくても良さそうだけど
ステップアップしたときにそれなりのスペックのPC持ってないと学習するのが厳しい言語って感じ

394 名前:351 mailto:sage [2017/07/31(月) 01:33:05.73 ID:0NH1HYUL.net]
>>377
C/C++より判りやすく罠が少なくC/C++で出来ることは全て出来る言語を探しています

>>378
ネイティブに動くプログラムで一番経験があるのはアセンブラ(組み込み)です
C/C++はなんの警告もなくメモリがぶっ壊れるし、どこが壊しているのかも判りにくいし
苦手です

395 名前:デフォルトの名無しさん mailto:sage [2017/07/31(月) 09:17:51.12 ID:nR0sqwYk.net]
アセンブラは型がないぶんさらにメモリ壊しやすいと思うが

396 名前:デフォルトの名無しさん mailto:sage [2017/07/31(月) 13:44:43.25 ID:luO5NyKL.net]
ライフタイムもコンパイル時に検査してライフタイムの外側からアクセスする処理もコンパイルエラーにするって

これって結局
全部ローカル変数になるってこと?
プログラム全体を通してアクセスする変数はmain関数で用意したローカル変数だからmain関数を抜けたあとは全部開放しちゃうからメモリリークも起きない?

cとかでもやろうと思えばできるって事?
cでmallocとかfreeを使わず、
全部変数定義してつかえばrustと同じ?



397 名前:デフォルトの名無しさん mailto:sage [2017/07/31(月) 16:54:10.50 ID:RkZnFpRc.net]
メモリに限らずリソース確保全般を行わないプログラムって何ができるのか
可変サイズの入力を受け取るならmallocがほ

398 名前:ぼ必須じゃない?
1行MAX_LENGTH文字までのテキストしか処理しないとか?
[]
[ここ壊れてます]

399 名前:デフォルトの名無しさん mailto:sage [2017/07/31(月) 17:16:32.22 ID:CRPdTSOK.net]
rustってどんな分野に向いてるのかいまいちわからないんだけど
webに使うのはおすすめできる?

400 名前:351 mailto:sage [2017/07/31(月) 19:18:45.74 ID:S3S/4XWd.net]
C/C++は言語仕様的にメモリの破壊を誘発しやすいと思っているんだけどそう思うのは自分だけなのだろうか

>>388
プロジェクトやプログラムの規模という要素もあるけどメモリを自由に管理できるアセンブラの方が見通しが良く
メモリ破壊に関するリスクも制御しやすいと思う。人間が理解しやすいように並べることも出来るし
もしメモリを壊した時もC/C++より何が起きるかを予測しやすいと思う

個人的にはメモリアクセスの規約を登録できてコンパイル時にそれをチェックしてくれると嬉しいんだけどな

401 名前:デフォルトの名無しさん mailto:sage [2017/07/31(月) 19:24:58.57 ID:nTqL7k1O.net]
アセンブリ的な観点でCの挙動が予想できないと言っているようならRustなんて余計に抽象的で分かりづらいと思うのだが
Volatile関連の制御とかだって面倒なだけだし

402 名前:351 mailto:sage [2017/07/31(月) 21:28:38.42 ID:S3S/4XWd.net]
>>393
C/C++はメモリマップを意識しないと安全を確保できないけど、マッピングするのはコンパイラでありリンカでありOS
そのような状態で想定しないメモリアクセスが起きた時の挙動を予想することは自分には出来ないです
C/C++でバリバリ書いている人はこの程度出来て当たり前なのかな

403 名前:デフォルトの名無しさん mailto:sage [2017/07/31(月) 22:26:49.07 ID:nR0sqwYk.net]
C/C++というレベルじゃなくて
LinuxのABIやldのリンカスクリプトがわからんレベルの人と予想

404 名前:デフォルトの名無しさん mailto:sage [2017/08/01(火) 18:09:39.02 ID:TrH0Acv/.net]
>>391
いわゆるWebアプリを書く言語としてはおすすめしない。

405 名前:デフォルトの名無しさん mailto:sage [2017/08/01(火) 18:17:25.28 ID:TrH0Acv/.net]
>>392
C/C++に慣れていないだけでは。
もしくは動的なメモリ確保を想定していないとか。

406 名前:デフォルトの名無しさん mailto:sage [2017/08/01(火) 18:21:43.31 ID:TrH0Acv/.net]
>>394
(わりと一般的な)OS上で動かす限り、アセンブリ言語で書いても
リンカとローダが介在することには変わりないと思うけど。



407 名前:デフォルトの名無しさん mailto:sage [2017/08/01(火) 18:52:10.83 ID:8J/offgv.net]
>>351はOS無しと言っている

408 名前:デフォルトの名無しさん mailto:sage [2017/08/01(火) 19:26:38.99 ID:A6tuVNB3.net]
>>351
OSなしアセンブラを必要とする層で使える汎用高級言語を探してるならRustは適さないからお帰り
そういう言語が存在する気はしないけど夢追い人っぽいから応援はしてるよ

409 名前:351 mailto:sage [2017/08/01(火) 19:28:04.99 ID:ascdikyg.net]
新しめのプログラミング言語は十中八九メモリの安全を謳っているけどこれってC/C++でメモリの破壊や
メモリアクセス違反を多発させる事例が多いからと思っているけど違うのかな
これらの低減を目的にC/C++の代替言語としてRustやDなどを検討するっておかしな事なのだろうか

410 名前:デフォルトの名無しさん mailto:sage [2017/08/01(火) 21:16:08.18 ID:PIQ133u2.net]
>>400
まじかーgcがないってOS無しで動かせる唯一の言語だと思ってたから残念
例えばESP8266とかESP32で使えたらいいとか思ってたよ。

webが利用用途じゃないって残念すぎるな。
そうするとrust使ってる層って仕事でc++を使ってる組み込み関係の層が
趣味的に触る言語ってことかな。

411 名前:デフォルトの名無しさん mailto:sage [2017/08/01(火) 22:02:02.77 ID:A6tuVNB3.net]
お前の中ではGC有無とOS要否は直結するのか(驚愕

ESPがどういうチップセット構成なのか知らんけど
ARM CPUならクロスコンパイルして動かせるんじゃね
多分、同じ程度の努力でGC載ってるGoも動くと思うけど

412 名前:デフォルトの名無しさん mailto:sage [2017/08/01(火) 22:04:43.31 ID:H6BRQUwS.net]
cargo checkすると
warning: the option `Z` is unstable
というメッセージが出るそうなんですがこのメッセージを出す方法を教えて頂けませんか?

413 名前:デフォルトの名無しさん mailto:sage [2017/08/01(火) 22:04:54.04 ID:8J/offgv.net]
Webに関してはそれなりに精力的に開発されているから将来的には使い物になる可能性もある
crates.ioとかだってRust製だしね

414 名前:351 mailto:sage [2017/08/01(火) 22:43:53.38 ID:ncmaIafS.net]
>>402
ググるとラズパイ(タダのLinuxだが)向けコードをRustで書いてみたとか、プレステ1用のコードをRustで書いてみた
とか出てくるんだよね。自分が組み込みに使えるんじゃないかと思ったのもその辺が目にとまったから
昔よりかなり良くなっているとは言え汎用機と比べるとデバッグ手段は限定されるし、コンパイル時にコードの妥当性が
ある程度保たれるというのはメリットだと思う
組み込みで「どこかのメモリを壊しているようだが皆目見当が付かない」なんて事態は可能な限り回避したいしね

415 名前:デフォルトの名無しさん [2017/08/02(水) 00:38:23.97 ID:Oyyz61S9.net]
>>400
いや、そういう用途向けでしょ。
実際にOSの実装に用いられてるし。

416 名前:デフォルトの名無しさん mailto:sage [2017/08/02(水) 00:46:25.26 ID:9o+N0qJU.net]
上の人はOSを書こうとしているんじゃなくてOS無しのままコードを書くつもりなんでないの?
言い換えると、extern crate coreすら出来ないやつ



417 名前:デフォルトの名無しさん mailto:sage [2017/08/02(水) 01:03:22.66 ID:OoZ5R2Ag.net]
なんか勘違いしてる人がいるね
Rustが強いのは「ちゃんとラップしてあげれば」どんな環境でも「安全に」動かせること
例えばとあるレジスタを触っているときに他のレジスタを触れないようにするとかも(場合によってはコンパイルエラーのレベルで)できる
ただこのラップするっていうのが一番面倒で、そこで安全を担保できなければ=unsafe祭りならむしろCのが楽とも言える
ちょっとググったらArduinoでRustを動かすためのライブラリもあるからその辺り参考にすると良さそう

>>408
OS書くのもOS無しで書くのも変わらないと思うんだけど、coreを含められないってどういう状況?
libcoreは何にも依存してないからそんな状況ありえないと思ってた

418 名前:デフォルトの名無しさん mailto:sage [2017/08/02(水) 01:08:41.51 ID:CN84q205.net]
アセンブリ君

419 名前:351 mailto:sage [2017/08/02(水) 01:16:10.65 ID:Qb6MNIfM.net]
あー・・・何となく判ってきた。組み込みでそのようなコードを書くのか判っている人からレスが付いていたのか

420 名前:デフォルトの名無しさん [2017/08/02(水) 01:21:03.63 ID:E8GFzbft.net]
>>396
>>405
今は使い物にならないって事?
向いてると思って趣味のWEBアプリに採用したけどやめたほうがいいのかな
Golangは古臭すぎて使う気起きないし
正直速度はどうでもいいけど構文が好き

421 名前:デフォルトの名無しさん mailto:sage [2017/08/02(水) 01:21:20.56 ID:Hth04IJp.net]
coreだって何にも依存しないというわけではない、けれどそれは自分で用意すれば良いしね
rust_begin_panicとかをどうやって用意するのかは知らないけど

422 名前:デフォルトの名無しさん mailto:sage [2017/08/02(水) 01:22:27.24 ID:/y5AMSWR.net]
RustでもOS書けるでしょ
(もちろんCと同じく最低限のアセンブラはいるが)
ぐぐればいろいろ見つかるぞ

423 名前:351 mailto:sage [2017/08/02(水) 01:38:12.16 ID:Qb6MNIfM.net]
>>411ミスった。訂正
× 組み込みでそのようなコードを書くのか判っている人
○ 組み込みでどのようなコードを書くのか判っていない人

>>409
>例えばとあるレジスタを触っているときに他のレジスタを触れないようにするとかも(場合によってはコンパイルエラーのレベルで)できる
そういう話を聞きたかった。レジスタの操作順までコンパイラレベルで面倒を見てくれたらありがたいと思う
xに値を書き込む時はyのnビットを1にしてからxへ書き込むとかあるしな。その定義を作る気力があるかはともかくとして

>そこで安全を担保できなければ=unsafe祭りならむしろCのが楽とも言える
ペリフェラルレジスタだけunsafeにしてすればと思ったけどそう単純な話ではないのかな
もちろん入力値のチェックは必要になるだろうけど

424 名前:デフォルトの名無しさん [2017/08/02(水) 02:29:19.43 ID:OoZ5R2Ag.net]
>>413
確かにmemcpyとかあるね、忘れてた
まあこの辺りはCでも間違いなく自分で書くとこなので大したコストじゃないね
> rust_begin_panic
組み込みならシリアルにでもログ出して無限ループとかが普通かな?
こういうのはOS系のプロジェクトがとても参考になる

>>415
> その定義を作る気力があるかはともかくとして
実行時チェックなら多少楽になるだろうしそこは(精神的)コストとの相談だね

> ペリフェラルレジスタだけunsafeにしてすればと思ったけどそう単純な話ではないのかな
個人的にはunsafe使い始めると至る所で使うようになっちゃうのでお勧めしない
Rustの思想的にも未定義の挙動を許すunsafeはできるだけ避けるべきだしね
そんなの気にせずチェックしたいとこだけチェックさせるLint的な使い方もありっちゃあり

425 名前:デフォルトの名無しさん mailto:sage [2017/08/02(水) 07:02:07.94 ID:nq2BG13A.net]
redoxのアセンブラで書いてる所すらもrust(高級言語)で書きたいって夢を語ってるんじゃないの?
結局何がしたいのか分からんな・・・

そこについては諦めているなら既に実用化されているし
そこを追っているならチップ毎のクロスコンパイラ作りを頑張れとしか言いようがねぇよ

426 名前:デフォルトの名無しさん mailto:sage [2017/08/02(水) 08:11:06.98 ID:Oyyz61S9.net]
>>415
レジスタまで意識する用途なら、高級言語を使わないのが正解では

> xに値を書き込む時はyのnビットを1にしてからxへ書き込むとかあるしな。
それこそボード固有の話になるので。
高級言語でやるとしたら機能レベルで関数化して中身はインラインアセンブリで頑張るとか。
何れにせよ言語レベルで対応する話ではないな。



427 名前:デフォルトの名無しさん [2017/08/02(水) 10:50:44.07 ID:AyM7Pnm7.net]
>>412
>向いてると思って趣味のWEBアプリに採用した

やってみたら良いと思う。
仮にミスマッチだったとしても、過程や結果を公開すれば、色んな人の役に立つ。

428 名前:デフォルトの名無しさん mailto:sage [2017/08/02(水) 12:12:53.41 ID:m0LDca1I.net]
rustっていまのところ
何にも向いてないということか。

golangみたいにgoといえば並列処理!みたいなウリがないとなかなか厳しいな。
とりあえずwebはgoでいいや。

429 名前:デフォルトの名無しさん [2017/08/02(水) 12:21:18.09 ID:E8GFzbft.net]
>>419
webアプリ作るならunsafe必須とか?
cもc++も触った事ないからunsafeだけは無理なんだけど…

430 名前:デフォルトの名無しさん mailto:sage [2017/08/02(水) 12:56:49.05 ID:qhSfUKHc.net]
変なチューニングに走らない限りはunsafeは不要
ただしRailsでいうところのDoorkeeperやPaperclipみたいな便利ツールが少ないからそのあたりは自力でどうにかする必要がある
あと、現状で主要なフレームワークはみんなsynchronous。ただしRocketはそう遠くない将来にasync対応しそう。Ironはそもそもやる気があるのか分からん

431 名前:デフォルトの名無しさん [2017/08/02(水) 15:19:15.45 ID:E8GFzbft.net]
>>422
unsafeは不要なのか、よかった
Railsは使ったことないから分からない
今まではNode.jsでexpress使ってたからそのまで分厚いフレームワークは使ったことない
rustってイベントループじゃなくてスレッドだよね?10K問題はどうなの?

432 名前:デフォルトの名無しさん mailto:sage [2017/08/02(水) 16:38:11.64 ID:I334RkfN.net]
goでいいや、という人はまさにgoでよいのでは。
goではいやだ、という人むけ。

433 名前:デフォルトの名無しさん [2017/08/02(水) 16:42:18.62 ID:E8GFzbft.net]
goとかいうmapもnull安全もないうんこは絶対NG

434 名前:デフォルトの名無しさん mailto:sage [2017/08/02(水) 17:58:49.69 ID:m0LDca1I.net]
goが嫌だと言うなら
kotlinという選択肢もある。
これだとアンドロイドアプリももれなく使えるようになるし、
null安全だし。
何よりideが既にある

435 名前:デフォルトの名無しさん mailto:sage [2017/08/02(水) 18:06:51.08 ID:5BVbLnR+.net]
過疎だからいいけどrustの話しようぜ

436 名前:デフォルトの名無しさん [2017/08/02(水) 18:07:43.92 ID:E8GFzbft.net]
kotlinもscalaもjvm言語だからあまりnull安全じゃない



437 名前:デフォルトの名無しさん mailto:sage [2017/08/02(水) 19:54:07.78 ID:7vYFqN5x.net]
rustはno_coreにしてベアメタルでリージョンにメモリ管理やってもらうだけに全振りすればいいよ!
え?ヒープ使いたい?rustc_privateでalloc系をだな。
アセンブリもcpu毎にアセンブラ用意するのが面倒くさいからrustのinline asm使おうぜ。

>>404
そのまんま。
cargo checkはZオプション付けてるだけだから「Zオプションは安定してないから注意しろよ」ということ。

>>428
言ってる意味がわからない。

438 名前:351 mailto:sage [2017/08/02(水) 20:02:49.43 ID:5dN3nnfV.net]
>>416
unsafeを使わないと任意のアドレスを読み書きできない(=レジスタにアクセス出来ない)と思っていたけど他の手があるのか

439 名前:デフォルトの名無しさん mailto:sage [2017/08/02(水) 20:28:52.05 ID:xy+LcKRk.net]
本格的にOS無しの世界に入ったことが無いから適当だけど、関数型プログラミングの道具が使える、とか?>Rustのメリット
代数的データ型とかラムダ式orクロージャが簡単に扱えるとか。

趣旨から外れるけど、Cの世界に入れるのと同じような感じでRustの世界に入ることができるのも個人的には良いと思ってる

440 名前:デフォルトの名無しさん [2017/08/02(水) 20:31:53.85 ID:E8GFzbft.net]
>>429
javaのライブラリ使える代わりにjavaライブラリはnull安全じゃないよって事

441 名前:デフォルトの名無しさん mailto:sage [2017/08/02(水) 20:54:36.60 ID:Hth04IJp.net]
>>429
>cargo checkはZオプション付けてるだけ
補足するなら、これは非標準のcargo-checkサブコマンドの挙動であって、
標準のcargo checkは--emit metadataを使っているから警告は出ない

442 名前:デフォルトの名無しさん mailto:sage [2017/08/02(水) 21:09:38.43 ID:FxAsS3hN.net]
>>429
>>433
普通に使ってれば表示されないメッセージなんですね
cargo checkが出力するエラーや警告などをもう少し調べたいんですけど
これってどこに乗ってるんでしょうか?
cargoのリポジトリクローンしてから適当なエラーでgrepしてもヒットしないんです

443 名前:デフォルトの名無しさん mailto:sage [2017/08/02(水) 22:00:58.19 ID:7vYFqN5x.net]
>>432
VMじゃなくてライブラリの話ね。
ceylonみたいなjavaとのシームレスな通信を捨ててるJVM言語はどうだろうか?

>>434
cargo-checkっていうthaad partyのサブコマンドがあるんだけど、
後にcargo自身に全く同じサブコマンド名でちょっと違うコマンドが追加されたの。
だからcargo-checkの方つかってるはず。

`cargo install --list`してみ。

ttps://github.com/rsolomo/cargo-check

444 名前:デフォルトの名無しさん mailto:sage [2017/08/02(水) 22:13:46.45 ID:h6wu2BXI.net]
物騒なpartyのサブコマンドだな

445 名前:デフォルトの名無しさん mailto:sage [2017/08/02(水) 22:28:55.57 ID:Hth04IJp.net]
THAAD partyワロタ

446 名前:デフォルトの名無しさん [2017/08/03(木) 00:45:37.29 ID:InlYWDxN.net]
>>430
unsafeを使わないとできないってのはその通りだけど
> もちろん入力値のチェックは必要になるだろうけど
って処理を含めた関数を作ってunsafeな部分を支配下に含めることでunsafeでない処理にするってことが言いたかった
例えるとmallocの戻り値チェックを入れてOption<&mut T>を返す関数を作ってラップすることでunsafeでなくするって感じ
これを面倒くさがるとぬるぽに遭遇するがちゃんとラップすればガッが「一切」必要なくなるわけだ
でも今度はfreeしてない問題が発生するからスマポ作って・・・と徐々に面倒くさくなってきて > コストとの相談

>>431
ライフタイムとか借用とかの安全機能抜きにしてもパターンマッチとか他の言語機能で見てもRustは魅力的だよな
・・・まずい、mainにunsafe付けてBetter CとしてRustを使う世界もありな気がしてきたぞ



447 名前:デフォルトの名無しさん mailto:sage [2017/08/03(木) 04:52:30.89 ID:dQPpbAHc.net]
Java の参照は、Nullable だから、
Kotlin で扱う場合、すべて、Nullable にすると面倒

そこで、Kotlin では、Platform Type (下の3) と言うものを作った

String 変数型に、Null 代入時、
1. String で、実行時に、IllegalStateException
2. String? で、Nullable だからOK
3. 型を省略(String!) で、実行時に、デリファレンスでヌルポ



448 名前:1. は、インスタンスにアクセスする前に、代入時にエラー。
3. は、1よりひどく、インスタンスにアクセスして、ヌルポ
[]
[ここ壊れてます]

449 名前:デフォルトの名無しさん mailto:sage [2017/08/03(木) 07:06:29.97 ID:l/KHeBEE.net]
Kotlin信者が必死だなw

JVM要する時点で組み込み/低レイヤーに向かねーんだよ、土俵が別次元だ馬鹿
Android ARTはJVMじゃない?そのランタイムサイズ、Rustのランタイムサイズの何倍になってるのか分かってんの?

450 名前:デフォルトの名無しさん mailto:sage [2017/08/03(木) 08:03:17.08 ID:eYqeDR4x.net]
スレチ削除申請頼む

451 名前:デフォルトの名無しさん mailto:sage [2017/08/03(木) 08:29:31.88 ID:hrCRy9t8.net]
組み込みスレ?

452 名前:デフォルトの名無しさん [2017/08/03(木) 08:39:41.14 ID:563u4f2I.net]
>>441
いちいちスレチだけでレス削除してくれるほど運営も暇じゃねーよ
板違いのスレも最近は「落ちるまで放置してね」の方針なのに

453 名前:デフォルトの名無しさん mailto:sage [2017/08/03(木) 10:32:34.73 ID:TRkbUvPZ.net]
rust 1.21.0使ってますが英語苦手なので日本語ページ見てます
https://rust-lang-ja.github.io/the-rust-programming-language-ja/1.6/book/if.html
このページの一番最後
「else のない if では、その値は常に () となります」とあるので
let x = 0;
let y = if x == 1 { 1 };
println!("{}", y);
って書いたんですけどbuildしてもエラーになります
error[E0317]: if may be missing an else clause
()になりませんどうしてですか?

454 名前:デフォルトの名無しさん mailto:sage [2017/08/03(木) 10:33:20.99 ID:WxFDmNeE.net]
>>440
ちなみにkotlin/native 開発中だからそれでrustと同じ土俵に立てるよ。
llvmの中間コード吐けるようになる。
rustより学習コストは低くて関数型チックな言語構文使ってるから
kotlin vs rustが勃発するな。
問題はandroid開発者を取り込めるからユーザー数は圧倒的
IDEも標準が存在する。
という点で色々rustは不利。
rustはwebAssenbryあたりで本領発揮できればいいんだけど。

455 名前:デフォルトの名無しさん mailto:sage [2017/08/03(木) 10:35:36.32 ID:WxFDmNeE.net]
>>444
エラーメッセージ観るとelse節がないって怒ってるね
yに代入するんだからelseないと値が不定になるでしょ

456 名前:デフォルトの名無しさん mailto:sage [2017/08/03(木) 10:39:45.44 ID:WxFDmNeE.net]
>>444
ごめんちゃんと読んでなかった

fn main() {
let x = 5;

let y = if x == 5 { () };
println!("{:?}",y)
}
これだと動くよね。型を() に統一しないとダメなんじゃない



457 名前:デフォルトの名無しさん mailto:sage [2017/08/03(木) 10:52:53.58 ID:TRkbUvPZ.net]
>>447
なるほどそういうことですか
省略しないほうがいいですね
ありがとうございました

458 名前:デフォルトの名無しさん mailto:sage [2017/08/03(木) 16:58:16.30 ID:cu622efE.net]
IntelliJ Rustプラグインが、(IDEの)公式プラグイン化した
ついでにちょっとおせっかいな表示も始めた
関数呼び出し部分に仮引数名を補完表示とか、省略された型宣言を補完表示とか

459 名前:デフォルトの名無しさん mailto:sage [2017/08/03(木) 22:02:43.27 ID:l/KHeBEE.net]
有料化しなきゃどうでもいいかな

460 名前:デフォルトの名無しさん mailto:sage [2017/08/03(木) 22:11:43.17 ID:ztpCIQ/J.net]
JetBrainsが開発に参加しているというだけでもそれなりに心強い

461 名前:デフォルトの名無しさん mailto:sage [2017/08/04(金) 09:17:26.55 ID:plGTqVJg.net]
あのプラグインの作者、前にPR出したらクッソ丁寧なダメ出ししてくれた
PRコメントの数倍のレスが返ってきてビビったわ
引き続きコミュニティベースで発展するといいのう、MozillaもJetBrainsもあんま要らんことするでないぞ

462 名前:デフォルトの名無しさん mailto:sage [2017/08/04(金) 11:05:40.90 ID:ZGf6UrbU.net]
>>452
個人的には language server protocolをちゃんと

463 名前:用意してくれたほうが幸せ。
vscodeで使いたいんで。
http://qiita.com/atsushieno/items/ce31df9bd88e98eec5c4
https://github.com/rust-lang-nursery/rls
[]
[ここ壊れてます]

464 名前:デフォルトの名無しさん mailto:sage [2017/08/04(金) 22:55:37.21 ID:KlM1Xeqg.net]
>>444,446,447,448
型が一致してないからや。
if式のelse句省略して戻り値の型にunitが推論されるのに
thenの方の戻り値の型がunit以外になるからエラーになる。

たぶん、rustc --explain 0317すればクソ丁寧に教えてくれる

465 名前:デフォルトの名無しさん mailto:sage [2017/08/05(土) 02:43:30.26 ID:WbpcX2VW.net]
Windows用のtar.gzを落としてきて適当に解凍
.\rust\binへパスを張って
>rustc hello.rs
error[E0463]: can't find crate for `std`
error: aborting due to previous error(s)
>
えぇぇー・・・・w
.\rustcの中を見てもライブラリらしき物が見あたらないのでどこにいるのかと探したら
.\rust-std-i686-pc-windows-msvcの下にいた。.\rustc\libの下に移動したらコンパイルは
通ったがリンカがないと怒り出す
面倒なのでVC++のコマンドプロンプトからパスを張ってようやくコンパイル&リンクに成功
無事に実行出来た

というか実行ファイルがかなりでかいな。100KBくらいある。全部込みじゃしゃーないか
あと-vや-C link-args=が無視されているように見える

466 名前:デフォルトの名無しさん mailto:sage [2017/08/05(土) 02:47:41.52 ID:Q+GU1zzP.net]
そもそも今日日tar.gzなんてどこから落としてきたんだっていう



467 名前:デフォルトの名無しさん mailto:sage [2017/08/05(土) 03:11:33.75 ID:WbpcX2VW.net]
他のインストール方法ー→スタンドアロンなインストーラーにビルド済みを固めたtar.gzがある

468 名前:デフォルトの名無しさん mailto:sage [2017/08/05(土) 07:15:49.71 ID:49wfyY1x.net]
何らかの信念があって、rustupを避けてるわけ?

469 名前:デフォルトの名無しさん mailto:sage [2017/08/05(土) 16:01:00.22 ID:WbpcX2VW.net]
オンラインによるインストールは可能な限り避けるようにしている。あとで環境の再現が必要になった時に詰む可能性がある

470 名前:デフォルトの名無しさん mailto:sage [2017/08/05(土) 16:18:44.06 ID:CGuOYehU.net]
メモリ安全が重視されるのって、ハッキングとかに使われるから?

471 名前:デフォルトの名無しさん mailto:sage [2017/08/05(土) 16:22:20.12 ID:uZdWE4Go.net]
脆弱性になるからってのもそうだけど、単純にSEGVでプログラムが落ちるのを防ぐためというのもある

472 名前:デフォルトの名無しさん mailto:sage [2017/08/05(土) 16:31:03.26 ID:CGuOYehU.net]
代わりにunwrapで落ちまくり

いや、うそ

それ以外のバグだと落ちはしない?

473 名前:デフォルトの名無しさん mailto:sage [2017/08/05(土) 17:34:15.87 ID:49wfyY1x.net]
メモリ安全とミドリ安全って似てるよな

474 名前:デフォルトの名無しさん mailto:sage [2017/08/06(日) 00:23:03.22 ID:8w1+5d3W.net]
>全部込みじゃしゃーないか
msvc toolchainでstaticリンクになったっけ?

475 名前:デフォルトの名無しさん mailto:sage [2017/08/06(日) 03:55:05.27 ID:fFJNwhsI.net]
>>464
リンカにどんなコマンドが渡されているのか確認できないので詳細は判らない

476 名前:デフォルトの名無しさん mailto:sage [2017/08/06(日) 03:55:59.27 ID:fFJNwhsI.net]
あ、なんか変だ。訂正
× コマンド
○ オプション



477 名前:デフォルトの名無しさん [2017/08/06(日) 10:24:33.59 ID:gzkOLnwH.net]
Rustの日本語書籍出る予定ないのかな?

478 名前:デフォルトの名無しさん mailto:sage [2017/08/06(日) 17:24:42.71 ID:hteV9R0w.net]
>>467
英語で原典的な本が出るから遠からず日本語訳も出るだろ
ただし日本語訳の翻訳の質がどうなるかは全く安心できないことは
近年のプログラミング関連の英語書籍の日本語訳を見れば理解できるだろう

479 名前:デフォルトの名無しさん mailto:sage [2017/08/06(日) 23:17:23.51 ID:5q4qU5gd.net]
書籍は情報が古すぎて当てにならんぞ。
文書化自体あんま力入れてないからソースコード読むのが一番早いよ。

480 名前:デフォルトの名無しさん [2017/08/06(日) 23:38:02.09 ID:Q0UOjaQj.net]
訳のレベルに関係なく出せば売れるからかな
需要が少なすぎて競争にならないから訳の質がいい物が出ない?

481 名前:デフォルトの名無しさん [2017/08/07(月) 04:31:33.89 ID:+587VfNE.net]
>>469
どのサイトのソースコード読むのがいいですか?

482 名前:デフォルトの名無しさん mailto:sage [2017/08/07(月) 04:33:15.84 ID:lxGlucTV.net]
>>470
> 需要が少なすぎて競争にならないから訳の質がいい物が出ない?

そうじゃない
英語の理工学書の翻訳の質はここ20年ほどの間に明らかに著しく低下した
その原因として考えられるのは、訳者が使命感を持たなくなり単に副収入とかの経済的で利己的な目的で翻訳をするようになったことと
それ以上に訳者が大衆化したことも大きい(かつてだと理工学書の翻訳は、ほぼ完全にいわゆる一流大学の教授の専権事項だったが今は全く違う)

またそういう一流大学教官による訳書であっても、近年は、ゼミで原書を読ませて学生(院生?)たちに素訳を出させて適当につなぎ合わせて
訳書として出版したのでは?と疑われるレベルの訳すら出現しているのは、明らかに近年の訳者のモラルの低下(使命感の欠如)の例だろう

近年の訳の質の低下に関してもう一つ重要なファクターとしては、最近の訳者が英語(特に会話面で)は達者になったのかも知れないが
明らかに昭和後期の訳者たちよりも日本語の文章力が低下していることだ(その結果として訳の日本語文が読むに耐えないレベルに堕している訳書が少なくない)

483 名前:デフォルトの名無しさん mailto:sage [2017/08/07(月) 07:28:08.80 ID:PGcD2DjA.net]
というかそもそも書籍を出す以上利益を見込むわけだけどRustの書籍が出たところで到底コストに見合う利益をあげられるとは思えん

484 名前:デフォルトの名無しさん mailto:sage [2017/08/07(月) 08:02:25.73 ID:ElcK6Dg+.net]
唐突に小論文もどきが発生していて笑う
steveklabnikやcarols10centsは大学の教官ですらないだろうけれどそれは良いのか

485 名前:デフォルトの名無しさん mailto:sage [2017/08/07(月) 08:15:17.32 ID:rE42Biik.net]
「監訳者」がいるが「訳者」が書いてない本って、やっぱそんなもんだろうね
あるいは機械翻訳をちょこっと手直ししただけとか
名前を表に出すって内容に責任を持つってことだから、名前重要よ

486 名前:デフォルトの名無しさん [2017/08/07(月) 08:29:28.94 ID:+587VfNE.net]
Rustの入門書サイトなどおすすめありますか?



487 名前: mailto:sage [2017/08/07(月) 08:31:32.26 ID:Y4YBisBB.net]
>>472
なにも今にはじまったことじゃない

>ゼミで原書を読ませて学生(院生?)たちに素訳を出させて
>適当につなぎ合わせて訳書として出版したのでは?

プログラミング言語C とてそうやって作られた、といわれている

488 名前:デフォルトの名無しさん mailto:sage [2017/08/07(月) 08:32:44.78 ID:ONon98mg.net]
典型的な老害で笑える
ピアソンの技術書とか今出したら炎上間違いなしってレベルの翻訳もあっただろ
Googleのエンジニアですらやばい翻訳とかするのにたかが大学教授如きが完璧に翻訳できる訳がない

489 名前:デフォルトの名無しさん [2017/08/07(月) 12:03:28.98 ID:NP3377Zu.net]
>>476
公式

490 名前:デフォルトの名無しさん mailto:sage [2017/08/07(月) 16:12:50.80 ID:lxGlucTV.net]
>>478
> 典型的な老害で笑える
> ピアソンの技術書とか今出したら炎上間違いなしってレベルの翻訳もあっただろ

外資系や新興の出版社が出す本は訳書に限らず酷いのは昔から
編集担当者が日本語文のチェックを碌にしないしそういう新興出版社は人脈を持っていないゼロからのスタートだから良い訳者が無かったからね

問題は、近年は、老舗と言える理工系出版社から出されている訳書でも翻訳の質が急激に堕ちて来たことだ
その原因は翻訳の大衆化と訳者のモラルや使命感の低下にあると言ってるのだよ

> Googleのエンジニアですらやばい翻訳とかするのにたかが大学教授如きが完璧に翻訳できる訳がない

馬鹿ですか?
そんな高度で難解な技術書など存在しても極く一握りで、そんな極めて特殊な例

491 名前:取り挙げて反論するなどナンセンス
そんなナンセンスで反論だと思ってる君の知性を疑うね

そもそもそんな難解な技術書を読んで理解できる人間も一握りだ
そんなレベルの人間ならば原書で読めるから翻訳する必要性も希薄

問題は、かつてならば普通の質で翻訳されていた難易度が平凡なレベルの教科書・技術書・学術書ですらまともな日本語訳でないのが量産されるようになったという点
[]
[ここ壊れてます]

492 名前:デフォルトの名無しさん mailto:sage [2017/08/07(月) 17:27:07.42 ID:PfKZEtLc.net]
アカデミアを知ってる気取りの学生の臭いがプンプンするけど、そんなことを書き込んでいる暇があったら期末試験の勉強しとけよな

493 名前:デフォルトの名無しさん mailto:sage [2017/08/07(月) 17:35:11.15 ID:n0QtNiqf.net]
>>472
> 英語の理工学書の翻訳の質はここ20年ほどの間に明らかに著しく低下した

それ何か根拠があって言ってんの? どうせお前の妄想だろ。
長々と言い訳せんで良いよ、消えろ。

494 名前:デフォルトの名無しさん mailto:sage [2017/08/07(月) 17:35:27.75 ID:8DeyRC3s.net]
計算機学の正式な教育を受けたことがないからわからないけど,たとえば数学では大学2年までに学ぶべき科目の教科書は翻訳でも日本語教科書でも定番と呼べる本が出揃ってるんだよね
そんな中で使命感を持って初学者向けの本を訳したがる人はそうそういないでしょ
技術書界隈でもそんな現象が起こってるじゃないの

495 名前:デフォルトの名無しさん mailto:sage [2017/08/07(月) 18:08:53.23 ID:Y4YBisBB.net]
>>483
解析学と線形代数の定番を教えてください、できればギャップの極度に少ないものを
翻訳じゃなくて、「解析概論」(高木)よりは親切なやつを
是非!

496 名前:デフォルトの名無しさん mailto:sage [2017/08/07(月) 18:36:14.26 ID:8DeyRC3s.net]
杉浦本と斉藤本じゃあかんの(多変数の議論に飛躍が入るのはしょうがない)



497 名前:デフォルトの名無しさん mailto:sage [2017/08/07(月) 18:36:16.49 ID:n9zFQLuH.net]
>>484
うちの親父の形見が解析概論なんだが

498 名前:デフォルトの名無しさん mailto:sage [2017/08/07(月) 18:39:57.17 ID:ElcK6Dg+.net]
スレチ

499 名前:デフォルトの名無しさん mailto:sage [2017/08/07(月) 19:45:52.18 ID:8DeyRC3s.net]
ごめん

500 名前:デフォルトの名無しさん mailto:sage [2017/08/07(月) 20:05:48.41 ID:8DHQ/UcZ.net]
でもここ20年でネット利用者の情報リテラシーと日本の国際的な技術的地位はかなり落ちたよな

501 名前:デフォルトの名無しさん mailto:sage [2017/08/07(月) 21:05:17.72 ID:q/Po/zS7.net]
近年は、技術書の日本語翻訳版が出るころには、次のメジャーバージョンがリリースされて買う気を失う傾向

502 名前:デフォルトの名無しさん mailto:sage [2017/08/07(月) 21:56:28.43 ID:JP8gCgB5.net]
ITは元々レベル低かったんじゃない?ハードは強かったけどソフトはそんなに

503 名前:デフォルトの名無しさん mailto:sage [2017/08/07(月) 23:32:35.06 ID:tGwRq2k1.net]
おまえらexa紹介されてる
ttps://www.cyberciti.biz/open-source/command-line-hacks/exa-a-modern-replacement-for-ls-written-in-rust-for-linuxunix/

504 名前:デフォルトの名無しさん mailto:sage [2017/08/07(月) 23:34:52.24 ID:R3k5HOGA.net]
lsコマンドに替わるコマンド「exa」とは
news.mynavi.jp/news/2017/08/07/203/

exaはRustで開発されたls系コマンド。
サイズが小さく高速に動作し移植性も高いという特徴がある。

505 名前:デフォルトの名無しさん mailto:sage [2017/08/07(月) 23:58:47.36 ID:LiwmU2BL.net]
Rust関係なくてスマネ

>>491
全てとは言わないけど分野によっては世界トップクラスだったよ
1.コンピュータアーキテクチャ&オペレーティングシステム
 Windowsが走るコンピュータアーキテクチャを開発、販売していた数少ない国の一つ
 そのためにWindowsのカスタマイズも行っていた
2.日本語ワードプロセッサ
3.日本語入力変換システム
 この二つは語るまでもないよね。ユーザーは積極的に捨てたけど
4.低レベルの実装、解析
 かつては日本製のBIOSパッチとか野良BIOSとかがあった。このへんの技術は1とも絡むね

506 名前:デフォルトの名無しさん mailto:sage [2017/08/08(火) 00:52:12.66 ID:b/ztEhQD.net]
どうでもいいけどexaって打ちづらいから普通にlsでええわってなる



507 名前:デフォルトの名無しさん mailto:sage [2017/08/08(火) 01:39:41.54 ID:Apkyawzp.net]
>>495
エイリアスつかえば

508 名前:デフォルトの名無しさん mailto:sage [2017/08/08(火) 22:30:57.70 ID:0Gdz9Dwg.net]
>>482
それ以前から理工学書を読んでいる人間ならば多くが同様の感想を持っているわけだが
読んでない人間は知らんがね
他人の投稿が気に入らず読みたくないならば、お前がこのスレを読まずに消えれば済むこと

509 名前:デフォルトの名無しさん mailto:sage [2017/08/08(火) 22:33:19.04 ID:tK7llXaf.net]
幅広い理工学書の全てを知り尽くした>>497

510 名前:デフォルトの名無しさん mailto:sage [2017/08/08(火) 22:39:16.48 ID:B6tVSdcm.net]
アカデミックこじらせおじさんかイキリ大学生か

511 名前:デフォルトの名無しさん mailto:sage [2017/08/08(火) 22:54:17.33 ID:XDy6h+kL.net]
A. 20年前と今の理工学書を比べられる、2chのドマイナーな言語スレにいる
  ->アカデミック関係者の可能性
B. 自分の意見の論拠が薄い、的確なソースを出せない印象論
  ->実体験であるなら妥当
C. スレ違いの話を得々と語る、煽りに慣れていない
  ->コミュニケーションに難あり

>>497が本当に一流大学の教官である可能性は微粒子レベルで存在する
が、話の中身は与太話だし、何を言ったかだけを判断するなら塵芥と同じ扱いでよろし

512 名前:デフォルトの名無しさん mailto:sage [2017/08/09(水) 09:35:51.16 ID:mzNn5sYF.net]
>>497
結局「根拠は無い」というレスして恥ずかしくないの?

513 名前:デフォルトの名無しさん mailto:sage [2017/08/09(水) 20:42:37.62 ID:jJFzyGYq.net]
Firefox高速化
www.itmedia.co.jp/news/articles/1708/09/news079.html

514 名前:デフォルトの名無しさん mailto:sage [2017/08/09(水) 20:56:02.48 ID:yH2dFN1n.net]
>>493
FDの作者って亡くなったんだっけ

515 名前:デフォルトの名無しさん mailto:sage [2017/08/09(水) 22:29:08.98 ID:BGGA/pTO.net]
1つのパッケージをインストールするだけでも時間が何十分とかかる
萎える〜

516 名前:デフォルトの名無しさん mailto:sage [2017/08/09(水) 23:44:38.45 ID:oO58YE7v.net]
Rust 1.19におけるタグ無しのunionなどの追加
https://www.infoq.com/jp/news/2017/08/rust-119-released



517 名前:デフォルトの名無しさん mailto:sage [2017/08/09(水) 23:50:55.47 ID:AaV7WIeC.net]
>>504 環境変数としてCARGO_TARGET_DIRを適当なところに置くと、以前にビルドしたcrateを利用してくれるよ
まあバージョンが違ったりしたらやり直しだから気休めにしかならんかもしれんが

518 名前:デフォルトの名無しさん mailto:sage [2017/08/10(木) 09:16:01.74 ID:hSTXQfAm.net]
ライフタイムがよく分からんから、ライフタイム定義なしで動くプログラムは作れるようになったんだけど、
ここから必要に応じて参照使いまくりでライフタイムしまくりが出来るようになるにはどうしたらいいでしょうか?

519 名前:デフォルトの名無しさん mailto:sage [2017/08/10(木) 11:35:07.02 ID:+tFBM5sG.net]
>>507 個人的な経験談だけど、ライフタイムが複雑で分かりにくいときはデザインから見直した方が良い場合が多い
単にコピーされるのを嫌って参照にすると駄目で、元の値の完全な従属物のときだけ参照を使うと大抵はうまくいく
メンバ変数間の参照はキツいので手を出さない、グラフとか所有権が複雑なのも自分じゃ作らずにライブラリにしておく、とか

520 名前:デフォルトの名無しさん mailto:sage [2017/08/10(木) 13:04:49.06 ID:qDPlaybB.net]
rustで検索してもほとんどゲームの話題しか検索に引っかからなくて草
rustの日本コミュニティーないの?

521 名前:デフォルトの名無しさん mailto:sage [2017/08/10(木) 13:14:22.08 ID:v3fv+3Jb.net]
ここじゃよ

522 名前:デフォルトの名無しさん mailto:sage [2017/08/10(木) 13:29:36.14 ID:jhaqJJbw.net]
>>508
え、同じstruct内でメンバ変数間の参照は出来ないでしょ?

523 名前:デフォルトの名無しさん [2017/08/10(木) 14:00:03.18 ID:g9gtECZC.net]
>>509
slackがある

登録済の人 -> https://rust-jp.slack.com
未登録の人 -> https://rust-jp.herokuapp.com/ 👀
Rock54: Caution(BBR-MD5:b95868ef2c0ed5e765a4d10ada4cf289)


524 名前:デフォルトの名無しさん mailto:sage [2017/08/10(木) 18:33:30.12 ID:DpOw+Ywo.net]
おれもslack見つけるのすごく時間かかった

525 名前:デフォルトの名無しさん mailto:sage [2017/08/10(木) 19:56:47.71 ID:oX316LZB.net]
>>511
unsafeなコードでゴニョゴニョしないと無理だね
RocketのFairingsなんかがゴニョゴニョしているものの例
https://github.com/SergioBenitez/Rocket/blob/9c9740f/lib/src/fairing/fairings.rs#L23-L38

526 名前:デフォルトの名無しさん mailto:sage [2017/08/10(木) 20:06:16.94 ID:5YNarUir.net]
Arcでもダメなんだっけ?使う機会がないからTutorialで読んだきり見たことないけど



527 名前:デフォルトの名無しさん mailto:sage [2017/08/10(木) 22:57:52.57 ID:Ib9pl7ao.net]
>>507
lifetimeはextentとregionをごちゃまぜにした語だから
lifetimeに言及してる部分は実際にはextentの話かregionの話に分かれる。
だからextentとregionを理解すればいいよ。
特にscopeとextentの区別がついてないやつが非常に多いからそこ気をつける。

528 名前:デフォルトの名無しさん mailto:sage [2017/08/10(木) 23:40:15.73 ID:+tFBM5sG.net]
何かextentとregionを説明したものってある?

529 名前:デフォルトの名無しさん mailto:sage [2017/08/11(金) 00:54:12.71 ID:XZrwY8EL.net]
>>517
extentはscopeとよく一緒に説明されるからそこら辺で検索。
言語によってはextentの事をlifetimeと呼ぶから
そういう言語のlifetimeを詳しく解説してる本とか当たってもいい。

ただし、rustのextentとregionを混同したlifetimeの事と
extentをlifetimeと呼ぶ文化におけるlifetimeの区別は
事前にちゃんと付けておいたほうがいいね。

rustのlifetimeは無駄にややこしくしてるから頑張って。

regionの説明はほとんど見かけないから近道は論文読む。
実装ならRTSJとCycloneくらいしかない。
region理解するならzone/arena(両方同じもの)とリージョン多相とリージョン推論も理解した方がいい。
あとrust固有の話だとrustのリージョン多相は部分多相も備えてる。

530 名前:デフォルトの名無しさん mailto:sage [2017/08/11(金) 01:38:14.07 ID:KiXisjXW.net]
無駄に話を複雑にした挙句論文を読めときたか、少し前にいたイキリ大学生かよ

普通に公式のThe Rust Programming Languageを読んで現行Stringを使ってるなら&strにして組み直して見たら?
structのメンバに参照があると否応でも意識/理解せざるを得ないと思うぞ

531 名前:デフォルトの名無しさん mailto:sage [2017/08/11(金) 05:26:24.27 ID:oTwda99v.net]
>>519
いざ言われてみるとstructで参照を持つのってどんなときか思いつかんのだけど

532 名前:デフォルトの名無しさん mailto:sage [2017/08/11(金) 07:59:32.16 ID:KiXisjXW.net]
じゃあまずlifetimeについて考える前に、参照のメリット/デメリットについて考えような
公式サイトのドキュメント読んでこい

533 名前:デフォルトの名無しさん mailto:sage [2017/08/11(金) 09:42:12.68 ID:oTwda99v.net]
c++だと参照保持すると生存期間管理ないからあぶないからやらない
スマートポインタ使う

そのへんの感覺の違いがまだなれない

534 名前:デフォルトの名無しさん mailto:sage [2017/08/11(金) 13:31:10.83 ID:wKLRpp+C.net]
impl Traitがstableに入ったらどうなるか分からないけど、MapとかFilterとかがstructに参照+独自データって形になってるよ
あとはCharIndicesとか。実際のソースはちょいと違うけど元のデータへの参照+と現在位置っていう形になってる

535 名前:デフォルトの名無しさん mailto:sage [2017/08/11(金) 23:09:32.05 ID:wLCu2iAZ.net]
昨日Slackに参加した人たちはお前らって認識で合ってる?

536 名前:デフォルトの名無しさん mailto:sage [2017/08/11(金) 23:41:41.62 ID:lyr4XUnD.net]
ようはfat pointerでしょ



537 名前:デフォルトの名無しさん mailto:sage [2017/08/12(土) 12:16:25.41 ID:IzeoJwWv.net]
コンパイル済みのバイナリパッケージを公開してほしいけどそういうのは実現可能ではない?

538 名前:デフォルトの名無しさん mailto:sage [2017/08/12(土) 18:35:23.01 ID:dKEWL6WP.net]
例えばripgrepのコンパイル済みのバイナリパッケージ
ttps://github.com/BurntSushi/ripgrep/releases/tag/0.5.2

リリースビルドしたバイナリをzipなりでパッケージングすれば良いんでね

539 名前:デフォルトの名無しさん mailto:sage [2017/08/12(土) 21:37:32.89 ID:YDSzcZF8.net]
Pathがすげー使いづらいんだけどなんでなの

540 名前:デフォルトの名無しさん mailto:sage [2017/08/12(土) 22:36:26.03 ID:4PGg+vlK.net]
>>528
具体的にどのあたりが使いづらいと思っているの?

541 名前:デフォルトの名無しさん mailto:sage [2017/08/12(土) 22:57:47.92 ID:Lzx+EbMy.net]
>>527
cargoにそんな感じのサブコマンドあった気がする

542 名前:デフォルトの名無しさん mailto:sage [2017/08/13(日) 04:17:55.12 ID:oa7ekDLN.net]
PathはPath::new(&str)が参照を返すから使いづらい(参照を使いこなせない)
PathBuf使えば楽になったよ!

543 名前:デフォルトの名無しさん mailto:sage [2017/08/13(日) 08:43:10.09 ID:f+gGM+v+.net]
>>529
返り値で返せないとか
PathBufすると変換いるしめんどい
引数の文字列のライフタイムで怒られる

とか

544 名前:デフォルトの名無しさん mailto:sage [2017/08/13(日) 13:14:25.96 ID:3acTHEGf.net]
>>532
>返り値で返せないとか
>引数の文字列のライフタイムで怒られる
fn file_stem<'a, P: AsRef<Path>+?Sized>(path: &'a P) -> Option<&'a OsStr> {
let path = path.as_ref();
path.file_stem()
}
これじゃダメ?

>PathBufすると変換いるしめんどい
to_ownedやintoするのもめんどくさけりゃ、もう死んでしまえ

545 名前:デフォルトの名無しさん mailto:sage [2017/08/13(日) 13:51:20.44 ID:TkYKFb/H.net]
こんな使いづらさでしょ
fn path<'a>(name: &str, ext: &str) -> &'a Path {
Path::new(&format!("{}.{}", name, ext))
// error[E0597]: borrowed value does not live long enough
}

まぁこれも死んでしまえ事例ではあるが
別所にOsStrの所有権(ライフタイム)がある場合に参照だけで済ますためのPathなので
動的に生成したOsStrでPath(参照)だけを返せると思うなよバーカというね

546 名前:デフォルトの名無しさん mailto:sage [2017/08/13(日) 13:56:05.57 ID:LyaOwRfj.net]
>>533
いきなりドラえもんになるのやめろ



547 名前:デフォルトの名無しさん mailto:sage [2017/08/13(日) 16:54:45.71 ID:4uuls5D8.net]
impl Traitっていつstableはいるんだっけ?

548 名前:デフォルトの名無しさん mailto:sage [2017/08/13(日) 22:34:46.55 ID:3acTHEGf.net]
>>536
特に時期は決まってないはず
少なくとも次のstableではない

549 名前:デフォルトの名無しさん mailto:sage [2017/08/13(日) 22:46:00.09 ID:r6u293xs.net]
owned valueとborrowed valueの区別がついてないだけじゃん

550 名前:デフォルトの名無しさん mailto:sage [2017/08/13(日) 23:14:52.73 ID:3acTHEGf.net]
まあ、Sizedと!Sized (DST)の区別がつきづらいってのもあるとは思う
strとString然り、[T]とVec<T>然り、OsStrとOsString、トレイトオブジェクト、そしてPathとPathBuf……

551 名前:デフォルトの名無しさん mailto:sage [2017/08/14(月) 01:43:35.30 ID:tyQzDLaM.net]
アマグラマの書き散らした名前空間みたいできついな

552 名前:デフォルトの名無しさん mailto:sage [2017/08/14(月) 07:06:13.75 ID:HJwH3qkh.net]
>>538-539
それらが区別はついても
その上でライフタイムを理解してないと使いづらいという話じゃないの

>>534なんかはPathがborrowed valueで!Sizedなのは分かった
それはそれとしてPathのまま返すにはどうしたらいいの?って
ライフタイムをきちんと理解してない初学者は躓くわけじゃん

553 名前:デフォルトの名無しさん mailto:sage [2017/08/14(月) 09:35:01.13 ID:59zJ3Di9.net]
>>541
>Pathのまま返すにはどうしたらいいの?
ライフタイムとか関係なく、!Sizedな型はそのまま返すなんてことはできない
コンパイルタイムにサイズが分からないからランタイムでサイズ情報を持つfat pointer経由でしか扱えない
(https://doc.rust-lang.org/book/first-edition/unsized-types.html)
所有権を持った値として返したいのならそのownedなバージョン(今回はPathBuf)かボックス化された状態(PathBuf::into_boxed_pathで得たBox<Path>)を使うしかない

ああ、>>532の「返り値で返せないとか」の意味がようやく分かった。確かにその通りだ。別の型で返す必要がある

554 名前:デフォルトの名無しさん mailto:sage [2017/08/14(月) 09:54:46.27 ID:HJwH3qkh.net]
ええぇ、今までPathが返り値で返せないの意味を分かってなかったのかw
!Sizedな型は+Sizedとかで型サイズを固定させて返すとか頑張るんでしょ、Pathは出来なかった気がするけど

PathBufはDeref type Pathがあるからまぁなんとか
str, String等の命名規則がStr, StrBufじゃないのは気に入らん、みたいなのは分からいでもない
なんか歴史的背景があるんだろうけど、考えるのが面倒でそのまま受け入れてる

555 名前:デフォルトの名無しさん mailto:sage [2017/08/14(月) 09:56:58.67 ID:3NSMgreF.net]
習いたての頃に[u8]を引数に取ろうとして躓きまくったのを思い出す
そういやこれって何でわざわざコンパイラー組み込みでファットポインターを定義してるんだ?
struct Path<'a> { start: *mut (), end: *mut (), marker: PhantomData<&'a PathBuf> }じゃダメなのか?

556 名前:デフォルトの名無しさん mailto:sage [2017/08/14(月) 10:30:03.78 ID:59zJ3Di9.net]
>>544
それだとimpl AsRef<Path> for PathBufとかが出来ない



557 名前:デフォルトの名無しさん mailto:sage [2017/08/14(月) 10:53:05.45 ID:fyv2iRf4.net]
PathがSizedじゃないってのが初学者的にめんくらったわ
strと同じだと思えば理解できた

558 名前:デフォルトの名無しさん mailto:sage [2017/08/14(月) 10:54:47.32 ID:fyv2iRf4.net]
>>537
nightlyって1.21って出るけどそこに入るわけじゃないのね

559 名前:デフォルトの名無しさん mailto:sage [2017/08/14(月) 15:20:15.52 ID:xd4YqYEd.net]
>>542
いかにもRust FAQに載ってそうな話題だと思ったが、ちらっと見た感じ、載ってないな
和訳も1割ぐらいしか進んでないし

560 名前:デフォルトの名無しさん mailto:sage [2017/08/15(火) 01:22:49.60 ID:Kx+225Ge.net]
>>541
>>542の言うとおりそこはライフタイム関係ないから
デフォルトがムーブセマンティックスで、
借用はsubstructural type systemに守られてるってこと覚えたらライフタイム知らなくても分かる。

>>547
特に決まってないよ。
nightlyの途中でマージされたのがいきなり次のstableに入ることもあるし。

561 名前:デフォルトの名無しさん mailto:sage [2017/08/15(火) 05:20:52.55 ID:qX6sO+hu.net]
&Pathを関数戻り値で返せないのにライフタイム関係ないって子たちはエラー内容見えないのか
// error[E0597]: borrowed value does not live long enough

サマリーだけでlifetime関係ないって思い込んでるならE0597の詳細見て理解しような
https://doc.rust-lang.org/error-index.html

562 名前:デフォルトの名無しさん mailto:sage [2017/08/15(火) 05:38:14.01 ID:tN8D0FqC.net]
ちょっと聞きたいんだけどrustのマクロって裏でどういうコードが生成れてるか分かる機能ってあります?

Cのプリプロセッサなら生成コードが出力できるけど、、、

563 名前:デフォルトの名無しさん mailto:sage [2017/08/15(火) 09:18:04.23 ID:cM0t4sQL.net]
Webにいるプログラマって、マサカリとかに代表されるように人格が狂ってる人多いよね。正しければ正義的な。
2ちゃんはさらにひどいけど、そうじゃなくても。
実社会でプログラマの地位が認められてないからかなぁ。

564 名前:デフォルトの名無しさん mailto:sage [2017/08/15(火) 09:27:06.48 ID:O7/Y4aw2.net]
>>550
&PathじゃなくてPathを返すって話だよ
Path: !Sizedだから参照を経由しない形では返せない(fn() -> Pathと書けない)というお話ね
>error[E0277]: the trait bound `[u8]: std::marker::Sized` is not satisfied in `std::path::Path`

こういう流れを見ると本当にDSTは理解されづらいんだなあと思う

>>551
Nightlyで、rustc -Z unstable-options --pretty=expanded foo.rs
これのラッパとしてcargo-expandというものもある
https://github.com/dtolnay/cargo-expand

565 名前:デフォルトの名無しさん mailto:sage [2017/08/15(火) 09:32:50.69 ID:qX6sO+hu.net]
Path:newが&Pathを返すというstdライブラリ仕様を言及してたのかよwww
そりゃ失礼、そんな所よりそれをどうやって使うかを話してるつもりだったわ

566 名前:デフォルトの名無しさん mailto:sage [2017/08/15(火) 17:22:31.52 ID:bUHuOZJE.net]
newがPathを返すと思ってたわ

あはは



567 名前:デフォルトの名無しさん mailto:sage [2017/08/15(火) 17:26:22.04 ID:L9Yq17PV.net]
あはは

568 名前:デフォルトの名無しさん mailto:sage [2017/08/15(火) 18:11:07.59 ID:qRVErxIb.net]
あはははは

569 名前:デフォルトの名無しさん mailto:sage [2017/08/15(火) 18:12:13.59 ID:wgr8KXHg.net]
もしかして他にもnewで&返すのあるの?

570 名前:デフォルトの名無しさん mailto:sage [2017/08/15(火) 18:29:55.70 ID:MDS+g102.net]
ワロス

571 名前:デフォルトの名無しさん mailto:sage [2017/08/15(火) 18:34:48.29 ID:O7/Y4aw2.net]
>>558
標準ライブラリのパブリックな型ではOsStrくらいじゃないかな
from系の関数も含むのなら、std::slice::from_raw_partsとかstd::str::from_utf8とかもある

標準ライブラリ外のクレートでもstrに対するラッパとかでそういうのがあった気がする

572 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 01:13:42.55 ID:lhJRoj0R.net]
>>554
オレも値受け取った後の話だと思ってたわ

573 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 01:18:30.66 ID:lhJRoj0R.net]
ごめん言い忘れたぜ。
>> 558
fn new<S: AsRef<T> + ?Sized>(s: &S) -> &Self
に一般化出来るの全部。transmuteしてるだけだもん。

574 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 01:35:45.19 ID:Vj5dC5z1.net]
>>562
これ系の実装がやたら低レベルなのってどうにかならんもんなのかねえ……

575 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 03:04:04.19 ID:Tcbyhi06.net]
とは言え、Pathみたいにnewtypeパターンでnewtypeの元の型の参照からnewtypeの型の参照を得るケースなんてそう多くないからな(というかDSTくらいでしかやらない)
transmuteもやむなしだろう

576 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 04:03:28.36 ID:1RQ5dDrL.net]
newなんて普通過ぎる名前が悪い
sliceよろしくfromにしておけばよかったんだ



577 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 07:12:51.51 ID:Ip1XZB1d.net]
>>551
https://rust-lang-ja.github.io/the-rust-programming-language-ja/1.6/book/macros.html#マクロをデバッグする

> マクロの展開結果を見るには、 rustc --pretty expanded を実行して下さい。

578 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 10:55:53.36 ID:Agtz0DvI.net]
IntelliJ Rust Pluginのエディタが型表示をヒントとして表示するようになってクッソウゼェw
一瞬便利かなと思ったけどやり過ぎだと思ってオフにしたった
futuresでチェーンしてると型名が長すぎて実態のコードが画面外に追いやられてたわ

変数名にフォーカスしたら型名表示くらいのFRやPRは出てないものかしら

579 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 11:05:25.77 ID:s5nUB7nh.net]
>>567
その機能を持ってきたJavaだと型名が短いからいいんだけどね

580 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 11:50:59.59 ID:11a+64I1.net]
みんな何でRust書いてるの?IntelliJ派?

581 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 17:55:39.36 ID:5vWhS1NV.net]
emacs

582 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 17:56:12.79 ID:Vj5dC5z1.net]
Vim一択

583 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 17:58:42.50 ID:5vWhS1NV.net]
Path(PathBuff)に拡張子を追加するにはどしたらいいすか

f.txtをf.txt.zipにするてきな。

584 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 18:27:36.87 ID:ObQbU6V8.net]
ggrksなので雑に答えてみる
let path = Path::new("f.txt");
let new_name = format!("{}.{}", path.to_str().unwrap(), "zip");
let new_path = Path::new(&new_name);
print!("{:?}", new_path);

これ以上雑な実装はねーだろ(チラッチラッ

585 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 18:47:37.19 ID:U6ziTncO.net]
やっぱそーなっちゃうんですねー。
ありがとうございました。
さすがにこれ以上エレガントなのはないですね

586 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 18:48:57.93 ID:Vj5dC5z1.net]
元から&mut Stringや&mut OsStringを持っていてそれを&Pathに変換するような場面なら、素直にStringやOsStringの時点でpushとかで加工した方が手軽だと思う
OwnedなPathBufしか持っていないのなら一旦OsStringに変換してから拡張子を足してPathBufに戻す
&Pathや&strしか持っていないのなら、そもそもその状態では書き換えようがないからto_ownedする
&mut PathBufしか持っていないのなら、多分設計が良くない。&mut OsStringを受け取れるようにできないか検討しよう



587 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 19:03:14.68 ID:PvRs7uXf.net]
エディタわりとバラバラなのな
俺はVimだけど何となく気になった

588 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 19:22:40.51 ID:ObQbU6V8.net]
来るかなぁと思ってたが、案の定エレガントじゃない回答(>>575)がきたぞw

卓上で語るのが好きでコードに落とせない子なんだろうなぁ
>>575はそのバリエーションで実装に落としてあげるとエレガントな回答になるからちょっとやってみ?

589 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 19:42:34.81 ID:Vj5dC5z1.net]
>>577
1番目
fn f(path: &mut OsString) -> &Path {
path.push(".zip");
Path::new(path)
}
let mut path = "f.txt".into();
assert_eq!(Some("f.txt.zip"), f(&mut path).to_str());

2番目(assertionは省略)
fn g(path: PathBuf) -> PathBuf {
let mut path: OsString = path.into();
path.push(".zip");
path.into()
}

3番目
fn h(path: &Path) -> PathBuf {
let mut path: OsString = path.into();
path.push(".zip");
path.into()
}

ついでに4番目(実際に使うべきでないが)
fn i(path: &mut PathBuf) {
unsafe {
(*(path as *mut _ as *mut OsString)).push(".zip")
};
}

590 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 19:56:17.83 ID:YfsrWVwz.net]
めちゃくちゃエレガントになったな(白目)

591 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 20:11:43.78 ID:ObQbU6V8.net]
1〜3がすごく無駄なバリエーションでワロタ
まとめてこれでいいじゃん, 分けて挙げた意味あるのかいな
let path = f(PathBuf::from("f.txt"));
let path = f(Path::new("f.txt"));
let path = f(OsString::from("f.txt"));
fn f<P: AsRef<Path>>(path: P) -> PathBuf {
let mut path: OsString = path.as_ref().into();
path.push(".zip");
path.into()
}

592 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 20:16:19.25 ID:eiUsQzcr.net]
cloneする奴としない奴を同列に語るのはどうなんだって感じだがな

593 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 20:18:00.24 ID:ObQbU6V8.net]
4を頑張れば>>573を超える雑な実装にできる可能性がありそうだけど無理かなぁ
まぁ無理か・・・

594 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 20:27:22.87 ID:eiUsQzcr.net]
つまり、雑さ選手権であると言う事を見落とした事が>>575の敗因か()

595 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 20:36:20.89 ID:8AGyDDIv.net]
PathBuf::pushじゃいかんのか

let buf = path.to_parh_buf();
buf.push(".zip");
buf.as_ref()

一番良いのはPathの元になったOwnedな型にpushすることだと思うが

596 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 20:36:47.76 ID:8AGyDDIv.net]
let mut にするの忘れた



597 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 20:38:34.55 ID:Vj5dC5z1.net]
let mut buf: PathBuf = "f.txt".into();
buf.push(".zip");
println!("{:?}", buf); // => "f.txt/.zip"

598 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 20:38:39.16 ID:ObQbU6V8.net]
>>581
関数f内でのPath/PathBufのメモリ確保処理に差はないから必要なら後から

599 名前:as_pathでもしたらいいんじゃね
むしろas_refやintoのオーバーヘッドを気にすべきかのう, 100万回くらいループしたら1秒くらいの差が出るかも?
[]
[ここ壊れてます]

600 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 20:39:36.49 ID:8AGyDDIv.net]
失礼、PathBuf.pushだと/がついてしまうのか

601 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 20:44:06.60 ID:kNGkTZBw.net]
だれも>>550に肝心なこと言ってやらないのな。

>>550
関数が&Path返すだけじゃE0597はでねぇのよ。たとえば>>534のは

>fn path<'a>(name: &str, ext: &str) -> &'a Path {
>Path::new(&format!("{}.{}", name, ext))
>}

&format!("{}.{}", name, ext)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

この中でnameとextをdropするからE0597出るんだよ。
まあ、罠だけど。ただの面倒くさいっていう見本みたいだし。

借用を関数の中で結合して返すってのが潜在的に危険だから
やり様は色々あるけど↓が一番簡単。
ttps://play.rust-lang.org/?gist=e4937a92f292952a620eaa7bffa51c21&version=stable

>>563
無理、rustはこういう型シノニムを構造体でラップしたfat pointerとして定義するからtransmuteは必要になる。
こういうnewtypeがやりたいのはunsafe消すこと。
名前からtransmuteしてるようには見えないから名前が悪いのよ。

>>565
from/intoは使い方決まってる

602 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 20:45:56.00 ID:eiUsQzcr.net]
>>587
Path::newやas_ref、intoは単に型システム上の操作であってnoopなのでは(検証してない)
だってPathやらPathBufやらはOsStrやOsStringに対する単なるnewtypeでしょ

603 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 20:54:34.33 ID:8AGyDDIv.net]
let mut buf = PathBuf::from("hoge.txt");
let mut ext = buf.extension().map(OsString::from).unwap_or(OsString::new);
ext.push(".zip");
buf.set_extension(&ext);

604 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 21:03:54.32 ID:8AGyDDIv.net]
>>590
Path::into::<PathBuf>はstr::into::<String>と同じでメモリアロケーション走るはず
as_refはほぼnoop

605 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 21:07:58.66 ID:ObQbU6V8.net]
fn f<T: Trait>(t: T) のトレイトによる分岐はnoopだけど、as_ref, intoはnoopとは限らんよねぇ
impl AsRef, Intoの実装でゴチャゴチャ処理するモノもあるだろうし

Path, PathBufに限ってはinnerを返すだけっぽいからコンパイラによる最適化でnoopになるかな
2,3回前のリリースでもコンパイラ最適化を抜本見直ししてたし、どうなってるかワカラン(自分も検証する気ない)

606 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 21:51:24.68 ID:8AGyDDIv.net]
AsRefはcheapな型変換を実装するためのtraitだし、as_refは常にほぼnoopだと言って良いと思う
https://doc.rust-lang.org/std/convert/trait.AsRef.html



607 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 22:57:30.93 ID:Agtz0DvI.net]
雑に拡張子生成部のワンライナーを目指した(改行がないとは言っていない
let new_ext = ".zip";
let mut buf = PathBuf::from("hoge.txt");
let ext = buf.extension()
.map(OsString::from).map(|mut ext| {ext.push(new_ext); ext})
.unwrap_or(new_ext.into());
buf.set_extension(&ext);

608 名前:デフォルトの名無しさん mailto:sage [2017/08/17(木) 18:40:58.78 ID:8HfS9wXv.net]
std::path::Componentsのimpl AsRef<Path>みたいな地雷もいるけどな! > as_refがnoop
地雷を踏み抜かないように使いたい所存

609 名前:デフォルトの名無しさん mailto:sage [2017/08/18(金) 18:00:28.47 ID:XVXUXs+1.net]
メンバ変数の参照を返すイテレータモドキ
https://play.rust-lang.org/?gist=42ce623d69717a8acdc7736d6d624f60

これに Iterator トレイトを実装させたいのだが、関連型 Item の定義が上手く行かず困っている。
関連型について
type Item = <&T>; とするとライフタイムが必要だと出る。
しかし
impl<'a, T> Iterator for Foo<T> {
 type Item = Option<&'a T>;
...
とか
PhantomData 使ったりしてみた https://play.rust-lang.org/?gist=5b127531f2b93a1a9a9143de86ad2340
けど通らない。

どうすれば良いのだろう?

610 名前:デフォルトの名無しさん mailto:sage [2017/08/18(金) 18:05:55.69 ID:XVXUXs+1.net]
ミス。
> type Item = Option
の Option<> は要りません。

611 名前:デフォルトの名無しさん mailto:sage [2017/08/18(金) 18:07:34.29 ID:LVQKp7rQ.net]
>>597
impl<'a, T> Iterator for &'a Fooじゃダメな理由とかある?

612 名前:デフォルトの名無しさん mailto:sage [2017/08/18(金) 18:17:10.82 ID:XVXUXs+1.net]
impl<'a,T> Iterator for &'a Foo<T> {
type Item = &'a T;
fn next(&mut self) -> Option<&T> {
Some(&self.x)
}
}

これはこれで error[E0495]: cannot infer an appropriate lifetime for lifetime parameter in generic type due to conflicting requirements
エラーが出ます。

613 名前:デフォルトの名無しさん mailto:sage [2017/08/18(金) 18:20:10.90 ID:LVQKp7rQ.net]
>>600
nextの戻り値のlifetimeが不足している
Option<&'a T>にしなくちゃ

614 名前:デフォルトの名無しさん mailto:sage [2017/08/18(金) 18:35:09.68 ID:XVXUXs+1.net]
>>601
おお、出来ました! ありがとうございます。

a.next() ではなく (&a).next() となってしまうのが心残りです。
関連型 Item のライフタイム問題が無ければ素のコードで行けるのに、
何故こんなことになってしまうのか……

615 名前:デフォルトの名無しさん mailto:sage [2017/08/18(金) 19:24:37.05 ID:LVQKp7rQ.net]
>>602
Vecとかみたいに、&'a Foo<T>をラップするstruct Iter<'a, T>とfn iter(&self) -> Iter<'a, T>を作った方がエルゴノミクス的に良さそうではある
>>597のコードで動かないのは、Iterator::nextのレシーバのライフタイムが匿名だからself.xが後で書き換えられるのを防げないことによるものだろう
Iteratorトレイトの仕様上、仕方がない

616 名前:デフォルトの名無しさん mailto:sage [2017/08/18(金) 19:31:38.24 ID:zUkt3uOb.net]
ていうかあんまり本質的な問題ではないけどtakeを使うべき場面だな



617 名前:デフォルトの名無しさん mailto:sage [2017/08/18(金) 23:23:26.21 ID:68PBtc02.net]
Rustの2017年ロードマップの進捗状況
https://www.infoq.com/jp/news/2017/08/rust-2017-roadmap-six-months

618 名前:デフォルトの名無しさん mailto:sage [2017/08/19(土) 00:07:19.34 ID:gC1uMiLY.net]
>>592-594
変換系の命名規則はコストで決まってる。
ttps://rust-lang-nursery.github.io/api-guidelines/naming.html#ad-hoc-conversions-follow-as_-to_-into_-conventions-c-conv

ただまだ質が悪いから準拠してこうぜ!ってのが2017のロードマップ。

619 名前:デフォルトの名無しさん mailto:sage [2017/08/19(土) 04:06:47.11 ID:eOOMhS38.net]
何で皆さんそんなにコピーがお嫌いなんですか

620 名前:デフォルトの名無しさん mailto:sage [2017/08/19(土) 08:31:32.98 ID:BpKw1nHe.net]
Copyは良いがCloneは避けたい
Cloneどんどんやって良いようなプログラムならrustで書かなくても良い

621 名前:デフォルトの名無しさん mailto:sage [2017/08/19(土) 10:50:48.03 ID:5Hm4My/o.net]
>>603
> Vecとかみたいに、&'a Foo<T>をラップするstruct Iter<'a, T>とfn iter(&self) -> Iter<'a, T>を作った方がエルゴノミクス的に良さそうではある

Slice のコードを参考にしてみた結果、Some(&v) じゃなくて Some(&*ptr) という unsafe な手法ですが、こんな感じで上手く行きました。
https://play.rust-lang.org/?gist=639045def9c07026e8b6b0267a9dae98

ありがとうございました。

622 名前:デフォルトの名無しさん [2017/08/19(土) 10:56:56.32 ID:i5Fk1Iv8.net]
copyとcloneの違いって?

623 名前:デフォルトの名無しさん mailto:sage [2017/08/19(土) 14:19:36.24 ID:zLcrLAmh.net]
error-chainのまともなサンプルがないんだけど、みんな使ってないのかな

624 名前:デフォルトの名無しさん mailto:sage [2017/08/19(土) 14:23:54.00 ID:FnHzgZW7.net]
crates.ioのreverse dependenciesが10ページを超えているようなcrateを「みんな使ってない」はずがない
GitHubのexamplesでなんやかんや事足りるからなあ

625 名前:デフォルトの名無しさん mailto:sage [2017/08/19(土) 14:28:59.69 ID:IJZoKA+S.net]
「Notepad++」v7.5が公開、“LaTeX”や“Rust”、“Erlang”など19言語をサポート
forest.watch.impress.co.jp/docs/news/107

626 名前:6002.html []
[ここ壊れてます]



627 名前:デフォルトの名無しさん mailto:sage [2017/08/19(土) 15:21:50.70 ID:sXEKiJ8x.net]
error-chainてメインでしか使えない?

628 名前:デフォルトの名無しさん mailto:sage [2017/08/19(土) 15:24:47.15 ID:sXEKiJ8x.net]
日本語の記事もほぼないし

629 名前:デフォルトの名無しさん mailto:sage [2017/08/19(土) 15:47:44.15 ID:nyFhS1vK.net]
テキストエディタも高機能な奴は起動が遅かったり動作が重い印象がある

630 名前:デフォルトの名無しさん mailto:sage [2017/08/19(土) 16:40:03.65 ID:pL/zMRBl.net]
>>611
error-chain、なんか使いにくそうと勝手に思い込んでる

631 名前:デフォルトの名無しさん mailto:sage [2017/08/19(土) 16:53:30.74 ID:FnHzgZW7.net]
>>615
むしろ、Rust界隈でまともな日本語記事とやらがどれだけあるのやら……

632 名前:デフォルトの名無しさん mailto:sage [2017/08/19(土) 23:55:33.96 ID:nyFhS1vK.net]
>>613
Notepad++ってちょっと重い。SakuraEditorより重いと思う。あとSDIで使えなかった気がする

633 名前:デフォルトの名無しさん mailto:sage [2017/08/20(日) 00:02:30.31 ID:oGIfVBlS.net]
直受けの50万 客:いつまでもうちにいていいよ
3次受けの50万(客は70万払ってる) 客:短期延長していい?
5次受けの50万(客は110万払ってる) 客:作り終わったらとっと出てけ できなかったら即退場だ 
長時間労働 高稼働 高スキル要求が多い

零細フリーランスサイトは5次受けから誰もできない難易度の高い仕事 余り物の仕事を紹介してくる。40万円代でやってくれと

これならJIETから3次でいったほうがいいな

446非決定性名無しさん2017/08/02(水) 22:12:48.95

JIETに毎月5千円払えば3次から入場できるだろ?
高額をうたうフリーランスのサイトはだいたい5次から45万円
JIETで閲覧応募できる末端価格からさらに搾取するのが高額をみせつけるフリーランスサイトでした
高額案件をみせつけるフリーランスサイトも案件の取得はJIETでした

473非決定性名無しさん2017/08/03(木) 15:21:30.71

JIETに加入すれば誰でも3次60万からスタートだ。フリーランスのサイトをやってる
自称エージェントもそこから案件情報を取得しきてる。サイトで60万で釣って40万から55万の
間でやらしている。

372仕様書無しさん2017/08/11(金) 10:31:43.41
フリーランスで検索すると引っかかる零細ITがやっているフリーランスのサイトはだめだ。
高額に見せているけど実際は50万前後
JIET加入した方がいいよ。案件は毎日千件以上末端価格は60万円 平凡な稼働時間の80万円の案件もある。
ユー子も求人をだしてる。名刺も渡せる。ユー子に名刺が渡せるんだぞ。夢のようだ

それらの案件まさぐってHPで転売していたのが零細ITがやるフリーランスサイト

自称エージェントはJIETから流れてくる案件を転売してるだけだった。
JIETに加入すれば誰でも案件に応募することができた。収入が40万50万台にならなくて済む

634 名前:デフォルトの名無しさん mailto:sage [2017/08/20(日) 15:00:56.50 ID:pZQ2byHx.net]
標準的なステーメントや型、メソッドなどがずらずら並んだ資料とかないのかな
エディタ用に定義ファイルを作りたいのだがLearning的なページだと全部載っていなくて・・・

635 名前:デフォルトの名無しさん mailto:sage [2017/08/20(日) 16:16:49.80 ID:T53roUwE.net]
>>621
https://github.com/rust-lang/rust/tree/master/src/libstd

636 名前:デフォルトの名無しさん [2017/08/20(日) 21:48:27.38 ID:tw1yQ9/1.net]
いくつか↓のコードについて質問させてください。
https://play.rust-lang.org/?gist=b2fe59eb7aee706b6acb67bb9709967f&version=stable

1. PartialEqが実装されていないというエラーが出てしまうのですがどう対応したら良いのでしょうか?
試しに
#[derive(PartialEq)]
pub trait Serialize {
とした



637 名前:ところerror: `derive` may only be applied to structs, enums and unionsというエラーが出てしまいました。traitにPartialEqを持たせることはできないのでしょうか?

2. error[E0277]: the trait bound `std::vec::Vec<&Serialize>: std::iter::FromIterator<Value<'_>>` is not satisfiedというエラーですが、これはどのようなコードにすれば良いのでしょうか?解決方法が全く思い浮かびませんでした。


ちなみに、enumでArray(Vec<Value>)ではなくArray(Vec<&'a Serialize>)となっている理由は外から型?を追加したいためです。

よろしくお願い致します。
[]
[ここ壊れてます]

638 名前:623 [2017/08/20(日) 22:15:56.31 ID:tw1yQ9/1.net]
すみません、少し修正したものをアップしました。よろしくお願い致します。
https://play.rust-lang.org/?gist=e29af50f281802f700c0bdf8d676da54&version=stable

639 名前:デフォルトの名無しさん mailto:sage [2017/08/20(日) 22:56:17.35 ID:JGkv/tSR.net]
トレイトと型、ライフタイムパラメータと型パラメータの区別が付いてないような、

pub enum Value<'a> {
Nil,
Array(Vec<&'a Serialize>),
}
これとか、書くなら
pub enum Value<'a, T> where T: 'a + Serialize, {
Nil,
Array(Vec<&'a T>),
}
こうでは?

> impl<'a> Serialize for Value<'a>
...

640 名前:デフォルトの名無しさん mailto:sage [2017/08/20(日) 23:13:22.65 ID:T53roUwE.net]
一応impl<'a> PartialEq for &'a Serializeはできる
クソの役にも立たないからやるべきでないが

641 名前:623 [2017/08/21(月) 01:00:32.98 ID:FwjdF0gP.net]
>>625
ありがとうございます!
頂いたpub enum Value<'a, T> where T: 'a + Serialize, {を入れてみたところ以下のようなエラーになりました
error[E0243]: wrong number of type arguments: expected 1, found 0
--> src/value/serialize.rs:10:24
|
10 | impl<'a> Serialize for Value<'a> {
| ^^^^^^^^^ expected 1 type argument

この場合Serializeを実装した型を追加で指定しないといけないと思うのですが、例えば
struct UUID {
uuid: u128,
}
impl Serialize for UUID {
}
こんな感じの型をライブラリ使用者が外部から追加しようとした場合、教えていただいた書き方だとどのように指定すれば実現できるのでしょうか?
あと最後の…(省略されてる?)が気になります…

>>626
そんな書き方もできるんですね!参考になります!

642 名前:デフォルトの名無しさん mailto:sage [2017/08/21(月) 01:35:15.12 ID:bqQguu/k.net]
>error[E0243]: wrong number of type arguments: expected 1, found 0
この場合、impl<'a, T> Serialize for Value<'a, T>としなければならない。というかエラーメッセージが言っていることそのもの

ところで、Value::Arrayには複数種類の型の値を入れることを想定している?
だとしたら>>625のような型パラメータによる手法は適さないと思う
実現したい事が分からないから具体的な提案はできないけれど、とりあえずArrayのなかに&SerializeやT: Serializeを持たせる以外の方針が必要だと思う
例えば、serde_json::ValueだとArrayの中にT: Serializeでなく、Valueを入れ子に持っている

643 名前:623 [2017/08/21(月) 02:32:19.49 ID:FwjdF0gP.net]
>>628
> ところで、Value::Arrayには複数種類の型の値を入れることを想定している?
はい、いろんな型を入れたいです。
今現在↓みたいになっていて(コンパイルできない)改行が多くて書き込みできなかったので改行を減らしてあります。
pub enum Value<'a> {
Nil, Bool(bool), Int8(i8), Int16(i16), Int32(i32), Int64(i64), UInt8(u8), UInt16(u16), UInt32(u32), UInt64(u64),
Float32(f32), Float64(f64), Binary(Vec<u8>), String(String), Array(Vec<&'a Serialize>), Map(HashMap<String, &'a Serialize>),
}
これをライブラリとして公開して、そのライブラリの使用者が
struct UUID {
uuid: u128,
}
impl Serialize for UUID {
fn serialize(&self) -> Vec<u8> {
unimplemented!()
}
}
こんな感じにSerializeをUUIDに実装すればArray(Vec<&'a Serialize>)の中に入れられるのではないかと思い実装しました(だめだったのですが…)
serde_jsonも参考にしたのですがArrayの中にValueを入れてしまうとライブラリの使用者が型を追加できないのではと思って上の感じにしました。

644 名前:
何かいい方法はないのでしょうか?
[]
[ここ壊れてます]

645 名前:623 [2017/08/21(月) 02:40:57.36 ID:FwjdF0gP.net]
https://github.com/3Hren/msgpack-rust/blob/master/rmpv/src/lib.rs#L416
このライブラリだとValueの中にExtを作ってその中にシリアライズ済みのデータを入れてるみたいですね。
確かにこれならいけそうですが、Valueの中にシリアライズ済みのデータを入れるのがなんだかスッキリしないです…
これ以外には方法はないのでしょうか?

646 名前:デフォルトの名無しさん mailto:sage [2017/08/21(月) 05:08:14.26 ID:G0wb4QJd.net]
(ageるなウザい)



647 名前:623 mailto:sage [2017/08/21(月) 15:33:43.28 ID:3Zba4J1M.net]
>>631
すみません、sageのこと忘れてました…

648 名前:デフォルトの名無しさん mailto:sage [2017/08/21(月) 16:25:46.95 ID:oGU2m9lq.net]
rustの使用者は型をガチガチに固めて型安全であることを至上としてる風があるから
利用者が自由に型を追加できることの方にスッキリしない印象を持つのではなかろうか
例えば、hyperのHTTP Headerとかね

それでも尚そうしたいのであればrmpvなやり方は正しいんじゃないのかね

649 名前:623 mailto:sage [2017/08/21(月) 21:07:50.83 ID:3Zba4J1M.net]
>>633
なるほど
rmpv方式でやってみようと思います!

650 名前:デフォルトの名無しさん mailto:sage [2017/08/21(月) 21:48:43.99 ID:rYDUfKH7.net]
ライブラリを作る側はゆるゆるにする、使う側はギチギチにする、だったかな

651 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 02:48:14.20 ID:womi0ii/.net]
何の言語における誰の格言だい?
Rustライブラリの話じゃないよな, Rustはno_std + unsafeでもしないと作る時すらギチギチだものな

652 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 09:17:41.34 ID:C9KUE8jE.net]
https://doc.rust-lang.org/src/core/iter/mod.rs.html#839

default とかいう謎のキーワードがあるけど、これ何だ?

653 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 09:30:00.19 ID:DDLonIhk.net]
>>637
Specialize可能な実装を表す修飾語
https://github.com/rust-lang/rfcs/blob/master/text/1210-impl-specialization.md

654 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 09:35:30.79 ID:deDFrfsy.net]
rustconfのまとめ誰かたのむ

655 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 09:41:20.78 ID:C9KUE8jE.net]
>>638
ありがとう。
本家ソース読んでると、ドキュメント化されてない文法とか現れて時々困惑する。

656 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 23:09:44.08 ID:SJLsCwn3.net]
impl-specializationってfor T以外に具象型でも出来たのか。パラメタ型が現れればいいのか。

>>640
まだRFC #1331が出来てないから正式な文法は存在しない。
自分が使ってるrustcのソース読む以外に文法知る術はないよ。



657 名前:デフォルトの名無しさん mailto:sage [2017/08/23(水) 02:50:24.84 ID:4QoHymGs.net]
チルダ記号~、owned pointer が廃止されてから余ってるけど、何かに使わないのかね

658 名前:デフォルトの名無しさん mailto:sage [2017/08/23(水) 07:25:27.68 ID:B+nj/ke1.net]
オフラインで開発するときにどうすべきかを書いたドキュメントってないの?
インストール方法とかライブラリの取得・展開方法とか

659 名前:デフォルトの名無しさん mailto:sage [2017/08/23(水) 07:54:23.48 ID:4QoHymGs.net]
https://www.rust-lang.org/ja-JP/other-installers.html にインストーラーあるだろ。
あるいはレポジトリからソース落として ./configure; make; sudo make install で終わらんか?

依存ライブラリは、Cargo.toml で
[dependencies]
foo = { git = "https://github.com/hoge/foo.git" }

の代わりに、https://github.com/hoge/foo をクローンして来て、
[dependencies.foo]
path = "../foo"
こんな感じでパスを与えれば良い。

660 名前:デフォルトの名無しさん mailto:sage [2017/08/23(水) 09:46:49.23 ID:OBNmODWh.net]
最近のpythonではpipでコンパイル済みのバイナリをダウンロードしてインストールしてくれるけど
rustの世界でもこうなりませんかね

661 名前:デフォルトの名無しさん mailto:sage [2017/08/23(水) 12:24:06.11 ID:18+Jkbm8.net]
前も同じ質問してたな
rpmやbrew, windows storeにバイナリをアップすればいいんじゃないの
ユーザ向けのバイナリ配布環境なんてrustやcargoが整備するモノじゃないでしょ

どうせrustやcargoを扱うのは開発者で
開発者はバイナリよりソースの方が色んな面で助かる

662 名前:デフォルトの名無しさん mailto:sage [2017/08/23(水) 13:30:39.91 ID:H3GKgLxU.net]
cargoにオフラインモードってないの?

663 名前:デフォルトの名無しさん mailto:sage [2017/08/23(水) 23:29:11.08 ID:iIVYU9Hy.net]
>>643,647
めんどくせぇ話ししてんな。

alexcrichtonが頑なに拒み続けてるからオフラインでcargoは*まとも*につかえね。
依存crateが全部ローカルにあれば問題ないけど、そもそも外部crateがcargoに
依存してるせいで結局、ネットワークにアクセスする。それにapache archivaみたいなのが
rustにはないからローカルで管理もできんし、cargo-vendorもcargo-local-registryも開発止まってる。
現状、依存グラフの全てを事前にローカルにダウンロードするツールがない。

cargo側のindexもcargo.lock更新する必要もないのに
ネットワークアクセスしてオフラインでクラッシュする問題は
そろそろ落ち着いてきたけど、rustcの依存関係調べるあたりが
腐ってるからそっちも影響してくる。これの問題は今、
インクリメンタルコンパイル実装の障害になってるからどうにかしてる最中。

海外は日本と違って無線LAN環境普及してるからか、
ちょっとオフラインになっただけでテストすら走らせられなくなったりでissue飛びまくってんだけどね。
結局replaceも糞でpatchに置き換わるし。

664 名前:デフォルトの名無しさん mailto:sage [2017/08/24(木) 00:17:41.78 ID:l7HQ+RMc.net]
自宅ならともかくモバイルで開発しようとするとオンライン必須は迷惑
rustc直打ちなら問題ないけど非標準のCrateをどうするんだという話に

665 名前:デフォルトの名無しさん [2017/08/24(木) 00:28:13.68 ID:31vrvgnR.net]
Frequently Asked Questions
doc.crates.io/faq.html#how-can-cargo-work-offline
> How can Cargo work offline?
> ...(中略)
> As of Rust 1.11.0 Cargo understands a new flag, --frozen, which is an assertion that it shouldn't touch the network.

666 名前:デフォルトの名無しさん mailto:sage [2017/08/24(木) 02:10:25.35 ID:2y1G8HO4.net]
モバイルもさることながらオフライン限定サーバとかあるしなあ



667 名前:デフォルトの名無しさん mailto:sage [2017/08/24(木) 09:10:11.03 ID:7OYe0+S4.net]
よく分からんけど、週末カフェでテザリングしながら開発する分には全く困ったことないけどな
海外っつーか米国は半端に無線LANが整備されまくってるから大変そうだなぁとは思う

668 名前:デフォルトの名無しさん [2017/08/24(木) 10:02:40.03 ID:N2QX0p2s.net]
>>652
> よく分からんけど、週末カフェでテザリングしながら開発する分には全く困ったことないけどな

節子それはオンラインだ。
飛行機に乗ってる時とかはそれなりの時間オフラインになりそう。

669 名前:デフォルトの名無しさん mailto:sage [2017/08/24(木) 10:56:17.70 ID:yyGwhDVO.net]
>>653
清太よ、>>649の「自宅ならともかくモバイルで開発しようとするとオンライン必須は迷惑 」へのレスだよ
この「モバイルで開発」はテザリングを指しているのではないのであれば、どういう環境のこと言ってるんだろうね

670 名前:デフォルトの名無しさん mailto:sage [2017/08/24(木) 11:36:23.74 ID:nec4MnrL.net]
移動中という状態を除外したら移動体通信ではなくて只の無線通信

671 名前:デフォルトの名無しさん mailto:sage [2017/08/24(木) 18:47:05.57 ID:NSzs0jC1.net]
個人的にはcargoが色々手を回しすぎなのが問題だと思うよ
ちょっと想定外だけど真っ当な使い方をしようとすると面倒が増えて、それをissueとして投げるしか無いからcargoがますます巨大になる
https://github.com/rust-lang/rust-roadmap/issues/12
↑でもちょっと出てるけど、今のcargoはインターフェイスとしてそれなりに使えるので、rustc以上cargo未満なツールを作ってくれるとありがたい
他のビルドツールとの連携とか今はかなり面倒。

672 名前:デフォルトの名無しさん mailto:sage [2017/08/25(金) 06:54:52.63 ID:fv88sy22.net]
struct Node<T> {
data: T,
}
があって、

struct Container<T> {
nodes: Vec<Rc<RefCell<Node<T>>>>,
}
のようなContainerを定義して、このコンテナから&Tに直接アクセスするiteratorを作りたい
のですが、どうしたら出来るでしょうか?(そもそも出来るのでしょうか?)

雰囲気的には↓のような感じになると思うのですがライフタイムがよく分かりません。

https://play.rust-lang.org/?gist=fb73c80c4303adc14083d049de6ccf3e&version=stable

673 名前:デフォルトの名無しさん mailto:sage [2017/08/25(金) 12:13:31.91 ID:wqoYH6g/.net]
>>656
そういう公式ツールの増大は開発環境を複雑&巨大にするばかりだからやめて欲しい
cargoサブコマンドを公式rust libよろしく外部に吐き出してしまえば鬱陶しい文句も出なくなりそう

674 名前:デフォルトの名無しさん mailto:sage [2017/08/25(金) 15:09:41.26 ID:yTj1cv1p.net]
>>657
この例ではRefCell::borrowが返すRef (owned)から<Ref as Deref>::derefによってRefからの借用として&Node<T>を得ているわけだけど、
<NodeIter as Iterator>::nextの末尾でRefがdropされているから借用は関数の外まで生き残らない

&Tを直接返す方法があるとは思えないけど、Ref<'a, T>を返すことはできる
https://play.rust-lang.org/?gist=5c4a7b0de00dcc6ec0612b8846dd6bfb&version=stable

675 名前:デフォルトの名無しさん mailto:sage [2017/08/25(金) 15:38:40.83 ID:J7NBnr1n.net]
>>659
Refを返すのは思いつきませんでした。
ありがとうございます。それでもよい気がするのでやってみます。

676 名前:デフォルトの名無しさん mailto:sage [2017/08/26(土) 10:47:16.34 ID:O+zDlIdw.net]
このスレで話題にするのはアレかもしれないが、 Servo nightly build が
いつ試してみても盛大にぶっ壊れていて、開発順調なのか心配になる。

Rust で開発していると mutability で詰むことがあって、よーく考えてデータ構造なり
を変更すればうまく解決できることが多いし、コードもより良くなっていることが多い。
でもその変更って毎回異なった自明でないものだし、局所的なもので済まないこともある。
Servo くらい大規模なプログラムになったとき、もうどうしようもなく詰んだりしないんだろうか。



677 名前:デフォルトの名無しさん mailto:sage [2017/08/26(土) 11:32:33.62 ID:mrwT3sC4.net]
やっぱブラウザ作るには向いてません
てなったら悲しいな

678 名前:デフォルトの名無しさん mailto:sage [2017/08/26(土) 12:07:35.67 ID:O+zDlIdw.net]
気づいたら struct のメンバがほとんど RefCell になってるとかありそう。

679 名前:デフォルトの名無しさん mailto:sage [2017/08/26(土) 12:14:24.38 ID:3J5PaXHT.net]
Rustに熟知してれば変更は自明であり、機能分解点を精査してれば変更は局所的なもので済むんでないかな
小規模なモノを無計画に作るにはRustは適さない言語だと心底思う

Servoは長いこと開発続けてるけどあんまり精力的に開発する気なさそうだよなぁ
Mozillaが営利団体として潰れそうだし・・・実際Mozilla Japanは潰れてるorz

680 名前:デフォルトの名無しさん mailto:sage [2017/08/26(土) 12:48:20.45 ID:qL+5xDF6.net]
キノコ雲を見上げるsteveklabnikの画像がRust界隈でにわかにミーム化しつつあって笑う

681 名前:デフォルトの名無しさん mailto:sage [2017/08/26(土) 16:16:56.49 ID:1psTTOfA.net]
servoで作ったモジュールがfirefoxに取り込まれていっているし、実験プロジェクトとしては成功なのでは

682 名前:デフォルトの名無しさん mailto:sage [2017/08/26(土) 22:25:08.80 ID:YYTb5WfA.net]
Rustに限った話ではないですけど
・構文解析
・ハイライト
・オブジェクト追跡
・入力補完
などの機能を持ち高速に動作するテキストエディタってないですかね?
JavaやNode.jsを使った物は総じて動作が重いですし、Cなどで書かれてネイティブな物は機能性で劣る気がします

683 名前:デフォルトの名無しさん [2017/08/27(日) 01:57:19.50 ID:OZ/i8G6F.net]
>>667
Node.jsで作ったエディタが重いってそれVSCodeの前で言えるの?

684 名前:デフォルトの名無しさん mailto:sage [2017/08/27(日) 02:04:39.75 ID:mxFQINt9.net]
ageるなアホ

VSCodeつーかAtomは実際重たいからな
あとスレッドぶん回すからノートPCで動かすとバッテリー消費がシャレにならん

JetBrainsのCLionにRust Plugin入れたらブレークポイントも貼れるし良いぞ
誰かJetBrainsから有料版出る前にブレークポイント貼れるようにするPR出さないかねぇ
地味に高いから購入する気にはならんのだよな

685 名前:デフォルトの名無しさん mailto:sage [2017/08/27(日) 02:12:16.71 ID:PbodRtd5.net]
Rustプラグインを単体の製品にするとは思えんけどねえ
彼らは例えばScalaのプラグインとかも手がけているけど別に製品化している訳じゃないし

686 名前:デフォルトの名無しさん mailto:sage [2017/08/27(日) 02:34:48.02 ID:SDSllFYF.net]
VSCode重たくて殺意生える
いちいちワンテンポ遅いんじゃ



687 名前:デフォルトの名無しさん mailto:sage [2017/08/27(日) 04:11:59.30 ID:y+D9Ax/7.net]
Vimすらも重いことあるんだけど俺

688 名前:デフォルトの名無しさん mailto:sage [2017/08/27(日) 07:38:59.45 ID:mxFQINt9.net]
vi使えよ、viの軽さに慣れたらvimはそりゃ重たいでしょ

>>670
Scalaなんて10年以上前に流行った言語のIDEを今更有料化しても売れないだろうからな
Rustは今現在流行ってる(?)言語だし売るんじゃねーのかね

689 名前:デフォルトの名無しさん mailto:sage [2017/08/27(日) 10:25:11.28 ID:y+D9Ax/7.net]
viとか使ってるやついたのか

690 名前:デフォルトの名無しさん mailto:sage [2017/08/27(日) 12:17:29.76 ID:PbodRtd5.net]
Xi使おうぜ

691 名前:デフォルトの名無しさん mailto:sage [2017/08/27(日) 12:49:38.49 ID:PVSAtTcW.net]
Atom (Electron) が Blink から Servo に乗り換えれば軽くなるのだろうか?

692 名前:デフォルトの名無しさん mailto:sage [2017/08/27(日) 19:27:41.18 ID:gsqvcCn0.net]
vscodeって重いよな?起動も動作も軽快とは言い難い
むしろvscodeが軽快に使えているという人がいるならどのような環境で使用しているのか聞きたいわ
SSDを乗せた標準電圧版Coreiモバイルノートでも結構もっさりだし

693 名前:デフォルトの名無しさん mailto:sage [2017/08/27(日) 19:39:49.26 ID:PbodRtd5.net]
もっさりとかいう言葉じゃ意味不明だからせめて数値で言ってくれ

694 名前:デフォルトの名無しさん mailto:sage [2017/08/27(日) 19:47:01.83 ID:SLqFnPu1.net]
何を妥協して「せめて」なのか分からんが数値あげてやろう

MacBookでIntelliJが6時間くらい保つ所が3時間くらいしか保たない程度に無駄処理多い
プロセス上の待機スレッド数も10〜20くらい違った覚えがある

待機中でもそんだけスレッド回してるから、コーディング中、ビルド中の負荷もでかくなるよね
VSCodeを愛用してるコーダーはemacs愛用してるコーダー並みにマゾだと思う(viユーザ感

695 名前:デフォルトの名無しさん mailto:sage [2017/08/27(日) 19:49:16.80 ID:SLqFnPu1.net]
>>678
あ、レスするならついでに「せめて」で説明要求を妥協した点を教えてくれい
確認してる範囲であれば答えるよ

696 名前:デフォルトの名無しさん mailto:sage [2017/08/27(日) 23:25:25.14 ID:tvWh4D3N.net]
好きなエディタを使ったらええ



697 名前:デフォルトの名無しさん mailto:sage [2017/08/28(月) 09:34:01.20 ID:A8OmMbPi.net]
全くだ、重たいと事実を指摘されても発狂することなく
重たくても他に良い所があるから使ってるんだと言い切っていたemacs愛用者は良い人たち

>>675
バックエンドRust, フロントエンドSwift, 通信プロトコルJSON, プラグインサンプルPython
ごった煮過ぎて笑うわw

698 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 13:54:58.32 ID:AB0hyKA3.net]
rustってやっぱりスペックいいパソコンと高速なネット回線がないと厳しいですね

699 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 22:48:16.13 ID:agJG8fpm.net]
普通の言語だと処理の一部を関数に切り出すのとか簡単に出来るけどRustだと返り値の方が分からなくてそれが難しいことがあるよね

700 名前:デフォルトの名無しさん mailto:sage [2017/09/01(金) 10:25:57.73 ID:pDFuyP/L.net]
let a: () = { ... };

でコンパイラがエラーとして正しい型を教えてくれるぞ。

701 名前:デフォルトの名無しさん mailto:sage [2017/09/01(金) 13:32:10.36 ID:PRuVKL7F.net]
クロージャにすれば良い
なあに、きっと最適化で普通の関数と同じ扱いになるさ(適当)

702 名前:デフォルトの名無しさん mailto:sage [2017/09/01(金) 20:19:45.83 ID:Mxd80Z9N.net]
Rustのスレあったんだね

703 名前:デフォルトの名無しさん mailto:sage [2017/09/01(金) 20:51:46.56 ID:d10AKhdK.net]
おい、時報はどうしたんだ?

704 名前:デフォルトの名無しさん [2017/09/01(金) 23:41:11.07 ID:62CxLGbq.net]
unsafeだらけ

705 名前:デフォルトの名無しさん mailto:sage [2017/09/01(金) 23:45:28.89 ID:PRuVKL7F.net]
Pijulで開発されているらしきcrateを発見してrepositoryリンクを辿ってみたらNot foundが返ってきた
https://crates.io/crates/futures-derive

706 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 00:14:47.90 ID:aRnAy5mn.net]
スクワット中なんじゃないの, 筋力ついたらリリースされるでしょ



707 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 00:45:15.54 ID:Qzt2A3g3.net]
Rustが最強のプログラミング言語である証明
https://hayato.io/2017/icfp-rust/

遂に証明されたか……

708 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 01:24:01.14 ID:X2T/f4uE.net]
Round 1の結果のみで語られてもねえ

709 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 01:50:33.08 ID:cF7LUBE8.net]
なんかnightlyにPythonのジェネレータ入ったとか聞いたんだけど誰得?
もうtokioつかFutureあるし。

710 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 08:16:03.50 ID:oilxAadu.net]
いつまでたってもスライスパターンが標準にならないのなんで?
ほかの関数型言語みたいな言語標準?のリストと、そのパターンマッチ、があればいいけど
そういうつもりもないんならスライスパターンをはよ強化&標準装備してほしいんだが

711 名前:デフォルトの名無しさん [2017/09/02(土) 08:35:22.00 ID:zv/5K5Jn.net]
私は最強のRust以外のプログラミング言語で書く気はありません

712 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 08:40:19.17 ID:MacxmZWQ.net]
Featureを駆使するので楽になるのはそうだが、
逐次処理的に書けるasync/awaitの方がさらに楽なので
それを実現するための要素としてgeneratorは必要

あとIteratorの実装も楽になる

713 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 08:40:57.03 ID:MacxmZWQ.net]
FeatureじゃなくてFuture

714 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 11:39:08.16 ID:Nnknp9qO.net]
>>692
なんていうか、自分のチームの優位性を示してドヤろうとしたけど決定的な証拠がなかったから自分に有利な調整をしたという感じだな
特定のチームへの非難をしつつそのチームの人間のツイートを自分の主張の補強に使っているのもいろいろアレ
まあ競技プログラミング界のゴタゴタはどうでも良いけどとりあえずRustを巻き込まないで欲しいわ

715 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 12:32:15.66 ID:3cz+aWzV.net]
>>692に対してちょこちょこマジレスがいるけど
正規化の文章の注釈[4]でウォーズマン

716 名前:理論とか引っ張り出してるからな []
[ここ壊れてます]



717 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 13:10:10.49 ID:U8pYefIa.net]
マヌケは見つかったようだな…ロクにリンク先も読めないのに批判する口だけの能無しが…

718 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 17:38:03.40 ID:pn8ujE89.net]
風情のないやつらだ

719 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 19:03:59.64 ID:AHW4eZK5.net]
ウォーズマン理論により各言語の普及率(PG人口比)でスコアを倍加すると
数の暴力が発揮されJavaが最強のプログラミング言語であることが証明される

とでも言えば風情があるのかね?

720 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 19:58:54.78 ID:X2T/f4uE.net]
風情駆動開発

721 名前:デフォルトの名無しさん mailto:sage [2017/09/03(日) 01:23:29.76 ID:KzrJfOQ0.net]
ネタにマジレス以下の寒い話だな

722 名前:デフォルトの名無しさん [2017/09/03(日) 02:55:54.90 ID:8KnlJyLG.net]
ネタに対する模範解答って『やはりRust最強だな!』とか?

723 名前:デフォルトの名無しさん mailto:sage [2017/09/03(日) 09:50:38.50 ID:YZmIGy7N.net]
>>705
風情の有無を話してるのであって、寒さ暑さを話してるんじゃないんだけど

>>706
まずはageないことから始めよう、な?

724 名前:デフォルトの名無しさん [2017/09/03(日) 11:35:08.63 ID:CVrfF8Ix.net]
>>702
わび・さび ですよね、わかります
I know. sorry & rust

725 名前:デフォルトの名無しさん mailto:sage [2017/09/03(日) 12:50:33.18 ID:E+2Ill1j.net]
お前ら、associated constantsがstableになったってのにいつまで下らない話を続けているんだ

726 名前:デフォルトの名無しさん mailto:sage [2017/09/03(日) 13:04:30.79 ID:Zk5wiRrT.net]
関連定数が乗ったなら、次は依存型だ!



727 名前:デフォルトの名無しさん mailto:sage [2017/09/03(日) 13:07:07.67 ID:9s1YDGRT.net]
依存型はやり過ぎだ!高階型でいい!

728 名前:デフォルトの名無しさん mailto:sage [2017/09/03(日) 14:56:28.19 ID:3Ui33to1.net]
impl Trait と トレイト境界の特殊化の実装が先だろ……
これのせいで書けないコードあるんだぞ

729 名前:デフォルトの名無しさん mailto:sage [2017/09/03(日) 14:59:38.46 ID:E+2Ill1j.net]
きっとimpl periodのうちに全部実装してくれるよ(適当)

730 名前:デフォルトの名無しさん mailto:sage [2017/09/03(日) 16:40:58.80 ID:Sqyt1HzW.net]
async を汎用的に実装するなら モナド ( M<T> ) 的な高階型が必要?

731 名前:デフォルトの名無しさん mailto:sage [2017/09/03(日) 17:05:48.88 ID:4Saw+NMi.net]
emccなしでwasmれるって本当?

732 名前:デフォルトの名無しさん mailto:sage [2017/09/03(日) 20:29:20.09 ID:HVXRIsjy.net]
linkerとしてemcc必要では

733 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 01:02:25.35 ID:TiSfjsBP.net]
そもそもwasmなんて誰が必要としてるんだという問題がある
実際現状wasm使うよりV8の方が速いだろ

734 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 02:18:35.33 ID:yWQauj9l.net]
実験的な機能に現時点での必要性を求められても……

735 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 03:38:50.42 ID:B0/qvj/R.net]
JSの分野でもRust使いたいじゃん

736 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 03:56:46.84 ID:acsdbygY.net]
asmjsが早いんだからランタイム側の対応が十分進めばwasmも早くなるでしょ



737 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 10:53:07.99 ID:e2EV4sJ/.net]
>>719
Rustなんて実用にならない言語未満使うくらいなら、クソとはいえ言語の体なしてるJS使うわクソ

738 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 12:07:05.02 ID:Wptm5Fxj.net]
好きな言語を使ったらええ

739 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 20:51:30.52 ID:hGu6xlI4.net]
お前らslackにまけとるやんけ

740 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 23:53:57.54 ID:yWQauj9l.net]
いつの間に戦っていたのか

741 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 02:01:35.76 ID:a/Cb1ZW9.net]
Hack&Slack

742 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 04:46:57.50 ID:kj7TSLdS.net]
@seanmonstarがMozillaを辞めるとか言いだして一瞬ギョッとしたけど、次の職場ではフルタイムでRustを使うと言っているからhyperの開発はむしろ加速しそう?
seanmonstar.com/post/164869651177/bye-mozilla-hello-bouyant

743 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 07:50:37.72 ID:JsNUX7wh.net]
rustってまだ俺の中で実験言語だけど
そろそろプロダクト作ってる人とか出てる?

744 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 10:31:25.11 ID:Xe9ypjwu.net]
>>727
噂では泥箱あたりが使い倒してるとか
ずっと前から言われてるけど未だにコードの一つも公開されてないからただの提灯持ちで実際は使われてないと見てるがね

745 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 10:34:56.85 ID:Xe9ypjwu.net]
Rustが1.0過ぎてから今に至るまで、Rust使ってるって主張する企業は
モジカス自身と個人情報おもらしの一件で何かしら話題とお金が欲しい泥箱しか見ないって時点で色々と察するべきなんだよ

お前らいい加減目を覚ませ

746 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 12:37:41.86 ID:xNvKf2Ex.net]
https://www.rust-lang.org/en-US/friends.html



747 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 13:37:05.48 ID:Fbd5ldy5.net]
見たことのないフレンズばかりだね

748 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 14:44:43.29 ID:Xe9ypjwu.net]
>>730
そのうちモジラのフロント企業じゃないのはいくつだい?

749 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 14:48:42.01 ID:a/Cb1ZW9.net]
ID:Xe9ypjwu
この異常者まだ居たのか

750 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 16:16:47.13 ID:yjuOh0Qw.net]
LINEはモジラのフロント企業

751 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 17:49:37.05 ID:RCCGTejb.net]
dropboxやsamsungもmozillaのフロント企業の可能性が・・・?
実はmozillaってすごい会社なんじゃね

752 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 19:27:40.10 ID:JsNUX7wh.net]
rustっていまいち売りがないよな。
ちょっとしたツールを作るっていうのには向いてない気がする。
Goくらいの適当言語がちょうどいい。

753 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 19:44:37.37 ID:RqVBFvg5.net]
ちょっとしたではなく、きちんとしたソフトウェアを書くための言語だよ

754 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 19:51:45.33 ID:gLY7ZEwx.net]
Rustは、型システムがきちんとしてないとイライラしてしまう人向けの言語だよ

755 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 23:06:17.75 ID:iU8sfTGh.net]
システムに近いところを触るバックエンドのデーモン等に向いた言語だよ

756 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 00:48:38.63 ID:UIwOcimL.net]
SIGSEGVに絶望したくない人のための言語



757 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 09:02:56.43 ID:Sz3zXSu8.net]
パッケージのインストールだけで長時間かかるのだけ何とか改善してくれる神様たちっていないんですかね
issueにそういう要望とか出ないものですかね

758 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 10:49:22.58 ID:XzXTbCma.net]
前にも出てたけど、CARGO_TARGET_DIRを設定すればさっきそれコンパイルしたじゃん!ってのが無くなる
まあコンパイルそのものは遅い方だからそれは我慢する

759 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 16:57:20.79 ID:LVeCvIyg.net]
Celeronの1コア、メモリ1GBなのでパッケージによっては5時間経ってもコンパイルが終了しないんですよね
例えばclippyとか。
パッケージのアップデート毎に結局更新されたものをコンパイルし直すからCARGO_TARGET_DIRの設定してもあまり変わらないような気もします
Core i7やryzen、メモリ8GBとかだともっと早く終わりますかね?

760 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 17:03:33.32 ID:SQ4/Zkph.net]
お前には Core 2 Duo がお似合いだ

761 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 18:26:50.13 ID:n6C9v4DP.net]
コンパイラ、コンパイラドライバ、パッケージマネージャをそれぞれ独立して利用しやすくして欲しい
ポストC/C++を目指しているはずなのに言語仕様と関係のない制約が増えるのは勘弁

762 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 18:51:54.27 ID:l44s4mC+.net]
https://github.com/mozilla/sccache

763 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 19:10:48.28 ID:VuLMXPgk.net]
>>745
java, phpが独立した3rd tools乱立でひどいことになったから
次世代は低レベルと高レベルの2レイヤーを公式に提供しようぜって現代の風潮でそれに沿ってると思うが
あいつら個々に独立したビルドシステム, テスター, パッケージマネージャー, ランチャーが乱立して辛い
rustやgoは公式で色んなものが利用しやすく整備されてて涙が出るよ, マジで

rustの公式ツールに不満があるなら3rd toolsを自分で作れば良いよ
誰も作るなとは言ってなくて、作ること自体は止められないはず、賛同する人がどれほどいるのか懐疑的だけど

764 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 19:12:16.98 ID:VuLMXPgk.net]
低レベル:rustc, 高レベル:cargo って意味な

765 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 19:37:16.90 ID:n6C9v4DP.net]
Rust=Cargoな感じになっているように思うのは俺だけなのか?とりあえずCargoを使え的な記事ばかりでrustcを活用する記事はほとんど見ない
ちょっと高度な事をしようとすると絶望的に情報がない。さらにrustcの不安定性(機能しないオプションがある)が追い打ちをかけるw

766 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 20:12:23.66 ID:OeC1JAcK.net]
まあ今のRustとmakeを組み合わせようとはちょっと思えないな



767 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 20:27:57.04 ID:b9fzClHU.net]
ビルドにcmakeを要求するのに、エラーメッセージが分かりづらくて
はっきりとcmakeの必要性が分からないcrateが結構ある

依存ライブラリ一つ一つまでreadme読まないし

768 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 20:57:11.59 ID:58f4P28i.net]
cargo3兄弟

769 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 21:15:39.15 ID:VuLMXPgk.net]
build.shからmake叩いて、更にmakeからant叩いてたjava全盛期に比べれば多少はね
cmakeの代わりにbuild.rs(及びgcc-rs)使えば良いんだろうけど、build.rs書くの面倒でcmakeに走ってる予感

gcc-rsの機能拡張としてファイルパターンマッチ的なものが提供されたらcargoからcmakeも駆逐されるかもねー
あんまりbuild.rs使わないから既にデファクトスタンダードなcrateが存在してたらすまぬ

770 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 21:32:03.27 ID:9SnBSqY1.net]
そこまで分かっててなんでRust使い続けようと思うんだお前ら……

771 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 21:35:26.17 ID:5mAj6AyW.net]
cargoが便利だから

772 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 22:38:49.71 ID:vuSxRzDq.net]
https://blog.rust-lang.org/2017/09/05/Rust-2017-Survey-Results.html
ところで夏サーベイの結果出てるな

分かってたがNightlyの使われっぷりに吹く

773 名前:デフォルトの名無しさん mailto:sage [2017/09/07(木) 01:09:15.04 ID:pG20pyYC.net]
だってRust会社で使えないしー が1位でRustむずいよーこわいよー が2位か

774 名前:デフォルトの名無しさん mailto:sage [2017/09/07(木) 07:25:42.24 ID:2QTh9NrO.net]
CrateがCargo前提になっていて他のビルドマネージャやrustcからは実質的に使えないよな?

775 名前:デフォルトの名無しさん mailto:sage [2017/09/07(木) 10:39:04.19 ID:S617O9ZV.net]
cargoって裏でやってることはrustcのラッパじゃなくて独自の方法でコンパイルしてるのか?
ひでえ仕様だな

776 名前:デフォルトの名無しさん mailto:sage [2017/09/07(木) 18:01:04.73 ID:QzkAwThZ.net]
>独自の方法でコンパイルしてる
そんなことはないはずだが、どこからそんな情報が出てきたんだ?



777 名前:デフォルトの名無しさん mailto:sage [2017/09/07(木) 21:46:15.77 ID:seYx4u2p.net]
crateが実質cargo専用になってるってbuild.rsとかその辺のことか?

778 名前:デフォルトの名無しさん mailto:sage [2017/09/07(木) 22:56:42.47 ID:wVi6dnoF.net]
crates(.ioからのダウンロード、及び、crateの依存解決/分割ビルド)が実質cargo(コマンド)専用と言いたんじゃないのかな
curlでダウンロードして、rustcで.rlib作る分割コンパイルすれば出来なくはない
cargoコマンドのコードは開示されてるから自分で頑張れ, https://crates.io/crates/crates-io

rustcを使いこなせずcargo未満/rustc以上ツールの車輪の再発明を熱望する無能と
rustのコンパイルできるコードを書けず挫折したアンチが合わさり話が明後日に向かっておるわ

779 名前:デフォルトの名無しさん mailto:sage [2017/09/07(木) 23:20:58.99 ID:Aqe6d3N/.net]
cargo install に download-only オプションがつけばいい流れ?

780 名前:デフォルトの名無しさん mailto:sage [2017/09/08(金) 00:39:59.57 ID:XDOpFOHk.net]
>type hello.rs
fn main() {
println!("Hello World!");
}
>rustc -V
rustc 1.19.0 (0ade33941 2017-07-17)
>rustc hello.rs
>rustc -v hello.rs
>
-vが効いていないように見えるけど仕様なの?
コンパイラやリンカに与えられているオプションとかを見たいんだけどどうしたらいい?

781 名前:デフォルトの名無しさん mailto:sage [2017/09/08(金) 03:12:39.89 ID:70HlBZeV.net]
rustc -Z print-link-args hello.rs

https://github.com/rust-lang/rust/issues/36175

782 名前:デフォルトの名無しさん mailto:sage [2017/09/08(金) 07:52:33.56 ID:cSX02n8Z.net]
それはnightly限定ですやん

783 名前:デフォルトの名無しさん mailto:sage [2017/09/08(金) 15:02:00.13 ID:2+W6iI80.net]
スコープでインスタンスの寿命を静的に管理しようってのは面白いと思うのだが、
再帰的な構造とか扱う場合の簡易さをも少し考えるべきだったね。

まああんまこだわらなければ結構使いやすい気はするけど。

784 名前:デフォルトの名無しさん mailto:sage [2017/09/08(金) 16:10:21.35 ID:jNusN9J0.net]
こだわるも何も木構造まともに書き下せない言語の用途ってなんだよ

https://amp.reddit.com/r/rust/comments/33jv62/vecrcrefcellboxtrait_is_there_a_better_way/
この辺の問題も一行に解決してないし

785 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 00:10:13.39 ID:EaeDwKWj.net]
まあ raw pointer 使えば何とでもなるし(震え声)。

786 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 15:21:33.90 ID:Z1fxPFbT.net]
木構造は書けるでしょ
難しいのは巡回するグラフ構造



787 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 16:53:04.07 ID:6IGW1QFW.net]
>>770
木構造の一番いいサンプルおしえてよ

788 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 21:30:15.59 ID:/y0BRE7n.net]
木にせよ一般のグラフにせよライフタイム管理が面倒くさい

789 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 22:30:44.85 ID:/LC/x3j3.net]
この辺とか?
agtn.hatenablog.com/entry/2017/01/16/151745
ただ入れる操作によっても RefCell にしたり、やっぱり面倒は面倒。

790 名前:デフォルトの名無しさん mailto:sage [2017/09/11(月) 00:36:42.39 ID:xCZu5AEB.net]
ぐええ、隣接リストとアリーナの違いがよく分からない

791 名前:デフォルトの名無しさん mailto:sage [2017/09/11(月) 06:43:38.80 ID:Yii5jhjx.net]
768はこれがまともじゃないっていいたかったんでしょ。

792 名前:デフォルトの名無しさん mailto:sage [2017/09/11(月) 10:26:55.85 ID:XW0rQ7er.net]
CやC++ならポインタ持っておくだけで簡単に実現できるのに……

793 名前:デフォルトの名無しさん mailto:sage [2017/09/11(月) 23:14:03.66 ID:0LGm7EQD.net]
C++使うか、unsafe使えば良いのでは

794 名前:デフォルトの名無しさん mailto:sage [2017/09/11(月) 23:14:47.15 ID:0LGm7EQD.net]
Rc+RefCellな型を用意するだけでもマシになるか

795 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 00:26:37.00 ID:nVT3ZJzi.net]
ていうか練習ならともかく実際に使うプログラムでポインタをつないでグラフを表現することなんてそんなに頻繁にあるか?
取りうる表現の中で効率性が最悪な部類じゃん
Vecに対するLinkedListみたいなもんだろこれ

796 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 01:20:27.09 ID:Tl3HhyXK.net]
オブジェクト指向っぽいAPIを触るときはだいたいその形にならない?



797 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 03:08:23.10 ID:CK+WAwk/.net]
グラフの時だけ、ガベコレ使えるGc型が欲しい

798 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 08:30:34.06 ID:mcDW5eHR.net]
じゃああんたは現実世界でツリー構造のものをどうやって表すの?

799 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 11:30:27.08 ID:u82oOWPv.net]
>>779
VecじゃなくあえてLinkedList使う場面普通にあるんだが……

800 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 14:48:49.21 ID:+kMyckKw.net]
linux の赤黒木の実装はポインタベースではあったな。
しかし個人的には配列

801 名前:実装のが結局速いって気はする。 []
[ここ壊れてます]

802 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 15:07:56.52 ID:yDRUgdvZ.net]
Effective Hogeでそういうことは言及されてるけど
Rustはどうだかなとドキュメント見たらSecond Editionで"Effective Rust"の節自体が削られとる:-(
Stack vs Heapはどこかに記述されてた覚えがあるから、ツリー/リスト操作もどこかに潜り込んでるのかなぁ

803 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 17:41:48.32 ID:r07bb/MI.net]
配列ベースの実装はポインタの代わりにindex使うだけだからできることはあんまり変わらんわな
配列の方がデータの局所性高そうで速そうではある

804 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 18:02:30.56 ID:kvuESNKU.net]
データ構造によって速い操作が違うという基本的な概念がない奴おるな

805 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 18:50:57.82 ID:wPca0Ysf.net]
vectorのmutabilityの問題があるの理解できてる?

806 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 18:53:28.85 ID:O0/aVCto.net]
>>779
効率ってなんの効率?



807 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 22:05:08.25 ID:RDvyqWgj.net]
>>787
まあそういう無能がありがたがる言語なんだろうなRust

808 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 22:20:04.05 ID:SHXpQI2F.net]
mutabilityはRefCell使えば良いのでは
Refcell使わずにVecの中身を直接触る必要ある?

809 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 22:27:17.20 ID:wPca0Ysf.net]
>>791
いや、それでいいかも
rcさえなくなればborrowをユーザに書かせなくてすむからそれでいいや

810 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 14:03:19.87 ID:K9O6G+Si.net]
低レイヤーできます!ってアピールしたい言語なんだろうけれど、
あんま向いてない言語な気はする。

811 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 14:56:53.13 ID:6DzbMbn9.net]
低レイヤを書くにはチェッカーが強すぎて邪魔で、高レイヤを書くには全くカジュアルさがない
どっちにもなれない哀れな言語よ

812 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 18:10:30.60 ID:dAYfacw9.net]
並列で大規模で低レイヤーな領域に向いた言語だからどれか一つでも欠けてる領域で使いづらいと思うのは仕方ない

813 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 20:06:39.58 ID:fx0j+lzd.net]
低レイヤーはやっぱC言語だな。
ポインタの習得が難しい事以外に欠点ないじゃんこの言語。
Rustはもっとポインタ扱いやすくして出直してきな。

814 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 20:42:07.11 ID:SU8+D2f1.net]
rustの並列処理って言うほど特化(最適化)されてる気はしないけどな・・・
スレッド跨いだオブジェクトの所有権譲渡も保障されてはいるけど、従来言語/ライブラリに比べてめっちゃ便利という感じはしない
futures-awaitとかyieldを使うと変わるのかねぇ、無くても困りはしないしと使ってないけどfutures-awaitは使ってみるかな

815 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 20:42:42.41 ID:K9O6G+Si.net]
C だっていろいろ批判はあるだろ。
型がゆるいとか、名前空間がグローバルしかないとか。
まあそれを差し引いてもやっぱ有効な言語と思うけど。

816 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 20:49:43.29 ID:6DzbMbn9.net]
>>798
Rustのコンパイル通す実力あるならCのその辺りの問題なんてないものと同じだから
Rustなんて使わずCでいいじゃんってなるんだよな



817 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 20:52:03.57 ID:SU8+D2f1.net]
とか思ってたら、yieldの方が公式nightlyにマージされたのか
futures-awaitもnightly要求するし素直にyieldの方を使ってみよ, stableにはいつ来るのかなぁ

818 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 21:19:48.43 ID:KPH4Bf/5.net]
今さら C はねえよ

819 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 21:41:03.71 ID:6DzbMbn9.net]
>>801
Rustよりはあるわ

820 名前:デフォルトの名無しさん [2017/09/13(水) 21:54:04.29 ID:8Q7unwrY.net]
ID:6DzbMbn9っていつものモジラ/Rustネガキャン君だろ

821 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 21:57:53.87 ID:6DzbMbn9.net]
>>803
さすがにあのレベルの基地と一緒にされるのは心外

822 名前:デフォルトの名無しさん [2017/09/13(水) 22:09:43.33 ID:8Q7unwrY.net]
いつものコンパイル通らなくて発狂してる基地外かと思ったわ

823 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 22:45:06.07 ID:EXyWFNJX.net]
コンパイラーよりも自分が信用できるならC使えばよいと思う

824 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 23:56:44.36 ID:kEFpToCL.net]
Rustのコンパイルが通るならCを使えば良い君まだいたのか
自分の言葉通りRustに拘わらずにCを使っていれば良いのに

825 名前:デフォルトの名無しさん mailto:sage [2017/09/14(木) 08:18:50.41 ID:Y4hD7kDo.net]
macro_rules! make_macro {
($id:ident) => (
macro_rules! concat_idents!{test_, $id} {
}
);
}
make_macro!{foo}

こういうの無理なのか。

826 名前:デフォルトの名無しさん mailto:sage [2017/09/14(木) 11:10:13.14 ID:EE2xE751.net]
EmacsでRLS使ってる人居る?



827 名前:デフォルトの名無しさん mailto:sage [2017/09/14(木) 11:12:19.23 ID:XJ7zDnIx.net]
>>799
そういう根性論嫌い

828 名前:デフォルトの名無しさん mailto:sage [2017/09/14(木) 12:55:00.43 ID:NnJxH7VV.net]
RustやSwiftとかの次世代言語ってOracle製品やSAPみたいな所あるよな。
無駄に抽象化して変な専門用語作って、プリミティブなエンジニアを寄せ付けない感じとか。

コマンドラインで一発で出来るようなことを、独自用語だらけのGUIでポチポチ操作させてんの。
こういう文化は本当に良くない。優秀なエンジニアはみんな逃げてしまう。

829 名前:デフォルトの名無しさん mailto:sage [2017/09/14(木) 13:54:06.68 ID:1DVuzpHn.net]
>>810
コンパイル時に全部解決しなきゃいかん
てな話のがよっぽど根性論だと思うが。

830 名前:デフォルトの名無しさん mailto:sage [2017/09/14(木) 17:19:47.64 ID:n0wq55dM.net]
人間が気をつけてコードを書けばバグが出ないはずというのは根性論では

831 名前:デフォルトの名無しさん mailto:sage [2017/09/14(木) 18:36:21.42 ID:DdS4QLGS.net]
人に依存するC/C++は日本的
システムが面倒を見てくれるRustはアメリカ的

832 名前:デフォルトの名無しさん mailto:sage [2017/09/14(木) 19:05:26.17 ID:1DVuzpHn.net]
バグが出ないことよりも手法に熱中しちゃう方が日本的だなとか思っちゃうけど。

833 名前:デフォルトの名無しさん mailto:sage [2017/09/14(木) 19:14:58.28 ID:NxItWvHk.net]
形容詞化する国名

834 名前:デフォルトの名無しさん mailto:sage [2017/09/14(木) 20:08:31.29 ID:wsl9UgI1.net]
〜的ってつければなんだって形容詞になるの?

人に依存するC/C++はC/C++的
システムが面倒を見てくれるRustはRust的

835 名前:デフォルトの名無しさん mailto:sage [2017/09/14(木) 21:28:39.91 ID:ekPhWBa7.net]
C/C++でもバグが出ないほど規模が小さい or 言語への習熟度が高いならC/C++使えばよいし
そうじゃないならRust使えば良いとしか言ってないのだが

836 名前:デフォルトの名無しさん mailto:sage [2017/09/14(木) 21:51:38.65 ID:egb+Ths/.net]
単純に「巡回グラフを始めとした自己再帰型のデータ構造を書き下せない(コンパイラが通してくれない)」って時点で、書けないプログラムの存在を認めてしまってるんだよなRustは

その上C言語にはValgrindやらcppcheckやら、金かかっていいならCoverityやら、いくらでもその手のツールはあるわけで、
Rustならではの点ってどこにもない割に欠点だけ目立つ訳よ

肝心の抽象化も機能足りてないしな。Nightly使えばなんぼかマシだが



837 名前:デフォルトの名無しさん mailto:sage [2017/09/15(金) 00:12:38.69 ID:znUIhbu+.net]
どうしても全部Rustだけで実装したいのか

838 名前:デフォルトの名無しさん mailto:sage [2017/09/15(金) 00:29:00.00 ID:tkwXjMs/.net]
△全部Rustだけ
◯全部safe Rustだけ
Escape hatchの類は使いたくないというsafe Rust信仰の裏返しというツンデレなのでは

839 名前:デフォルトの名無しさん mailto:sage [2017/09/15(金) 01:05:02.21 ID:QM7YGf64.net]
How can I implement a graph or other data structure that contains cycles?
https://www.rust-lang.org/en-US/faq.html#how-can-i-implement-a-data-structure-that-contains-cycles

840 名前:デフォルトの名無しさん mailto:sage [2017/09/15(金) 13:00:11.59 ID:3YdKOJD0.net]
できるできないレベルの話をしているのか、やりやすいやりにくいレベルの話をしているのかどっち

841 名前:デフォルトの名無しさん mailto:sage [2017/09/15(金) 13:25:48.45 ID:5eAkzQwm.net]
できない => できるよ => やりにくい => そうねー => 応答終了, 最初に戻る

こんなのをずっと繰り返してるイメージだ
モジラ/Rustネガキャン君とRustのコンパイルが通るならCを使えば良い君の二人なのかな
二人とも長いこといるし、コンパイル通せないRustが相当憎いんだろうなぁと思ってる

842 名前:デフォルトの名無しさん mailto:sage [2017/09/15(金) 23:54:50.13 ID:mfxKdXka.net]
Cだって肝になるところをアセンブリで書くのはまれによくあることだし、
Rustで書きにくいところをCで書いたっていいよな

843 名前:デフォルトの名無しさん mailto:sage [2017/09/16(土) 02:17:34.76 ID:lHsVDIMy.net]
Rustのコンパイルが通るならCを使えば良い君は、暗黙のうちにCで完全なメモリ管理を行うことの困難さを訴えているんだよきっと

844 名前:デフォルトの名無しさん mailto:sage [2017/09/16(土) 06:49:34.00 ID:bgl6NL4A.net]
変な人がわくほどメジャーな言語になったんだなぁ

845 名前:デフォルトの名無しさん mailto:sage [2017/09/16(土) 12:21:42.89 ID:CDKitgfC.net]
てか細かいとこ C で書いてあとは軽い言語から呼ぶとか普通してるじゃん。
一つの言語で無理やりやろうとするからどっちつかずになるんじゃないのかね。

846 名前:デフォルトの名無しさん mailto:sage [2017/09/16(土) 12:23:12.97 ID:FR19qSmR.net]
>>828
RustがC(++)の後継目指してるとか言わなきゃこんなに言わんよ



847 名前:デフォルトの名無しさん mailto:sage [2017/09/16(土) 17:33:19.57 ID:hyq1PMdM.net]
C(++)の座が奪われると危機感を感じて
「Rustのコンパイルが通るならCを使えば良い」と必死なのかw
置き換わるにはまだまだ先が長いから安心して自分の巣にお帰りに

848 名前:デフォルトの名無しさん mailto:sage [2017/09/16(土) 17:34:53.66 ID:lHsVDIMy.net]
Rustのコンパイルが通るならCを使えば良い(自分はできるとは言っていない)

849 名前:デフォルトの名無しさん mailto:sage [2017/09/16(土) 20:08:37.91 ID:OnGiRDkA.net]
実際に使ってる人たちは本当にいつかRustがC(++)に置き換わると思ってるの?

850 名前:デフォルトの名無しさん mailto:sage [2017/09/17(日) 00:38:06.21 ID:NXS5TlTy.net]
RustがC/C++の後継目指してるなんて公言してるのか

851 名前:デフォルトの名無しさん mailto:sage [2017/09/17(日) 09:53:24.02 ID:2FAjS2AD.net]
一応Goもc++の置き換えを想定した言語らしい。もっともgoogle社内の話だが

852 名前:デフォルトの名無しさん mailto:sage [2017/09/17(日) 12:44:11.46 ID:7diltdBj.net]
>>830
×まだまだ先が長い ○先にモジカスが世界から消滅する
先が長いとか言ってる時点でモジカスのステマに荷担してると理解しろ

Rustがプログラミング言語を名乗ってるのはモジラが自由をお題目にしてるのと同じレベルの害悪だ

853 名前:デフォルトの名無しさん [2017/09/17(日) 15:13:14.19 ID:9f3JHXln.net]
複数のResultのNGをXORでまとめて(途中match分岐入れず)処理するのてどうすればいい?
超極稀に失敗する変な返り値を格納しても副作用の無い処理の連なりをゴソっと捨てる方法

854 名前:デフォルトの名無しさん mailto:sage [2017/09/17(日) 16:26:31.76 ID:IHBqIXQE.net]
>>833
少なくとも firefox の c/c++ 部分の書き換えを想定してるだろう。
まあ c/c++ と一口に言っても結構レイヤーは広いように思う。
てきとうなサーバープロセスなら確かに go は書きやすいよ。
rust にそういうエリアがあると思えんというところが問題の焦点じゃないかね。

855 名前:デフォルトの名無しさん mailto:sage [2017/09/17(日) 17:40:27.30 ID:aqlfcEMy.net]
>>836
求めてるものかどうかわからんが、Iterator<Item=Result<t, E>>はcollectでResult<Vec<T> , E>などにできる

856 名前:デフォルトの名無しさん mailto:sage [2017/09/17(日) 19:45:22.12 ID:0mVr+JRg.net]
相当雑いけど>>838の実装例はこんな感じかな
ttps://play.rust-lang.org/?gist=c87421997c42f0dfa8aa6ecabbb7ba3b&version=stable

性能を突き詰めるならcollectしないでfilterの戻りをnextで回すべきだけど適当に
確か100万回くらい回したら数秒の差が出るくらいのはず



857 名前:デフォルトの名無しさん mailto:sage [2017/09/17(日) 23:03:20.12 ID:xQI4uTVr.net]
>>839
そういや、こうやって変数のシャドウイングを積極的に使っていくのってどうなんだろうな?
俺はよくやってるけど、スタイルにうるさい人から怒られるかもとか思ったり

858 名前:デフォルトの名無しさん mailto:sage [2017/09/17(日) 23:17:40.08 ID:tCD9jFlM.net]
>>839
https://play.rust-lang.org/?gist=4f2e38dd8570a14eb1801137a183e40d&version=stable
こういう途中Errがいたら戻り値もErr、全部OkならOk<colletion>な意図だった

859 名前:デフォルトの名無しさん mailto:sage [2017/09/17(日) 23:18:40.79 ID:tCD9jFlM.net]
collectも#inlineついてるなら手でfor書くのと同じになりそうだけど遅くなるのか
ExactSizeIteratorとただのIteratorで違うとかならわかるんだが

860 名前:デフォルトの名無しさん mailto:sage [2017/09/17(日) 23:25:16.47 ID:ks3Dkyyp.net]
OCamlだと普通なんで読みにくさを感じたことは無いなあ
むしろその変数はそこで終わりです、もう頭に入れとかなくても良いよってことだから脳にやさしいとまで感じる

861 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 08:30:10.39 ID:KEjrNeQk.net]
>>842
collectの関数コールは最適化されて消えるけど、collect内でVectorを作る分があるからな
メモリ確保して、要素をコピーしてって誤差程度だけどコストが乗っかる

filterまでだとFilterは作るけど要素のコピーはしてない感じだったから
他言語, 他ライブラリのfilterメソッドの戻りで配列/リストを作り直すIF/実装に比べて比較的早そうだと思った

862 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 11:26:55.19 ID:/3RzmXHq.net]
なるほど、Vec作るコストという意味なら確かにcollectはコスト掛かるね

まとめて処理というのがIteratorの要素からなる配列などのデータ構造を作って何かすると理解していたけど、
そうでないならば
f.map(¦x¦ {do_something(); }).collect::<Result<Vec<()>, _>>()
とすれば作られるのはVec<()>で、要素サイズ0だからヒープからはメモリ割り当てられないはず

これやるぐらいならfor使った方が

863 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 14:28:43.98 ID:nF8z8OFK.net]
一方C言語ならそんな面倒なこと考えずにallocしてforでいい
学習コスト高くて性能も低い言語Rust

864 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 16:37:25.22 ID:JVxZ+5NP.net]
alloc?

865 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 17:16:35.57 ID:nF8z8OFK.net]
>>847
mallocとcallocのことをまとめてallocって言うんだがまさかRust民そんなことも知らない?

866 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 17:40:00.45 ID:2cmO/IBQ.net]
俺たち、ついさっきまでzero-allocationな実装方針について話してなかったっけ……?



867 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 17:48:40.40 ID:/3RzmXHq.net]
せんせーallocaはallocに含まれますか

868 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 18:07:06.15 ID:/S27bRBH.net]
定義による
スタックから確保するものと
ヒープから確保するものを
どちらもallocと呼ぶなら含んでる

869 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 18:11:47.24 ID:iR2mDVT9.net]
>>849
ゼロアロケーションつっても最初の一回はallocするだろ?
その後forでナメながら変換すれば単純で早くてコンパイルも通ってモジカス涙目みんな幸せって言ってんの
無駄に難しく考えるモジカスシンパらしい話だな

>>850
非標準関数はNG

870 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 18:15:30.06 ID:2aiOt6ta.net]
基地外って同じ言葉を連呼するからNGし易くて助かる。

871 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 19:17:59.90 ID:ndBW2Q0n.net]
要素サイズ0のVecはヒープからメモリ獲得しないと明言したはずなのですが

872 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 19:24:02.49 ID:JVxZ+5NP.net]
>>846の書くヒープアロケートするCコードはスタックアロケーションのみのRustコードより高性能なんだよきっと

873 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 19:39:48.02 ID:K4Qo/KNH.net]
>>853
造語症っていうんだっけか?

それはそうとRustでCのmallocやcallocと同じ操作ってBoxであってVecではないよなあ。

874 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 19:56:01.80 ID:2cmO/IBQ.net]
低級言語で書けばそれだけで性能が良くなるって勘違いはよくあるよな

>>856
どっちもヒープを使ってるから同じでええやろ

875 名前:デフォルトの名無しさん mailto:sage [2017/09/19(火) 01:46:56.36 ID:EmWEVfWy.net]
話が明後日の方向に行ってるけど
>>844の主点はVecを作るコストではなくVecに要素コピーするコストの方だぞ
filterで除外した要素をcollect内でVecにせっせとコピーするからちょっち時間かかる

ちなみにC(++)でベタに実装するとこんな感じでリスト作成、要素コピーするからドングリの背比べ
std::list<char*> filter_collect(std::list<char*> v) {
std::list<char*> new_v;
for (auto i = v.begin(); i != v.end(); i++) {
if (*i != NULL) {
new_v.push_back(*i);
}
}
return new_v;
}
std::list<char*> v{"Hello", NULL, "World"};
auto new_v = filter_collect(v);

モジラ/Rustネガキャン君とRustのコンパイルが通るならCを使えば良い君が
よりよいCコードを挙げてくれるのをちょっと待ってみようか, 流石にこれは汚すぎる

876 名前:デフォルトの名無しさん mailto:sage [2017/09/19(火) 01:57:29.08 ID:yqqf+3Rr.net]
(そもそもの>>836が何をしたいのかいまいち分かっていないなんて言えない)



877 名前:デフォルトの名無しさん mailto:sage [2017/09/19(火) 09:23:52.82 ID:b711gf7K.net]
これをCというか
いやまあC++としても酷いが

878 名前:デフォルトの名無しさん mailto:sage [2017/09/19(火) 09:49:54.63 ID:EmWEVfWy.net]
(大丈夫、俺も分かってない...多分>>841さんの実装例が期待コードだったんだろうと匙投げた)

879 名前:デフォルトの名無しさん mailto:sage [2017/09/19(火) 11:20:24.23 ID:yHWjYg1H.net]
仕様分からないのに実装しようとするRustの文化すげー

880 名前:デフォルトの名無しさん mailto:sage [2017/09/19(火) 18:29:28.71 ID:zYSzUAzu.net]
そういえばRustってそもそもまだ言語仕様がなかったっけな(RFCが通ってない)

そんな言語を良しとするモジカスとそのお友達

881 名前:デフォルトの名無しさん mailto:sage [2017/09/20(水) 07:39:00.40 ID:D+wOfrtb.net]
RubyやLua等も商用でも使われているけど公式な言語仕様って存在しなかった気がする

882 名前:デフォルトの名無しさん mailto:sage [2017/09/20(水) 08:58:49.24 ID:q1jVsKYV.net]
RFCが通るとはどういう意味だろう
まさかIETFの話ではないだろうな

883 名前:デフォルトの名無しさん mailto:sage [2017/09/20(水) 17:20:54.79 ID:8IyKZYzR.net]
https://github.com/rust-lang/rfcs

884 名前:デフォルトの名無しさん mailto:sage [2017/09/20(水) 17:30:21.92 ID:KkNJUG2l.net]
https://github.com/rust-lang/rfcs/blob/master/text/2113-dyn-trait-syntax.md
さすがにこのSyntaxはダサいぞ?

885 名前:デフォルトの名無しさん mailto:sage [2017/09/20(水) 18:24:29.42 ID:8IyKZYzR.net]
どうせならいっそ新しいepochでbare Traitのシンタックスでimpl Traitのセマンティクスを表すように変えて欲しくもあるけれど、motivationでも言われている通り互換性の観点からしてまあ無理だわな
理念には同意できるけど、うーむ……ダサい

886 名前:デフォルトの名無しさん mailto:sage [2017/09/20(水) 18:24:58.43 ID:SerGpeBo.net]
じゃあ討論してるIssueに行って、ダセェからこうしようぜって具体例を提案してこい
良さげだったら(y)押してやんよ



887 名前:デフォルトの名無しさん mailto:sage [2017/09/20(水) 18:39:23.24 ID:Yecv0E+U.net]
これがダサいとかいうならimplとかpubなんてクソの山だろ

>>868
impl Traitのセマンティックスに置き換えたところで例えばVec<Display>にi32とStringを両方突っ込もうとしてエラーになるようなへまをする連中は消えないだろ

>>869
もうFCP過ぎてマージされてるんだよなあ

888 名前:デフォルトの名無しさん mailto:sage [2017/09/20(水) 18:42:43.35 ID:DfdXTJVQ.net]
誰か3行で

889 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 12:28:08.72 ID:47xDJ4SG.net]
rustの三文字文化好き
mut, str, len, vec, rev

890 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 13:46:38.85 ID:Cgi1rfOq.net]
変数名にしたかったのを予約しやがって!でもある

891 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 14:49:56.77 ID:ebiRk4qs.net]
Contextual keywordって書いてある

892 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 15:11:25.15 ID:aCorn/qh.net]
let str = "Hello";
let str: &str = str;

これで普通にコンパイル通るしな。
変数名に出来ないのは>>872の中じゃ mut だけだろう。

893 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 19:15:33.07 ID:nrpIGIl5.net]
str, len, rev
あたりは変数名として結構使うかな。
str , vec あたりは s, v くらい短くすることもある。

894 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 17:44:10.64 ID:VL5Szw+L.net]
比較演算子 ==, <, > 等って、同じ型同士でしか定義できないのか

895 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 20:16:16.24 ID:dG0lqnCY.net]
それはEqとOrdの話でしょ
PartialEqとPartialOrdは別の型同士でも定義できる

896 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 20:38:52.59 ID:VL5Szw+L.net]
あ、ホントだ。出来たわありがとう。

use std::cmp::PartialEq;

struct Foo(i32);

impl PartialEq<i32> for Foo {
fn eq(&self, other: &i32) -> bool {
self.0 == *other
}
}



897 名前:デフォルトの名無しさん [2017/09/27(水) 15:23:55.91 ID:ENHC296h.net]
Firefox Quantumリリースだってよ

898 名前:デフォルトの名無しさん mailto:sage [2017/09/27(水) 23:11:15.94 ID:r8V8UQwO.net]
Rust 1.20、関連定数などを追加
https://www.infoq.com/jp/news/2017/09/rust-1-20-released

899 名前:デフォルトの名無しさん mailto:sage [2017/09/28(木) 00:21:45.83 ID:FngsmGBk.net]
時報が壊れたと思ってたら、常時一ヶ月遅れの情報サイトをソースに時刻通知がきたよ
本人じゃなく模倣者だろうけど次回からは一次ソースのサイトをトリガーにしような!

900 名前:デフォルトの名無しさん mailto:sage [2017/09/28(木) 00:30:16.29 ID:fGSoqmif.net]
何でこの人こんなに怒ってるんだろ?

901 名前:デフォルトの名無しさん mailto:sage [2017/09/28(木) 00:53:16.99 ID:FngsmGBk.net]
1. 時報が壊れたことに怒っている
2. 一ヶ月遅れのinfoqをソースにしたことを怒っている
3. 模倣者であることに怒っている
4. その他

どれだと思う?

902 名前:デフォルトの名無しさん mailto:sage [2017/09/28(木) 02:25:57.30 ID:uh95Bh7/.net]
一ヶ月入院でもしてたんだろ
許してやれ

903 名前:デフォルトの名無しさん mailto:sage [2017/09/29(金) 10:21:58.71 ID:YdXqj+6X.net]
CもObjCもここ数年は仕様変更がないから、コンパイルはそのまま通る。
変なコード書いてなければ動作確認も問題なくパスする。
メンテナンスフリーって言われれば確かにそうかもな。

あとはフレームワークで非推奨にになったメソッド書き換える程度だけど、
これはSwiftと共通の作業だし、そもそもやらなくても動く。
とにかくSwift移行していない俺は毎年高みの見物してる。

904 名前:デフォルトの名無しさん mailto:sage [2017/09/29(金) 10:22:21.88 ID:YdXqj+6X.net]
すまん誤爆した

905 名前:デフォルトの名無しさん mailto:sage [2017/09/29(金) 11:26:40.22 ID:YA9Keehz.net]
これが小学生のおっぱいかよ・・・
12歳の乳とは思えんな・・・

906 名前:デフォルトの名無しさん mailto:sage [2017/09/29(金) 11:51:24.12 ID:2cPiFSeP.net]
誤爆しすぎだろ。



907 名前:デフォルトの名無しさん mailto:sage [2017/09/29(金) 22:06:45.55 ID:7WUGaaf4.net]
rustの前にc++とhaskellぐらいはやっておくべき?

908 名前:デフォルトの名無しさん mailto:sage [2017/09/29(金) 23:43:36.68 ID:w5CvkGV8.net]
C++なんてやらんでいい。haskellよりOCaml寄りじゃね?

C++よりメモリ周りが「javaからgcとロック付きオブジェクトとモニタと
並列ライブラリがなくなった」代わりに低レベルなマルチスレッドコード書けば
型システムが守ってくれるモノが近い。

909 名前:デフォルトの名無しさん mailto:sage [2017/09/30(土) 00:20:49.42 ID:BhtSjkD0.net]
所有権の概念はC++のmove sem

910 名前:antics回りが近いと思うけどな
まあゲーム作るとかじゃなければわざわざC++やらなくてもいいと思うけど
[]
[ここ壊れてます]

911 名前:デフォルトの名無しさん mailto:sage [2017/09/30(土) 22:05:33.32 ID:uuI0Lqz4.net]
Rust言語による第一プロダクトのFirefox Quantumですが
ベータ版リリースの時点でアドオンがお亡くなりになったとか、不安定でどうしようもないとか、メモリ食い潰して落ちるとか
様々なお声が聞こえてきますね

これがRustという安全な言語で作ったプロダクトなんですってね
おめでとうございますモジラ信者と工作員の皆様

912 名前:デフォルトの名無しさん mailto:sage [2017/09/30(土) 22:25:31.06 ID:BhW5NZCu.net]
アドオンが不安定ってのはRust関係なくね?

913 名前:デフォルトの名無しさん [2017/09/30(土) 22:38:45.63 ID:ATIH6GBG.net]
ベータ版の意味も知らないガイジやんけ
ガガイのガイw

914 名前:デフォルトの名無しさん [2017/09/30(土) 22:39:37.33 ID:ATIH6GBG.net]
あそれあそれガイジが出た出たよよいのよいw

915 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 00:00:05.60 ID:HKOr6Xa1.net]
>>894
API鞍替えのせいだから全く関係ない。
メモリも関係ないし、むしろ最近はバージョン上がるたびに消費メモリ減ってる。
というかパフォーマンス良くなったのは設計が変わったからで言語は関係ない。
言語関係する部分はC++よりマシだから書きやすくなったこと。

916 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 00:42:35.99 ID:5jXWEgsq.net]
>>897
設計の変更って具体的に何を変えたの?マルチスレッドに強いとか?gpuぜんていとか?



917 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 23:58:38.97 ID:HtGiOKW4.net]
>>898
HTMLの描画周りがマルチスレッド前提になっただけよ。
シングル前提でやるとHTML/CSSパース、DOM構築で同期取りまくりが減っただけ。
うちのmem 4g, 2core環境だとハードが足引っ張ってたから多分mem 8g, 4coreくらい要ると思う。
ここ数年のロースペックマシン以上が恩恵受けるんじゃ?
gpu前提はwebrenderだからまだ入ってないんじゃない。

918 名前:デフォルトの名無しさん mailto:sage [2017/10/02(月) 00:20:10.84 ID:cuHSEpt/.net]
あ、悪い。webrenderもう入ってるわ。
webrenderとstyloが入ってるからもうマルチスレッドにgpu前提。

919 名前:デフォルトの名無しさん mailto:sage [2017/10/02(月) 11:21:20.04 ID:pqkzvat0.net]
Firefox爆速化件だけど、あのタイミングでRust化してればRustにも一気に注目集まったのにな。
もったいないな。

920 名前:デフォルトの名無しさん mailto:sage [2017/10/02(月) 14:16:58.24 ID:5q9eN7RZ.net]
w3mの代替になるコンソールブラウザがほしいところ

921 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 00:06:33.86 ID:eeE5kOTG.net]
lynks、links、EWW(Emacs)ではいかんかった?

922 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 01:21:42.46 ID:Eb49UXKr.net]
それよりAmayaの後継をwhatwgに作って欲しい

923 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 09:33:38.58 ID:xy+7bXnG.net]
>>901
cssはrustになったんだよね?

924 名前:デフォルトの名無しさん [2017/10/04(水) 17:45:04.59 ID:U/p5CYqb.net]
FizzBuzz を無駄にベンチマークしてみた By Nim、golang、Rust、Crystal、その他
wolfbash.hateblo.jp/entry/2017/07/25/232027

925 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 19:54:27.21 ID:eSRFZM0D.net]
なんというか、、参考にならないベンチマークだな。

926 名前:デフォルトの名無しさん [2017/10/04(水) 23:17:46.14 ID:aUT+fN/H.net]
参考になるベンチマーク教えてくれ



927 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 00:04:55.49 ID:NTKdykpp.net]
benchmarksgame.alioth.debian.org/u64q/performance.php?test=knucleotide
ここの諸々

久しぶりに見たらC gccがついに抜き返しててワロタ
C言語、頑張ったじゃん

928 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 01:11:32.12 ID:froF/td ]
[ここ壊れてます]

929 名前:j.net mailto: >>909
6パターンだった頃は全部実行出来てたけど速度はバラバラでたしか#5が最速でC言語より速かった
きっと最適化を人間が制御するのは難しくて頑張らないとJavaやC#にも勝てない
現在7パターンあるけど4つがmake errorになるくらい言語仕様が不安定

実に参考になる
[]
[ここ壊れてます]

930 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 02:42:46.62 ID:e0oopfTd.net]
>>909
mem順にしてもgz順にしてもcpu順にしてもD言語出てこないの悲しいな

931 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 04:56:45.53 ID:ovcMkddr.net]
d言語のメリットって何?

932 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 06:07:45.62 ID:eC/9GoxN.net]
C++ではないこと

933 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 09:06:46.27 ID:NTKdykpp.net]
>>910
人間が頑張って最適化した結果、C gccが上回ったんじゃないのかね

D言語はプログラミング人口少ないから・・・
2000年代の流行った頃ならもうちょっとスコアが出てたんじゃないかな

934 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 10:18:07.23 ID:KYi0aOcC.net]
RustもJavaも血反吐吐くほど最適化してるんじゃないの?
ポインタ扱いにくい言語でそれやると逆にコードが汚くなるから、
C言語よりも酷いコードになってるかもしれんよ。

935 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 10:41:40.98 ID:j9fazbko.net]
unsafe使ったらRustは更に早くなるのか・・・胸熱
取り敢えず、各コードを読んでから批評してはどうか

本家Rust Teamが改修して今のスコアだけど
彼らが直したのはI/Oにバッファ使おうぜってだけでそこまで変態的じゃないのよね
matchやmap, iterでクロージャー多用してるけど最適化コンパイルしたらif, forで書くのと同じ処理になるし

Option.mapは関数コールがあるから重たいかなと以前調べたら
LLVM中間コードの時点でインラインのif分岐(goto文)に展開されてベタコードと同じになるのかよと考えるのやめた

936 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 11:26:31.98 ID:291DnPVM.net]
>>909
C gcc 5.38
Rust #7 5.56
C++ g++ #3 7.18
Java 8.38

↑この並びでみると、Rustの速さよりもむしろJavaの意外な速さに驚く



937 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 12:31:31.21 ID:mvbuHBBx.net]
ぼくも同じこと思った…

938 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 12:49:03.43 ID:i3OOJkl5.net]
Javaは実行時最適化がはまれば速い感じ
でも、カリカリにチューニングされたJavaコードは、クラスをあまり使わずArrayだらけだっりしてつらい

939 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 17:58:39.05 ID:DY6JRVMF.net]
rlsもっと頑張って
replも提供して😭

940 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 18:51:45.79 ID:BHTkAY6s.net]
C言語の __func__ みたいなの無いのかよ〜

941 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 23:04:07.77 ID:arvYOnSy.net]
Javaやら.NET等のJIT系言語は速い速い言われるけど実際のアプリケーションでその速さを体感できたことは一度もないや・・・

942 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 23:35:19.66 ID:AzAoa99L.net]
>>909
rust#7はrayon使ってるから中身はcocoとfutureか。
ライブラリが頑張ってzero cost抽象化が効いてる感じかね。

javaはもうちょっと早くなるんだけどなぁ。
これ以上やるとjitとライブラリに丸投げして素直なコード書くことに
専念できなくなるからやりたくない感じ。
将来的にはconst arrayと、勝手にSIMD使ってもうちょっとマシになるかな。

>>919
連続してることが保証されないからカリカリにチューニングする時は配列には頼らないよ。
nio buffer使うことはあるけど。unsafe使わずに配列確保すると0クリアされて無駄に遅いし。
仮想関数テーブルなくしたほうが速いからメソッド検索>invokestaticのコストの時staticに変えるとか、
動的ディスパッチ自分で実装するときにconstant specific class bodyとtable switch組み合わせるとか。

>>921
ないけどrpすればすぐに入りそう。

943 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 00:32:27.39 ID:ckjydJIo.net]
>>923
>連続してることが保証されないから

それはもはやデータ構造として「配列」と呼ばれるものではないのでは……

944 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 00:59:19.34 ID:PVLgxPLf.net]
Dは仕様変更が多すぎた

945 名前:デフォルトの名無しさん [2017/10/06(金) 01:12:44.86 ID:aJzo16CX.net]
>>923
javaの配列って連続領域の保証されてないの?

946 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 11:58:56.15 ID:R7tcOQE1.net]
スレチだけど、JVMの実装仕様なんてベンダー依存でしょ, OracleとGoogleでも当然違うわ



947 名前:デフォルトの名無しさん [2017/10/06(金) 22:14:03.16 ID:aJzo16CX.net]
だから言語として仕様化されてないの?ってことだろ。
c++だって実装バラバラだけど連続領域な仕様だろ。

948 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 22:51:58.93 ID:R7tcOQE1.net]
Cはポインタ I/F仕様に引きづられて配列仕様も必然として明確にせざる得ないからでしょ
JVMはbyte codeの解釈さえあってれば良くて、データ操作の実装仕様は知るかよって話だよ
VM上では連続領域に見せかけても、実態は数チャンクに分けた配列の持ち方だってあろうよ

949 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 00:56:21.68 ID:OPYXFct1.net]
いやだから、データ構造としての「配列」のデータ操作の時間空間コストと
実装がズレてたらそれはもう「配列」じゃないから

950 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 02:30:16.92 ID:tD6GhHlF.net]
一般的に配列と呼ばれるオブジェクトがメモリアドレス上でも断片化しないことを保証される処理系ってほとんど無いのでは?
ミュータブルオブジェクトへ要素を継ぎ足していったらコードからは連続的に見えてもメモリ配置は断片化するだろう

951 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 04:32:31.86 ID:OPYXFct1.net]
「要素を継ぎ足していったら」がそもそもオカシイ
要素継ぎ足せるのはそもそも配列じゃなくてロープかなんかだから

952 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 08:20:38.57 ID:PzpAWNqF.net]
配列の要件ってインデックスで要素にアクセスすることくらいじゃないの?
要素のポインタをとって操作できる言語以外は実際の記憶領域が連続かそうでないか
判断する術はないと思うが。

953 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 08:39:14.98 ID:rgSj2Elc.net]
ポインタ操作だって処理系依存でどんな変態実装も理論上はあり得ると思うけど
C/C++の仕様を調べる気力がない

954 名前:デフォルトの名無しさん [2017/10/07(土) 09:54:16.89 ID:h9TjUWM8.net]
>>933
> 配列の要件ってインデックスで要素にアクセスすることくらいじゃないの?

じゃリンクリストでもいいってわけ?
インデックス操作は内部でポインタたどってさ。

955 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 12:18:14.74 ID:bipqd+gM.net]
配列だとインデックスのアクセスにO(1)を期待してるが
それが保証できるのかという話じゃないの

956 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 12:27:49.68 ID:FDovMcEa.net]
>>936
お前は話の最初から読みなおせw
オーダーのことなんか誰も気にしてないよ



957 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 12:40:30.10 ID:efrwvuZ0.net]
チューニングで気にするのはメモリ配置よりCPUキャッシュに乗るかどうかでは
そのとき配列のサイズが気にされるというだけで

958 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 12:44:02.10 ID:bipqd+gM.net]
>>937
>>930
これの解釈は?

959 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 12:59:08.16 ID:PzpAWNqF.net]
データ構造としての「配列」と言語機能としての配列は別の話だから。

960 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 14:30:31.33 ID:bipqd+gM.net]
O(1)でもO(n)でも a[i]と書けるなら配列だって感覚?
そう考えるのは自由だがまともな話はできなさそうだな。

961 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 15:00:19.40 ID:FL3S/Goc.net]
Rustの話はないんでしょうか

962 名前:デフォルトの名無しさん [2017/10/07(土) 16:04:55.47 ID:+/+oWVUp.net]
そんなの処理系によるわ
動作は変わらないからどうでもいい

963 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 17:48:20.09 ID:M+fCWBh9.net]
JavaScriptのArrayを配列と呼ぶのは間違いだ!
と吠えている人がいますね

964 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 19:34:14.94 ID:efrwvuZ0.net]
そんなに気になるならソース見に行けで終わり

965 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 20:58:38.51 ID:PTRnmd1t.net]
>>941
逆にちゃんとした定義ってあるの?

966 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 00:52:44.13 ID:riNh/ezn.net]
>>943
>そんなの処理系によるわ
>動作は変わらないからどうでもいい

オーダーの違いはまさに動作の違い

> JavaScriptのArrayを配列と呼ぶのは間違いだ!
> と吠えている人がいますね

データ構造としての配列じゃないのはそうだろ
配列じゃなくてハッシュマップですよねー
というのがマトモなCS出身者の反応



967 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 07:38:16.10 ID:whyFhQ9X.net]
引き続きオーダー厨がフィーバーしてんなw

>>946
>>926, >>928曰く、C言語には仕様として配列は連続領域であることが決まってるらしいよ
んで、Javaでは特に連続領域で実装することを仕様と定めてないよねーって話をしてんだろ

968 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 08:29:08.64 ID:Eg4i3QFB.net]
>データ構造としての配列じゃないのはそうだろ
>配列じゃなくてハッシュマップですよねー

結局、それまで展開していたオーダー云々の論理はどっかにやって
「配列じゃないものは配列じゃない」ってかw

969 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 09:02:22.19 ID:p8wkQapI.net]
ポインタの値が連続でも実メモリ空間のアドレスは連続とは限らないし
そのあたりのアドレスの連続性の抽象化をOSでやるか言語の処理系でやるかの違いと思えば
配列の要素の仮想メモリ空間でのアドレスが必ずしも連続ではない言語処理系があっても良いと思う

970 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 09:38:42.04 ID:whyFhQ9X.net]
>>949
配列とは、連続領域で確保されO(1)でアクセス可能なものと(俺の中で)定義する
それ以外の仕様、実装による配列は配列とは認めない

という論理で一応オーダー云々も彼の中では含まれてるんじゃないかな
ポインタのポインタで配列を設計したら、それはもうハッシュであり配列ではない的なことも言ってるし
多数の言語仕様, 言語処理系で配列ではないものが配列として扱われてて大変そうだなって思うね:D

971 名前:デフォルトの名無しさん [2017/10/08(日) 10:03:07.61 ID:W71T9805.net]
JSのArrayは配列じゃなくてリスト
TypedArrayが配列

メモリが連続化を気にするとかどれだけ低レベルな言語使ってるんだ
インターフェイスが同じなら実装とかどうでもいい
老害かよ

972 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 10:54:24.49 ID:T4FplNPL.net]
データ構造の読み書きのオーダーも仕様の内だけど、メモリ上のレイアウトまで仕様という考えはマイナーじゃない?
アドレスを当然のように明示的に扱う言語だと当然の範疇かもしれんし情報として提供して欲しいけど、そうでない言語ならn番目の要素へのアクセスがO(1)であれば配列でいい
で、Rustはアドレス直触りは可能だけど普通はやらない。Cみたいに構造体のメモリ上の表現がはっきり決まってるわけでもないし

973 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 15:41:19.83 ID:EDHW4lpZ.net]
>>951
> 配列とは、連続領域で確保されO(1)でアクセス可能なものと(俺の中で)定義する

そう思うのは勝手だけどそれに基づいて他人を批判するってどんだけ独善的なんだ

974 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 18:42:51.40 ID:4PvrPlQX.net]
そろそろRustの話に戻してくれ

975 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 18:57:23.11 ID:riNh/ezn.net]
array data structure でググるさま

976 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 20:18:32.63 ID:whyFhQ9X.net]
>>952
(配列の定義を)お前がそう思うんならそうなんだろう お前ん中ではな
ちなみに、Rustスレ住民はRust言語を使ってるゾ

>>953
Rustのstructメンバは連続を保証してるんでなかったかいな
repr((C)で宣言した時に限ってるんだっけ、unsafe多用してる変態がいたら教えてくれ



977 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 00:25:52.32 ID:KLfOKOYK.net]
>>933
それって、(一次元)

978 名前:コンテナでは。
で、コンテナの実装方法として配列やらリンクドリストやらが存在する。
[]
[ここ壊れてます]

979 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 00:29:02.79 ID:KLfOKOYK.net]
>>952
> インターフェイスが同じなら実装とかどうでもいい
そういう目的にはrust使う必要なくね?

980 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 00:30:54.57 ID:KLfOKOYK.net]
>>953
Rustがそういう態度だと言うのなら、C/C++の代わりには使えないなぁ

981 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 01:24:12.13 ID:EU3MdReC.net]
>>953
システムレベル言語でそれは無い

982 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 07:09:58.47 ID:HQb3QT54.net]
https://play.rust-lang.org/?gist=9e8a69e064b98d48c48e237d87d005a1&version=nightly

これ、少し前の nightly-2017-09-15-x86_64-apple-darwin だと通るのに、
最新の nightly だと conflicting implementations を起こすな。
rustup update したら急にビルドに失敗して驚いた。

983 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 08:32:46.93 ID:/FMCjJgs.net]
nightlyが仕様変更したりバグったりするのを逐一驚いてたら大変じゃない?

984 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 09:00:12.81 ID:CsWYGxTc.net]
>>958
もともと配列やその他のデータ構造からインターフェースのみ抽出したものがコンテナなんで、
それを言語仕様の側からは単に配列と称していることはあるだろう。
仮にそれを認めないとしても、元の質問の「JVMの配列は連続しているか」が「JVMのコンテナ(?)は
連続しているか」になるだけ。

985 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 10:26:26.16 ID:EKQlpQJF.net]
いるなぁC++のプロジェクトでarrayで十分なところに無駄にmap使いまくるやつ
おっさんプログラマとしては看過できないんだが(少なくとも仕事では)
これが時代なんだろうか

986 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 11:43:46.40 ID:iPiyLv0T.net]
なにか問題でも?



987 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 14:35:43.67 ID:y6Coq1tU.net]
メモリコスト、CPUコストについて定量的に説明できるかな

988 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 14:47:42.14 ID:5Wk6yJf6.net]
自分もどちらかと言えば効率厨のつもりだけど
実行コストと可読性が大差ないなら好きな方を使えばいいと思う

989 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 15:19:06.41 ID:ICZ1WqoM.net]
コンテナ使うとコストが見えにくくてよく分からん

990 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 17:24:05.08 ID:65lUV9pA.net]
さすがに array と map ではアルゴリズム自体違うわけだしそれはなしだろ。

991 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 18:49:17.20 ID:GUc1DOLO.net]
Vec<f32> を Vec<f64>に変換したいのですがどうしたらいいでしょうか?
やりたいのは
&[f64]を引数として受け取る関数にVec<f32>の内容を渡したいのですが。

992 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 20:31:04.63 ID:2SZ05bPF.net]
https://play.rust-lang.org/?gist=0cd6e0b3f8c028d720b6936505df6c9b&version=undefined

受け取る関数がTraitでf32, f64を受けろと思うけど、外部ライブラリで作ってるなら仕方ないんだろうよ

993 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 20:46:44.09 ID:g5Xwcr4f.net]
>>972
ありがとうございます

今回は外部ライブラリだからしょうがないかな

普通はなんのtraitで受けとるんでしょうか?

994 名前:デフォルトの名無しさん mailto:sage [2017/10/11(水) 16:41:05.41 ID:3w9jP5qe.net]
色々あるんだろうけど、こんな一例
https://play.rust-lang.org/?gist=d00fb7f7041fce1649767ecf95bb936a&version=stable

AsRefとかIntoとかFromとか、なんかその辺調べたらいいんじゃないかなぁ
他人に公開する目的のpub fn以外で使うのはバイナリ容量増やす一因になるからいたずらには使いたくは無い(他人がする分には気にしない
ただまぁ、枯れたおっさんプログラマの感想であって、map, arrayの使い分けに口出すおっさんは同様に口出してくると思うので注意されたし

995 名前:デフォルトの名無しさん mailto:sage [2017/10/11(水) 17:46 ]
[ここ壊れてます]

996 名前::13.24 ID:6qFX/88z.net mailto: >>974
基本的に↓を使ってるんで、
https://docs.rs/alga/0.4.0/alga/general/trait.Real.html

これの
https://docs.rs/alga/0.4.0/alga/general/trait.SupersetOf.html
あたりを使えばいいんすかねぇ
[]
[ここ壊れてます]



997 名前:デフォルトの名無しさん mailto:sage [2017/10/11(水) 20:18:32.35 ID:SdSs/e3t.net]
rustって難しいって聞くけどどうなの?

数百行程度のcliツールとか作るのにも適してる?

998 名前:デフォルトの名無しさん mailto:sage [2017/10/11(水) 20:36:37.19 ID:wUY7e6c6.net]
借用やライフタイムを理解できない内は難しいかもね。

999 名前:デフォルトの名無しさん [2017/10/11(水) 20:58:57.23 ID:gwIT2xqO.net]
%%%%4NEL%%%%
000-SAV-&1.0888214%ML<\47MBL%0.2\MSSSS4.213>
1.8882/%B/%SB/<\2/7BL\%\%B!B%47L%Si72B>%10.2%\
002%\B%===>>>52.B<\rbc/2.8>>\7B<<\7LB>>\72S\<%\42%><\br>001BYON$\%7L2%3.33GHz>>>2.3GHz<\br>
41.B%LB%"<<%11.6$%><<\86.1B>>2LB>"B???S3>>71$-?>6%<\br>
082@<\7L@@<\br>
\LOOP>0<1Entra

1000 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 09:41:32.32 ID:cYUXFwFa.net]
>>975
RealがSupersetOf<f64>を継承してるから受け取る関数がf64を扱うならTrait Realを受ける形でも良さそう
Alga使ったことなくてどっちを使う方がスマートなのか分からんから、自分が取り回しやすいと思う形でどうぞ

1001 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 09:07:46.54 ID:ZLjOYpzW.net]
Announcing Rust 1.21 - The Rust Programming Language Blog
https://blog.rust-lang.org/2017/10/12/Rust-1.21.html

めぼしい変更無し。

1002 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 15:11:36.11 ID:bp4APqrz.net]
Rustの話をしないRust板の住人
言語として形になってないから言語のことを話せないんだろうなぁ
直近もまともな更新ないし、世間の話題も下火だし
工作員さんもっと頑張らないといけませんよ(ハナホジ)

1003 名前:デフォルトの名無しさん [2017/10/13(金) 17:39:13.20 ID:xbVdueHZ.net]
tanakhのrustベタ褒めツイートでも列挙しようか

1004 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 17:40:12.67 ID:+y/vofi6.net]
>>976
性能だすために生ポ触るとかしなければボローイングなんかも
そんな難しく考えずにコード書けるとは思う。
一部の馬鹿が言語機能をドヤしたいってのが一番流行るのを妨げてる。

1005 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 17:44:57.66 ID:PbP1JTIY.net]
じゃんじゃんクローンすればいいんだよ
性能に困ったときだけ再考すればいい

1006 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 18:36:57.97 ID:FAMCtm4a.net]
>>980
何代目の時報か知らんけど次スレよろ
あと、2年近くかかって取り込まれたrvalue static promotionをスルーするとかどうかしてんぜ



1007 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 18:45:29.22 ID:RXIUnIoB.net]
ムーブセマンティクスをきちんと意識すれば借用はそこまで難しかないよね
まあそこでCの経験が却って邪魔になるところがあるわけだけど

1008 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 20:29:09.18 ID:5Bkpm/HR.net]
QtをやったあとでもRustの有り難みって実感出来る?

1009 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 22:43:54.95 ID:dC2M8380.net]
borrowing というか mutable aliasing だけはやっぱり辛いなあ。
多くの場合 struct メンバの false sharing なんだよね…。

1010 名前:デフォルトの名無しさん mailto:sage [2017/10/14(土) 14:12:57.17 ID:VwleOtKV.net]
>>980
「Rust 1.21」リリース

1011 名前:
2017年10月13日16:15 末岡洋子
https://mag.osdn.jp/17/10/13/161500
[]
[ここ壊れてます]

1012 名前:デフォルトの名無しさん mailto:sage [2017/10/14(土) 17:39:51.15 ID:uWD69LeP.net]
次スレ

プログラミング言語 Rust 4
https://mevius.5ch.net/test/read.cgi/tech/1507970294/

1013 名前:デフォルトの名無しさん mailto:sage [2017/10/15(日) 14:37:51.04 ID:WeNwPolS.net]
>>986
moveや借用は簡単なんだけど、その結果引き起こされる制限を回避していくのが面倒。

1014 名前:デフォルトの名無しさん mailto:sage [2017/10/15(日) 17:36:12.11 ID:GYZBU1+2.net]
>>991
その「面倒」って感じるのがまさしくCの経験の負の遺産なわけよ

1015 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 10:08:35.93 ID:ZoMoe7Af.net]
脱出しようとして墜落してるのか

1016 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 00:44:35.87 ID:2lESXdgM.net]
994



1017 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 00:45:47.02 ID:2lESXdgM.net]
995

1018 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 00:46:13.27 ID:2lESXdgM.net]
996

1019 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 00:46:56.38 ID:2lESXdgM.net]
997

1020 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 00:48:00.58 ID:2lESXdgM.net]
998

1021 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 00:48:41.67 ID:2lESXdgM.net]
999

1022 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 00:49:08.90 ID:2lESXdgM.net]
1000

1023 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 151日 10時間 44分 40秒

1024 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<252KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef