スレタイ以外の言語もok
前スレ
次世代言語22 Go Nim Rust Swift Kotlin TypeScript
https://mevius.5ch.net/test/read.cgi/tech/1629590343/
探検
次世代言語23 Go Nim Rust Swift Kotlin TypeScript
レス数が1000を超えています。これ以上書き込みはできません。
2021/11/28(日) 16:59:19.16ID:gZqbEyz/
2021/11/28(日) 17:09:04.49ID:zG9nrje+
▼スレタイ言語ランキング
1位:Rust(22回 Part1〜)
2位:Go(16回 Part1〜)
3位:Kotolin(15回 Part4〜)
4位:TypeScript(15回 Part7〜)
5位:Swift(11回 Part7〜)
6位:Haskell(7回 Part7〜)
7位:Scale(5回 Part1〜)
8位:Elixir(4回 Part1〜)
9位:Dart(3回 Part9〜)
10位:Julia(3回 Part14〜)
11位:Nim(3回 Part21〜)
12位:Erlang(2回 Part1〜)
13位:Crystal(1回 Part14〜)
14位:Bosque(1回 Part17〜)
15位:V(1回 Part19〜)
1位:Rust(22回 Part1〜)
2位:Go(16回 Part1〜)
3位:Kotolin(15回 Part4〜)
4位:TypeScript(15回 Part7〜)
5位:Swift(11回 Part7〜)
6位:Haskell(7回 Part7〜)
7位:Scale(5回 Part1〜)
8位:Elixir(4回 Part1〜)
9位:Dart(3回 Part9〜)
10位:Julia(3回 Part14〜)
11位:Nim(3回 Part21〜)
12位:Erlang(2回 Part1〜)
13位:Crystal(1回 Part14〜)
14位:Bosque(1回 Part17〜)
15位:V(1回 Part19〜)
2021/11/28(日) 19:49:59.38ID:qezuw3R9
Zigて候補になる?
2021/11/28(日) 20:15:17.89ID:CoHaH3Mv
2021/11/28(日) 23:04:48.66ID:sDAG0wCq
IT業界の状況
プログラミング言語「Rust」のための「Rust Foundation」設立 -- AWS(Amazon)、Microsoft、Google、Mozilla、Huaweiが創設
https://japan.zdnet.com/article/35166267/
Facebookが「Rust Foundation」に参加
https://japan.zdnet.com/article/35170192/
プログラミング言語「Rust」のための「Rust Foundation」設立 -- AWS(Amazon)、Microsoft、Google、Mozilla、Huaweiが創設
https://japan.zdnet.com/article/35166267/
Facebookが「Rust Foundation」に参加
https://japan.zdnet.com/article/35170192/
2021/12/01(水) 20:52:58.23ID:B7DQ+S2o
最も勢いのあるプログラミング言語は?:全世界2万人弱の開発者を調査
https://atmarkit.itmedia.co.jp/ait/articles/2112/01/news135.html
https://atmarkit.itmedia.co.jp/ait/articles/2112/01/news135.html
2021/12/01(水) 20:56:51.44ID:hrJpZ9c9
JavaScriptはブラウザが解する言語がそれしかないから人気と言うか使わざるを得ない
2021/12/01(水) 21:06:10.70ID:kIBZKc1x
rust単調減少やん
2021/12/01(水) 21:10:31.52ID:oI4zTDt2
単調非増加では?
というのはさておきDart人気なんだね
というのはさておきDart人気なんだね
2021/12/01(水) 21:50:01.36ID:kIBZKc1x
rubyやobjective-cより下の13位から上がるどころか新規のdartに抜かれて14位に落ちてるんだがwwww
2021/12/01(水) 22:54:31.76ID:2GK8iIv+
>>6
TIOBEより納得できる結果だけどDartはなんで伸びたの
TIOBEより納得できる結果だけどDartはなんで伸びたの
2021/12/01(水) 23:04:28.42ID:dwiuqH4z
DartにはFlutterっていうキラーアプリがあるからね
みんなFlutter使いたくてDartを使ってるだけっしょ
みんなFlutter使いたくてDartを使ってるだけっしょ
2021/12/02(木) 00:48:53.78ID:1aORNnKD
>>6
> ・Rust
> 過去2年間、他のどの言語よりも急速にユーザー数を伸ばしている。
> Rustを使う開発者は、2019年第3四半期には40万人だったが、2021年第3四半期には110万人に達し、ほぼ3倍に増えた。
すごい勢いで増えているね。
> ・Rust
> 過去2年間、他のどの言語よりも急速にユーザー数を伸ばしている。
> Rustを使う開発者は、2019年第3四半期には40万人だったが、2021年第3四半期には110万人に達し、ほぼ3倍に増えた。
すごい勢いで増えているね。
2021/12/02(木) 01:20:43.38ID:DzaJCHIY
rustは元がゴミすぎて3倍近く増えても順位は上げられずdartに瞬殺されて順位落としてるじゃんwwww
2021/12/02(木) 01:37:10.86ID:VtvQmLxd
visual development toolsって何?
2021/12/02(木) 01:40:17.24ID:/aa76ADO
Flutterらへんのカテゴリは、システムプログラミングらへんとはユーザ数が桁違いだからな
2021/12/02(木) 01:40:43.38ID:/aa76ADO
ユーザというか開発者数ね
2021/12/02(木) 02:38:45.32ID:bbBpFOo6
むしろdartが大復活したのすげえわ
2021/12/02(木) 09:23:40.40ID:DzaJCHIY
flutterなんて流行り始めてしばらく経つけどほとんど出てきてないし、どの言語もguiのbindingくらい持っているんだが
dartは昔から何かと出てきたけど、flutterで注目されて爆発したイメージ
何にせよrustは元々ゴミで注目された今もゴミということ
dartは昔から何かと出てきたけど、flutterで注目されて爆発したイメージ
何にせよrustは元々ゴミで注目された今もゴミということ
2021/12/02(木) 09:28:58.92ID:RXjIbDc+
Rubyがいよいよ本格的に死にそう
2021/12/02(木) 10:03:46.89ID:1aORNnKD
2021/12/02(木) 11:01:41.70ID:tDBmLQtJ
数だけで優劣が決まるならJSの圧勝だね
Rust理解できない子が、大歓喜するのも仕方がない
Rust理解できない子が、大歓喜するのも仕方がない
2021/12/02(木) 12:01:49.37ID:/aa76ADO
でも >>6 の データを見ると、SwiftやGoの半分ほどもRust開発者いるの? って思ってしまうなあ
自分の身近が偏ってるだけで、どこかにはRust開発者がたくさんいるんだろうか
自分の身近が偏ってるだけで、どこかにはRust開発者がたくさんいるんだろうか
2021/12/02(木) 12:36:46.06ID:7kQFmmWN
バックエンドだけでなくフロントエンドもRustで行こうという話も出てる
2021/12/02(木) 12:52:13.85ID:ZpHx+XCK
rustで書かなきゃならんほどランタイム速度必要なとこなんてほぼないけどな。
組み込みにはメモリデカすぎだし、数値計算、アルゴリズム分野じゃ共有のめんどくささから使われんし、
本当にごくごく一部しか使い道がない。
ほとんどはファッションでrust理解してる俺すげーーしたいだけのカスユーザーだろ。
組み込みにはメモリデカすぎだし、数値計算、アルゴリズム分野じゃ共有のめんどくささから使われんし、
本当にごくごく一部しか使い道がない。
ほとんどはファッションでrust理解してる俺すげーーしたいだけのカスユーザーだろ。
2021/12/02(木) 13:02:43.82ID:uPC6Zyta
現状C++じゃない領域にも適用しようといてるん?
個人的にはエンジニアの底上げになってうれしいけど
個人的にはエンジニアの底上げになってうれしいけど
2021/12/02(木) 13:10:28.97ID:KDPeqseB
discodeはバックもフロントもgoからrustに移行したな
遅延がサービス品質に直結してるようなアプリなら移行する価値があるんだろう
遅延がサービス品質に直結してるようなアプリなら移行する価値があるんだろう
2021/12/02(木) 13:12:35.29ID:t0ccWHUc
逆にフロントエンドだけでなくバックエンドもDartで書こうという話も出てる
書けるようになったから書いてねという発表があった程度だけど
書けるようになったから書いてねという発表があった程度だけど
2021/12/02(木) 13:27:17.82ID:1aORNnKD
Ruby on RailsのクックパッドもバックエンドをRustにしてたな
2021/12/02(木) 13:48:49.03ID:7kQFmmWN
>>25
それはアンチ的視点だからそんな偏った見方になってしまうのであって
現実にはどの分野でもRustに置き換えるとかなり高速化されるか
あるいは旧C/C++分野ではかなり安全化されるのでその両分野からじわじわと話が出てる
それはアンチ的視点だからそんな偏った見方になってしまうのであって
現実にはどの分野でもRustに置き換えるとかなり高速化されるか
あるいは旧C/C++分野ではかなり安全化されるのでその両分野からじわじわと話が出てる
2021/12/02(木) 13:56:00.28ID:Axtkc4m/
実際にはRustほどのパフォーマンスがいらなくても
型が強くてそこそこ速いって選択肢があまりないんだよな
Goくらいの速度でいいとしても、あの言語機能には
耐えられないって場合はRustになってしまう
ランタイムありで良ければJVM系とかC#もいいんだけど
型が強くてそこそこ速いって選択肢があまりないんだよな
Goくらいの速度でいいとしても、あの言語機能には
耐えられないって場合はRustになってしまう
ランタイムありで良ければJVM系とかC#もいいんだけど
2021/12/02(木) 14:41:59.12ID:/aa76ADO
C++の巨大プロジェクトは絶対にメモリ関連のバグがたくさんあるからな・・・。
2021/12/02(木) 14:54:42.94ID:DzaJCHIY
2021/12/02(木) 15:11:50.02ID:1aORNnKD
2021/12/02(木) 15:33:13.06ID:DzaJCHIY
そこがおまけならnimとかでいいじゃん
2021/12/02(木) 16:27:40.33ID:bbBpFOo6
Rustはシャローコピーに関する地雷を極めて踏みづらいのはメリットかな
2021/12/02(木) 16:28:07.24ID:1aORNnKD
NimはRustのような値付きenum及びそのパターンマッチングがないから使えん
Nimだとオブジェクトバリアントが限界で機能不足
Nimだとオブジェクトバリアントが限界で機能不足
2021/12/02(木) 16:32:00.04ID:DzaJCHIY
どちらもどうでもいいよそんなの趣味の範疇
オマケだというならgoの圧勝で終わり
オマケだというならgoの圧勝で終わり
2021/12/02(木) 16:38:10.56ID:1aORNnKD
Goはそういう点ではNimよりも機能不足
2021/12/02(木) 16:50:11.44ID:DzaJCHIY
そんなの趣味嗜好の範疇なんだってw
2021/12/02(木) 16:50:41.52ID:/aa76ADO
パフォーマンスどうでもよくて、そういう好みなら、ScalaとかHaskellが合うかもね
2021/12/02(木) 17:02:19.38ID:7kQFmmWN
ある意味
Haskellから美味しい部分をもらってきた手続き型言語がRust
Haskellから美味しい部分をもらってきた手続き型言語がRust
2021/12/02(木) 17:12:39.13ID:/aa76ADO
そうね、Rustはいろいろなシンタックスが用意されててすごいよ
パフォーマンスがどうでもいいなら、borrow checkerとかで安全にしてるRustより、
GCを使いつつ参照透過性を保つHaskellのほうがいろいろ整然とされてて見通しが良い気がする
まあいろいろ好みや、向き不向きとかあるだろうけど
パフォーマンスがどうでもいいなら、borrow checkerとかで安全にしてるRustより、
GCを使いつつ参照透過性を保つHaskellのほうがいろいろ整然とされてて見通しが良い気がする
まあいろいろ好みや、向き不向きとかあるだろうけど
2021/12/02(木) 17:17:04.28ID:7kQFmmWN
2021/12/02(木) 18:08:26.45ID:Axtkc4m/
Nimも機能少ない方だから、Goでいいじゃんってなりがち
そういう意味ではGo/Rustの次世代って難しいな
GoとRustでシンプルと複雑の限界まで振ってあるから
その中間解を取ってしまうと中途半端になるという
そういう意味ではGo/Rustの次世代って難しいな
GoとRustでシンプルと複雑の限界まで振ってあるから
その中間解を取ってしまうと中途半端になるという
46デフォルトの名無しさん
2021/12/02(木) 18:51:26.15ID:KvHBMpNF goはテンプレート有れば私的には文句ねぇが現今のinterfaceのアプローチと異なる且つ重複する部分が多くきな臭いよね
ただまぁあそこまで洗練されたcoroutine featureは他に見ないしgcの改良だけでもいいかなとも思う
ただまぁあそこまで洗練されたcoroutine featureは他に見ないしgcの改良だけでもいいかなとも思う
2021/12/02(木) 19:24:47.38ID:DzaJCHIY
nimはオリジナリティがなく器用貧乏な感じ
golangだけでなくどの言語も独自の進化を続けているだけで機能不足なわけじゃない
rustは高速性と安全性を取ったら何も残らないゴミクズ
golangだけでなくどの言語も独自の進化を続けているだけで機能不足なわけじゃない
rustは高速性と安全性を取ったら何も残らないゴミクズ
48デフォルトの名無しさん
2021/12/02(木) 19:39:44.60ID:bf1zh15c 元rust推し装うの笑う
もう流れはとめられんよ
もう流れはとめられんよ
2021/12/02(木) 19:42:44.71ID:7kQFmmWN
50デフォルトの名無しさん
2021/12/02(木) 19:57:21.48ID:CTB0TicX あわしろ氏はRustを使うべきと言ってる。
2021/12/02(木) 21:14:08.06ID:DzaJCHIY
元々rust推しなのは事実だからなw
ただ俺が推してるのはごくごく一部の高スループットや巨大データを扱うサーバーやデータベースなどの分野であって
OSなどハード寄りや普通のアプリで向いているとは思っていない
rustの流れなんて誰も作ってないし意識もしてないと思う
自然に流れが出来るなら流れに任せるけど違和感しかなければ推せなくなる
根拠がないのは客観的な話ではなく、主観をそのまま言ってるからだよw
あと俺はgo推しじゃないし、汎用なやつだと消去法で総合的にgoのコスパが一番いいと思ってるだけ
ただ俺が推してるのはごくごく一部の高スループットや巨大データを扱うサーバーやデータベースなどの分野であって
OSなどハード寄りや普通のアプリで向いているとは思っていない
rustの流れなんて誰も作ってないし意識もしてないと思う
自然に流れが出来るなら流れに任せるけど違和感しかなければ推せなくなる
根拠がないのは客観的な話ではなく、主観をそのまま言ってるからだよw
あと俺はgo推しじゃないし、汎用なやつだと消去法で総合的にgoのコスパが一番いいと思ってるだけ
2021/12/02(木) 21:28:41.46ID:1aORNnKD
2021/12/02(木) 22:01:59.81ID:4Bycw8L4
Nimは言語自体の機能は必要最低限にしてtemplateやmacroでユーザが自由に言語の機能を拡張できるようにしようという考えだから。
2021/12/02(木) 22:14:35.17ID:DzaJCHIY
分かるだろw 議論しても荒れるだけだから無駄
大雑把に言って初心者に難しい理由の説明しづらいルールが多いから一般向けに流行らないということ
nimについてはそうだね
大雑把に言って初心者に難しい理由の説明しづらいルールが多いから一般向けに流行らないということ
nimについてはそうだね
2021/12/02(木) 23:08:40.70ID:kbiEbenW
ゴミクズとまで言い切った割には普通の話だな…
PythonやJSから入った初心者に勧めるならそりゃGoだろう
PythonやJSから入った初心者に勧めるならそりゃGoだろう
2021/12/02(木) 23:59:00.94ID:DzaJCHIY
そうだよ大雑把な話でないと定義や粒度が合わなくてそもそも話せないからな
あとrustから「高速性と安全性を取ったら」って前提を抜かないでゴミクズだけ引用しないでくれ
あとrustから「高速性と安全性を取ったら」って前提を抜かないでゴミクズだけ引用しないでくれ
2021/12/03(金) 00:16:18.89ID:MdLkNSga
こいつネット記事で聞き齧った程度の
浅いことしか言えてないし
実際はrustで hello world 書いたことすら無さそう
浅いことしか言えてないし
実際はrustで hello world 書いたことすら無さそう
2021/12/03(金) 00:17:26.23ID:2vKaRH4L
遅くて安全じゃない言語は元がなんであれゴミクズなんでは...
2021/12/03(金) 04:23:17.06ID:uToCzuWA
何をもって「安全」とするのやら
非同期回りも含めるとスクリプト系だいたい全部アウトになります?
非同期回りも含めるとスクリプト系だいたい全部アウトになります?
2021/12/03(金) 04:45:15.91ID:DrOtnAT7
なんのことやらしらんけど、Rustや他の参照透明性のある言語のことを言いたいのかな
2021/12/03(金) 04:47:18.61ID:DrOtnAT7
安全な言語、について
2021/12/03(金) 08:53:10.36ID:kWOLQTcK
>>59
マルチスレッドでのデータ競合を入れるならコンパイル型もほぼアウト
実際静的にチェックできるのはRustくらいじゃない?
Goなんかはgoroutineで気軽にデータ競合しうるから、コンパイル時にチェックできるといいんだけどなぁ
マルチスレッドでのデータ競合を入れるならコンパイル型もほぼアウト
実際静的にチェックできるのはRustくらいじゃない?
Goなんかはgoroutineで気軽にデータ競合しうるから、コンパイル時にチェックできるといいんだけどなぁ
2021/12/03(金) 09:07:52.00ID:iTawI6Uz
で、具体的にお前は何をrustで作ってんの?
2021/12/03(金) 09:14:09.01ID:uz5bCBXU
>>57
その人とは別人で悪いが、Rustでは最早ハロワを自分で書く必要がない
その人とは別人で悪いが、Rustでは最早ハロワを自分で書く必要がない
2021/12/03(金) 09:15:22.04ID:UM4QUqUK
またしょうもない定義の話になってるし・・・
分かれよw 変なところに噛み付いてないで自分の意見をちゃんと言え
分かれよw 変なところに噛み付いてないで自分の意見をちゃんと言え
2021/12/03(金) 12:02:53.40ID:RidNMi7I
rustは言語処理系書きやすい
安全性とか高速さは関係なくて代数的データ型が使いやすければ他の言語でも代替はできるとは思うが
rustが一番使い慣れてるのでrustで書いている
安全性とか高速さは関係なくて代数的データ型が使いやすければ他の言語でも代替はできるとは思うが
rustが一番使い慣れてるのでrustで書いている
2021/12/03(金) 15:17:45.07ID:DrOtnAT7
データ競合については、Haskellとかも起きないよね
2021/12/09(木) 00:24:44.17ID:+omQJE5B
2021/12/09(木) 01:13:30.58ID:5YfzBk4D
このスレの言語で挙げられてる問題すべて解決してるものある?
NimはCにコンパイルされるからブートストラップの問題も対応アーキテクチャの問題もなくなるのかな?
NimはCにコンパイルされるからブートストラップの問題も対応アーキテクチャの問題もなくなるのかな?
2021/12/09(木) 02:43:44.63ID:nOFzc7fa
2021/12/09(木) 12:38:32.33ID:9kW8IukA
むしろブートストラップの問題が表面化してる点はもうrustの圧勝って話に見える
2021/12/10(金) 10:43:45.25ID:6OnwijQi
>>69
Nim言語のコンパイラはNim言語で書かれているんだけどCコンパイラさえあればビルドできるようになっている。
Nimコンパイラをソースコードからビルドするときは、Nimのコンパイラから出力されたC言語のNimのソースコードのリポジトリnim-lang/csources_v1をビルドしてから最新のNimコンパイラをビルドするようになっている。
https://github.com/nim-lang/Nim#compiling
Nim言語のコンパイラはNim言語で書かれているんだけどCコンパイラさえあればビルドできるようになっている。
Nimコンパイラをソースコードからビルドするときは、Nimのコンパイラから出力されたC言語のNimのソースコードのリポジトリnim-lang/csources_v1をビルドしてから最新のNimコンパイラをビルドするようになっている。
https://github.com/nim-lang/Nim#compiling
73デフォルトの名無しさん
2022/01/26(水) 05:57:30.61ID:22SsmXBb サーバーサイドは本当にGoが丁度いいな
typescriptと構文にてるし、node.jsから移行しやすいのが最高
typescriptと構文にてるし、node.jsから移行しやすいのが最高
2022/01/26(水) 20:59:23.59ID:lCcD9DKz
NimがGoとRustの間を縫って次世代トップに躍り出る予感
巨大IT企業のバックアップが付けば一気に跳ねると思う
巨大IT企業のバックアップが付けば一気に跳ねると思う
2022/01/26(水) 21:09:35.46ID:dhhZJlzR
GoやRustと比べると言語としての魅力がよくわからないんだよな。
オフサイドルールスキー専用言語?
オフサイドルールスキー専用言語?
2022/01/26(水) 21:25:25.23ID:4Kazumf5
Nimなんか別に誰も使ってないし特に期待もされてないでしょ
世の中に山ほどある俺言語の一つに過ぎないよ
世の中に山ほどある俺言語の一つに過ぎないよ
2022/01/26(水) 21:59:22.52ID:VTF5khmL
Nimはわざわざ選択する理由がないんだよな
楽に書くならGoだしちゃんと書くならRustなわけで
もうちょっと特徴が欲しい
楽に書くならGoだしちゃんと書くならRustなわけで
もうちょっと特徴が欲しい
2022/01/26(水) 22:07:13.93ID:EiswyKlB
1. 実行速度、バイナリサイズ、メモリ使用量
→CトランスパイルなのでCに近い値
2. 安全性
→メモリ安全性高い
3. 生産性
→スクリプト言語並み
4. 機能性
→シンプルな機能と、強力なメタプログラミング
Nimは1・2と3の両立性が高く、比肩する言語が無い
3と4は常にトレードオフなので正解が無いが、Nimの割り切り方は良い
→CトランスパイルなのでCに近い値
2. 安全性
→メモリ安全性高い
3. 生産性
→スクリプト言語並み
4. 機能性
→シンプルな機能と、強力なメタプログラミング
Nimは1・2と3の両立性が高く、比肩する言語が無い
3と4は常にトレードオフなので正解が無いが、Nimの割り切り方は良い
2022/01/26(水) 22:16:29.06ID:EiswyKlB
GoもRustも実行速度とメモリ使用量が大きすぎるし、C/C++は生産性や安全性に問題が大きすぎる
その打開策としてNimを使う事ができる
複数言語を使い分けるよりも、1つの言語でまかなえるならば、学習コストや再利用性の面から越したことはないしね
その打開策としてNimを使う事ができる
複数言語を使い分けるよりも、1つの言語でまかなえるならば、学習コストや再利用性の面から越したことはないしね
2022/01/26(水) 22:23:32.14ID:EiswyKlB
ただ他の言語と違ってコミュニティが貧弱すぎるのが欠点
言語性能自体とは直接の関係はないが、こればっかりは痛い
大手企業とか人気ソフトに使われる様なきっかけが無いと永遠に人気に火がつかないままだと思う
Go/Dart/KotlinはGoogle、Rust/JuliaはMozila、SwiftはAppleの後押しがあるけど、Nimは一切そういうの無くて、コアな人気だけが細々と支えてる状態
言語性能自体とは直接の関係はないが、こればっかりは痛い
大手企業とか人気ソフトに使われる様なきっかけが無いと永遠に人気に火がつかないままだと思う
Go/Dart/KotlinはGoogle、Rust/JuliaはMozila、SwiftはAppleの後押しがあるけど、Nimは一切そういうの無くて、コアな人気だけが細々と支えてる状態
2022/01/26(水) 22:32:35.02ID:bGJ0opg8
>>79
NimってRustより速くてメモリ使用量少ないの?
NimってRustより速くてメモリ使用量少ないの?
2022/01/27(木) 00:32:14.69ID:9sHDXdIz
>>78
1と2ってGo/Rustくらいの世代だとほぼ標準装備なんだよね
そりゃ多少の優劣はあるだろうがアプリの特性差やプログラマのスキル差から考えると誤差
そうすると構文が一部の人にマッチするって部分しか残らない感じ
1と2ってGo/Rustくらいの世代だとほぼ標準装備なんだよね
そりゃ多少の優劣はあるだろうがアプリの特性差やプログラマのスキル差から考えると誤差
そうすると構文が一部の人にマッチするって部分しか残らない感じ
2022/01/27(木) 09:11:54.39ID:RgpIq3e0
Rustのメモリ使用量が大きいとかヤバイな
84デフォルトの名無しさん
2022/01/27(木) 09:32:04.47ID:P89ZTXWu nimはd言語の二の舞
2022/01/28(金) 09:21:04.21ID:GM/JWe9P
nimは、goと比べると今風の書き方が出来るのが良いかな。
でも、コミュニティが弱いのが辛い。
でも、コミュニティが弱いのが辛い。
86デフォルトの名無しさん
2022/01/31(月) 06:52:54.15ID:NqM0xBel https://kdy1.dev/posts/2022/1/tsc-go
tscの型チェック機能をgoで書き直すらしい、vercelが支援してるみたい
初めはテストとしてrustで書き直して型チェック速度が62倍になって
ただ、rustで書き直すのは適していないと考えてgoに移植することを選択したと
フォーラム https://news.ycombinator.com/item?id=30074414
tscの型チェック機能をgoで書き直すらしい、vercelが支援してるみたい
初めはテストとしてrustで書き直して型チェック速度が62倍になって
ただ、rustで書き直すのは適していないと考えてgoに移植することを選択したと
フォーラム https://news.ycombinator.com/item?id=30074414
2022/01/31(月) 07:42:59.19ID:qlFEomu1
>>86
要約
一部Rustで書き直してテストしたら62倍速となり当然速かったけど
tscのコード全体がGCに依存しまくっているため移植ではなく全面書き直しとなってしまう
そこで妥協案としてGCで動作するGoへ移植することにした
要約
一部Rustで書き直してテストしたら62倍速となり当然速かったけど
tscのコード全体がGCに依存しまくっているため移植ではなく全面書き直しとなってしまう
そこで妥協案としてGCで動作するGoへ移植することにした
2022/01/31(月) 09:04:41.29ID:MPqeYEvw
こんなもん本家の開発についていけなくなって早晩放棄されるのが目に見えてるだろ
まだRustだったらMSが支援してくれる可能性もあったかもしれないけどね
完全に手段が目的化している不毛なプロジェクトの典型だな
まだRustだったらMSが支援してくれる可能性もあったかもしれないけどね
完全に手段が目的化している不毛なプロジェクトの典型だな
2022/01/31(月) 09:05:57.74ID:Ph6Okw9C
SASS なんて、元々のRuby から、
多言語でも使えるように、C++ のnode-sass(LibSass)へ移植したけど、
開発が難しすぎるから、頓挫した
今は、Dart Sass
Dartもマイナーな言語だし、
TypeScript か何かで作らないと、また開発に行き詰るかも
C/C++, Rust など実行速度が速い言語は、開発が難しすぎる。
可読性が悪く修正できないので、開発費・開発期間が増える
多言語でも使えるように、C++ のnode-sass(LibSass)へ移植したけど、
開発が難しすぎるから、頓挫した
今は、Dart Sass
Dartもマイナーな言語だし、
TypeScript か何かで作らないと、また開発に行き詰るかも
C/C++, Rust など実行速度が速い言語は、開発が難しすぎる。
可読性が悪く修正できないので、開発費・開発期間が増える
2022/01/31(月) 10:12:07.29ID:qlFEomu1
>>89
C/C++の可読性の悪さは
Rustで改善されていてとても使いやすくなっている
GC依存で設計された既存システムをそのまま移植するのは無謀だが
最初からGCに依存せずに設計が可能でありRustなら可読性が問題になることはない
C/C++の可読性の悪さは
Rustで改善されていてとても使いやすくなっている
GC依存で設計された既存システムをそのまま移植するのは無謀だが
最初からGCに依存せずに設計が可能でありRustなら可読性が問題になることはない
2022/02/01(火) 01:49:52.13ID:vhj8p7kX
自分はRustのCargoとその気になればunsafeで自由に書けるのが気に入ってる
Rustはとにかく美しいと思うな
Rustはとにかく美しいと思うな
2022/02/01(火) 01:53:40.31ID:0bEAn4zq
たしかに、Cargoらへんのエコシステムに関してはC++とは勝負にすらならないな
npmを反面教師にしたのかな、よくできてるよね
npmを反面教師にしたのかな、よくできてるよね
2022/02/01(火) 14:13:16.30ID:Az2aYbYt
Rustが美しいと思うのはどういう点なのか、具体的に聞きたくなる。これはC/C++と比べてる話じゃなく現代的な言語の話で
無駄にタイプ量が多くマクロと言語が一貫してなく、アトリビュートも独立しおり言語との一貫性が全くない
無駄にタイプ量が多くマクロと言語が一貫してなく、アトリビュートも独立しおり言語との一貫性が全くない
2022/02/01(火) 14:17:41.49ID:Az2aYbYt
例えば const fnやコンパイル時定数などはコンパイル時にコードを動かして計算したりするが、一方でアトリビュートで
#[cfg(unix)]とかやったりして思想がバラバラ、まあ破綻はしてないしC/C++のマクロなんかと比べれば100倍ましだけど
#[cfg(unix)]とかやったりして思想がバラバラ、まあ破綻はしてないしC/C++のマクロなんかと比べれば100倍ましだけど
2022/02/01(火) 14:19:22.77ID:fJKShZ3h
2022/02/01(火) 15:56:11.68ID:aP+3H5wQ
2022/02/01(火) 19:27:41.48ID:vhj8p7kX
2022/02/02(水) 09:03:27.50ID:j07gQdao
2022/02/02(水) 20:32:31.23ID:yDHN0aKU
100デフォルトの名無しさん
2022/02/03(木) 02:33:37.86ID:u6HUT2aq もしかしてrustってめちゃくちゃ完成度高くね?
バックエンドだけじゃなくて
wasmでブラウザのフロントエンドにも進出してくるっぽいし
typescriptのシェアも奪いそう
バックエンドだけじゃなくて
wasmでブラウザのフロントエンドにも進出してくるっぽいし
typescriptのシェアも奪いそう
101デフォルトの名無しさん
2022/02/03(木) 11:10:49.98ID:6/uRDE/t Go人気らしいけど嫌い
やっぱりC++使いはRustに行くべきなんかな
やっぱりC++使いはRustに行くべきなんかな
102デフォルトの名無しさん
2022/02/03(木) 11:48:25.31ID:2zDY1ewV Rust、アルゴリズム書くのに超絶向いてないよ。
103デフォルトの名無しさん
2022/02/03(木) 13:51:46.29ID:I6DodtQJ アルゴリズム書くのは普通疑似言語でやるわな
104デフォルトの名無しさん
2022/02/03(木) 17:00:23.94ID:2zDY1ewV >アルゴリズム書くのは普通疑似言語でやるわな
何言ってんの?
何言ってんの?
105デフォルトの名無しさん
2022/02/03(木) 18:00:00.71ID:I6DodtQJ アルゴリズム自体の記述には自然言語か疑似言語かpythonみたいなスクリプト言語使うのが多いのでは
「アルゴリズムを書く」ってアルゴリズムを使ったプログラムを書くという意味?
そうだとしたら対象が広すぎるのでもうちょっと具体化して欲しい
「アルゴリズムを書く」ってアルゴリズムを使ったプログラムを書くという意味?
そうだとしたら対象が広すぎるのでもうちょっと具体化して欲しい
106デフォルトの名無しさん
2022/02/03(木) 18:01:17.86ID:2zDY1ewV そんなしょーもない誤魔化しはしなくていいよ。
107デフォルトの名無しさん
2022/02/03(木) 18:07:41.52ID:I6DodtQJ アルゴリズムと一概に言ったってソートみたいなのは別にrustでも普通に書けるでしょ
どういうアルゴリズムを実装しようとして困ったのか教えて欲しい
どういうアルゴリズムを実装しようとして困ったのか教えて欲しい
108デフォルトの名無しさん
2022/02/03(木) 18:24:36.45ID:2zDY1ewV じゃあB-tree、赤黒木、ダイクストラ、フィボナッチtree、なんでもいいから書いてみりゃいいよ。
109デフォルトの名無しさん
2022/02/03(木) 18:28:40.55ID:I6DodtQJ 木構造やグラフ構造が書きづらいって話かな
110デフォルトの名無しさん
2022/02/03(木) 18:59:23.99ID:Ajxf7YAY 変な日本語だな
アルゴリズムの勉強には向いてない、ということを言いたいんだろうけど
アルゴリズムの勉強には向いてない、ということを言いたいんだろうけど
111デフォルトの名無しさん
2022/02/03(木) 19:05:25.62ID:2zDY1ewV どうでもいいイチャモンづけにこだわるやつだな。。
だから実際組んで見ろって。。何もしないくせに。
だから実際組んで見ろって。。何もしないくせに。
112デフォルトの名無しさん
2022/02/03(木) 19:12:44.13ID:I6DodtQJ 新しいrustの弱点の話聞けるかと思ったら結局いつものグラフ構造の話だったので興味を失ってしまっただけです
113デフォルトの名無しさん
2022/02/03(木) 19:23:59.05ID:5yAN5s9n114デフォルトの名無しさん
2022/02/03(木) 19:34:47.62ID:I6DodtQJ115デフォルトの名無しさん
2022/02/03(木) 19:51:02.49ID:5yAN5s9n116デフォルトの名無しさん
2022/02/03(木) 19:57:30.61ID:uKT4xKIF >>113
言語と切り離して論理的に考えた時に
安全な構成と操作ならばRustでも簡単
危険な構成や操作ならばRustでは出来ない(unsafe使えばCと同じ操作が可能)
さらに加えて
危険な構成や操作に成り得るが
限られた一貫した用い方をしている限り安全な場合
新たな型を作って危険な操作を内部に閉じ込めてしまい
安全な操作のみ外部に提供することで利用者はunsafeを用いずに済むことができる
Rustの標準ライブラリもそのようにして作られている
言語と切り離して論理的に考えた時に
安全な構成と操作ならばRustでも簡単
危険な構成や操作ならばRustでは出来ない(unsafe使えばCと同じ操作が可能)
さらに加えて
危険な構成や操作に成り得るが
限られた一貫した用い方をしている限り安全な場合
新たな型を作って危険な操作を内部に閉じ込めてしまい
安全な操作のみ外部に提供することで利用者はunsafeを用いずに済むことができる
Rustの標準ライブラリもそのようにして作られている
117デフォルトの名無しさん
2022/02/03(木) 23:53:53.52ID:2zDY1ewV >>112
毎回そうやって曖昧にして逃げてるんだね。進歩ないね。
毎回そうやって曖昧にして逃げてるんだね。進歩ないね。
118デフォルトの名無しさん
2022/02/04(金) 00:36:32.80ID:uF1Qc9S6 >>117
そこはグラフも表現できないクソ雑魚言語乙ってあおるべきなのになんで下手くそな人格攻撃してしまうのか
そこはグラフも表現できないクソ雑魚言語乙ってあおるべきなのになんで下手くそな人格攻撃してしまうのか
119デフォルトの名無しさん
2022/02/04(金) 12:24:28.50ID:gER3CGZG 具体的にするならミュータブルなグラフ構造をスレッドセーフに扱うのは人類が思っている以上に難しいことで、それを言語側の制約で扱うならこうならざるを得ないくらい難しい問題だ、ということではないの?
120デフォルトの名無しさん
2022/02/04(金) 13:24:42.43ID:ZD21CbAH 例えば何かノードをたどっている最中にいつの間にか戻り先が変わってるとかいちいちケアしてコード書けないから、結局排他処理やスナップショットすりなんらかの工夫が必要
データ構造の操作だけ完璧に仕上げても応用きかないからそこまで深く考える必要ない
データ構造の操作だけ完璧に仕上げても応用きかないからそこまで深く考える必要ない
121デフォルトの名無しさん
2022/02/04(金) 15:25:21.40ID:ZnSz9FK0 そうね
スレッドセーフを諦めれば他の言語に近いくらいに簡単にできるのではないか
スレッドセーフを諦めれば他の言語に近いくらいに簡単にできるのではないか
122デフォルトの名無しさん
2022/02/04(金) 15:44:53.55ID:E1vT/glc C言語→Rustするトランスパイラーですべて解決じゃね?
Rustだからメモリも安心安全だぞ
Rustだからメモリも安心安全だぞ
123デフォルトの名無しさん
2022/02/04(金) 17:43:24.41ID:7ZNTSlZY >>95-99
今どきのコンパイル型言語で型推論が強力でない言語なんてありますか?#[attribute(key = "value", value2)]とか書いててタイプ量は少ない?
最近は自作のアトリビュートが書けるようになりましたが、普通は言語サブセットは小さくして、そのサブセット言語でアトリビュートを実現してれば
このように無理やりカスタムアトリビュートを出す必要はなかった。
一番の最低なところはCargoだと思う、これのせいでコンパイルが異常に遅い。Pythonでもpipやデコレーターはありますがホントにマンセーですね
マクロの定義文法も変換が主たるものだから別記法が理にかなっているとの事ですが、設計段階では、そんな事は一言もホアレは
言ってません。0.2でクラスが導入され、0.3でインターフェースが導入され、0.4でトレイトが出来てクラスが削除された。1.0以降も酷い互換性の
破壊が続いて、安定しだしたのは1.20以降です。
個人的に気に入らないのはfunctionはfnとするのにmutableはmutと使用頻度が高いものがfnよりタイプ量が多い事。「::」も無意味に
2回打たせる意味が分からない。アトリビュートも#[...]とか異常に無駄。ほかの言語のようにパターン束縛表現があるので@は使えませんが
「#」だけで良いでしょう・・・
確かにマクロ呼び出しは「!」とわざと区別するように思想が影響していますが、マクロ中の$はマクロ展開ではコンパイラを単純化させて
コンパイルを速くするためだけにプログラマへ負担を押し付けているだけです。ただ「!」もNeverと別の意味があり、暗黙の型強制なんて
わざと敷居を高くすることに言語設計者は考えているとしか思えない
Occamで最初のバージョンが作られたけど、インデントスタイルのオフサイドじゃなくC/C++風にしたのは、好みで{}スタイルを好む人が
多いから(タイプ量は増えますが)許容範囲でしょうが・・・
今どきのコンパイル型言語で型推論が強力でない言語なんてありますか?#[attribute(key = "value", value2)]とか書いててタイプ量は少ない?
最近は自作のアトリビュートが書けるようになりましたが、普通は言語サブセットは小さくして、そのサブセット言語でアトリビュートを実現してれば
このように無理やりカスタムアトリビュートを出す必要はなかった。
一番の最低なところはCargoだと思う、これのせいでコンパイルが異常に遅い。Pythonでもpipやデコレーターはありますがホントにマンセーですね
マクロの定義文法も変換が主たるものだから別記法が理にかなっているとの事ですが、設計段階では、そんな事は一言もホアレは
言ってません。0.2でクラスが導入され、0.3でインターフェースが導入され、0.4でトレイトが出来てクラスが削除された。1.0以降も酷い互換性の
破壊が続いて、安定しだしたのは1.20以降です。
個人的に気に入らないのはfunctionはfnとするのにmutableはmutと使用頻度が高いものがfnよりタイプ量が多い事。「::」も無意味に
2回打たせる意味が分からない。アトリビュートも#[...]とか異常に無駄。ほかの言語のようにパターン束縛表現があるので@は使えませんが
「#」だけで良いでしょう・・・
確かにマクロ呼び出しは「!」とわざと区別するように思想が影響していますが、マクロ中の$はマクロ展開ではコンパイラを単純化させて
コンパイルを速くするためだけにプログラマへ負担を押し付けているだけです。ただ「!」もNeverと別の意味があり、暗黙の型強制なんて
わざと敷居を高くすることに言語設計者は考えているとしか思えない
Occamで最初のバージョンが作られたけど、インデントスタイルのオフサイドじゃなくC/C++風にしたのは、好みで{}スタイルを好む人が
多いから(タイプ量は増えますが)許容範囲でしょうが・・・
124デフォルトの名無しさん
2022/02/04(金) 17:50:56.66ID:ZD21CbAH 趣味・好みじゃなくて問題があるという話なら
なぜ本家じゃなくここに書くw
なぜ本家じゃなくここに書くw
125デフォルトの名無しさん
2022/02/04(金) 18:12:52.54ID:3IKuZnie 0.2からおっかけてたのならattributeの文法議論の時にそれ主張しとけば良かったのに
あとcargoのせいでコンパイルが遅くなるというのはどういうこと?
パッケージマネージャーがあるせいでcrateが細分化されてリンク時間が延びることを言いたい?
あとcargoのせいでコンパイルが遅くなるというのはどういうこと?
パッケージマネージャーがあるせいでcrateが細分化されてリンク時間が延びることを言いたい?
126デフォルトの名無しさん
2022/02/04(金) 19:21:26.70ID:b3SZZj/4 >>123
Rust 1.0がリリースされた2015年よりも昔の0.x時代の話で叩いても無意味ですぜ
あとは1文字タイプ量が多いとかどうでもよい話ばかり
言語機能については批判がないということはRustの優秀性を認めてるわけか
Rust 1.0がリリースされた2015年よりも昔の0.x時代の話で叩いても無意味ですぜ
あとは1文字タイプ量が多いとかどうでもよい話ばかり
言語機能については批判がないということはRustの優秀性を認めてるわけか
127デフォルトの名無しさん
2022/02/04(金) 23:40:44.00ID:V2NB9pIC Rust並に実行速くて
Rustよりもプログラミングしやすい言語がない
結果として現時点でのベストな選択肢はRust
Rustよりもプログラミングしやすい言語がない
結果として現時点でのベストな選択肢はRust
128デフォルトの名無しさん
2022/02/05(土) 00:06:09.72ID:zObCURfd c言語の型宣言も後置にしてくれねーかな。
129デフォルトの名無しさん
2022/02/05(土) 08:13:51.74ID:N1G1oPSC Rustの唯一の欠点は、メモリ管理をしないといけないところだな。
ここも選択肢を用意してくれれば良いのに。
ここも選択肢を用意してくれれば良いのに。
130デフォルトの名無しさん
2022/02/05(土) 10:00:32.68ID:v7hUCDwa 手動でメモリ管理したい人向けの言語に何言ってんだ
131デフォルトの名無しさん
2022/02/05(土) 12:03:26.16ID:N1G1oPSC そうは言っても、メモリ管理したい人って需要少なくない?
今のままでは、C.C++代替以上にはなれない気がする。
今のままでは、C.C++代替以上にはなれない気がする。
132デフォルトの名無しさん
2022/02/05(土) 12:54:51.75ID:Oj0LBzT3 それ以上に何を求めるってんだ
133デフォルトの名無しさん
2022/02/05(土) 13:14:08.46ID:vyyfl1Q+ 言うほどメモリ管理してるか?RAIIとスマポに頼りっきりのくせに
参照カウンタとかもはや実質的に確定的ですらないやん
参照カウンタとかもはや実質的に確定的ですらないやん
134デフォルトの名無しさん
2022/02/05(土) 14:54:37.48ID:WBcMnxrA135デフォルトの名無しさん
2022/02/05(土) 15:02:39.39ID:WBcMnxrA その上でRustは現代的なプログラミングパラダイムが洗練されて採り入れられているため書きやすい
つまりちょっとしたメモリ管理を意識してプログラミングするだけで他より数倍〜十倍速くなることもあるのだから
例えばサーバー経費を何分の1に激減させつつレスポンスも良いという実利的なメリットにも効いてくる
つまりちょっとしたメモリ管理を意識してプログラミングするだけで他より数倍〜十倍速くなることもあるのだから
例えばサーバー経費を何分の1に激減させつつレスポンスも良いという実利的なメリットにも効いてくる
136デフォルトの名無しさん
2022/02/05(土) 17:29:39.72ID:T2gEmbbx137デフォルトの名無しさん
2022/02/05(土) 17:48:34.36ID:WBcMnxrA138デフォルトの名無しさん
2022/02/05(土) 18:36:32.12ID:XET6D0Ck RAIIとGCは対立する概念じゃないがな。C++/CLIで共存できてる。
139デフォルトの名無しさん
2022/02/05(土) 20:00:06.29ID:WBcMnxrA RAII言語は必要があれば言語の枠外でGCライブラリなどを用いてGC利用も可能
その逆にGC言語はRAII利用が不可能
その逆にGC言語はRAII利用が不可能
140デフォルトの名無しさん
2022/02/05(土) 20:40:28.08ID:XET6D0Ck それはRAIIの機能がない言語ではRAIIが使えないと言っているに等しい。
141デフォルトの名無しさん
2022/02/05(土) 21:10:31.12ID:FjY4Ra8B 循環参照もプログラマが自分でWeak<T>使ってなんとかするっていう言語だ
面構えが違う
面構えが違う
142デフォルトの名無しさん
2022/02/07(月) 00:03:08.00ID:VGiKPeyV >>126
で、Rustって駄目ブラウザ以外に何作れんの?お前何作ってんの?内容ゼロで優秀性なんて言い出すウンコのコード見せろよ
で、Rustって駄目ブラウザ以外に何作れんの?お前何作ってんの?内容ゼロで優秀性なんて言い出すウンコのコード見せろよ
143デフォルトの名無しさん
2022/02/07(月) 00:13:06.30ID:fEIDu85e >>142
Deno
Deno
144デフォルトの名無しさん
2022/02/07(月) 02:07:52.70ID:AIR0UfFP 数年前ならいざ知らず未だにRustに実用プロダクトあるのという
煽りは痛い人になっちゃったな
煽りは痛い人になっちゃったな
145デフォルトの名無しさん
2022/02/07(月) 03:24:58.20ID:P1hmcD3J なんかRuby界隈みたいに知識のアップデート止まってる人たち多いね
もうRustなんてそこら中で使われまくってんのに
もうRustなんてそこら中で使われまくってんのに
146デフォルトの名無しさん
2022/02/07(月) 09:18:42.53ID:EcWsuH+Z Rustは低レイヤやライブラリから徐々に侵食していく感じだからなかなか気付かれにくいかもね
Cのライブラリと思ってたら実装はRustに置き換わってた、とかよくある
Cのライブラリと思ってたら実装はRustに置き換わってた、とかよくある
147デフォルトの名無しさん
2022/02/07(月) 12:33:27.96ID:JxckRG42 「よくある」んなら具体例をどうぞ
148デフォルトの名無しさん
2022/02/07(月) 12:54:30.50ID:E3rdzbcC 自分はGNOMEとFirefoxしか知らんな
既存の実装がrustに置き換わるというよりrustで書き直された代替実装が登場してる印象
既存の実装がrustに置き換わるというよりrustで書き直された代替実装が登場してる印象
149デフォルトの名無しさん
2022/02/07(月) 12:56:04.35ID:E3rdzbcC VSCodeの検索にripgrepが使われるようになったのも広義の置き換えとは言えるか?
150デフォルトの名無しさん
2022/02/07(月) 13:02:36.93ID:AIR0UfFP この手の手合はそんなものは下らない一般的じゃないと
言い続けるだけだからなあ
言い続けるだけだからなあ
151デフォルトの名無しさん
2022/02/07(月) 13:48:06.41ID:/AGVY34O curlとかpycaもかな
この手のは最初に入るときはレガシープラットフォーム対応の問題とかで話題になるけど
一度入ってしまうと採用が広がっても特に取り上げられることはないからなぁ
この手のは最初に入るときはレガシープラットフォーム対応の問題とかで話題になるけど
一度入ってしまうと採用が広がっても特に取り上げられることはないからなぁ
152デフォルトの名無しさん
2022/02/07(月) 14:27:21.78ID:Y0LlvzrX pythonのファンシーコンソール風ゲームライブラリであるpyxelの実装がrustで書かれてて、お?ってなったわ
153デフォルトの名無しさん
2022/02/07(月) 15:19:33.56ID:yxxEmbcM その言語で書き直された〜みたいなことが話題になるうちはほぼ広がってないと考えて良いわ。
154デフォルトの名無しさん
2022/02/07(月) 15:43:24.90ID:AIR0UfFP >>153
こうなったらOKというお前の合格ラインは?
こうなったらOKというお前の合格ラインは?
155デフォルトの名無しさん
2022/02/07(月) 17:52:12.40ID:JxckRG42156デフォルトの名無しさん
2022/02/07(月) 18:19:47.49ID:AIR0UfFP157デフォルトの名無しさん
2022/02/07(月) 22:00:41.23ID:E3rdzbcC >>153
スクリプト言語のボトルネック部分をCで書き直さしたなんてよく話題になるからCもマイナー言語ということで良いか?
スクリプト言語のボトルネック部分をCで書き直さしたなんてよく話題になるからCもマイナー言語ということで良いか?
158デフォルトの名無しさん
2022/02/07(月) 22:12:11.68ID:jZIVUuZq Rustは現代的なマルチパラダイムが洗練されて採り入れられているためプログラミングがしやすい
それなのにCやC++のように最高速で動いてくれて快適かつリソースや経費の節減となってくれる
さらにオマケとしてメモリ安全やデータ競合安全などの保証まで付いてくる
それなのにCやC++のように最高速で動いてくれて快適かつリソースや経費の節減となってくれる
さらにオマケとしてメモリ安全やデータ競合安全などの保証まで付いてくる
159デフォルトの名無しさん
2022/02/07(月) 22:14:03.66ID:ybgdxcXS まあまあ他人に期待するのではなく自分で何か書けばいいだけでしょ
今なら車輪の再発明と叩かれることもないだろう
今なら車輪の再発明と叩かれることもないだろう
160デフォルトの名無しさん
2022/02/07(月) 22:42:44.19ID:JxckRG42 「よくある」はずなのダンマリw
161デフォルトの名無しさん
2022/02/08(火) 01:03:57.80ID:v5+/0O15 いうほどランタイム速度を必要とするようなアプリ、どいつもこいつも書いてないってのが現実。
はったりかましたバカはよくいるけど。
はったりかましたバカはよくいるけど。
162デフォルトの名無しさん
2022/02/08(火) 01:36:44.45ID:VTVvKaZV だいたいのアプリはAPI呼び出しの塊だからアプリ自体が実行時間のボトルネックになることはレアかもね
163デフォルトの名無しさん
2022/02/08(火) 10:12:32.37ID:PiQ5+lbT Nimを使って作られたゲームを紹介しよう。
https://goodboygalaxy.com/
ゲームボーイアドバンス向けに作られた2Dアクションゲーム。
https://store.steampowered.com/app/1444480/Turing_Complete/
論理回路を組み立てて自作CPUを作るゲーム。Godotっていうゲームエンジンが使われている。
https://goodboygalaxy.com/
ゲームボーイアドバンス向けに作られた2Dアクションゲーム。
https://store.steampowered.com/app/1444480/Turing_Complete/
論理回路を組み立てて自作CPUを作るゲーム。Godotっていうゲームエンジンが使われている。
164デフォルトの名無しさん
2022/02/09(水) 13:13:49.61ID:6TuSvhfg >>157
そんなこといちいちドやって報告しないって意味だよ。どこぞの言語と違ってな。
そんなこといちいちドやって報告しないって意味だよ。どこぞの言語と違ってな。
165デフォルトの名無しさん
2022/02/09(水) 13:57:31.22ID:vgc3U9wf >>164
へー、リリースノートとかにも載せずにしれっと更新するのが世の中では当たり前なのね
へー、リリースノートとかにも載せずにしれっと更新するのが世の中では当たり前なのね
166デフォルトの名無しさん
2022/02/09(水) 13:58:40.10ID:YiTBO+kR >>164 CからRustに書き直されることはあっても逆は無いから当然だろ
167デフォルトの名無しさん
2022/02/09(水) 21:57:32.65ID:FZ8wgwBk まっ、Cはこれだけ広範囲に使われているからね。基礎教養みたいなもの。
知っていて、使えて当たり前。
Rustでなにか画期的に高速化されるわけでもないし、コーディングの量が圧倒的に減るわけでもない。Pythonのように特定分野で格段の強みがあるわけでもなし。
メモリ安全性といっても、それが課題になってくるほど大きなプロジェクトに関わってるわけでもないしなぁ・・・
組み込み的にはオブジェクト志向な方がハードウェアと馴染みがいいって感じもあるかな。
知っていて、使えて当たり前。
Rustでなにか画期的に高速化されるわけでもないし、コーディングの量が圧倒的に減るわけでもない。Pythonのように特定分野で格段の強みがあるわけでもなし。
メモリ安全性といっても、それが課題になってくるほど大きなプロジェクトに関わってるわけでもないしなぁ・・・
組み込み的にはオブジェクト志向な方がハードウェアと馴染みがいいって感じもあるかな。
168デフォルトの名無しさん
2022/02/09(水) 23:51:15.16ID:Th41z547169デフォルトの名無しさん
2022/02/10(木) 02:47:32.09ID:rtSKPHyc170デフォルトの名無しさん
2022/02/10(木) 08:14:50.21ID:03eq58Oj >>169
相手にしちゃだめ
相手にしちゃだめ
171デフォルトの名無しさん
2022/02/10(木) 12:40:20.38ID:tTxcUdMu デバイスドライバーみたいなソフトウェアだと、linuxのVFSみたいなインターフェイスを意識するのが普通だから
オブジェクト指向や関数ポインタ渡しが普通。
動的に操作方法を変える必要性が大きいものはこういう仕組みは必要になる。
オブジェクト指向や関数ポインタ渡しが普通。
動的に操作方法を変える必要性が大きいものはこういう仕組みは必要になる。
172デフォルトの名無しさん
2022/02/10(木) 12:43:32.46ID:ED4fd292 そういやRustって、コールスタック重視なのになんで所有権移動をデフォルトにしたのかね?
スタックにデータがあるなら、戻ってくるのを想定して借用をデフォルトにした方が効率良い気がするけど。
スタックにデータがあるなら、戻ってくるのを想定して借用をデフォルトにした方が効率良い気がするけど。
173デフォルトの名無しさん
2022/02/10(木) 13:01:13.03ID:UEcyIvoW 値渡し警察「参照渡しは存在しない。あるのは借用<T>の値渡しだけだ」
174デフォルトの名無しさん
2022/02/10(木) 19:06:35.96ID:pZ8EtH2T >>172
そこはRustでは最適化される
例えば大きな構造体 struct Foo { 略 } があったとして
fn main() {
let foo = sub1();
}
fn sub1() -> Foo {
let foo1 = sub2();
return foo1;
}
fn sub2() -> Foo {
let foo2 = Foo { 略 }; // 上述の大きな構造体
return foo2;
}
と多段の関数の深いところから大きな構造体を返すとする
(注: 他言語の人にもわかりやすく敢えて「return」を明記してます)
Rustではこれは最適化されて
深いsub2()の変数foo2の格納場所はmain()のスタックの位置となる
特に今回の場合だと次々に渡していくだけなので
変数foo2のアドレスとfoo1のアドレスとfooのアドレスは一致する
(もちろんこのコードでヒープは一切利用されない)
つまり返り値(の格納場所)をポインタ渡ししているのと同じことになる
C言語ではそれを自分でコードとして記述しなければならないが
Rustでは概念上や記述コード上は「値返し」でシンプルにわかりやすく
実行コードでは最適化されて「返り値の格納場所を参照渡し」になる
もちろん小さな型を返す場合は実行コードも効率よく「値返し」のままである
そこはRustでは最適化される
例えば大きな構造体 struct Foo { 略 } があったとして
fn main() {
let foo = sub1();
}
fn sub1() -> Foo {
let foo1 = sub2();
return foo1;
}
fn sub2() -> Foo {
let foo2 = Foo { 略 }; // 上述の大きな構造体
return foo2;
}
と多段の関数の深いところから大きな構造体を返すとする
(注: 他言語の人にもわかりやすく敢えて「return」を明記してます)
Rustではこれは最適化されて
深いsub2()の変数foo2の格納場所はmain()のスタックの位置となる
特に今回の場合だと次々に渡していくだけなので
変数foo2のアドレスとfoo1のアドレスとfooのアドレスは一致する
(もちろんこのコードでヒープは一切利用されない)
つまり返り値(の格納場所)をポインタ渡ししているのと同じことになる
C言語ではそれを自分でコードとして記述しなければならないが
Rustでは概念上や記述コード上は「値返し」でシンプルにわかりやすく
実行コードでは最適化されて「返り値の格納場所を参照渡し」になる
もちろん小さな型を返す場合は実行コードも効率よく「値返し」のままである
175デフォルトの名無しさん
2022/02/10(木) 19:53:19.62ID:HLYz9uYe >174
いや、RVOの話じゃなくて、
スタックにあるオブジェクトの所有権を関数呼び出し先に移動するのを
デフォルトにした設計的な意図は何なんだろう
という話。
継続を第一級オブジェクトとしてサポートするのでもなければ
サブルーチンはいずれリターンしてくるんだから、スタックに積んだ
オブジェクトも呼び出し先に所有権を移動しないで持ち続けるのが
自然な感じがするんだよね。
それをわざわざ移動してスタックの奥で破棄する(=スタックに残骸が残る)
ようにしたのはなんでかね、と。
いや、RVOの話じゃなくて、
スタックにあるオブジェクトの所有権を関数呼び出し先に移動するのを
デフォルトにした設計的な意図は何なんだろう
という話。
継続を第一級オブジェクトとしてサポートするのでもなければ
サブルーチンはいずれリターンしてくるんだから、スタックに積んだ
オブジェクトも呼び出し先に所有権を移動しないで持ち続けるのが
自然な感じがするんだよね。
それをわざわざ移動してスタックの奥で破棄する(=スタックに残骸が残る)
ようにしたのはなんでかね、と。
176デフォルトの名無しさん
2022/02/10(木) 20:19:32.65ID:rtSKPHyc >>175
ヒープにあるオブジェクトだと deep copy にコストかかるから shallow copy (move) をデフォルトにして
コストかかる処理はソースコード上明確になるようにしたかったからだと思う
ヒープにあるオブジェクトだと deep copy にコストかかるから shallow copy (move) をデフォルトにして
コストかかる処理はソースコード上明確になるようにしたかったからだと思う
177デフォルトの名無しさん
2022/02/10(木) 20:31:58.46ID:HLYz9uYe >176
Rustもなんだかんだ言ってヒープ使用を想定している、ということかね。
それなら所有権移動をデフォルトにした理由は判る。
Rustもなんだかんだ言ってヒープ使用を想定している、ということかね。
それなら所有権移動をデフォルトにした理由は判る。
178デフォルトの名無しさん
2022/02/10(木) 20:36:51.31ID:zC9/cVAd https://www.reddit.com/r/rust/comments/fa9pkp/what_is_the_motivation_behind_default_move/
このスレで作者が答えているけど、すでに参照を示す&が広く使われてるのにデフォルトを借用にすると、moveを示すために「非参照演算子」みたいなものが必要になって整合性が取れないから、とのこと
あとはスタックにどう置いてどうアクセスするかはコンパイラの最適化の問題であって
言語のセマンティクスとは別、みたいな話も
このスレで作者が答えているけど、すでに参照を示す&が広く使われてるのにデフォルトを借用にすると、moveを示すために「非参照演算子」みたいなものが必要になって整合性が取れないから、とのこと
あとはスタックにどう置いてどうアクセスするかはコンパイラの最適化の問題であって
言語のセマンティクスとは別、みたいな話も
179デフォルトの名無しさん
2022/02/10(木) 20:48:03.49ID:pZ8EtH2T >>175
Rustではそんな無駄なことはしていないので大丈夫
まずメソッド定義は以下の3つの方法がある
(1) fn method1(self: Self, 引数)
(2) fn method1(self: &Self, 引数)
(3) fn method1(self: &mut Self, 引数)
Selfは自分の型を示す特別な型であり省略して以下のように略記も可能
(1) fn method1(self, 引数)
(2) fn method1(&self, 引数)
(3) fn method1(&mut self, 引数)
ここで>>175が最初に言っている方法は(1)のケース
参照しか利用しないメソッドなれば(2)のように定義して所有権は移動しない
参照を利用して書き換えるならば(3)のように定義して所有権は移動しない
そして所有権を移動させたいメソッドのみ(1)の定義を用いる
この3つの区別があるためRustでは無駄なことは起きない
Rustではそんな無駄なことはしていないので大丈夫
まずメソッド定義は以下の3つの方法がある
(1) fn method1(self: Self, 引数)
(2) fn method1(self: &Self, 引数)
(3) fn method1(self: &mut Self, 引数)
Selfは自分の型を示す特別な型であり省略して以下のように略記も可能
(1) fn method1(self, 引数)
(2) fn method1(&self, 引数)
(3) fn method1(&mut self, 引数)
ここで>>175が最初に言っている方法は(1)のケース
参照しか利用しないメソッドなれば(2)のように定義して所有権は移動しない
参照を利用して書き換えるならば(3)のように定義して所有権は移動しない
そして所有権を移動させたいメソッドのみ(1)の定義を用いる
この3つの区別があるためRustでは無駄なことは起きない
180デフォルトの名無しさん
2022/02/10(木) 21:34:34.23ID:3aizDYBf >>174
Rustは所有権がはっきりしてるためコンパイラが安全に最適化をガンガン出来る点が良いな
しかもプログラマーはそれを意識せずにRustのセマンティクスだけ把握して書けば後はコンパイラが勝手に最適化してくれる
これがC/C++だと自分で戻り値の場所を確保して自分でポインタを渡していき競合安全性も含めて自分でメモリ管理しなければならない
CG言語だとスタック上はあきらめてヒープで確保して返して後始末はGC任せ
Rustが有利
Rustは所有権がはっきりしてるためコンパイラが安全に最適化をガンガン出来る点が良いな
しかもプログラマーはそれを意識せずにRustのセマンティクスだけ把握して書けば後はコンパイラが勝手に最適化してくれる
これがC/C++だと自分で戻り値の場所を確保して自分でポインタを渡していき競合安全性も含めて自分でメモリ管理しなければならない
CG言語だとスタック上はあきらめてヒープで確保して返して後始末はGC任せ
Rustが有利
181デフォルトの名無しさん
2022/02/10(木) 21:40:15.72ID:3aizDYBf >>178
どちらかに指定が必ず必要なのだから
ライフタイムを管理する必要のある参照の方に&指定する現方法が大正解だな
参照にはsingle writer XOR multi readersのルール義務もあるしな
どちらかに指定が必ず必要なのだから
ライフタイムを管理する必要のある参照の方に&指定する現方法が大正解だな
参照にはsingle writer XOR multi readersのルール義務もあるしな
182デフォルトの名無しさん
2022/02/10(木) 21:50:15.02ID:ZN2u8Rs1 ある程度は既存のメジャー言語と作法を揃えないと、タダでさえヤバい学習曲線がさらにとんでもないことになるしねえ
183デフォルトの名無しさん
2022/02/10(木) 22:07:58.55ID:pZ8EtH2T 可変参照と可変じゃない参照の区別が安全性保証の要になっているため
参照の方に記号を付けるのは理に適っている
いずれにしてもC/C++で安全に書く時はそれら含めて意識せざるをえない
それがRustでは様々な点でかなり楽になっているのだからC/C++より学習が大変ということはない
参照の方に記号を付けるのは理に適っている
いずれにしてもC/C++で安全に書く時はそれら含めて意識せざるをえない
それがRustでは様々な点でかなり楽になっているのだからC/C++より学習が大変ということはない
184デフォルトの名無しさん
2022/02/11(金) 12:06:27.49ID:vAEawTbN185デフォルトの名無しさん
2022/02/11(金) 12:49:33.03ID:MSfgatap186デフォルトの名無しさん
2022/02/11(金) 13:38:34.47ID:vAEawTbN187デフォルトの名無しさん
2022/02/11(金) 13:47:41.99ID:MSfgatap188デフォルトの名無しさん
2022/02/11(金) 14:39:24.16ID:vAEawTbN189デフォルトの名無しさん
2022/02/11(金) 15:19:57.69ID:HTnX1mLl >>187
>ヒープなんか一切用いなくてスタック上しか使わなくても参照返しは必ず起きるしライフタイムの管理が必須となる
これは嘘だろ。実際fortranはヒープ使わないし、変数の寿命なんて問題は考えなくて済む。
そういう意味じゃめっちゃ安全。
>ヒープなんか一切用いなくてスタック上しか使わなくても参照返しは必ず起きるしライフタイムの管理が必須となる
これは嘘だろ。実際fortranはヒープ使わないし、変数の寿命なんて問題は考えなくて済む。
そういう意味じゃめっちゃ安全。
190デフォルトの名無しさん
2022/02/11(金) 16:01:25.44ID:6Qn4bKwU >>188
数値配列の処理や文字列の処理でよく起きますね
例えばイメージしやすい例だと入力文字列から前置文字列と後置文字列に挟まれた文字列を返す関数
// 【input_str】 = 【prefix_str】 + 【output_str】 + 【postfix_str】
fn get_str_between<'a>(input_str: &'a str, prefix_str: &str, postfix_str: &str) -> Option<&'a str> {
let start_index = input_str.find(prefix_str)? + prefix_str.len();
let end_index = input_str[start_index..].find(postfix_str)? + start_index;
Some(&input_str[start_index..end_index])
}
このように引数に複数の参照が来る時に参照を返す場合はライフタイムの明記をします
この例だと関数が返す参照は引数のinput_strのライフタイムと同じですよと伝えることで
この返り値がさらにどこか別の関数で使われたりあるいは構造体に格納されたりしても出自がわかり安全なわけです
ちなみに文字列処理はヒープエリアを一切使わなくても
スタック上の配列(ex. ArrayString)やstaticエリアだけでも完結できますからその突っ込みは無しでよろしくw
数値配列の処理や文字列の処理でよく起きますね
例えばイメージしやすい例だと入力文字列から前置文字列と後置文字列に挟まれた文字列を返す関数
// 【input_str】 = 【prefix_str】 + 【output_str】 + 【postfix_str】
fn get_str_between<'a>(input_str: &'a str, prefix_str: &str, postfix_str: &str) -> Option<&'a str> {
let start_index = input_str.find(prefix_str)? + prefix_str.len();
let end_index = input_str[start_index..].find(postfix_str)? + start_index;
Some(&input_str[start_index..end_index])
}
このように引数に複数の参照が来る時に参照を返す場合はライフタイムの明記をします
この例だと関数が返す参照は引数のinput_strのライフタイムと同じですよと伝えることで
この返り値がさらにどこか別の関数で使われたりあるいは構造体に格納されたりしても出自がわかり安全なわけです
ちなみに文字列処理はヒープエリアを一切使わなくても
スタック上の配列(ex. ArrayString)やstaticエリアだけでも完結できますからその突っ込みは無しでよろしくw
191デフォルトの名無しさん
2022/02/11(金) 17:17:31.83ID:vAEawTbN192デフォルトの名無しさん
2022/02/11(金) 18:27:07.40ID:6Qn4bKwU >>191
そこはRust限定の話ではなく一般的な話だと思う
参照というのはあくまでも実体があってこそ生きていられる存在
だから実体を保有する変数がどこかに必ず存在していて
その実体が参照よりも長生きしていないとダングリングポインタになってしまう
(ここからはRustの話)
したがって実体の方を本体として無記号にし
それに依存している存在にすぎない参照の方を&記号で示している
そこはRust限定の話ではなく一般的な話だと思う
参照というのはあくまでも実体があってこそ生きていられる存在
だから実体を保有する変数がどこかに必ず存在していて
その実体が参照よりも長生きしていないとダングリングポインタになってしまう
(ここからはRustの話)
したがって実体の方を本体として無記号にし
それに依存している存在にすぎない参照の方を&記号で示している
193デフォルトの名無しさん
2022/02/11(金) 23:20:00.56ID:3T2kJORw >>189
すべての関数呼び出しが末尾再帰であれば、呼び出しにあたって現在のスタックフレームを保存する必要はないから、中途半端な
手続き言語で分かった風に語りだす人は、どこかおかしい。コンピューターサイエンスとか齧ったことは無さそう。Rustをやってる人の
こういう語りは言語の発展の邪魔でしかないね
すべての関数呼び出しが末尾再帰であれば、呼び出しにあたって現在のスタックフレームを保存する必要はないから、中途半端な
手続き言語で分かった風に語りだす人は、どこかおかしい。コンピューターサイエンスとか齧ったことは無さそう。Rustをやってる人の
こういう語りは言語の発展の邪魔でしかないね
194デフォルトの名無しさん
2022/02/11(金) 23:30:45.78ID:6Qn4bKwU195デフォルトの名無しさん
2022/02/12(土) 01:31:10.49ID:/iL1/Dd6 Go言語の作者Rob Pike氏が2015年に発表した「Go言語が成功した理由は何なのか?」で
> mapやfilterのような機能は言語の表現力を高めるものであり、 書いていて楽しい言語 に繋がるわけだが、
> これはそのトレードオフとなるメンテナンス性が高く扱いやすい言語という点をを犠牲にするだけでなく、
> (極めて素晴らしい方法で実装しない限り)コンピューターリソースを非常に消費するものだ。
と述べていて当時はその通りに思われてGoでは毎回for文で書くことがシンプルで良いとされてきた
しかしその後Rustのイテレータ実装ではfor文とほぼ同様に速く動かせるようになり
for文で毎回ごちゃごちゃ書くよりメンテナンス性もよく扱いやすいとわかった
> mapやfilterのような機能は言語の表現力を高めるものであり、 書いていて楽しい言語 に繋がるわけだが、
> これはそのトレードオフとなるメンテナンス性が高く扱いやすい言語という点をを犠牲にするだけでなく、
> (極めて素晴らしい方法で実装しない限り)コンピューターリソースを非常に消費するものだ。
と述べていて当時はその通りに思われてGoでは毎回for文で書くことがシンプルで良いとされてきた
しかしその後Rustのイテレータ実装ではfor文とほぼ同様に速く動かせるようになり
for文で毎回ごちゃごちゃ書くよりメンテナンス性もよく扱いやすいとわかった
196デフォルトの名無しさん
2022/02/12(土) 02:24:04.92ID:j7aiOjD7 Rust創造イテレータおじさん。。。
197デフォルトの名無しさん
2022/02/12(土) 02:36:04.74ID:/tMtoFMY どうみても言語の否定じゃなく、どうでも良いようなことを延々と語りだすそいつの思考の人格・性格的否定だろうに。
こんな読解力も何もない奴ばっかか・・・
こんな読解力も何もない奴ばっかか・・・
198デフォルトの名無しさん
2022/02/12(土) 14:28:17.06ID:772ADf0k >>195
Rust開発者は天才だから仕方ない
Rust開発者は天才だから仕方ない
199デフォルトの名無しさん
2022/02/12(土) 16:13:21.86ID:zOhO24og 所有権という概念を生み出したrustの人(名前わすれた)は天才だよ
効率性と安全性を同時に実現してる
これを関数型言語の人が生み出せなかったのは謎すぎる
効率性と安全性を同時に実現してる
これを関数型言語の人が生み出せなかったのは謎すぎる
200デフォルトの名無しさん
2022/02/12(土) 16:49:53.94ID:8ted8XK+ Ruby にはLazy があるから、無限配列でも、iterate できる
実行順序を変える。
書いた通りに前から実行しない
実行順序を変える。
書いた通りに前から実行しない
201デフォルトの名無しさん
2022/02/12(土) 17:46:20.26ID:Fke1BltY 所有権というかRAIIパターンはC++の方が先でlifetimeの方が独創性あると思う
202デフォルトの名無しさん
2022/02/12(土) 18:09:28.52ID:/iL1/Dd6 ライフタイムによって本体だけでなくその参照の正当性まで保証できるようになったわけだ
>>200
Rustのイテレータは受動的に遅延生成だから無限生成もできるけど
勝手に実行順序を変えるようなことはなくプログラマーが書いた通り
>>200
Rustのイテレータは受動的に遅延生成だから無限生成もできるけど
勝手に実行順序を変えるようなことはなくプログラマーが書いた通り
203デフォルトの名無しさん
2022/02/12(土) 18:33:27.41ID:zd9UI5Og >>199
あいつら本当はラムダ計算をしたいのに実現出来なくて仕方なくチューリングマシン考えてる妥協の民だからそんな発想なさそうw
あいつら本当はラムダ計算をしたいのに実現出来なくて仕方なくチューリングマシン考えてる妥協の民だからそんな発想なさそうw
204デフォルトの名無しさん
2022/02/12(土) 18:34:57.60ID:gzu2Ubp4 >>199
関数型言語は同一データの共有が極めて多く発生するため、GCなしの実装は実用的ではない
参照透過な言語ならメモリの共有さえしなければいいわけでGCなしの実装は極めて容易だけど、無限のメモリを必要とする
関数型言語は同一データの共有が極めて多く発生するため、GCなしの実装は実用的ではない
参照透過な言語ならメモリの共有さえしなければいいわけでGCなしの実装は極めて容易だけど、無限のメモリを必要とする
205デフォルトの名無しさん
2022/02/12(土) 19:00:19.19ID:gHUJ4QZw 関数型はGCが問題になるような途中過程の実行タイミングのシビアな用途に使われないからってのも大きな理由だと思う
性能面で言えば、ガベージの数が命令形に比べて桁違いに多いからいちいち参照カウントとかやってたらクソ非効率だろうし
性能面で言えば、ガベージの数が命令形に比べて桁違いに多いからいちいち参照カウントとかやってたらクソ非効率だろうし
206デフォルトの名無しさん
2022/02/12(土) 19:37:20.77ID:8ted8XK+ Ruby で普通の繰り返しは、a が無限要素だと、aで止まる
a.b.c
つまり、aの要素数ループ、bの要素数ループ、cの要素数ループの順番
それが、Lazy では、実行順序が変わって、
aの1つ目の要素、bの1つ目の要素、cの1つ目の要素
aの2つ目の要素、bの2つ目の要素、cの2つ目の要素
となる
つまり、aが3要素とすると、a1a2a3・b1b2b3・c1c2c3 が、
a1b1c1・a2b2c2・a3b3c3 に変わる
a.b.c
つまり、aの要素数ループ、bの要素数ループ、cの要素数ループの順番
それが、Lazy では、実行順序が変わって、
aの1つ目の要素、bの1つ目の要素、cの1つ目の要素
aの2つ目の要素、bの2つ目の要素、cの2つ目の要素
となる
つまり、aが3要素とすると、a1a2a3・b1b2b3・c1c2c3 が、
a1b1c1・a2b2c2・a3b3c3 に変わる
207デフォルトの名無しさん
2022/02/12(土) 21:05:09.08ID:y1lBAL19208デフォルトの名無しさん
2022/02/12(土) 23:41:53.37ID:UjqaVtZ/ 我慢して書いてみるって発想は
ルールを守るよりも抜け道を探してそうなハッカーの発想とは対照的だね
ルールを守るよりも抜け道を探してそうなハッカーの発想とは対照的だね
209デフォルトの名無しさん
2022/02/12(土) 23:51:27.76ID:x20bdFcp >>206
当たり前のことを書いてるだけじゃん
Rubyではlazy導入で遅延処理となり必要最小限だけをようやく処理できるようになったけど
例えばRustでは最初からそのlazyになっている
だからイテレータを連鎖した時に途中に毎回の無駄な一時配列が生成されることもない
それゆえRustではガベージが途中で生じずスタック領域のみ使用で連鎖でき軽くて速い
当たり前のことを書いてるだけじゃん
Rubyではlazy導入で遅延処理となり必要最小限だけをようやく処理できるようになったけど
例えばRustでは最初からそのlazyになっている
だからイテレータを連鎖した時に途中に毎回の無駄な一時配列が生成されることもない
それゆえRustではガベージが途中で生じずスタック領域のみ使用で連鎖でき軽くて速い
210デフォルトの名無しさん
2022/02/13(日) 03:57:54.17ID:BBswpWkz array::mapは複製が生じるだろ、普通はarr.map(...).map(...)は使わないにしてもlazyだから無駄な一時配列が
生成されることもないとか言い過ぎだ。ちゃんとドキュメント読んでんのか?そもそも一時的な集合要素が必要に
なるのはアルゴリズム次第であり、”理解してないのに”信じてしまう事は愚かすぎる
生成されることもないとか言い過ぎだ。ちゃんとドキュメント読んでんのか?そもそも一時的な集合要素が必要に
なるのはアルゴリズム次第であり、”理解してないのに”信じてしまう事は愚かすぎる
211デフォルトの名無しさん
2022/02/13(日) 04:07:23.70ID:8v/TbvES >>210
array::mapはイテレータじゃないよ
array::mapはイテレータじゃないよ
212デフォルトの名無しさん
2022/02/13(日) 04:15:35.21ID:BBswpWkz だから複製生じるでしょ
213デフォルトの名無しさん
2022/02/13(日) 04:24:59.24ID:8v/TbvES array::mapで複製は生じるけどイテレータがlazyか否かの議論には何も関係ないよね
mapはOption::mapなどと同じでイテレータとは関係なくコレクションやコンテナの中身を写像する関数であって、イテレータにも同様の意味を持つ関数が用意されているというだけ
>>209 のイテレータだから無駄なものは作られないは言い過ぎで反例はありそうに自分も思うけど、イテレータじゃないものを持ち出すのは例として適切ではない
イテレータそのもののせいではないが borrow checker のせいで余計なアロケーションが必要になる場合はある
以下の記事の最後の方のコード例なんかが一例
https://fasterthanli.me/series/making-our-own-executable-packer/part-6
mapはOption::mapなどと同じでイテレータとは関係なくコレクションやコンテナの中身を写像する関数であって、イテレータにも同様の意味を持つ関数が用意されているというだけ
>>209 のイテレータだから無駄なものは作られないは言い過ぎで反例はありそうに自分も思うけど、イテレータじゃないものを持ち出すのは例として適切ではない
イテレータそのもののせいではないが borrow checker のせいで余計なアロケーションが必要になる場合はある
以下の記事の最後の方のコード例なんかが一例
https://fasterthanli.me/series/making-our-own-executable-packer/part-6
214デフォルトの名無しさん
2022/02/13(日) 04:25:50.19ID:OAT58Vuo >>210
array::mapはイテレーターではありません
配列から配列への単なる変換です
| pub fn map<F, U>(self, f: F) -> [U; N] where F: FnMut(T) -> U
arrayでのこの定義を見ればイテレーターではなく返り値の型が配列だとわかるはずです
ちゃんとドキュメントを読みましょう
イテレーターを使えば以下のような例において
Rustでは無駄な一時配列が生成されることはありません
[6, 4, 7, 3, 5, 9, 2, 1, 8]
.iter()
.map(|n| n * n * n)
.filter(|n| n > &300)
.for_each(|n| println!("{n}"))
array::mapはイテレーターではありません
配列から配列への単なる変換です
| pub fn map<F, U>(self, f: F) -> [U; N] where F: FnMut(T) -> U
arrayでのこの定義を見ればイテレーターではなく返り値の型が配列だとわかるはずです
ちゃんとドキュメントを読みましょう
イテレーターを使えば以下のような例において
Rustでは無駄な一時配列が生成されることはありません
[6, 4, 7, 3, 5, 9, 2, 1, 8]
.iter()
.map(|n| n * n * n)
.filter(|n| n > &300)
.for_each(|n| println!("{n}"))
215デフォルトの名無しさん
2022/02/13(日) 04:39:02.47ID:8v/TbvES <[T ; N] as Iterator>::map() のドキュメントを参照してlazyなことの裏取りをしようとしたら array::map() にたどり着いちゃったのかな
だとしたら rustdoc が分かりづらいのが悪い
だとしたら rustdoc が分かりづらいのが悪い
216デフォルトの名無しさん
2022/02/13(日) 04:44:32.73ID:8v/TbvES <[T; N] as Iterator> なんて存在しなかった
正しくは
<<[T; N] as IntoIterator>::IntoIter as Iterator>::map
または
<std::slice::Iter as Iterator>::map
だった
こんなの初学者わかんないよね
正しくは
<<[T; N] as IntoIterator>::IntoIter as Iterator>::map
または
<std::slice::Iter as Iterator>::map
だった
こんなの初学者わかんないよね
217デフォルトの名無しさん
2022/02/13(日) 04:50:04.12ID:OAT58Vuo >>213
イテレーター連鎖の途中で「無駄な一時配列が生成されない」は常に正しいです
ただし「そのイテレーターの機能として必要不可欠な無駄ではない」一時配列(Vec)を利用するイテレーターは存在します
いずれにせよ無駄な一時配列が生成されることはありません
イテレーター連鎖の途中で「無駄な一時配列が生成されない」は常に正しいです
ただし「そのイテレーターの機能として必要不可欠な無駄ではない」一時配列(Vec)を利用するイテレーターは存在します
いずれにせよ無駄な一時配列が生成されることはありません
218デフォルトの名無しさん
2022/02/13(日) 05:06:50.08ID:OAT58Vuo >>213
そのリンク先の記事を読ませていただきましたが
借用ルール(single writer xor multiple readers)違反が原因でその回避のため途中collect()しているだけでした
具体的には&self.objectsで借用中なのに&mut selfと定義されているself.get_object()を呼び出しています
したがって今回の問題とは無関係ですね
そのリンク先の記事を読ませていただきましたが
借用ルール(single writer xor multiple readers)違反が原因でその回避のため途中collect()しているだけでした
具体的には&self.objectsで借用中なのに&mut selfと定義されているself.get_object()を呼び出しています
したがって今回の問題とは無関係ですね
219デフォルトの名無しさん
2022/02/13(日) 05:14:01.48ID:8v/TbvES220デフォルトの名無しさん
2022/02/13(日) 05:43:50.33ID:OAT58Vuo >>219
Rustの配列(array)はスタック上に置けるようコンパイル時サイズ固定なのはご存知ですよね
したがってイテレーターがもし一時配列を吐くもしくは使おうとすると必然的にサイズ可変のVec利用となりヒープを使うことになってしまいます
ところがRustの標準ライブラリのイテレーターは core::iter::Iterator すなわちcore::はヒープが無い環境でも動作可能を意味します
つまり『Rustの標準ライブラリのイテレーターは一時配列(Vec)を絶対に使わない』ように設計されているのです
一方で外部のライブラリにおいてはデータが全て完全に揃わないと動作できない機能を持つイテレーターの場合に「必要不可欠な無駄ではない一時配列(Vec)」を用いるケースがあります
Rustの配列(array)はスタック上に置けるようコンパイル時サイズ固定なのはご存知ですよね
したがってイテレーターがもし一時配列を吐くもしくは使おうとすると必然的にサイズ可変のVec利用となりヒープを使うことになってしまいます
ところがRustの標準ライブラリのイテレーターは core::iter::Iterator すなわちcore::はヒープが無い環境でも動作可能を意味します
つまり『Rustの標準ライブラリのイテレーターは一時配列(Vec)を絶対に使わない』ように設計されているのです
一方で外部のライブラリにおいてはデータが全て完全に揃わないと動作できない機能を持つイテレーターの場合に「必要不可欠な無駄ではない一時配列(Vec)」を用いるケースがあります
221デフォルトの名無しさん
2022/02/13(日) 15:42:54.09ID:BBswpWkz で、複製されますよね?
222デフォルトの名無しさん
2022/02/13(日) 15:59:57.41ID:qi1oHAf6 上で出ていたこれなら配列は複製されない
Rustはそんな無駄なことはしない
>>214
> [6, 4, 7, 3, 5, 9, 2, 1, 8]
> .iter()
> .map(|n| n * n * n)
> .filter(|n| n > &300)
> .for_each(|n| println!("{n}"))
Rustはそんな無駄なことはしない
>>214
> [6, 4, 7, 3, 5, 9, 2, 1, 8]
> .iter()
> .map(|n| n * n * n)
> .filter(|n| n > &300)
> .for_each(|n| println!("{n}"))
223デフォルトの名無しさん
2022/02/13(日) 16:43:01.35ID:BBswpWkz そのように書くのはあなたであって"Rustだから"というのは明らかな間違いです。無駄な事をしているのはあなたであってRustではありません
224デフォルトの名無しさん
2022/02/14(月) 23:03:20.89ID:T9mSH3bb Rustのイテレータは他と機能も同じ以上なのにプログラミング言語最速
さらにヒープを使わずOSもないベアメタル環境でも動作可
さらにヒープを使わずOSもないベアメタル環境でも動作可
225デフォルトの名無しさん
2022/02/15(火) 17:26:38.96ID:urEpWN+O 実装言語を「Go」から「Rust」に変更、ゲーマー向けチャットアプリ「Discord」
https://atmarkit.itmedia.co.jp/ait/articles/2002/10/news038.html
https://atmarkit.itmedia.co.jp/ait/articles/2002/10/news038.html
226デフォルトの名無しさん
2022/02/15(火) 18:02:19.14ID:OW1Pu+wt >>225
次世代言語スレで2年も前のリンク持ってこられても、、、
次世代言語スレで2年も前のリンク持ってこられても、、、
227デフォルトの名無しさん
2022/02/15(火) 18:08:55.40ID:4VdexSIH 2020年の記事なんですけど
2020年が2年前な訳が無いんですけど
2020年が2年前な訳が無いんですけど
228デフォルトの名無しさん
2022/02/15(火) 18:42:09.32ID:Yj0CO5uO えっ
229デフォルトの名無しさん
2022/02/15(火) 19:15:57.25ID:qxt1mofg 2022年だぜ?
230デフォルトの名無しさん
2022/02/15(火) 19:37:22.66ID:Q8iyUbNY 時の流れが加速している
231デフォルトの名無しさん
2022/02/15(火) 19:44:03.28ID:s9A1ir2/ Rustは言語仕様が汚くライブラリもいまいちなので
同じような概念できれいな文法の言語が欲しい
同じような概念できれいな文法の言語が欲しい
232デフォルトの名無しさん
2022/02/15(火) 20:04:30.75ID:RIp/liSi233デフォルトの名無しさん
2022/02/15(火) 20:39:28.00ID:s9A1ir2/234デフォルトの名無しさん
2022/02/15(火) 21:08:36.63ID:RIp/liSi レスサンクス
参考になりました(*´∀`*)
参考になりました(*´∀`*)
235デフォルトの名無しさん
2022/02/15(火) 21:46:44.86ID:JEGPyefo >>233
Cが好きならZigとか良さそうだけどどうなの?
Cが好きならZigとか良さそうだけどどうなの?
236デフォルトの名無しさん
2022/02/15(火) 22:19:13.70ID:s9A1ir2/237デフォルトの名無しさん
2022/02/15(火) 22:22:48.94ID:57mqcwZM >>231
Rustは言語仕様が洗練されていて綺麗なので気に入った
Option / Result に ? や
match / if let / while let あたり
諸悪の根源の null / nil / undefined などが無くなり清らかになった
Rustは言語仕様が洗練されていて綺麗なので気に入った
Option / Result に ? や
match / if let / while let あたり
諸悪の根源の null / nil / undefined などが無くなり清らかになった
238デフォルトの名無しさん
2022/02/15(火) 22:24:45.32ID:s9A1ir2/ mutable を mutと書くのがダサく感じる
239デフォルトの名無しさん
2022/02/15(火) 22:46:47.98ID:fKsGsq6R >>225
それ昔話題になっただろ
それ昔話題になっただろ
240デフォルトの名無しさん
2022/02/15(火) 23:21:29.87ID:tssMbTRA >>227
今年って西暦何年?
今年って西暦何年?
241デフォルトの名無しさん
2022/02/15(火) 23:21:53.24ID:57mqcwZM242デフォルトの名無しさん
2022/02/16(水) 13:58:05.68ID:z1zaWa7r >>237
ここのResult 型の説明で出てくるソースが理解しにくく非常に気持ち悪く汚く見えてしまいます
https://zenn.dev/mebiusbox/books/22d4c1ed9b0003/viewer/bba4b4
これを説明なしでソースだけでパッと流れがわかるなら優秀な人だと思います
ここのResult 型の説明で出てくるソースが理解しにくく非常に気持ち悪く汚く見えてしまいます
https://zenn.dev/mebiusbox/books/22d4c1ed9b0003/viewer/bba4b4
これを説明なしでソースだけでパッと流れがわかるなら優秀な人だと思います
243デフォルトの名無しさん
2022/02/16(水) 14:26:20.55ID:ntLj+IC3244デフォルトの名無しさん
2022/02/16(水) 14:54:32.66ID:3pG+9+g8 オッサンの時間の流れは早すぎて、もう2022年になったとは思えない
っていうジョークだろう
もうどうでもいいよ
っていうジョークだろう
もうどうでもいいよ
245デフォルトの名無しさん
2022/02/16(水) 16:41:34.23ID:oWbPDf/g >>242
むしろResult型は美しく大元は数学の圏論のモナドから来ている
HaskellのMaybeモナド = ScalaのOption = RustのOption = 有か無かの二択
HaskellのEitherモナド = ScalaのEither = RustのResult = AかBかの二択
そしてRustではOptionもResultも値格納付きenum(=タグ付きunion)で表現している
RustのResultもEitherと同じくAまたはBの二択にも使えるが
9割以上の使用方法では特に Aを正常値 Bを異常値(エラー値) として用いる
そのため enum型である Result<T,E> は タグOk(T) と タグErr(E) で構成されている
ここで Tは正常値の型T を示し Eはエラー値の型E を示している
つまり Result<T,E> は2つの型を合成して1つの新たな型として扱うことが出来る
これにより様々なエラー処理が非常に簡単となり各演算(and, or, 変換(map), default値)や
Resultを要素とするイテレータの各演算(map, filter, fold, collect)の各Result版を統一的に扱える
単純にエラー時に上位へエラーを伝播させる場合もRustでは単純となる
例えばGo言語では正常値valとエラー値errの多値で返し以下のようになる
val, err := func()
if err != nil {
return err
}
Rustでは以下の「?」オペレータ1文字追加でよい
let val = func()?;
ここでfunc()はResultを返しておりそれがエラー値Err(err)の時はその値で即return
そして正常値Ok(val)の時の処理のみに記述コードを専念できる
むしろResult型は美しく大元は数学の圏論のモナドから来ている
HaskellのMaybeモナド = ScalaのOption = RustのOption = 有か無かの二択
HaskellのEitherモナド = ScalaのEither = RustのResult = AかBかの二択
そしてRustではOptionもResultも値格納付きenum(=タグ付きunion)で表現している
RustのResultもEitherと同じくAまたはBの二択にも使えるが
9割以上の使用方法では特に Aを正常値 Bを異常値(エラー値) として用いる
そのため enum型である Result<T,E> は タグOk(T) と タグErr(E) で構成されている
ここで Tは正常値の型T を示し Eはエラー値の型E を示している
つまり Result<T,E> は2つの型を合成して1つの新たな型として扱うことが出来る
これにより様々なエラー処理が非常に簡単となり各演算(and, or, 変換(map), default値)や
Resultを要素とするイテレータの各演算(map, filter, fold, collect)の各Result版を統一的に扱える
単純にエラー時に上位へエラーを伝播させる場合もRustでは単純となる
例えばGo言語では正常値valとエラー値errの多値で返し以下のようになる
val, err := func()
if err != nil {
return err
}
Rustでは以下の「?」オペレータ1文字追加でよい
let val = func()?;
ここでfunc()はResultを返しておりそれがエラー値Err(err)の時はその値で即return
そして正常値Ok(val)の時の処理のみに記述コードを専念できる
246デフォルトの名無しさん
2022/02/16(水) 18:27:24.16ID:UmvV858q >>245
そういうレベルの話じゃなくて単にパターンマッチの構文が見慣れないから読みづらいってだけだと思うよ
やってることはファイルをopenしてみて、失敗したらファイルを作成するってだけで何も難しいことはしていないので
そういうレベルの話じゃなくて単にパターンマッチの構文が見慣れないから読みづらいってだけだと思うよ
やってることはファイルをopenしてみて、失敗したらファイルを作成するってだけで何も難しいことはしていないので
247デフォルトの名無しさん
2022/02/16(水) 18:59:25.56ID:3pG+9+g8 モダンな言語ならパターンマッチ構文とか当たり前だし、慣れるべきとしか思わんよな
248デフォルトの名無しさん
2022/02/16(水) 19:05:31.46ID:9J2Avx3b んなことはない
switchの中にswitch入れてる不気味なケースと同じで理解の妨げとバグの温床になっている
switchの中にswitch入れてる不気味なケースと同じで理解の妨げとバグの温床になっている
249デフォルトの名無しさん
2022/02/16(水) 19:06:54.11ID:9J2Avx3b そのうちmatchの中にmatch入れるな見たいなルールが出来て
それが当たり前になるw
それが当たり前になるw
250デフォルトの名無しさん
2022/02/16(水) 19:08:51.82ID:9J2Avx3b > Err(ref error) if error.kind() == ErrorKind::NotFound => {
ここが
Err(ref error.kind() == ErrorKind::NotFound) => {
こうなっていない時点でrustは汚い
ここが
Err(ref error.kind() == ErrorKind::NotFound) => {
こうなっていない時点でrustは汚い
251デフォルトの名無しさん
2022/02/16(水) 19:24:55.51ID:9J2Avx3b そもそもがさあ
他の言語のライブラリにあるファイルオープン時に指定したファイルがなければ作って開いてくれるようなオプションないのか?
他の言語のライブラリにあるファイルオープン時に指定したファイルがなければ作って開いてくれるようなオプションないのか?
252デフォルトの名無しさん
2022/02/16(水) 19:38:23.34ID:J05fEVeY253デフォルトの名無しさん
2022/02/16(水) 19:40:31.24ID:9J2Avx3b C#とかだと複数のプロパティ値を使ったマッチングも当たり前にやっている
254デフォルトの名無しさん
2022/02/16(水) 20:09:46.22ID:4BNkCNLv >>250
Errはenum Resultのタグだからそれは理解が間違っている
>>251
無くても必要なら一瞬で書けるから困らない
例えば関数にするならこのようになる
fn open_or_create(path: impl AsRef<Path>) -> io::Result<File> {
File::open(&path)
.or_else(|err|
if err.kind() == ErrorKind::NotFound {
File::create(path)
} else {
Err(err)
}
)
}
このようにorを使う方が見やすく分かりやすい
matchでOk(x) => x, となったらorと覚えればよい
Errはenum Resultのタグだからそれは理解が間違っている
>>251
無くても必要なら一瞬で書けるから困らない
例えば関数にするならこのようになる
fn open_or_create(path: impl AsRef<Path>) -> io::Result<File> {
File::open(&path)
.or_else(|err|
if err.kind() == ErrorKind::NotFound {
File::create(path)
} else {
Err(err)
}
)
}
このようにorを使う方が見やすく分かりやすい
matchでOk(x) => x, となったらorと覚えればよい
255デフォルトの名無しさん
2022/02/16(水) 20:25:14.55ID:9J2Avx3b なにかミスってない?
256デフォルトの名無しさん
2022/02/16(水) 20:58:53.96ID:bx/iMnwF C#はここ十年さわってないので分からんけど
> Err(ref error.kind() == ErrorKind::NotFound) => {
みたいに書けるってこと?
そもそもC#にパターンマッチなんかあったやろか?
switchがせいぜいあるだけでは?
あと型もletでdestructできるやつじゃなくて
せいぜい (変数 is 型) でシコシコ調べていくだけでは?
> Err(ref error.kind() == ErrorKind::NotFound) => {
みたいに書けるってこと?
そもそもC#にパターンマッチなんかあったやろか?
switchがせいぜいあるだけでは?
あと型もletでdestructできるやつじゃなくて
せいぜい (変数 is 型) でシコシコ調べていくだけでは?
257デフォルトの名無しさん
2022/02/16(水) 21:00:56.89ID:UmvV858q >>250 のkind() は構造体のフィールドとのマッチじゃなくてメソッドの戻り値との比較だから
パターンとして取り扱えるようになるべきではないと思う
構造体のフィールドなら普通にパターンマッチできるよ
パターンとして取り扱えるようになるべきではないと思う
構造体のフィールドなら普通にパターンマッチできるよ
258デフォルトの名無しさん
2022/02/16(水) 21:07:22.97ID:UmvV858q259デフォルトの名無しさん
2022/02/16(水) 21:19:06.45ID:9J2Avx3b 見返してみると
Err(ref error.kind() == ErrorKind::NotFound)ではなく
Err( ErrorKind::NotFound)
とかけたほうがいいなと
Err(ref error.kind() == ErrorKind::NotFound)ではなく
Err( ErrorKind::NotFound)
とかけたほうがいいなと
260デフォルトの名無しさん
2022/02/16(水) 21:25:48.26ID:9J2Avx3b 上のソースは海外の有名なサイト???からほぼ丸パクリなんだな
そっちも突っ込みどころ満載のソースなんだけどパクったほうはさらにおかしくなってる
変なところだらけ
これとか
let f = File::open("hello.txt");
let f = match f {
それに引き続いたこれ
match File::create("hello.txt") {
そして
Err(e) => panic!("Tried to create file but there was a problem: {:?}", e),
と
これ
Err(error) => {
panic!("There was a problem opening the file: {:?}", error)
},
そっちも突っ込みどころ満載のソースなんだけどパクったほうはさらにおかしくなってる
変なところだらけ
これとか
let f = File::open("hello.txt");
let f = match f {
それに引き続いたこれ
match File::create("hello.txt") {
そして
Err(e) => panic!("Tried to create file but there was a problem: {:?}", e),
と
これ
Err(error) => {
panic!("There was a problem opening the file: {:?}", error)
},
261デフォルトの名無しさん
2022/02/16(水) 21:30:10.73ID:9J2Avx3b262デフォルトの名無しさん
2022/02/16(水) 21:41:12.68ID:oWbPDf/g >>253
Rustでも複数マッチングは当然できる
例えばorの概念
let v = match (p, q) {
(true, _) => "前者",
(_, true) => "後者",
(_, _) => "失敗",
};
>>255
matchをorで書き換えなら254で合ってる
目的達成だけならoptionsを使う258で合ってる
>>259
そういう単純なエラー型を自分で設計して使うならそれでOK
今回は std::io が返すエラーだから Err(struct io::Error { ...(フィールド非公開) }) となる
つまり Err(err) で受けて err.kind() で種別を取り出すことになる
なぜこうなっているのかは理由があるのでソース std/io/error.rs を読むべし
Rustでも複数マッチングは当然できる
例えばorの概念
let v = match (p, q) {
(true, _) => "前者",
(_, true) => "後者",
(_, _) => "失敗",
};
>>255
matchをorで書き換えなら254で合ってる
目的達成だけならoptionsを使う258で合ってる
>>259
そういう単純なエラー型を自分で設計して使うならそれでOK
今回は std::io が返すエラーだから Err(struct io::Error { ...(フィールド非公開) }) となる
つまり Err(err) で受けて err.kind() で種別を取り出すことになる
なぜこうなっているのかは理由があるのでソース std/io/error.rs を読むべし
263デフォルトの名無しさん
2022/02/16(水) 21:51:01.16ID:4BNkCNLv264デフォルトの名無しさん
2022/02/16(水) 23:07:11.77ID:9J2Avx3b 視点がずれてる
変なところが多い=美しくないと言ってるんだけど
意味のあるシャドーイングならわかる
変数使って受けてるのに次ではmatchダイレクト
panicを一行で書いたりブロックをつけて書いたりちぐはぐ
書いた奴は馬鹿なんだろう
変なところが多い=美しくないと言ってるんだけど
意味のあるシャドーイングならわかる
変数使って受けてるのに次ではmatchダイレクト
panicを一行で書いたりブロックをつけて書いたりちぐはぐ
書いた奴は馬鹿なんだろう
265デフォルトの名無しさん
2022/02/16(水) 23:09:17.43ID:9J2Avx3b クソど素人にこれだけ書かれるのは馬鹿なんだろうしそれも理解できないのはどうなんだ?
266デフォルトの名無しさん
2022/02/16(水) 23:12:09.22ID:4BNkCNLv 批判だけならバカでもできる
具体的な代案を出せるかどうかが全て
これはどの世界でも同じ
具体的な代案を出せるかどうかが全て
これはどの世界でも同じ
267デフォルトの名無しさん
2022/02/16(水) 23:14:11.42ID:9J2Avx3b いやいや
何を例としてるか全然わかってなかったろ?
具体的に書かれて初めてわかったろ?
そういうところだよ
汚いソースすらわからないんだろ?
何を例としてるか全然わかってなかったろ?
具体的に書かれて初めてわかったろ?
そういうところだよ
汚いソースすらわからないんだろ?
268デフォルトの名無しさん
2022/02/16(水) 23:18:14.63ID:9J2Avx3b rust入門サイトにこんなクソみたいなコード乗せるな
Rustの品格が下がる
Rustの品格が下がる
269デフォルトの名無しさん
2022/02/16(水) 23:18:35.44ID:4BNkCNLv270デフォルトの名無しさん
2022/02/17(木) 01:06:25.84ID:se607RqK rustが汚いって話からサンプルコードが汚いって話にすり替わってるな
271デフォルトの名無しさん
2022/02/17(木) 08:14:31.32ID:eL25V27g272デフォルトの名無しさん
2022/02/17(木) 08:14:54.96ID:2OHfN1Ec もう十分だよ
初心者にありがちな「言語仕様が汚い発言」でしかないのがわかったからもういいよw
初心者にありがちな「言語仕様が汚い発言」でしかないのがわかったからもういいよw
273デフォルトの名無しさん
2022/02/17(木) 23:22:49.91ID:S7RVNfva 彼は当初Rustの言語仕様が汚いと主張
それが無理筋だとわかると誰か個人が書いたサンプルコードが汚いと主張を変更
ところがそれも修正案すら示せず敗走か
それが無理筋だとわかると誰か個人が書いたサンプルコードが汚いと主張を変更
ところがそれも修正案すら示せず敗走か
274デフォルトの名無しさん
2022/02/18(金) 11:21:48.86ID:TQ4wtLA6 初心者にありがちな発言
「コンパイラのバグ」
「言語仕様が汚い」
「バリバリ書く」
「コンパイラのバグ」
「言語仕様が汚い」
「バリバリ書く」
275デフォルトの名無しさん
2022/02/18(金) 11:53:36.75ID:Oiotkhzs276デフォルトの名無しさん
2022/02/18(金) 23:43:37.82ID:dAarluib まだ富士山2合目な発言「美しい言語、感銘を受ける」 「コンパイラが教師」 「初心者にありがち」
277デフォルトの名無しさん
2022/02/19(土) 06:12:57.32ID:TtXtFDlb >>274
Objective-Cだけはマジ言語仕様汚ねーなって思った
Objective-Cだけはマジ言語仕様汚ねーなって思った
278デフォルトの名無しさん
2022/02/19(土) 09:03:05.11ID:Wd6uYUeM Objective-Cはちょっとしか触ったことないけどすこ
mac開発で使ってる人からすると欠点が見えてくるのかな?
mac開発で使ってる人からすると欠点が見えてくるのかな?
279デフォルトの名無しさん
2022/02/19(土) 11:31:16.52ID:R5yjbcGL 記号呪文のオンパレード
280デフォルトの名無しさん
2022/02/19(土) 12:43:55.20ID:gklR0OPN Objective-Cは、あの突き抜けたキメラ感が好きかな。
281デフォルトの名無しさん
2022/02/19(土) 15:13:03.46ID:PBw8xajc Obj-Cそんなに悪くないぞ
RubyのC拡張書いてる感覚に近い
RubyのC拡張書いてる感覚に近い
282デフォルトの名無しさん
2022/02/19(土) 18:59:30.44ID:ukdLXHKY283デフォルトの名無しさん
2022/02/19(土) 20:52:26.77ID:TtXtFDlb そういえばC#やってからJavaに触ると.NETフレームワークの設計が如何によく出来てるかを思い知る
284デフォルトの名無しさん
2022/02/19(土) 21:05:14.30ID:Wd6uYUeM OSXが出てから一般向けの参考書が本屋に並ぶとか信じられないことになったが
昔は図書館の奥底まで潜らないと本が出てこなかったり
興味あるけどなんか手を出せる状況になかったなObjectice-Cは
linuxにgnustep入れてちょこちょこっとサンプル動かして満足してた
いやほんとAppleのおかげでだいぶ脚光当たったなマジで
昔は図書館の奥底まで潜らないと本が出てこなかったり
興味あるけどなんか手を出せる状況になかったなObjectice-Cは
linuxにgnustep入れてちょこちょこっとサンプル動かして満足してた
いやほんとAppleのおかげでだいぶ脚光当たったなマジで
285デフォルトの名無しさん
2022/02/19(土) 23:02:34.03ID:MxDJywIC Obj-CはどうかしらんけどSwiftはまあ良いと思う
依存がでかいときのビルドはつらすぎだけど
依存がでかいときのビルドはつらすぎだけど
286デフォルトの名無しさん
2022/02/20(日) 09:06:02.64ID:42OaaAY/287デフォルトの名無しさん
2022/02/20(日) 23:34:18.52ID:wG3ApFzh288デフォルトの名無しさん
2022/02/21(月) 03:36:10.49ID:pjmAL47q そいつはC#おじさんだから触っちゃダメ、Goスレでも暴れてる
289デフォルトの名無しさん
2022/02/21(月) 15:07:07.57ID:WLj3vt4d 波かっこによるブロックのため、
}
}
}
}
でディスプレイを無駄に占有されて可読性が減る事と
文末のセミコロン(C系)やコロン(Python等)強制で無駄にタイピング量が増えるのが嫌なのですが(強制でなければむしろ好き)、
あれらって、どんな魅力が有るのですか?
javascriptでデータ量を減らせて難読化できるメリットはわかりますが・・・・。
ちなみに自分は{}もpython.nimの様なインデントによるブロックで良いと思うし、
function()はfn()で良いし、println()はp()で良いし、arrayOf(1,2,3)は(1,2,3)で良いと思います。
}
}
}
}
でディスプレイを無駄に占有されて可読性が減る事と
文末のセミコロン(C系)やコロン(Python等)強制で無駄にタイピング量が増えるのが嫌なのですが(強制でなければむしろ好き)、
あれらって、どんな魅力が有るのですか?
javascriptでデータ量を減らせて難読化できるメリットはわかりますが・・・・。
ちなみに自分は{}もpython.nimの様なインデントによるブロックで良いと思うし、
function()はfn()で良いし、println()はp()で良いし、arrayOf(1,2,3)は(1,2,3)で良いと思います。
290デフォルトの名無しさん
2022/02/21(月) 15:49:13.16ID:8WYOAA82 C言語の出始めは関数名とか省略していて可読性悪いとか言われてたなぁ。
291デフォルトの名無しさん
2022/02/21(月) 15:58:43.16ID:/1Q8PAGZ C言語が出る前からプログラミングしてたん?
すごい大先輩ですね
すごい大先輩ですね
292デフォルトの名無しさん
2022/02/21(月) 16:38:51.99ID:Y2/ni7CQ 記号=読めない
英単語=読める
みたいな批判は古いけど今でも一理ある
char **argv;
pointer< pointer<char> > argv;
英単語=読める
みたいな批判は古いけど今でも一理ある
char **argv;
pointer< pointer<char> > argv;
293デフォルトの名無しさん
2022/02/21(月) 16:58:48.39ID:hkBHJMBS おいおい
そんなのタイプしたくないよ
そんなのタイプしたくないよ
294デフォルトの名無しさん
2022/02/21(月) 17:32:22.70ID:NEAxhla5 頻度が高いものほど短くていい
意味不明な記号でもいい
*こそがまさにそれで
*こそがまさにC言語の象徴
意味不明な記号でもいい
*こそがまさにそれで
*こそがまさにC言語の象徴
295デフォルトの名無しさん
2022/02/21(月) 18:20:09.87ID:Vy+crfrM296デフォルトの名無しさん
2022/02/21(月) 20:53:51.80ID:QHx0/ciw297デフォルトの名無しさん
2022/02/21(月) 21:43:40.53ID:8WYOAA82 どうせお前らは嫁や彼女のおっぱい見てオッパイソンとか内心思ってるんだろ。
298デフォルトの名無しさん
2022/02/21(月) 23:34:00.09ID:yT3SkRwP Lispは基本すべてが()で
関数の終わりは
))))))
とかなりがち
スーパーカッコ
]
というのも提案されたが流行らなかった
カッコを閉じると対応するカッコを自動で示してくれるのが
よかったのかなあ(viの show match)
プログラムが大きくなるとどっちにしても一画面では
収まらなくなるし
識別子の名前を短くすると一見してなんだか分からないし
プログラムが大きくなるとわけが分からなくなりやすい
一応理由はある。経験則だけど
関数の終わりは
))))))
とかなりがち
スーパーカッコ
]
というのも提案されたが流行らなかった
カッコを閉じると対応するカッコを自動で示してくれるのが
よかったのかなあ(viの show match)
プログラムが大きくなるとどっちにしても一画面では
収まらなくなるし
識別子の名前を短くすると一見してなんだか分からないし
プログラムが大きくなるとわけが分からなくなりやすい
一応理由はある。経験則だけど
299デフォルトの名無しさん
2022/02/22(火) 00:58:19.88ID:A1/uSbXB300デフォルトの名無しさん
2022/02/22(火) 01:37:03.17ID:Uj7UhjXB301デフォルトの名無しさん
2022/02/22(火) 02:06:26.37ID:8W2asJrF 凡人なので Bracket Pair Colorizer みたいなエディタ支援がないと
3階層以上のカッコの対応が正しいかどうか自信が持てない
3階層以上のカッコの対応が正しいかどうか自信が持てない
302デフォルトの名無しさん
2022/02/22(火) 02:20:32.61ID:N60dC/Ri303デフォルトの名無しさん
2022/02/22(火) 12:22:36.19ID:ysWljmej304デフォルトの名無しさん
2022/02/23(水) 16:27:32.36ID:D80BZOr1 >>303
>Bracket Pair Colorizer は、もう必要ない 既に、VSCode に実装されたから
良い世の中になったなぁ。vimでも実装されればいいのに。特に、対応するカッコを線でつなぐ機能はExcelにも無いのでステキ。
>Bracket Pair Colorizer は、もう必要ない 既に、VSCode に実装されたから
良い世の中になったなぁ。vimでも実装されればいいのに。特に、対応するカッコを線でつなぐ機能はExcelにも無いのでステキ。
305デフォルトの名無しさん
2022/02/23(水) 16:40:31.88ID:6S791qLX306デフォルトの名無しさん
2022/02/25(金) 00:55:39.55ID:XW+/SlIV307デフォルトの名無しさん
2022/02/25(金) 02:23:42.73ID:vMVHS55f Cのセミコロンはalgolのセミコロンやcobolのピリオドを引きづっている
ここで一連の処理が終わりという意味でターミネータを置いた
改行を書かずにぎっしり書くときにどこで切っていいか分かるからね
自然の文に近かろうといういい加減な理由
当時はまだ人間にとっての書きやすさとか
人間にとっての読みやすとさかほとんど配慮されてなかった
ここで一連の処理が終わりという意味でターミネータを置いた
改行を書かずにぎっしり書くときにどこで切っていいか分かるからね
自然の文に近かろうといういい加減な理由
当時はまだ人間にとっての書きやすさとか
人間にとっての読みやすとさかほとんど配慮されてなかった
308デフォルトの名無しさん
2022/02/25(金) 04:31:10.49ID:aDhOSI3t Rustはセミコロンの有無で文か式(値)かを分けている
if condition {
a = p + q;
} else {
a = x + y;
}
これをifの中を文ではなく式(値)にすると
a = if condition {
p + q
} else {
x + y
};
もちろん改行やインデントは自由なので
a = if condition { p + q } else { x + y };
こう書いても同じ
波括弧は区切りとして不可欠であり
多重時の対応関係となるだけでなく
波括弧はブロックを形成しスコープの管理にも不可欠
例えば波括弧により新たなブロックを形成することで
ロックを取得した変数がブロック終了時に自動解放され
その時にロックも自動解放されるなど安全設計にも波括弧が活躍
このようにセミコロンと波括弧はRustにおいて非常に重要な意味を持つ
きちんと活用したプログラミングにおいてはセミコロンも波括弧も無駄ではない
if condition {
a = p + q;
} else {
a = x + y;
}
これをifの中を文ではなく式(値)にすると
a = if condition {
p + q
} else {
x + y
};
もちろん改行やインデントは自由なので
a = if condition { p + q } else { x + y };
こう書いても同じ
波括弧は区切りとして不可欠であり
多重時の対応関係となるだけでなく
波括弧はブロックを形成しスコープの管理にも不可欠
例えば波括弧により新たなブロックを形成することで
ロックを取得した変数がブロック終了時に自動解放され
その時にロックも自動解放されるなど安全設計にも波括弧が活躍
このようにセミコロンと波括弧はRustにおいて非常に重要な意味を持つ
きちんと活用したプログラミングにおいてはセミコロンも波括弧も無駄ではない
309デフォルトの名無しさん
2022/02/25(金) 12:38:43.75ID:Eg3DloqN Ruby on Rails で有名な、民泊のAirbnb、JavaScript スタイルガイド
ステートメントを明示的に終了し、
不足しているセミコロンを検知するようにリンターを構成すると、
問題に遭遇するのを防ぐのに役立ちます
一方、Rubyでは、セミコロンを付けない
ステートメントを明示的に終了し、
不足しているセミコロンを検知するようにリンターを構成すると、
問題に遭遇するのを防ぐのに役立ちます
一方、Rubyでは、セミコロンを付けない
310デフォルトの名無しさん
2022/02/25(金) 14:56:07.65ID:S5tvR1Yl JavaScriptはセミコロンを省略しようとすると、ハマる罠がいろいろあるからね
311デフォルトの名無しさん
2022/02/25(金) 17:57:34.96ID:acR8Uc+d 自由な書き方ができるというのは無駄だと思うけど?
”波括弧は区切りとして不可欠であり(略)波括弧はブロックを形成し(略)変数がブロック終了時に自動解放”
これも別に2種の異なる記号文字の波カッコである必要はない。いちいちカッコ対応を合わせる必要もあるし、Pythonのような
オフサイドルールでも実現できるし、Rubyのように{}とbegin/endで意味が違う言語のほうがしっかりしてますよ
もともとのCではセミコロンはソースのパース処理を楽したいだけで、こんなに好意的に信じられるとはw
”波括弧は区切りとして不可欠であり(略)波括弧はブロックを形成し(略)変数がブロック終了時に自動解放”
これも別に2種の異なる記号文字の波カッコである必要はない。いちいちカッコ対応を合わせる必要もあるし、Pythonのような
オフサイドルールでも実現できるし、Rubyのように{}とbegin/endで意味が違う言語のほうがしっかりしてますよ
もともとのCではセミコロンはソースのパース処理を楽したいだけで、こんなに好意的に信じられるとはw
312デフォルトの名無しさん
2022/02/25(金) 18:24:41.24ID:u7rOKKj6313デフォルトの名無しさん
2022/02/25(金) 18:37:10.71ID:acR8Uc+d ErlangもHaskellも波かっこなんて使わないけど? Fortranもないし、Juliaには合併型につかうけどブロックじゃないし
これらをおもちゃと言えるならさぞかし素晴らしいプログラム書いてるんだろうな。私の意見は「最もベスト」ではなく
ただ単に何も考えず人口の多い言語からひきずられただけ
これらをおもちゃと言えるならさぞかし素晴らしいプログラム書いてるんだろうな。私の意見は「最もベスト」ではなく
ただ単に何も考えず人口の多い言語からひきずられただけ
314デフォルトの名無しさん
2022/02/25(金) 18:56:15.50ID:uHAJP23d FORTH最強
315デフォルトの名無しさん
2022/02/25(金) 20:33:35.67ID:RNXuutTC Juliaのendで閉じるのはマジでメリットがわからん
予約語が増えるし、エディタの機能で閉じ括弧にジャンプすることも出来なくなるし
Juliaなんて特にFortran出身のガイジみたいに長いコード書くガイジを招き入れようという言語なのによ
予約語が増えるし、エディタの機能で閉じ括弧にジャンプすることも出来なくなるし
Juliaなんて特にFortran出身のガイジみたいに長いコード書くガイジを招き入れようという言語なのによ
316デフォルトの名無しさん
2022/02/25(金) 20:36:28.34ID:aDhOSI3t 既に書いたようにRustは積極的にセミコロンも波括弧も活用していて無駄がない
波括弧もブロックだけでなく列挙体定義、構造体定義、モジュール定義、トレイト定義、実装定義など多岐にわたる
ブロック自体も様々な制御構文に登場するだけだなく、クロージャや非同期のブロックなどの他に、所有権スコープを別にするためにブロック内ブロックも使うため、開始も終了も1文字で済む波括弧はRustにとってベストとなっている
セミコロンも>>308に書いたようにセミコロンの有無で文となるか値となるか変わってくるなど重要な意味を持っている
このようにセミコロンと波括弧はRustにおいて非常に重要な意味を持つ
これらをきちんと活用したプログラミング言語においてはセミコロンも波括弧も無駄ではない
波括弧もブロックだけでなく列挙体定義、構造体定義、モジュール定義、トレイト定義、実装定義など多岐にわたる
ブロック自体も様々な制御構文に登場するだけだなく、クロージャや非同期のブロックなどの他に、所有権スコープを別にするためにブロック内ブロックも使うため、開始も終了も1文字で済む波括弧はRustにとってベストとなっている
セミコロンも>>308に書いたようにセミコロンの有無で文となるか値となるか変わってくるなど重要な意味を持っている
このようにセミコロンと波括弧はRustにおいて非常に重要な意味を持つ
これらをきちんと活用したプログラミング言語においてはセミコロンも波括弧も無駄ではない
317デフォルトの名無しさん
2022/02/25(金) 20:36:50.10ID:GfqLBiOO rubyでもたまに変数名にend使っちゃって(´・ω・`)ってなるわ
318デフォルトの名無しさん
2022/02/25(金) 21:22:07.17ID:uXH/+tNo 可読性を損なわない範囲で新しい仕組みができればと
319デフォルトの名無しさん
2022/02/25(金) 21:39:31.34ID:LgZQhCZj >>306
FORTRANは行末記号を使わない代わりに行継続を明示しているだけ。
FORTRANは行末記号を使わない代わりに行継続を明示しているだけ。
320デフォルトの名無しさん
2022/02/25(金) 21:41:12.00ID:uXH/+tNo 昔は画面に出せる文字数も少なく見通しが悪くなるのでインデントなど使わなかった
フルスクリーンエディタでもなかった
誰もインデントなど使わず意味の通じる範囲で一行に区切り入れてどんどん文を書いていった
fortranなんて一行の文字数が固定だったし複数行になる場合は非常に見づらかった
フルスクリーンエディタでもなかった
誰もインデントなど使わず意味の通じる範囲で一行に区切り入れてどんどん文を書いていった
fortranなんて一行の文字数が固定だったし複数行になる場合は非常に見づらかった
321デフォルトの名無しさん
2022/02/25(金) 21:43:41.48ID:uXH/+tNo 行末記号を使わない=書きかけか記述バグありの場所
322デフォルトの名無しさん
2022/02/25(金) 21:50:02.35ID:uXH/+tNo 大学でfortranの授業があり友達が勉強のためにと20万ぐらい出してパソコン用のFORTRANのパッケージを買った
俺達が今はFORTRANは実質大学でしか使われておらずモダン()な言語がもっと安く買えることを教えると
もっと先に言ってくれと激怒した
彼は一年の前期しか使わないFORTRANを購入したんだ
後期はPascalだった
Pascalを買っててもそれはそれで…
自分はCのパッケージを買ったんだなあ
俺達が今はFORTRANは実質大学でしか使われておらずモダン()な言語がもっと安く買えることを教えると
もっと先に言ってくれと激怒した
彼は一年の前期しか使わないFORTRANを購入したんだ
後期はPascalだった
Pascalを買っててもそれはそれで…
自分はCのパッケージを買ったんだなあ
323デフォルトの名無しさん
2022/02/25(金) 23:51:11.41ID:q7+lZsL0 インデント言語はコードの自動生成がやりづらいという欠点はあるかな
文を出力するときにその文を含むスコープのインデントレベルだけ空白文字を出力するようなロジックが必要
括弧が必要な言語なら生成後フォーマッタにかけれぱきれいなコードになる
まあたいした差ではないとは思うけど
文を出力するときにその文を含むスコープのインデントレベルだけ空白文字を出力するようなロジックが必要
括弧が必要な言語なら生成後フォーマッタにかけれぱきれいなコードになる
まあたいした差ではないとは思うけど
324デフォルトの名無しさん
2022/02/26(土) 01:49:42.07ID:nCrfqvY1 Rustは配列の1要素の更新参照を渡したら
ほかの配列要素がすべて更新できないという
発狂するような仕組みになっている
ほかの配列要素がすべて更新できないという
発狂するような仕組みになっている
325デフォルトの名無しさん
2022/02/26(土) 02:01:50.91ID:hLp//vsS 本当にそれがやりたくて、かつインデックスが重ならないことを保証できるんならunsafe使っても許されるケースっぽい
326デフォルトの名無しさん
2022/02/26(土) 02:12:02.48ID:ZxQjFH2y 配列の1要素の更新参照をとるときにどの要素が選ばれるかが実行時に決まるとどの要素も変更されうることになるからじゃないの?
327デフォルトの名無しさん
2022/02/26(土) 02:48:53.09ID:kDTLFyam >>308 >>316
>波括弧はブロックを形成しスコープの管理にも不可欠
インデントでブロックを形成する仕様でもスコープの管理できるのでは?
つまり、この時点では波カッコは不可欠ではないのでは?
別の言い方をすれば Rustで波カッコの代わりに、インデントでもブロックやデータの入れ子関係を表せるように言語の設計変更が可能ではないか?と思います。
あと次のnim言語の例の様に「ifの後ろにイコール記号が無ければ値(p + q か x + y)を返し、有れば機能 (bに1か2を代入)を実行」という言語仕様をすれば行末セミコロンは不要になるのでは?
a = if condition:
b = 1
p + q # a = p + q かつ b = 1となる
else
b = 2
x + y # a = x + y かつ b = 2となる
参考:https://2vg.github.io/Nim-World/condition/if.html
>波括弧はブロックを形成しスコープの管理にも不可欠
インデントでブロックを形成する仕様でもスコープの管理できるのでは?
つまり、この時点では波カッコは不可欠ではないのでは?
別の言い方をすれば Rustで波カッコの代わりに、インデントでもブロックやデータの入れ子関係を表せるように言語の設計変更が可能ではないか?と思います。
あと次のnim言語の例の様に「ifの後ろにイコール記号が無ければ値(p + q か x + y)を返し、有れば機能 (bに1か2を代入)を実行」という言語仕様をすれば行末セミコロンは不要になるのでは?
a = if condition:
b = 1
p + q # a = p + q かつ b = 1となる
else
b = 2
x + y # a = x + y かつ b = 2となる
参考:https://2vg.github.io/Nim-World/condition/if.html
328デフォルトの名無しさん
2022/02/26(土) 03:08:20.09ID:ZxQjFH2y CやRustの波括弧とセミコロンはインデントがあろうが無かろうがタブとスペースが混じっていようがインデント幅がバラバラになっていようが一行に式や文がいくつ書かれていようがルールさえ守っていればコンパイルできるようにしろ、自由にコードを書かせろ、というために存在しているんじゃないか。
コーディング規則をきちんと守ってインデントする書き方なら波括弧使わずにインデントでブロックの範囲を指定できる。
コーディング規則をきちんと守ってインデントする書き方なら波括弧使わずにインデントでブロックの範囲を指定できる。
329デフォルトの名無しさん
2022/02/26(土) 03:15:38.69ID:ZxQjFH2y >>327
Nimでは一行に複数ステートメントを書きたいときだけセミコロンでステートメントを区切るようになっている。
Statement list expressionを使えば以下のように書ける。
var b: int
let a = if condition: (b = 1; p + q) else: (b = 2; x + y)
Nimでは一行に複数ステートメントを書きたいときだけセミコロンでステートメントを区切るようになっている。
Statement list expressionを使えば以下のように書ける。
var b: int
let a = if condition: (b = 1; p + q) else: (b = 2; x + y)
330デフォルトの名無しさん
2022/02/26(土) 03:43:46.90ID:Gc6jVciw >>324
かなり習熟が必要だけど、あらかじめそういうことを理解して考慮していれば
そもそもそういう操作が必要ないように設計できるようになってくるので、どんどん困らなくなってくるよ
ライフタイムらへんはもっと難しいから、初心者はしばらくの間悩まされるし、
やはりどうにもこうにもRustの学習曲線はやばいよね
かなり習熟が必要だけど、あらかじめそういうことを理解して考慮していれば
そもそもそういう操作が必要ないように設計できるようになってくるので、どんどん困らなくなってくるよ
ライフタイムらへんはもっと難しいから、初心者はしばらくの間悩まされるし、
やはりどうにもこうにもRustの学習曲線はやばいよね
331デフォルトの名無しさん
2022/02/26(土) 03:47:06.26ID:wj41QPek >>324
split_mut使うなどのworkaroundはあるよ
split_mut使うなどのworkaroundはあるよ
332デフォルトの名無しさん
2022/02/26(土) 06:26:28.15ID:BX4iLvdt >>327
Rustだとブロックの先頭ですぐに別のブロック開始させる場合もあるけど
インデント方式でやるといきなり二段階インデントが深くなるのはわかりくいから波括弧が向いてると思う
あとセミコロンも関数の最後の返り値の場所で別の関数を呼んだとき
セミコロンを付けると文になって呼んだ関数の副作用のみ利用で返り値無しとなり
セミコロンを付けると式(値)となって呼んだ関数の返り値が自分の返り値となる
完全にセミコロンの有無しか違いがないからRustでは波括弧もセミコロンも必須かな
Rustだとブロックの先頭ですぐに別のブロック開始させる場合もあるけど
インデント方式でやるといきなり二段階インデントが深くなるのはわかりくいから波括弧が向いてると思う
あとセミコロンも関数の最後の返り値の場所で別の関数を呼んだとき
セミコロンを付けると文になって呼んだ関数の副作用のみ利用で返り値無しとなり
セミコロンを付けると式(値)となって呼んだ関数の返り値が自分の返り値となる
完全にセミコロンの有無しか違いがないからRustでは波括弧もセミコロンも必須かな
333デフォルトの名無しさん
2022/02/26(土) 08:10:01.51ID:vGz8MbzG 昔とはコーディング環境が違うから何とでもできるけど
本当にRustはコーディング時間と学習時間が他の言語の倍ぐらいかかる
本当にRustはコーディング時間と学習時間が他の言語の倍ぐらいかかる
334デフォルトの名無しさん
2022/02/26(土) 09:10:31.11ID:e5W/1zqv 専用のIDEがあって、インテリセンス使えれば学習曲線が明らかに下がると思うよ
335デフォルトの名無しさん
2022/02/26(土) 14:12:26.25ID:vGz8MbzG 下げてどうする?
336デフォルトの名無しさん
2022/02/26(土) 21:21:46.56ID:6gzH7hBI >>332
>インデント方式でやるといきなり二段階インデントが深くなるのはわかりくいから波括弧が向いてると思う
いきなり二段階インデントは確かに嫌ですね。
そういった場面が思いつけないので例を出して頂けるとありがたいです。
>インデント方式でやるといきなり二段階インデントが深くなるのはわかりくいから波括弧が向いてると思う
いきなり二段階インデントは確かに嫌ですね。
そういった場面が思いつけないので例を出して頂けるとありがたいです。
337デフォルトの名無しさん
2022/02/26(土) 21:23:24.03ID:rDEoBrRU 他の言語はパフォーマンスの改善とタイミングバグの対応に10倍かかんのよ
338デフォルトの名無しさん
2022/02/26(土) 22:44:30.76ID:fRC8OZTs うそばかりだな
339デフォルトの名無しさん
2022/02/27(日) 13:41:36.31ID:+/7Q5xyF 他の言語で1%ぐらいで発生するバグがrustでは発生しにくいように書ける
でもアホだとそもそもそこまでコードが書けないで放り投げる
コードはバグ込みでも動くものが完成しなければいけないと思うけどRustはそこまで到達しにくいかしないか
同じコードでも3倍ぐらいコーディング時間がかかる
でもアホだとそもそもそこまでコードが書けないで放り投げる
コードはバグ込みでも動くものが完成しなければいけないと思うけどRustはそこまで到達しにくいかしないか
同じコードでも3倍ぐらいコーディング時間がかかる
340デフォルトの名無しさん
2022/02/27(日) 14:50:22.24ID:Xl3wWN+O 色んなプログラミングをやってきたがRustが一番プログラミングしやすい
色々と言語仕様が洗練されていて書きやすいことが大きい
それに加えて開発効率が非常に高いことが挙げられる
特に実行しながらのデバッグが激減した
色々と言語仕様が洗練されていて書きやすいことが大きい
それに加えて開発効率が非常に高いことが挙げられる
特に実行しながらのデバッグが激減した
341デフォルトの名無しさん
2022/02/27(日) 16:00:43.26ID:XKAHB4uk >>339
これ
これ
342デフォルトの名無しさん
2022/02/27(日) 16:26:56.85ID:/IzO/XXN rustではブロックも式だから、インデントは向かないだろう?
343デフォルトの名無しさん
2022/02/27(日) 17:46:13.38ID:+/7Q5xyF c++で書いたコードをRustで書き直してると叫びたくなるがしゃあない
344デフォルトの名無しさん
2022/02/27(日) 18:10:09.84ID:nXG/aSfD 静的型付け言語の中だとRustが最も書きやすいかな
特に強力なおかげでデバッグなどでもロジック本体に集中できる点がいいかな
この点は異論があまり聞かれないよね
特に強力なおかげでデバッグなどでもロジック本体に集中できる点がいいかな
この点は異論があまり聞かれないよね
345デフォルトの名無しさん
2022/02/27(日) 18:12:31.33ID:+yReYAPt >>343
どうして?ライブラリがないから?
どうして?ライブラリがないから?
346デフォルトの名無しさん
2022/02/27(日) 18:31:50.94ID:Dwcd+ECL クラス指向じゃないから抽象化の設計が変わってくる
347デフォルトの名無しさん
2022/02/27(日) 18:54:50.37ID:+/7Q5xyF ロジック本体に集中できると書いてる人はjavaかC#あたりでも使っていたら良かったんじゃないかと
348デフォルトの名無しさん
2022/02/27(日) 19:00:54.33ID:gYJlUrmm rustが書きやすい理由は関数シグネチャの情報量が多いこともあると思う
関数の型定義を見るだけでパラメーターや戻り値の値域や、所有権の移動有無が明確に分かるのは大きなメリットかと
関数の型定義を見るだけでパラメーターや戻り値の値域や、所有権の移動有無が明確に分かるのは大きなメリットかと
349デフォルトの名無しさん
2022/02/27(日) 19:02:15.12ID:gYJlUrmm あと関数に渡したオブジェクトの変更可能性の有無が分かるのも良い点 (これはC++などでも分かるが)
350デフォルトの名無しさん
2022/02/27(日) 19:10:22.84ID:+yReYAPt 機械的にやってないからってだけだよね
そりゃ自分でRustっぽく書き直しちゃってたら時間かかるのは仕方ない
そりゃ自分でRustっぽく書き直しちゃってたら時間かかるのは仕方ない
351デフォルトの名無しさん
2022/02/27(日) 19:34:13.88ID:+/7Q5xyF とにかくRustが好きでただ褒めたいだけみたいなレスばかり
352デフォルトの名無しさん
2022/02/27(日) 20:07:19.60ID:Sp3cjlMa Rustは割と学習コストが高いぐらいが欠点らしい欠点
353デフォルトの名無しさん
2022/02/27(日) 20:16:19.32ID:VdMMR1Xg C++やってるとそんなに学習コストは高くないな
デフォルトでムーブっていうのはムーブ知らない人は苦労すると思うが
デフォルトでムーブっていうのはムーブ知らない人は苦労すると思うが
354デフォルトの名無しさん
2022/02/27(日) 20:45:36.21ID:c+lx/lLr 学習コストが高いっていうのって正直みんなどう感じてるんだろ?
ある意味、RUSTでプログラミングできるっていうのがステータスになってプログラマとしてこういう言語でやっていきたいワクワク感ってのがある。
昨今のPythonのブームは、AIとか自動化とはいいんだけどPython自体は確かに誰でもプログラミングできるかわりに、pythonでプログラミングできるということがなんのステータスにもならない歯がゆさを感じていた。
やっぱりC言語でポイントをマスターしてmalloc/freeとかでメモリ管理をガリガリ書いていて誰でもできるわけではないプログラミングができていた達成感というのを欲していた。
そういう悶々としていた自分にRustがでてきた久しぶりにワクワクしている。
そういうのってない?
ある意味、RUSTでプログラミングできるっていうのがステータスになってプログラマとしてこういう言語でやっていきたいワクワク感ってのがある。
昨今のPythonのブームは、AIとか自動化とはいいんだけどPython自体は確かに誰でもプログラミングできるかわりに、pythonでプログラミングできるということがなんのステータスにもならない歯がゆさを感じていた。
やっぱりC言語でポイントをマスターしてmalloc/freeとかでメモリ管理をガリガリ書いていて誰でもできるわけではないプログラミングができていた達成感というのを欲していた。
そういう悶々としていた自分にRustがでてきた久しぶりにワクワクしている。
そういうのってない?
355デフォルトの名無しさん
2022/02/27(日) 20:48:49.55ID:OAiw6RqC RefCellのborrow_mutとかその辺がマジで難しいと思うよ
なんでこんなことしなきゃならんのかって思う
なんでこんなことしなきゃならんのかって思う
356デフォルトの名無しさん
2022/02/27(日) 20:57:13.39ID:nGlHhzSe C++のヘッダ取り込みの仕組みを改良してくれたら普通に現役で戦えるのに
357デフォルトの名無しさん
2022/02/27(日) 21:10:22.93ID:+/7Q5xyF Rustもコンパイルが遅いな
マクロだからか?
マクロだからか?
358デフォルトの名無しさん
2022/02/27(日) 21:16:17.18ID:TDmI4NY5 >>354
めちゃくちゃわかる
Pythonは便利さで考えると間違いなく個人的一位なんだけど、何らかの別の知識と組み合わせないと価値が生み出せない感じは確かにある。
C書いてる老人からしたら「インタープリターなんてけしからん」って感じで毛嫌いされるし...
純粋にプログラマとして名乗るなら一つはコンパイラ型言語を習得する必要がありそうだ。
めちゃくちゃわかる
Pythonは便利さで考えると間違いなく個人的一位なんだけど、何らかの別の知識と組み合わせないと価値が生み出せない感じは確かにある。
C書いてる老人からしたら「インタープリターなんてけしからん」って感じで毛嫌いされるし...
純粋にプログラマとして名乗るなら一つはコンパイラ型言語を習得する必要がありそうだ。
359デフォルトの名無しさん
2022/02/27(日) 23:07:26.84ID:Kxq1o6ES Pythonはパッケージ管理とか型付いてないライブラリがウザい
360デフォルトの名無しさん
2022/02/27(日) 23:37:07.72ID:4VyCP23o というかCargoはマジで優秀すぎて、他のあらゆる処理系に真似してほしい
361デフォルトの名無しさん
2022/02/27(日) 23:42:37.49ID:OAiw6RqC フロントエンドの人が最近Rust書いてるけど
JSしか書いたことない人が書ける言語じゃないと思うが
JSしか書いたことない人が書ける言語じゃないと思うが
362デフォルトの名無しさん
2022/02/27(日) 23:58:09.11ID:2GGoVw4G JSでちゃんとしたものを書けるスキルがある人にとっては楽勝な気も。
363デフォルトの名無しさん
2022/02/27(日) 23:59:48.77ID:BlJE3fZv プログラム言語に求められるニーズはホント、多様なんだな、と思った。
GoやPythonの様に仕様を簡単にして仕事をサクッと済ませたい人も居れば、「一般人では到達し得ない難易設定に取り組んで他者と差別化したい」という人も居る。
商品開発と同じで皆にドンピシャハマる言語は無いし、それを無理に作ろうとしたら、万人が物足りなさを感じる折衷案になってしまうのだろうな。
と言いつつ、皆にドンピシャハマる言語を模索している自分が居る。
「型設定、メンドクサイ〜」という人はC++で言うautoを使えばいいし、「自動化・縛り無しはバグの元!」という人はintやconstや所有権を追加すれば良い。どちらの書き方でも同じ言語上で動くし、お互いの書き方が気に入らなければ「付け足す・削る」だけで対応できるような、そんな、移植性の高い言語を作りたいものだ。
GoやPythonの様に仕様を簡単にして仕事をサクッと済ませたい人も居れば、「一般人では到達し得ない難易設定に取り組んで他者と差別化したい」という人も居る。
商品開発と同じで皆にドンピシャハマる言語は無いし、それを無理に作ろうとしたら、万人が物足りなさを感じる折衷案になってしまうのだろうな。
と言いつつ、皆にドンピシャハマる言語を模索している自分が居る。
「型設定、メンドクサイ〜」という人はC++で言うautoを使えばいいし、「自動化・縛り無しはバグの元!」という人はintやconstや所有権を追加すれば良い。どちらの書き方でも同じ言語上で動くし、お互いの書き方が気に入らなければ「付け足す・削る」だけで対応できるような、そんな、移植性の高い言語を作りたいものだ。
364デフォルトの名無しさん
2022/02/28(月) 00:28:38.71ID:mRBEkiDP ステータスのためじゃなく楽だから使ってるだけ
365デフォルトの名無しさん
2022/02/28(月) 00:30:29.35ID:fo+smr71366デフォルトの名無しさん
2022/02/28(月) 00:32:24.14ID:fo+smr71 >>357
マクロはほとんど影響ないと思う
小規模のcrateをたくさん組み合わせることが多く、プロジェクトごとにそれぞれコンパイルする必要があるので
単純にコンパイル対象のコード量が多いというのはよく言われている
マクロはほとんど影響ないと思う
小規模のcrateをたくさん組み合わせることが多く、プロジェクトごとにそれぞれコンパイルする必要があるので
単純にコンパイル対象のコード量が多いというのはよく言われている
367デフォルトの名無しさん
2022/02/28(月) 15:08:46.61ID:LoAqeLPd cargoは独善的すぎて好きになれんわ。遅いし。
368デフォルトの名無しさん
2022/02/28(月) 15:19:11.30ID:XoBakguu その通り、cargoを持ち上げてる上げてる奴とは全く仲良くなれそうもない。
cargoが遅くてダメダメ、なんで遅いのかを調べるとRustのトレイトの仕組みに行き着くという罠...
cargoが遅くてダメダメ、なんで遅いのかを調べるとRustのトレイトの仕組みに行き着くという罠...
369デフォルトの名無しさん
2022/02/28(月) 15:37:37.25ID:Msb6WRSo >>365
可変参照を実行時に得たいというrustの事情はわかるのだけど
そもそもコンパイル時に参照解決できないデータ構造はめちゃくちゃ多い
その辺りをもう少し書きやすくならないかなと思う
結局面倒だからunsafeに逃げてしまうのではないかと
まだうまく言語化できずモヤモヤしてるが
可変参照を実行時に得たいというrustの事情はわかるのだけど
そもそもコンパイル時に参照解決できないデータ構造はめちゃくちゃ多い
その辺りをもう少し書きやすくならないかなと思う
結局面倒だからunsafeに逃げてしまうのではないかと
まだうまく言語化できずモヤモヤしてるが
370デフォルトの名無しさん
2022/02/28(月) 15:44:40.05ID:qfzw0yaJ 借用規則を考慮した設計が難しい、ってことかな
371デフォルトの名無しさん
2022/02/28(月) 16:29:36.75ID:ZHtGEnZl Rust以前のコードしか書いたことない人は
借用しっぱなしで平気だからいろいろ困ってしまう
Rc<RefCell<T>>で考えられるようになると
共有所有権をクローンして持っておいて
必要な瞬間のみ動的に借用するって方法を覚える
そうして、時間軸上のスコープとでもいうか借用の瞬間を小さく管理することを覚えるのである
そうして、今まで人類は所有権と借用についていかに無頓着にやり散らかしてきたのかを反省するのである
借用しっぱなしで平気だからいろいろ困ってしまう
Rc<RefCell<T>>で考えられるようになると
共有所有権をクローンして持っておいて
必要な瞬間のみ動的に借用するって方法を覚える
そうして、時間軸上のスコープとでもいうか借用の瞬間を小さく管理することを覚えるのである
そうして、今まで人類は所有権と借用についていかに無頓着にやり散らかしてきたのかを反省するのである
372デフォルトの名無しさん
2022/02/28(月) 16:42:42.62ID:Msb6WRSo >>371
それはわかるんだけど
その代償としてプログラマーが支払わなきゃならない代償がデカすぎると感じる
これはコンパイル時の様々なチェックとは本質的に違う努力で
rustを騙すためにやらなきゃならないバッドノウハウの類であると感じる
それはわかるんだけど
その代償としてプログラマーが支払わなきゃならない代償がデカすぎると感じる
これはコンパイル時の様々なチェックとは本質的に違う努力で
rustを騙すためにやらなきゃならないバッドノウハウの類であると感じる
373デフォルトの名無しさん
2022/02/28(月) 17:21:22.82ID:nTxgkwf4374デフォルトの名無しさん
2022/02/28(月) 17:29:54.30ID:XoBakguu せめてどうにか速くならないかとcargoをRAMDISKにしようとするとCARGO_TARGET_DIR=/tmp/.cargo/...と出来るのは
良いんだけど、コンパイルのためのworkじゃなく、targetディレクトリだから成果物がそこにできてしまうという(笑
速くなるんだけどね。。
良いんだけど、コンパイルのためのworkじゃなく、targetディレクトリだから成果物がそこにできてしまうという(笑
速くなるんだけどね。。
375デフォルトの名無しさん
2022/02/28(月) 18:10:55.65ID:OT3fp0Z5 >>369
はっきり言ってツリー構造とかはunsafeでいいと思うよ
はっきり言ってツリー構造とかはunsafeでいいと思うよ
376デフォルトの名無しさん
2022/02/28(月) 18:11:17.29ID:fo+smr71 >>372-373
それはrustがnot for youという話なのでは
それはrustがnot for youという話なのでは
377デフォルトの名無しさん
2022/02/28(月) 18:13:00.49ID:XSUMuMfa Rust持ち上げてる内容を見ると他の言語でも普通にあるやつが多い
C++しか使ったことがないうぶな人なんじゃないかな
C++しか使ったことがないうぶな人なんじゃないかな
378デフォルトの名無しさん
2022/02/28(月) 18:19:03.53ID:XSUMuMfa 頓珍漢で的外れ
型推論も賢い ← むしろ型推論実装されてて賢くない奴ってどれなんだよ
アトリビュートが言語本体と独立していて ← 当たり前 他でも同じそれが属性
Cargoが良い ← 他より優れているとは思えない
強力な型推論およびトレイト静的実装型宣言により実際の型名を記述する必要がない ← 当たり前 もともとそういうもの
型推論も賢い ← むしろ型推論実装されてて賢くない奴ってどれなんだよ
アトリビュートが言語本体と独立していて ← 当たり前 他でも同じそれが属性
Cargoが良い ← 他より優れているとは思えない
強力な型推論およびトレイト静的実装型宣言により実際の型名を記述する必要がない ← 当たり前 もともとそういうもの
379デフォルトの名無しさん
2022/02/28(月) 18:27:45.82ID:qfzw0yaJ380デフォルトの名無しさん
2022/02/28(月) 18:31:01.98ID:fo+smr71 そもそもrust自体言語機能が優れていることは標榜してない
他のモダンな言語の "当たり前" をシステムプログラミング領域でも実現したというのがポイントでは
他のモダンな言語の "当たり前" をシステムプログラミング領域でも実現したというのがポイントでは
381デフォルトの名無しさん
2022/02/28(月) 18:37:53.82ID:zoHJPzI7 エ、エラーメッセージが親切…
382デフォルトの名無しさん
2022/02/28(月) 19:04:01.39ID:7SSxP2tw383デフォルトの名無しさん
2022/02/28(月) 19:09:23.31ID:qfzw0yaJ せやなあ
あくまでRustの重要なところはオーバーヘッドが少なく比較的安全に、システムプログラミングやベアメタルプログラミングが行える処理系だというところだよね
この特徴だけでも他の言語と大きく差別化されるけど、モダンな型システムも便利だから低レベル以外のレイヤーでも使いたがる人がいる、って感じよね
あくまでRustの重要なところはオーバーヘッドが少なく比較的安全に、システムプログラミングやベアメタルプログラミングが行える処理系だというところだよね
この特徴だけでも他の言語と大きく差別化されるけど、モダンな型システムも便利だから低レベル以外のレイヤーでも使いたがる人がいる、って感じよね
384デフォルトの名無しさん
2022/02/28(月) 19:14:51.86ID:EeqSDih1385デフォルトの名無しさん
2022/02/28(月) 19:23:32.63ID:fo+smr71 381はおちょくりだし383は380と同じことを言っているだけのような
382は自分の主張を繰り返すだけの人
382は自分の主張を繰り返すだけの人
386デフォルトの名無しさん
2022/02/28(月) 19:38:39.03ID:EeqSDih1387デフォルトの名無しさん
2022/02/28(月) 19:46:15.31ID:ZHtGEnZl ムリに関わる必要はないし
誰もそれを強いてはいないぞw
あの言語はC++で苦しんだ連中が手を伸ばすもんだよきっと
誰もそれを強いてはいないぞw
あの言語はC++で苦しんだ連中が手を伸ばすもんだよきっと
388デフォルトの名無しさん
2022/02/28(月) 19:52:14.78ID:pJo2hpV4 うちの場合だけどスクリプト言語からRustにして良かった点
・型を中心とする強力な言語機能による開発効率の大幅上昇
・メモリ省力化と高速化CPU負荷激減によりサーバー/クラウド等リソースとコスト大幅削減
・アプリやシステムなど反応速度も高速になり様々な利用者が快適となった
・型を中心とする強力な言語機能による開発効率の大幅上昇
・メモリ省力化と高速化CPU負荷激減によりサーバー/クラウド等リソースとコスト大幅削減
・アプリやシステムなど反応速度も高速になり様々な利用者が快適となった
389デフォルトの名無しさん
2022/02/28(月) 20:12:49.15ID:EeqSDih1 スクリプト言語から移行出来るような高機能なデファクトのフレームなんてRustにあったっけ・・・
390デフォルトの名無しさん
2022/02/28(月) 20:26:42.23ID:EDlcC+qx I/O待ちが大半なWebアプリじゃなくて
I/O処理やデータ加工が主体な処理なんじゃない?
そういうのでもスクリプト言語で書かれてるケース結構みるし
I/O処理やデータ加工が主体な処理なんじゃない?
そういうのでもスクリプト言語で書かれてるケース結構みるし
391デフォルトの名無しさん
2022/02/28(月) 20:33:18.52ID:EeqSDih1392デフォルトの名無しさん
2022/02/28(月) 21:27:33.71ID:Msb6WRSo 「コンパイル時に参照が決まらないデータ構造に対して解決にはなってない」のがrustのいけてないところ
ここにたどり着いた俺を褒めてくれ
ここにたどり着いた俺を褒めてくれ
393デフォルトの名無しさん
2022/02/28(月) 21:27:36.69ID:fChQ9CLi 過剰アンチも異常者に見えるからやめといたほうがいいぞ
394デフォルトの名無しさん
2022/02/28(月) 22:17:24.10ID:3KbSSRJr395デフォルトの名無しさん
2022/02/28(月) 22:21:48.16ID:nNGdW6Mz CPU セントリックな処理じゃないの?
少数の同じデータを繰り返し使うような、行列処理みたいな
Ruby on Rails みたいな、全ての関数が平均的に呼ばれるようなものは、
どうにもならないでしょ?
例えば、Ruby JIT で、1万個の関数を機械語にコンパイルしても、対して速くならない
手続き中心処理はダメ。
データ駆動型じゃないと、速くならない
少数の同じデータを繰り返し使うような、行列処理みたいな
Ruby on Rails みたいな、全ての関数が平均的に呼ばれるようなものは、
どうにもならないでしょ?
例えば、Ruby JIT で、1万個の関数を機械語にコンパイルしても、対して速くならない
手続き中心処理はダメ。
データ駆動型じゃないと、速くならない
396デフォルトの名無しさん
2022/02/28(月) 22:49:27.28ID:EeqSDih1397デフォルトの名無しさん
2022/02/28(月) 23:22:44.01ID:7SSxP2tw >>389
各自の分野と対象レイヤーがバラバラだろうから一般的な話になるが
開発のできる普通のプログラマーにとってはほとんどの分野でRustが実用的に使えるようになってるな
しかし切り貼りや書き換えや各種設定などだけでやりくりする似非プログラマーにとってはまだ厳しい
各自の分野と対象レイヤーがバラバラだろうから一般的な話になるが
開発のできる普通のプログラマーにとってはほとんどの分野でRustが実用的に使えるようになってるな
しかし切り貼りや書き換えや各種設定などだけでやりくりする似非プログラマーにとってはまだ厳しい
398デフォルトの名無しさん
2022/02/28(月) 23:29:23.70ID:7SSxP2tw >>392
それはRustが最高速を出すために
ジェネリクスを具体的な型に対してコンパイル時に静的にモノモーフィングするからであって利点の一つ
もちろん稀なケースでは動的にディスパッチしたほうが有利なこともあるのでRustは静的と動的のどちらも選べる
それはRustが最高速を出すために
ジェネリクスを具体的な型に対してコンパイル時に静的にモノモーフィングするからであって利点の一つ
もちろん稀なケースでは動的にディスパッチしたほうが有利なこともあるのでRustは静的と動的のどちらも選べる
399デフォルトの名無しさん
2022/02/28(月) 23:58:18.16ID:pJo2hpV4400デフォルトの名無しさん
2022/03/01(火) 00:00:29.40ID:MT73K7Vw >>399
はい、嘘乙w
はい、嘘乙w
401デフォルトの名無しさん
2022/03/01(火) 00:02:10.33ID:MT73K7Vw402デフォルトの名無しさん
2022/03/01(火) 00:35:18.37ID:I7tVqKwp403デフォルトの名無しさん
2022/03/01(火) 06:36:40.86ID:kkFVnbRG ポインタ繋ぎ変えるのはRustでは面倒です←まあわかる
ポインタ繋ぎ変えるのはバッドプラクティスなのでアリーナ使って富豪みたいなメモリの使い方しましょう← ?????w??!???????????????????w
ポインタ繋ぎ変えるのはバッドプラクティスなのでアリーナ使って富豪みたいなメモリの使い方しましょう← ?????w??!???????????????????w
404デフォルトの名無しさん
2022/03/01(火) 18:23:47.64ID:I7tVqKwp >>403
いや何でもかんでもArena使えってことではないよ
Arenaは処理の間、メモリの解放が起こらずに解放する時はまとめて解放するようなデータ構造で使うものだよ
rustのソース読んでたらAST作る部分で使ってた
ASTはまさにそのような部品
rustのソースは学びが多すぎる
いや何でもかんでもArena使えってことではないよ
Arenaは処理の間、メモリの解放が起こらずに解放する時はまとめて解放するようなデータ構造で使うものだよ
rustのソース読んでたらAST作る部分で使ってた
ASTはまさにそのような部品
rustのソースは学びが多すぎる
405デフォルトの名無しさん
2022/03/01(火) 18:27:16.34ID:wlQMHsd9 arenaって富豪的なの?
最近のmalloc実装はarena使ってるからそれも富豪的ってこと?
最近のmalloc実装はarena使ってるからそれも富豪的ってこと?
406デフォルトの名無しさん
2022/03/01(火) 18:36:51.05ID:I7tVqKwp407デフォルトの名無しさん
2022/03/01(火) 19:11:45.23ID:wlQMHsd9 >>406
なんでslab allocatorが関係してるの?
なんでslab allocatorが関係してるの?
408デフォルトの名無しさん
2022/03/01(火) 19:31:58.30ID:kkFVnbRG >>404
ASTみたいな構造+途中で解放する必要があるって時の解がRustにないので、オレオレ実装をプロジェクトごとに入れるか、アリーナを何度も作っては捨ててを繰り返しながら世代型GCもどきを作るかするしかなくない?
これは事実上なんでもアリーナでやるってことになると思うけど
ASTみたいな構造+途中で解放する必要があるって時の解がRustにないので、オレオレ実装をプロジェクトごとに入れるか、アリーナを何度も作っては捨ててを繰り返しながら世代型GCもどきを作るかするしかなくない?
これは事実上なんでもアリーナでやるってことになると思うけど
409デフォルトの名無しさん
2022/03/01(火) 20:13:49.20ID:lFABJG9J 強力な静的型付けと言うのは普通のプログラム言語は当たり前でスクリプト崩れがそうでないだけだと思うけどなあ…
410デフォルトの名無しさん
2022/03/01(火) 20:26:25.79ID:wYBPD4DC >>408
そういうのはまさにRefCellを使うしかない
arenaはあくまで処理の間は絶対に解放されないデータ構造をまとめて確保するために使う
例えばASTだったりネットワークグラフだったりね
こういうメモリの使い方のセンスってGC言語が当たり前になったせいで完全に失われた技術って感じがする
そういうのはまさにRefCellを使うしかない
arenaはあくまで処理の間は絶対に解放されないデータ構造をまとめて確保するために使う
例えばASTだったりネットワークグラフだったりね
こういうメモリの使い方のセンスってGC言語が当たり前になったせいで完全に失われた技術って感じがする
411デフォルトの名無しさん
2022/03/01(火) 20:34:17.98ID:KSXXo2gm >>409
静的型付き言語の中でも代数的データ型や型制約のような型の表現力の違いというのはあると思うよ
静的型付き言語の中でも代数的データ型や型制約のような型の表現力の違いというのはあると思うよ
412デフォルトの名無しさん
2022/03/01(火) 20:36:04.73ID:wYBPD4DC >>408
ちなみにarenaみたいな仕組みを実はV8は実装している
HandleScopeという仕組み
これはHandleScopeが生きている間はメモリが解放されないが
HandleScopeが死ぬタイミングで全てのローカル変数のメモリが解放される
ちなみにarenaみたいな仕組みを実はV8は実装している
HandleScopeという仕組み
これはHandleScopeが生きている間はメモリが解放されないが
HandleScopeが死ぬタイミングで全てのローカル変数のメモリが解放される
413デフォルトの名無しさん
2022/03/01(火) 20:42:46.97ID:wlQMHsd9414デフォルトの名無しさん
2022/03/01(火) 20:53:08.57ID:VJyX+NRp ObjCのautoreleaseみたいなのが最初からあると楽でたすかる
415デフォルトの名無しさん
2022/03/01(火) 22:06:55.93ID:kkFVnbRG >>410
なるほど……
なるほど……
416デフォルトの名無しさん
2022/03/01(火) 22:31:05.05ID:kkFVnbRG いやRefCellはしんどいって
やっぱgcpointer復活して欲しい
やっぱgcpointer復活して欲しい
417デフォルトの名無しさん
2022/03/01(火) 23:43:07.40ID:cUOzOJ3p RefCellなんてたまにしか使わないものだし使うときも困るようなものじゃないぜ
おそらくRustのアンチが不利っぽく見えるところを取り上げようとしてるんだろうけとさ
おそらくRustのアンチが不利っぽく見えるところを取り上げようとしてるんだろうけとさ
418デフォルトの名無しさん
2022/03/01(火) 23:52:21.58ID:X64WHIwe そりゃテキトーなスクリプトで済むようなコードばっかなら使わんだろうね
419デフォルトの名無しさん
2022/03/01(火) 23:55:04.65ID:pLY9i2hK 分野にも依るんだろうけどWeb関係やってるとRefCellの出現は超レア
ライブラリの方のソースも全て見たけど
RustのHTTPデファクトスタンダードのhyperで1ヶ所だけ出現
その上のレイヤーのライブラリ群ではゼロ、HTTPS扱うhyper-tlsでもゼロ
ライブラリの方のソースも全て見たけど
RustのHTTPデファクトスタンダードのhyperで1ヶ所だけ出現
その上のレイヤーのライブラリ群ではゼロ、HTTPS扱うhyper-tlsでもゼロ
420デフォルトの名無しさん
2022/03/02(水) 00:44:16.33ID:2MKUvw25 Webだとメモリ上に状態を永続的に保つ必要はないからrust向きだよね
所有権を渡していくことで自然と安全なプログラムが書ける
永続情報はデータベースかmemcacheみたいなkvstoreに入れるし
所有権を渡していくことで自然と安全なプログラムが書ける
永続情報はデータベースかmemcacheみたいなkvstoreに入れるし
421デフォルトの名無しさん
2022/03/02(水) 01:01:39.91ID:uPKvDIET422デフォルトの名無しさん
2022/03/02(水) 01:27:42.89ID:vZCB5GJW423デフォルトの名無しさん
2022/03/02(水) 02:27:42.01ID:/7glPJ4X 循環参照が必要な時にやれることが「プログラマが注意して管理しましょう」しかないのキツくない?
424デフォルトの名無しさん
2022/03/02(水) 03:42:27.38ID:S8+3WyDZ >>423
現実に色んな分野でプログラミングするとわかるが循環参照なんてほとんどの分野で出てこないか回避できる
なぜなら現実の様々なシステムからアプリまで全てにおいて出てくるデータ構造は何らかの視点で見ると木構造になっているからである
だから非現実的な机上の空論で悩む必要はない
現実に色んな分野でプログラミングするとわかるが循環参照なんてほとんどの分野で出てこないか回避できる
なぜなら現実の様々なシステムからアプリまで全てにおいて出てくるデータ構造は何らかの視点で見ると木構造になっているからである
だから非現実的な机上の空論で悩む必要はない
425デフォルトの名無しさん
2022/03/02(水) 03:44:23.51ID:re9dUtRi グラフとか木構造になるの?
426デフォルトの名無しさん
2022/03/02(水) 03:47:03.10ID:/7glPJ4X 世界が狭い人に非現実って言われちゃった
427デフォルトの名無しさん
2022/03/02(水) 03:52:48.36ID:/7glPJ4X > なぜなら現実の様々なシステムからアプリまで全てにおいて出てくるデータ構造は何らかの視点で見ると木構造になっているからである
これが真ならベルマンフォードとか使うケースはどうなるんだ
まあ無理筋に頑張って木と同一視するのかもしらんが
これが真ならベルマンフォードとか使うケースはどうなるんだ
まあ無理筋に頑張って木と同一視するのかもしらんが
428デフォルトの名無しさん
2022/03/02(水) 03:58:19.90ID:S8+3WyDZ429デフォルトの名無しさん
2022/03/02(水) 04:07:57.82ID:S8+3WyDZ430デフォルトの名無しさん
2022/03/02(水) 04:21:43.92ID:3w84ACsj よくわかっていないけど
鉄道の路線図とか簡単にループするけど
どうするの?
鉄道の路線図とか簡単にループするけど
どうするの?
431デフォルトの名無しさん
2022/03/02(水) 04:23:18.48ID:re9dUtRi >>428
質問してるのはこっちなんだがwwww
質問してるのはこっちなんだがwwww
432デフォルトの名無しさん
2022/03/02(水) 04:38:01.52ID:S8+3WyDZ >>430
プログラミングでそういうのを扱うときに
駅の個数だけ駅ノードオブジェクトをメモリ確保して路線毎に隣接駅をポインタ(参照)で指し合う、なんてことはしない
それだと何かするたびにポインタを何度も辿りまくって遅いし
そのポインタで指し合う構造をデータベースに格納するのも大変
現実にはどう扱われているかというと
データの配列として持ってそのインデックス等で他を指す
つまりポインタ(参照)は出てこない
配列とインデックスの方が扱いやすいし、メモリアクセスも速いし、ファイルやデータベースに格納するのも容易
>>431
現実に必要となることが無いか、代替手段があるか、となり、
残る超レアケースがあるなら出してごらん
プログラミングでそういうのを扱うときに
駅の個数だけ駅ノードオブジェクトをメモリ確保して路線毎に隣接駅をポインタ(参照)で指し合う、なんてことはしない
それだと何かするたびにポインタを何度も辿りまくって遅いし
そのポインタで指し合う構造をデータベースに格納するのも大変
現実にはどう扱われているかというと
データの配列として持ってそのインデックス等で他を指す
つまりポインタ(参照)は出てこない
配列とインデックスの方が扱いやすいし、メモリアクセスも速いし、ファイルやデータベースに格納するのも容易
>>431
現実に必要となることが無いか、代替手段があるか、となり、
残る超レアケースがあるなら出してごらん
433デフォルトの名無しさん
2022/03/02(水) 04:43:14.42ID:re9dUtRi434デフォルトの名無しさん
2022/03/02(水) 04:55:17.69ID:S8+3WyDZ >>433
現実の様々なシステムからアプリまで全てにおいて出てくるデータ構造ならば
何らかの視点で見ると木構造になっている
もちろんその一番簡素なパターンである配列構造を含めてね
今のところ誰も反例を出せていない
もしあるとしても超レアケースなのだろう
現実の様々なシステムからアプリまで全てにおいて出てくるデータ構造ならば
何らかの視点で見ると木構造になっている
もちろんその一番簡素なパターンである配列構造を含めてね
今のところ誰も反例を出せていない
もしあるとしても超レアケースなのだろう
435デフォルトの名無しさん
2022/03/02(水) 04:57:49.96ID:re9dUtRi >>434
グラフとか木構造になるの?
グラフとか木構造になるの?
436デフォルトの名無しさん
2022/03/02(水) 05:01:58.37ID:S8+3WyDZ437デフォルトの名無しさん
2022/03/02(水) 05:06:59.01ID:re9dUtRi438デフォルトの名無しさん
2022/03/02(水) 05:18:20.52ID:S8+3WyDZ439デフォルトの名無しさん
2022/03/02(水) 05:23:23.57ID:re9dUtRi440デフォルトの名無しさん
2022/03/02(水) 05:32:08.74ID:2MKUvw25 言ってることは分かるよ
俺はrust書き始めてポインタを使わないプログラミングをするようになった
C/C++に毒れてたことに気がついた
例えば木構造も配列とインデックスで同じことをやるように書き直した
昔のAhoやUllmanのアルゴリズムの本はポインタを前提にしてないから
配列とインデックスを使ってアルゴリズムを書いてる
その本を引っ張り出してきて読み直したりした
まさか現代において70年代に書かれた本を参考にするとは思わなかった
俺はrust書き始めてポインタを使わないプログラミングをするようになった
C/C++に毒れてたことに気がついた
例えば木構造も配列とインデックスで同じことをやるように書き直した
昔のAhoやUllmanのアルゴリズムの本はポインタを前提にしてないから
配列とインデックスを使ってアルゴリズムを書いてる
その本を引っ張り出してきて読み直したりした
まさか現代において70年代に書かれた本を参考にするとは思わなかった
441デフォルトの名無しさん
2022/03/02(水) 05:45:14.10ID:re9dUtRi >>438は「分からない」ようだから話を進めると、グラフ構造は木構造にはならない
なぜなら、木構造はグラフ構造の一種だからw
グラフ構造を単純に実装すると、親ノードが子ノードを参照する形になり、簡単に循環参照を発生する
そういうこともあり、古来通常の実装はノードから直接参照するのではなく、エッジというものを用意し
各コンテナに保存した上で参照先をコンテナのキーにすることで表現する
つまり循環参照は簡単に発生し、それを回避する努力を惜しまない必要がある
>>423の言う通り、まさに
> 循環参照が必要な時にやれることが「プログラマが注意して管理しましょう」
であることが明確に分かる
これをろくに議論もできない頭で否定するものではないw
なぜなら、木構造はグラフ構造の一種だからw
グラフ構造を単純に実装すると、親ノードが子ノードを参照する形になり、簡単に循環参照を発生する
そういうこともあり、古来通常の実装はノードから直接参照するのではなく、エッジというものを用意し
各コンテナに保存した上で参照先をコンテナのキーにすることで表現する
つまり循環参照は簡単に発生し、それを回避する努力を惜しまない必要がある
>>423の言う通り、まさに
> 循環参照が必要な時にやれることが「プログラマが注意して管理しましょう」
であることが明確に分かる
これをろくに議論もできない頭で否定するものではないw
442デフォルトの名無しさん
2022/03/02(水) 05:48:19.98ID:ZvwBufG6 配列とインデックスを使うとして、ある要素のインデックスを取った後にその要素が削除されるとそのインデックスが想定していない要素を指すことになるじゃん。そういうのはみんなどうやって防いでいるの?
あと、双方向リンクドリストって普通に実装すると循環参照になるけどこれも配列とインデックスでやるの?
あと、双方向リンクドリストって普通に実装すると循環参照になるけどこれも配列とインデックスでやるの?
443デフォルトの名無しさん
2022/03/02(水) 05:52:14.90ID:re9dUtRi 原理的には整合が取れない状態にならないように操作がatomicになるように実装する
もちろん実装方法なので、構造を変えたり、方法は具体的にはいろいろあるよ
もちろん実装方法なので、構造を変えたり、方法は具体的にはいろいろあるよ
444デフォルトの名無しさん
2022/03/02(水) 06:14:19.31ID:S8+3WyDZ >>441
そこまでアホとは思わなかったw
一般的なグラフが木構造にならないのは当たり前だろ
まさかそんなことを言いたいがためにこちらの質問に回答できなかったのかw
呆れた
現実に色んな分野でプログラミングするとわかるが循環参照なんてほとんどの分野で出てこないか回避できて残りはレアケース
なぜなら現実の様々なシステムからアプリまで全てにおいて出てくるデータ構造は何らかの視点で見ると木構造になっているからである
さらに既に例で示したようにベルマンフォード法などのグラフにおけるアルゴリズムを扱う場合も現実のプログラミングでは配列として扱われている
だからそんな非現実的な机上の空論で悩む必要はない
>>442
そういうレアケースのために
Rustでは双方向リンクドリストも含めて標準ライブラリに用意されている
その上で注意書きとしてほとんどのケースではリンクドリストを使うよりも配列やリングバッファ(RustではVecDeque)を使った方が有利と明記している
これは言語に関係なく成り立つ話
そこまでアホとは思わなかったw
一般的なグラフが木構造にならないのは当たり前だろ
まさかそんなことを言いたいがためにこちらの質問に回答できなかったのかw
呆れた
現実に色んな分野でプログラミングするとわかるが循環参照なんてほとんどの分野で出てこないか回避できて残りはレアケース
なぜなら現実の様々なシステムからアプリまで全てにおいて出てくるデータ構造は何らかの視点で見ると木構造になっているからである
さらに既に例で示したようにベルマンフォード法などのグラフにおけるアルゴリズムを扱う場合も現実のプログラミングでは配列として扱われている
だからそんな非現実的な机上の空論で悩む必要はない
>>442
そういうレアケースのために
Rustでは双方向リンクドリストも含めて標準ライブラリに用意されている
その上で注意書きとしてほとんどのケースではリンクドリストを使うよりも配列やリングバッファ(RustではVecDeque)を使った方が有利と明記している
これは言語に関係なく成り立つ話
445デフォルトの名無しさん
2022/03/02(水) 06:20:20.10ID:re9dUtRi >>444
そんな単純なことが返事できなかったのはお前だろwwww
そんな頭で「非現実的な机上の空論」とか言ってる場合じゃない
循環参照問題はレアケースではなく明確で常に回避を必要とし、各分野で日々回避方法が研鑽されている
Rustも例外ではない
そんな単純なことが返事できなかったのはお前だろwwww
そんな頭で「非現実的な机上の空論」とか言ってる場合じゃない
循環参照問題はレアケースではなく明確で常に回避を必要とし、各分野で日々回避方法が研鑽されている
Rustも例外ではない
446デフォルトの名無しさん
2022/03/02(水) 06:39:13.56ID:S8+3WyDZ >>445
そんな当たり前のことをわざわざ尋ねてくるほど君が低レベルとはその時は想定していなかった
結局のところ君は具体的な反例を出せずに非現実的な机上の空論を続けるだけなのかね
現実の様々なシステムからアプリまで様々なものにおいて出てくるデータ構造は何らかの視点で見ると木構造になっているものがほとんどであり循環参照で悩む必要はない
一般的なグラフ上の各種アルゴリズムについても配列上のデータとして扱われるのが通常
ポインタで指し合うデータ構造をとってもポインタを何度もたどるのはメモリアクセスで不利でキャッシュ的にも不利であり、もちろん永続化として格納する時も同じく
そんな当たり前のことをわざわざ尋ねてくるほど君が低レベルとはその時は想定していなかった
結局のところ君は具体的な反例を出せずに非現実的な机上の空論を続けるだけなのかね
現実の様々なシステムからアプリまで様々なものにおいて出てくるデータ構造は何らかの視点で見ると木構造になっているものがほとんどであり循環参照で悩む必要はない
一般的なグラフ上の各種アルゴリズムについても配列上のデータとして扱われるのが通常
ポインタで指し合うデータ構造をとってもポインタを何度もたどるのはメモリアクセスで不利でキャッシュ的にも不利であり、もちろん永続化として格納する時も同じく
447デフォルトの名無しさん
2022/03/02(水) 06:42:03.58ID:re9dUtRi 俺が言ってるのは循環参照問題は重大な問題であるということw
反論出来てないのはお前w
Rustの標準ライブラリはunsafeのオンパレードだなw
反論出来てないのはお前w
Rustの標準ライブラリはunsafeのオンパレードだなw
448デフォルトの名無しさん
2022/03/02(水) 07:11:01.35ID:jfLsV1Py >>447
その最後の行「Rustの標準ライブラリはunsafeのオンパレードだなw」によって
あなたがプログラミングについて無知だと判明しました
言語関係なく一般的にその「unsafeな操作」無しではプログラミングは成立しません
そのため各プログラミング言語はその「unsafeな操作」を様々な方法で閉じ込めようとしたり
あるいはC/C++のように全開放して全てをプログラマーの自己責任としたりしています
いずれにしても各言語の内部では「unsafeな操作」が当然ながら頻出となります
一方でRustでは従来にない以下の方針を取ることにしました
・GCを言語としては採用しない
・それにも関わらずプログラム全体のメモリ安全性をコンパイラが保証できるようにする
・必ず残る必須な「unsafeな操作」は型やモジュールの外に影響が出ないよう内部に閉じ込める
・その型やモジュールが外に提供するインタフェースは(unsafe宣言されているものを除いて)安全に提供する
つまりプログラミングをする上で避けることができない「unsafeな操作」を
C/C++のように(結果的に)プログラム全体に散りばめてしまうのではなく
ライブラリなどの内部に完全に閉じ込めて外に影響が出ない安全なインタフェースのみ提供することにしたのです
Rustはこの方針によってプログラミングに不可欠な必須の「unsafeな操作」なだけでなく
実行効率の良さのための「unsafeな操作」も型やモジュールの内部に閉じこめることが可能となりました
そして安全なだけでなく速さも両立することに成功しました
その最後の行「Rustの標準ライブラリはunsafeのオンパレードだなw」によって
あなたがプログラミングについて無知だと判明しました
言語関係なく一般的にその「unsafeな操作」無しではプログラミングは成立しません
そのため各プログラミング言語はその「unsafeな操作」を様々な方法で閉じ込めようとしたり
あるいはC/C++のように全開放して全てをプログラマーの自己責任としたりしています
いずれにしても各言語の内部では「unsafeな操作」が当然ながら頻出となります
一方でRustでは従来にない以下の方針を取ることにしました
・GCを言語としては採用しない
・それにも関わらずプログラム全体のメモリ安全性をコンパイラが保証できるようにする
・必ず残る必須な「unsafeな操作」は型やモジュールの外に影響が出ないよう内部に閉じ込める
・その型やモジュールが外に提供するインタフェースは(unsafe宣言されているものを除いて)安全に提供する
つまりプログラミングをする上で避けることができない「unsafeな操作」を
C/C++のように(結果的に)プログラム全体に散りばめてしまうのではなく
ライブラリなどの内部に完全に閉じ込めて外に影響が出ない安全なインタフェースのみ提供することにしたのです
Rustはこの方針によってプログラミングに不可欠な必須の「unsafeな操作」なだけでなく
実行効率の良さのための「unsafeな操作」も型やモジュールの内部に閉じこめることが可能となりました
そして安全なだけでなく速さも両立することに成功しました
449デフォルトの名無しさん
2022/03/02(水) 07:19:39.02ID:re9dUtRi いやいや、普通unsafeなコードというのは外部とのやり取りの薄皮一枚だけで収まるはずなんだがw
Rustだと都合により内側でも使います!
みたいな使い方で、標準ライブラリの中ではやりたい放題されてるように見えるってことw
ベアメタルとかになると標準ライブラリも使えないわけで、薄皮一枚だけunsafeにしても足りず泣く泣くunsafeを使う羽目になり、、、
安全とは一体・・・になりそうってことなんだわw
Rustだと都合により内側でも使います!
みたいな使い方で、標準ライブラリの中ではやりたい放題されてるように見えるってことw
ベアメタルとかになると標準ライブラリも使えないわけで、薄皮一枚だけunsafeにしても足りず泣く泣くunsafeを使う羽目になり、、、
安全とは一体・・・になりそうってことなんだわw
450デフォルトの名無しさん
2022/03/02(水) 07:27:54.59ID:jfLsV1Py >>449
そんなに無知を曝け出さないほうがいいと思いますよ
「unsafeな操作」とは何か、そしてその避けられない操作に対してRustがどのように
並行並列環境に至るまでメモリ安全性の保証を実現させたのか勉強するのをお勧めします
そんなに無知を曝け出さないほうがいいと思いますよ
「unsafeな操作」とは何か、そしてその避けられない操作に対してRustがどのように
並行並列環境に至るまでメモリ安全性の保証を実現させたのか勉強するのをお勧めします
451デフォルトの名無しさん
2022/03/02(水) 07:30:04.06ID:re9dUtRi 所有権と速度の問題を回避するためにunsafeに走ってませんか????w
452デフォルトの名無しさん
2022/03/02(水) 09:17:36.83ID:uPKvDIET >>449
ベアメタルでliballocは使えるからデータ構造を再実装しないといけないケースはあまりないのでは?
ベアメタルでliballocは使えるからデータ構造を再実装しないといけないケースはあまりないのでは?
453デフォルトの名無しさん
2022/03/02(水) 09:26:05.15ID:bQ8fspy2 >>440
温故知新ですな
温故知新ですな
454デフォルトの名無しさん
2022/03/02(水) 09:36:25.73ID:bQ8fspy2455デフォルトの名無しさん
2022/03/02(水) 10:24:25.41ID:/7glPJ4X >>432
結局データの配列として持つことになるのはわかるけど、それって指す先が存在するか分からないから実質ポインタとやってること同じだし、途中で要素削除があるとインデックスの整合性保つのに一苦労するじゃん
まあ君にとっては「レアケース」であり「現実に必要となることが存在しない」のかもしれんが、実際に存在するとだけは言っておくわ
あと、配列とインデックスの方がメモリアクセスも速いってのはわからんかった。配列とインデックスの方がポインタより速いってなんでだろ
結局データの配列として持つことになるのはわかるけど、それって指す先が存在するか分からないから実質ポインタとやってること同じだし、途中で要素削除があるとインデックスの整合性保つのに一苦労するじゃん
まあ君にとっては「レアケース」であり「現実に必要となることが存在しない」のかもしれんが、実際に存在するとだけは言っておくわ
あと、配列とインデックスの方がメモリアクセスも速いってのはわからんかった。配列とインデックスの方がポインタより速いってなんでだろ
456デフォルトの名無しさん
2022/03/02(水) 10:28:21.60ID:/7glPJ4X まあベルマンフォードする前に配列とインデックスの形式に変換するくらいのことは出来るけど、結局その前段階のミュータブルなグラフを配列とインデックスで管理するのはキツい
アリーナでオレオレ世代型GCモドキを作った方がまだマシ
アリーナでオレオレ世代型GCモドキを作った方がまだマシ
457デフォルトの名無しさん
2022/03/02(水) 10:32:20.03ID:/7glPJ4X あとは配列とインデックスの代わりにHashMapとkeyにするとかかな?
458デフォルトの名無しさん
2022/03/02(水) 10:38:44.95ID:ywlh+FF4 配列とインデックスってすげーunsafeなコードだよな
unsafeブロックの外側でunsafeな処理をしている分余計性質が悪い
unsafeブロックの外側でunsafeな処理をしている分余計性質が悪い
459デフォルトの名無しさん
2022/03/02(水) 11:04:57.08ID:uPKvDIET460デフォルトの名無しさん
2022/03/02(水) 11:42:21.29ID:bQ8fspy2461デフォルトの名無しさん
2022/03/02(水) 12:43:54.27ID:jfLsV1Py グラフなどのノード構成において
他のノードを指す方法として「idを用いる」のと「ポインタを用いる」のは完全に同型
というのがプログラミングでの常識です
同型というのは通常の管理からダングリングの発生やその防止も含めて同型です
配列に格納してそのインデックス方式も「idを用いる」方式の一種ですから
これも当然「ポインタを用いる」のと完全に同型です
どちらか片方の管理方法がキツイと言ってる人は完全に間違っています
これはGCを考慮した場合についても完全に同型です
誰もそのポインタを指さなくなったことと誰もそのidを指さなくなったことが対応します
したがって配列とインデックスで管理することで管理がキツくなることはありません
そしてGCをする場合も全く同型なので同じ方式同じアルゴリズムで互いに行うことができます
他のノードを指す方法として「idを用いる」のと「ポインタを用いる」のは完全に同型
というのがプログラミングでの常識です
同型というのは通常の管理からダングリングの発生やその防止も含めて同型です
配列に格納してそのインデックス方式も「idを用いる」方式の一種ですから
これも当然「ポインタを用いる」のと完全に同型です
どちらか片方の管理方法がキツイと言ってる人は完全に間違っています
これはGCを考慮した場合についても完全に同型です
誰もそのポインタを指さなくなったことと誰もそのidを指さなくなったことが対応します
したがって配列とインデックスで管理することで管理がキツくなることはありません
そしてGCをする場合も全く同型なので同じ方式同じアルゴリズムで互いに行うことができます
462デフォルトの名無しさん
2022/03/02(水) 12:50:37.42ID:6P1w2PJ+ 常識かあ
463デフォルトの名無しさん
2022/03/02(水) 13:01:35.27ID:re9dUtRi464デフォルトの名無しさん
2022/03/02(水) 13:02:55.52ID:re9dUtRi あと主旨は>>451だぞ
465デフォルトの名無しさん
2022/03/02(水) 13:23:30.55ID:S8+3WyDZ >>461
それは全て正しいが
現実にはそこに付け加えるべき重要な事項がある
GCのコードを書くとわかるが使われたidの一覧が必ず必要となる
ポインタ方式ならば使われたポインタの一覧が必ず必要となる
インデックス方式ならば使われたインデックスの一覧が必要となる
すると『使われたポインタの一覧を管理するコスト』よりも
『使われたインデックスの一覧を管理するコスト(=最大インデックスまで)』がはるかにコストが低い
つまりGCをする場合でもインデックス方式が有利となる
もちろんそれ以外のアルゴリズムなどは同型なので同じという点には同意
それは全て正しいが
現実にはそこに付け加えるべき重要な事項がある
GCのコードを書くとわかるが使われたidの一覧が必ず必要となる
ポインタ方式ならば使われたポインタの一覧が必ず必要となる
インデックス方式ならば使われたインデックスの一覧が必要となる
すると『使われたポインタの一覧を管理するコスト』よりも
『使われたインデックスの一覧を管理するコスト(=最大インデックスまで)』がはるかにコストが低い
つまりGCをする場合でもインデックス方式が有利となる
もちろんそれ以外のアルゴリズムなどは同型なので同じという点には同意
466デフォルトの名無しさん
2022/03/02(水) 13:37:04.28ID:YHOWtvAG467デフォルトの名無しさん
2022/03/02(水) 13:59:21.59ID:jfLsV1Py468デフォルトの名無しさん
2022/03/02(水) 14:08:49.30ID:AHCbeeLg だんだん話がオレオレGCになってきたな
結局GCは必要なんだよ
必ずしも標準に入ってる必要はないが、優秀はGCライブラリが存在しないのはかなり痛い
結局GCは必要なんだよ
必ずしも標準に入ってる必要はないが、優秀はGCライブラリが存在しないのはかなり痛い
469デフォルトの名無しさん
2022/03/02(水) 14:23:16.86ID:jfLsV1Py >>468
いいえ、GCは必ずしも必要あるわけではありません
GCが必要になるのは少なくとも以下の2点を満たす必要があります
・継続して動作させる必要がある
・使われていないメモリが有意に存在している
例えばGC言語であっても前者の継続動作が必要なければGCさせないモードで動かすケースもあります
一方で後者はGC言語であれば常に使われていないメモリが溜まっていきます
しかし非GC言語ではたいていの場合はメモリ開放をすることができるためGCは不要です
どうしても循環強参照を起こしたいというかなり特殊な状況でなければGCが必要になることはないでしょう
いいえ、GCは必ずしも必要あるわけではありません
GCが必要になるのは少なくとも以下の2点を満たす必要があります
・継続して動作させる必要がある
・使われていないメモリが有意に存在している
例えばGC言語であっても前者の継続動作が必要なければGCさせないモードで動かすケースもあります
一方で後者はGC言語であれば常に使われていないメモリが溜まっていきます
しかし非GC言語ではたいていの場合はメモリ開放をすることができるためGCは不要です
どうしても循環強参照を起こしたいというかなり特殊な状況でなければGCが必要になることはないでしょう
470デフォルトの名無しさん
2022/03/02(水) 14:32:11.16ID:AHCbeeLg あ、循環参照はかなり特殊な条件派のひとだったか
じゃあ話すことはないや
じゃあ話すことはないや
471デフォルトの名無しさん
2022/03/02(水) 14:34:46.39ID:2MKUvw25 >>468
C++に謝れ
C++に謝れ
472デフォルトの名無しさん
2022/03/02(水) 14:44:37.86ID:QVLaCsUw C++用のGCライブラリは実在してるだろ
473デフォルトの名無しさん
2022/03/02(水) 14:56:29.68ID:jfLsV1Py >>470
循環強参照を起こしたいかなり特殊な状況であっても
プログラムを継続して動作させる必要がなければGCは不要です
これは広義にはプログラム自体は継続してもその構造が長期継続しなければ成り立ちます
例えばRustならばtyped_arenaなどを用いればその構造の利用を終える際に一気に全体を消去可能です
また別の視点からはデータが単調増加ならば不要部分が発生しないのでこれもGCは不要です
これら全ての条件を相反するような条件が全て揃った時のみGCが必要となるでしょう
もしそのような具体的なケースが頻繁に多数有るならば教えていただけると勉強になりますのでよろしくお願いします
循環強参照を起こしたいかなり特殊な状況であっても
プログラムを継続して動作させる必要がなければGCは不要です
これは広義にはプログラム自体は継続してもその構造が長期継続しなければ成り立ちます
例えばRustならばtyped_arenaなどを用いればその構造の利用を終える際に一気に全体を消去可能です
また別の視点からはデータが単調増加ならば不要部分が発生しないのでこれもGCは不要です
これら全ての条件を相反するような条件が全て揃った時のみGCが必要となるでしょう
もしそのような具体的なケースが頻繁に多数有るならば教えていただけると勉強になりますのでよろしくお願いします
474デフォルトの名無しさん
2022/03/02(水) 15:05:14.83ID:AHCbeeLg なんで特殊な条件派を説得しにかからず初手会話放棄するかというと、仕事で使っていておいそれとネットに晒せないからですね
なので秘密を打ち明けなくても前提に同意してくれている人とのみ話す訳ですよ
なので秘密を打ち明けなくても前提に同意してくれている人とのみ話す訳ですよ
475デフォルトの名無しさん
2022/03/02(水) 15:13:30.85ID:S8+3WyDZ476デフォルトの名無しさん
2022/03/02(水) 15:16:36.71ID:AHCbeeLg >>475
一般的な話をすると増えたり減ったりする双方向グラフを更新し続けて持ち続けるという要件になるな
それ以上の説明を求められると何に使うのかという話をすることになり、俺の仕事の説明をすることになる
一般的な話をすると増えたり減ったりする双方向グラフを更新し続けて持ち続けるという要件になるな
それ以上の説明を求められると何に使うのかという話をすることになり、俺の仕事の説明をすることになる
477デフォルトの名無しさん
2022/03/02(水) 15:18:35.45ID:AHCbeeLg 「一般的な用途」というのがどういう定義なのかしらんが、「Rustで簡単に出来る範囲を一般的と呼ぶ」と恣意的に定義するのであれば俺もその派に入れてくれて良いよ
478デフォルトの名無しさん
2022/03/02(水) 15:32:26.52ID:jfLsV1Py >>476
それならばその双方向グラフの安全な型を作るのがベストソリューションです
ちなみになぜそのような一般的なライブラリがないかというと各々で求められる条件が異なるからです
あなたの場合は求められる条件が確定しているのですからそれを満たす双方向グラフの安全な型を実装できます
例えばノードが削除される場合もその際の条件やその後の処理が独自に確定しているはずです
したがってそれを元に双方向グラフの安全な型を実装して安全なインタフェースのみ提供すればいいのです
そうすればRustのコンパイラに対してもプログラム全体が安全に通るでしょう
そして循環参照についてもその双方向グラフの安全な型が責任を持って取り扱えばよいのです
汎用的なGCは不要でその状況に特化したものを用意すればいいだけなので容易に実現できると思います
それならばその双方向グラフの安全な型を作るのがベストソリューションです
ちなみになぜそのような一般的なライブラリがないかというと各々で求められる条件が異なるからです
あなたの場合は求められる条件が確定しているのですからそれを満たす双方向グラフの安全な型を実装できます
例えばノードが削除される場合もその際の条件やその後の処理が独自に確定しているはずです
したがってそれを元に双方向グラフの安全な型を実装して安全なインタフェースのみ提供すればいいのです
そうすればRustのコンパイラに対してもプログラム全体が安全に通るでしょう
そして循環参照についてもその双方向グラフの安全な型が責任を持って取り扱えばよいのです
汎用的なGCは不要でその状況に特化したものを用意すればいいだけなので容易に実現できると思います
479デフォルトの名無しさん
2022/03/02(水) 15:45:33.96ID:AHCbeeLg480デフォルトの名無しさん
2022/03/02(水) 15:46:04.46ID:re9dUtRi $ cat hoge.sh
cat >hoge.rs <<EOF
// unsafeって宣言に出てこないし安全に決まってるよ!
fn read_address_4byte(address: usize) -> i32 {
unsafe {
*(address as *const i32)
}
}
// 流石Rust安全だな!
fn main() {
read_address_4byte(0);
}
EOF
rustc hoge.rs && ./hoge
$ bash hoge.sh
hoge.sh: 13 行: 124161 Segmentation fault (コアダンプ) ./hoge
$
cat >hoge.rs <<EOF
// unsafeって宣言に出てこないし安全に決まってるよ!
fn read_address_4byte(address: usize) -> i32 {
unsafe {
*(address as *const i32)
}
}
// 流石Rust安全だな!
fn main() {
read_address_4byte(0);
}
EOF
rustc hoge.rs && ./hoge
$ bash hoge.sh
hoge.sh: 13 行: 124161 Segmentation fault (コアダンプ) ./hoge
$
481デフォルトの名無しさん
2022/03/02(水) 15:58:09.24ID:jfLsV1Py482デフォルトの名無しさん
2022/03/02(水) 15:59:49.43ID:AHCbeeLg >>481
あー。まあそれはそうね外側でもunsafeなのは頂けないたしかに
あー。まあそれはそうね外側でもunsafeなのは頂けないたしかに
483デフォルトの名無しさん
2022/03/02(水) 16:02:47.42ID:re9dUtRi あれぇ・・・コンパイル通ってないと実行できないんだけどなぁwwww
エラーも何も出てこないんだけどなぁwwww
安全とは???
Rustが安全!?
何をご冗談をw
エラーも何も出てこないんだけどなぁwwww
安全とは???
Rustが安全!?
何をご冗談をw
484デフォルトの名無しさん
2022/03/02(水) 17:00:29.10ID:YHOWtvAG 教官「GC無しで手動メモリ管理してきた言語だ、面構えが違う」
C/C++/Rust「( ゚ω゚ )」
C/C++/Rust「( ゚ω゚ )」
485デフォルトの名無しさん
2022/03/02(水) 17:26:12.32ID:2MKUvw25 おじさん来た?
スレの質が一気に下がるな
スレの質が一気に下がるな
486デフォルトの名無しさん
2022/03/02(水) 17:53:39.61ID:jfLsV1Py >>482
そう
外側ではunsafeを使わない
その上で今回のケースはその独自仕様の双方向グラフの「安全な」型を作れば、Rustではプログラム全体の安全性が保証されます
そして「安全な」型を作るには
・型が外へ提供する「安全な」インターフェイス群を用いる限り、それらをどのように用いても、型の内部に矛盾や危険な状態を生じさせないこと
・たとえ型の内部でunsafeな操作が存在していても、型の外へは影響せずに内部に封じ込められていること
このような形で新たな型を実装することで全体を安全に解決できるところが他の言語にはないRustの特徴でしょう
そう
外側ではunsafeを使わない
その上で今回のケースはその独自仕様の双方向グラフの「安全な」型を作れば、Rustではプログラム全体の安全性が保証されます
そして「安全な」型を作るには
・型が外へ提供する「安全な」インターフェイス群を用いる限り、それらをどのように用いても、型の内部に矛盾や危険な状態を生じさせないこと
・たとえ型の内部でunsafeな操作が存在していても、型の外へは影響せずに内部に封じ込められていること
このような形で新たな型を実装することで全体を安全に解決できるところが他の言語にはないRustの特徴でしょう
487デフォルトの名無しさん
2022/03/02(水) 18:05:00.35ID:/7glPJ4X まあGCライブラリさえあれば双方向グラフも簡単に作れるんですけどね
Javaくらいの出来のGCライブラリがついたら最強
Javaくらいの出来のGCライブラリがついたら最強
488デフォルトの名無しさん
2022/03/02(水) 18:30:26.52ID:nWwg4aea Rustには静的型付けがあるすげー ← スクリプトから来た人
Rustは強力な型推論がある ← スクリプトかC++から来た人
こういう主張をする人は世間知らず
つまり雑魚
Rustは強力な型推論がある ← スクリプトかC++から来た人
こういう主張をする人は世間知らず
つまり雑魚
489デフォルトの名無しさん
2022/03/02(水) 18:40:10.58ID:uPKvDIET 関数型言語以外の型推論は大体が変数の型や戻り値型の推論で、HM型推論採用してる言語ってあまりない気がする
もしそうならば非関数型言語にしてはRustは型推論が強力と言っても良いのでは
もしそうならば非関数型言語にしてはRustは型推論が強力と言っても良いのでは
490デフォルトの名無しさん
2022/03/02(水) 18:42:57.57ID:re9dUtRi お猿さんは『「安全な」型を作れば、Rustではプログラム全体の安全性が保証されます』などと宣っているが、それは言語で保証しているのではなく、プログラマが手で保証しているに過ぎないw
つまりunsafeなブロックを少しでも含むものはC/C++と変わらないわけで、それを使っている部分も、どこでどう使うものなのか分からない限りC/C++と変わらないということw
さらに悪質なのは、Rustの外のライブラリなどunsafeな何かを呼び出しているわけでもないのに、自前で破壊的なコードを内包できる仕組みw
こうなると、もう外面だけでは分からないわけで、Rustの安全神話は完全に崩壊するw
またこのような状況に拍車をかけているのが自前で破壊的なコードを内包する動機になりやすい所有権の概念w
安全性の根幹をなす部分であるにも関わらず、双方向参照への例外なく簡単に適用可能な安全かつ高速な対応方法が存在していないw
これはプログラマに対してunsafeへの誘惑を助長する形で、逆に安全神話の崩壊を招いているw
まあRustは数ある実装言語の1つとして今後も使っていくとは思うけど、何でもRustに肩入れするお猿さんとはちゃんと線を引いていきたいw
つまりunsafeなブロックを少しでも含むものはC/C++と変わらないわけで、それを使っている部分も、どこでどう使うものなのか分からない限りC/C++と変わらないということw
さらに悪質なのは、Rustの外のライブラリなどunsafeな何かを呼び出しているわけでもないのに、自前で破壊的なコードを内包できる仕組みw
こうなると、もう外面だけでは分からないわけで、Rustの安全神話は完全に崩壊するw
またこのような状況に拍車をかけているのが自前で破壊的なコードを内包する動機になりやすい所有権の概念w
安全性の根幹をなす部分であるにも関わらず、双方向参照への例外なく簡単に適用可能な安全かつ高速な対応方法が存在していないw
これはプログラマに対してunsafeへの誘惑を助長する形で、逆に安全神話の崩壊を招いているw
まあRustは数ある実装言語の1つとして今後も使っていくとは思うけど、何でもRustに肩入れするお猿さんとはちゃんと線を引いていきたいw
491デフォルトの名無しさん
2022/03/02(水) 18:47:26.04ID:uPKvDIET https://www.thecodedmessage.com/posts/unsafe/
> “If you have to use unsafe to write good Rust, then Rust isn’t a safe language after all! It’s a cute effort, but it’s failing at its purpose! Might as well use C++ like a Real Programmer!”
このブログでstrawmanとして挙げられてる主張そのまんまじゃん
まずは議論のベースラインとしてこの記事読もうぜ
> “If you have to use unsafe to write good Rust, then Rust isn’t a safe language after all! It’s a cute effort, but it’s failing at its purpose! Might as well use C++ like a Real Programmer!”
このブログでstrawmanとして挙げられてる主張そのまんまじゃん
まずは議論のベースラインとしてこの記事読もうぜ
492デフォルトの名無しさん
2022/03/02(水) 18:57:48.03ID:jfLsV1Py >>490
全然違いますよ
CやC++ではunsafeなコードがプログラム全体に散らばってしまうため複雑になればなるほど人間にはどうしようもなくなります
一方でRustではunsafeなコードを各ライブラリや各型の中に封じ込めて外へはその影響を及ぼさないことを保証するだけでいいのです
あとはプログラム全体がどんなに大きく複雑になろうともコンパイラが安全性を保証してくれます
全然違いますよ
CやC++ではunsafeなコードがプログラム全体に散らばってしまうため複雑になればなるほど人間にはどうしようもなくなります
一方でRustではunsafeなコードを各ライブラリや各型の中に封じ込めて外へはその影響を及ぼさないことを保証するだけでいいのです
あとはプログラム全体がどんなに大きく複雑になろうともコンパイラが安全性を保証してくれます
493デフォルトの名無しさん
2022/03/02(水) 19:01:56.37ID:nWwg4aea Rustの推論はプログラム追記で破綻する
後方で馬鹿が型を間違えて追記した場合予想した結果と異なる結果になる
しかもエラーが出ない
仕様が悪い
後方で馬鹿が型を間違えて追記した場合予想した結果と異なる結果になる
しかもエラーが出ない
仕様が悪い
494デフォルトの名無しさん
2022/03/02(水) 19:05:48.62ID:S8+3WyDZ >>493
Rustは孤児ルールがあるからそんなことは無理だぜ
Rustは孤児ルールがあるからそんなことは無理だぜ
495デフォルトの名無しさん
2022/03/02(水) 19:16:11.77ID:re9dUtRi >>492
それが実際に違ってなくて同じという主張だろw 日本語読めないのかよw
それが実際に違ってなくて同じという主張だろw 日本語読めないのかよw
496デフォルトの名無しさん
2022/03/02(水) 19:31:49.02ID:2WElNNHW 会社でいたら距離置きたいな…
497デフォルトの名無しさん
2022/03/02(水) 19:39:09.37ID:re9dUtRi >>491
クソ長い英文読まされた上に被ってる部分が全くなかった悲しみ
クソ長い英文読まされた上に被ってる部分が全くなかった悲しみ
498デフォルトの名無しさん
2022/03/02(水) 20:09:18.80ID:0VCZHlOm499デフォルトの名無しさん
2022/03/02(水) 20:11:07.76ID:6P1w2PJ+ 底辺プログラマにunsafeを使わせないってことで安心安全になる仕組みなんだね
500デフォルトの名無しさん
2022/03/02(水) 20:20:58.51ID:re9dUtRi より正確には底辺プログラマや広範囲な用件にRustを勧めないことで、双方向参照要件などの対応に破壊的なコードを混入させない/混入しても経験豊富なC/C++プログラマが書くコードに匹敵する品質にさせることで、安心安全になる仕組みw
501デフォルトの名無しさん
2022/03/02(水) 20:25:05.11ID:re9dUtRi >>498
その程度で出来ってなんだよwwww
その程度で出来ってなんだよwwww
502デフォルトの名無しさん
2022/03/02(水) 21:26:39.54ID:uPKvDIET >>497
読んでくれてありがとうございます。
読んでくれてありがとうございます。
503デフォルトの名無しさん
2022/03/02(水) 22:40:07.92ID:nWwg4aea Rustはお馬鹿さんには使えない
それが一番の参入障壁
それが一番の参入障壁
504デフォルトの名無しさん
2022/03/02(水) 22:42:38.46ID:8rl40gQE505デフォルトの名無しさん
2022/03/02(水) 23:57:29.40ID:re9dUtRi out-of-boundsとsegmentation faultは違うw
前者はsafeかつ検出可能な実装ミスで、後者は検出可能か不明な未定義動作w
前者はsafeかつ検出可能な実装ミスで、後者は検出可能か不明な未定義動作w
506デフォルトの名無しさん
2022/03/03(木) 00:22:39.48ID:CxPtyFsv rustがむずかしいお陰で仕事あるからその点はありがたいね
507デフォルトの名無しさん
2022/03/03(木) 00:47:10.38ID:XF08VSWD え、そう?
まだRustの案件少なすぎひん?
まだRustの案件少なすぎひん?
508デフォルトの名無しさん
2022/03/03(木) 02:41:24.89ID:sMoqT2I4 ないこともないが限りなく地雷くさい
509デフォルトの名無しさん
2022/03/03(木) 08:01:02.29ID:PSnBqABg510デフォルトの名無しさん
2022/03/03(木) 09:55:48.59ID:hTxF5AaQ プログラミングできます→馬鹿の可能性あり
Rustできます→ステータスになると勘違いした馬鹿確定
Rustできます→ステータスになると勘違いした馬鹿確定
511デフォルトの名無しさん
2022/03/03(木) 10:16:01.15ID:sMoqT2I4 実際問題、言語知識の有無なんかよりもそういう無駄なプライドのがよっぽど開発の邪魔をするからな。
512デフォルトの名無しさん
2022/03/03(木) 11:35:08.39ID:hTTcwRYV アマチュアがステータス目的で手を出す言語:C++, Haskell, Scheme
ドカタが生きるために手に取る言語:Java, JS, php
情報系出身が身につけていがちな言語:C, C++, Pascal, Prolog, Emacs Lisp
電気屋さんが必要にかられて手を出す言語:C
測定機器に囲まれてる人が手を出しがちな言語:matlab, LabVIEW
ドカタが生きるために手に取る言語:Java, JS, php
情報系出身が身につけていがちな言語:C, C++, Pascal, Prolog, Emacs Lisp
電気屋さんが必要にかられて手を出す言語:C
測定機器に囲まれてる人が手を出しがちな言語:matlab, LabVIEW
513デフォルトの名無しさん
2022/03/03(木) 13:08:11.35ID:mfROfu1m ゲーム開発で使う言語 C++ C#
その他の人向けの言語 Python
その他の人向けの言語 Python
514デフォルトの名無しさん
2022/03/03(木) 18:29:13.09ID:qZcuxxc0 PrologとLispくらいは簡素なわりに他言語と差があり
学習しておくと各言語を客観視しやすくなって役立つね
学習しておくと各言語を客観視しやすくなって役立つね
515デフォルトの名無しさん
2022/03/03(木) 18:57:00.77ID:mfROfu1m Prologは果たしてプログラミング言語なのかと言う疑問は置いといて
516デフォルトの名無しさん
2022/03/03(木) 19:06:06.37ID:hTxF5AaQ いろいろ違ってるw
517デフォルトの名無しさん
2022/03/03(木) 19:43:03.78ID:CxPtyFsv >>512
電気屋ってクソワロタ
電気屋ってクソワロタ
518デフォルトの名無しさん
2022/03/03(木) 19:48:09.63ID:mfROfu1m 業界用語だろ
電気屋さん
電子屋さん
はかり屋さん
現場に色々いる
電気屋さん
電子屋さん
はかり屋さん
現場に色々いる
519デフォルトの名無しさん
2022/03/03(木) 19:54:47.77ID:7NN6zDR3 電気屋さんも馬鹿にできないんだぞ
日頃ハンダゴテ握ってるような人も
PICやFPGA触ってたりするんだもん
日頃ハンダゴテ握ってるような人も
PICやFPGA触ってたりするんだもん
520デフォルトの名無しさん
2022/03/04(金) 11:39:05.33ID:euBBHe5j 馬鹿にしてるのは馬鹿だけだから気にすることはない。
521デフォルトの名無しさん
2022/03/04(金) 12:49:38.60ID:/ow399Ux522デフォルトの名無しさん
2022/03/04(金) 13:23:54.20ID:4zB49VIz よくチューリング完全を引き合いに出す人いるけど、その定義だと感覚的に合わないものまでプログラミング言語の枠に収まるし、prologはそんなこと考えるまでもなくプログラミング言語だろ
しかも(俺は>>515ではないが)515が言いたいのは自然言語に近いと言いたいだけだと思う
実際中身は手続き型の言語と大差ないんだけどw
しかも(俺は>>515ではないが)515が言いたいのは自然言語に近いと言いたいだけだと思う
実際中身は手続き型の言語と大差ないんだけどw
523デフォルトの名無しさん
2022/03/04(金) 14:11:55.85ID:L8b5lnOt >>522
自然言語は形式言語じゃないから、もしそうならもっと勉強不足だな。
自然言語は形式言語じゃないから、もしそうならもっと勉強不足だな。
524デフォルトの名無しさん
2022/03/04(金) 14:21:38.82ID:4zB49VIz お前の頭が固いだけ
525デフォルトの名無しさん
2022/03/04(金) 14:49:04.72ID:e8gLPWot 自然言語は全く関係ないな
手続き型言語しかやったことのない似非プログラマーには宣言型言語がそう見えるのか
手続き型言語しかやったことのない似非プログラマーには宣言型言語がそう見えるのか
526デフォルトの名無しさん
2022/03/04(金) 15:28:18.85ID:4zB49VIz 頭固いねw 例えば、
親(ひろし,ももこ).
親(友蔵,ひろし).
親(友蔵,すみれ).
親(すみれ,ももこ).
男(ひろし).
男(友蔵).
女(すみれ).
女(ももこ).
祖父(X,Y):-男(X),親(X,Z),親(Z,Y).
?-祖父(X,Y).
X = 友蔵, Y = ももこ
みたいなことができるってこと
二個出るけどw
親(ひろし,ももこ).
親(友蔵,ひろし).
親(友蔵,すみれ).
親(すみれ,ももこ).
男(ひろし).
男(友蔵).
女(すみれ).
女(ももこ).
祖父(X,Y):-男(X),親(X,Z),親(Z,Y).
?-祖父(X,Y).
X = 友蔵, Y = ももこ
みたいなことができるってこと
二個出るけどw
527デフォルトの名無しさん
2022/03/04(金) 16:28:33.22ID:ZrKtVmP5 プロログはパターンマッチ型データベースに見える
あと同じのが二つ出るのは近親相姦してるからだ
あと同じのが二つ出るのは近親相姦してるからだ
528デフォルトの名無しさん
2022/03/04(金) 20:48:14.68ID:ZrKtVmP5 prologのノリがどの言語にも持ち込まれてないのも問題だ
529デフォルトの名無しさん
2022/03/04(金) 21:08:30.47ID:QzxUwnVT サーバのバックエンドでwebsocketやるのに一番いいのはGoだよね?
530デフォルトの名無しさん
2022/03/04(金) 21:22:57.44ID:4zB49VIz そんなのなんでもいいのでは?
531デフォルトの名無しさん
2022/03/04(金) 21:24:03.32ID:yR2IphvK532デフォルトの名無しさん
2022/03/04(金) 21:28:27.24ID:e8gLPWot533デフォルトの名無しさん
2022/03/04(金) 21:35:37.03ID:4zB49VIz 最速を求めるならアセンブラで書けw
534デフォルトの名無しさん
2022/03/04(金) 21:37:10.95ID:4zB49VIz "Flix is inspired by OCaml and Haskell with ideas from Rust and Scala."ってどこにもprologさんいないんだがw
535デフォルトの名無しさん
2022/03/04(金) 21:40:05.97ID:2lVDRIvt >>533
それはコンパイラを舐めすぎ
それはコンパイラを舐めすぎ
536デフォルトの名無しさん
2022/03/04(金) 21:40:43.17ID:yR2IphvK >>534
"First-class Datalog Constraints"!
"First-class Datalog Constraints"!
537デフォルトの名無しさん
2022/03/04(金) 21:45:34.71ID:4zB49VIz538デフォルトの名無しさん
2022/03/04(金) 21:53:49.99ID:RxmAHNVk 今時プロセッサ決め打ちとかあるもんなの?
539デフォルトの名無しさん
2022/03/04(金) 21:57:30.37ID:4zB49VIz アセンブラにするならその辺ある程度は諦めてたな
要件次第だけどw
要件次第だけどw
540デフォルトの名無しさん
2022/03/04(金) 22:31:46.55ID:CBAI4YxM541デフォルトの名無しさん
2022/03/04(金) 22:53:14.64ID:4zB49VIz 日本はPrologまだ使われてる国とかwikipediaか何かに書いてあったよw
世界でどういう状況かは推して知るべしw
世界でどういう状況かは推して知るべしw
542デフォルトの名無しさん
2022/03/04(金) 23:28:26.59ID:ByaH8Iv1543デフォルトの名無しさん
2022/03/04(金) 23:37:07.33ID:2tyOtSaX >>542
理由が興味深いね
ブロック内スコープ変数宣言をの有用性に気付いたみたい
> Linus Torvalds氏はLinuxカーネルメーリングリスト(LKML)に
> 「この種の非投機的なバグが発生する理由は、C99スタイルの
> 『ループ内での変数宣言』という選択肢をわれわれが今まで持ち合わせてこなかったためにほかならない。
> つまり、list_for_each_entry()といったものすべては基本的に常に、最後のHEADエントリーをループ外にリークさせる。
> というのも、ループ本体内でイテレーター変数を宣言できないためだ」と記している。
理由が興味深いね
ブロック内スコープ変数宣言をの有用性に気付いたみたい
> Linus Torvalds氏はLinuxカーネルメーリングリスト(LKML)に
> 「この種の非投機的なバグが発生する理由は、C99スタイルの
> 『ループ内での変数宣言』という選択肢をわれわれが今まで持ち合わせてこなかったためにほかならない。
> つまり、list_for_each_entry()といったものすべては基本的に常に、最後のHEADエントリーをループ外にリークさせる。
> というのも、ループ本体内でイテレーター変数を宣言できないためだ」と記している。
544デフォルトの名無しさん
2022/03/05(土) 00:50:53.23ID:TqcF1vbz545デフォルトの名無しさん
2022/03/05(土) 00:56:06.36ID:IxOGShAZ546デフォルトの名無しさん
2022/03/05(土) 01:08:06.36ID:lbLi/sOl CPUの投機実行関係のバグに関するやつだから結構めんどい話だな
547デフォルトの名無しさん
2022/03/05(土) 01:31:43.43ID:GsTUxSAJ >>542
いつまでC使うの?
いつまでC使うの?
548デフォルトの名無しさん
2022/03/05(土) 05:34:52.76ID:EWrQPP5R Cに回帰しようよ
549デフォルトの名無しさん
2022/03/05(土) 08:41:45.95ID:UxduI4YM >>547
おすすめの言語は何?
おすすめの言語は何?
550デフォルトの名無しさん
2022/03/05(土) 09:49:50.73ID:O/czQsw9 大変興味深いよな
世の中の色々大事なソフトウェアってやっぱCで書かれてんのよね
Linuxの恩恵はC89の恩恵
他のどんな言語でこれがなし得るというのよ
そう考えると世の中ゴミ言語ばっかだな
世の中の色々大事なソフトウェアってやっぱCで書かれてんのよね
Linuxの恩恵はC89の恩恵
他のどんな言語でこれがなし得るというのよ
そう考えると世の中ゴミ言語ばっかだな
551デフォルトの名無しさん
2022/03/05(土) 10:54:16.91ID:u03lzKn4 その理論ならCOBOLもいい言語だな
552デフォルトの名無しさん
2022/03/05(土) 10:59:24.96ID:5tAMjVxe553デフォルトの名無しさん
2022/03/05(土) 12:48:23.26ID:b38ED9f7 C言語はベストパフォーマンスを出せるプログラミング言語
ただしLinuxコードでも何度も起きて来たように
C言語は慎重に厳格なコードチェックを常に継続する必要があり
ちょっとスキができると様々な穴が生じてしまう
そこで誕生したのがC言語と同じベストパフォーマンスを出せるRust
Rustは強力な言語機能によりプログラミング効率が上がるだけだなく
メモリ安全性やデータ競合などの問題をコンパイル時にあぶり出し実行時の安全を保証する
つまりC言語の利点を持ったままさらに便利に安全なプログラミングをすることができるのがRustである
ただしLinuxコードでも何度も起きて来たように
C言語は慎重に厳格なコードチェックを常に継続する必要があり
ちょっとスキができると様々な穴が生じてしまう
そこで誕生したのがC言語と同じベストパフォーマンスを出せるRust
Rustは強力な言語機能によりプログラミング効率が上がるだけだなく
メモリ安全性やデータ競合などの問題をコンパイル時にあぶり出し実行時の安全を保証する
つまりC言語の利点を持ったままさらに便利に安全なプログラミングをすることができるのがRustである
554デフォルトの名無しさん
2022/03/05(土) 12:58:16.16ID:EWrQPP5R ほんとかよ
555デフォルトの名無しさん
2022/03/05(土) 13:40:33.23ID:QgP52ag+ ベストパフォーマンスwww
さすがw
さすがw
556デフォルトの名無しさん
2022/03/05(土) 13:42:18.69ID:6VIYcmrk rustはlibc使ってる
お釈迦様cの手のひらからは逃れられない
お釈迦様cの手のひらからは逃れられない
557デフォルトの名無しさん
2022/03/05(土) 13:43:51.14ID:C4PmhV7a C言語はGCがないし、整数をポインタに変換できるし
正しくない言語は大事ではないから一個でいい
正しい言語は大事だから色々な方言を作ったり定期的に捨てて作り直したりする
正しくない言語は大事ではないから一個でいい
正しい言語は大事だから色々な方言を作ったり定期的に捨てて作り直したりする
558デフォルトの名無しさん
2022/03/05(土) 14:13:05.07ID:GsTUxSAJ ループ本体に変数を宣言できないから
C11に移行するって動機があまりにも前時代的すぎんか?
C11に移行するって動機があまりにも前時代的すぎんか?
559デフォルトの名無しさん
2022/03/05(土) 14:30:57.69ID:hdaSjS7b 10年も吟味して気付いたありがたい御言葉だぞ
560デフォルトの名無しさん
2022/03/05(土) 15:37:44.81ID:zsDIUHb7 記事だけだとよく理解できんな。ブロック内の変数宣言はC89でも可能じゃないか?
561デフォルトの名無しさん
2022/03/05(土) 15:48:32.78ID:uqzOnvYQ for (int n = 0; ...) みたいな for のスコープの変数宣言のことっぽい?
562デフォルトの名無しさん
2022/03/05(土) 15:50:43.81ID:gGGEnXYc rubyなんかK&Rだぞ?
int foo(bar)
char* bar;
{
return 0;
}
int foo(bar)
char* bar;
{
return 0;
}
563デフォルトの名無しさん
2022/03/05(土) 16:00:58.43ID:AqnMHu7I その時代のCコンパイラは確かに後から宣言はできなかったよ
564デフォルトの名無しさん
2022/03/05(土) 16:27:21.01ID:AqnMHu7I こういうのだな
$ gcc -x c -std=c90 -Wpedantic - <<EOF
int main() {
int a = 0;
a += 1;
int c;
c = a;
return 0;
}
EOF
<stdin>: In function ‘main’:
<stdin>:4:9: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
$
$ gcc -x c -std=c90 -Wpedantic - <<EOF
int main() {
int a = 0;
a += 1;
int c;
c = a;
return 0;
}
EOF
<stdin>: In function ‘main’:
<stdin>:4:9: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
$
565デフォルトの名無しさん
2022/03/05(土) 16:54:20.54ID:CRIoLrg1 >>561
それですな。
それですな。
566デフォルトの名無しさん
2022/03/05(土) 16:55:50.22ID:CRIoLrg1 >>564
それはどうみてもイテレーター関係無いだろ。
それはどうみてもイテレーター関係無いだろ。
567デフォルトの名無しさん
2022/03/05(土) 16:58:47.76ID:AqnMHu7I ちゃんと記事読んだら違ってたなC99ならこれだ
https://godbolt.org/z/T1Pdnj5Yb
$ gcc -x c -std=c90 -Wpedantic - <<EOF
int main() {
for (int i = 0; i < 10; ++i);
return 0;
}
EOF
<stdin>: In function ‘main’:
<stdin>:2:5: error: ‘for’ loop initial declarations are only allowed in C99 or C11 mode
<stdin>:2:5: note: use option ‘-std=c99’, ‘-std=gnu99’, ‘-std=c11’ or ‘-std=gnu11’ to compile your code
$
https://godbolt.org/z/T1Pdnj5Yb
$ gcc -x c -std=c90 -Wpedantic - <<EOF
int main() {
for (int i = 0; i < 10; ++i);
return 0;
}
EOF
<stdin>: In function ‘main’:
<stdin>:2:5: error: ‘for’ loop initial declarations are only allowed in C99 or C11 mode
<stdin>:2:5: note: use option ‘-std=c99’, ‘-std=gnu99’, ‘-std=c11’ or ‘-std=gnu11’ to compile your code
$
568デフォルトの名無しさん
2022/03/05(土) 17:41:51.00ID:6VIYcmrk 池の水全部抜きますじゃなくて
linuxを全てrustで書きますが始まったら起こしてくれ
linuxを全てrustで書きますが始まったら起こしてくれ
569デフォルトの名無しさん
2022/03/05(土) 17:44:45.04ID:AqnMHu7I それだと一生眠ったままだなw
570デフォルトの名無しさん
2022/03/05(土) 17:49:05.42ID:6VIYcmrk 多分そうなるな
大量のmod地獄が待ってるからなあ
rustの仕組みを変えるか自動的に全部解決するツールを作るしかない
大量のmod地獄が待ってるからなあ
rustの仕組みを変えるか自動的に全部解決するツールを作るしかない
571デフォルトの名無しさん
2022/03/05(土) 17:50:51.66ID:AqnMHu7I なあに我々にはunsafeがある
572デフォルトの名無しさん
2022/03/05(土) 20:31:07.36ID:VcENWEwx573デフォルトの名無しさん
2022/03/05(土) 20:38:19.88ID:AqnMHu7I > Rustが次々と採用されていってる案件
存在しない案件が実績として次々と計上。。。詐欺かな?w
存在しない案件が実績として次々と計上。。。詐欺かな?w
574デフォルトの名無しさん
2022/03/05(土) 22:08:15.20ID:vk+PU+My >>562
それだいぶ前だよ
それだいぶ前だよ
575デフォルトの名無しさん
2022/03/05(土) 22:11:42.53ID:vk+PU+My linuxのlistってgenericsっぽい作りになってて
任意の構造体に埋め込めるのよね
そのためにマクロでforeachとかあってそのせいっぽいな
仕様のせいじゃなくてそのマクロのせいだろw
任意の構造体に埋め込めるのよね
そのためにマクロでforeachとかあってそのせいっぽいな
仕様のせいじゃなくてそのマクロのせいだろw
576デフォルトの名無しさん
2022/03/05(土) 22:58:00.53ID:AqnMHu7I Cでのリストの良くある作り方みたいなモノ+これを使えばより安全的なマクロが多数用意されてるだけだろ・・・
その辺の実装を書く前提としてC仕様にC89を仮定してたってこと
↓にlist_for_each_entry他、リストの使い方が日本語でいろいろ載ってる
https://debimate.jp/2019/04/07/linux-kernel-list%E6%A7%8B%E9%80%A0%E3%82%92%E6%93%8D%E4%BD%9C%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AEapilist%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9/
実際のコードはC89〜C11までいろいろあるんじゃね
その辺の実装を書く前提としてC仕様にC89を仮定してたってこと
↓にlist_for_each_entry他、リストの使い方が日本語でいろいろ載ってる
https://debimate.jp/2019/04/07/linux-kernel-list%E6%A7%8B%E9%80%A0%E3%82%92%E6%93%8D%E4%BD%9C%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AEapilist%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9/
実際のコードはC89〜C11までいろいろあるんじゃね
577デフォルトの名無しさん
2022/03/05(土) 23:01:37.79ID:AqnMHu7I メインラインの多くはC89でC99もある程度と予想(推測)
578デフォルトの名無しさん
2022/03/05(土) 23:07:24.44ID:b38ED9f7 C/C++やJavaなどからRustへ移行するパターンも多いけど
こういう形でプログラムコードをJavaScriptからRustへ移行する例も増えてきた
https://publickey1.jp/blog/22/amazon_prime_videowebassemblywasm_vm.html
Amazonはプロトタイプとして低レイヤのJavaScriptのコンポーネントのいくつかをRustのコードで書いてコンパイルし、WebAssemblyのバイナリにしたところ、JavaScriptのコードと比較して10倍から25倍も高速になったことを発見します。
これによりAmazon Prime VideoのアプリケーションにWebAssemblyを取り入れることを決定。
JavaScript VMの部分にWebAssembly VM(Wasm VM)をランタイムとして追加し、ユーザーのデバイス上へデプロイした上で、これまでJavaScriptで実現していたレンダラ、アニメーション、シーンとリソース管理の部分をRustコードから生成したWebAssemblyで置き換えました。
こういう形でプログラムコードをJavaScriptからRustへ移行する例も増えてきた
https://publickey1.jp/blog/22/amazon_prime_videowebassemblywasm_vm.html
Amazonはプロトタイプとして低レイヤのJavaScriptのコンポーネントのいくつかをRustのコードで書いてコンパイルし、WebAssemblyのバイナリにしたところ、JavaScriptのコードと比較して10倍から25倍も高速になったことを発見します。
これによりAmazon Prime VideoのアプリケーションにWebAssemblyを取り入れることを決定。
JavaScript VMの部分にWebAssembly VM(Wasm VM)をランタイムとして追加し、ユーザーのデバイス上へデプロイした上で、これまでJavaScriptで実現していたレンダラ、アニメーション、シーンとリソース管理の部分をRustコードから生成したWebAssemblyで置き換えました。
579デフォルトの名無しさん
2022/03/05(土) 23:20:19.93ID:AqnMHu7I それはたまたま実験結果として速くて置き換えた事例がたまたまあっただけだろ
他のwasmを使える言語との比較でもなければ、コードもなくどこまで安全かも分からんだろう上に
実際の置き換えでの効果については記載が何もないw
Rustやばやば言語ですなw
他のwasmを使える言語との比較でもなければ、コードもなくどこまで安全かも分からんだろう上に
実際の置き換えでの効果については記載が何もないw
Rustやばやば言語ですなw
580デフォルトの名無しさん
2022/03/05(土) 23:26:50.19ID:b38ED9f7 効果も全て>>578の記事に載っている
そしてアマゾンの今回の対象は、テレビやFire TVにスマートフォンなどの再生デバイス上でWebAssemblyを動かしその生成コードはRustで記述しているという話
そしてアマゾンの今回の対象は、テレビやFire TVにスマートフォンなどの再生デバイス上でWebAssemblyを動かしその生成コードはRustで記述しているという話
581デフォルトの名無しさん
2022/03/05(土) 23:36:13.20ID:AqnMHu7I どこに対する何なのか改善ポイントが何なのかもさっぱりで、効果が何に対応してるのか分からんものを勝手に効果と思い込んでるだけでは?w
582デフォルトの名無しさん
2022/03/05(土) 23:39:28.82ID:Koe9vBH8583デフォルトの名無しさん
2022/03/05(土) 23:40:02.16ID:AqnMHu7I Rustなんて誰も気にしてないなw
https://trends.google.co.jp/trends/explore?date=today%205-y&q=%2Fm%2F0dsbpg6,%2Fm%2F07sbkfb,%2Fm%2F05z1_
https://i.imgur.com/iYPHVO0.png
https://trends.google.co.jp/trends/explore?date=today%205-y&q=%2Fm%2F0dsbpg6,%2Fm%2F07sbkfb,%2Fm%2F05z1_
https://i.imgur.com/iYPHVO0.png
584デフォルトの名無しさん
2022/03/05(土) 23:40:34.73ID:b38ED9f7585デフォルトの名無しさん
2022/03/05(土) 23:44:42.83ID:AqnMHu7I586デフォルトの名無しさん
2022/03/05(土) 23:48:12.62ID:Koe9vBH8587デフォルトの名無しさん
2022/03/05(土) 23:49:20.88ID:b38ED9f7588デフォルトの名無しさん
2022/03/05(土) 23:51:08.33ID:VcENWEwx >>579
WASM記述はRustを使えないという事情がない限りはRust一択になっている
GC言語はそのランタイムのデカさと発生により普通は採用されておらずC++やRustを書けない特殊な場合のみ
そして過去資産がアドバンテージのC++もここでは既存のソフトのWASMへの移植を除いて新規案件となるためRustがWASM記述トップ言語となっている
WASM記述はRustを使えないという事情がない限りはRust一択になっている
GC言語はそのランタイムのデカさと発生により普通は採用されておらずC++やRustを書けない特殊な場合のみ
そして過去資産がアドバンテージのC++もここでは既存のソフトのWASMへの移植を除いて新規案件となるためRustがWASM記述トップ言語となっている
589デフォルトの名無しさん
2022/03/05(土) 23:52:15.07ID:AqnMHu7I >>586
オプションがついてるかどうかの事実を知らんと書いただけだがw 他に何と書けばいいんだよwwww
オプションがついてるかどうかの事実を知らんと書いただけだがw 他に何と書けばいいんだよwwww
590デフォルトの名無しさん
2022/03/05(土) 23:54:58.01ID:AqnMHu7I591デフォルトの名無しさん
2022/03/05(土) 23:57:13.15ID:Koe9vBH8592デフォルトの名無しさん
2022/03/05(土) 23:57:44.30ID:b38ED9f7593デフォルトの名無しさん
2022/03/05(土) 23:59:15.89ID:VcENWEwx >>590
WASM記述言語のシェアトップがRustとなっている現実を受け入れられないのですか?
WASM記述言語のシェアトップがRustとなっている現実を受け入れられないのですか?
594デフォルトの名無しさん
2022/03/06(日) 00:01:15.07ID:rSXv4Rng >>590
C#でたああああああああああ
C#でたああああああああああ
595デフォルトの名無しさん
2022/03/06(日) 00:03:57.83ID:oRBcPyqI596デフォルトの名無しさん
2022/03/06(日) 00:05:41.64ID:oRBcPyqI >>594
昔はBlazor1位だったと記憶してただけだけどw 無知とは恐ろしいねw
昔はBlazor1位だったと記憶してただけだけどw 無知とは恐ろしいねw
597デフォルトの名無しさん
2022/03/06(日) 00:10:10.02ID:oRBcPyqI598デフォルトの名無しさん
2022/03/06(日) 00:18:58.77ID:oRBcPyqI Rust推しは日付が変わるとID紐付けを嫌ってすーっといなくなるんだなw
どんだけやましいことばかりしてんだよw
どんだけやましいことばかりしてんだよw
599デフォルトの名無しさん
2022/03/06(日) 00:33:57.94ID:oRBcPyqI >>583 をスレ的な言語に合わせてみた(TypeScriptは前回JavaScriptあったので排除)
https://trends.google.co.jp/trends/explore?date=today%205-y&q=%2Fm%2F09gbxjr,%2Fm%2F09gp44h,%2Fm%2F0dsbpg6,%2Fm%2F010sd4y3,%2Fm%2F0_lcrx4
https://i.imgur.com/e7PBEJo.png
Rust何年経っても全然伸びねーよなw
Goはgenerics入るのもあって、上り調子w
https://trends.google.co.jp/trends/explore?date=today%205-y&q=%2Fm%2F09gbxjr,%2Fm%2F09gp44h,%2Fm%2F0dsbpg6,%2Fm%2F010sd4y3,%2Fm%2F0_lcrx4
https://i.imgur.com/e7PBEJo.png
Rust何年経っても全然伸びねーよなw
Goはgenerics入るのもあって、上り調子w
600デフォルトの名無しさん
2022/03/06(日) 00:40:46.20ID:rSXv4Rng >>599
Goとここまで差があるのか
Goとここまで差があるのか
601デフォルトの名無しさん
2022/03/06(日) 00:46:30.36ID:oRBcPyqI 日本だけにするとまた違った見え方になるよw
いずれにしてもWeb検索の頻度ベースだから、実際のところ何を目的にした検索になってるのかは知らないけどねw
いずれにしてもWeb検索の頻度ベースだから、実際のところ何を目的にした検索になってるのかは知らないけどねw
602デフォルトの名無しさん
2022/03/06(日) 02:09:32.43ID:c8iVtviN 当然Goはプログラミング言語以外の検索結果を含んでる
603デフォルトの名無しさん
2022/03/06(日) 02:16:19.87ID:XU+V9ZSH604デフォルトの名無しさん
2022/03/06(日) 02:23:27.79ID:oRBcPyqI605デフォルトの名無しさん
2022/03/06(日) 02:27:34.11ID:oRBcPyqI606デフォルトの名無しさん
2022/03/06(日) 02:38:53.27ID:c8iVtviN https://trends.google.co.jp/trends/explore?date=all&q=%2Fm%2F09gbxjr
goが登場したのが2009年11月で
2009年10月前のスコアがすでに20あって現在は34
トレンド機能は短いワードだと正確な情報が取れないことは明白
goが登場したのが2009年11月で
2009年10月前のスコアがすでに20あって現在は34
トレンド機能は短いワードだと正確な情報が取れないことは明白
607デフォルトの名無しさん
2022/03/06(日) 02:49:17.27ID:c8iVtviN https://trends.google.co.jp/trends/explore?date=all&q=%2Fm%2F0dsbpg6
rustが登場したのが2010年7月で
その前のスコアは3で現在は91
rustは順調な成長が見て取れるからgoよりはまだ正確に補足されてる
goのワードでのグラフは意味不明な膨らみがあるんだが
golangで調べればちゃんと成長が見えて補足されてるから
goのワードでは全くトレンドを補足できてないことが分かる
https://trends.google.co.jp/trends/explore?date=all&q=golang
rustが登場したのが2010年7月で
その前のスコアは3で現在は91
rustは順調な成長が見て取れるからgoよりはまだ正確に補足されてる
goのワードでのグラフは意味不明な膨らみがあるんだが
golangで調べればちゃんと成長が見えて補足されてるから
goのワードでは全くトレンドを補足できてないことが分かる
https://trends.google.co.jp/trends/explore?date=all&q=golang
608デフォルトの名無しさん
2022/03/06(日) 03:02:53.77ID:T8opxkUl >>605
言い訳はよ
言い訳はよ
609デフォルトの名無しさん
2022/03/06(日) 03:08:00.64ID:oRBcPyqI 別に共起のルールが現在に合ってるだけじゃね?w
たまたま過去でもそういうのを拾ってるだけだろw
しかもそこまで古いと収集データそのものが現在のロジックに適合できていない可能性が高い
つまり何の問題もないってことw
たまたま過去でもそういうのを拾ってるだけだろw
しかもそこまで古いと収集データそのものが現在のロジックに適合できていない可能性が高い
つまり何の問題もないってことw
610デフォルトの名無しさん
2022/03/06(日) 03:09:22.77ID:T8opxkUl 苦しすぎ
ID:oRBcPyqIは出禁な
ID:oRBcPyqIは出禁な
611デフォルトの名無しさん
2022/03/06(日) 03:10:20.33ID:rSXv4Rng goから関係のないものを除外できないのか?
612デフォルトの名無しさん
2022/03/06(日) 03:15:37.45ID:oRBcPyqI 苦しすぎなのはお前の方w 注意書き読めよw
https://i.imgur.com/sTnl0g1.png
https://i.imgur.com/sTnl0g1.png
613デフォルトの名無しさん
2022/03/06(日) 13:09:46.04ID:W+HcxztG googleより自分の方が正しいと思う者だけが書き込んだ結果
をまとめるのがgoogleの仕事
をまとめるのがgoogleの仕事
614デフォルトの名無しさん
2022/03/06(日) 13:21:24.33ID:oRBcPyqI https://about.google/
「Google の使命は、世界中の情報を整理し、世界中の人がアクセスできて使えるようにすることです。」
だそうだし、Googleが正しいとかそういう話じゃないw
集めた元データが古すぎて現行と違うという注意書きあるの無視して「結果がおかしい!」とか言ってもしょうがないだけw
そんな古いデータ見なければいいだけw
「Google の使命は、世界中の情報を整理し、世界中の人がアクセスできて使えるようにすることです。」
だそうだし、Googleが正しいとかそういう話じゃないw
集めた元データが古すぎて現行と違うという注意書きあるの無視して「結果がおかしい!」とか言ってもしょうがないだけw
そんな古いデータ見なければいいだけw
615デフォルトの名無しさん
2022/03/06(日) 15:08:47.15ID:W+HcxztG それだけではない
未来のデータも見る前にフライングすればいい
コンパイル時に分かることを実行時に調べるのはアマチュア
未来のデータも見る前にフライングすればいい
コンパイル時に分かることを実行時に調べるのはアマチュア
616デフォルトの名無しさん
2022/03/06(日) 15:32:48.07ID:oRBcPyqI 些末過ぎる書き方の問題w
まあC++はかなり頑張るけどw
まあC++はかなり頑張るけどw
617デフォルトの名無しさん
2022/03/07(月) 19:27:08.91ID:soRNFAyV618デフォルトの名無しさん
2022/03/08(火) 00:18:07.69ID:qJWSdqLU またしても go はクソ、何がクソといってまず名前がクソ、っていう俺の常日頃の主張が証明されたな
なんでこんな名前にしたのか、決める前に止めるやつはいなかったのかと問いつめたい
なんでこんな名前にしたのか、決める前に止めるやつはいなかったのかと問いつめたい
619デフォルトの名無しさん
2022/03/08(火) 00:59:02.63ID:2Ie6O3y5 ちゃんとプログラミング言語って括りのGoなので、リンク先のコンテンツが分類としてプログラミング関係なんだと思うぞ
620デフォルトの名無しさん
2022/03/08(火) 02:11:00.88ID:wlomX7u1 Surface GoとかDuckDuckGoとかコンピュータ関連用語でGo含む固有名詞多いからプログラミングに絞ってもノイズは乗ってそうな気がする
他言語との比較はできないけどGo単独の傾向を見るならgolangの方が正確かと
他言語との比較はできないけどGo単独の傾向を見るならgolangの方が正確かと
621デフォルトの名無しさん
2022/03/08(火) 02:33:52.14ID:59Y5NzBD 名前がクソと言えばC
622デフォルトの名無しさん
2022/03/08(火) 02:45:30.15ID:2Ie6O3y5623デフォルトの名無しさん
2022/03/08(火) 03:33:47.49ID:w3uv5kbe お前は捏造する人間だとバレてる
624デフォルトの名無しさん
2022/03/08(火) 03:46:02.17ID:mh+tsEdM おじさんはもういろいろバレてる
偉そうに言っても滑稽だよ
偉そうに言っても滑稽だよ
625デフォルトの名無しさん
2022/03/08(火) 04:07:37.08ID:2Ie6O3y5 はいはい、煽るだけの人は楽だねw 煽ってたら答えがもらえて良かったねw
626デフォルトの名無しさん
2022/03/08(火) 05:08:46.99ID:PMM+YUmX あ、逃げた
627デフォルトの名無しさん
2022/03/08(火) 05:12:41.68ID:2Ie6O3y5 内容のない煽りだけって逃げなんだよなぁ…お前のことだよw
628デフォルトの名無しさん
2022/03/08(火) 13:35:17.20ID:dKc62E81 Rust使えばメモリ関連のセキュリティはよくなるんじゃなかったのかよ?w
https://forest.watch.impress.co.jp/docs/news/1393185.html
Mozillaは3月5日(米国時間)、デスクトップ向け「Firefox」の最新版v97.0.2を正式公開した。脆弱性に対処したセキュリティアップデートとなっている。
今回修正された脆弱性は、以下の2件。深刻度はいずれも4段階中最高の「Critical」と評価されている。
CVE-2022-26485:XSLTパラメーター処理における解放後メモリ利用(use-after-free)
CVE-2022-26486:WebGPU IPCフレームワークにおける解放後メモリ利用(use-after-free)。サンドボックスのバイパスにつながる可能性
https://forest.watch.impress.co.jp/docs/news/1393185.html
Mozillaは3月5日(米国時間)、デスクトップ向け「Firefox」の最新版v97.0.2を正式公開した。脆弱性に対処したセキュリティアップデートとなっている。
今回修正された脆弱性は、以下の2件。深刻度はいずれも4段階中最高の「Critical」と評価されている。
CVE-2022-26485:XSLTパラメーター処理における解放後メモリ利用(use-after-free)
CVE-2022-26486:WebGPU IPCフレームワークにおける解放後メモリ利用(use-after-free)。サンドボックスのバイパスにつながる可能性
629デフォルトの名無しさん
2022/03/08(火) 13:44:09.84ID:XtAUmz0x adblock plus 入れておくとメモリ使用量がどんどん殖えて恐ろしいことになってたがバグだったのかヤッパリ
一応報告しておいたけど
一応報告しておいたけど
630デフォルトの名無しさん
2022/03/08(火) 13:52:23.55ID:vxv1gwgo >>628
C++で書かれたコンポーネントみたいだけど
C++で書かれたコンポーネントみたいだけど
631デフォルトの名無しさん
2022/03/08(火) 14:30:33.12ID:4G1DFk0q これでますますC++からRustへの移行が進む
632デフォルトの名無しさん
2022/03/08(火) 17:15:27.12ID:J8+hyRxi やっぱりrustが安全なんだな
633デフォルトの名無しさん
2022/03/08(火) 19:55:54.65ID:chqymwkX でも誰もfirefox使ってないじゃん。rust推しでさえ。
634デフォルトの名無しさん
2022/03/08(火) 20:02:57.41ID:USXhxWDY firefox使ってるよ!
635デフォルトの名無しさん
2022/03/08(火) 20:06:36.01ID:/cHhkta1 firefox重いじゃん
637デフォルトの名無しさん
2022/03/08(火) 20:19:15.85ID:7jRUihOa 現在のFirefoxはChromeより軽い
タブを数百個開いていてもFirefoxは重くならない
タブを数百個開いていてもFirefoxは重くならない
638デフォルトの名無しさん
2022/03/08(火) 20:37:37.33ID:hySjKxTA Googleが「Chromeは全てのブラウザより高速」と主張していたのでSafariやFirefoxと比べてみた
https://gigazine.net/news/20220308-google-chrome-mac-fast/
https://gigazine.net/news/20220308-google-chrome-mac-fast/
639デフォルトの名無しさん
2022/03/08(火) 20:43:00.08ID:tpeVLMpA けっきょくのところfirefoxさいつよでわろた
640デフォルトの名無しさん
2022/03/08(火) 21:06:50.80ID:/cHhkta1 マジか
641デフォルトの名無しさん
2022/03/08(火) 21:23:45.40ID:w0/18V2x Safariも謎にスコア高いな
スコアの意味わからんけど、とりあえずchromeがダントツで点低いことだけはわかった
スコアの意味わからんけど、とりあえずchromeがダントツで点低いことだけはわかった
642デフォルトの名無しさん
2022/03/08(火) 22:55:30.17ID:4dUzn034 C#もなかなかに検索に厳しいネーミングだ
結局Csharpとか書く破目になる
結局Csharpとか書く破目になる
643デフォルトの名無しさん
2022/03/08(火) 22:58:43.18ID:4G1DFk0q >>638
足を引っ張っていた過去を捨てたFirefoxが一番優秀になっているんだな
足を引っ張っていた過去を捨てたFirefoxが一番優秀になっているんだな
644デフォルトの名無しさん
2022/03/08(火) 23:01:27.38ID:2Ie6O3y5 別にRust採用前から遅くなかったfirefoxが再評価されてるだけw
645デフォルトの名無しさん
2022/03/08(火) 23:26:40.50ID:Ej6dPbx6 #はシャープじゃないけどな
シャープは五線譜に書くときに横線がかぶらないように横が斜めで♯
#はナンバーだからCsharpならc♯
シャープは五線譜に書くときに横線がかぶらないように横が斜めで♯
#はナンバーだからCsharpならc♯
646デフォルトの名無しさん
2022/03/08(火) 23:35:28.49ID:XtAUmz0x 次はC丼か
647デフォルトの名無しさん
2022/03/08(火) 23:38:03.97ID:USXhxWDY 変に捻ったことせずC4+みたいな名前にすりゃあ良かったのに。
648デフォルトの名無しさん
2022/03/08(火) 23:38:08.91ID:UPCPpthy シードン、いやマジで語感はそっちのほうがいいじゃん
今からでもいいからそれに変えてくれ
定食屋でコラボするという可能性もでてくるし
今からでもいいからそれに変えてくれ
定食屋でコラボするという可能性もでてくるし
649デフォルトの名無しさん
2022/03/08(火) 23:47:44.88ID:2Ie6O3y5 https://en.wikipedia.org/wiki/C_Sharp_(programming_language)
"C# (/si ʃɑːrp/ see sharp)[b] is a general-purpose,..."
"C# (/si ʃɑːrp/ see sharp)[b] is a general-purpose,..."
650デフォルトの名無しさん
2022/03/08(火) 23:49:45.34ID:4dUzn034 まあgoなんて一般的な動詞を使うのが今のところダントツでセンスないのは間違いない
651デフォルトの名無しさん
2022/03/09(水) 00:28:48.86ID:6rHhhvNH しかも元々Go!っていう言語あったのに、あとからGoogleがかぶせてきよったしね
https://github.com/golang/go/issues/9
> I have already used the name for *MY* programming language
> Here's the Lulu link: http://www.lulu.com/content/paperback-book/lets-go/641689
TypeScriptとかPrologみたいにユニークな名前を付けてほしかったなあとは思う
https://github.com/golang/go/issues/9
> I have already used the name for *MY* programming language
> Here's the Lulu link: http://www.lulu.com/content/paperback-book/lets-go/641689
TypeScriptとかPrologみたいにユニークな名前を付けてほしかったなあとは思う
652デフォルトの名無しさん
2022/03/09(水) 00:42:07.29ID:xulRjIaY タイプミスっぽいやつは日本でいうと誤変換のようなものか
もしかして自虐的な発想の方がセンスがいいのでは
もしかして自虐的な発想の方がセンスがいいのでは
653デフォルトの名無しさん
2022/03/10(木) 18:32:12.92ID:kLCVSceW rustも時々検索に変なのが引っかかってみたこともない画像出してくる
654デフォルトの名無しさん
2022/03/11(金) 21:06:27.31ID:uO+WSY/H C++始まったな
「C++Builder」誕生から四半世紀、「C++Builder 1」が無料でダウンロード可能に
https://forest.watch.impress.co.jp/docs/news/1394721.html
「C++Builder」誕生から四半世紀、「C++Builder 1」が無料でダウンロード可能に
https://forest.watch.impress.co.jp/docs/news/1394721.html
655デフォルトの名無しさん
2022/03/11(金) 23:05:18.35ID:GmBPyzdt クソほどに要らないw
656デフォルトの名無しさん
2022/03/12(土) 00:07:50.76ID:ZLkU2bl8 1かよw
インストーラー動くのか?
インストーラー動くのか?
657デフォルトの名無しさん
2022/03/12(土) 07:15:49.57ID:xGpNZ2yR658デフォルトの名無しさん
2022/03/12(土) 09:35:58.98ID:klv3xxXU まあ実用的に意味あったらタダでは提供せんわな
659デフォルトの名無しさん
2022/03/12(土) 09:53:28.84ID:Xc2gaOhp >>658
Visual studio Express Editionみたいに実用的に使えるけど無償のツールなんていくらでもあるだろ
Visual studio Express Editionみたいに実用的に使えるけど無償のツールなんていくらでもあるだろ
660デフォルトの名無しさん
2022/03/12(土) 11:15:14.69ID:B10FUCWb661デフォルトの名無しさん
2022/03/12(土) 11:27:47.09ID:piGLEbsf お前らのPentium 133MHz メモリ16MB HDD2GBのマシンに入れたらいいじゃん
テレホタイムになったらネスケでダウソしろよ
テレホタイムになったらネスケでダウソしろよ
662デフォルトの名無しさん
2022/03/12(土) 11:55:11.91ID:aEfI8PjB そんなハイエンドマシン持ってないw
663デフォルトの名無しさん
2022/03/12(土) 12:23:32.03ID:EyD2Cwjd Pentium 200MHz, 128MB, 6.4GB x 2 のスーパーハイエンドマシンを動態保存してる
664デフォルトの名無しさん
2022/03/12(土) 12:42:30.36ID:aEfI8PjB まじかよw
そんなのあってもその時間は俺のエロ画像取得perlスクリプトが忙しくしてるからテレホタイムにダウンロードは無理だなw
そんなのあってもその時間は俺のエロ画像取得perlスクリプトが忙しくしてるからテレホタイムにダウンロードは無理だなw
665デフォルトの名無しさん
2022/03/12(土) 18:49:28.45ID:vmozTDYl ____∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜' ____(,,゚Д゚)< ボーランド逝ってよし!
UU U U \________
〜' ____(,,゚Д゚)< ボーランド逝ってよし!
UU U U \________
666デフォルトの名無しさん
2022/03/12(土) 19:05:16.27ID:JgaGU6xu >>542
読んだけど、C11にすれば防げるという話では全然無いような
勿論Rustにしても防げないし
(以下は1通目のメールの頭にあるURL)
https://www.vusec.net/projects/kasper/
>>567
なおイテレータ変数だけなら、Cのスコープ解決演算子{}は実はどこでも書けるので
(for/while/if等と合わせて書くのが一般的だが、何もないところでもブロックを開始出来る)
int main() {
{
int i;
for (i = 0; i < 10; ++i);
}
return 0;
}
とforの周りに明示的にブロックを作れば解決出来るはず
(と思うがその時代のCコンパイラだと微妙なのと、もしかしたらこれが出来るのはC++かも?)
読んだけど、C11にすれば防げるという話では全然無いような
勿論Rustにしても防げないし
(以下は1通目のメールの頭にあるURL)
https://www.vusec.net/projects/kasper/
>>567
なおイテレータ変数だけなら、Cのスコープ解決演算子{}は実はどこでも書けるので
(for/while/if等と合わせて書くのが一般的だが、何もないところでもブロックを開始出来る)
int main() {
{
int i;
for (i = 0; i < 10; ++i);
}
return 0;
}
とforの周りに明示的にブロックを作れば解決出来るはず
(と思うがその時代のCコンパイラだと微妙なのと、もしかしたらこれが出来るのはC++かも?)
667デフォルトの名無しさん
2022/03/12(土) 20:04:52.73ID:aEfI8PjB そもそもlinusが問題としたのはそこではなく、その問題を「解決するパッチを適用しようとした際に、該当パッチが持つ別の問題」のことw
つまり一通目はただのきっかけで、二通目が問題の本体w
昔から文の代わりにブロックをどこでも作れたかどうかは知らないけどx86 gcc1.27では出来る模様
https://godbolt.org/z/WPz7a67fK
つまり一通目はただのきっかけで、二通目が問題の本体w
昔から文の代わりにブロックをどこでも作れたかどうかは知らないけどx86 gcc1.27では出来る模様
https://godbolt.org/z/WPz7a67fK
668デフォルトの名無しさん
2022/03/13(日) 03:45:28.56ID:roEKlQ2p rustはゲームタイトルの方が1000万人をゆうにこえてて
そっちがrustが検索で上がってきてる主要因。
プログラミング言語としてのrustはいうほど広がってない、
一時のHaskelやたらもてはやしてたのよりはマシな動きといった程度。
そっちがrustが検索で上がってきてる主要因。
プログラミング言語としてのrustはいうほど広がってない、
一時のHaskelやたらもてはやしてたのよりはマシな動きといった程度。
669デフォルトの名無しさん
2022/03/13(日) 04:12:00.30ID:e39Fa4ck >>668
最近の状況であればそういう分類はされないと思うけど…
https://trends.google.co.jp/trends/explore?date=today%205-y&q=%2Fm%2F0zm_2_r,%2Fm%2F0dsbpg6
最近の状況であればそういう分類はされないと思うけど…
https://trends.google.co.jp/trends/explore?date=today%205-y&q=%2Fm%2F0zm_2_r,%2Fm%2F0dsbpg6
670デフォルトの名無しさん
2022/03/13(日) 09:49:34.27ID:6ENvev+b >>6
> JavaScript 1650万人
> Python 1130万人
> Kotlin 300万人
> Rust 110万人
Rust110万人ってあり得ないよな?
鯖とクライアント1:1と仮定すると、JavaScriptの1/15=6.7%のサーバーシェアがあって然るべきだけど、0.0003%もない。(計測不能)
https://w3techs.com/technologies/overview/programming_language
Rust信者にしても盛りすぎで度を超してる。
サーバーシェアが0.1%以下=JavaScriptの1/1000以下=1.65万人以下=日本限定なら1/10として高々1650人程度?
なおサーバーシェアから単純に比例換算すると、Goは0.0007%なので世界で115人、
Rustは計測限界のlisp(0.0003%)以下なので、世界で50人になってしまうのだけど。
(書けるという意味ではなく、毎日仕事としてゴリゴリ鯖を書いてる人数なら、この程度の気もするが)
> JavaScript 1650万人
> Python 1130万人
> Kotlin 300万人
> Rust 110万人
Rust110万人ってあり得ないよな?
鯖とクライアント1:1と仮定すると、JavaScriptの1/15=6.7%のサーバーシェアがあって然るべきだけど、0.0003%もない。(計測不能)
https://w3techs.com/technologies/overview/programming_language
Rust信者にしても盛りすぎで度を超してる。
サーバーシェアが0.1%以下=JavaScriptの1/1000以下=1.65万人以下=日本限定なら1/10として高々1650人程度?
なおサーバーシェアから単純に比例換算すると、Goは0.0007%なので世界で115人、
Rustは計測限界のlisp(0.0003%)以下なので、世界で50人になってしまうのだけど。
(書けるという意味ではなく、毎日仕事としてゴリゴリ鯖を書いてる人数なら、この程度の気もするが)
671デフォルトの名無しさん
2022/03/13(日) 11:45:07.69ID:m6x+SqCG >>670
そのページのサーバシェアはWebページのソースから使われてるテクノロジーを推定するってやつだからバックエンドとして使われがちなGoやRustの使用率はあまり反映されてないと思うよ
Rustのライブラリ総数が8万弱だから、ライブラリのメンテナが1万くらいはいるかな
ライブラリ使うだけの人が10倍くらいいるなら10万というのは有り得なくもない
100万は確かにちょっと盛り過ぎかもね
そのページのサーバシェアはWebページのソースから使われてるテクノロジーを推定するってやつだからバックエンドとして使われがちなGoやRustの使用率はあまり反映されてないと思うよ
Rustのライブラリ総数が8万弱だから、ライブラリのメンテナが1万くらいはいるかな
ライブラリ使うだけの人が10倍くらいいるなら10万というのは有り得なくもない
100万は確かにちょっと盛り過ぎかもね
672デフォルトの名無しさん
2022/03/13(日) 11:50:34.41ID:m6x+SqCG そのページでPHPが圧倒的なのは、要はみんなWordPressを使ってるってだけのことであって、PHPプログラマが全体の7割以上いるってことではない
673デフォルトの名無しさん
2022/03/13(日) 13:19:56.90ID:6ENvev+b >>671-672
> 要はみんなWordPressを使ってるってだけのこと
なるほどこれはある。
> バックエンドとして使われがちなGoやRustの使用率は
「バックエンド」の使い方が間違ってるが、
ユーザー側ではなく、内部RESTAPIだから見えない、というのはあるだろうね。
なお、以下動画の最後(2019Q3)では
https://youtu.be/Og847HVwRSI?t=280
> JS 23.18%
> C++ 6.62%
> C 5.35%
だから、C++は471万人、C/C++は853万人になる。
(JSは増えて2021Q3に1650万人だから、実際はこれより1割程少ないかも)
Rustが10万人ならC++の47-85人に1人程度、
これなら「物好き」(=イノベーター、2.5%程度)が使ってる範囲なので妥当な気もするが、
採用されたのがニュースになってる時点で1%以下じゃないとおかしい気もする。
が、まあ、C++比2桁落ち程度までは来てるって事か。
> 要はみんなWordPressを使ってるってだけのこと
なるほどこれはある。
> バックエンドとして使われがちなGoやRustの使用率は
「バックエンド」の使い方が間違ってるが、
ユーザー側ではなく、内部RESTAPIだから見えない、というのはあるだろうね。
なお、以下動画の最後(2019Q3)では
https://youtu.be/Og847HVwRSI?t=280
> JS 23.18%
> C++ 6.62%
> C 5.35%
だから、C++は471万人、C/C++は853万人になる。
(JSは増えて2021Q3に1650万人だから、実際はこれより1割程少ないかも)
Rustが10万人ならC++の47-85人に1人程度、
これなら「物好き」(=イノベーター、2.5%程度)が使ってる範囲なので妥当な気もするが、
採用されたのがニュースになってる時点で1%以下じゃないとおかしい気もする。
が、まあ、C++比2桁落ち程度までは来てるって事か。
674デフォルトの名無しさん
2022/03/13(日) 14:21:27.61ID:e39Fa4ck675デフォルトの名無しさん
2022/03/13(日) 14:30:14.71ID:8lssQzCw 数倍差まで差し迫ってるんだな
>>674
アメリカ
6.16% C/C++
1.69% Rust
ドイツ
3.89% C/C++
1.66% Rust
イギリス
7.79% C/C++
1.83% Rust
>>674
アメリカ
6.16% C/C++
1.69% Rust
ドイツ
3.89% C/C++
1.66% Rust
イギリス
7.79% C/C++
1.83% Rust
676デフォルトの名無しさん
2022/03/13(日) 14:54:40.15ID:8lssQzCw677デフォルトの名無しさん
2022/03/13(日) 15:30:57.89ID:e39Fa4ck Rustは順位こそ上がってるもののtrendsとしては下降してるけどね
678デフォルトの名無しさん
2022/03/13(日) 16:15:47.56ID:8lssQzCw >>674は去年のデータなのか
最新を見つけた
2022年3月
https://pypl.github.io/PYPL.html?country=US
3.34% Swift
2.74% Matlab
2.68% Objective-C
2.39% PHP
2.36% TypeScript
2.27% Rust
1.94% Ruby
1.72% Go
1.28% Kotlin
スレタイ言語とその前後の分
最新を見つけた
2022年3月
https://pypl.github.io/PYPL.html?country=US
3.34% Swift
2.74% Matlab
2.68% Objective-C
2.39% PHP
2.36% TypeScript
2.27% Rust
1.94% Ruby
1.72% Go
1.28% Kotlin
スレタイ言語とその前後の分
679デフォルトの名無しさん
2022/03/13(日) 16:34:08.84ID:e39Fa4ck コロナでwasm利用が一時的に増えてチュートリアルなど読む人が増えただけだと思う
680デフォルトの名無しさん
2022/03/13(日) 16:52:54.64ID:6ENvev+b >>675-676
PYPLは「googleでチュートリアルが検索された数」=「新規に学ぶ人の割合」だよ。
これが逆転してないようでは絶対にコミュニティ規模では追いつけない。
(「RustのおかげでC/C++を学ぶ人が増えてしまった!!!」と言われてたのはこれか?
なお俺が知りたいのは新規参入者の動向ではなく今現在のコミュニティ規模。tiobeの方がまだ近い)
とはいえ、学ぶ人数が数倍になってる状態を10-20年続けられれば、
現役のコミュニティも数倍程度に近づいてくるのだろうけど。
(PYPLを40年積分すればコミュニティ規模になる気がしている)
tiobeは「今検索された数」だから、現役のコミュニティで検索を使った人達の割合になる。(それ以外も色々勘案してるみたいだが)
(ネット以前の言語はネットが無くても書けるように出来てるし、実際、情報もショボイので低めに出るはず)
Rustは2018年に18位がピークで、現在26位。
Goは2020年に10位がピークで、現在13位。
tiobeのC(11.80%, 2位)は高すぎるがJS(2.30%, 7位)は低すぎる気も。ただしPHP(1.50%、12位)とは規模が合うが。
PYPLは「googleでチュートリアルが検索された数」=「新規に学ぶ人の割合」だよ。
これが逆転してないようでは絶対にコミュニティ規模では追いつけない。
(「RustのおかげでC/C++を学ぶ人が増えてしまった!!!」と言われてたのはこれか?
なお俺が知りたいのは新規参入者の動向ではなく今現在のコミュニティ規模。tiobeの方がまだ近い)
とはいえ、学ぶ人数が数倍になってる状態を10-20年続けられれば、
現役のコミュニティも数倍程度に近づいてくるのだろうけど。
(PYPLを40年積分すればコミュニティ規模になる気がしている)
tiobeは「今検索された数」だから、現役のコミュニティで検索を使った人達の割合になる。(それ以外も色々勘案してるみたいだが)
(ネット以前の言語はネットが無くても書けるように出来てるし、実際、情報もショボイので低めに出るはず)
Rustは2018年に18位がピークで、現在26位。
Goは2020年に10位がピークで、現在13位。
tiobeのC(11.80%, 2位)は高すぎるがJS(2.30%, 7位)は低すぎる気も。ただしPHP(1.50%、12位)とは規模が合うが。
681デフォルトの名無しさん
2022/03/13(日) 16:53:39.94ID:VWw7WSCk 数を気にするの日本人らしい
でも何で日本語なんてマイナー言語使い続けるんだろ?
でも何で日本語なんてマイナー言語使い続けるんだろ?
682デフォルトの名無しさん
2022/03/13(日) 17:04:51.20ID:YWz/r5zq683デフォルトの名無しさん
2022/03/13(日) 17:09:56.38ID:VWw7WSCk 典型的な日本人の実例ありがとう
684デフォルトの名無しさん
2022/03/13(日) 17:57:01.73ID:e39Fa4ck >>680
だから一時的なもんだろうと言ったんだが・・・Rust信者は日本語も読めないらしい
個人的には
tiobeは興味本位で覗く人の数、先鋭的だけど流行に敏感
PYPLは実際に学ぼうとしてる人の数、割と実態に近いけど、採用実績というよりは希望に近い
と思っている
だから一時的なもんだろうと言ったんだが・・・Rust信者は日本語も読めないらしい
個人的には
tiobeは興味本位で覗く人の数、先鋭的だけど流行に敏感
PYPLは実際に学ぼうとしてる人の数、割と実態に近いけど、採用実績というよりは希望に近い
と思っている
685デフォルトの名無しさん
2022/03/13(日) 18:35:41.81ID:bkBR9GT5 >>678
Goの下落が目立ちますね
Goの下落が目立ちますね
686デフォルトの名無しさん
2022/03/13(日) 18:56:49.09ID:e39Fa4ck pyplのその状況は一時的なものだと思うよ
tiobeになるけどRustは割と乱高下してる
https://www.tiobe.com/tiobe-index/rust/
goだとこんな感じ
https://www.tiobe.com/tiobe-index/go/
tiobeになるけどRustは割と乱高下してる
https://www.tiobe.com/tiobe-index/rust/
goだとこんな感じ
https://www.tiobe.com/tiobe-index/go/
687デフォルトの名無しさん
2022/03/13(日) 19:02:32.50ID:bkBR9GT5688デフォルトの名無しさん
2022/03/13(日) 19:06:14.35ID:fVzSesSr 検索数なので素人が多くポインタ周りで検索しがちなCや言語仕様がクソほどでかいC++は多くなりがち。HP作るために仕方なく調べてるケースがあるJSもそういう傾向あるかな
689デフォルトの名無しさん
2022/03/13(日) 19:08:05.31ID:8lssQzCw690デフォルトの名無しさん
2022/03/13(日) 19:08:52.30ID:6ENvev+b >>686
PYPLもグラフは出せるよ。
678のページで下に行ったら言語と地域を選べる。
WorldWideなら、
Goは飽和気味、
Rustは乱高下しつつも増加中でそろそろGoを抜く、
C/C++は漸減傾向だったが復活気味。
PYPLもグラフは出せるよ。
678のページで下に行ったら言語と地域を選べる。
WorldWideなら、
Goは飽和気味、
Rustは乱高下しつつも増加中でそろそろGoを抜く、
C/C++は漸減傾向だったが復活気味。
691デフォルトの名無しさん
2022/03/13(日) 21:08:28.44ID:e39Fa4ck692デフォルトの名無しさん
2022/03/13(日) 21:47:14.65ID:SWhadnJY 後発のGoと更に後発のRustがまだ遅れているのは仕方ないですよね
693デフォルトの名無しさん
2022/03/13(日) 22:01:27.76ID:e39Fa4ck どちらかというと、このグラフは後発ほど有利なはずなんだけどね
JavaやC#は鳴り物入りで出現してあっという間に広まった
goの良さは玄人にしか伝わりにくい面があると思うので時間かかるのは仕方ないけど
Rustは現状だとごくごく一部の信者が必死になって喧伝してるだけのマニア向け言語だからどう見るかは微妙
JavaやC#は鳴り物入りで出現してあっという間に広まった
goの良さは玄人にしか伝わりにくい面があると思うので時間かかるのは仕方ないけど
Rustは現状だとごくごく一部の信者が必死になって喧伝してるだけのマニア向け言語だからどう見るかは微妙
694デフォルトの名無しさん
2022/03/13(日) 22:04:53.43ID:6ENvev+b695デフォルトの名無しさん
2022/03/13(日) 22:11:29.32ID:fVzSesSr ごくごく一部のマニア(MS,Google,Mozilla,Amazom,Meta)
696デフォルトの名無しさん
2022/03/13(日) 22:21:31.43ID:E9xpRPLy697デフォルトの名無しさん
2022/03/13(日) 22:29:12.10ID:e39Fa4ck >>695
MS,Google,Mozilla,Amazonなどは出資してるだけで喧伝などしていない
彼らの土俵に非常に狭い有用な領域があるってだけw
それを見て勘違いしたごくごく一部のマニアが信者化して喧伝してる
MS,Google,Mozilla,Amazonなどは出資してるだけで喧伝などしていない
彼らの土俵に非常に狭い有用な領域があるってだけw
それを見て勘違いしたごくごく一部のマニアが信者化して喧伝してる
698デフォルトの名無しさん
2022/03/13(日) 22:32:40.90ID:e39Fa4ck データ競合が起きにくいからってだけだよ
それを実現するために払った代償が大きすぎて、彼らも他の領域に積極採用しようとはしていない
その代償を払ってもお釣りが来るほど、性能+品質が重視されるニッチな領域を彼らが持ってるだけw
それを実現するために払った代償が大きすぎて、彼らも他の領域に積極採用しようとはしていない
その代償を払ってもお釣りが来るほど、性能+品質が重視されるニッチな領域を彼らが持ってるだけw
699デフォルトの名無しさん
2022/03/13(日) 22:36:32.94ID:6ENvev+b >>693
> JavaやC#は鳴り物入りで出現してあっという間に広まった
JavaはそうだったがC#は軟派扱いだったろ。
理由は簡単で、当初はDLLを作れず、unionも使えない、プロの実用に耐えるものではなかったから。
その辺整備して2000年代中頃からMSの主力言語となり、逆にVC++は何となく見捨てられて現在に至るが。
tiobeには下の方にそれも載ってる。
> Very Long Term History
> Java 14@1997 -> 1@2002
> C# 14@2002 -> 8@2007 -> 4@2012
> https://www.tiobe.com/tiobe-index/
> goの良さは玄人にしか伝わりにくい面がある
とはどこ?
開発周りならC#の方が断然上。何も考えずにVSに任せて終わり。
DLL今更いらんやろ、は一理あるが、継承を無くしたのは多分悪手。
あれはJavaで関数ポインタがなかったために馬鹿共がデザインパターンとかいうおかしな事をやらかしまくったのが問題で、
正しく使えるなら継承は有った方が確実にいい。
(ただし、フレームワーク作成ならさておき、ユーザーレベルではあまり必要ないのも事実だが)
>>695
そいつらが入ってその程度、という事実を認識した方がいい。
Rustを選ぶ理由がないんだよ。
最速を目指すならC/C++以外にない。
GCで良ければJava/C#/Goとかでいい。
安全性とか言ってるのは開発側の都合であって、ユーザーにとってはどうでもいい事だろ。
それでC/C++では出来ないような開発速度が出せるのならまだしも、それもないし。
(売りの「安全性」と「メモリリーク無し」はほぼ全部のGC言語が持ってる機能で、
そこから無理矢理GCはがして何とかなるか、という実験としては良いが、実際その程度の意味しかない)
> JavaやC#は鳴り物入りで出現してあっという間に広まった
JavaはそうだったがC#は軟派扱いだったろ。
理由は簡単で、当初はDLLを作れず、unionも使えない、プロの実用に耐えるものではなかったから。
その辺整備して2000年代中頃からMSの主力言語となり、逆にVC++は何となく見捨てられて現在に至るが。
tiobeには下の方にそれも載ってる。
> Very Long Term History
> Java 14@1997 -> 1@2002
> C# 14@2002 -> 8@2007 -> 4@2012
> https://www.tiobe.com/tiobe-index/
> goの良さは玄人にしか伝わりにくい面がある
とはどこ?
開発周りならC#の方が断然上。何も考えずにVSに任せて終わり。
DLL今更いらんやろ、は一理あるが、継承を無くしたのは多分悪手。
あれはJavaで関数ポインタがなかったために馬鹿共がデザインパターンとかいうおかしな事をやらかしまくったのが問題で、
正しく使えるなら継承は有った方が確実にいい。
(ただし、フレームワーク作成ならさておき、ユーザーレベルではあまり必要ないのも事実だが)
>>695
そいつらが入ってその程度、という事実を認識した方がいい。
Rustを選ぶ理由がないんだよ。
最速を目指すならC/C++以外にない。
GCで良ければJava/C#/Goとかでいい。
安全性とか言ってるのは開発側の都合であって、ユーザーにとってはどうでもいい事だろ。
それでC/C++では出来ないような開発速度が出せるのならまだしも、それもないし。
(売りの「安全性」と「メモリリーク無し」はほぼ全部のGC言語が持ってる機能で、
そこから無理矢理GCはがして何とかなるか、という実験としては良いが、実際その程度の意味しかない)
700デフォルトの名無しさん
2022/03/13(日) 22:45:53.87ID:ZP0/YH7Q701デフォルトの名無しさん
2022/03/13(日) 23:00:37.10ID:6ENvev+b702デフォルトの名無しさん
2022/03/13(日) 23:06:43.59ID:jAslId1/ シングルスレッドでは起きない系じゃないかな
703デフォルトの名無しさん
2022/03/13(日) 23:08:56.83ID:6ENvev+b704デフォルトの名無しさん
2022/03/13(日) 23:24:47.74ID:jAslId1/ 並列処理時の話だろ?
705デフォルトの名無しさん
2022/03/13(日) 23:43:57.20ID:e39Fa4ck >>699
> JavaはそうだったがC#は軟派扱いだったろ。
> 理由は簡単で、当初はDLLを作れず、unionも使えない、プロの実用に耐えるものではなかったから。
> その辺整備して2000年代中頃からMSの主力言語となり、逆にVC++は何となく見捨てられて現在に至るが。
.NETは1からBeginInvokeがあったりして非同期処理の走りだったし、P/Invokeがあったりしてnativeも簡単に扱えたし、俺もオライリー読んで、Javaの二番煎じかと思ったら、Javaよりいいじゃんって思ってすぐ飛びついたよw
確かに.NETは少なくとも2までは俺の周りではJavaほど盛り上がってなかったけど今のRustよりは期待されてたなw
1でdllが作れなかったかどうかは忘れたけど、COMのI/Fも持ってて当時便利だとは思った
> > goの良さは玄人にしか伝わりにくい面がある
> とはどこ?
goの良さは必要十分なことが実用的な範囲でコンパクトにまとまってること
> あれはJavaで関数ポインタがなかったために馬鹿共がデザインパターンとかいうおかしな事をやらかしまくったのが問題で、
デザインパターンはOOPの分かりやすい成果だと思う(関数ポインタは実装なので関係ない)
最近の言語は構造とロジックは分離してるのが主流だけど、考え方は今でも有効だと思う
構造とロジックが緊密になりすぎて少し窮屈になるきらいはあるし、そうなるくらいなら分離もありだとは思う
> JavaはそうだったがC#は軟派扱いだったろ。
> 理由は簡単で、当初はDLLを作れず、unionも使えない、プロの実用に耐えるものではなかったから。
> その辺整備して2000年代中頃からMSの主力言語となり、逆にVC++は何となく見捨てられて現在に至るが。
.NETは1からBeginInvokeがあったりして非同期処理の走りだったし、P/Invokeがあったりしてnativeも簡単に扱えたし、俺もオライリー読んで、Javaの二番煎じかと思ったら、Javaよりいいじゃんって思ってすぐ飛びついたよw
確かに.NETは少なくとも2までは俺の周りではJavaほど盛り上がってなかったけど今のRustよりは期待されてたなw
1でdllが作れなかったかどうかは忘れたけど、COMのI/Fも持ってて当時便利だとは思った
> > goの良さは玄人にしか伝わりにくい面がある
> とはどこ?
goの良さは必要十分なことが実用的な範囲でコンパクトにまとまってること
> あれはJavaで関数ポインタがなかったために馬鹿共がデザインパターンとかいうおかしな事をやらかしまくったのが問題で、
デザインパターンはOOPの分かりやすい成果だと思う(関数ポインタは実装なので関係ない)
最近の言語は構造とロジックは分離してるのが主流だけど、考え方は今でも有効だと思う
構造とロジックが緊密になりすぎて少し窮屈になるきらいはあるし、そうなるくらいなら分離もありだとは思う
706デフォルトの名無しさん
2022/03/13(日) 23:50:49.53ID:e39Fa4ck なんていうか・・・飼い犬に噛まれる的なことがないのがgo言語w
707デフォルトの名無しさん
2022/03/14(月) 00:27:52.17ID:+YaSNWzL >>706
それは「自分の足を撃てるか」だな
http://www.toodarkpark.org/computers/humor/shoot-self-in-foot.html
>>705
その頃から知ってるのなら教えて欲しいのだが、
俺はC#のその辺は「GUIコンポーネントを触れるのがメインスレッドだけ」という、
GUI部分をシングルスレッド『強制』にしてしまったのがそもそもの問題で、
全GUIコンポーネントをスレッドセーフにしてしまえばその辺の面倒な話は一切無しで単純に済んだと思ってる。
これは今でもそう思う。
(最終的にasyncに持って来たのはすごいが)
これについて、C#が何故そうしたのかがよく分からない。色々尋ねて回った限り、
どうやらその前にJavaのGUIでマルチスレッドのがあって、それで酷い事になったから、
その失敗を見たC#は「絶対にGUIはシングルスレッド」と決めたらしい、というところまでは分かったのだが、その先が辿れない。
この辺について何か知ってたらよろしく。
> デザインパターンはOOPの分かりやすい成果だと思う
その割には今全く聞かないだろ。トレンドもダダ下がりどころではないはず。
頻出パターンを学ぶ、というのは正しいが、考えるのを止めて暗記に走るのが多分不味い。
> 構造とロジックは分離してるのが主流だけど
というよりはCでは分離出来なかった(分離しにくかった)からその頃はそんなもんだと思ってただけで、
分離出来るのなら分離した方がいいし、今はそうなってるだけだろ。
576のリンク先、
> Linux KernelのList構造は、データと分離されており、粗結合の状態です。
何ぞそれ?と思ったけど、
なるほどCでもこうやれば分離出来るのか、マクロって本来はこう使うべきだったのか、
最初のC++なんてただのマクロ集だったってのはこういう事か、
とは思ったね。俺がCやった頃は既に「マクロは使うな」みたいになってて、
小文字マクロオンパレードのLinuxKernelにはちょっと驚くのだけど。
それは「自分の足を撃てるか」だな
http://www.toodarkpark.org/computers/humor/shoot-self-in-foot.html
>>705
その頃から知ってるのなら教えて欲しいのだが、
俺はC#のその辺は「GUIコンポーネントを触れるのがメインスレッドだけ」という、
GUI部分をシングルスレッド『強制』にしてしまったのがそもそもの問題で、
全GUIコンポーネントをスレッドセーフにしてしまえばその辺の面倒な話は一切無しで単純に済んだと思ってる。
これは今でもそう思う。
(最終的にasyncに持って来たのはすごいが)
これについて、C#が何故そうしたのかがよく分からない。色々尋ねて回った限り、
どうやらその前にJavaのGUIでマルチスレッドのがあって、それで酷い事になったから、
その失敗を見たC#は「絶対にGUIはシングルスレッド」と決めたらしい、というところまでは分かったのだが、その先が辿れない。
この辺について何か知ってたらよろしく。
> デザインパターンはOOPの分かりやすい成果だと思う
その割には今全く聞かないだろ。トレンドもダダ下がりどころではないはず。
頻出パターンを学ぶ、というのは正しいが、考えるのを止めて暗記に走るのが多分不味い。
> 構造とロジックは分離してるのが主流だけど
というよりはCでは分離出来なかった(分離しにくかった)からその頃はそんなもんだと思ってただけで、
分離出来るのなら分離した方がいいし、今はそうなってるだけだろ。
576のリンク先、
> Linux KernelのList構造は、データと分離されており、粗結合の状態です。
何ぞそれ?と思ったけど、
なるほどCでもこうやれば分離出来るのか、マクロって本来はこう使うべきだったのか、
最初のC++なんてただのマクロ集だったってのはこういう事か、
とは思ったね。俺がCやった頃は既に「マクロは使うな」みたいになってて、
小文字マクロオンパレードのLinuxKernelにはちょっと驚くのだけど。
708デフォルトの名無しさん
2022/03/14(月) 01:03:13.14ID:U570WKgz >>707
> それは「自分の足を撃てるか」だな
伝わらなそう。
危害を加えられるということではなく、特別に何か出来るわけでもなく、普通に思ったことが思ったとおりに出来て、想定外のことが起こらない的な意味。
> 俺はC#のその辺は「GUIコンポーネントを触れるのがメインスレッドだけ」という、
普通に呼ばれた先がスレッドセーフじゃないからだと思うけど…
同期を取ることそのものがコストになるし、そのコストを嫌ったのが元々の非同期の発想だと思ってたから、俺は違和感なかった
実際のところはMSの中の人じゃないから知らない
> > デザインパターンはOOPの分かりやすい成果だと思う
> その割には今全く聞かないだろ。
そうでもない、GoFの初期のパターンはもう各パターンが独り歩きして日常的に使われてるからそうおもうだけだと思う
> > 構造とロジックは分離してるのが主流だけど
> というよりはCでは分離出来なかった(分離しにくかった)からその頃はそんなもんだと思ってただけで、
classがないって意味だよ
> なるほどCでもこうやれば分離出来るのか、マクロって本来はこう使うべきだったのか、
Cにはテンプレートないからな…
> それは「自分の足を撃てるか」だな
伝わらなそう。
危害を加えられるということではなく、特別に何か出来るわけでもなく、普通に思ったことが思ったとおりに出来て、想定外のことが起こらない的な意味。
> 俺はC#のその辺は「GUIコンポーネントを触れるのがメインスレッドだけ」という、
普通に呼ばれた先がスレッドセーフじゃないからだと思うけど…
同期を取ることそのものがコストになるし、そのコストを嫌ったのが元々の非同期の発想だと思ってたから、俺は違和感なかった
実際のところはMSの中の人じゃないから知らない
> > デザインパターンはOOPの分かりやすい成果だと思う
> その割には今全く聞かないだろ。
そうでもない、GoFの初期のパターンはもう各パターンが独り歩きして日常的に使われてるからそうおもうだけだと思う
> > 構造とロジックは分離してるのが主流だけど
> というよりはCでは分離出来なかった(分離しにくかった)からその頃はそんなもんだと思ってただけで、
classがないって意味だよ
> なるほどCでもこうやれば分離出来るのか、マクロって本来はこう使うべきだったのか、
Cにはテンプレートないからな…
709デフォルトの名無しさん
2022/03/14(月) 02:05:45.27ID:+YaSNWzL >>708
> 同期を取ることそのものがコストになるし、そのコストを嫌った
そりゃそうだが、現実的にロックが必要なのはGUIコンポーネントに「書く」時だけで、
つまりGUIを実際にユーザーが操作している瞬間であって、速い必要が全くない。
そしてロック周りはメソッド内に隠蔽してユーザーからは見えない状態に出来る。
だからそうすれば良いだけなのに、
結果を画面に表示したいだけの為にInvokeとかドタバタしないといけないのは間抜けすぎ。
とはいえ当時は我慢してたが、JS知ってC#のGUIは完全にゴミだったと理解した。
そりゃJSが快進撃するはずだよ。
デザインパターンについては俺はゴミだと思ってるよ。
あれは言語機能の不足分を示してる、という奴がいるだろ。それに近い。
例えばイテレーターパターン、コンテナ/イテレータ/処理をコンテナ/(イテレータ+処理)と切るわけだが、
関数型(forEach)は(コンテナ+イテレータ)/(処理)、で切るだろ。
イテレータはコンテナと密結合なのだから、どう考えても関数型の方が妥当。
イテレータの管理なんてしたくもないし。
当然関数型も流行るし、Javaも関数ポインタを入れないわけには行かなかった。
だから、言語機能が整備されたから聞かなくなったけど日常的に使われてる、というのならまあそうだが、
おかしなパターン作りに邁進するのではなく、不足してる言語機能をさっさと充足させれば済んだ話。
方向性を完全に間違ってる。
> Cにはテンプレートないからな…
テンプレートこそマクロで書ける、というより、
テンプレート的なマクロを追い出す為のテンプレート導入なんだけどな。
> 同期を取ることそのものがコストになるし、そのコストを嫌った
そりゃそうだが、現実的にロックが必要なのはGUIコンポーネントに「書く」時だけで、
つまりGUIを実際にユーザーが操作している瞬間であって、速い必要が全くない。
そしてロック周りはメソッド内に隠蔽してユーザーからは見えない状態に出来る。
だからそうすれば良いだけなのに、
結果を画面に表示したいだけの為にInvokeとかドタバタしないといけないのは間抜けすぎ。
とはいえ当時は我慢してたが、JS知ってC#のGUIは完全にゴミだったと理解した。
そりゃJSが快進撃するはずだよ。
デザインパターンについては俺はゴミだと思ってるよ。
あれは言語機能の不足分を示してる、という奴がいるだろ。それに近い。
例えばイテレーターパターン、コンテナ/イテレータ/処理をコンテナ/(イテレータ+処理)と切るわけだが、
関数型(forEach)は(コンテナ+イテレータ)/(処理)、で切るだろ。
イテレータはコンテナと密結合なのだから、どう考えても関数型の方が妥当。
イテレータの管理なんてしたくもないし。
当然関数型も流行るし、Javaも関数ポインタを入れないわけには行かなかった。
だから、言語機能が整備されたから聞かなくなったけど日常的に使われてる、というのならまあそうだが、
おかしなパターン作りに邁進するのではなく、不足してる言語機能をさっさと充足させれば済んだ話。
方向性を完全に間違ってる。
> Cにはテンプレートないからな…
テンプレートこそマクロで書ける、というより、
テンプレート的なマクロを追い出す為のテンプレート導入なんだけどな。
710デフォルトの名無しさん
2022/03/14(月) 02:23:54.25ID:U570WKgz >>709
> とはいえ当時は我慢してたが、JS知ってC#のGUIは完全にゴミだったと理解した。
スレッドセーフにすると同期処理が入って遅くなるだけ、必要な同期を外で取るか中で取るかの設計選択でしかないので、スレッドを作らないときに遅くなる設計選択をしなかったというだけでしょ
逆に言えばもしスレッドを別にするならちゃんと同期してね、という意思表示でもあるだけ
別に俺は何とも思わなかった
当時のJSはクライアント側なので何の関係もないし、そもそもスレッドがない
> デザインパターンについては俺はゴミだと思ってるよ。
言語機能の不足とは違う。OOは言語を限定しないから。
> イテレータはコンテナと密結合
イテレータは抽象化されてるので密結合はしていない
> テンプレート的なマクロを追い出す為のテンプレート導入
俺が導入したわけでもないけど、型がないこと、ただの置換では限界があることの回避だと思ってた
> とはいえ当時は我慢してたが、JS知ってC#のGUIは完全にゴミだったと理解した。
スレッドセーフにすると同期処理が入って遅くなるだけ、必要な同期を外で取るか中で取るかの設計選択でしかないので、スレッドを作らないときに遅くなる設計選択をしなかったというだけでしょ
逆に言えばもしスレッドを別にするならちゃんと同期してね、という意思表示でもあるだけ
別に俺は何とも思わなかった
当時のJSはクライアント側なので何の関係もないし、そもそもスレッドがない
> デザインパターンについては俺はゴミだと思ってるよ。
言語機能の不足とは違う。OOは言語を限定しないから。
> イテレータはコンテナと密結合
イテレータは抽象化されてるので密結合はしていない
> テンプレート的なマクロを追い出す為のテンプレート導入
俺が導入したわけでもないけど、型がないこと、ただの置換では限界があることの回避だと思ってた
711デフォルトの名無しさん
2022/03/14(月) 06:28:43.00ID:1OkAcUK7 デザインパターンが大々的に使われる言語ってのは抽象化能力が低いって事だと思うんだよな。まぁあんまり細かいとこまで抽象化しても使いにくいから細かいパターンは何にでもあると思うけど。
GCがあれば安全ってのもちょっと視野が狭いんじゃなかろか。メモリが確保できない時(エラーを生成する余裕すらない時もある)とか、ここでGCに動かれては困る、とか。
GCがあれば安全ってのもちょっと視野が狭いんじゃなかろか。メモリが確保できない時(エラーを生成する余裕すらない時もある)とか、ここでGCに動かれては困る、とか。
712デフォルトの名無しさん
2022/03/14(月) 06:48:39.07ID:U570WKgz 大々的に使われるという認識がもうおかしい
デザインパターンというのは昔からよくある、前提が揃ったとき、こうやっとくと割と上手く行く定石みたいなもの
そもそも要件次第で適用され、実装言語で表現するだけの代物だよ
GCがあれば安全とは、二重開放やリークなどの問題からの開放を意味するだけ
一般的にはリスクなので安全の一要素ではある
GCの実装は通常最低限の動作をするのに必要なメモリを最初に確保する
ここで動かれては困るは制御できるのとできないのがあるし、そんなのは実装次第
調べれば分かる仕様であり、安全とは無関係
デザインパターンというのは昔からよくある、前提が揃ったとき、こうやっとくと割と上手く行く定石みたいなもの
そもそも要件次第で適用され、実装言語で表現するだけの代物だよ
GCがあれば安全とは、二重開放やリークなどの問題からの開放を意味するだけ
一般的にはリスクなので安全の一要素ではある
GCの実装は通常最低限の動作をするのに必要なメモリを最初に確保する
ここで動かれては困るは制御できるのとできないのがあるし、そんなのは実装次第
調べれば分かる仕様であり、安全とは無関係
713デフォルトの名無しさん
2022/03/14(月) 07:21:56.04ID:0o62jolj 概ね同意。
大々的にってのは言葉が悪かったな。パターン以外で表現できず、必然的に乱用された、一時期のJavaみたいなのはおかしいだろってだけなんだ。
大々的にってのは言葉が悪かったな。パターン以外で表現できず、必然的に乱用された、一時期のJavaみたいなのはおかしいだろってだけなんだ。
714デフォルトの名無しさん
2022/03/14(月) 10:05:06.21ID:/sMe7Uy5 必要もねえのに勉強しちゃって
必要もねえのに乱用しちゃうのが問題
必要なひとは必要な分だけ黙って使ってんのよデザパタなんて
イテレータパターンなんて
使うだけの人には不要なのよ
イテレータを提供する側の人
ライブラリを提供する側の人が
実装前にそっと紐解くのがイテレータパターンなんよ
で、使う側の人が「イテレータパターンは不要」とか抜かしてる裏で
すでにライブラリ作者によってパターンが適用されてんのよ
必要もねえのに乱用しちゃうのが問題
必要なひとは必要な分だけ黙って使ってんのよデザパタなんて
イテレータパターンなんて
使うだけの人には不要なのよ
イテレータを提供する側の人
ライブラリを提供する側の人が
実装前にそっと紐解くのがイテレータパターンなんよ
で、使う側の人が「イテレータパターンは不要」とか抜かしてる裏で
すでにライブラリ作者によってパターンが適用されてんのよ
715デフォルトの名無しさん
2022/03/14(月) 10:05:42.69ID:/sMe7Uy5 ×使うだけの人には不要なのよ
○イテレータ使うだけの人には不要なのよ
○イテレータ使うだけの人には不要なのよ
716デフォルトの名無しさん
2022/03/14(月) 18:58:59.94ID:ffXSoD1s 彼は病気なんです
すみません…
すみません…
717デフォルトの名無しさん
2022/03/14(月) 19:01:21.66ID:ffXSoD1s そういえばRustマンセーの人たちはデザインパターンやDI知らん人が多いよな
業務の人じゃないんじゃないかな
業務の人じゃないんじゃないかな
718デフォルトの名無しさん
2022/03/14(月) 19:33:27.88ID:vcnazuXY rustにもデザインパターンと呼べるようなものはあると思うんだけどね
そう呼ばないだけて
そう呼ばないだけて
719デフォルトの名無しさん
2022/03/14(月) 19:36:11.36ID:qbCTDT+5 マスコミ業務の人はインターネットのことをそういう目で見ている
720デフォルトの名無しさん
2022/03/14(月) 19:38:30.40ID:ffXSoD1s DI使わないでどうやって大規模開発してるのか謎なんだがな
架空の大規模開発してるのだろうか?
架空の大規模開発してるのだろうか?
721デフォルトの名無しさん
2022/03/14(月) 20:31:10.63ID:lMI36uuv DI使わず大規模開発は普通に可能でしょ
そんな頭で大規模開発してることが謎だわ
そんな頭で大規模開発してることが謎だわ
722デフォルトの名無しさん
2022/03/14(月) 20:35:29.98ID:WXnM/Xv2 こんどはDIおじさんか...
723デフォルトの名無しさん
2022/03/14(月) 20:52:37.91ID:+YaSNWzL >>710
> スレッドを作らないときに遅くなる設計選択をしなかったというだけ
その通りだが、GUIでは事実上「スレッドを作らない」という選択肢がない。
メインスレッドで(確か)10秒以上のジョブを実行すると「GUIが固まるだろボケ!別スレッド起動しろ」と怒られ、
仕方なく別スレッドを起動すると、結果を表示する際に「GUIコンポーネントは別スレッドからは触れねえよボケ!Invokeしろ」と怒られる。
よって、「計算結果をprintfするだけ」のCUIアプリをGUIにするだけの為に、「別スレッド起動してInvokeする」コードが必要となる。
全く馬鹿げてるよ。
どうせ計算結果を待つしかないのだから、待つ間にGUIが固まってもどうって事無い。
それが嫌なら「別スレッド+Invoke」で、面倒で手抜きしたいのなら「GUI固まりますがどうぞ」でよかったのだが、
MSは後者の選択肢を残さなかった。
JSだとこの辺の糞っぷりが全くなく、別方法で綺麗に解決されてた、というわけ。
まあ見解の相違はおそらくそちらはCUIアプリが主だったか、真面目に実装するタイプなのだろう。
> スレッドを作らないときに遅くなる設計選択をしなかったというだけ
その通りだが、GUIでは事実上「スレッドを作らない」という選択肢がない。
メインスレッドで(確か)10秒以上のジョブを実行すると「GUIが固まるだろボケ!別スレッド起動しろ」と怒られ、
仕方なく別スレッドを起動すると、結果を表示する際に「GUIコンポーネントは別スレッドからは触れねえよボケ!Invokeしろ」と怒られる。
よって、「計算結果をprintfするだけ」のCUIアプリをGUIにするだけの為に、「別スレッド起動してInvokeする」コードが必要となる。
全く馬鹿げてるよ。
どうせ計算結果を待つしかないのだから、待つ間にGUIが固まってもどうって事無い。
それが嫌なら「別スレッド+Invoke」で、面倒で手抜きしたいのなら「GUI固まりますがどうぞ」でよかったのだが、
MSは後者の選択肢を残さなかった。
JSだとこの辺の糞っぷりが全くなく、別方法で綺麗に解決されてた、というわけ。
まあ見解の相違はおそらくそちらはCUIアプリが主だったか、真面目に実装するタイプなのだろう。
724デフォルトの名無しさん
2022/03/14(月) 20:53:26.06ID:+YaSNWzL > イテレータは抽象化されてるので密結合はしていない
イテレーターパターン推し連中の公式見解だな。
ただ、目的とどこまでやるべきかを考えれば、問題点は簡単に分かる。
俺は、
目的: 同一コードを走行させる為、コンテナ非依存にする為
どこまで: 全部
と考えてる。抽象化が「本質(共通)部分のみを抜き出す」事なら、共通部分が残っているようなら抽象化が不十分だ。
iteratorを使う際には必ず「ループの中に入れて.next()を呼び出す操作」が必要で、つまりこの部分
for (=iter.begin(); !=iter.end(); =iter.next()) {}
が共通で残っており、毎回自前で同じようなコードを書け、となってる。--- (A)
ならこの部分もついでにイテレータに入れた方がよくね?と考えれば、
itereator.each(関数ポインタ)形式になり、まんまforEachになる。 --- (B)
だからイテレータとforEachは発想としては連続的につながっており、思いつけないものではない。
敢えてイテレータ(A)で止めてるのは、当時覇権言語だったJavaが関数ポインタを使えず、(B)を記述する能力がなかったからだ。
つまり、
OOP:イテレーターパターン: for (=iter.begin(); !=iter.end(); =iter.next()){ 中身の処理 } --- (A)
関数型:ダックタイピング: container.forEach(関数ポインタ) --- (B)
であって、どちらも目的を達成出来るが、for の呪文を毎回書かなくて済む分関数型の方がいい。
だからあの関数型アゲは腐りきったデザインパターンへのアンチテーゼの意味もあると思ってて、
実際デザインパターンアゲが消滅次第、関数型アゲも消滅したろ。
イテレーターパターン推し連中の公式見解だな。
ただ、目的とどこまでやるべきかを考えれば、問題点は簡単に分かる。
俺は、
目的: 同一コードを走行させる為、コンテナ非依存にする為
どこまで: 全部
と考えてる。抽象化が「本質(共通)部分のみを抜き出す」事なら、共通部分が残っているようなら抽象化が不十分だ。
iteratorを使う際には必ず「ループの中に入れて.next()を呼び出す操作」が必要で、つまりこの部分
for (=iter.begin(); !=iter.end(); =iter.next()) {}
が共通で残っており、毎回自前で同じようなコードを書け、となってる。--- (A)
ならこの部分もついでにイテレータに入れた方がよくね?と考えれば、
itereator.each(関数ポインタ)形式になり、まんまforEachになる。 --- (B)
だからイテレータとforEachは発想としては連続的につながっており、思いつけないものではない。
敢えてイテレータ(A)で止めてるのは、当時覇権言語だったJavaが関数ポインタを使えず、(B)を記述する能力がなかったからだ。
つまり、
OOP:イテレーターパターン: for (=iter.begin(); !=iter.end(); =iter.next()){ 中身の処理 } --- (A)
関数型:ダックタイピング: container.forEach(関数ポインタ) --- (B)
であって、どちらも目的を達成出来るが、for の呪文を毎回書かなくて済む分関数型の方がいい。
だからあの関数型アゲは腐りきったデザインパターンへのアンチテーゼの意味もあると思ってて、
実際デザインパターンアゲが消滅次第、関数型アゲも消滅したろ。
725デフォルトの名無しさん
2022/03/14(月) 20:54:38.73ID:+YaSNWzL で、ついでに言うと、イテレータ自体はコンテナと必ず密結合してる。
コンテナの内部構造を変更されたらイテレータ自体も変更しないといけないだろ。(イテレータを使う側のコードは変更不要)
そして、
イテレーターパターン:オレオレコンテナにはイテレータを用意しろ --- (A2)
ダックタイピング:オレオレコンテナにはforEachメソッドを用意しろ --- (B2)
だが、イテレータの用意は共通インタフェースにする程度の設計は必要なのに対し、
forEachメソッドの用意はただ回せば済むから、A2よりもB2の方が簡単なんだよ。
ここで「簡単」で済む理由は、B2の方が「自然」だからであり、A2で切るのは「不自然」だからだ。
コンテナとイテレータは一体であり、内部処理はそれとは全く関連無いから元々疎結合。
それを(コンテナ)/(イテレータ+内部処理)と無理に切るからおかしくなる。
(コンテナ+イテレータ)/(内部処理)なら元々疎結合のところで疎結合にしてるから余計な手間がかからないという、ごく当たり前の話。
Javaが最初から関数ポインタを扱えれば、イテレーターパターンなんて存在せず、敢えて言うなら
・forEachパターン:コンテナは必ずforEachインタフェースを継承/実装しなければならない
とかになってたと思うぜ。(もはやパターンではなくただのコーディングルールだが)
>>711
> メモリが確保できない時(エラーを生成する余裕すらない時もある)とか
Javaの場合はもしもの時用に1MBのメモリを確保していた。
ただ、メモリで落ちた場合は「あと数KBあったら落ちずに済んだのに…」が大半だろうし、
非常用に1MBはでかすぎるだろ、という事で、最近は500KBに減らされたと聞いた。
>>714
> 必要もねえのに勉強しちゃって
それは「デザインパターンの意義は、命名した事くらいだ」の人達の意見だし、実際これも当たっているが、
もともと「頻出パターンを学んで初心者から中級者へジャンプアップする」為の物であり、学習用だ。
そして「この場合はこう実装しろ」を規定するのはコーディングルールや設計方針であって、
「頻出パターン図鑑」であるデザインパターンではない。
コンテナの内部構造を変更されたらイテレータ自体も変更しないといけないだろ。(イテレータを使う側のコードは変更不要)
そして、
イテレーターパターン:オレオレコンテナにはイテレータを用意しろ --- (A2)
ダックタイピング:オレオレコンテナにはforEachメソッドを用意しろ --- (B2)
だが、イテレータの用意は共通インタフェースにする程度の設計は必要なのに対し、
forEachメソッドの用意はただ回せば済むから、A2よりもB2の方が簡単なんだよ。
ここで「簡単」で済む理由は、B2の方が「自然」だからであり、A2で切るのは「不自然」だからだ。
コンテナとイテレータは一体であり、内部処理はそれとは全く関連無いから元々疎結合。
それを(コンテナ)/(イテレータ+内部処理)と無理に切るからおかしくなる。
(コンテナ+イテレータ)/(内部処理)なら元々疎結合のところで疎結合にしてるから余計な手間がかからないという、ごく当たり前の話。
Javaが最初から関数ポインタを扱えれば、イテレーターパターンなんて存在せず、敢えて言うなら
・forEachパターン:コンテナは必ずforEachインタフェースを継承/実装しなければならない
とかになってたと思うぜ。(もはやパターンではなくただのコーディングルールだが)
>>711
> メモリが確保できない時(エラーを生成する余裕すらない時もある)とか
Javaの場合はもしもの時用に1MBのメモリを確保していた。
ただ、メモリで落ちた場合は「あと数KBあったら落ちずに済んだのに…」が大半だろうし、
非常用に1MBはでかすぎるだろ、という事で、最近は500KBに減らされたと聞いた。
>>714
> 必要もねえのに勉強しちゃって
それは「デザインパターンの意義は、命名した事くらいだ」の人達の意見だし、実際これも当たっているが、
もともと「頻出パターンを学んで初心者から中級者へジャンプアップする」為の物であり、学習用だ。
そして「この場合はこう実装しろ」を規定するのはコーディングルールや設計方針であって、
「頻出パターン図鑑」であるデザインパターンではない。
726デフォルトの名無しさん
2022/03/14(月) 20:55:01.53ID:lMI36uuv forEachが関数型とか信者に刺されるぞ
727デフォルトの名無しさん
2022/03/14(月) 21:05:55.05ID:O5nPkwUH 外部イテレータに対し内部イテレータをこんなに有難がる奴初めて見たわ
728デフォルトの名無しさん
2022/03/14(月) 21:07:05.83ID:0o62jolj >>726
せめてreduceだよね
せめてreduceだよね
729デフォルトの名無しさん
2022/03/14(月) 21:09:52.99ID:+YaSNWzL >>726
そうなんだけど、じゃあ何型だ?と言われて、手続き型に入れるわけにもいかんだろ。
Cでは上級テクニックだった関数ポインタを、
スクリプト言語(Python/Ruby/JS)では初心者でも常用してる。この違いは大きい。
そして関数ポインタをカジュアルに使えばコードは単純になることを証明してしまった。
逆に、Java周りの歪みは「関数ポインタを使えない事」による物が大きい。
(だから今後は徐々に改善していくのだろうけど)
そうなんだけど、じゃあ何型だ?と言われて、手続き型に入れるわけにもいかんだろ。
Cでは上級テクニックだった関数ポインタを、
スクリプト言語(Python/Ruby/JS)では初心者でも常用してる。この違いは大きい。
そして関数ポインタをカジュアルに使えばコードは単純になることを証明してしまった。
逆に、Java周りの歪みは「関数ポインタを使えない事」による物が大きい。
(だから今後は徐々に改善していくのだろうけど)
730デフォルトの名無しさん
2022/03/14(月) 21:11:48.03ID:U570WKgz731デフォルトの名無しさん
2022/03/14(月) 21:15:50.98ID:0o62jolj 関数ポインタが上級テクニック!!??
732デフォルトの名無しさん
2022/03/14(月) 21:19:10.98ID:zdS58C2+ こんだけ長文書かれるとどうしても、あちこち突っ込みたくなっちゃうな
733デフォルトの名無しさん
2022/03/14(月) 21:21:31.14ID:U570WKgz734デフォルトの名無しさん
2022/03/14(月) 21:27:54.46ID:O5nPkwUH GoFのデザパタ本ではイテレータパターンでは
> ◎実装
> Iteratorパターンには、実装に関して多くの方法とその変形がある。(略)
> 1.どのオブジェクトがiterationをするか
> (以下、内部外部イテレータの紹介部分略)
> 外部iteratorは内部iteratorに比べてより柔軟である。
> 2つの集合が等しいことを外部iteratorを使って比べるのは容易だが、
> 内部iteratorでは実用的には不可能である。(以下略)」
つまり、内部イテレータも外部イテレータもパターンとして既出
どっちの実装もともに検討されている
> ◎実装
> Iteratorパターンには、実装に関して多くの方法とその変形がある。(略)
> 1.どのオブジェクトがiterationをするか
> (以下、内部外部イテレータの紹介部分略)
> 外部iteratorは内部iteratorに比べてより柔軟である。
> 2つの集合が等しいことを外部iteratorを使って比べるのは容易だが、
> 内部iteratorでは実用的には不可能である。(以下略)」
つまり、内部イテレータも外部イテレータもパターンとして既出
どっちの実装もともに検討されている
735デフォルトの名無しさん
2022/03/14(月) 21:40:17.81ID:vcnazuXY スレタイの言語の中でjavaで培われたデザインパターンが効果的な言語ってあんの?
736デフォルトの名無しさん
2022/03/14(月) 21:41:33.54ID:ptWJKaRn 継承自体が古いからな……
737デフォルトの名無しさん
2022/03/14(月) 21:43:55.10ID:U570WKgz 知らず識らずのうちに使ってしまってるのがデザインパターンだよ
名前がなかったからあえて付けて一言で通じるようにしたことがGoFの功績
名前がなかったからあえて付けて一言で通じるようにしたことがGoFの功績
738デフォルトの名無しさん
2022/03/14(月) 21:46:41.46ID:O5nPkwUH 初心者のうちはデザパタに興味持たなくていいよ
必要性を感じてからはじめて手を出せばいい
興味本位だけで手を出しても何も得られない
勉強にもならない
半可通によるデザパタ乱用か
デザパタ不要論者になって暴れだすか
繰り返すが
デザパタには必要にかられてから手を出せば十分
必要性を感じてからはじめて手を出せばいい
興味本位だけで手を出しても何も得られない
勉強にもならない
半可通によるデザパタ乱用か
デザパタ不要論者になって暴れだすか
繰り返すが
デザパタには必要にかられてから手を出せば十分
739デフォルトの名無しさん
2022/03/14(月) 21:48:26.00ID:+YaSNWzL >>733
> それが必要と思ったことがない
それはJavaの話?なら最悪だと思うのはGUIで、
element.onclick = function(){};
が書けないものだから、
1. elementを継承したオレオレエレメントクラスを作って
2. それにonclickインタフェースを継承して、そこに処理を書く
とかやるんだろ。一応デコレーターパターンになるのか?
どう考えても頭おかしいし、最悪だろこのソリューションは。
当然JavaのGUIなんて早々に滅亡した。
ただまあ、Java作った奴が馬鹿だったわけではない。
(むしろ一番成功した言語なので、一番賢かったとも言うべき存在)
当時は関数ポインタの重要性が今程認識されていなかっただけの話。
ならさっさと入れれば良かったのに、
そこをデコレーターパターンで誤魔化してきた奴は死刑でいいよマジで。
というのもあって、俺はデザインパターンはゴミだと見ている。
そもそもそれが本当に頻出なら、簡単に書ける構文を用意しておくべきだ。
だから整備された言語なら何も意識せず自然に書いてても
結果的にデザインパターンのどれかに分類される事と同じ事をやってるはずで、
今現在はそうだと思ってる。
> それが必要と思ったことがない
それはJavaの話?なら最悪だと思うのはGUIで、
element.onclick = function(){};
が書けないものだから、
1. elementを継承したオレオレエレメントクラスを作って
2. それにonclickインタフェースを継承して、そこに処理を書く
とかやるんだろ。一応デコレーターパターンになるのか?
どう考えても頭おかしいし、最悪だろこのソリューションは。
当然JavaのGUIなんて早々に滅亡した。
ただまあ、Java作った奴が馬鹿だったわけではない。
(むしろ一番成功した言語なので、一番賢かったとも言うべき存在)
当時は関数ポインタの重要性が今程認識されていなかっただけの話。
ならさっさと入れれば良かったのに、
そこをデコレーターパターンで誤魔化してきた奴は死刑でいいよマジで。
というのもあって、俺はデザインパターンはゴミだと見ている。
そもそもそれが本当に頻出なら、簡単に書ける構文を用意しておくべきだ。
だから整備された言語なら何も意識せず自然に書いてても
結果的にデザインパターンのどれかに分類される事と同じ事をやってるはずで、
今現在はそうだと思ってる。
740デフォルトの名無しさん
2022/03/14(月) 21:55:55.62ID:mIWYJMZE >デザパタには必要にかられてから手を出せば十分
後から必要にかられることなんてあるのかね
後から必要にかられることなんてあるのかね
741デフォルトの名無しさん
2022/03/14(月) 21:57:36.60ID:U570WKgz >>739
awtの頃はそんな感じでいろいろ大変だったと思うけど、JWTとか出てきてからは内部クラスでやるようになって、そこから先はJava2Dとかいろいろ出て来たけど追ってない。
今はJavaFXみたいだけど、まるで浸透してる気配はないね。
そもそもで言えばJavaでGUIはあんまりやらんけど、理由はクライアントツールならWindowsだから.NETでいいという感覚からだと思う。
個人的にはnativeと繋ぎやすいなど、.NETの方がメリットを享受できたからだと思うよ。
何度も言うけど、JavaScriptと比較するのは根本的に間違っている。
awtの頃はそんな感じでいろいろ大変だったと思うけど、JWTとか出てきてからは内部クラスでやるようになって、そこから先はJava2Dとかいろいろ出て来たけど追ってない。
今はJavaFXみたいだけど、まるで浸透してる気配はないね。
そもそもで言えばJavaでGUIはあんまりやらんけど、理由はクライアントツールならWindowsだから.NETでいいという感覚からだと思う。
個人的にはnativeと繋ぎやすいなど、.NETの方がメリットを享受できたからだと思うよ。
何度も言うけど、JavaScriptと比較するのは根本的に間違っている。
742デフォルトの名無しさん
2022/03/14(月) 22:02:13.08ID:U570WKgz うっかり用語素で間違ったw JWTじゃなくてSwingね
743デフォルトの名無しさん
2022/03/14(月) 22:37:01.86ID:+YaSNWzL >>741
> 何度も言うけど、JavaScriptと比較するのは根本的に間違っている。
何故?JSはGUI用の言語だが、俺がC#の糞さについて言ってるのはGUIの部分であり、
JavaもGUIの時に糞さが際だつから取り上げてる。
元々の原因は(既に言ったが)その時代には関数ポインタの重要性が認識されておらず、
また、GUIもまだこなれておらず、結果的に
C#:GUI部分がJSよりだいぶ糞だった(GUIの方針が間違ってた)
Java:関数ポインタがないのでGUIが壊滅的に糞、とても組めたものではない
というところで、逆に言えばGUI以外ならJavaは問題ないので今の地位がある。
C#も同様だが、こちらはだいぶ変化して、今のC#のGUI側面はほぼJSと同じプログラミングモデルになってる。
ちなみに739で言ったJavaのGUIは、WebAPIだ。(=ブラウザ用。FXやSwingとかは俺は知らん)
一応2015頃まではJavaでもクライアントサイドのコードが書けるようになってたし、APIも生きてた。
(APIだけなら今でも使えるはずだが)
でも糞過ぎて誰も書かなかったので、セキュリティが云々という適当な言い訳で廃止されて現在に至る。
というわけだが、デザインパターンが言語の不備を隠蔽するバッドノウハウ的に使われてるようにしか見えなかったから、
俺はデザインパターンを全く信用していない。
とはいえ、今時の言語とフレームワークを使ってれば、それを○○パターンと呼ぶ事を知らないだけで、
普通に使っているはずであり、これが正常な状態だと思う。
> 何度も言うけど、JavaScriptと比較するのは根本的に間違っている。
何故?JSはGUI用の言語だが、俺がC#の糞さについて言ってるのはGUIの部分であり、
JavaもGUIの時に糞さが際だつから取り上げてる。
元々の原因は(既に言ったが)その時代には関数ポインタの重要性が認識されておらず、
また、GUIもまだこなれておらず、結果的に
C#:GUI部分がJSよりだいぶ糞だった(GUIの方針が間違ってた)
Java:関数ポインタがないのでGUIが壊滅的に糞、とても組めたものではない
というところで、逆に言えばGUI以外ならJavaは問題ないので今の地位がある。
C#も同様だが、こちらはだいぶ変化して、今のC#のGUI側面はほぼJSと同じプログラミングモデルになってる。
ちなみに739で言ったJavaのGUIは、WebAPIだ。(=ブラウザ用。FXやSwingとかは俺は知らん)
一応2015頃まではJavaでもクライアントサイドのコードが書けるようになってたし、APIも生きてた。
(APIだけなら今でも使えるはずだが)
でも糞過ぎて誰も書かなかったので、セキュリティが云々という適当な言い訳で廃止されて現在に至る。
というわけだが、デザインパターンが言語の不備を隠蔽するバッドノウハウ的に使われてるようにしか見えなかったから、
俺はデザインパターンを全く信用していない。
とはいえ、今時の言語とフレームワークを使ってれば、それを○○パターンと呼ぶ事を知らないだけで、
普通に使っているはずであり、これが正常な状態だと思う。
744デフォルトの名無しさん
2022/03/14(月) 22:52:50.90ID:0o62jolj 継承は結構GUIと相性良いので、その主張はズレてるとしか感じないな。
関数が第一級オブジェクトであるメリットはそんなGUIがどうのこうのなんて狭い範囲で語れる話じゃないし。
関数が第一級オブジェクトであるメリットはそんなGUIがどうのこうのなんて狭い範囲で語れる話じゃないし。
745デフォルトの名無しさん
2022/03/14(月) 22:58:10.20ID:U570WKgz >>743
Webの画面をGUIとは言わない…
Webであれば、基本はHTML+JavaScript(+CSS)であり、これに最近wasmが付く程度
サーバー側の言語はいくつかあるが、最終的にクライアントに送れるのは上記であり、表現は違わない
最近は仮想DOMを使用するタイプのクライアント側でテンプレートを流し込むコンポーネントを記述するのが普通で、デファクトはJavaScriptを使用するreact
Javaで典型的なSpringは業務に使用されることが多いため、そもそもSPAである必要がなく、昔ながらのサーバー側でテンプレートを流し込むページ記述が普通だと思う
双方を比べるのはいささか不自然で、なんで比較したいのかすら分からない
C#だとBlazorがあって、これだとwasmを使うことでクライアント側も.NETで記述できる
あんまり人気ないけどね
何に対してどんな文句を言いたいのかサッパリなので、よく整理してから話すように
Webの画面をGUIとは言わない…
Webであれば、基本はHTML+JavaScript(+CSS)であり、これに最近wasmが付く程度
サーバー側の言語はいくつかあるが、最終的にクライアントに送れるのは上記であり、表現は違わない
最近は仮想DOMを使用するタイプのクライアント側でテンプレートを流し込むコンポーネントを記述するのが普通で、デファクトはJavaScriptを使用するreact
Javaで典型的なSpringは業務に使用されることが多いため、そもそもSPAである必要がなく、昔ながらのサーバー側でテンプレートを流し込むページ記述が普通だと思う
双方を比べるのはいささか不自然で、なんで比較したいのかすら分からない
C#だとBlazorがあって、これだとwasmを使うことでクライアント側も.NETで記述できる
あんまり人気ないけどね
何に対してどんな文句を言いたいのかサッパリなので、よく整理してから話すように
746デフォルトの名無しさん
2022/03/14(月) 23:03:29.39ID:+YaSNWzL >>744
エスパーするが、
> 継承は結構GUIと相性良い
これはGUIコンポーネントを『作る』側、つまりフレームワーク作成側の話だろ。
俺が言ってるのは『使う』側、つまり実際にJS同様GUIのコードを書く時についてだ。
> 関数が第一級オブジェクトであるメリット
ちなみにこれは俺は未だに理解出来ないので具体的に教えて欲しい。
実際、関数にメソッドを生やせるだけで、何かが出来るようになるわけでもないので、
全部入りのC++もまだ第一級オブジェクトとしての関数を入れてないし、多分検討もしてない。
エスパーするが、
> 継承は結構GUIと相性良い
これはGUIコンポーネントを『作る』側、つまりフレームワーク作成側の話だろ。
俺が言ってるのは『使う』側、つまり実際にJS同様GUIのコードを書く時についてだ。
> 関数が第一級オブジェクトであるメリット
ちなみにこれは俺は未だに理解出来ないので具体的に教えて欲しい。
実際、関数にメソッドを生やせるだけで、何かが出来るようになるわけでもないので、
全部入りのC++もまだ第一級オブジェクトとしての関数を入れてないし、多分検討もしてない。
747デフォルトの名無しさん
2022/03/14(月) 23:14:29.77ID:+YaSNWzL >>745
> 何に対してどんな文句を言いたいのかサッパリなので、よく整理してから話すように
いや文句を言うのは既に終わってて、俺のスタンスを繰り返し言ってるだけ。
だからまあ、もう終わりでいいのも確か。
> Webの画面をGUIとは言わない…
それはない。ユーザーがGUIと思えればそれはGUIだよ。
VSCodeをCUIとは言わないだろ。
WebアプリにしてもGUIだし、ガワアプリは中身がWebコンポーネントだからJSだよ。
> 昔ながらのサーバー側でテンプレートを流し込むページ記述が普通だと思う
それは表示するだけのページだね。それはWeb『ページ』と呼ばれる。
GUIだと言われるような物はWeb『アプリ』と呼ばれる。
まあしかし、合意を形成する必要もないし、
言いたい事は既に言ってるし、まあ終わりでいい。
色々ありがとう。
少なくとも当時のC#使いが全く問題を感じてなかったという事だから、
・C#はもともとGUI向けの設計ではなかった
・.NETはそもそもユーザーの想定レベルが高くて無駄に苦労する
のかもな、とは思えてきた。
> 何に対してどんな文句を言いたいのかサッパリなので、よく整理してから話すように
いや文句を言うのは既に終わってて、俺のスタンスを繰り返し言ってるだけ。
だからまあ、もう終わりでいいのも確か。
> Webの画面をGUIとは言わない…
それはない。ユーザーがGUIと思えればそれはGUIだよ。
VSCodeをCUIとは言わないだろ。
WebアプリにしてもGUIだし、ガワアプリは中身がWebコンポーネントだからJSだよ。
> 昔ながらのサーバー側でテンプレートを流し込むページ記述が普通だと思う
それは表示するだけのページだね。それはWeb『ページ』と呼ばれる。
GUIだと言われるような物はWeb『アプリ』と呼ばれる。
まあしかし、合意を形成する必要もないし、
言いたい事は既に言ってるし、まあ終わりでいい。
色々ありがとう。
少なくとも当時のC#使いが全く問題を感じてなかったという事だから、
・C#はもともとGUI向けの設計ではなかった
・.NETはそもそもユーザーの想定レベルが高くて無駄に苦労する
のかもな、とは思えてきた。
748デフォルトの名無しさん
2022/03/14(月) 23:34:58.46ID:tKTotEWb >>740
自分が当たり前にやってることを他人に説明する必要が出てきた時にパターンの名前が必要になる
自分が当たり前にやってることを他人に説明する必要が出てきた時にパターンの名前が必要になる
749デフォルトの名無しさん
2022/03/14(月) 23:43:23.14ID:7sD4WO1E750デフォルトの名無しさん
2022/03/14(月) 23:45:07.77ID:U570WKgz >>747
> > 何に対してどんな文句を言いたいのかサッパリなので、よく整理してから話すように
> いや文句を言うのは既に終わってて、俺のスタンスを繰り返し言ってるだけ。
> だからまあ、もう終わりでいいのも確か。
じゃあ終わりで
最後にWebの画面レンダリングをGUIに持ってくるケースはある
JavaScriptのelectronやRustのtauri、古くはIEコンポーネントみたいなので非常に特殊なパターン
vscode他を除けば、ゲームとかワンチャンモバイルも狙うGUIでたまに使用されるとか、アプリでWebの画面を出したいとき稀に使用される
嵩張るために滅多に使用されないか、こっそり使用されることが多い
> > 何に対してどんな文句を言いたいのかサッパリなので、よく整理してから話すように
> いや文句を言うのは既に終わってて、俺のスタンスを繰り返し言ってるだけ。
> だからまあ、もう終わりでいいのも確か。
じゃあ終わりで
最後にWebの画面レンダリングをGUIに持ってくるケースはある
JavaScriptのelectronやRustのtauri、古くはIEコンポーネントみたいなので非常に特殊なパターン
vscode他を除けば、ゲームとかワンチャンモバイルも狙うGUIでたまに使用されるとか、アプリでWebの画面を出したいとき稀に使用される
嵩張るために滅多に使用されないか、こっそり使用されることが多い
751デフォルトの名無しさん
2022/03/14(月) 23:45:51.86ID:+YaSNWzL >>749
とりあえず「データ競合」の意味を具体的に明確にしてくれ
とりあえず「データ競合」の意味を具体的に明確にしてくれ
752デフォルトの名無しさん
2022/03/14(月) 23:47:54.88ID:U570WKgz753デフォルトの名無しさん
2022/03/14(月) 23:57:31.30ID:7sD4WO1E >>709
イテレータはコンテナと密結合、は間違い
そのようになってしまっている悲しい言語も存在するだけにすぎない
例えばRustなどではイテレータ連鎖に一度もコンテナが登場すらしないこともあるように
イテレータとコンテナは独立の存在
コンテナの中身を順に出すイテレータを作れるとか
イテレータが吐き出したものをコンテナに格納できるといった
端点で関連するケースがありうるだけにすぎない
イテレータはコンテナと密結合、は間違い
そのようになってしまっている悲しい言語も存在するだけにすぎない
例えばRustなどではイテレータ連鎖に一度もコンテナが登場すらしないこともあるように
イテレータとコンテナは独立の存在
コンテナの中身を順に出すイテレータを作れるとか
イテレータが吐き出したものをコンテナに格納できるといった
端点で関連するケースがありうるだけにすぎない
754デフォルトの名無しさん
2022/03/15(火) 00:10:15.67ID:N7uKXWL+755デフォルトの名無しさん
2022/03/15(火) 00:13:54.20ID:YRrS4TOh デザインパターンの時代には抽象化されたループや分岐が作られた
それを具体化するたびにクラスを作りクラスに名前をつける
まるでgotoの行き先にいちいち名前をつけるみたいに
そのあとラムダが普及して名前をつける必要がなくなった
whileやifやelseのブロックに名前がないのと同じ
それを具体化するたびにクラスを作りクラスに名前をつける
まるでgotoの行き先にいちいち名前をつけるみたいに
そのあとラムダが普及して名前をつける必要がなくなった
whileやifやelseのブロックに名前がないのと同じ
756デフォルトの名無しさん
2022/03/15(火) 00:35:40.32ID:lBfKiKMI >>753
> イテレータはコンテナと密結合、は間違い
間違ってねえよ。
というか、多分「密結合=悪」と洗脳されてるから否定したいのだろうけど、
俺が言ってるのは、
・コンテナとイテレータの関連は、
イテレータと中身の処理の関連より100万倍くらい強い
という事。だから
・コンテナとイテレータの結合は、イテレータと中身の処理 より 100万倍密結合
であり、これを密結合と言わずに何という?という話。
そりゃイテレータで無理矢理切り離せばコード上は切り離せるけど、それやっても大してメリット無いし、
ほぼ100%の状況で「頭から全部イテレート」で済むんだからforEach(関数ポインタ)の方が筋がいい。
そしてJSのArrayなんてイテレータはないよ。実際要らんし。
forEachが遅かったからイテレータ、ならそれは「言語の不備」だよ。
C++はその辺順番を入れ替えて同速にしてしまったし、知らんがRubyでもlazyモードで同様なんだろ。
勿論イテレータの方がいい場合もあるはずだが、これは昨今のimmutableや再代入を避けるのと同様、
これまでは不要にイテレータを使いすぎてただけ。
本当にイテレータが必要なところだけイテレータにして、その他はforEach(関数ポインタ)の方がいいよ。
> イテレータはコンテナと密結合、は間違い
間違ってねえよ。
というか、多分「密結合=悪」と洗脳されてるから否定したいのだろうけど、
俺が言ってるのは、
・コンテナとイテレータの関連は、
イテレータと中身の処理の関連より100万倍くらい強い
という事。だから
・コンテナとイテレータの結合は、イテレータと中身の処理 より 100万倍密結合
であり、これを密結合と言わずに何という?という話。
そりゃイテレータで無理矢理切り離せばコード上は切り離せるけど、それやっても大してメリット無いし、
ほぼ100%の状況で「頭から全部イテレート」で済むんだからforEach(関数ポインタ)の方が筋がいい。
そしてJSのArrayなんてイテレータはないよ。実際要らんし。
forEachが遅かったからイテレータ、ならそれは「言語の不備」だよ。
C++はその辺順番を入れ替えて同速にしてしまったし、知らんがRubyでもlazyモードで同様なんだろ。
勿論イテレータの方がいい場合もあるはずだが、これは昨今のimmutableや再代入を避けるのと同様、
これまでは不要にイテレータを使いすぎてただけ。
本当にイテレータが必要なところだけイテレータにして、その他はforEach(関数ポインタ)の方がいいよ。
757デフォルトの名無しさん
2022/03/15(火) 01:11:07.84ID:DajlRg+n 何度も言うが、デザインパターンのiteratorはiteratorが抽象化されている
https://ja.wikipedia.org/wiki/Iterator_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3#:~:text=Iterator%20%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%EF%BC%88%E3%82%A4%E3%83%86%E3%83%AC%E3%83%BC%E3%82%BF%E3%83%BB%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%EF%BC%89,%E3%81%93%E3%81%A8%E3%82%92%E7%9B%AE%E7%9A%84%E3%81%A8%E3%81%99%E3%82%8B%E3%80%82
なので密結合にはならない。この図では
ConcreteAggregateとConcreteIteratorは蜜だが、AggregateとIteratorは疎
どうしてここまで説明しないと分からんのだ…
あと関数ポインタなどいらん
内部イテレータ方式喜ぶバカなんてお前くらいだ
https://ja.wikipedia.org/wiki/Iterator_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3#:~:text=Iterator%20%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%EF%BC%88%E3%82%A4%E3%83%86%E3%83%AC%E3%83%BC%E3%82%BF%E3%83%BB%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%EF%BC%89,%E3%81%93%E3%81%A8%E3%82%92%E7%9B%AE%E7%9A%84%E3%81%A8%E3%81%99%E3%82%8B%E3%80%82
なので密結合にはならない。この図では
ConcreteAggregateとConcreteIteratorは蜜だが、AggregateとIteratorは疎
どうしてここまで説明しないと分からんのだ…
あと関数ポインタなどいらん
内部イテレータ方式喜ぶバカなんてお前くらいだ
758デフォルトの名無しさん
2022/03/15(火) 01:43:01.13ID:DajlRg+n Javaで関数ポインタ要らない例
// Main.java
import java.util.List;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.function.Consumer;
public class Main {
public static class MyContainer<T> extends ArrayList<T> {
public MyContainer(List list) {super(list);}
public void foreach(Consumer<T> consumer) {
for(var e: this) {
consumer.accept(e);
}
}
}
public static void main(String[] args) {
MyContainer<Integer> mine = new MyContainer<Integer>(Arrays.asList(1,2,3));
mine.foreach((value)->{System.out.println(value);});
}
}
// Main.java
import java.util.List;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.function.Consumer;
public class Main {
public static class MyContainer<T> extends ArrayList<T> {
public MyContainer(List list) {super(list);}
public void foreach(Consumer<T> consumer) {
for(var e: this) {
consumer.accept(e);
}
}
}
public static void main(String[] args) {
MyContainer<Integer> mine = new MyContainer<Integer>(Arrays.asList(1,2,3));
mine.foreach((value)->{System.out.println(value);});
}
}
759デフォルトの名無しさん
2022/03/15(火) 02:53:52.15ID:rTKg59xg イテレーター原理主義なんじゃないの
コレクションの要素を列挙するものしかイテレーターと呼ばないと考えてるとか
コレクションの要素を列挙するものしかイテレーターと呼ばないと考えてるとか
760デフォルトの名無しさん
2022/03/15(火) 07:48:57.53ID:zEYayVtk >>749
シングルスレッドでデータ競合起こるコード例あんの?
シングルスレッドでデータ競合起こるコード例あんの?
761デフォルトの名無しさん
2022/03/15(火) 07:58:16.07ID:zEYayVtk void f(int*a){
int*b=a;
*a=(*b)++;
}
みたいのはただの未定義動作だから許さんぞ
int*b=a;
*a=(*b)++;
}
みたいのはただの未定義動作だから許さんぞ
762デフォルトの名無しさん
2022/03/15(火) 08:44:41.02ID:dING6/Lp >>749
保証していないよ。unsafeがあるだろ。
保証していないよ。unsafeがあるだろ。
763デフォルトの名無しさん
2022/03/15(火) 08:45:32.91ID:bERyk9+R >>756
コンテナベースのイテレータを提供する言語もあるから誤解しているのだろうけど
本来のイテレータ自体はコンテナとは別の存在
例えばrustで以下のイテレータチェーン
(1..)
.map(|n| (n * n - n) / 2 * 3)
.take_while(|n| n < &23)
.map(|n| n % 4 + 114)
.map(char::from)
.for_each(|n| print!("{n}"))
これは「rust」と表示するけどコンテナ等は全く登場しない
コンテナベースのイテレータを提供する言語もあるから誤解しているのだろうけど
本来のイテレータ自体はコンテナとは別の存在
例えばrustで以下のイテレータチェーン
(1..)
.map(|n| (n * n - n) / 2 * 3)
.take_while(|n| n < &23)
.map(|n| n % 4 + 114)
.map(char::from)
.for_each(|n| print!("{n}"))
これは「rust」と表示するけどコンテナ等は全く登場しない
764デフォルトの名無しさん
2022/03/15(火) 08:52:20.69ID:bERyk9+R >>760
シングルスレッドでデータ競合を起こす例がwikipedia及びそのソース元の言語公式仕様定義に明記されているね
https://ja.wikipedia.org/wiki/データ競合
> JavaScript (ECMAScript) において、read/writeイベントEとDが以下の条件を満たしている場合「EとDはデータ競合にある」と定義される[2]。
> ・EあるいはDに順序が定義されない(not SeqCst)
> ・EとDが重複したrangeを有する(overlapping range)
シングルスレッドでデータ競合を起こす例がwikipedia及びそのソース元の言語公式仕様定義に明記されているね
https://ja.wikipedia.org/wiki/データ競合
> JavaScript (ECMAScript) において、read/writeイベントEとDが以下の条件を満たしている場合「EとDはデータ競合にある」と定義される[2]。
> ・EあるいはDに順序が定義されない(not SeqCst)
> ・EとDが重複したrangeを有する(overlapping range)
765デフォルトの名無しさん
2022/03/15(火) 18:54:21.48ID:zz0oZcbP https://ideone.com/AKsoei
javaの典型的なイベント処理はこう
多言語のようにonclick = と指定するのではなく
イベント発生元にaddListener()でリスナを追加する
その時匿名クラス式を使うのもまた大昔からのやり方
匿名クラスについては以下を参照のこと
https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html
javaの典型的なイベント処理はこう
多言語のようにonclick = と指定するのではなく
イベント発生元にaddListener()でリスナを追加する
その時匿名クラス式を使うのもまた大昔からのやり方
匿名クラスについては以下を参照のこと
https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html
766デフォルトの名無しさん
2022/03/15(火) 18:58:10.48ID:H3mwwYQo どの言語でも『single writer XOR multiple readers』の原則を守ればデータ競合は起こらない
逆にそれを破ればシングルスレッドでもデータ競合は発生し得る
ほとんどの言語でデータ競合が起きる
>>762
Rustは『single writer XOR multiple readers』を言語仕様で満たしている
そのためRustではメモリ安全性だけでなくデータ競合も起きないことを保証している
もちろんC/C++と同じように生ポインタを使えるunsafeを使った場合はその部分を人間が責任を持つ
逆にそれを破ればシングルスレッドでもデータ競合は発生し得る
ほとんどの言語でデータ競合が起きる
>>762
Rustは『single writer XOR multiple readers』を言語仕様で満たしている
そのためRustではメモリ安全性だけでなくデータ競合も起きないことを保証している
もちろんC/C++と同じように生ポインタを使えるunsafeを使った場合はその部分を人間が責任を持つ
767デフォルトの名無しさん
2022/03/15(火) 19:21:02.60ID:DajlRg+n768デフォルトの名無しさん
2022/03/15(火) 20:31:20.53ID:lBfKiKMI769デフォルトの名無しさん
2022/03/15(火) 20:50:33.68ID:DajlRg+n まあシングルスレッドでも普通にコールバック多いと意図しないデータ競合はいつでも起きるけどな
言葉の定義の問題になるので俺は黙ってたけど・・・
言葉の定義の問題になるので俺は黙ってたけど・・・
770デフォルトの名無しさん
2022/03/15(火) 20:57:03.80ID:bERyk9+R >>768
それはwikipediaにソースが明記されているように
JavaScript(ECMAScript)の公式仕様書の記載です
ErlangはETSが共有データとなるため
留意してコードを書かないとデータ競合が発生します
それはwikipediaにソースが明記されているように
JavaScript(ECMAScript)の公式仕様書の記載です
ErlangはETSが共有データとなるため
留意してコードを書かないとデータ競合が発生します
771デフォルトの名無しさん
2022/03/15(火) 21:19:56.63ID:lBfKiKMI >>765
それもしかしてわざわざ書いてくれた?ならどうも。
名前からしてそれは「アダプターパターン」になるのか?まあこれはさておき、
これがデザインパターンの問題を典型的に示してるとも思う。
デザインパターンは「実際にこう書ける」であり、「こう書きたい/書ければいいのに」ではないので、
実践的ではあるが現状肯定的で、理想的では全くない。
だからどうしてもバッドパターンが混ざり、言語が酷ければ酷い程それが増える。
Javaの場合は関数ポインタを直接取り扱えない事が致命的に欠点で、結果、
関数ポインタ専用コンテナとしてクラスを用いて継承をこねくり回したパターンが多くなってるが、
それらは他言語では不要なものばかりだ。
本当は「あらゆる言語の中で一番美しい書き方」集にすれば良かったのだろう。
それもしかしてわざわざ書いてくれた?ならどうも。
名前からしてそれは「アダプターパターン」になるのか?まあこれはさておき、
これがデザインパターンの問題を典型的に示してるとも思う。
デザインパターンは「実際にこう書ける」であり、「こう書きたい/書ければいいのに」ではないので、
実践的ではあるが現状肯定的で、理想的では全くない。
だからどうしてもバッドパターンが混ざり、言語が酷ければ酷い程それが増える。
Javaの場合は関数ポインタを直接取り扱えない事が致命的に欠点で、結果、
関数ポインタ専用コンテナとしてクラスを用いて継承をこねくり回したパターンが多くなってるが、
それらは他言語では不要なものばかりだ。
本当は「あらゆる言語の中で一番美しい書き方」集にすれば良かったのだろう。
772デフォルトの名無しさん
2022/03/15(火) 21:20:12.77ID:lBfKiKMI 上記の通り、結局それは、関数ポインタを直接扱えなかった欠点を回避する為に、
関数ポインタ専用コンテナとして「匿名クラス」を用いているだけ。
素直に関数ポインタを直接扱えるようにすれば不要だった。
勿論ラムダの代替にもなるが、結局ラムダも入れてしまってるのだから、やっぱり「クラス」に見えるのは使いづらいんだよ。
(この辺はC++も同様で、ファンクタでいいだろ、でずいぶん粘ったようだが、結局ラムダも入れてしまってる。
C++に関しては仕様の直交性なんて誰も求めてないので、粘った意味も分からないが)
Java::匿名クラスのところを
> label.addMouseListener(new MouseListener() {
> public void mouseClicked(MouseEvent e) {}
> public void mouseEntered(MouseEvent e) {}
> public void mouseExited(MouseEvent e) {}
> public void mousePressed(MouseEvent e) {}
> public void mouseReleased(MouseEvent e) {}
> });
JS:汎用コンテナで普通にかけるので、○○パターンとかの命名なんてされない。
> label.addMouseListener({
> mouseClicked: function(e) {},
> mouseEntered: function(e) {},
> mouseExited: function(e) {},
> mousePressed: function(e) {},
> mouseReleased: function(e) {},
> });
ただしこんな書き方は普通はせず、単に
elem.onclick = function()e){};
で済まされるが。
関数ポインタ専用コンテナとして「匿名クラス」を用いているだけ。
素直に関数ポインタを直接扱えるようにすれば不要だった。
勿論ラムダの代替にもなるが、結局ラムダも入れてしまってるのだから、やっぱり「クラス」に見えるのは使いづらいんだよ。
(この辺はC++も同様で、ファンクタでいいだろ、でずいぶん粘ったようだが、結局ラムダも入れてしまってる。
C++に関しては仕様の直交性なんて誰も求めてないので、粘った意味も分からないが)
Java::匿名クラスのところを
> label.addMouseListener(new MouseListener() {
> public void mouseClicked(MouseEvent e) {}
> public void mouseEntered(MouseEvent e) {}
> public void mouseExited(MouseEvent e) {}
> public void mousePressed(MouseEvent e) {}
> public void mouseReleased(MouseEvent e) {}
> });
JS:汎用コンテナで普通にかけるので、○○パターンとかの命名なんてされない。
> label.addMouseListener({
> mouseClicked: function(e) {},
> mouseEntered: function(e) {},
> mouseExited: function(e) {},
> mousePressed: function(e) {},
> mouseReleased: function(e) {},
> });
ただしこんな書き方は普通はせず、単に
elem.onclick = function()e){};
で済まされるが。
773デフォルトの名無しさん
2022/03/15(火) 21:21:54.17ID:lBfKiKMI あとついでに言うと、Java的にあらゆるイベントを纏めて記述方式はコード的に無理があって、 --- (A)
だいたいclick系とmove系(Enterd/Exited/Pressed/Released)は別物になる。
前者はそのelemだけで完結するが、
後者はドラッグ&ドロップ等なので、大体周りのelemにも同じようなコードを走行させる事になるから。
だから「匿名クラスでその場に定義のみ」だとかなり悲惨なコピペだらけになる。
最低限、そのメソッドに直接関数を差し込める書き方、
function click(){}
function move(){}
label.addMouseListener({
mouseClicked: click,
mouseEntered: move,
mouseExited: move,
mousePressed: move,
mouseReleased: move,
});
とかが出来ないと死ねる。で、Javaはこれも出来なかったように見える,。(Java7までは)
だからJavaのGUIは完全に死んだ。
ただしイベントがバブルする場合は上記 (A) の問題は実質的にない。
(どうせ纏めて記述するに近い物になるので。
つってもJavaのGUIなんて全く整備されてないから未だにバブルしないんじゃないかとも思うが。
なお.NETはWPFからバブルする)
だいたいclick系とmove系(Enterd/Exited/Pressed/Released)は別物になる。
前者はそのelemだけで完結するが、
後者はドラッグ&ドロップ等なので、大体周りのelemにも同じようなコードを走行させる事になるから。
だから「匿名クラスでその場に定義のみ」だとかなり悲惨なコピペだらけになる。
最低限、そのメソッドに直接関数を差し込める書き方、
function click(){}
function move(){}
label.addMouseListener({
mouseClicked: click,
mouseEntered: move,
mouseExited: move,
mousePressed: move,
mouseReleased: move,
});
とかが出来ないと死ねる。で、Javaはこれも出来なかったように見える,。(Java7までは)
だからJavaのGUIは完全に死んだ。
ただしイベントがバブルする場合は上記 (A) の問題は実質的にない。
(どうせ纏めて記述するに近い物になるので。
つってもJavaのGUIなんて全く整備されてないから未だにバブルしないんじゃないかとも思うが。
なお.NETはWPFからバブルする)
774デフォルトの名無しさん
2022/03/15(火) 21:23:27.75ID:AHjgvQpl >>770
ESの仕様にあるデータ競合はWeb Worker(つまり別スレッド)とSharedArrayBufferなんかでメモリ共有した場合の話であって、シングルスレッドでデータ競合すると主張しているわけではないと思うが
ESの仕様にあるデータ競合はWeb Worker(つまり別スレッド)とSharedArrayBufferなんかでメモリ共有した場合の話であって、シングルスレッドでデータ競合すると主張しているわけではないと思うが
775デフォルトの名無しさん
2022/03/15(火) 21:26:20.87ID:H3mwwYQo シングルスレッドでもデータ競合は起きる
>>769氏も言っているように
>>769氏も言っているように
776デフォルトの名無しさん
2022/03/15(火) 21:31:28.32ID:lBfKiKMI >>770
> https://262.ecma-international.org/10.0/#sec-data-races
race は レースであって、競合なら confliction だよ。訳が不適切。
ただ、レーシングコンディションならRustでもいくらでも作れるはずだけど。
shared memory が出来るのだから、
同じ場所を書き換える非同期ジョブを適当に流し込めば自動的にそうなる。
Erlangでは出来ない、ってのは、上記の「同じ場所を書き換える」事が出来ないからだよ。(共有メモリも出来ない)
ETSってのは知らんが。
> https://262.ecma-international.org/10.0/#sec-data-races
race は レースであって、競合なら confliction だよ。訳が不適切。
ただ、レーシングコンディションならRustでもいくらでも作れるはずだけど。
shared memory が出来るのだから、
同じ場所を書き換える非同期ジョブを適当に流し込めば自動的にそうなる。
Erlangでは出来ない、ってのは、上記の「同じ場所を書き換える」事が出来ないからだよ。(共有メモリも出来ない)
ETSってのは知らんが。
777デフォルトの名無しさん
2022/03/15(火) 21:37:30.32ID:DajlRg+n >>771-773
だから内部クラスで書けるっての
だから内部クラスで書けるっての
778デフォルトの名無しさん
2022/03/15(火) 21:38:08.96ID:eZS8bXEN779デフォルトの名無しさん
2022/03/15(火) 21:41:04.21ID:DajlRg+n780デフォルトの名無しさん
2022/03/15(火) 21:43:51.00ID:eZS8bXEN781デフォルトの名無しさん
2022/03/15(火) 21:50:10.28ID:DajlRg+n だから言葉の定義w
関数やメソッド単位で見る人間にとっては、再入とかコールバックが輻輳してやらかす事件はとても似てるw
組込みの割込みとかシグナルとかのIPCも同様なので、まあ混ぜて考えてもいいと思うって人はいるんじゃないかと思ったw
関数やメソッド単位で見る人間にとっては、再入とかコールバックが輻輳してやらかす事件はとても似てるw
組込みの割込みとかシグナルとかのIPCも同様なので、まあ混ぜて考えてもいいと思うって人はいるんじゃないかと思ったw
782デフォルトの名無しさん
2022/03/15(火) 21:55:39.00ID:bERyk9+R783デフォルトの名無しさん
2022/03/15(火) 22:10:46.08ID:eZS8bXEN >>782
シングルスレッドでshared xor mutableで防げるバグがあるのはそう(イテレート中にイテレート元にデータ挿入しちゃうとか)だが
それはデータ競合とは言わないのでは
少なくともRust公式はdata raceの定義をマルチスレッド前提にしているし、一般的にもそうだろう
https://doc.rust-lang.org/nomicon/races.html
シングルスレッドでshared xor mutableで防げるバグがあるのはそう(イテレート中にイテレート元にデータ挿入しちゃうとか)だが
それはデータ競合とは言わないのでは
少なくともRust公式はdata raceの定義をマルチスレッド前提にしているし、一般的にもそうだろう
https://doc.rust-lang.org/nomicon/races.html
784デフォルトの名無しさん
2022/03/15(火) 22:23:00.78ID:H3mwwYQo >>783
それは非同期でマルチグリーンスレッドでも全く同様に起きることであるし
それは非同期コールバックのあるJavaScriptでも同じく起きることであるし
シングルOSスレッドでも発生しちゃうな
それは非同期でマルチグリーンスレッドでも全く同様に起きることであるし
それは非同期コールバックのあるJavaScriptでも同じく起きることであるし
シングルOSスレッドでも発生しちゃうな
785デフォルトの名無しさん
2022/03/15(火) 22:33:43.93ID:lBfKiKMI786デフォルトの名無しさん
2022/03/15(火) 22:36:34.90ID:Absh97Vn データ競合(data race)という言葉の定義自体が言語によって違うんか
それならなんか人によって話が噛み合ってないのも納得
C++11だとマルチスレッドが前提になってた
https://timsong-cpp.github.io/cppwp/n3337/intro.multithread#def:data_race
それならなんか人によって話が噛み合ってないのも納得
C++11だとマルチスレッドが前提になってた
https://timsong-cpp.github.io/cppwp/n3337/intro.multithread#def:data_race
787デフォルトの名無しさん
2022/03/15(火) 22:50:45.74ID:MfNILggQ ここまで出た通りES/Rust/C++はマルチスレッド前提で、Javaも確かそうだったし
シングルスレッド派の人はちゃんと定義されてるやつを示してほしい
日本語Wikipediaじゃなくて
>>785
訳が競争というのはまぁそうかもしれないけど、CS系学部の教科書レベルで競合に統一されちゃってるので、いまさらどうしようもないね…
シングルスレッド派の人はちゃんと定義されてるやつを示してほしい
日本語Wikipediaじゃなくて
>>785
訳が競争というのはまぁそうかもしれないけど、CS系学部の教科書レベルで競合に統一されちゃってるので、いまさらどうしようもないね…
788デフォルトの名無しさん
2022/03/15(火) 22:52:23.31ID:MfNILggQ というかよく考えたら日本語Wikipediaも間違ってはないんだな
引用した人がJSだからシングルスレッドって思い込んでただけで
引用した人がJSだからシングルスレッドって思い込んでただけで
789デフォルトの名無しさん
2022/03/15(火) 23:02:06.12ID:DajlRg+n ほら定義の話になってんだろ
それって正解がないので、どっちかに合わせて結論出したら終わりなんだよ
それって正解がないので、どっちかに合わせて結論出したら終わりなんだよ
790デフォルトの名無しさん
2022/03/15(火) 23:20:05.34ID:38db7Aep データ競合(data race)だろうと競合状態(race condition)だろうと言語ごとに定義が違うなこりゃ
言葉の定義自体は規格書引っ張り出してきて殴り合うとして、
言語が別だとそもそも話し合うことすら難しいんじゃないの?
どっちかの定義に寄せることすら無理そうだし
言葉の定義自体は規格書引っ張り出してきて殴り合うとして、
言語が別だとそもそも話し合うことすら難しいんじゃないの?
どっちかの定義に寄せることすら無理そうだし
791デフォルトの名無しさん
2022/03/15(火) 23:20:45.51ID:DajlRg+n あと>>783の定義だと、concurrentだからシングルスレッドな並行もダメかもね
非同期シグナルとかもダメだし、シングルスレッドって前提だけではデータ競合起きちゃうね
非同期シグナルとかもダメだし、シングルスレッドって前提だけではデータ競合起きちゃうね
792デフォルトの名無しさん
2022/03/15(火) 23:46:09.49ID:DajlRg+n 定義は両者で共有・合意するだけで問題ないよ
規格書を引っ張り出す必要もない
ただ出た結論は定義込みで語られないと意味がないだけw
規格書を引っ張り出す必要もない
ただ出た結論は定義込みで語られないと意味がないだけw
793デフォルトの名無しさん
2022/03/16(水) 00:57:59.77ID:DZO6khEt >>787
> CS系学部の教科書レベルで競合に統一されちゃってる
よしそいつを吊そう…
と言いたいところだが、語感的に
競争:所詮どっちが先か後か程度、結果はどっちかになる
競合:ぶつかってぶっ壊れるイメージ、結果がどうなるかは分からない
だから敢えて「競合」としたのだろう。
発端はただの競争でしかないが、甘く見てると、結果は全く身に覚えのないデータになってしまう事もあるので、
教育上は「競合」の方がいいのかもしれない。
有名どころはJavaのdouble-checked lockingイディオムが実は全く役に立たず、大騒ぎしてた件とか。
http://www-06.ibm.com/jp/developerworks/java/020726/j_j-dcl.html (多分これだがリンク切れ)
残骸はあちこちに残ってるので雰囲気だけは分かるかも。
https://atmarkit.itmedia.co.jp/bbs/phpBB/viewtopic.php?topic=31199&forum=12
なお言い分が食い違ってるが、俺はさらに違ってて、「初期化中のクラスが他スレッドに見えてしまって、
Javaの仕様ではこれを防ぐ方法もない」だと思ったが。
他の残骸は以下とか。(全部読んだわけではないけど)
https://en.wikipedia.org/wiki/Double-checked_locking
https://stackoverflow.com/questions/1625118/java-double-checked-locking
http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html
> CS系学部の教科書レベルで競合に統一されちゃってる
よしそいつを吊そう…
と言いたいところだが、語感的に
競争:所詮どっちが先か後か程度、結果はどっちかになる
競合:ぶつかってぶっ壊れるイメージ、結果がどうなるかは分からない
だから敢えて「競合」としたのだろう。
発端はただの競争でしかないが、甘く見てると、結果は全く身に覚えのないデータになってしまう事もあるので、
教育上は「競合」の方がいいのかもしれない。
有名どころはJavaのdouble-checked lockingイディオムが実は全く役に立たず、大騒ぎしてた件とか。
http://www-06.ibm.com/jp/developerworks/java/020726/j_j-dcl.html (多分これだがリンク切れ)
残骸はあちこちに残ってるので雰囲気だけは分かるかも。
https://atmarkit.itmedia.co.jp/bbs/phpBB/viewtopic.php?topic=31199&forum=12
なお言い分が食い違ってるが、俺はさらに違ってて、「初期化中のクラスが他スレッドに見えてしまって、
Javaの仕様ではこれを防ぐ方法もない」だと思ったが。
他の残骸は以下とか。(全部読んだわけではないけど)
https://en.wikipedia.org/wiki/Double-checked_locking
https://stackoverflow.com/questions/1625118/java-double-checked-locking
http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html
794デフォルトの名無しさん
2022/03/16(水) 01:28:32.65ID:0TydPa2f 別に毎回同期すればいいだけのところを無理に端折ろうとすると、複数CPU時代の現代ではインターロックが必要ってだけでしょ
volatileがないのは論外だけど…
競合を回避するには同期(ロック)しようねってだけ
volatileがないのは論外だけど…
競合を回避するには同期(ロック)しようねってだけ
795デフォルトの名無しさん
2022/03/16(水) 02:53:58.81ID:jNwWVkZm JSエアプだったからスルーしてたが >>764 の言う「順序」ってのが定義されていればデータ競合にはならんのだよな?
1スレッド内の操作で順序が定義されていないって状況がなんか想像できなかった
まさか value=value みたいのがデータ競合なんてならんだろうし
1スレッド内の操作で順序が定義されていないって状況がなんか想像できなかった
まさか value=value みたいのがデータ競合なんてならんだろうし
796デフォルトの名無しさん
2022/03/16(水) 06:15:40.53ID:0TydPa2f え?そこは>>788でFAでは?ECMA Scriptだしな
797デフォルトの名無しさん
2022/03/16(水) 08:12:09.94ID:kgs87UnJ798デフォルトの名無しさん
2022/03/16(水) 21:28:41.83ID:MkjFLw2M >>797
それはあなたが理解できていない
プログラム全体に渡り言語仕様に基づきコンパイラが安全性を保証できる
その例外部分がunsafe宣言部分でありそこだけを人間が責任を持てばよい
他の言語はプログラム全体に渡り人間が責任を持たなければならない
それはあなたが理解できていない
プログラム全体に渡り言語仕様に基づきコンパイラが安全性を保証できる
その例外部分がunsafe宣言部分でありそこだけを人間が責任を持てばよい
他の言語はプログラム全体に渡り人間が責任を持たなければならない
799デフォルトの名無しさん
2022/03/16(水) 22:05:14.42ID:DZO6khEt この際「Rustのunsafeは綺麗なunsafe」のダブスタは置いておくとして、
仮にRustではデータ競合をunsafe領域だけに局在化出来るとして、それで何が嬉しいんだ?
具体的にそれをどういうアプリに生かせるんだ?
他言語の場合はスレッドセーフにするのには細心の注意がいる。
だから一般的に最小限の部分しかスレッドセーフにしない。結果、共有も最小限だ。
対してこれがunsafe領域だけにできるとして、これだけなら
・ロック周りを記述している箇所は後から検索出来るように必ず ./// LOCK のコメントを付けとけ
程度の意味しかない。
既に言ったが他言語ではロック周りは難しいので最小限に絞られている。
これがRustで楽に書け、もっとカジュアルに使えるとして、
出来上がるアプリは「スレッド間をもっと密結合させ、共有RAMをもっとカジュアルに使うもの」になる。
共有RAM方式は昨今言われている程遅くも悪くもないが、(x86の場合は)
ハードウェアとしては従来通りの「共有RAMは最小限」の方が断然速く動く。
だから単純には、
C++ではロック周りでバグが出まくって実装するにはとても無理だが、
言語サポートがあるRustなら平気で書けるからこそこの構造に出来、断然性能がいい、
とかいうアプリ(適用領域)がないといけないが、これは何?
Go/Rustはマルチスレッドがこなれてからの言語だからその辺に独自のアイデアを突っ込んできてるのは当然として、
Rustのが「ロックをもっとカジュアルに」なら多分ハズレだ。
簡単に書けるのは正義ではあるが、ロックを最小限に絞るのは『大』正義だからだ。
(そして一般的なフレームワークを使えば、
ロックなんてそれ用のクラスを使うしかないから、検索すればすぐに見つかる。
ロックすら考慮せず野良で共有してるようなコードは見逃すが、
これを防ぐ為だとしたらRustは相当の馬鹿向け言語という事になる。
C/C++だったら「そんな奴は死刑」で誰も反対しない)
仮にRustではデータ競合をunsafe領域だけに局在化出来るとして、それで何が嬉しいんだ?
具体的にそれをどういうアプリに生かせるんだ?
他言語の場合はスレッドセーフにするのには細心の注意がいる。
だから一般的に最小限の部分しかスレッドセーフにしない。結果、共有も最小限だ。
対してこれがunsafe領域だけにできるとして、これだけなら
・ロック周りを記述している箇所は後から検索出来るように必ず ./// LOCK のコメントを付けとけ
程度の意味しかない。
既に言ったが他言語ではロック周りは難しいので最小限に絞られている。
これがRustで楽に書け、もっとカジュアルに使えるとして、
出来上がるアプリは「スレッド間をもっと密結合させ、共有RAMをもっとカジュアルに使うもの」になる。
共有RAM方式は昨今言われている程遅くも悪くもないが、(x86の場合は)
ハードウェアとしては従来通りの「共有RAMは最小限」の方が断然速く動く。
だから単純には、
C++ではロック周りでバグが出まくって実装するにはとても無理だが、
言語サポートがあるRustなら平気で書けるからこそこの構造に出来、断然性能がいい、
とかいうアプリ(適用領域)がないといけないが、これは何?
Go/Rustはマルチスレッドがこなれてからの言語だからその辺に独自のアイデアを突っ込んできてるのは当然として、
Rustのが「ロックをもっとカジュアルに」なら多分ハズレだ。
簡単に書けるのは正義ではあるが、ロックを最小限に絞るのは『大』正義だからだ。
(そして一般的なフレームワークを使えば、
ロックなんてそれ用のクラスを使うしかないから、検索すればすぐに見つかる。
ロックすら考慮せず野良で共有してるようなコードは見逃すが、
これを防ぐ為だとしたらRustは相当の馬鹿向け言語という事になる。
C/C++だったら「そんな奴は死刑」で誰も反対しない)
800デフォルトの名無しさん
2022/03/16(水) 22:10:43.48ID:1Cs5zQXI 一応確認するけど触っちゃダメな人だよね?
801デフォルトの名無しさん
2022/03/16(水) 22:14:58.99ID:CXtf6yKM802デフォルトの名無しさん
2022/03/16(水) 22:41:00.48ID:0TydPa2f そもそも何と何を比較したい、とか主張や前提が不明瞭だから長くなってんだよ
日記を書くなら他所にしてね
日記を書くなら他所にしてね
803デフォルトの名無しさん
2022/03/16(水) 23:55:27.76ID:yCGU0QjC >>799
Rustで実際に書けばわかるが
普通のプログラムでunsafeを使うことはないぜ
unsafeは特定のライブラリの中に閉じ込められていて外に影響なし
その部分を除くプログラム全体の安全性をRustコンパイラが保証
他の言語ではプログラム全体の安全性を人間が保証
Rustで実際に書けばわかるが
普通のプログラムでunsafeを使うことはないぜ
unsafeは特定のライブラリの中に閉じ込められていて外に影響なし
その部分を除くプログラム全体の安全性をRustコンパイラが保証
他の言語ではプログラム全体の安全性を人間が保証
804デフォルトの名無しさん
2022/03/17(木) 00:29:26.40ID:WcGjUzZw 銀の弾丸は無いってことを理解できない人が暴れてるみたいだな。
たぶん今までの人生全ての出来事が100点じゃないとダメな人なんだろうけど、なんでまだ生きてるんだろう?
たぶん今までの人生全ての出来事が100点じゃないとダメな人なんだろうけど、なんでまだ生きてるんだろう?
805デフォルトの名無しさん
2022/03/17(木) 00:41:54.94ID:aVeaiVtR >>803
ユーザーがunsafeを使う必要がないのはいいが、
それが何を作る時にどう利点になるんだ?
繰り返すが、C++等でロック等を自前で書く事はほぼ無い。
最小にする為にatomicにして、atomicは通常、フレームワークが用意してる物を使うからだ。
だから「ロック等を使う必要がある」事を認識してる奴が書いたコードなら、Rustと同程度に安全だ。
なぜなら、Rustでも「ロック等を使う必要がある」と認識して、特定のライブラリを使わないといけないんだろ。
この側面についてのRustの利点は、
・「ロック等を使う必要がある」とすら認識出来ない馬鹿が書いた時に、コンパイルが通らない --- (A)
というだけのように見える。
・「ロック等を使う必要がある」と認識出来る奴が、ロック等を『うっかり』忘れる --- (B)
のを想定しているなら、はっきり言ってこれはない。
マルチスレッドを直接扱う場合、何らかのロック等が『常に』必要であり、
最初にそこを設計して、かつそれはスレッドについて「入力」「出力」側1つずつとかの最小限に絞るからだ。
つまり、目で見て分かる程度でやってる。見落として苦労する事は無い。
これをRustだとコンパイラがチェックしてくれるから、大量に出来る!見落としもない!のはいいが、
それはどういう時に利点なんだ?という話。
細かいオブジェクトを大量に共有出来たら素晴らしくパフォーマンスが上がる、なんて構造、無いだろ。
ユーザーがunsafeを使う必要がないのはいいが、
それが何を作る時にどう利点になるんだ?
繰り返すが、C++等でロック等を自前で書く事はほぼ無い。
最小にする為にatomicにして、atomicは通常、フレームワークが用意してる物を使うからだ。
だから「ロック等を使う必要がある」事を認識してる奴が書いたコードなら、Rustと同程度に安全だ。
なぜなら、Rustでも「ロック等を使う必要がある」と認識して、特定のライブラリを使わないといけないんだろ。
この側面についてのRustの利点は、
・「ロック等を使う必要がある」とすら認識出来ない馬鹿が書いた時に、コンパイルが通らない --- (A)
というだけのように見える。
・「ロック等を使う必要がある」と認識出来る奴が、ロック等を『うっかり』忘れる --- (B)
のを想定しているなら、はっきり言ってこれはない。
マルチスレッドを直接扱う場合、何らかのロック等が『常に』必要であり、
最初にそこを設計して、かつそれはスレッドについて「入力」「出力」側1つずつとかの最小限に絞るからだ。
つまり、目で見て分かる程度でやってる。見落として苦労する事は無い。
これをRustだとコンパイラがチェックしてくれるから、大量に出来る!見落としもない!のはいいが、
それはどういう時に利点なんだ?という話。
細かいオブジェクトを大量に共有出来たら素晴らしくパフォーマンスが上がる、なんて構造、無いだろ。
806デフォルトの名無しさん
2022/03/17(木) 01:37:02.04ID:HeUHSOmZ >>805
Rustコンパイラが保証するのは
・そういうマルチスレッド時の、狭義のデータ競合、だけでなく
・シングルスレッドでの非同期コールバックなどの、普通のデータ競合、や
・ロジックミスなどにより生じる、広義のデータ競合、に加えて
・様々なメモリ安全性、に至るまで
コンパイル時に検出が可能なことを保証
色んな言語で書いてきたプログラマーならば以上の説明で恩恵を納得できる
Rustコンパイラが保証するのは
・そういうマルチスレッド時の、狭義のデータ競合、だけでなく
・シングルスレッドでの非同期コールバックなどの、普通のデータ競合、や
・ロジックミスなどにより生じる、広義のデータ競合、に加えて
・様々なメモリ安全性、に至るまで
コンパイル時に検出が可能なことを保証
色んな言語で書いてきたプログラマーならば以上の説明で恩恵を納得できる
807デフォルトの名無しさん
2022/03/17(木) 01:38:54.54ID:faeKJv0z C++って何か理由があってピンポイントで使うことが多いと思う
だからフレームワークってあんまりないよね
間違ってる上に風呂敷広げすぎ
Rustもそんなこと保証できない
だからフレームワークってあんまりないよね
間違ってる上に風呂敷広げすぎ
Rustもそんなこと保証できない
808デフォルトの名無しさん
2022/03/17(木) 01:39:14.78ID:QB355J6E もう相手すんなよ
うっかりがありえないとかまともなプログラマならそれこそありえないことを知ってるだろうし
うっかりがありえないとかまともなプログラマならそれこそありえないことを知ってるだろうし
809デフォルトの名無しさん
2022/03/17(木) 01:49:00.20ID:jsnVHM5N :::.... /|\||
//|'\\.... ...:::.. .......
|/ ,'|-、 \\
|/ ,'|-、 \\\
|/ ,'|-、 \\\|.... ...:::.. .......
|/ ,'|-、 \\\|:..。..... ...:::.. .......
|/ ,'|-、 \\\|__|
|/ ,'|-、 \\\|:...|ヽ .... ...:::.. .......
|/ ,'|-、 \\\|::::| |::.....
| ̄ ̄ ̄ ̄ ̄\、'\\|;;:.|_,,|___
| □□ □□ | |\, \|;;::.... |\
| □□ □□ | | | ̄ ̄ ̄ ̄|\;: . | |
| □□ □□ | | |□□□□| |::...| |;;:
| □□ □□ | | |□□□□| |::...| |:;:./
| □□ □□ | | |□□□□| |::...| /
| □□ □□ |.._|__,,|□□□□| |::...|/
,,| ̄ ̄ ̄|| ̄ ̄\≡\,□□□|/ ,/
今北産業 [IMAKITA INDUSTRIAL CO.,LTD]
(1978〜 日本)
//|'\\.... ...:::.. .......
|/ ,'|-、 \\
|/ ,'|-、 \\\
|/ ,'|-、 \\\|.... ...:::.. .......
|/ ,'|-、 \\\|:..。..... ...:::.. .......
|/ ,'|-、 \\\|__|
|/ ,'|-、 \\\|:...|ヽ .... ...:::.. .......
|/ ,'|-、 \\\|::::| |::.....
| ̄ ̄ ̄ ̄ ̄\、'\\|;;:.|_,,|___
| □□ □□ | |\, \|;;::.... |\
| □□ □□ | | | ̄ ̄ ̄ ̄|\;: . | |
| □□ □□ | | |□□□□| |::...| |;;:
| □□ □□ | | |□□□□| |::...| |:;:./
| □□ □□ | | |□□□□| |::...| /
| □□ □□ |.._|__,,|□□□□| |::...|/
,,| ̄ ̄ ̄|| ̄ ̄\≡\,□□□|/ ,/
今北産業 [IMAKITA INDUSTRIAL CO.,LTD]
(1978〜 日本)
810デフォルトの名無しさん
2022/03/17(木) 01:53:13.45ID:nYfWW7l3 彼は確かに色々と間違っているが
彼の言う通りロックが必要なところでうっかり忘れたとすると
Rustコンパイラはそれが引き起こすデータ競合を通さないから
結局ロックが必要な型を使うことになり結果としてそれも保証されたことになる
彼の言う通りロックが必要なところでうっかり忘れたとすると
Rustコンパイラはそれが引き起こすデータ競合を通さないから
結局ロックが必要な型を使うことになり結果としてそれも保証されたことになる
811デフォルトの名無しさん
2022/03/17(木) 02:47:42.05ID:faeKJv0z また保証話で嘘ついてRustの評価を地に落としているバカがいるなw
812デフォルトの名無しさん
2022/03/17(木) 02:49:58.34ID:cD+xXa8h >>806で保証合ってると思うぜ
違うと言うなら具体的に反論しないとな
違うと言うなら具体的に反論しないとな
813デフォルトの名無しさん
2022/03/17(木) 02:57:11.72ID:75al4ANx Rustを叩く連中は
長々と長文で頓珍漢なやつと
理由も言わずに嘘とか違うとか言うだけのやつがいる
長々と長文で頓珍漢なやつと
理由も言わずに嘘とか違うとか言うだけのやつがいる
814デフォルトの名無しさん
2022/03/17(木) 02:58:10.57ID:faeKJv0z 昨日もう散々話したよw 異論があるなら昨日の話に続ければいいw
815デフォルトの名無しさん
2022/03/17(木) 03:13:31.40ID:OxdqHDsn816デフォルトの名無しさん
2022/03/17(木) 03:38:46.21ID:faeKJv0z817デフォルトの名無しさん
2022/03/17(木) 03:44:26.34ID:3E/T0vc7 データ競合の意味する範囲が様々あるのはその通り
一方で>>806はそれを3種類に分けているのもその通り
いずれにしてもそれら全てに対してRustコンパイラはデータ競合が起きていないことを保証するので問題なし
一方で>>806はそれを3種類に分けているのもその通り
いずれにしてもそれら全てに対してRustコンパイラはデータ競合が起きていないことを保証するので問題なし
818デフォルトの名無しさん
2022/03/17(木) 04:03:48.44ID:faeKJv0z データ競合の定義が複数あるのがそのとおりなら、もうそれだけで常に真になるわけではないことになる
それを「保証する」なら「嘘」と言わざるを得ない
それを「保証する」なら「嘘」と言わざるを得ない
819デフォルトの名無しさん
2022/03/17(木) 04:12:17.15ID:4H6NzgN+ どの定義のデータ競合も共通している点がある
それは『single writer XOR multi readers』を厳守しているならばデータ競合が起きない点
そしてRustコンパイラはどんなに複雑な状況でも『single writer XOR multi readers』の厳守/破綻を検知できる
つまりRustコンパイラはどのタイプのデータ競合も起きていないことを保証できる
それは『single writer XOR multi readers』を厳守しているならばデータ競合が起きない点
そしてRustコンパイラはどんなに複雑な状況でも『single writer XOR multi readers』の厳守/破綻を検知できる
つまりRustコンパイラはどのタイプのデータ競合も起きていないことを保証できる
820デフォルトの名無しさん
2022/03/17(木) 04:23:35.25ID:faeKJv0z >>819
出来たらいくらくれる?
出来たらいくらくれる?
821デフォルトの名無しさん
2022/03/17(木) 20:17:48.40ID:LGymmFtZ unsafeが無くなった完全なrustが出来たら起こして!!
822デフォルトの名無しさん
2022/03/17(木) 21:19:19.10ID:LphqNcLp privateとかprotectedの保証が時代遅れになった原因もそれかなあ
823デフォルトの名無しさん
2022/03/17(木) 21:23:32.01ID:KFCC0Q8d なんでここまでunsafeにこだわってるんだろう
824デフォルトの名無しさん
2022/03/17(木) 21:25:25.12ID:7cb0HHrx825デフォルトの名無しさん
2022/03/17(木) 21:31:34.22ID:faeKJv0z Rustのunsafeは質が非常に悪いからな
まさに邪悪の一言に尽きるw
ピカピカのRustが一瞬にして継ぎ接ぎだらけのボロ雑巾に生まれ変わるw
かたや他の言語は長い歴史が積み上げた研鑽のたまもので、そこそこ綺麗に保たれているのであったw
まさに邪悪の一言に尽きるw
ピカピカのRustが一瞬にして継ぎ接ぎだらけのボロ雑巾に生まれ変わるw
かたや他の言語は長い歴史が積み上げた研鑽のたまもので、そこそこ綺麗に保たれているのであったw
826デフォルトの名無しさん
2022/03/17(木) 21:47:24.40ID:LVblziyo >>825
unsafeは普通のプログラミング言語と同じという意味ですよ
つまり普通のプログラミング言語はプログラム全てがunsafeなのでデータ競合やメモリ安全などを人間が確実に保証しなければなりません
一方でRustはプログラムのほとんどの部分がunsafeではないのでコンパイラが安全性を保証できます
unsafeは普通のプログラミング言語と同じという意味ですよ
つまり普通のプログラミング言語はプログラム全てがunsafeなのでデータ競合やメモリ安全などを人間が確実に保証しなければなりません
一方でRustはプログラムのほとんどの部分がunsafeではないのでコンパイラが安全性を保証できます
827デフォルトの名無しさん
2022/03/17(木) 21:56:08.91ID:G5zzfosy COBOL最強伝説は続く
828デフォルトの名無しさん
2022/03/17(木) 22:15:39.17ID:H/cd+ZWN829デフォルトの名無しさん
2022/03/17(木) 22:18:34.26ID:faeKJv0z そこだけでぶっ壊れるガラス細工なRustなわけだがw
830デフォルトの名無しさん
2022/03/17(木) 23:08:20.88ID:aVeaiVtR >>806
やっぱり俺にはRustは要らないという結論だね。
> 色んな言語で書いてきたプログラマーならば以上の説明で恩恵を納得できる
新興言語にかなり有利に出るPYPLですらC/C++比1/6の現実を見た方がいい。
やっぱり俺にはRustは要らないという結論だね。
> 色んな言語で書いてきたプログラマーならば以上の説明で恩恵を納得できる
新興言語にかなり有利に出るPYPLですらC/C++比1/6の現実を見た方がいい。
831デフォルトの名無しさん
2022/03/17(木) 23:13:07.24ID:s2P7MscG C/C++とRustならば
両方使いこなせる人が常にRustを選ぶことからも言語の優劣差がはっきりしている
両方使いこなせる人が常にRustを選ぶことからも言語の優劣差がはっきりしている
832デフォルトの名無しさん
2022/03/17(木) 23:26:04.14ID:aVeaiVtR >>831
> 両方使いこなせる人が常にRustを選ぶ
Rust界隈でインタビューすればそりゃそうなる。そういうところがエコーチェンバーだと思うんだけどね。
まあasyncはだいぶ筋が良さそうだし、今後どうなるかだね。
> 両方使いこなせる人が常にRustを選ぶ
Rust界隈でインタビューすればそりゃそうなる。そういうところがエコーチェンバーだと思うんだけどね。
まあasyncはだいぶ筋が良さそうだし、今後どうなるかだね。
833デフォルトの名無しさん
2022/03/17(木) 23:27:19.56ID:faeKJv0z 両方使いこなせるけど、常にC++を選んじゃってるんだがw
まあ趣味だし他人にC++は勧めないけどねw
だからといってRustも全く勧めない
言語の優劣は圧倒的にC++が優っている
まあ趣味だし他人にC++は勧めないけどねw
だからといってRustも全く勧めない
言語の優劣は圧倒的にC++が優っている
834デフォルトの名無しさん
2022/03/17(木) 23:30:33.62ID:OpaED0hw >>833
おまえこの前もRustコードを書けずに敗走したアンチじゃん
おまえこの前もRustコードを書けずに敗走したアンチじゃん
835デフォルトの名無しさん
2022/03/17(木) 23:39:33.80ID:faeKJv0z ここでそんなこと言われたことないし、このスレ系列にも俺が書いたコードあるけどw
コードくれくれビビリ単発IDがココにも湧き始めたねw
書けると何度も言ってるし金くれるなら書くって言ってるんだがな
コードくれくれビビリ単発IDがココにも湧き始めたねw
書けると何度も言ってるし金くれるなら書くって言ってるんだがな
836デフォルトの名無しさん
2022/03/17(木) 23:48:09.01ID:76PcfavB837デフォルトの名無しさん
2022/03/17(木) 23:52:24.83ID:faeKJv0z お前みたいな胡散臭いのが余計なことしてるからRustがいつまで経っても広まらないんだよw
理念は悪くないのに、嘘までつくからこうなるw
理念は悪くないのに、嘘までつくからこうなるw
838デフォルトの名無しさん
2022/03/17(木) 23:58:29.79ID:+BzvG1OL 理解してるとかどうか以前に、精神レベルがどうみても小学生以下じゃん
何を書こうが議論するに値しないよ
何を書こうが議論するに値しないよ
839デフォルトの名無しさん
2022/03/17(木) 23:59:13.49ID:X4t1JDyl この真っ赤な人はRust叩きばかりしているダメな人でRustスレを出入り禁止になった人でしょ
840デフォルトの名無しさん
2022/03/18(金) 00:07:42.38ID:slshVm4c 俺はRustスレでRust以外の話はしてない(Rustの説明に必要なときだけ他言語を書く場合がある)し、もちろん出禁になってもいないし、Rustのコードも書いたしお前より貢献してる気がするんだけどw
ビビリの単発連投構ってちゃん君w
ビビリの単発連投構ってちゃん君w
841デフォルトの名無しさん
2022/03/18(金) 00:14:08.81ID:eD3MnnxT842デフォルトの名無しさん
2022/03/18(金) 00:20:41.88ID:slshVm4c cargo geigerは忘れずにしような☢
頭おかしいと思っちゃうなら患者は恐らく君のほうだと思うよ
俺は専門家じゃないから知らんけどw
頭おかしいと思っちゃうなら患者は恐らく君のほうだと思うよ
俺は専門家じゃないから知らんけどw
843デフォルトの名無しさん
2022/03/18(金) 00:26:05.81ID:F1TvbrVr このガイガー小学生はいつまでスレに張り付いてるんだろう
844デフォルトの名無しさん
2022/03/18(金) 00:28:30.81ID:slshVm4c お前同様ずっといるんじゃないかなw ビビリの単発ID連投構ってちゃん君w
プログラミングのお勉強()はしなくていいのかな?w
プログラミングのお勉強()はしなくていいのかな?w
845デフォルトの名無しさん
2022/03/18(金) 01:45:36.91ID:9BDLx5hO 連投するほうが上という謎の価値観🤔
846デフォルトの名無しさん
2022/03/18(金) 01:55:32.71ID:slshVm4c どうしてそういう解釈になったのかは知らんし、君の頭が悪いのまで俺のせいにされても・・・
847デフォルトの名無しさん
2022/03/18(金) 03:10:44.96ID:EPD6jCtS ガイガー君はプログラム組むこと出来るようになったのかな
848デフォルトの名無しさん
2022/03/18(金) 06:34:33.31ID:slshVm4c 勝手に名前付けてんなよw ビビリの単発ID連投構ってちゃん君w プログラミングできないのは君だけだよw
849デフォルトの名無しさん
2022/03/18(金) 11:03:26.58ID:Rp9aIyi6 >>799
他の言語では細心の注意が払えていなかったことが実行時まで分からない部分が、Rustではコンパイル時に分かることが嬉しいんだろ
だから実際には細心の注意を払わなくても大抵の入力で問題ないケースにも制約が掛かってRustでは難しくなる場合がある
それにその制約を強制されたところであらゆるバグがなくなるわけではない
Rustが定義するバグの範囲に収まるだけ
これを嬉しいと思うかどうかで選べば良いんじゃないの?
他の言語では細心の注意が払えていなかったことが実行時まで分からない部分が、Rustではコンパイル時に分かることが嬉しいんだろ
だから実際には細心の注意を払わなくても大抵の入力で問題ないケースにも制約が掛かってRustでは難しくなる場合がある
それにその制約を強制されたところであらゆるバグがなくなるわけではない
Rustが定義するバグの範囲に収まるだけ
これを嬉しいと思うかどうかで選べば良いんじゃないの?
850デフォルトの名無しさん
2022/03/18(金) 11:06:49.07ID:Rp9aIyi6 >>824
そもそもユーザーがunsafeだからね
そもそもユーザーがunsafeだからね
851デフォルトの名無しさん
2022/03/18(金) 11:42:44.46ID:6ALtOjL+ キーワードにunsafeがあるRustはダメ。
C/C++ならunsafeというキーワードは無いからオーケー。
C/C++ならunsafeというキーワードは無いからオーケー。
852デフォルトの名無しさん
2022/03/18(金) 11:58:46.43ID:q4aDV4Mv853デフォルトの名無しさん
2022/03/18(金) 12:28:10.67ID:9azz2mH7 C/C++もunsafeな部分はコメントでunsafeって書いとけば安心安全だよ
854デフォルトの名無しさん
2022/03/18(金) 12:29:49.65ID:slshVm4c C++は最強言語なのでRustを使うメリットなんて皆無なんだが、人類には難しすぎるのが難点w
Rustがゴミなのは、その人類が勘違いをして、unsafeまみれなのに安全とかぬかしてるところw
Rustがゴミなのは、その人類が勘違いをして、unsafeまみれなのに安全とかぬかしてるところw
855デフォルトの名無しさん
2022/03/18(金) 13:22:00.60ID:euxfX23u856デフォルトの名無しさん
2022/03/18(金) 13:27:25.17ID:MJwnlpj5 まるで、有能大企業にたった一人のゴミを入れたら無能大企業になるみたいに
857デフォルトの名無しさん
2022/03/18(金) 13:55:30.43ID:Z0qe6pb3 Rustはプログラミングしやすいから使ってる
安全性の保証とかはオマケで付いてきてる
安全性の保証とかはオマケで付いてきてる
858デフォルトの名無しさん
2022/03/18(金) 16:31:30.68ID:7e5S1fGo C++と比較なら、Rustが良いよねとは素直に思う。
スレタイにある言語との比較だと、
メモリ管理を人がしないといけないRustは遠慮したい。
スレタイにある言語との比較だと、
メモリ管理を人がしないといけないRustは遠慮したい。
859デフォルトの名無しさん
2022/03/18(金) 16:37:15.84ID:p0G3ctYI >>858
Rustは自動メモリ解放されるからプログラマーが手間かけなくていいよ
Rustは自動メモリ解放されるからプログラマーが手間かけなくていいよ
860デフォルトの名無しさん
2022/03/18(金) 16:43:15.79ID:r5cg+x+o スコープアウトでメモリ解放だからね
861デフォルトの名無しさん
2022/03/18(金) 20:52:41.88ID:orhNaW+U862デフォルトの名無しさん
2022/03/18(金) 21:04:11.21ID:slshVm4c >>861
いくらくれるの?
いくらくれるの?
863デフォルトの名無しさん
2022/03/18(金) 21:35:18.09ID:w8aoFpzv ガイガー君はコード書けなくてコピペしか出来ない子だよ
864デフォルトの名無しさん
2022/03/18(金) 21:40:03.06ID:IbMdGSSO >>862
金額はお前が提示する側だろw
金額はお前が提示する側だろw
865デフォルトの名無しさん
2022/03/18(金) 21:44:32.74ID:slshVm4c866デフォルトの名無しさん
2022/03/18(金) 21:55:24.90ID:slshVm4c >>861
日付が変わる前に同じIDでコテハンを用意して同一人物が分かるようにしとけよw
日付が変わる前に同じIDでコテハンを用意して同一人物が分かるようにしとけよw
867デフォルトの名無しさん
2022/03/18(金) 22:35:08.48ID:OH/M8ZAW ガイガー君はいつも金を無心しているから金が無いんだよ
コーディング能力も無いけど
コーディング能力も無いけど
868デフォルトの名無しさん
2022/03/18(金) 23:03:51.44ID:slshVm4c 内容のない煽りしか出来ないビビリの単発ID連投構ってちゃん君じゃないから、どちらもあるけどねw
869デフォルトの名無しさん
2022/03/18(金) 23:36:40.84ID:xMvKrO8Z870デフォルトの名無しさん
2022/03/18(金) 23:42:11.74ID:Ty44Aa5j >>849
その通りだが、それは「簡単」のメリットの一面であり、
日本人はそっちしか目指さないから駄目なんだ。つまり、
・従来難しかった事が簡単になった(≒バグを検出しやすくなった)
の使い方だが、日本人はこれを
・従来難しかった事が簡単になったから、『馬鹿でも出来る』ようになった --- (A)
と、下方向への拡張にしか使わない。
結果、よりもっと馬鹿=人件費が安い連中に、という事で、
『文系でも出来た!』『中国人』『ベトナム人』とまあ、
・今までと同じ事を、より馬鹿を使う事によって、人件費を抑えようとする
から、エンジニアの給料が上がる事がない。
勘違いしてる社畜プログラマは
「エンジニアをもっと好待遇にしろ(≒給料を上げろ)」と簡単に言うのだが、
下方向への競争をやってる限り、給料が上がる事はない。
いつしかもっと安い連中を探し出してきて、代替されるからだ。
ならば、
・従来難しかった事が簡単になったから、同じ事が早く出来るようになった --- (B)
とするのもの一つの作戦だ。回転数で勝負というわけだ。
これが得意な奴ならこれもありだろう。
ただ、安い連中の中には早い連中も居るから、安泰ではない。
(A)と同様、給料には下方向への圧力がかかり続けてる状態だ。
その通りだが、それは「簡単」のメリットの一面であり、
日本人はそっちしか目指さないから駄目なんだ。つまり、
・従来難しかった事が簡単になった(≒バグを検出しやすくなった)
の使い方だが、日本人はこれを
・従来難しかった事が簡単になったから、『馬鹿でも出来る』ようになった --- (A)
と、下方向への拡張にしか使わない。
結果、よりもっと馬鹿=人件費が安い連中に、という事で、
『文系でも出来た!』『中国人』『ベトナム人』とまあ、
・今までと同じ事を、より馬鹿を使う事によって、人件費を抑えようとする
から、エンジニアの給料が上がる事がない。
勘違いしてる社畜プログラマは
「エンジニアをもっと好待遇にしろ(≒給料を上げろ)」と簡単に言うのだが、
下方向への競争をやってる限り、給料が上がる事はない。
いつしかもっと安い連中を探し出してきて、代替されるからだ。
ならば、
・従来難しかった事が簡単になったから、同じ事が早く出来るようになった --- (B)
とするのもの一つの作戦だ。回転数で勝負というわけだ。
これが得意な奴ならこれもありだろう。
ただ、安い連中の中には早い連中も居るから、安泰ではない。
(A)と同様、給料には下方向への圧力がかかり続けてる状態だ。
871デフォルトの名無しさん
2022/03/18(金) 23:42:29.09ID:Ty44Aa5j 本来は、
・従来難しかった事が簡単になったから、
従来では現実的に不可能だった事が出来るようになった --- (C)
を目指さないといけない。これが上方向への拡張だ。
「俺は素晴らしい学歴を持ってるのだから、もっと給料を払え」と言うのなら、
その素晴らしい学歴を獲得する過程で得た知識を持っていないと出来ない事、
知識がない人(≒馬鹿)には出来ない事をやって差別化するしかない。
そしてそれでユーザーにメリットが有れば、製品は売れ、利益が出るので、給料も高く留まる。
馬鹿ではそれが作れないなら、安売り合戦になる事もない。
だからそれは何だと聞いてるんだよ。
(A)(B)は順当な進化だが、それを追求するのは文系プログラマでいい。
CSを学んでおり、それで高収入を得たいなら、
CSで学んだ知識がないと無理な領域を攻めるしかない。
勿論CSだからプログラミングは余裕で、
文系プログラマですら給料払ってくれる日本企業なら楽勝でスーダラ節状態、
「サラリーマンは気楽な稼業と来たもんだ」な人生もありだとは思うが、
何も考えずに(A)(B)しかないと思ってたのなら、ちゃんと(C)も意識しておけ、という事。
実際、アメリカ人とかは(C)も目指してて、
よくもまあこんなもん作りあげたな、というのも多いだろ。
一つ一つは小さな(C)の積み上げなんだよ。
で、話を戻すと、
従来:ロック周りは難しいので、出来るだけ書かないようにする
= 出来るだけ大きい単位(ジョブ)でしかマルチスレッドを適用出来ない
Rust:ロック周りもコンパイラサポートありなので、従来よりは気軽に書けます!
→ それでロックが大量に書けてバグもないとして、
ユーザーにとってのメリット(通常は速度)がある領域は何?
・従来難しかった事が簡単になったから、
従来では現実的に不可能だった事が出来るようになった --- (C)
を目指さないといけない。これが上方向への拡張だ。
「俺は素晴らしい学歴を持ってるのだから、もっと給料を払え」と言うのなら、
その素晴らしい学歴を獲得する過程で得た知識を持っていないと出来ない事、
知識がない人(≒馬鹿)には出来ない事をやって差別化するしかない。
そしてそれでユーザーにメリットが有れば、製品は売れ、利益が出るので、給料も高く留まる。
馬鹿ではそれが作れないなら、安売り合戦になる事もない。
だからそれは何だと聞いてるんだよ。
(A)(B)は順当な進化だが、それを追求するのは文系プログラマでいい。
CSを学んでおり、それで高収入を得たいなら、
CSで学んだ知識がないと無理な領域を攻めるしかない。
勿論CSだからプログラミングは余裕で、
文系プログラマですら給料払ってくれる日本企業なら楽勝でスーダラ節状態、
「サラリーマンは気楽な稼業と来たもんだ」な人生もありだとは思うが、
何も考えずに(A)(B)しかないと思ってたのなら、ちゃんと(C)も意識しておけ、という事。
実際、アメリカ人とかは(C)も目指してて、
よくもまあこんなもん作りあげたな、というのも多いだろ。
一つ一つは小さな(C)の積み上げなんだよ。
で、話を戻すと、
従来:ロック周りは難しいので、出来るだけ書かないようにする
= 出来るだけ大きい単位(ジョブ)でしかマルチスレッドを適用出来ない
Rust:ロック周りもコンパイラサポートありなので、従来よりは気軽に書けます!
→ それでロックが大量に書けてバグもないとして、
ユーザーにとってのメリット(通常は速度)がある領域は何?
872デフォルトの名無しさん
2022/03/18(金) 23:46:57.28ID:Ty44Aa5j >>806
思うにそれはGoに必要な機能だ。
今現在もロック周りは難しいとされているので、あまりそこを攻めようという奴はいない。
結果、通常は「ジョブ」という、最大単位でマルチスレッドにして、ロック記述は最小にしてる。
C#の場合は全てフレームワーク内に隠蔽し、ユーザーがロック記述をする必要が無くしてしまった。
メインスレッド+スレッドプールで、共有部分はメインスレッドで処理し、
完全に独立している部分を非同期ジョブとして切り出す。
多分ジョブ内からでもInvokeを使えばメインスレッドにやらせる事は出来るはずだから、
この場合、mutexやatomicを全く使わなくても済む。
(mutexやatomicよりはInvokeの方が簡単だし静的に解析可能、と見たのだろう。
これは実際そうだし、Invoke《意味的には固有スレッドで動かすコルーチン》なら
どこをどう間違えてもデッドロックはしない)
Goの場合はもっと小さい単位(コルーチン程度)でマルチスレッドを使うのが正解だと踏んだのだろう。
それでアクターモデルでやればmutexやatomic系は必要なくなる。
問題はランタイムの設計が不適切で無駄にgoroutineが重い事だが、これは言語自体の問題ではない。
(ただしアクターモデルよりはオブジェクト指向でatomicした方が断然速いので、
Go以外の言語は全部そうしてるわけだが。
この意味ではC#はメインスレッドだけアクター用のインタフェースを持ってる事になるが)
思うにそれはGoに必要な機能だ。
今現在もロック周りは難しいとされているので、あまりそこを攻めようという奴はいない。
結果、通常は「ジョブ」という、最大単位でマルチスレッドにして、ロック記述は最小にしてる。
C#の場合は全てフレームワーク内に隠蔽し、ユーザーがロック記述をする必要が無くしてしまった。
メインスレッド+スレッドプールで、共有部分はメインスレッドで処理し、
完全に独立している部分を非同期ジョブとして切り出す。
多分ジョブ内からでもInvokeを使えばメインスレッドにやらせる事は出来るはずだから、
この場合、mutexやatomicを全く使わなくても済む。
(mutexやatomicよりはInvokeの方が簡単だし静的に解析可能、と見たのだろう。
これは実際そうだし、Invoke《意味的には固有スレッドで動かすコルーチン》なら
どこをどう間違えてもデッドロックはしない)
Goの場合はもっと小さい単位(コルーチン程度)でマルチスレッドを使うのが正解だと踏んだのだろう。
それでアクターモデルでやればmutexやatomic系は必要なくなる。
問題はランタイムの設計が不適切で無駄にgoroutineが重い事だが、これは言語自体の問題ではない。
(ただしアクターモデルよりはオブジェクト指向でatomicした方が断然速いので、
Go以外の言語は全部そうしてるわけだが。
この意味ではC#はメインスレッドだけアクター用のインタフェースを持ってる事になるが)
873デフォルトの名無しさん
2022/03/18(金) 23:47:15.18ID:Ty44Aa5j とはいえ、マルチスレッドで細かく共有する構造はGoだと圧倒的に記述しやすいのは事実だ。
ただし現実的には容易にデッドロックするから無理だし、
何故か分からんがGoの連中は共有RAMを必要以上に嫌ってて、原則「チャネルで繋げ」となってる気はする。
ここに「ロック周りもコンパイラサポート!バグは静的に検出!!!」出来れば、
新境地が開ける可能性はある。
ついでに言うと、Goの場合は同期チャネルなので、
レーシングコンディションも強引に潰していく事が可能
(EDと来た場合にも、EにD待ちさせてDEと整列させる記述は凄く簡単)なわけだが、
これもデッドロックの巣でしかないので今現在は現実的に無理だ。
ここら辺の扉も開く可能性はある。
ただ一般論としては、
Rust:ロック周りもコンパイラサポートがあるので、気楽に書けます!
C#:ロック周りはフレームワーク内部に隠蔽したので、全く書く必要有りません。
なら、C#の方が正解だとされる。
ただし現実的には容易にデッドロックするから無理だし、
何故か分からんがGoの連中は共有RAMを必要以上に嫌ってて、原則「チャネルで繋げ」となってる気はする。
ここに「ロック周りもコンパイラサポート!バグは静的に検出!!!」出来れば、
新境地が開ける可能性はある。
ついでに言うと、Goの場合は同期チャネルなので、
レーシングコンディションも強引に潰していく事が可能
(EDと来た場合にも、EにD待ちさせてDEと整列させる記述は凄く簡単)なわけだが、
これもデッドロックの巣でしかないので今現在は現実的に無理だ。
ここら辺の扉も開く可能性はある。
ただ一般論としては、
Rust:ロック周りもコンパイラサポートがあるので、気楽に書けます!
C#:ロック周りはフレームワーク内部に隠蔽したので、全く書く必要有りません。
なら、C#の方が正解だとされる。
874デフォルトの名無しさん
2022/03/18(金) 23:48:34.69ID:slshVm4c875デフォルトの名無しさん
2022/03/18(金) 23:52:00.45ID:iZBiqFvo 今北産業
876デフォルトの名無しさん
2022/03/19(土) 00:33:29.03ID:DslNhsx1 C#とGoとRustならGoでいいと思うけど…一番ラクじゃん
C#なんてTask.Delay()の代わりにThread.Sleep()使うだけで簡単にデッドロックするよw
C#なんてTask.Delay()の代わりにThread.Sleep()使うだけで簡単にデッドロックするよw
877デフォルトの名無しさん
2022/03/19(土) 00:45:29.31ID:Svl9Tdf5 >>876
俺が言ってるのはasync。
あと、C#の場合はもはやその辺も使う必要がない。同期周りを一切書かずに済む。
そしてtry-catchも強引に持ってきてしまったから、C#が目指しているのは、
・同期のノリで書いて、ほぼ問題なし。
一切マルチスレッド周りの知識も必要なし。単なる高火力コンロとして使用可能。
ただし、中身はマルチスレッドなので、分離はしてないと駄目だし、処理順も規定出来ない。
というところかと。殆どの場合はこれで済むのも事実だし。
C#の場合は(B)の生産性最重視だからこれも一つの解だよ。
俺が言ってるのはasync。
あと、C#の場合はもはやその辺も使う必要がない。同期周りを一切書かずに済む。
そしてtry-catchも強引に持ってきてしまったから、C#が目指しているのは、
・同期のノリで書いて、ほぼ問題なし。
一切マルチスレッド周りの知識も必要なし。単なる高火力コンロとして使用可能。
ただし、中身はマルチスレッドなので、分離はしてないと駄目だし、処理順も規定出来ない。
というところかと。殆どの場合はこれで済むのも事実だし。
C#の場合は(B)の生産性最重視だからこれも一つの解だよ。
878デフォルトの名無しさん
2022/03/19(土) 01:10:20.44ID:k1WAgfOe C#はそうはいかんぞ。
879デフォルトの名無しさん
2022/03/19(土) 01:46:49.15ID:Svl9Tdf5 C#はこれだけだぞ(他言語もasyncなら同様だが)
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/concepts/async/media/task-asynchronous-programming-model/navigation-trace-async-program.png#lightbox
元記事は
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/concepts/async/task-asynchronous-programming-model
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/concepts/async/media/task-asynchronous-programming-model/navigation-trace-async-program.png#lightbox
元記事は
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/concepts/async/task-asynchronous-programming-model
880デフォルトの名無しさん
2022/03/19(土) 01:51:16.86ID:Svl9Tdf5 すまん、877の1つ目の中身は以下。(テキストは無いと勝手に勘違いしてた)
public async Task<int> GetUrlContentLengthAsync()
{
var client = new HttpClient();
Task<string> getStringTask =
client.GetStringAsync("https://docs.microsoft.com/dotnet");
DoIndependentWork();
string contents = await getStringTask;
return contents.Length;
}
void DoIndependentWork()
{
Console.WriteLine("Working...");
}
public async Task<int> GetUrlContentLengthAsync()
{
var client = new HttpClient();
Task<string> getStringTask =
client.GetStringAsync("https://docs.microsoft.com/dotnet");
DoIndependentWork();
string contents = await getStringTask;
return contents.Length;
}
void DoIndependentWork()
{
Console.WriteLine("Working...");
}
881デフォルトの名無しさん
2022/03/19(土) 01:57:24.25ID:DslNhsx1 例えば、Sleepじゃなくて(同期)Waitだけど、WPFなどGUIのプロジェクトでこんなコードを走らせてみれば、デッドロックするよw
// MainWindow.xaml.cs
...
public partial class MainWindow : Window {
private async Task DelayAsync() {
await Task.Delay(1000);
}
public MainWindow() {
DelayAsync().Wait();
InitializeComponent();
}
}
...
.NETのモデルは同期と非同期を混ぜると結構簡単に(分かりにくい)デッドロックを起こす
// MainWindow.xaml.cs
...
public partial class MainWindow : Window {
private async Task DelayAsync() {
await Task.Delay(1000);
}
public MainWindow() {
DelayAsync().Wait();
InitializeComponent();
}
}
...
.NETのモデルは同期と非同期を混ぜると結構簡単に(分かりにくい)デッドロックを起こす
882デフォルトの名無しさん
2022/03/19(土) 02:11:20.46ID:Svl9Tdf5 >>881
waitするのが悪いんだろ。
asyncは同期的にずらずら書く用で、手動でマルチスレッドする用ではないので。
C#はそこまで馬鹿な奴を救済する用には出来てない。
正しく書いた時に正しく動く用だ。
(つか、Taskを流用したから混ぜられるのであって、多分それも仕様なんだろう。
新しくAsyncTaskにしてWaitメソッドを無くせば済んだ話だし)
まあとにかく、簡単に書ける、馬鹿でも書ける、ってことを目指してる限り、
給料なんて一生上がるはずもない事は認識しておくべきだよ。
waitするのが悪いんだろ。
asyncは同期的にずらずら書く用で、手動でマルチスレッドする用ではないので。
C#はそこまで馬鹿な奴を救済する用には出来てない。
正しく書いた時に正しく動く用だ。
(つか、Taskを流用したから混ぜられるのであって、多分それも仕様なんだろう。
新しくAsyncTaskにしてWaitメソッドを無くせば済んだ話だし)
まあとにかく、簡単に書ける、馬鹿でも書ける、ってことを目指してる限り、
給料なんて一生上がるはずもない事は認識しておくべきだよ。
883デフォルトの名無しさん
2022/03/19(土) 02:31:56.02ID:DslNhsx1 そもそもTaskはasync/await前から同じような動きをする書き方が出来てて、手動でマルチスレッドする用ではないw
給料の問題ではなく、他の言語と比較して、不測の事態を起こしやすいモデルなんだよね
名前に統一感がないまま、いろいろ出来るようになっているからw
給料の問題ではなく、他の言語と比較して、不測の事態を起こしやすいモデルなんだよね
名前に統一感がないまま、いろいろ出来るようになっているからw
884デフォルトの名無しさん
2022/03/19(土) 08:49:20.14ID:GnnMuKUb >>881
そこはawait
そこはawait
885デフォルトの名無しさん
2022/03/19(土) 08:50:39.38ID:GnnMuKUb >>883
注意欠陥障害者乙☆
注意欠陥障害者乙☆
886デフォルトの名無しさん
2022/03/19(土) 09:44:10.95ID:54LfxAfj >>884
コンストラクタがasyncじゃないから使えないんじゃね?
コンストラクタがasyncじゃないから使えないんじゃね?
887デフォルトの名無しさん
2022/03/19(土) 13:49:16.76ID:DslNhsx1 あえてカスタマイズしにくいコンストラクタを選んだんだよw
888デフォルトの名無しさん
2022/03/20(日) 00:43:14.80ID:J9wgpmKz889デフォルトの名無しさん
2022/03/20(日) 01:44:23.98ID:1+CNf8az >>888
比較対象がおかしいんじゃなくて、お前が無知なだけw
.NETはSynchronizedContextというのでスレッドのスケジューリングを調整できる
そして、GUIとコンソールでこのスケジューリングが違うから、GUIを出したんだよw
同じことをコンソールアプリでやってもデッドロックしないw
つまりあえておかしいのが何かを選ぶならお前の可哀想な頭ということになるw
比較対象がおかしいんじゃなくて、お前が無知なだけw
.NETはSynchronizedContextというのでスレッドのスケジューリングを調整できる
そして、GUIとコンソールでこのスケジューリングが違うから、GUIを出したんだよw
同じことをコンソールアプリでやってもデッドロックしないw
つまりあえておかしいのが何かを選ぶならお前の可哀想な頭ということになるw
890デフォルトの名無しさん
2022/03/20(日) 08:46:38.88ID:meh5jYAs >>889
おかしいのはお前の頭だ馬鹿タレ
881は
int main() {
sleep();
return 0;
}
でアプリケーションが終了しない!デッドロックだ!と騒いでいるに等しい。
ぼくのすごいあぷりけーしょんのばぐはぜんぶすたてぃっくにけんしゅつされるべき
このていどすらぼくには「わかりにくいでっどろっく」なのだから!
と思うのなら、GoやRustを使っておけ。
C#は実用言語であって、一通りすら書けない馬鹿を救済しようとはしていない。
一般的に、ロック周りの難しさは再現性が低い事にある。
偶々同時にアクセスした時にのみバグるので、
初心者の「一度動いたから問題なし」ではバグを取りきれない。
そのコードなら必ず再現する=再現率100%のバグを修正出来ないのはそいつの問題だ。
(881のバグは静的には検出出来ないのかもしれんが、動かせばすぐ分かるし、すぐ修正出来る)
一般的に難しいとされるバグは、データ依存性が有り、特定のデータ組でしかバグらないものだ。
そしてロック周りなら、データ依存性+タイミング、となるので、さらに発見も遅れるし、
見た目動くし、実際99%以上の場合で全く問題ないしで、場所の特定が困難になる。
お前以外はこの前提で話していただろうよ。
おかしいのはお前の頭だ馬鹿タレ
881は
int main() {
sleep();
return 0;
}
でアプリケーションが終了しない!デッドロックだ!と騒いでいるに等しい。
ぼくのすごいあぷりけーしょんのばぐはぜんぶすたてぃっくにけんしゅつされるべき
このていどすらぼくには「わかりにくいでっどろっく」なのだから!
と思うのなら、GoやRustを使っておけ。
C#は実用言語であって、一通りすら書けない馬鹿を救済しようとはしていない。
一般的に、ロック周りの難しさは再現性が低い事にある。
偶々同時にアクセスした時にのみバグるので、
初心者の「一度動いたから問題なし」ではバグを取りきれない。
そのコードなら必ず再現する=再現率100%のバグを修正出来ないのはそいつの問題だ。
(881のバグは静的には検出出来ないのかもしれんが、動かせばすぐ分かるし、すぐ修正出来る)
一般的に難しいとされるバグは、データ依存性が有り、特定のデータ組でしかバグらないものだ。
そしてロック周りなら、データ依存性+タイミング、となるので、さらに発見も遅れるし、
見た目動くし、実際99%以上の場合で全く問題ないしで、場所の特定が困難になる。
お前以外はこの前提で話していただろうよ。
891デフォルトの名無しさん
2022/03/20(日) 10:31:18.90ID:meh5jYAs >>889
あと881については「Task.Waitの代わりにawaitを使え」とモロクソにドキュメントに書いてある。
(884が指摘してるのはこれだろう)
> タスクを待機するコードは非ブロッキング方式で作成します
> Task が完了するのを待機するための手段として現在のスレッドをブロックすると、
> デッドロックおよびコンテキスト スレッドのブロックが発生するおそれがあり、複雑なエラー処理が必要になることがあります。
> 次の表では、非ブロッキング方式でタスクの待機に対処する方法について説明します。
> これを使う/これは使わない/行う処理
> await/Task.Wait または Task.Result/バックグラウンド タスクの結果の取得
> await Task.WhenAny/Task.WaitAny/任意のタスクの完了の待機
> await Task.WhenAll/Task.WaitAll/すべてのタスクの完了の待機
> await Task.Delay/Thread.Sleep/一定期間の待機
> https://docs.microsoft.com/ja-jp/dotnet/csharp/async
フレームワークには要求されたコードを書く必要があって、好き勝手書いていいわけではない。
ある程度の腕前があるつもりならドキュメントを先に読んだ方が正解だぞ。
(そもそもそんなコード書く必要すらないが)
それ、コンソールアプリなら(コンパイラがフォローしてくれた結果)動くだけの気がするが。
あと881については「Task.Waitの代わりにawaitを使え」とモロクソにドキュメントに書いてある。
(884が指摘してるのはこれだろう)
> タスクを待機するコードは非ブロッキング方式で作成します
> Task が完了するのを待機するための手段として現在のスレッドをブロックすると、
> デッドロックおよびコンテキスト スレッドのブロックが発生するおそれがあり、複雑なエラー処理が必要になることがあります。
> 次の表では、非ブロッキング方式でタスクの待機に対処する方法について説明します。
> これを使う/これは使わない/行う処理
> await/Task.Wait または Task.Result/バックグラウンド タスクの結果の取得
> await Task.WhenAny/Task.WaitAny/任意のタスクの完了の待機
> await Task.WhenAll/Task.WaitAll/すべてのタスクの完了の待機
> await Task.Delay/Thread.Sleep/一定期間の待機
> https://docs.microsoft.com/ja-jp/dotnet/csharp/async
フレームワークには要求されたコードを書く必要があって、好き勝手書いていいわけではない。
ある程度の腕前があるつもりならドキュメントを先に読んだ方が正解だぞ。
(そもそもそんなコード書く必要すらないが)
それ、コンソールアプリなら(コンパイラがフォローしてくれた結果)動くだけの気がするが。
892デフォルトの名無しさん
2022/03/20(日) 11:59:41.08ID:w4XPcyom GUIアプリだとWPFとかがメッセージループ回してくれる
コンソールアプリだとメッセージループがないからそもそもの土台が違うだけでしょ
GUI周りの制限とかもないだろうし
もしかしたらメッセージループを自前で回せばasyncとかのデッドロックをコンソールアプリからもできるかもしれん
コンソールアプリだとメッセージループがないからそもそもの土台が違うだけでしょ
GUI周りの制限とかもないだろうし
もしかしたらメッセージループを自前で回せばasyncとかのデッドロックをコンソールアプリからもできるかもしれん
893デフォルトの名無しさん
2022/03/20(日) 12:01:25.59ID:D3rJhAId >>881
へんな例え出して突っ込まれてるお前好き!
へんな例え出して突っ込まれてるお前好き!
894デフォルトの名無しさん
2022/03/20(日) 12:05:49.90ID:1+CNf8az awaitが使用できないシチュエーションにしてる上に、引数なしのsleep()なんて存在しない上に仮にそれが永久スリープだとして、そういう現象ではないw
非常に自然な使い方なんだよw
またこの例は簡単&再現性100%を挙げただけで、合せ技で再現性低のすごい分かりにくいバグ(終わらないスレッド)を混入させられるw
そしてその自然な使い方がNGであることがドキュメンテーションされていないとは一言も言ってないw
モデルが悪いと言っているw
だからお前はバカだと言われるんだよw
非常に自然な使い方なんだよw
またこの例は簡単&再現性100%を挙げただけで、合せ技で再現性低のすごい分かりにくいバグ(終わらないスレッド)を混入させられるw
そしてその自然な使い方がNGであることがドキュメンテーションされていないとは一言も言ってないw
モデルが悪いと言っているw
だからお前はバカだと言われるんだよw
895デフォルトの名無しさん
2022/03/20(日) 12:08:13.64ID:1+CNf8az896デフォルトの名無しさん
2022/03/20(日) 12:12:12.26ID:1+CNf8az 名前覚え間違ってたw
SynchronizationContext なw
SynchronizationContext なw
897デフォルトの名無しさん
2022/03/20(日) 12:14:20.56ID:59buMwU+ 次世代言語にC#が名乗りを上げたのか?
898デフォルトの名無しさん
2022/03/20(日) 12:23:10.62ID:1+CNf8az 知らねーよw C#を引っ張り出してきたのは俺じゃないw
899デフォルトの名無しさん
2022/03/20(日) 12:36:36.62ID:meh5jYAs >>894
まあとにかく君にはGoやRustがいいと思うよ。
どんなかきかたをしてもこんぱいるがとおりさえすればぼくのあぷりけーしょんにはばぐがないことをほしょうしてくれないといや!なんだろ。
既に言ったとおり、
フレームワークは一般的に「こう書け」と要求してるとおりに書かないと誤作動する。
async/awaitにてTask.Waitを使うなとはドキュメントに書いてあり、一般的にはそれで十分だ。
そもそもasync/awaitは細かく動作タイミングを指定する為の物ではないので、通常はそんなことしないし。
>>892
一応SynchronizationContextを弄くれば、
メッセージループやasync/awaitでのスレッドプールでの動作とかも変更出来るらしい。(override)
> https://devblogs.microsoft.com/dotnet/configureawait-faq/
ただ普通は必要ないからしないと思うが。
Forms/WPF/WinRTで異なるとは書いてある。
コンソールでどうなのかは知らんが、881のコードでも動くモデルが差し込んであるのだろう。
ただそれは間違ってるコードが偶々動いてるだけの気がするが。
まあとにかく君にはGoやRustがいいと思うよ。
どんなかきかたをしてもこんぱいるがとおりさえすればぼくのあぷりけーしょんにはばぐがないことをほしょうしてくれないといや!なんだろ。
既に言ったとおり、
フレームワークは一般的に「こう書け」と要求してるとおりに書かないと誤作動する。
async/awaitにてTask.Waitを使うなとはドキュメントに書いてあり、一般的にはそれで十分だ。
そもそもasync/awaitは細かく動作タイミングを指定する為の物ではないので、通常はそんなことしないし。
>>892
一応SynchronizationContextを弄くれば、
メッセージループやasync/awaitでのスレッドプールでの動作とかも変更出来るらしい。(override)
> https://devblogs.microsoft.com/dotnet/configureawait-faq/
ただ普通は必要ないからしないと思うが。
Forms/WPF/WinRTで異なるとは書いてある。
コンソールでどうなのかは知らんが、881のコードでも動くモデルが差し込んであるのだろう。
ただそれは間違ってるコードが偶々動いてるだけの気がするが。
900デフォルトの名無しさん
2022/03/20(日) 12:44:20.26ID:1+CNf8az ここまで書いてやってもまだ理解できてないのか・・・
await後に元のスレッドで再開するのがGUI用のSynchronizationContext w
だから、Task.Waitを同期的にやると同じスレッドなのでデッドロックする
GUIだとUIスレッドでawaitしたら復帰したときに同じUIスレッドで処理したいからそうする
コンソールだとそういう縛りがないから、await後は別のスレッドになる可能性がある(典型的には使用中なら別のスレッド)w
それだけw
こんなこと言われないと分からないのなら、お前はC#を「使えていない」w
await後に元のスレッドで再開するのがGUI用のSynchronizationContext w
だから、Task.Waitを同期的にやると同じスレッドなのでデッドロックする
GUIだとUIスレッドでawaitしたら復帰したときに同じUIスレッドで処理したいからそうする
コンソールだとそういう縛りがないから、await後は別のスレッドになる可能性がある(典型的には使用中なら別のスレッド)w
それだけw
こんなこと言われないと分からないのなら、お前はC#を「使えていない」w
901デフォルトの名無しさん
2022/03/20(日) 12:49:33.87ID:D3rJhAId 馬鹿はなぜ周りから馬鹿扱いされているか気が付かないからバカなんだ
周りが馬鹿なんじゃなくて本質的に理解してないでデッドロックがどうこう書いてくる
周りが馬鹿なんじゃなくて本質的に理解してないでデッドロックがどうこう書いてくる
902デフォルトの名無しさん
2022/03/20(日) 12:50:34.94ID:D3rJhAId 周りが馬鹿なんじゃなくて本質的に理解してないでデッドロックがどうこう書いてくる人間が馬鹿
903デフォルトの名無しさん
2022/03/20(日) 12:56:56.16ID:1+CNf8az ぼくちゃんたちには難しくて分からなかったかもねw
ぼくちゃんたちの頭が悪いのまで俺のせいにされても困るw
ぼくちゃんたちの頭が悪いのまで俺のせいにされても困るw
904デフォルトの名無しさん
2022/03/20(日) 13:06:31.37ID:D3rJhAId C#とWPF使うとデッドロックが起こる!簡単には使えない!
GoとRustでCUIでやればデッドロックが起こらない!簡単だ!
↑馬鹿すぎますよね?
GoとRustでCUIでやればデッドロックが起こらない!簡単だ!
↑馬鹿すぎますよね?
905デフォルトの名無しさん
2022/03/20(日) 13:09:30.45ID:1+CNf8az バカの自己紹介ほどツマラナイものはないなw
.NETは玉石混交の継ぎ接ぎだらけでモデルが悪いと言ってるだけなんだがw
.NETは玉石混交の継ぎ接ぎだらけでモデルが悪いと言ってるだけなんだがw
906デフォルトの名無しさん
2022/03/20(日) 13:11:24.97ID:D3rJhAId この人がスゲー馬鹿なのは同意してくれないの?
876 名前:デフォルトの名無しさん[sage] 投稿日:2022/03/19(土) 00:33:29.03 ID:DslNhsx1 [1/4]
C#とGoとRustならGoでいいと思うけど…一番ラクじゃん
C#なんてTask.Delay()の代わりにThread.Sleep()使うだけで簡単にデッドロックするよw
876 名前:デフォルトの名無しさん[sage] 投稿日:2022/03/19(土) 00:33:29.03 ID:DslNhsx1 [1/4]
C#とGoとRustならGoでいいと思うけど…一番ラクじゃん
C#なんてTask.Delay()の代わりにThread.Sleep()使うだけで簡単にデッドロックするよw
907デフォルトの名無しさん
2022/03/20(日) 13:14:29.87ID:1+CNf8az お前がバカなだけw
908デフォルトの名無しさん
2022/03/20(日) 13:25:26.04ID:meh5jYAs >>900
それで君がC#を使えている事にもならないとは思うがな。
プログラミング言語は一般的に「正しく書けば正しく動く」であって、
「間違った使い方をした時にもそれなりに動く」事は期待されてない。
これが707で言った「自分の足を撃てるか」で、C#については、
> You forget precisely how to use the .NET interface and shoot yourself in the foot. You sue Microsoft for damages.
となっているが、君はまんまこれではないか。真っ当なら、
× 俺はSynchronizationContextの中身まで熟知しており、Task.Waitをコンソールアプリで使ってもフリーズしないと知っている。だから使う。
○ MSが「async/awaitではTask.Waitは使うな」と言ってるから、使わない。
だと思うが。
それで君がC#を使えている事にもならないとは思うがな。
プログラミング言語は一般的に「正しく書けば正しく動く」であって、
「間違った使い方をした時にもそれなりに動く」事は期待されてない。
これが707で言った「自分の足を撃てるか」で、C#については、
> You forget precisely how to use the .NET interface and shoot yourself in the foot. You sue Microsoft for damages.
となっているが、君はまんまこれではないか。真っ当なら、
× 俺はSynchronizationContextの中身まで熟知しており、Task.Waitをコンソールアプリで使ってもフリーズしないと知っている。だから使う。
○ MSが「async/awaitではTask.Waitは使うな」と言ってるから、使わない。
だと思うが。
909デフォルトの名無しさん
2022/03/20(日) 13:39:56.48ID:1+CNf8az アホだなw
じゃあUIイベントをasyncメソッドで受けてawaitしてからUI処理すんなよw
俺が言ったこと(await後のスレッドの話)はC#使えるやつなら基礎として知ってることなんだよw
知ってないとawaitしてUI処理できんからw
逆にTask.Waitがスレッドをロックしてしまうブロック処理かどうかはよく読まないと知らないことw
でも有名な話だからまともにC#使える人なら皆知っているけどねw
特定の状況でしか必要にならないから、await後でデッドロックすることがある、ということしか知らず、へぇ〜コレか〜という形になる人が稀にいる程度w
なので、
○ 俺はGUIアプリでawait後に元のスレッドで継続することと、コンソールアプリでは別スレッドになることがあることを知っており、だからC#を使える
× 俺はMSが「async/awaitではTask.Waitは使うな」と書いてあることを知っており、だからC#を使える
ってことだw
じゃあUIイベントをasyncメソッドで受けてawaitしてからUI処理すんなよw
俺が言ったこと(await後のスレッドの話)はC#使えるやつなら基礎として知ってることなんだよw
知ってないとawaitしてUI処理できんからw
逆にTask.Waitがスレッドをロックしてしまうブロック処理かどうかはよく読まないと知らないことw
でも有名な話だからまともにC#使える人なら皆知っているけどねw
特定の状況でしか必要にならないから、await後でデッドロックすることがある、ということしか知らず、へぇ〜コレか〜という形になる人が稀にいる程度w
なので、
○ 俺はGUIアプリでawait後に元のスレッドで継続することと、コンソールアプリでは別スレッドになることがあることを知っており、だからC#を使える
× 俺はMSが「async/awaitではTask.Waitは使うな」と書いてあることを知っており、だからC#を使える
ってことだw
910デフォルトの名無しさん
2022/03/20(日) 14:07:36.11ID:meh5jYAs >>909
そうじゃない。
何度も言ってるが、フレームワークはフレームワーク製作者が要求したとおりのコードじゃないと駄目なんだ。
これはどのフレームワークでもそう。
MSが「async/awaitではTask.Waitは使うな」と言ってるのだから、これに従う限り、
Task.Waitを混ぜた時の動作については知る必要はない、というのが一般論。
フレームワークにデタラメなコード(=製作者が予期してないコード)を食わせたらどうなるか、を把握する為には、
フレームワークの中身まで知る必要がある。
一々こんな事をしてたら生産性なんて上がらないし、正しく使っている限り必要ないから、
一般的にはこれは要求されない。
だからお前の考え方は根本的にずれてるよ。
例えばHTML、これはWeb系に於いての暗黙のフレームワークHTML/CSS/JavaScriptの一角を担ってるわけだが、
実はデタラメなHTMLでもブラウザはそれなりには表示してしまう。
だからといって、「デタラメなHTMLを食わせた時にどう動くかを把握して、デタラメなHTMLを書いてもいい」とはならんし、
「デタラメなHTMLを食わせた時の各ブラウザの挙動を把握してこそWebを『使える』と言える」ともならんだろ。
「正しいHTMLを書け」で終わりだ。
ただまあこれはもう平行線だし、これについての俺の主張は上記だから、これで終わりでいい。
C#のモデルが悪いというのなら、
「MSが正しい使い方だと認めるコードでも容易にデッドロックが発生する事例」を持ってくるべきだ。
間違ったコードでフリーズしたところで、あっそう、でしかない。
一般的にはそんなのを書く奴が悪いとされるし、C#でも実際そうだと思うよ。
そうじゃない。
何度も言ってるが、フレームワークはフレームワーク製作者が要求したとおりのコードじゃないと駄目なんだ。
これはどのフレームワークでもそう。
MSが「async/awaitではTask.Waitは使うな」と言ってるのだから、これに従う限り、
Task.Waitを混ぜた時の動作については知る必要はない、というのが一般論。
フレームワークにデタラメなコード(=製作者が予期してないコード)を食わせたらどうなるか、を把握する為には、
フレームワークの中身まで知る必要がある。
一々こんな事をしてたら生産性なんて上がらないし、正しく使っている限り必要ないから、
一般的にはこれは要求されない。
だからお前の考え方は根本的にずれてるよ。
例えばHTML、これはWeb系に於いての暗黙のフレームワークHTML/CSS/JavaScriptの一角を担ってるわけだが、
実はデタラメなHTMLでもブラウザはそれなりには表示してしまう。
だからといって、「デタラメなHTMLを食わせた時にどう動くかを把握して、デタラメなHTMLを書いてもいい」とはならんし、
「デタラメなHTMLを食わせた時の各ブラウザの挙動を把握してこそWebを『使える』と言える」ともならんだろ。
「正しいHTMLを書け」で終わりだ。
ただまあこれはもう平行線だし、これについての俺の主張は上記だから、これで終わりでいい。
C#のモデルが悪いというのなら、
「MSが正しい使い方だと認めるコードでも容易にデッドロックが発生する事例」を持ってくるべきだ。
間違ったコードでフリーズしたところで、あっそう、でしかない。
一般的にはそんなのを書く奴が悪いとされるし、C#でも実際そうだと思うよ。
911デフォルトの名無しさん
2022/03/20(日) 14:19:36.23ID:1+CNf8az お前が頓珍漢な主張を繰り返しているだけだろw
仕様通りの使い方が出来ているかどうかという話をしておらず、その仕様の出来が良いか悪いかの話をしているんだろうにw
理由はそういうスレだからw
俺はそういう話をするために事例を出し、.NETのモデルの悪さを指摘したw
ただ、その原因すらお前が理解していないようだから、一般常識レベルの説明をしただけだw
一応言っておくが、俺は使用するAPIはドキュメントを全て読んでから使用しているw
でもそんな話は今していないんだw お前が言ってることが周回遅れすぎてるだけw
というかC#すら分かっておらず、当該言語もよく知らない上にスレの主旨も理解できてないなら口出してくんなw
仕様通りの使い方が出来ているかどうかという話をしておらず、その仕様の出来が良いか悪いかの話をしているんだろうにw
理由はそういうスレだからw
俺はそういう話をするために事例を出し、.NETのモデルの悪さを指摘したw
ただ、その原因すらお前が理解していないようだから、一般常識レベルの説明をしただけだw
一応言っておくが、俺は使用するAPIはドキュメントを全て読んでから使用しているw
でもそんな話は今していないんだw お前が言ってることが周回遅れすぎてるだけw
というかC#すら分かっておらず、当該言語もよく知らない上にスレの主旨も理解できてないなら口出してくんなw
912デフォルトの名無しさん
2022/03/20(日) 14:26:39.18ID:AzzPxPqt デッドロックの話ならGoなんてチャネルの扱いを間違えたら簡単にデッドロックするでしょ
C#もGoも両方プロダクションでそれなりに使い込んでるけど、感覚的にはGoの方が遥かにデッドロックを起こしやすいよ
C#もGoも両方プロダクションでそれなりに使い込んでるけど、感覚的にはGoの方が遥かにデッドロックを起こしやすいよ
913デフォルトの名無しさん
2022/03/20(日) 14:35:25.89ID:meh5jYAs914デフォルトの名無しさん
2022/03/20(日) 14:41:39.54ID:lPRYwieL rust - Mutexのロックが解除されない
https://ja.stackoverflow.com/questions/60337/mutex%E3%81%AE%E3%83%AD%E3%83%83%E3%82%AF%E3%81%8C%E8%A7%A3%E9%99%A4%E3%81%95%E3%82%8C%E3%81%AA%E3%81%84
Golangでデッドロックを作って遊んでみる
https://www.asobou.co.jp/blog/web/deadlock
https://ja.stackoverflow.com/questions/60337/mutex%E3%81%AE%E3%83%AD%E3%83%83%E3%82%AF%E3%81%8C%E8%A7%A3%E9%99%A4%E3%81%95%E3%82%8C%E3%81%AA%E3%81%84
Golangでデッドロックを作って遊んでみる
https://www.asobou.co.jp/blog/web/deadlock
915デフォルトの名無しさん
2022/03/20(日) 14:50:44.84ID:oojzEd61 なるほどね
・チャネルを使わない
・ロックを使う場合のロック順序は守る
という制限があっても簡単にデッドロックが起きてしまうのがC#という結論かな
・チャネルを使わない
・ロックを使う場合のロック順序は守る
という制限があっても簡単にデッドロックが起きてしまうのがC#という結論かな
916デフォルトの名無しさん
2022/03/20(日) 14:59:33.25ID:Su88XcRk >>914
その回答を見てもわかるように
RustではMutexなどのロックはそのブロックを抜けると自動的に解除されます
だからその質問のプログラムがそのロックしたブロックを完了していないというバグだということが今回の例でもすぐわかるわけです
その回答を見てもわかるように
RustではMutexなどのロックはそのブロックを抜けると自動的に解除されます
だからその質問のプログラムがそのロックしたブロックを完了していないというバグだということが今回の例でもすぐわかるわけです
917デフォルトの名無しさん
2022/03/20(日) 15:03:54.72ID:1+CNf8az channelでデッドロックするのはよほど使い方悪いだけだろw
プロダクトでそれはありえないw
channelを使わずにmutex使うとかバカとしか言いようがないw
mutexなどの同期リソースを手動で使う場合は、どんな言語でも細心の注意を払わないとデッドロックなどのバグが発生するw
goのchannelはgo固有w
IPCの接続をsocketと呼ばずにchannelと呼ぶフレームはあるけどねw
プロダクトでそれはありえないw
channelを使わずにmutex使うとかバカとしか言いようがないw
mutexなどの同期リソースを手動で使う場合は、どんな言語でも細心の注意を払わないとデッドロックなどのバグが発生するw
goのchannelはgo固有w
IPCの接続をsocketと呼ばずにchannelと呼ぶフレームはあるけどねw
918デフォルトの名無しさん
2022/03/20(日) 15:07:57.75ID:1+CNf8az まあでも並列動作で一番厄介なのはMutexを使わずにatomic readを期待しちゃった系読み書きのバグかなw
919デフォルトの名無しさん
2022/03/20(日) 15:13:13.79ID:59buMwU+ デッドロック起きないことを保証できたらまさに次世代言語って感じがするな
そんな言語あるのかは知らんが
そんな言語あるのかは知らんが
920デフォルトの名無しさん
2022/03/20(日) 15:20:14.57ID:1+CNf8az 非同期プログラミング(async/awaitなど)は正にその辺を狙った技術だよw
非同期処理完了の戻り値としてデータ授受をすることで複数スレッドからのデータアクセスの同期処理をなくしやすくしているw
保証するものじゃないし、する必要もないけどw
非同期処理完了の戻り値としてデータ授受をすることで複数スレッドからのデータアクセスの同期処理をなくしやすくしているw
保証するものじゃないし、する必要もないけどw
921デフォルトの名無しさん
2022/03/20(日) 15:24:25.24ID:BxWAUZWU922デフォルトの名無しさん
2022/03/20(日) 15:28:04.92ID:w4XPcyom lock要求された順番を検証して、
順序にループがあればlock要求時にthrowする仕組みは作れそう
lock/unlockのたびに全threadのlock状況を検証する必要があるからパフォーマンスがお察しになるが
順序にループがあればlock要求時にthrowする仕組みは作れそう
lock/unlockのたびに全threadのlock状況を検証する必要があるからパフォーマンスがお察しになるが
923デフォルトの名無しさん
2022/03/20(日) 15:39:08.57ID:meh5jYAs >>915
どの言語でも、間違った使い方をすればデッドロックはする。
(Task.Waitなどを使うという、明らかに間違った事をせず、)
async/awaitだけで(ジョブ間に依存性がないように)書けばデッドロックしない。
これはC#でもJSでも他言語でも同じのはずだけど。
ID:1+CNf8az だけが
まちがったつかいかたもできるし、それがぼくにとってはわかりにくいからもんだいだ!!!
と言ってるだけ。
どの言語でも、間違った使い方をすればデッドロックはする。
(Task.Waitなどを使うという、明らかに間違った事をせず、)
async/awaitだけで(ジョブ間に依存性がないように)書けばデッドロックしない。
これはC#でもJSでも他言語でも同じのはずだけど。
ID:1+CNf8az だけが
まちがったつかいかたもできるし、それがぼくにとってはわかりにくいからもんだいだ!!!
と言ってるだけ。
924デフォルトの名無しさん
2022/03/20(日) 15:39:50.43ID:1+CNf8az >>921
何を言ってるの????
共有データを作らないためのchannelではないの?
channelだけではどうしても無理な場合だけmutex使って共有データにアクセスするだけだろw
まずは例を出せw
何を言ってるの????
共有データを作らないためのchannelではないの?
channelだけではどうしても無理な場合だけmutex使って共有データにアクセスするだけだろw
まずは例を出せw
925デフォルトの名無しさん
2022/03/20(日) 15:42:03.81ID:1+CNf8az926デフォルトの名無しさん
2022/03/20(日) 15:45:30.35ID:1+CNf8az >>922
function method1() { lock(objA) { lock(objB) {
処理;
}}}
function method2() { lock(objB) { lock(objA) {
処理;
}}}
みたいなmethod1とmethod2が別のスレッドで同時に動いたときにデッドロックする
function method1() { lock(objA) { lock(objB) {
処理;
}}}
function method2() { lock(objB) { lock(objA) {
処理;
}}}
みたいなmethod1とmethod2が別のスレッドで同時に動いたときにデッドロックする
927デフォルトの名無しさん
2022/03/20(日) 16:07:28.81ID:KN3blaKP928デフォルトの名無しさん
2022/03/20(日) 16:12:06.86ID:1+CNf8az >>927
バカはお前w デッドロックを検出することは可能だが、順序がループするわけではないw
バカはお前w デッドロックを検出することは可能だが、順序がループするわけではないw
929デフォルトの名無しさん
2022/03/20(日) 16:16:25.61ID:JT8vl7rT 順序がループ?w
930デフォルトの名無しさん
2022/03/20(日) 16:28:20.05ID:1+CNf8az931デフォルトの名無しさん
2022/03/20(日) 17:43:56.42ID:sUfYxNf/ https://github.com/ghc/ghc/blob/d45bb70178e044bc8b6e8215da7bc8ed0c95f2cb/libraries/base/Control/Concurrent.hs#L643-L649
Haskellは参照されていない=デッドロックしているスレッドをGCが検出しているらしい。素人意見ですが、もしかして他のGC言語も同じことをすると良いのでは?
Haskellは参照されていない=デッドロックしているスレッドをGCが検出しているらしい。素人意見ですが、もしかして他のGC言語も同じことをすると良いのでは?
932デフォルトの名無しさん
2022/03/20(日) 18:10:14.51ID:1+CNf8az 別にGCじゃなくても検出はできるよw ただのバグだから余計なコストがかかる処理を入れてないだけでw
933デフォルトの名無しさん
2022/03/20(日) 18:40:40.29ID:ED0sGA+M 毎度毎度、c#もあんまり詳しくないよねこの人。
Rustは俺はわからんのだけど、c#とgoの話だとこの人が言ってんのは重箱の隅をつついて「これが大問題であるっ!!」って騒いでるような感じ。
まあGoでコンパイラ書いたらGCから逃れられないみたいなアホも居たわけだからアレなんだけど。
Rustは俺はわからんのだけど、c#とgoの話だとこの人が言ってんのは重箱の隅をつついて「これが大問題であるっ!!」って騒いでるような感じ。
まあGoでコンパイラ書いたらGCから逃れられないみたいなアホも居たわけだからアレなんだけど。
934デフォルトの名無しさん
2022/03/20(日) 18:48:20.78ID:OVL9TeC6 >>933
GC言語はどうしてもそれ故の種々の制限があるからしょうがない
もちろんGC言語はその代わりに有利な面もある
そこへGC言語でないRustが初めてGC言語と対等に比較可能な存在として登場した
しかもGCのない有利さを保ったままで
GC言語はどうしてもそれ故の種々の制限があるからしょうがない
もちろんGC言語はその代わりに有利な面もある
そこへGC言語でないRustが初めてGC言語と対等に比較可能な存在として登場した
しかもGCのない有利さを保ったままで
935デフォルトの名無しさん
2022/03/20(日) 18:57:31.06ID:3v4+I3Ge この人rustスレではc++に比べてrustはクソと
同じように知ったかぶりでトンチンカンな叩き
してるからまあこういうことやるのが目的なんだろ
同じように知ったかぶりでトンチンカンな叩き
してるからまあこういうことやるのが目的なんだろ
936デフォルトの名無しさん
2022/03/20(日) 18:57:43.35ID:eHF+L46q > そこへGC言語でないRustが初めてGC言語と対等に比較可能な存在として登場した
SwiftにもGCは無いよね
ARC(Automatic Reference Counting)でやりくりするんよね
Swift使っこと無いし完全に俺はニワカだけど
SwiftにもGCは無いよね
ARC(Automatic Reference Counting)でやりくりするんよね
Swift使っこと無いし完全に俺はニワカだけど
937デフォルトの名無しさん
2022/03/20(日) 19:14:52.51ID:ED0sGA+M >>934
Goでコンパイラ書いたらバイナリにもGCが入るっていう誤解の正当化?
Goでコンパイラ書いたらバイナリにもGCが入るっていう誤解の正当化?
938デフォルトの名無しさん
2022/03/20(日) 19:16:00.62ID:NhMlqBrF >>936
C++とRustでも所有権を共有する時だけはARCと同じ方法を使っている
しかしC++とRustはそういう特殊なケースでのみ使用だからGC言語とは言われない
一方でSwiftは常にインスタンスに対してARCでメモリ管理をするため非常に重く効率が悪い
そしてARCが常に行われるということは参照カウント方式のGCそのものである
そのためSwiftは非GC言語とは言い難い
C++とRustでも所有権を共有する時だけはARCと同じ方法を使っている
しかしC++とRustはそういう特殊なケースでのみ使用だからGC言語とは言われない
一方でSwiftは常にインスタンスに対してARCでメモリ管理をするため非常に重く効率が悪い
そしてARCが常に行われるということは参照カウント方式のGCそのものである
そのためSwiftは非GC言語とは言い難い
939デフォルトの名無しさん
2022/03/20(日) 19:21:33.37ID:x160hDIc >>937
そのGo製コンパイラ自体はGCランタイムを含むしGCを起こすよ
他にもGoで記述して例えばWebAssemblyをブラウザ上で動かそうとすると
当然GCを含むGoの巨大なランタイムがWASM上でそのまま必要となるため
Goを使うと巨大で重くて遅い
そのGo製コンパイラ自体はGCランタイムを含むしGCを起こすよ
他にもGoで記述して例えばWebAssemblyをブラウザ上で動かそうとすると
当然GCを含むGoの巨大なランタイムがWASM上でそのまま必要となるため
Goを使うと巨大で重くて遅い
940デフォルトの名無しさん
2022/03/20(日) 19:50:10.66ID:eHF+L46q > そのためSwiftは非GC言語とは言い難い
https://docs.swift.org/swift-book/LanguageGuide/AutomaticReferenceCounting.html
> In systems that use garbage collection, (略).
> However, with ARC, (略).
ここでは「ガベージコレクションを使用するシステム」と「ARC」を対比させてるっぽいね
あと個人的にもやっぱりスマートポインタの一種でしか無いように見える
RustのRcといっしょ
循環参照はプログラマが頑張ってweak使ってなんとかしてね、ってのも
ただおっしゃるとおりRustはRcを全部に使うわけじゃあないからまた雰囲気も違うのは確か
https://docs.swift.org/swift-book/LanguageGuide/AutomaticReferenceCounting.html
> In systems that use garbage collection, (略).
> However, with ARC, (略).
ここでは「ガベージコレクションを使用するシステム」と「ARC」を対比させてるっぽいね
あと個人的にもやっぱりスマートポインタの一種でしか無いように見える
RustのRcといっしょ
循環参照はプログラマが頑張ってweak使ってなんとかしてね、ってのも
ただおっしゃるとおりRustはRcを全部に使うわけじゃあないからまた雰囲気も違うのは確か
941デフォルトの名無しさん
2022/03/20(日) 22:21:15.61ID:RXl78SgQ C++のshared_ptrやRustのRcは必要不可欠な最小限でしか用いないから必須なコストを払っているだけと言えるが
SwiftのARCは全てのインスタンスに適用されるから無駄なコストを浪費しているとしか言いようがない
SwiftのARCは全てのインスタンスに適用されるから無駄なコストを浪費しているとしか言いようがない
942デフォルトの名無しさん
2022/03/20(日) 23:09:41.16ID:1+CNf8az >>933
実際大問題だっつーのw
C#の非同期系の諸問題は大抵これが原因w
ごく稀にスレッド間の同期(排他制御)が不足してる競合が原因のがあるって感じ
お前こそC#使った開発とか本当にしたことあるのか?w
実際大問題だっつーのw
C#の非同期系の諸問題は大抵これが原因w
ごく稀にスレッド間の同期(排他制御)が不足してる競合が原因のがあるって感じ
お前こそC#使った開発とか本当にしたことあるのか?w
943デフォルトの名無しさん
2022/03/20(日) 23:37:15.53ID:1+CNf8az あとgoについて何か文句を言ったことはないw
944デフォルトの名無しさん
2022/03/20(日) 23:38:33.20ID:gQLNPKUR なんかそういうデータあるんですか?
945デフォルトの名無しさん
2022/03/20(日) 23:47:54.68ID:1+CNf8az どういうデータだよおバカさんw
946デフォルトの名無しさん
2022/03/20(日) 23:56:02.86ID:meh5jYAs >>942
それは主にお前の問題だな
それは主にお前の問題だな
947デフォルトの名無しさん
2022/03/21(月) 00:04:44.37ID:BAdp3agq >>946
仕事で作った数人x半年レベルのWindowsアプリ(製品)の話だよw
全然違う分野のだけど、C#は1.xと2.0と4.6?で作ったかなw
なので俺の問題ではないw 全員C#の練度はお前よりは上だったけどw
仕事で作った数人x半年レベルのWindowsアプリ(製品)の話だよw
全然違う分野のだけど、C#は1.xと2.0と4.6?で作ったかなw
なので俺の問題ではないw 全員C#の練度はお前よりは上だったけどw
948デフォルトの名無しさん
2022/03/21(月) 00:15:23.07ID:g32P+Ld/949デフォルトの名無しさん
2022/03/21(月) 00:31:38.49ID:IPXTt6Bp >>947-948
ならそれはお前らの技量が足りなかっただけだ。
そもそもデッドロックするかどうかは言語関係ないだろ。
新旧の仕様を混ぜて使えるようになってるのが落とし穴だ、というのなら、
それはそうかもしれんが、C#としてはそこをすぐに塞ぐのは無理だ。
それでRust使えば全く問題ない!と思うのならガンガン使ってみればいいだけ。
そんな単純な話ではないと思うけどね。
ならそれはお前らの技量が足りなかっただけだ。
そもそもデッドロックするかどうかは言語関係ないだろ。
新旧の仕様を混ぜて使えるようになってるのが落とし穴だ、というのなら、
それはそうかもしれんが、C#としてはそこをすぐに塞ぐのは無理だ。
それでRust使えば全く問題ない!と思うのならガンガン使ってみればいいだけ。
そんな単純な話ではないと思うけどね。
950デフォルトの名無しさん
2022/03/21(月) 00:58:46.04ID:BAdp3agq >>949
俺は助っ人で行っただけだからなw
現象はデッドロックだけではないし、まあお前には想像もできないし、遭遇しても解決できないから安心しろw
そして何度でも言うが、彼らはお前よりはC#についての知見が遥かに多かったよw
デッドロックの話にピンと来ないC#erは初めて見たし、await後のスレッドの話、GUIにおけるUIスレッドの役割に対する見解の話、全ての話において、お前は最低限C#技術者に必要な知見を有していないw
俺は助っ人で行っただけだからなw
現象はデッドロックだけではないし、まあお前には想像もできないし、遭遇しても解決できないから安心しろw
そして何度でも言うが、彼らはお前よりはC#についての知見が遥かに多かったよw
デッドロックの話にピンと来ないC#erは初めて見たし、await後のスレッドの話、GUIにおけるUIスレッドの役割に対する見解の話、全ての話において、お前は最低限C#技術者に必要な知見を有していないw
951デフォルトの名無しさん
2022/03/21(月) 08:32:36.49ID:t8rbivUy 小学生ですがみなさんの情報たいへんおもしろいです
でもどうして大人のひとってけんかばかりしてるのですか?
でもどうして大人のひとってけんかばかりしてるのですか?
952デフォルトの名無しさん
2022/03/21(月) 08:45:38.05ID:BAdp3agq こんなところに来る小学生はあんまり小学生とか言わないで使いそうだけどなw
喧嘩なんてしなくて、じゃれ合ってるだけだからだよw
喧嘩なんてしなくて、じゃれ合ってるだけだからだよw
953デフォルトの名無しさん
2022/03/21(月) 08:48:32.48ID:2Zu3Swq+954デフォルトの名無しさん
2022/03/21(月) 08:56:52.04ID:BAdp3agq もちろん.NET Frameworkのバージョンだよw C#のバージョンなんて誰も覚えてないだろw
955デフォルトの名無しさん
2022/03/21(月) 09:13:23.58ID:IPXTt6Bp >>950
それはやり方を間違ってるからおかしな事になってるだけ。
例えて言うなら、舗装道路が用意されてるのにイキって荒地を走行してパンクしてるようなもの。
天の邪鬼も自由だが、それでフレームワークや言語のせいにするのは違う。
それはやり方を間違ってるからおかしな事になってるだけ。
例えて言うなら、舗装道路が用意されてるのにイキって荒地を走行してパンクしてるようなもの。
天の邪鬼も自由だが、それでフレームワークや言語のせいにするのは違う。
956デフォルトの名無しさん
2022/03/21(月) 09:56:39.42ID:+0SCi87t 結局程度の低いプログラマーがC#が悪い!って言ってるだけだろ?
話を見てるだけでも.netのフレームワークも別に悪くない
C++で文字コードの扱いが悪いと言うならわかるけど…
話を見てるだけでも.netのフレームワークも別に悪くない
C++で文字コードの扱いが悪いと言うならわかるけど…
957デフォルトの名無しさん
2022/03/21(月) 09:57:03.43ID:BAdp3agq お前まだいたの?w ここでの話は
・.NETのモデルは出来が悪い
・お前C#erに必要な最低限の知見がない
これだけだし結論出てんだよw
・.NETのモデルは出来が悪い
・お前C#erに必要な最低限の知見がない
これだけだし結論出てんだよw
958デフォルトの名無しさん
2022/03/21(月) 10:08:50.17ID:bf5EvDSb >>957
C#erって言葉を使ってるだけで相手を見下してるよね
Rustで同じ状況じゃ競合が起きないとかいうならわかるけどそういう話でもないし
あなたが勝手に出来が悪いと言ってるようにしか見えないんだから
出された例も馬鹿らしくて.NETのモデルも別に悪くないと思う
誰もあなたに同意できない
それだけの技量があなたにはない
他人を見下したり自分が悪いと思える謙虚さがないと低級プログラマにしかなれない
いい加減に静かにしてもらえないかな
それかどこか別に行ってやるか
C#erって言葉を使ってるだけで相手を見下してるよね
Rustで同じ状況じゃ競合が起きないとかいうならわかるけどそういう話でもないし
あなたが勝手に出来が悪いと言ってるようにしか見えないんだから
出された例も馬鹿らしくて.NETのモデルも別に悪くないと思う
誰もあなたに同意できない
それだけの技量があなたにはない
他人を見下したり自分が悪いと思える謙虚さがないと低級プログラマにしかなれない
いい加減に静かにしてもらえないかな
それかどこか別に行ってやるか
959デフォルトの名無しさん
2022/03/21(月) 10:12:21.44ID:bf5EvDSb デッドロックに対応できないのは言語やフレームワークのせいじゃないだろ
実際にモデルが悪いのはそっちの設計の方だろ?
実際にモデルが悪いのはそっちの設計の方だろ?
960デフォルトの名無しさん
2022/03/21(月) 10:38:31.66ID:BAdp3agq まだ言ってるしwwwww
普通にTaskをwaitするのがawaitなのにTask.Waitって名前でデッドロックする仕様はモデルが悪いとしか言いようがないだろwwww
普通にTaskをwaitするのがawaitなのにTask.Waitって名前でデッドロックする仕様はモデルが悪いとしか言いようがないだろwwww
961デフォルトの名無しさん
2022/03/21(月) 10:39:34.38ID:BAdp3agq 謙虚さとかプログラマには要らないからw
色眼鏡かけてなければ問題ないよw
色眼鏡かけてなければ問題ないよw
962デフォルトの名無しさん
2022/03/21(月) 11:52:23.94ID:1IpbvO/Q >>961
謙虚さがないからおまえみたいに色眼鏡かけるようになるんだよ。少しは学べよ。
謙虚さがないからおまえみたいに色眼鏡かけるようになるんだよ。少しは学べよ。
963デフォルトの名無しさん
2022/03/21(月) 11:56:12.36ID:4nBaVoJg ろくに調べもしないで不具合だしてるだけじゃん
名前で判断するなよ
名前で判断するなよ
964デフォルトの名無しさん
2022/03/21(月) 12:07:23.76ID:BAdp3agq 色眼鏡かけてるのはお前だけだよw
公平に見るために謙虚さはむしろ要らないw
謙虚にすると周囲に合わせることになり、自分の意見が100%反映されなくなるw
迎合してエコーチェンバーの一部になると、色眼鏡をかけることになり、公平な判断は出来なくなるw
不具合出したわけではなく、.NETのモデルが悪いだけw 日本語不自由なんだねw
公平に見るために謙虚さはむしろ要らないw
謙虚にすると周囲に合わせることになり、自分の意見が100%反映されなくなるw
迎合してエコーチェンバーの一部になると、色眼鏡をかけることになり、公平な判断は出来なくなるw
不具合出したわけではなく、.NETのモデルが悪いだけw 日本語不自由なんだねw
965デフォルトの名無しさん
2022/03/21(月) 12:20:03.99ID:9hJO1ac5 Tas.Waitでデッドロックする条件分かってんだからライブラリ側で例外投げてくれよとは思うが
1ライブラリのクソ要素を根拠に言語自体をクソと言い張る思考には感心するよ
1ライブラリのクソ要素を根拠に言語自体をクソと言い張る思考には感心するよ
966デフォルトの名無しさん
2022/03/21(月) 12:38:23.15ID:BAdp3agq C#をクソと言ったことはないぞw 日本語不自由さには事欠かないねw
マルチスレッド同期機構と非同期処理を言語で比較する話で、やれデッドロックがどうのと言っており、かつC#が良いという結論を出していたので、>>876で.NET Frameworkのモデルの悪さを指摘し、goでいいのでは?と言っただけだろうにw
話を続けた結果、彼は案の定デッドロックの話を把握しておらず、Task機構についても誤解しており、await後のスレッドについても知見がなかったので、彼の知見は一般のC#erに劣るという結論を出しただけw
マルチスレッド同期機構と非同期処理を言語で比較する話で、やれデッドロックがどうのと言っており、かつC#が良いという結論を出していたので、>>876で.NET Frameworkのモデルの悪さを指摘し、goでいいのでは?と言っただけだろうにw
話を続けた結果、彼は案の定デッドロックの話を把握しておらず、Task機構についても誤解しており、await後のスレッドについても知見がなかったので、彼の知見は一般のC#erに劣るという結論を出しただけw
967デフォルトの名無しさん
2022/03/21(月) 14:48:44.25ID:bf5EvDSb いい加減に辞めたら?
それを持ってライブラリのモデルが悪いと言うのは変じゃないか
あなたの主張が誰一人説得できないのはあなたの問題であってスレの住人の問題じゃない
それを持ってライブラリのモデルが悪いと言うのは変じゃないか
あなたの主張が誰一人説得できないのはあなたの問題であってスレの住人の問題じゃない
968デフォルトの名無しさん
2022/03/21(月) 14:55:29.99ID:+0SCi87t 次スレでも不毛な話が続く予感
と言うか最初からこのスレは不毛地帯だった
と言うか最初からこのスレは不毛地帯だった
969デフォルトの名無しさん
2022/03/21(月) 18:06:00.78ID:BAdp3agq こんなに分かりやすいモデルの悪さを納得できないとか、お前がプログラマ向いてないだけwwww
970デフォルトの名無しさん
2022/03/21(月) 21:10:25.40ID:lQjpcq8E この人色々なスレでスレごとに違うもの叩いてるから
おかしな人なんだろ
おかしな人なんだろ
971デフォルトの名無しさん
2022/03/21(月) 21:29:05.60ID:BAdp3agq ついに俺のファンまで出現w
972デフォルトの名無しさん
2022/03/21(月) 22:18:23.01ID:IPXTt6Bp >>966
まあ君は「ぼくはわるくない!まわりがわるいんだ!」のタイプで、一生間違いを認めないんだろうけどさ。
C#はasync/awaitの導入で、『正しく使えば』、同期周りをユーザーが全く書く必要がなくなった。
結果、『意図的に間違えるような事をしなければ』、デッドロックはしなくなった。
そして見た目はほぼ同期であり、素晴らしく分かりやすかったので、他も追従した。
(だから他言語でもasync/awaitを『正しく』使ってる限りデッドロックはしないはず)
『正しく使えば』『意図的に間違えるような事をしなければ』なんて一々言わずともまともな人には大前提だし、
そもそもフレームワークは規定通り使わないとまともに動かない。
君がイカレてるから君の周りも同様の人しか居らず、自分達が掘った墓穴に落ちて大騒ぎしてただけだと思うぞ。
(「正しく使おう」とか、君は考えた事ないだろ)
とはいえ、平行線だし、合意を取る必要はないので、まあこれで終わりだね。
まあ君は「ぼくはわるくない!まわりがわるいんだ!」のタイプで、一生間違いを認めないんだろうけどさ。
C#はasync/awaitの導入で、『正しく使えば』、同期周りをユーザーが全く書く必要がなくなった。
結果、『意図的に間違えるような事をしなければ』、デッドロックはしなくなった。
そして見た目はほぼ同期であり、素晴らしく分かりやすかったので、他も追従した。
(だから他言語でもasync/awaitを『正しく』使ってる限りデッドロックはしないはず)
『正しく使えば』『意図的に間違えるような事をしなければ』なんて一々言わずともまともな人には大前提だし、
そもそもフレームワークは規定通り使わないとまともに動かない。
君がイカレてるから君の周りも同様の人しか居らず、自分達が掘った墓穴に落ちて大騒ぎしてただけだと思うぞ。
(「正しく使おう」とか、君は考えた事ないだろ)
とはいえ、平行線だし、合意を取る必要はないので、まあこれで終わりだね。
973デフォルトの名無しさん
2022/03/21(月) 22:18:46.22ID:IPXTt6Bp ちなRustの所有権とか見直してみたが、
以前読んだ時よりは大分文面が修正されてるのか、マシな印象だが、
いずれにしてもゴミなのは事実だね。RustはC++の出来損ないになってる。
一番の問題は、所有権でライフタイム管理を「入れ子」ではなく「投げ捨て」型にした事であり、
これで余分に手間が増えてしまってる。
「入れ子」の方が自然なので殆どの言語で採用されており、
問題は「入れ子」にならない場合にどうするかだが、
C:全部プログラマが管理しろ
C++:スマポ入荷しました
Rust:スマポと所有権(投げ捨て型)
なら、全く進歩してない。
必要なのはスマポに変わる何かであり、Rustは何ら役に立つ新規提案がない。
基本的にC++の構成をなぞっただけであり、おかしな補助輪を付けてしまってるので、
C++で苦労してない人にとってはC++の方がマシだろう。
それで改善点がメモリリークしなくなった程度では、流行りようがないよ。
(そもそもC++も『正しく使えば』メモリリークはしない。
君の視点だと文法的に問題がない=コンパイルが通る=正しく使う、なのだろうし、
実際こう出来ればいいのも確かだが、現状のプログラミング言語の大半はこうなってない。
これは一概に悪いというわけでもなく、プログラミングスタイルに自由度を与える為には必要でもある。
文法エラー=新しいスタイルを試しようがない=進歩しない言語、という事になるので)
以前読んだ時よりは大分文面が修正されてるのか、マシな印象だが、
いずれにしてもゴミなのは事実だね。RustはC++の出来損ないになってる。
一番の問題は、所有権でライフタイム管理を「入れ子」ではなく「投げ捨て」型にした事であり、
これで余分に手間が増えてしまってる。
「入れ子」の方が自然なので殆どの言語で採用されており、
問題は「入れ子」にならない場合にどうするかだが、
C:全部プログラマが管理しろ
C++:スマポ入荷しました
Rust:スマポと所有権(投げ捨て型)
なら、全く進歩してない。
必要なのはスマポに変わる何かであり、Rustは何ら役に立つ新規提案がない。
基本的にC++の構成をなぞっただけであり、おかしな補助輪を付けてしまってるので、
C++で苦労してない人にとってはC++の方がマシだろう。
それで改善点がメモリリークしなくなった程度では、流行りようがないよ。
(そもそもC++も『正しく使えば』メモリリークはしない。
君の視点だと文法的に問題がない=コンパイルが通る=正しく使う、なのだろうし、
実際こう出来ればいいのも確かだが、現状のプログラミング言語の大半はこうなってない。
これは一概に悪いというわけでもなく、プログラミングスタイルに自由度を与える為には必要でもある。
文法エラー=新しいスタイルを試しようがない=進歩しない言語、という事になるので)
974デフォルトの名無しさん
2022/03/21(月) 22:34:35.67ID:uhwdA/oK 記述や理解が楽になる言語、ってわけじゃなくて、そもそも安全で高性能な言語であることが前提の言語だし、別にRustはメモリリークは解決してない
手間が少なく、安全である必要もないなら、Rustを使う必要性は薄れる
手間が少なく、安全である必要もないなら、Rustを使う必要性は薄れる
975デフォルトの名無しさん
2022/03/21(月) 22:37:08.58ID:uhwdA/oK >手間が少なく、
手間を少なくしたくて、
の書き間違い
手間を少なくしたくて、
の書き間違い
976デフォルトの名無しさん
2022/03/21(月) 22:55:29.48ID:yRnc3iuh977デフォルトの名無しさん
2022/03/21(月) 23:25:18.39ID:IPXTt6Bp >>974,976
「GC無しで!!!」と謳ってたから「メモリリーク無し」は当然だと思ってたのだが違うのか?
(なお見てるのは主に公式勝手訳日本語版。そこすら全部読んでもないので)
> 手間を少なくしたくて、安全である必要もないなら
手間は少なくなってない気もするが。
安全って型安全の事?なら俺は型無しでもまあいいや程度なので、
確かに俺には意味がない言語なんだろう。
(型があっても困らないが、
C++みたいに関数ポインタを常用しようとするとテンプレートを書きまくらなくてはいけなくなるのは困る。
この点、関数型やスクリプト言語がどれもこれも型無しなのは非常に納得)
見た目Rustは、C++をある特定の使い方(と言っても多分本流本筋だが)に特化しただけのように見える。
だからそのプログラミングスタイルだった人には素晴らしく嵌るのだろうけど。
「GC無しで!!!」と謳ってたから「メモリリーク無し」は当然だと思ってたのだが違うのか?
(なお見てるのは主に公式勝手訳日本語版。そこすら全部読んでもないので)
> 手間を少なくしたくて、安全である必要もないなら
手間は少なくなってない気もするが。
安全って型安全の事?なら俺は型無しでもまあいいや程度なので、
確かに俺には意味がない言語なんだろう。
(型があっても困らないが、
C++みたいに関数ポインタを常用しようとするとテンプレートを書きまくらなくてはいけなくなるのは困る。
この点、関数型やスクリプト言語がどれもこれも型無しなのは非常に納得)
見た目Rustは、C++をある特定の使い方(と言っても多分本流本筋だが)に特化しただけのように見える。
だからそのプログラミングスタイルだった人には素晴らしく嵌るのだろうけど。
978デフォルトの名無しさん
2022/03/21(月) 23:37:51.67ID:5Szv6JZQ >>973
あまりにもデタラメすぎてむしろ苦笑
理解できなかったこと自体は仕方がないが
それにも関わらず他の言語をデタラメに叩くのはまともな人がすることではない
あまりにも間違いが多すぎて指摘しきれないが
例えば所有権はC++のスマートポインタ(unique_ptr/shared_ptr)で導入された概念
それなのになぜかC++にはスマポと書きながら所有権がなくRustのみに所有権と書いている
まずこの時点でC++の所有権とスマートポインタからして理解が出来ていない
さらにその後のRustに関することは妄想だらけになってしまっている
あまりにもデタラメすぎてむしろ苦笑
理解できなかったこと自体は仕方がないが
それにも関わらず他の言語をデタラメに叩くのはまともな人がすることではない
あまりにも間違いが多すぎて指摘しきれないが
例えば所有権はC++のスマートポインタ(unique_ptr/shared_ptr)で導入された概念
それなのになぜかC++にはスマポと書きながら所有権がなくRustのみに所有権と書いている
まずこの時点でC++の所有権とスマートポインタからして理解が出来ていない
さらにその後のRustに関することは妄想だらけになってしまっている
979デフォルトの名無しさん
2022/03/21(月) 23:38:20.57ID:VmldphcS980デフォルトの名無しさん
2022/03/21(月) 23:51:09.41ID:Juhg7nIl981デフォルトの名無しさん
2022/03/21(月) 23:54:59.16ID:IPXTt6Bp >>978
書き方が悪かったかもしれんが、
ブロックスコープで済み、それが最適な場所にすら所有権を強制して、
結果的に無駄に借用とかする羽目になってるのは事実だろ。
問題は、プログラミングでは大半の場合で「入れ子」が最適な事。
「投げ捨て」が向いてるのは、上から下に流れて終わり、のようなプログラムで、
サーバーは確かにそうだが。
書き方が悪かったかもしれんが、
ブロックスコープで済み、それが最適な場所にすら所有権を強制して、
結果的に無駄に借用とかする羽目になってるのは事実だろ。
問題は、プログラミングでは大半の場合で「入れ子」が最適な事。
「投げ捨て」が向いてるのは、上から下に流れて終わり、のようなプログラムで、
サーバーは確かにそうだが。
982デフォルトの名無しさん
2022/03/21(月) 23:58:58.49ID:uhwdA/oK あの子みたいにまともに議論する気がないのはお話にもならないけど、
知識が足りないのはまあしょうがないやろ
全部わかってるひとなんてこんなスレには1人もいないだろうし
>>977
伝わらなかったみたいだけど、そうそう、Rustは手間を少なくする言語でもないよ
データ競合なくして型も省略しまくりたい、みたいなのだったらHaskellみたいに型推論がやたら強い言語とかもあるし
知識が足りないのはまあしょうがないやろ
全部わかってるひとなんてこんなスレには1人もいないだろうし
>>977
伝わらなかったみたいだけど、そうそう、Rustは手間を少なくする言語でもないよ
データ競合なくして型も省略しまくりたい、みたいなのだったらHaskellみたいに型推論がやたら強い言語とかもあるし
983デフォルトの名無しさん
2022/03/21(月) 23:59:10.41ID:cgJvFkX3 >>981
入れ子って何?
入れ子って何?
984デフォルトの名無しさん
2022/03/22(火) 00:10:38.80ID:5pgpy3FW >>981
他の言語を批判したいなら、せめてもう少しは勉強したほうがいいよ
その意味不明な文章は理解不足が引き起こしている
もしどうしてもRustについて理解できないのならば、先にC++のunique_ptrを学んで所有権とは何かを理解すべき
あと他の人たちも指摘しているが「入れ子」や「投げ捨て」が意味不明
他の言語を批判したいなら、せめてもう少しは勉強したほうがいいよ
その意味不明な文章は理解不足が引き起こしている
もしどうしてもRustについて理解できないのならば、先にC++のunique_ptrを学んで所有権とは何かを理解すべき
あと他の人たちも指摘しているが「入れ子」や「投げ捨て」が意味不明
985デフォルトの名無しさん
2022/03/22(火) 00:14:23.89ID:JFwrpdmf >>982
なら何を目指してんのよ?
他に謳ってたのは「ゼロコスト抽象化」だが。
公式勝手訳日本語版まえがき、には
> 既に低レベルコードに取り組んでいるプログラマは、Rustを使用してさらなる高みを目指せます。
> 例えば、 Rustで並列性を導入することは、比較的低リスクです: コンパイラが伝統的なミスを捕捉してくれるのです。
一文目は素晴らしい。
が、二文目は、無いよりまし程度だし、そもそも無駄に手間が増えてる部分もあるから意味なくね?
なら何を目指してんのよ?
他に謳ってたのは「ゼロコスト抽象化」だが。
公式勝手訳日本語版まえがき、には
> 既に低レベルコードに取り組んでいるプログラマは、Rustを使用してさらなる高みを目指せます。
> 例えば、 Rustで並列性を導入することは、比較的低リスクです: コンパイラが伝統的なミスを捕捉してくれるのです。
一文目は素晴らしい。
が、二文目は、無いよりまし程度だし、そもそも無駄に手間が増えてる部分もあるから意味なくね?
986デフォルトの名無しさん
2022/03/22(火) 00:14:49.50ID:5pgpy3FW >>982
Rustを使うことで様々な手間が省けるのは事実
もちろん元の言語が何であるかによって、どんな手間が省けるようになるのか変わる
だから手間が省ける議論に関しては、比較対象を毎回固定しないと一般的な議論は無意味
Rustを使うことで様々な手間が省けるのは事実
もちろん元の言語が何であるかによって、どんな手間が省けるようになるのか変わる
だから手間が省ける議論に関しては、比較対象を毎回固定しないと一般的な議論は無意味
987デフォルトの名無しさん
2022/03/22(火) 00:23:48.60ID:RldJWe6f988デフォルトの名無しさん
2022/03/22(火) 00:31:00.32ID:1lLSjjDL 知識不足指摘されて意味のわからん逆ギレ起こすのは
同程度だったな
同程度だったな
989デフォルトの名無しさん
2022/03/22(火) 00:37:24.63ID:TacRn98V Rustの利点はプログラミングがしやすいことに尽きるかな
とにかく書きやすくて全体の効率がいい
自分にとっては安全とか保証とかはオマケで付いてくる位置付け
とにかく書きやすくて全体の効率がいい
自分にとっては安全とか保証とかはオマケで付いてくる位置付け
990デフォルトの名無しさん
2022/03/22(火) 01:10:05.14ID:JFwrpdmf >>987
それについてはさんざん言ってきたが、同様に前書きには
> 伝統的にこの分野は難解で、年月をかけて
> やっかいな落とし穴を回避する術を --- (A)
> 習得した選ばれし者にだけ可能と見なされています。
> そのように鍛錬を積んだ者でさえ注意が必要で、 --- (B)
これも事実だが、逆に(A)が存在するのも事実なんだよ。
ただ、(B)も事実だから、やってくれる事に越した事はないが、
それでも「全部完璧にやってくれる」のでなければ丸投げは出来ない。
具体的に言えば、GCならメモリ管理一切しなくて済むけど、そういうわけでもないし、
並列時のロックや競合も完璧にはやってくれない(だろう)から、手間自体は大して減らないよ。
例えば(A)だけどさ、
> データ競合が起きないことをRustは保証する
実際Rustがどこまで検出出来るのか知らんが、データ競合を回避したいのなら、
そもそもディスパッチ前に全部解決してしまう
(共有部分に書き込み出来るのはメインスレッドだけにする、
ディスパッチ以降は不変、無理ならディープコピーを渡す)のがセオリーで、
この形式でメインスレッドからサブスレッドをこき使うのがC#のasync/awaitの形であり、
こう「正しく使えば」全く問題ないわけ。(上位構造で問題を解決する)
このセオリーを知らない=『術を習得もしてないし選ばれてもない者』にはRustは役に立つかもしれんけど、それは、
> Rustを使用してさらなる高みを目指せます。
なら、嘘だね、という話だよ。術を修得してれば同じ事は既に出来てる。
だから何度も言ってるように、
Rustが得意(らしい)、細かく共有しないと無理か、爆速になるアプリは何?
(セオリー通りに構成した時に性能が出ないアプリは何?)
と聞いてきてたわけ。
馬鹿向けの杖ならいらねえ、な奴はいくらでもいるでしょ。
(俺が賢いというのではなく、ノウハウは既に溜まってるという意味で)
それについてはさんざん言ってきたが、同様に前書きには
> 伝統的にこの分野は難解で、年月をかけて
> やっかいな落とし穴を回避する術を --- (A)
> 習得した選ばれし者にだけ可能と見なされています。
> そのように鍛錬を積んだ者でさえ注意が必要で、 --- (B)
これも事実だが、逆に(A)が存在するのも事実なんだよ。
ただ、(B)も事実だから、やってくれる事に越した事はないが、
それでも「全部完璧にやってくれる」のでなければ丸投げは出来ない。
具体的に言えば、GCならメモリ管理一切しなくて済むけど、そういうわけでもないし、
並列時のロックや競合も完璧にはやってくれない(だろう)から、手間自体は大して減らないよ。
例えば(A)だけどさ、
> データ競合が起きないことをRustは保証する
実際Rustがどこまで検出出来るのか知らんが、データ競合を回避したいのなら、
そもそもディスパッチ前に全部解決してしまう
(共有部分に書き込み出来るのはメインスレッドだけにする、
ディスパッチ以降は不変、無理ならディープコピーを渡す)のがセオリーで、
この形式でメインスレッドからサブスレッドをこき使うのがC#のasync/awaitの形であり、
こう「正しく使えば」全く問題ないわけ。(上位構造で問題を解決する)
このセオリーを知らない=『術を習得もしてないし選ばれてもない者』にはRustは役に立つかもしれんけど、それは、
> Rustを使用してさらなる高みを目指せます。
なら、嘘だね、という話だよ。術を修得してれば同じ事は既に出来てる。
だから何度も言ってるように、
Rustが得意(らしい)、細かく共有しないと無理か、爆速になるアプリは何?
(セオリー通りに構成した時に性能が出ないアプリは何?)
と聞いてきてたわけ。
馬鹿向けの杖ならいらねえ、な奴はいくらでもいるでしょ。
(俺が賢いというのではなく、ノウハウは既に溜まってるという意味で)
991デフォルトの名無しさん
2022/03/22(火) 01:12:15.32ID:pDa7kf85992デフォルトの名無しさん
2022/03/22(火) 01:29:51.72ID:vkqcnRJV993デフォルトの名無しさん
2022/03/22(火) 01:38:14.59ID:JFwrpdmf >>991
> 結果としてベアメタル環境でも利用可能です
ちなみに、以下の
> Rustの非同期プログラミングで出来るようになること
> 組み込み
> https://tech-blog.optim.co.jp/entry/2019/11/08/163000
この「組み込み」は面白いと思ったよ。(妄想らしいが)
見た目ポーリングにしか見えない点が問題だが。(慣れかもしれんが)
> 結果としてベアメタル環境でも利用可能です
ちなみに、以下の
> Rustの非同期プログラミングで出来るようになること
> 組み込み
> https://tech-blog.optim.co.jp/entry/2019/11/08/163000
この「組み込み」は面白いと思ったよ。(妄想らしいが)
見た目ポーリングにしか見えない点が問題だが。(慣れかもしれんが)
994デフォルトの名無しさん
2022/03/22(火) 02:21:54.43ID:q+lZbjeY データ競合なんて言葉を使うから議論がかみ合わないのであって
例えばgolangでforループで逐次処理してた部分をgoroutine使って並列動作するよう修正したときに
うっかりループカウンタをgoroutine内でそのまま使ってしまって意図通り動かなくなったりすることがある
普通はテストなりで検出できるけど、条件が込み入ってくると検出するのが難しいバグの原因になるかもしれない
rustの場合こういったうっかりをコンパイル時にできるだけ検出できるように言語仕様が考えられている
rustを使えばあらゆるミスを検出できるわけではないけど、うっかりの入り込む余地を減らせるだけでも嬉しい人はいるだろう
逆にそんなうっかりはしないから好きに書かせてくれよという人もいるかもしれない
それぞれの考えに合った言語を選べば良い、と言ってしまうこのスレのテーマの否定になってしまうか
例えばgolangでforループで逐次処理してた部分をgoroutine使って並列動作するよう修正したときに
うっかりループカウンタをgoroutine内でそのまま使ってしまって意図通り動かなくなったりすることがある
普通はテストなりで検出できるけど、条件が込み入ってくると検出するのが難しいバグの原因になるかもしれない
rustの場合こういったうっかりをコンパイル時にできるだけ検出できるように言語仕様が考えられている
rustを使えばあらゆるミスを検出できるわけではないけど、うっかりの入り込む余地を減らせるだけでも嬉しい人はいるだろう
逆にそんなうっかりはしないから好きに書かせてくれよという人もいるかもしれない
それぞれの考えに合った言語を選べば良い、と言ってしまうこのスレのテーマの否定になってしまうか
995デフォルトの名無しさん
2022/03/22(火) 02:41:35.79ID:w7t1sqYz996デフォルトの名無しさん
2022/03/22(火) 02:59:56.03ID:ZDHdo9X7997デフォルトの名無しさん
2022/03/22(火) 03:07:47.73ID:ZDHdo9X7 Rustのメモリ安全については、いかなる条件でも「保証する」と言われない限りは突っ込んだ人の負けだぞw
循環参照については、
https://doc.rust-lang.org/book/ch15-06-reference-cycles.html
を読んでそれに従って苦情を言えw そうでないと反論にならないw
循環参照については、
https://doc.rust-lang.org/book/ch15-06-reference-cycles.html
を読んでそれに従って苦情を言えw そうでないと反論にならないw
998デフォルトの名無しさん
2022/03/22(火) 03:24:04.52ID:ZDHdo9X7999デフォルトの名無しさん
2022/03/22(火) 03:25:57.77ID:iVTUF9ds 質問いいですか?
1000デフォルトの名無しさん
2022/03/22(火) 04:14:24.11ID:SFGcZaAi だめです
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 113日 11時間 15分 5秒
新しいスレッドを立ててください。
life time: 113日 11時間 15分 5秒
10021002
Over 1000Thread 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 中国軍機レーダー照射、トランプ氏沈黙突く 試される日本外交 ★3 [蚤の市★]
- 元プロ野球選手・堂上隼人(43)を20代女性2人へのわいせつ未遂容疑で8回目の逮捕…これまでの被害者は10代・20代の女性11人に [Anonymous★]
- 中国軍機レーダー照射、トランプ氏沈黙突く 試される日本外交 ★4 [蚤の市★]
- 【高校野球】なぜ『7回制』は反対多数でも止まらないか… 高野連が「全員の命」守るために貫く伝統より改革の姿勢 [冬月記者★]
- JAが"政府の備蓄米買い上げ"見越して価格下げず!?「古いコメは食用向きでないなどと理由をつけ...」専門家解説 [煮卵★]
- 【テレビ】石破前首相 中国レーダー照射「フェーズ上がってる」と指摘も「日本の世論が激高するのは避ける必要が…」 [少考さん★]
- 【高市悲報】自衛隊「実は事前に現場海域で中国軍から空母での発着訓練をすると通告がありました」え…?😨 [931948549]
- 【悲報】山里亮太(南海キャンディーズ)さん [329329848]
- 統一教会っていらない田んぼ畑ビルディング(アスベスト)も引き取ってくれるの? [358382861]
- 【高市悲報】日本が🇨🇳輸出規制したフォトレジスト、早速韓国企業が中国に売り込みかけて日本の対抗手段もうなくなるwww [709039863]
- 中国父「日本の一般大衆は高市を支持しておらず、反対している人も多い。悪いのは日本国民ではなく高市!」 すまんこれほんと? [271912485]
- 高市「中国さんお願い電話で話そ、このままじゃ武力衝突になっちゃう😭」日中間の専用電話に日本側からかけるも無視される [931948549]
