X



次世代言語22 Go Nim Rust Swift Kotlin TypeScript
レス数が950を超えています。1000を超えると書き込みができなくなります。
0851デフォルトの名無しさん
垢版 |
2021/11/18(木) 08:11:30.53ID:Q5lW897P
>>836
ゴールポストは>>684から変えてないし、まともな異論も出てない。「手動メモリ管理」とかも>684を否定しているわけではないだろ。それとも>684はデタラメと主張するのかね?
嘘ばかりの歴史改竄主義者だな。

世間一般の認識は>>842みたいだから、>836の心の中のGCについては勝手にすれば? 歴史改竄しないかぎりだけど。
0853デフォルトの名無しさん
垢版 |
2021/11/18(木) 09:07:54.56ID:Ip1KYC/r
お前らが大好きなWikipediaの文言だぞ

https://en.wikipedia.org/wiki/Garbage_collection_(computer_science)

Reference counting
Main article: Reference counting

Reference counting garbage collection is where each object has a count of the number of references to it. Garbage is identified by having a reference count of zero. An object's reference count is incremented when a reference to it is created, and decremented when a reference is destroyed. When the count reaches zero, the object's memory is reclaimed.

As with manual memory management, and unlike tracing garbage collection, reference counting guarantees that objects are destroyed as soon as their last reference is destroyed, and usually only accesses memory which is either in CPU caches, in objects to be freed, or directly pointed to by those, and thus tends to not have significant negative side effects on CPU cache and virtual memory operation.

There are a number of disadvantages to reference counting; this can generally be solved or mitigated by more sophisticated algorithms

https://ja.wikipedia.org/wiki/%E3%82%AC%E3%83%99%E3%83%BC%E3%82%B8%E3%82%B3%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3

スマートポインタ

なお、C言語で参照カウント方式のガベージコレクションを利用する場合、通常煩雑なコーディングを必要とするが、C++では以下のようなRAIIを活用したスマートポインタを利用することで緩和できる。

・Boost C++ライブラリのboost::shared_ptrおよびboost::shared_array。
・参照カウントの増減処理をカスタマイズできるboost::intrusive_ptrもある。
・C++11以降のstd::shared_ptr
・Active Template LibraryのATL::CComPtr - COMオブジェクトのスマートポインタ。
・Windows Runtime LibraryのMicrosoft::WRL::ComPtr - Windowsランタイムオブジェクトのスマートポインタ。COMオブジェクトにも使用可能。
0854デフォルトの名無しさん
垢版 |
2021/11/18(木) 11:21:14.46ID:/He/baLS
>>823
否定はしないが賛成もしない
new を出来るだけ避ける様に心がければ delete の心配が無くなるのは当たり前
0856デフォルトの名無しさん
垢版 |
2021/11/18(木) 13:20:13.82ID:5Kqa+JGe
>>823
newを使わない要らないとはヒープを一切使わないという意味ですか?
それともC言語のように自分でmalloc等を用いてヒープメモリ管理を行うべきという意味ですか?
前者はそれら挙げている物のプログラミングが不可能だから後者の何十年も前に戻っただけですか?
0857デフォルトの名無しさん
垢版 |
2021/11/18(木) 13:51:24.01ID:+0r8+Axf
>>856
C++の標準ライブラリにあるstd::string、コンテナクラス、unique_ptr、shared_ptrなどを使っていればnewを書かずにヒープメモリを使うことができるし、shared_ptr以外はスコープを抜けたときに自動的にデストラクタを呼んでヒープを解放してくれる。
ちゃんとC++を使えばほとんどの場合手動でメモリ解放せずに済むよ。
0862デフォルトの名無しさん
垢版 |
2021/11/18(木) 15:13:07.47ID:5Kqa+JGe
>>857
しかし元の方は>>821でdeleteを使わないだけでなくshared_ptrも使わないとおっしゃっているのです
つまり解放をどうするのか問題が残ります
あとコンテナ自体の解放に加えて要素が値だけで構成されずポインタを含む場合はその先の解放も必要ですよね
0863デフォルトの名無しさん
垢版 |
2021/11/18(木) 16:00:24.60ID:5Kqa+JGe
>>858
ある程度の構造を持ったデータを扱う場合
RAIIではそのクラスのデストラクタでdeleteが発生しますよね?
>>823はdeleteも要らないと書いていますがそこはどうするのでしょう?
0865デフォルトの名無しさん
垢版 |
2021/11/18(木) 16:36:40.14ID:f69aBKlz
golangなんかだとbenchでB/opやallocs/opが取れるけど、他の言語はあまりメモリー量は重要視してないのかな?
最終的にはエネルギー毎のjoule/opとか出してほしいけど、IntelとAMDそしてARMで全然違うのはCOP21とかは
何も考えてない偽善だろう
0867デフォルトの名無しさん
垢版 |
2021/11/18(木) 18:07:16.31ID:dthIgn7Y
流れを踏まえると
C#はせっかくGCがあるのに
自分でいちいち手動のDisposeを描かされる

残念な言語(キリっ

と言わざるを得ない
0868デフォルトの名無しさん
垢版 |
2021/11/18(木) 18:10:14.42ID:z3VijVy2
GoやJavaなんかだとGCがあるからやばい、って思えるほどシビアなプロジェクトの開発をしてみたいもんだ
0869デフォルトの名無しさん
垢版 |
2021/11/18(木) 18:13:29.70ID:P63H+fUW
>>863-864
デストラクタ内のdeleteは勘定に入れなくて良いルールなんだろう
0870デフォルトの名無しさん
垢版 |
2021/11/18(木) 18:20:18.80ID:MFoti6qx
>>867
というより可能な限りGCを動かさないように
値型を多用してコレクションも
System.Collectionsじゃなくて
System.Collections.Genericのほうを使うとかして
ヒープ側を使わないようにする悲しい頑張りが必要
0871デフォルトの名無しさん
垢版 |
2021/11/18(木) 18:21:21.59ID:Hn1JS7XJ
まあ、ネイティブコンパイラが必須なケースが少ないからこそ
JavaScriptインタプリタのようなものをC++やRustで書いて使ってるんだよな
0872デフォルトの名無しさん
垢版 |
2021/11/18(木) 18:27:54.82ID:+6yu0rNA
>>870
C#ならガベージの生成を避けるようなケースでもC++なら気にせずヒープ使いまくれるってことか?
そうでないならそれはGCの問題ではないことになるぞ
0873デフォルトの名無しさん
垢版 |
2021/11/18(木) 18:28:22.88ID:7LzjmfPa
まだgcの定義の話してんのかよ
文脈依存用語を絶対的な意味で決めつけようとする意味あんの?
0874デフォルトの名無しさん
垢版 |
2021/11/18(木) 18:37:38.93ID:EV0O2NnK
Railsの高速化に貢献する新たなJITコンパイラを搭載したRuby 3.1プレビュー1が公開
0877デフォルトの名無しさん
垢版 |
2021/11/18(木) 19:27:50.79ID:z3VijVy2
「汎用言語」と呼ばれるにはミドルウェアを書くのにも適してる言語じゃないといけないの?
0879デフォルトの名無しさん
垢版 |
2021/11/18(木) 19:51:50.15ID:rsuv1+NH
このスレといいフレームワーク系のスレといい、お気に入り以外を攻撃してワンワン噛みつく奴ばっかや…
ニュースリリースぐらい大目に見たれよ?Wikipediaを何行も張り付けるウンコの10倍は有用だぜ?
0880デフォルトの名無しさん
垢版 |
2021/11/18(木) 20:17:22.46ID:5Kqa+JGe
>>864
なるほど
クラス宣言側でdeleteを使っていても関数側でdeleteを明記しなければdeleteを使っていないことになるのですね

>>821
> deleteも使わない。

>>823
> deleteすら要らない。

ここまではっきりと書かれているので当然クラス宣言の中でもdeleteを使わない意味だと受け取っていました

ところでクラス宣言のデストラクタでdeleteを使う形はスマートポインタと完全に同じ形になっていますが
この自動的にメモリを解放する手法はGCに該当するのでしょうか?
0881デフォルトの名無しさん
垢版 |
2021/11/18(木) 20:28:31.75ID:Hn1JS7XJ
いちいち質問して答えを待ってると判断が遅いんだよね
自分のお気に入りの答えを自分で判断する方が圧倒的に早い
0882デフォルトの名無しさん
垢版 |
2021/11/18(木) 21:25:37.77ID:PdOXvPCx
C++はJavaと違うって事では。
0884デフォルトの名無しさん
垢版 |
2021/11/18(木) 22:44:57.81ID:2INYRpvr
組み込みのmruby は、apache などのmiddleware も書ける。
C の文字列の代わりに、mruby の文字列を使うと簡単・安全

人工衛星、イザナギ・イザナミなどに使っている

mrubyの本も出た。
micro python, Lua の代わりに使う
0887デフォルトの名無しさん
垢版 |
2021/11/19(金) 05:13:09.95ID:DX593LKr
mrubyとか名前ダサくね?
信者になればかっこよく見えるの?
名前重要とかどこいった
0889デフォルトの名無しさん
垢版 |
2021/11/19(金) 12:27:45.87ID:fGKSbVlD
そんなこと言ってるとrustに別実装の処理系が出来た時にディスられるぞ
rustだからstainlessとか
0892デフォルトの名無しさん
垢版 |
2021/11/19(金) 13:55:37.85ID:XZPDRrte
GCある言語でもインスタンスの生成や参照切れで解放されることくらいは
知ってる必要があるんだが、それもまともにわかってなさげなやつで溢れてる。
0893デフォルトの名無しさん
垢版 |
2021/11/19(金) 13:56:15.69ID:eyeX0xyM
ださい拡張子
.cs
.ts
.ps
.gs
0894デフォルトの名無しさん
垢版 |
2021/11/19(金) 14:56:18.17ID:nTNvNEE2
>>892
誰一人まったく解放されないなんて言ってる奴いないと思うが、どこの世界線から来た人?
0895デフォルトの名無しさん
垢版 |
2021/11/19(金) 18:18:36.72ID:cPtoFLsh
>>886

class foo
{
  ~foo()=delete; // このdeleteのことを言ってる。
};
0897デフォルトの名無しさん
垢版 |
2021/11/19(金) 19:55:35.05ID:cPtoFLsh
>>896
ID末尾をxにしてるのは、C++とC#の両方を表現してるのかい?
0898デフォルトの名無しさん
垢版 |
2021/11/19(金) 19:57:08.72ID:cPtoFLsh
宣言のdeleteって言うから。
0899デフォルトの名無しさん
垢版 |
2021/11/19(金) 20:09:20.65ID:M2ROgxHD
>>898
流石にnew/deleteとdelete宣言は別物だろうなぁ。
同じ単語を使っているのはc++のケチ臭い用語の流用の結果だし。
0900デフォルトの名無しさん
垢版 |
2021/11/19(金) 20:52:12.15ID:cPtoFLsh
デストラクタのdelete自体も嵐を呼ぶ話題だけど。
0902デフォルトの名無しさん
垢版 |
2021/11/19(金) 21:11:17.06ID:cPtoFLsh
たぶんJavaの人じゃないかと思うんだよね。
0903デフォルトの名無しさん
垢版 |
2021/11/19(金) 22:08:12.78ID:CstSAS10
>>901
本体もGCと呼ぶかは議論が分かれそうだが
付属部分を連動GCすることだけを目的に本体が実体を無くしたものがunique_ptrだよな
0904デフォルトの名無しさん
垢版 |
2021/11/20(土) 00:19:22.26ID:OQv16NeR
自動変数もGCなのか?
0906デフォルトの名無しさん
垢版 |
2021/11/20(土) 08:44:52.28ID:V7jlhcsx
1. 昔も今もどっちも変わらない
2. GCもスマポもどっちも変わらない
3. 1も2も3もどれでも変わらない
0907デフォルトの名無しさん
垢版 |
2021/11/20(土) 11:42:49.09ID:NkWaDqk7
>>904
約一名にとってはそうみたい
0910デフォルトの名無しさん
垢版 |
2021/11/20(土) 16:24:03.02ID:lK9Ghq6L
Rustの悪口言ったやつ許さんから
0913デフォルトの名無しさん
垢版 |
2021/11/20(土) 18:07:02.96ID:OQv16NeR
バグを無くすにはGCじゃなくテストですよ。
0914デフォルトの名無しさん
垢版 |
2021/11/21(日) 10:14:13.30ID:UyY2TlzJ
ソースを読まなくてもできるテストは
不正アクセスと同じではないが似ている
0916デフォルトの名無しさん
垢版 |
2021/11/25(木) 08:38:48.33ID:KcP0JmbS
rustは少なくともCである程度のプログラムを書いてハマった経験がないと
この機能何のためにあるの?ってのがわからない
0917デフォルトの名無しさん
垢版 |
2021/11/25(木) 10:28:07.08ID:dqP+a0eJ
Rustを最近学んでるだけど、すぐに学習曲線やばい言語だということを納得した
おれはC++のスマートポインタらへん知ってるから、かなりマシなほうだと思うけど、
たしかにC/C++やってない人にはそうとうにキツそうだね

やってない人にオススメできる気がしない
0918デフォルトの名無しさん
垢版 |
2021/11/25(木) 10:35:35.35ID:6PNOZvLH
>>917
それは逆
Rustに苦労している人たちはC++経験者かつ頭が固くてC++から離れて頭をゼロにして学習する能力がない人たちだと言われている
0920デフォルトの名無しさん
垢版 |
2021/11/25(木) 10:58:35.45ID:iyas0vJe
まぁC++一筋十数年って人だと大変かもね
C++に加えてScalaとかHaskellあたりを履修済みだとだいぶ楽
0926デフォルトの名無しさん
垢版 |
2021/11/25(木) 15:14:28.01ID:lTzmbhqT
C++はCみたいな書き方も出来るが、rustは最初からrustでないといけないから難しいと思う
0927デフォルトの名無しさん
垢版 |
2021/11/25(木) 15:50:19.56ID:662tr9PH
今はc/c++の知識を階段として学んでいる人多いだろうけど、今後はrustしかわかりませんみたいなrustネイティブも出てくるのかな?
これってアセンブリ→cのときにも言われてた?
cを理解するにはアセンブリがわかってないと無理みたいな
0928デフォルトの名無しさん
垢版 |
2021/11/25(木) 16:03:54.47ID:dqP+a0eJ
よくしらんけど、学習曲線を緩和させるような取り組みもいちおう検討されてるんでしょ?
0930デフォルトの名無しさん
垢版 |
2021/11/25(木) 16:59:45.85ID:lTzmbhqT
CはBASICほど遅くなくアセンブラ(機械語)が必要ない、当時俺にとっては奇跡の言語だった
C/C++/VB→Javaのときは実際にJavaしか分かりません、が大量に発生した
0931デフォルトの名無しさん
垢版 |
2021/11/25(木) 17:35:06.78ID:88pS2ZzI
今後のネイティブ系プログラミングは基礎入門C言語→Rustになるでしょう
C++は今となっては中途半端でありやる価値を失った
0932デフォルトの名無しさん
垢版 |
2021/11/25(木) 17:51:06.67ID:dqP+a0eJ
言語仕様でいえばC++よりRustのほうがいいと思うけど、C++で作られた過去の資産が巨大すぎて、そう簡単に価値がないとはならなそうかなあ
まあ10年後とかにはCOBOLみたいに、悲しい負の遺産扱いされてるかな
0933デフォルトの名無しさん
垢版 |
2021/11/25(木) 18:17:02.30ID:YKvzJ4Sm
まさか5年前にはc++がcobolのような負の遺産という立ち位置になっていくんだろうなっていうのが目に見えるようになるなんて思いもしなかったわ
0934デフォルトの名無しさん
垢版 |
2021/11/25(木) 18:31:54.46ID:htMyv0Y1
c++は新しい部分もあるけど古いダメな書き方もできるからな
新しい部分は古い部分に触れた人には喜べるけどだったらc#やjava使ったらと思う
rustはエグイなと思うので書かない

c++は新しい書き方だけを強制できるような仕組みが必要なんじゃないかな
自由度が高いことこそが最大の利点だ見たいな考えは古い
0935デフォルトの名無しさん
垢版 |
2021/11/25(木) 18:34:36.25ID:htMyv0Y1
>>933
大体15年前はすでにC++は負の遺産だったよ
クールだった時代はかなり短い

新しい言語が形を成してた2000年前半にはもう粗大ごみ扱い
0936デフォルトの名無しさん
垢版 |
2021/11/25(木) 19:23:28.39ID:l4YrYzBR
そのうちc++のオブジェクトファイルとリンクできるけど取り扱いの難しい機能を禁止したSmartC++が出てくるんじゃない?

生ポインタ禁止(スマートポインタ強制)するだけでもいい感じになると思うけどなぁ。
0938デフォルトの名無しさん
垢版 |
2021/11/25(木) 19:34:59.70ID:6PNOZvLH
>>936
今となっては全てが自動的にスマートポインタ扱いとなっているRustを使えばよい話
しかもunique_ptrはコストゼロになっていて効率もいい
0939デフォルトの名無しさん
垢版 |
2021/11/25(木) 20:09:06.46ID:SwFLZgNz
馬鹿なRusterたちがこんなスレでわっしょいわっしょいw
一口にC/C++と言っても、当面はOSのkernelなんかは10年以上はC99だろうし、組み込みもCでしょう。
C++は一時は止まってたがC++20とか、確かに古いダメな書き方が出来るが、分岐予測CPU用のlikelyと
unlikelyなんかRustにも”降りてきた機能”。こういう表現が言えるのはC++が実験的/先進的であるから
Rustのような言語は破綻させないために先進的な(あるいは実験的な)機能は入れにくい。
ところがC++は違う、破綻しようが滅茶苦茶だろうが関係ない。使いたい人がその機能を使う
負の遺産だとも、クールではないとも異議は唱えないが、根本的なところが違う
0940デフォルトの名無しさん
垢版 |
2021/11/25(木) 20:11:54.48ID:mXEi3hQs
あわしろ氏もC++はオワコンと言ってる。
0941デフォルトの名無しさん
垢版 |
2021/11/25(木) 20:26:41.70ID:dqP+a0eJ
せやな
C++という言語自体というより、C++で作られた資産が負の遺産だと思っているよ
0943デフォルトの名無しさん
垢版 |
2021/11/25(木) 20:51:59.29ID:88pS2ZzI
スレタイの諸言語は限定した環境においてはRustに対して優位性があるけど
C++は過去しか優位性がないので仕方ないのでは
0945デフォルトの名無しさん
垢版 |
2021/11/25(木) 21:22:32.76ID:YKvzJ4Sm
誰もCが悪いなんて言ってなくね
C++だったらRustの方が無難と言ってるだけで
0946デフォルトの名無しさん
垢版 |
2021/11/25(木) 21:27:45.38ID:I+op7MmV
Rustになんか優位性ない。スレタイの諸言語に対してもそう、Swiftは参照カウントでボトルネックになる
ところを自前で管理可能だし、Nimは同じ参照カウントに切り替え可能だし、Golangは他にない超高速な
軽量スレッドを有している。 KotlinとTypeScript は知らんけど
0947デフォルトの名無しさん
垢版 |
2021/11/25(木) 21:37:57.24ID:lTzmbhqT
C++は難しいを通り越してユーザーに厳しい?というかピーキー?というかマニアック?な言語だと思う
好きな奴だけ使う言語
0948デフォルトの名無しさん
垢版 |
2021/11/25(木) 21:41:06.37ID:QrEUJ+3X
>>934
>c++は新しい書き方だけを強制できるような仕組みが必要

ほんそれ
0949デフォルトの名無しさん
垢版 |
2021/11/25(木) 21:44:35.39ID:/vPuyV+m
新しい書き方の強制はclang-tidyなどのlintである程度できるのでは
今時マージ前にCIでlint通すくらいはやっているでしょう
0950デフォルトの名無しさん
垢版 |
2021/11/25(木) 21:54:04.18ID:6PNOZvLH
>>946
あまりに無知
参照カウントの話にしてもRustのRcは単なる構造体によるライブラリに過ぎず必要なら自前で同じ物も似た物も違う物も作れて自由自在
そして必要ならガベージコレクションするRustのモジュールも多数存在している
つまりその分野ではRustは最強

> Golangは他にない超高速な軽量スレッドを有している。

これもRustのタスクの方が軽量かつ高速
そしてRustではそのスケジューリングも含めて自由自在に出来る
0951デフォルトの名無しさん
垢版 |
2021/11/25(木) 21:58:25.51ID:lTzmbhqT
C++の新しい書き方だけを強制とか言ってるアホは何なの?w
何が新しくて何が古いのか何を強制したいのかできるのか知らんけど、使いたくなければ使わなければいいだけ
レス数が950を超えています。1000を超えると書き込みができなくなります。

ニューススポーツなんでも実況