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


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

Rust part10



1 名前:デフォルトの名無しさん mailto:sage [2021/04/02(金) 21:38:04.11 ID:L7IeSfpL.net]
Mozilla発のRust言語のスレ

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

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

日本語の情報
https://rust-jp.rs/

前スレ
Rust part9
https://mevius.5ch.net/test/read.cgi/tech/1598112455/

708 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 14:49:33.29 ID:vx/ErwhM.net]
意味のないコードだよ

709 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 14:53:16.15 ID:PNtD97K1.net]
コンパイラは別に値まで見ないからな
clippyが意味のない分岐だよと指摘してくれるのかどうかは知らんが

710 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 14:55:24.20 ID:HgMuIEwp.net]
>>692
基本的に条件分岐はpredがコンパイル時に評価できる場合でも true/false 両方あり得るものとして扱われるよ
その後の最適化フェーズであり得ないルートは除去されるだろうけど最適化の結果でコンパイルエラー差異が出ないようにする考え方なんだと思われる
無限ループ専用の構文であるloopが導入された背景もたぶんこのあたりにある

711 名前:デフォルトの名無しさん [2021/05/21(金) 15:52:58.09 ID:J6y23PLS.net]
>>697
trueのときもdrop、falseのときもdropされるとみなされるということは、
if文によってheap領域で確保しているメモリを解放するかしないか場合分けできないってことじゃん
それって不便では?

712 名前:デフォルトの名無しさん [2021/05/21(金) 16:14:23.61 ID:qRzkKAr2.net]
>>698 これ元のコード見てみ
これifの条件がtrueだろうがfalseだろうがsub(&_a);は実行されるやん
ifの条件がfalseのときには問題なく実行できるけど、もしifの条件がtrueになって_aがdropされてしまった後にsub(&_a);が実行されてしまうと開放された値を使うことになる
だからRustコンパイラはエラーを吐くんだよ

713 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 16:15:51.92 ID:91Y2FzX3.net]
いや、普通に場合分けはできるが…

どちらかというとifの条件を変えるたびにコンパイルが通ったり通らなかったりするほうが不便では?
そこにifがあるってことは(将来的にとか何らかの条件で)実行される可能性があるからあるんでしょ
もし絶対に実行されないことが確定してるなら書く意味ないし

714 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 16:19:22.28 ID:91Y2FzX3.net]
場合分けしたいならこんな感じで

if *_a.id == 1 {
drop(_a);
} else {
sub(&_a);
}

715 名前:デフォルトの名無しさん [2021/05/21(金) 17:42:19.92 ID:J6y23PLS.net]
>>700
言ってる意味がさっぱりわからん
>>692のプログラムにあるとおり
現実問題、将来的に決して実行されるわけがないif文というものは存在するし
if文があるというのは実行される可能性のあるの十分条件でもなければ必要条件でもなわけでもないんやが。
ワイが言いたいのは仮にrustの型システムを無視して>>692のコードをそのままコンパイルしたとしても
if文は実行されないわけだから安全なはずなものまでを省いているというところが不思議だってことや
つまりuse-after-freeバグが現実には起きないコードまでもif文の他の条件でUAFバグが起きるがために
ひとまとめにUAFが起きる

716 名前:ニみなすrustコンパイラの姿勢がif文である条件のときだけfreeするコードを書くのを認めないようにみえるという
ワイの感想に繋がってるわけでして
[]
[ここ壊れてます]



717 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 17:53:39.45 ID:IHGXJo1X.net]
use of moved valueやborrow of moved valueを
use-after-freeとして理解してるのがそもそも間違ってる

The Bookを読んでLifetimeとOwnershipを復習してくれ

718 名前:デフォルトの名無しさん [2021/05/21(金) 18:00:55.07 ID:J6y23PLS.net]
>>692のコードをcに書き直してみたらこうなる
} Droppable;
void drop(Droppable* d) {
printf("> Dropping %d", d->id);
free(d);
}

void sub(Droppable* d) {
if (d->id == 0) {
//free(d);
printf("> Test %d", d->id);
}
}
int main() {
Droppable* _a;
_a = malloc(sizeof(Droppable));
_a->id = 0;

if (_a->id == 1) {
drop(_a);
}
sub(_a);
}

719 名前:デフォルトの名無しさん [2021/05/21(金) 18:01:46.42 ID:J6y23PLS.net]
これはrustでは弾かれるはずの「if文のある条件のときだけヒープのある部分をfree」というコードのはずだが
安全なCのプログラムや コンパイルは通るしランタイムエラーも起こさない。
メモリ安全なプログラムの中では、cで書けるプログラムのほうがrustで書けるプログラムより広いんだね
rustはメモリ安全なcのプログラムと同等な処理を書けない部分もあって不便じゃないかっていうのが結局のところワイの疑問になるんや
じゃあrustでは「if文のある条件のときだけヒープのある部分をfree」のコードをどう書くんや?
メモリ安全性を損なってるわけでもない処理ではないはずなんやがrustのコンパイラははじくぞ?

720 名前:デフォルトの名無しさん [2021/05/21(金) 18:03:27.13 ID:J6y23PLS.net]
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int id;
} Droppable;
void drop(Droppable* d) {
printf("> Dropping %d", d->id);
free(d);
}

void sub(Droppable* d) {
if (d->id == 0) {
//free(d);
printf("> Test %d", d->id);
}
}
int main() {
Droppable* _a;
_a = malloc(sizeof(Droppable));
_a->id = 0;

if (_a->id == 1) {
drop(_a);
}
sub(_a);
}

ほい完全版

721 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 18:06:23.36 ID:p9FphGnI.net]
>>705
unsafe使え、というかもうちょっと具体的な例じゃないと困る
今まで出された例だと「最初から絶対通らないの分かってるならif文消せばいい」としか思えないので

722 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 18:12:17.78 ID:91Y2FzX3.net]
別にわざわざCで書いてもらわなくても安全なのは分かるよ
今のRustコンパイラで通らないのはボローチェッカーが最適化前にあるからなんで
部分的にでも先に最適化すれば通るようにはできるだろう
ただそれをしたい動機が分からない
本当にifが実行される可能性が一切ないなら単に消せばいい、といしか言いようがないので

723 名前:デフォルトの名無しさん [2021/05/21(金) 18:14:06.78 ID:J6y23PLS.net]
>>703
それただの論点そらしだよね
UAFってrustの独特なメモリ管理手法と相反する用語ではないし
use of moved valueやborrow of moved valueもUAFを阻止するためのものだよね
じゃあrustでは「if文のある条件のときだけヒープのある部分をfree」のコードをどう書くんや?

724 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 18:18:59.35 ID:p9FphGnI.net]
>>709
DroppableのメンバにBox<i8>持たせろ
仮に"drop"された後でもsubが正常に動くことが期待されているなら、そこで使うべきなのはdropではない

725 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 18:22:54.40 ID:91Y2FzX3.net]
というか >>701 で書いたif/elseの例はちゃんと「if文のある条件のときだけヒープのある部分をfree」になっているのに何か不満なのか

726 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 18:24:13.35 ID:IHGXJo1X.net]
>>709
UAFを阻止するためだけにあるものじゃないから
やり方は>>701で教えてくれてるやろ

とりあえずThe Book読んでね



727 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 18:31:38.95 ID:p9FphGnI.net]
>>709
これでどうですか?
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=9b05ca192ab0fd529b6de05dcc64a8c9

728 名前:デフォルトの名無しさん [2021/05/21(金) 18:38:40.69 ID:J6y23PLS.net]
>>711
そうやん
rustって不思議やね

729 名前:デフォルトの名無しさん [2021/05/21(金) 18:44:49.25 ID:J6y23PLS.net]
解決しました。
なにはともあれありがとうございました。>>701の方に救われました。
ここまで関わってくださった皆様まことに協力ありがとうございました。感謝いたします。

730 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 19:24:50.36 ID:91Y2FzX3.net]
「理論的に安全な任意のコードは通るべき」ってイメージだったのかな
実際にはそんなことはなくて、上の例のようなコードを通すためには色々なトレードオフがあるから
単に「理論的に安全」ってだけで無条件に実装されることはない
もっと具体的なユースケースがあって、みんなが「これは通らないと不便だよね」ってなったものが実装される
数年前に実装されたnon lexical lifetimesなんかはまさにその例だね

731 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 19:31:11.66 ID:bfSFy0HM.net]
はぎゃーん

732 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 21:43:48.32 ID:HgMuIEwp.net]
クロージャの disjoint capture が破壊的変更になるのは分かるんだけど最初からこうなってなかったのはなぜ?

733 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 22:34:26.09 ID:vpqVq/KA.net]
iter()とinto_iter()の使い分けが分からない

iter()じゃないといけない場合があるのは分かるんだが

734 名前:デフォルトの名無しさん [2021/05/21(金) 22:49:37.59 ID:+ok17UuV.net]
into_iterは所有権を奪いItemを得ることができる
iterは&Itemを得る
他のintoで始まるものは所有権を奪うことになってる

735 名前:デフォルトの名無しさん [2021/05/21(金) 23:22:44.96 ID:qRzkKAr2.net]
>>711 Rustコンパイラが問題視してるのは開放された値を使ってしまう可能性があることで、それが修正された >>701 のコードは問題ないから通る

736 名前:デフォルトの名無しさん mailto:sage [2021/05/22(土) 00:04:28.82 ID:yRhz4OAW.net]
>>719
Rustでの変数の受け渡し方は
by (shared) reference、by mutable reference、by valueの3つなので
それに対応していろいろなものが3種類1セットになってる

イテレータならiter(), iter_mut(), into_iter()
クロージャならFn, FnMut, FnOnce
コンバージョンならAsRef, AsMut, From/Into



737 名前:デフォルトの名無しさん mailto:sage [2021/05/22(土) 00:34:10.91 ID:RuplHzwP.net]
as_foo(), to_foo(), into_foo() の違いも覚えておくとよいかもね

738 名前:デフォルトの名無しさん mailto:sage [2021/05/22(土) 00:45:11.88 ID:yRhz4OAW.net]
覚えておくとはいいのはそうだけど、そのセットは少し観点違うよね
https://rust-lang.github.io/api-guidelines/naming.html#ad-hoc-conversions-follow-as_-to_-into_-conventions-c-conv

739 名前:デフォルトの名無しさん mailto:sage [2021/05/22(土) 16:34:10.81 ID:ma8sDMzI.net]
Rustややこしいわぁ

740 名前:デフォルトの名無しさん mailto:sage [2021/05/22(土) 20:26:18.21 ID:UuUK8ShD.net]
Rust慣れたあと他の言語行くと
良い作法が身についてて歓迎される、とかありますか?

741 名前:デフォルトの名無しさん mailto:sage [2021/05/22(土) 20:30:50.12 ID:18meLr+O.net]
>>726
言語が異なれば同じことをするにも良い作法とされる方法は異なるだろうし、そんなに役に立たないかもよ。
むしろRustでは〜と言い出すとかえってうるさがられる可能性も。

742 名前:デフォルトの名無しさん mailto:sage [2021/05/22(土) 20:34:58.75 ID:RuplHzwP.net]
rustでは変数のshadowing当たり前のように使うけど他の言語では嫌がられそう

743 名前:デフォルトの名無しさん mailto:sage [2021/05/22(土) 21:08:16.57 ID:9BHHuuQy.net]
let value = value;
とか他言語で書いたらアホだと思われるし

744 名前:デフォルトの名無しさん mailto:sage [2021/05/22(土) 21:10:13.17 ID:61y793Zl.net]
Rustはメイン関数かその次の関数のローカル変数にリソースを保持する形にしがちじゃない?
他の言語だとあんまりやらない

745 名前:デフォルトの名無しさん [2021/05/23(日) 03:12:09.36 ID:1TnUlIAl.net]
>>730
他の言語でも同じだよ
それとも禁断のグローバル変数を使う駄目パターンをRustでもしたいということ?

746 名前:デフォルトの名無しさん mailto:sage [2021/05/23(日) 06:28:03.88 ID:ApnxiBa8.net]
pythonみたいな動的型付け言語ではよう見るけどさ
Rustではこんなん要らなくしてほしいわ



747 名前:デフォルトの名無しさん [2021/05/23(日) 13:14:57.61 ID:viOBOYhY.net]
ライブラリによってはデータを持ち運ぶということが不可能だったりするからグローバル変数必須だったりするんだよな
(具体例: serenity)

748 名前:デフォルトの名無しさん mailto:sage [2021/05/23(日) 13:33:01.51 ID:1FznZ2H5.net]
いや別に必須ではないだろ。

749 名前:デフォルトの名無しさん mailto:sage [2021/05/23(日) 13:39:52.69 ID:p3SEnqzU.net]
log!() みたいなプログラムの各所から呼び出されるマクロや関数の実装の為には rust でも普通にグローバル変数使われているのでは

static 変数にするためには Sync が要求されたり mut にするために Mutex 使う必要があるから他の言語ほど気楽に使えないというだけで
グローバル変数そのものが禁断扱いされることはないかと

グローバル変数の濫用は他の言語同様嫌われるけどね

750 名前:デフォルトの名無しさん [2021/05/23(日) 13:43:31.31 ID:1TnUlIAl.net]
一般的にどんな言語においても何らかの外部のライブラリを取り込む時には
何か一つのクラスとかオブジェクトとか構造体とかに閉じ込めてしまって
それ一つだけ持ち運ぶからグローバル変数を使うことは無いでしょう

751 名前:デフォルトの名無しさん mailto:sage [2021/05/23(日) 16:18:03.34 ID:ljEJPp90.net]
>>735
static変数とglobal変数はスコープが違うだろ
global変数が悪とされるのは、そのスコープの広さだからね

いつどこで誰が変更するのか、また参照するのか、スコープが広ければ広いほど把握が困難になる
把握が困難になればなるほど、それだけバグを生む温床になる

752 名前:デフォルトの名無しさん mailto:sage [2021/05/23(日) 18:34:32.71 ID:1FznZ2H5.net]
io周りは極論すればどう管理してもグローバルだからな。
プロジェクト毎に規約設ける以外にまともに管理する方法なんてない。

753 名前:デフォルトの名無しさん mailto:sage [2021/05/23(日) 20:09:32.32 ID:wHpcVS8W.net]
>>735
そういやロガーの設定ってどこに保存されてるの?
debug!() 呼ぶたびにMutexロックしてるのかな?

754 名前:デフォルトの名無しさん mailto:sage [2021/05/24(月) 12:11:21.84 ID:1Toh/2dP.net]
>>736
クラスの中に入れても、グローバル変数であることは避けられないし
どんな言語においてもグローバル変数は必要。

755 名前:デフォルトの名無しさん [2021/05/24(月) 12:28:02.03 ID:wwlvG9VZ.net]
「:?」ってなんなんですか?
https://tourofrust.com/08_ja.html

756 名前:デフォルトの名無しさん mailto:sage [2021/05/24(月) 12:49:55.25 ID:KKN49LSI.net]
>>741
デバッグ用のフォーマットで出力するという意味
詳しくは以下参照
https://doc.rust-lang.org/std/fmt/



757 名前:デフォルトの名無しさん mailto:sage [2021/05/24(月) 13:24:07.35 ID:JJaZh5wC.net]
>>740
そんなことはないだろう。
確かにグローバルでも大して変わらんてものはあるけど、
loggerを引数で渡していくっていうような実装方法もある。

758 名前:デフォルトの名無しさん mailto:sage [2021/05/24(月) 13:33:20.21 ID:u2umy7DV.net]
>>739
logクレートのstatic mut変数だね
ロックするのは初期化とレベル設定時だけ
出力時にロックするかどうかは実装次第

759 名前:デフォルトの名無しさん [2021/05/24(月) 15:43:10.46 ID:dukpbHqg.net]
>>740
そのクラスの存在そのものがグローバル変数(相当)だという話?
それともそのクラスもしくはそのインスタンスをグローバル変数に入れて使うということ?
後者の意味ならば必要な範囲で引数として持ち歩けばグローバル変数を普通は使わないですよね。

760 名前:はちみつ餃子 mailto:sage [2021/05/24(月) 16:59:24.57 ID:tdQ8iTTE.net]
大事なのは抽象化がきちんとしているかどうか。
各部品が妥当な意味に分離されているかどうか。

グローバル変数がよくないのは色んなパーツから横断的に使われる可能性があって
部品が不必要に密結合していることの表れだからであって、
そのグローバル変数のアクセス範囲が妥当な範囲に制御されているなら問題じゃないよ。

過剰な密結合を解消せずにグローバル変数を引数に置き換えてたら
影響範囲が見えにくくなってもっと悪くなることだってありうる。

まあどういう場合なら妥当なのかってのは色々と意見はあると思うけど。

761 名前:デフォルトの名無しさん [2021/05/24(月) 17:17:23.03 ID:qqtJSk72.net]
$_POSTはセーフ

762 名前:デフォルトの名無しさん mailto:sage [2021/05/24(月) 17:21:32.94 ID:Ig527IlE.net]
>>746
まずは長くて区別しやすい名前に変えるのがスタートかね。

763 名前:デフォルトの名無しさん [2021/05/24(月) 17:31:54.98 ID:wwlvG9VZ.net]
>>742
ありがとう!

764 名前:なんか独特なのね []
[ここ壊れてます]

765 名前:デフォルトの名無しさん mailto:sage [2021/05/24(月) 23:12:37.25 ID:rI3Y4Uqa.net]
関数型言語やったことないけど、Rustいけるかな
JavaとC++はそこそこ経験あり

766 名前:デフォルトの名無しさん mailto:sage [2021/05/24(月) 23:17:37.88 ID:zk4LoLUU.net]
Java 8とかC++ 14以降くらいなら結構似たような機能も入ってるし
そこまで大変じゃない気がする



767 名前:デフォルトの名無しさん mailto:sage [2021/05/24(月) 23:36:00.17 ID:JJaZh5wC.net]
c++はともかく、cくらいはやっぱ理解してた方が早道な気はする。

768 名前:デフォルトの名無しさん mailto:sage [2021/05/25(火) 01:36:21.07 ID:5vUI50kp.net]
以下のような関数を作ったんですがmatchが多くてどうしようか考えていました

fn foo(x: Option<u32>, y: Option<&str>) { //実際はOptionが5個とか
let x = match x {
Some(x) => x,
None => return,
};
let y = match y {
Some(y) => y,
None => return,
};
println!("{} {}", x, y);
}

考えついたのが、次のようにする方法なのですが、
fn foo(x: Option<u32>, y: Option<&str>) -> Option<()> {
let x = x?;
let y = y?;
println!("{} {}", x, y);
Some(())
}

記載の省略のためだけに返値の型をOption<()>にして最後にSome(())つけるのがすごく気持ち悪いんですが、
返値なしのままどうにかする方法はないでしょうか

769 名前:デフォルトの名無しさん mailto:sage [2021/05/25(火) 02:11:48.11 ID:QcInQ0e9.net]
if_chain使って
if_chain!{
if let Some(x) = x;
...
then { println!("{}", x); } }

770 名前:デフォルトの名無しさん mailto:sage [2021/05/25(火) 02:16:51.35 ID:Ygc8ZzR1.net]
>>753
fooの型変えられないなら、戻り値Optionはクロージャないしローカル関数に留めるといいと思う
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=aa2bc019e7329f1b6bece2597b59ee8a

771 名前:デフォルトの名無しさん mailto:sage [2021/05/25(火) 03:00:10.05 ID:nrKC74iS.net]
Ok(())はよく使うがSome(())はないな

普通にif-letでパターンマッチするのでよくない?
if let (Some(x), Some(y)) = (x, y) {
println!("{} {}", x, y);
}

772 名前:デフォルトの名無しさん mailto:sage [2021/05/25(火) 05:18:39.47 ID:gz717nup.net]
loggerを引数で渡すためには
ロギングを行うクラスFooがどこかしら(コンストラクタか個々のメソッドで)loggerを受け取る引数を持たねばならない
これ、ロギングみたいな裏方の仕事がFooのインターフェース仕様に影響しているということで、
抽象度が下がってるやんけ;;;

引き換えに得られるメリットは、Fooのインスタンスごとにloggerを切り替えられるというおおよそ現実的にありがたみが無い機能だけ

773 名前:デフォルトの名無しさん [2021/05/25(火) 06:08:48.35 ID:FYPKUk3M.net]
>>756
それをmachでやるのがよくない?

774 名前:デフォルトの名無しさん mailto:sage [2021/05/25(火) 06:23:40.79 ID:gz717nup.net]
つか機能の分離と記述の分離はトレードオフがある
1+1=2の形式的証明がどんだけの糞みたいな分量のに成り得るかを見たらワカル
どっかの抽象度をつきつめれば別のところにしわ寄せが逝く
それで良いジャマイカ人間の言語だもの、

775 名前:デフォルトの名無しさん mailto:sage [2021/05/25(火) 09:01:56.56 ID:5vUI50kp.net]
皆様ありがとうございます
どうもSomeをある程度書くのは避けられない感じですね

776 名前:デフォルトの名無しさん mailto:sage [2021/05/25(火) 10:09:28.07 ID:4oEEOZjA.net]
まさかstatic変数使ってるなんて、logクレートには失望したわ



777 名前:デフォルトの名無しさん mailto:sage [2021/05/25(火) 10:33:41.89 ID:bGIV0Xp5.net]
>>757
ログを裏方と考えるのも偏ってるし、ログ切り替えはデバッグ目的で普通にあるわ。
別にグローバルにするという選択が間違いとも思わんがこういう決めつけ野郎は邪魔だな。

778 名前:デフォルトの名無しさん mailto:sage [2021/05/25(火) 10:59:01.14 ID:/nQyXsn+.net]
サーバ側だとログを取るのが基本だし取り方も変えたくなるからlogger渡しは結構やるな
CLIとかなら雑にstaticでいいけど

779 名前:デフォルトの名無しさん mailto:sage [2021/05/25(火) 13:12:03.88 ID:CssgwvqL.net]
>>761
stdも使えないじゃん

780 名前:デフォルトの名無しさん mailto:sage [2021/05/25(火) 18:48:30.58 ID:4oEEOZjA.net]
>>764
なんで?

781 名前:デフォルトの名無しさん mailto:sage [2021/05/25(火) 19:25:41.69 ID:CssgwvqL.net]
>>765
https://github.com/rust-lang/rust/blob/a7890c7952bdc9445eb6c63dc671fa7a1ab0260d/library/std/src/io/stdio.rs#L553

782 名前:デフォルトの名無しさん mailto:sage [2021/05/25(火) 19:39:28.48 ID:4oEEOZjA.net]
>>766
えー
これからは write() システムコールでプリントするわ

783 名前:デフォルトの名無しさん [2021/05/25(火) 21:02:03.28 ID:p1A5R6d8.net]
stdが嫌ならcoreを使え

784 名前:デフォルトの名無しさん mailto:sage [2021/05/25(火) 22:59:34.15 ID:gz717nup.net]
>>762
近代的なログシステムならタグが使えるから
記録時に分っける理由がさらさらない
だいたい並列な事象を並列なまま記録したのでは時系列の解析ができないし、

そもそも>>762がいくら「ログは裏方じゃない」と叫んだところで基準が無い
アプリケーションロジックを汚してまでか?!という議論はいつまでもつきまとう

785 名前:デフォルトの名無しさん mailto:sage [2021/05/26(水) 00:00:47.75 ID:S2nFrW0F.net]
別に仕事で使ったことないならそういえばいいと思うよ。悪いことしてるわけじゃないんだから。

786 名前:デフォルトの名無しさん mailto:sage [2021/05/26(水) 00:04:47.15 ID:PLorGv/T.net]
そういやLog4JでいうMDCみたいなやつはあるのかしら?



787 名前:デフォルトの名無しさん mailto:sage [2021/05/26(水) 00:07:56.89 ID:rwxZHBm1.net]
お前らslog

>>760
ただのzipやん。
ttps://play.rust-lang.org/?version=nightly&mode=debug&edition=2021&gist=01c2f30ff2a49dc57c917ec16947aadb

788 名前:デフォルトの名無しさん mailto:sage [2021/05/26(水) 08:19:13.92 ID:AN5OxrIl.net]
まあloggingオブジェクトを複数作る仕事なんなら仕方が無いな

789 名前:デフォルトの名無しさん mailto:sage [2021/05/26(水) 08:29:19.07 ID:vJAmL6Qi.net]
slog見たけど、クソややこしいな

790 名前:デフォルトの名無しさん mailto:sage [2021/05/28(金) 09:51:25.19 ID:jQHjx/Sg.net]
シンタックスで判断しづらいもので性的分析するって、そのうち破綻しそうだな。

791 名前:デフォルトの名無しさん mailto:sage [2021/05/28(金) 09:54:11.42 ID:S8Iz9SRl.net]
エロい分析か

792 名前:デフォルトの名無しさん mailto:sage [2021/05/28(金) 10:45:17.68 ID:EKMYAKDR.net]
やらC

793 名前:デフォルトの名無しさん mailto:sage [2021/05/29(土) 20:28:41.06 ID:sKXDX7XX.net]
JPEG-XLのリファレンス実装作ってるチームがRustで再実装も始めてて驚いた
https://github.com/libjxl/jxl-rs

FirefoxにJPEG-XL対応を入れるかどうか議論するチケットで
今更大量のunsafeなC++コードを入れるのはちょっと……みたいな反応をされてた事と関係あるのかもしれない

794 名前:デフォルトの名無しさん [2021/05/30(日) 15:56:56.42 ID:HupJBx7X.net]
https://4e6.github.io/firefox-lang-stats/
https://www.openhub.net/p/firefox/analyses/latest/languages_summary
Firefox、かなりの割合でC++のコード入ってるけどこれでも減らそうとしてるのか

795 名前:デフォルトの名無しさん mailto:sage [2021/05/30(日) 16:00:13.57 ID:P46Jh5T1.net]
もう9.5%も行ってるのか

と言うかfirefoxからrustは始まったから当然か

796 名前:デフォルトの名無しさん mailto:sage [2021/05/30(日) 16:15:38.02 ID:ds+xAsBi.net]
でも、大量の有名なWebサービスが一時的にRubyで書いていたのに、
しばらくすると他言語に書き直した歴史がある。
アメリカ人はなぜか言語を書き直すのが好きなようだ。
Rustで書いてもまた別言語に直すかも知れない。
なお、Googleドライブなどの各社のストレージサービスを統一的なAPIで制御できる
ライブラリも何故かGoで書かれている。
メンドクサイ。



797 名前:デフォルトの名無しさん [2021/05/30(日) 17:11:41.17 ID:cF4puvJq.net]
>>781
遅い方から速い方へ書き直すのよ
特にスクリプト言語からC++/Rustへ書き換えるとサーバー数を1/10にできるケースもあり規模によっては経費激減ね
GoもGCあるから場合によっては他へ書き換えられる対象になりうるかも
Rustが他へ書き換えられる可能性がもしあるとしたら今はまだ存在しない新たに出現する言語へ

798 名前:デフォルトの名無しさん [2021/05/31(月) 00:35:54.04 ID:7s+MSAY0.net]
なんでClippy大先生がcargoでインストールできるクレートから外されるの?

799 名前:デフォルトの名無しさん mailto:sage [2021/05/31(月) 01:50:13.82 ID:u1BqTaEs.net]
rustupでインストールできるからでは
rustcとバージョン合わせないといけないから他のcrateと同じ扱いはしづらいのでは

800 名前:デフォルトの名無しさん mailto:sage [2021/05/31(月) 08:44:19.92 ID:etoumxTf.net]
Ruby on Rails の時価総額は、

Shopify が15兆円、
民泊のAirbnb が、大手ホテル3社の合計以上の10兆円、
Github が8千億円

これぐらい巨大でも、Rails で出来る。
時価総額が千億円以上になったら、Go, Elixir を考えてもよい

食べチョクは売上50億円らしいけど、
若い文系女が1人で起業したような会社は、Rails で十分

売上が千億円を超えたら、考えてもよい

801 名前:はちみつ餃子 mailto:sage [2021/05/31(月) 15:24:48.93 ID:hqkxpUd6.net]
ウェブシステム全体の実行コストはネットワークや IO にボトルネックが有るので
システム構成やらなんやらで工夫するのがまずやることで、
言語の速度が少しばかり速いのはそんなに効いてこないよ。

という話もよく聞くんだけど、実際のところどんなもんやろね?

802 名前:デフォルトの名無しさん [2021/05/31(月) 16:31:16.04 ID:slsuSMsk.net]
そりゃそうね
でも実行速度だけで選ぶわけじゃないからね

803 名前:デフォルトの名無しさん mailto:sage [2021/05/31(月) 19:40:04.29 ID:mBUAbPrR.net]
今まではハードにぶん投げても大丈夫だったのが
ハードの進化の鈍化でソフト側が工夫しないと駄目になりつつあるって話ってマジ?

804 名前:デフォルトの名無しさん mailto:sage [2021/05/31(月) 21:37:16.00 ID:M7WLmn8V.net]
いやそこでソフトで頑張ってもほぼダメだろ。。アーキテクチャで分散化考えないとって話じゃないかね

805 名前:はちみつ餃子 mailto:sage [2021/06/01(火) 01:05:37.48 ID:69wa4c/Y.net]
>>788
ハードウェアがもう伸びないってことではなくて、 CPU の速度が単純に速くなるという方向ではもう伸びにくいって話。
電子の大きさは変えられないから際限なく微細化できるわけではない。

わかりやすい例で言えば今のパソコンはマルチコアが当たり前になってて複数の CPU を載せる方向で性能を上げているが、
マルチコアを想定してないソフトをマルチコアパソコンで動かしてもひとつのコアしか使わないので性能が出ない。
高価な GPU を乗せても GPU を使うプログラムになってなきゃ意味がない。

ハードウェアの総合的な性能を上げるには色んな工夫があり得て、それらを実現すると同時に
ソフトウェアは「ハードウェアに合わせて」「ハードウェアの性能を引き出すように」工夫がいる。

これは今までにも普通にやってたことで、今になって必要になったわけじゃない。
小さな変化の積み重ねなこともあれば大きな変革を迫られることもあるってだけ。

806 名前:デフォルトの名無しさん mailto:sage [2021/06/01(火) 07:44:50.11 ID:DWqq5xbS.net]
後藤弘茂のWeekly海外ニュース■ Prescott/Tejasは5GHz台、65nmのNehalemは10GHz以上に
ttps://pc.watch.impress.co.jp/docs/2003/0227/kaigai01.htm
当時は景気よかったっすね。すぐ後に爆熱で日和ったけど
そして今、300Wの時代・・・

てか並列化によるスループットの向上はこのあたりから検討されるようになっていた気が



807 名前:デフォルトの名無しさん [2021/06/01(火) 19:29:09.48 ID:a3oi+h5L.net]
>>784 でも何故かcargoだけはcargo install cargo --forceとすれば自分でコンパイルしたもので上書きができる謎

808 名前:デフォルトの名無しさん [2021/06/04(金) 15:33:30.83 ID:kJqxa98Z.net]
よくわからないんだけどこれ、C言語のポインタ渡しが諸悪の根源で、そこを断ちさえすればC言語も所有権概念を取り入れられるの?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<267KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef