次世代言語22 Go Nim Rust Swift Kotlin TypeScript

■ このスレッドは過去ログ倉庫に格納されています
2021/08/22(日) 08:59:03.31ID:QorwbXcj
スレタイ以外の言語もok

前スレ
次世代言語21 Go Nim Rust Swift Kotlin TypeScript
https://mevius.5ch.net/test/read.cgi/tech/1587276362/
2021/11/06(土) 23:18:58.54ID:EdP5MzkQ
全人類Rustを極めてたらいいのに
2021/11/06(土) 23:27:58.99ID:2f1Vgy/C
それな
2021/11/06(土) 23:32:27.72ID:9KDcj+aF
>>484
Rustにしたらメンテナンスもしやすくなったよ
例えば機能追加で今回の件のようなバグが紛れ込むことも無くなった
もしその種のミスをしているとコンパイルが通らないから安心してメンテナンスできる
2021/11/06(土) 23:35:57.66ID:bBqH6KfG
天才が使う言語なんだからならそもそもメンテナンスなんてしなくていいだろ
はい終わり
2021/11/06(土) 23:36:45.09ID:2f1Vgy/C
メンテナンスできる人の数の話をしてるのに、そもそもメンテナンスできる人がメンテナンスしやすくなったからって関係ないよね
2021/11/07(日) 09:04:00.93ID:bwFiQ/UZ
アスペ=天才
2021/11/07(日) 13:38:59.39ID:XJB+ymj6
たまに紙一重のやつがいるのは認めるが
イコールではないな
アスペ⊆天才でもないし
アスペ⊇天才でもない
2021/11/07(日) 13:50:16.34ID:Wnisb2X3
サヴァンみたいな一点豪華な才能は気苦労も伴うからな
2021/11/07(日) 14:10:35.95ID:/d1krDIr
他のスレで暴れてるMbってやつは天才?
2021/11/07(日) 14:21:05.01ID:nhZF9/LT
召喚すんな
2021/11/07(日) 15:13:11.87ID:XJB+ymj6
天才でも凡人でも地方でも
最低限のマナーすら守れない香具師は何やっても成功しない
2021/11/07(日) 15:30:00.12ID:/d1krDIr
マナーなんて無くても天才と馬鹿は行動力があれば成功するだろ
マナーが一番必要なのは凡人だけ
2021/11/07(日) 16:47:03.65ID:NoqiBvXu
488の煽りごときから天才の話を続けようとすんな
498デフォルトの名無しさん
垢版 |
2021/11/07(日) 22:52:33.86ID:NYPA2RTD
>>489
PHPでも使ったら?一番人集まりやすいんでないか?
2021/11/08(月) 00:15:26.32ID:vASCcAjA
メンテナンスなんて少しも考えてないバカがrustすげーって騒いでるだけだろ。
どうせGAFAも認める言語使ってる俺すげーしてクソコード残して立ち去るような仕事のやり方ばっかしてんだろうね。
2021/11/08(月) 00:21:07.56ID:SITQ70se
メンテナンスならばRustがもっともしやすいだろう
コンパイルが通ればメモリ安全性が保証される点で他の言語より抜きん出る
これは大きな利点である
2021/11/08(月) 00:38:47.53ID:rlmkL2+c
それでメモリ安全性の定義ってなんだっけ
意味論を定義したうえで形式的に証明されてるんだっけ
2021/11/08(月) 01:21:00.52ID:vrtVczFq
GoとRustってCのアドレス演算的なことはできるのですか?

int arr[] = {1, 2, 3};
int *p = arr;
p += 1; // ←これです
printf("%d\n", *p); // 2
2021/11/08(月) 02:24:21.55ID:p+/Hds0z
>>502
C/C++のようなポインタ演算は安全性のためにできないようにしてるが
Goならunsafe.Add、Rustならpointer::offsetやpointer::wrapping_offsetで同じようなことはできる
2021/11/08(月) 02:29:59.56ID:J6d/ajGt
マンドクセ
2021/11/08(月) 02:59:59.38ID:6BzlB5w0
>>501
Rustは多くの論文が出ている
https://rustc-dev-guide.rust-lang.org/appendix/bibliography.html#papers-about-rust

>>502
生ポインタと呼ばれていて通常のプログラミングでは使わないが実行可能
Rustコンパイラによるメモリ安全性の保証外などとなることを宣言するunsafe{ ... }の中で使える

以下はRustのコードでコメント部分(=各行の//以降)に対応するCコード
let a = &[1, 10, 100]; // int a[] = {1, 10, 100};
let mut ptr = &a[0] as *const i32; // int *ptr = a;
println!("{:p}: {}", ptr, unsafe{*ptr}); // printf("%lx: %d\n", ptr, *ptr);
 → 0x5645a1293000: 1
ptr = unsafe{ptr.offset(1)}; // ptr += 1;
println!("{:p}: {}", ptr, unsafe{*ptr}); // printf("%lx: %d\n", ptr, *ptr);
 → 0x5645a1293004: 10
2021/11/08(月) 10:23:03.43ID:LdTjNXcL
>>501
絶対的メモリ安全性の定義が難しいなら
javascriptとtypescriptのような相対的な優位性を証明すればいい
2021/11/08(月) 13:03:54.54ID:vrtVczFq
>>503
なるほど
ありがとう
508デフォルトの名無しさん
垢版 |
2021/11/08(月) 14:46:35.97ID:PFM3PqQ9
>>420
(if true:
 echo "You can do this if you want"
 (block:
 echo "but everyone will hate you" # None indentation is OK
 )
 (for n in 0..5:
 echo n # None indentation is OK
 )
)
#for n in 6..10:
#echo n # <-- Error: invalid indentation
https://play.nim-lang.org/#ix=3EmH
2021/11/08(月) 15:56:14.25ID:dWDs4ee0
nimでスレが止まってるとイラっとするまでになってしまったw
前まで比較的好きだったのに・・・
510デフォルトの名無しさん
垢版 |
2021/11/08(月) 16:03:45.86ID:KvpLYeV7
全員目をつむりなさい、この中に前から嫌いなのにA子さんの縦笛を盗んだ人がいます!
正直に手を挙げなさい!先生は怒りませんよ!
2021/11/08(月) 16:29:20.11ID:jye9PFXO
先生(クソッ、なんでバレたんだ…なんとか誤魔化さないと…)
512デフォルトの名無しさん
垢版 |
2021/11/08(月) 17:47:01.28ID:zeI+S7c1
>>500
いまどきメモリー安全じゃない言語なんてC/C++/Delphiぐらいなもんだろw、Java/KotlinもC#もNimも、D言語も
Swiftもunsafe的なコードじゃなきゃメモリー安全。Microsoftも採用基準はメモリー安全以外だと言っているよ
2021/11/08(月) 18:45:37.45ID:SITQ70se
>>512
GC言語でもメモリ安全じゃないケースはある
例えばGo言語は>>474の実例のようにメモリ安全ではないことが示された
そしてGCなしネイティブコンパイル言語となるとメモリ安全な言語はレア
2021/11/08(月) 19:23:50.63ID:dWDs4ee0
言葉の定義でしかないなw メモリ安全なんて言葉は使わない方がいいw
2021/11/08(月) 19:47:27.37ID:SITQ70se
>>514
例えば>>474の現実例のようにメモリに関するバグをコンパイラが見逃して通してしまうプログラミング言語はメモリ安全性が保証されていない
516デフォルトの名無しさん
垢版 |
2021/11/08(月) 19:54:02.50ID:9Ys8k33F
ほんとアホは相手しちゃだめだな。長さ不定のリスト構造に要素の追加を値渡しではなく参照にしてしまうのは
メモリー安全性なんて一切関係ないw、型チェックの厳密性(緩さ)の違いだけGoは確かに緩いけど、Rustが
強い型付けをしているから。更に極端な例を言うなら秘密情報を一文字違う宛先に送った明らかなプログラミング
ミスと何ら変わりない。代わりにRustはキャストが大変になってる

GCなしなんてSwiftでもNimでも実質Rustと同じ参照カウントだし、S.T.Wで停止をしなければ高負荷な環境の
分野以外で問題になることはない。CrystalなんかでもARCの(まだ無いが)実装が検討されている。
この強烈な匂い立つような他の言語を貶める人たちへ、距離を置きたくなる。
言語のせいじゃないから困るわ・・・もっとアピールすべき点は他にあるでしょ
2021/11/08(月) 19:58:54.68ID:6BzlB5w0
>>516
そこは型チェックの厳密さは関係ない
ライフタイムの問題である
利用先よりも寿命が早くやってくる物の参照を渡したから問題なだけである
つまり型チェックの厳密さは関係ない
518デフォルトの名無しさん
垢版 |
2021/11/08(月) 20:10:59.23ID:CQj4IFht
>>517
違います。 利用先へ渡された参照渡しされたデータは寿命はやってきません。値渡しもしくは値コピーであれば
コピー元のデータは普通に寿命を迎えます。そんな事も分かってないのに強烈な初心者のような言い訳は意味が
ありません。他にも参照渡しされたデータたちの構造がリング状になることを循環参照と言いますが、(この
ような欠陥を作るのは大変ですが)Rustはこれを参照カウントで回収しません、これはARCだけを採用している
他の言語でも同じです。
2021/11/08(月) 20:54:01.15ID:6BzlB5w0
>>518
基本的なことを理解していないようなので補足説明しますよ

まず関数内のローカル変数をスタック上に置く言語と全てヒープ上に置く言語の2種類に分かれます
このうち必ずヒープ上に置く言語でガベージコレクションを行なう言語は今回の問題が起きないので
ここでの説明では関数内のローカル変数をスタック上に置く言語を対象とします

スタック上に置かれたローカル変数の参照(ポインタ)を用いて関数内で様々な処理をしてももちろん大丈夫です
さらに別の関数を呼び出して先ほどのローカル変数の参照(ポインタ)を渡して別の関数で処理するのも問題ありませんし孫関数でも曾孫でも大丈夫です
そしてそれらの関数引き渡しの時に他の構造体変数に格納されて引き渡されることもあるでしようがそれでも大丈夫です
つまり他の複合的なデータ(配列や構造体など)に参照(ポインタ)が組み込まれて受け渡されることもありますが子孫の呼び出し関数にいるときは大丈夫です

問題が発生するのはその関数内ローカル変数を含む関数を終えたときです
ローカル変数の参照(ポインタ)が単体もしくは他の複合的なデータに格納されたまま呼び出し上位の関数に戻ってしまった時に問題が発生します
もちろん御存知のようにスタック上にローカル変数を確保した言語の話ですから関数を終えたときにスタックは開放されて参照(ポインタ)は無効となっています

この問題はCGの有無とは関係なくスタック上にも変数を確保する言語の場合は生じ得ます
さらにヒープ上に確保した場合でも非CG言語では生じ得ます
そして強力な型チェックを行なっていてもそれだけでは回避できない点にこの問題の難しさがあります
唯一の解決方法は言語が各変数(領域)のライフタイムを管理して更にその参照が渡って行く先々のライフタイムがそれより短いことを言語が保証することによります
520デフォルトの名無しさん
垢版 |
2021/11/08(月) 21:03:57.19ID:r0oqOAIx
RAIIですべて解決。
そもそも循環参照とか考えなければならなくなったら、自分の頭が狂っていないか病院で検査したほうが良い。
必要になってる時点で何かがおかしい。
2021/11/08(月) 21:08:03.70ID:q/kOwwo+
クソみたいな長文書く前に
https://github.com/golang/go/wiki/CommonMistakes#using-reference-to-loop-iterator-variable
をちゃんと読んでこいよ
これをメモリ安全の問題だと思うのはアホだけだろ
2021/11/08(月) 21:09:44.36ID:j/frnJ3w
>>520
助言ありがとう。早速病院に行ってきた

医者「それで……本日はどのような件で?」

俺「循環参照を考えなければいけなくなったので、検査してもらってもいいですか?」

医者「?????どういうことだね?」

俺「だから……!!!循環参照を考えないといけないんです!!!検査してください!!!」

医者「だめだこりゃw」

とりあえず精神薬は貰えるっぽい。ありがとうな
523デフォルトの名無しさん
垢版 |
2021/11/08(月) 21:15:19.22ID:WC/FOJEL
>>519
基本的なことを理解していないのはあなたです、それはメモリー安全性ではありません。メモリー安全性は
バッファオーバーフローなど配列の添え字や境界を超えてアクセスを許してしまう事です。(または無効な
アドレスを許してしまう)簡潔に説明出来ないのはあなたが言い訳しているからです。

あなたが説明しているのはRustのRAIIを言っているに過ぎません。当然それはメモリー安全性ではありません
これはファイルのクローズ処理などでも限定された処理を自動化しますが、解放を強制しているだけです。
またこのRAIIの自動リソース資源の解放も万能でありません。ある意味では、メモリー(他の資源を含む)
リーク回避策の実装(解決策の1つであり唯一ではない)でしかありません
2021/11/08(月) 21:20:36.74ID:6BzlB5w0
>>521
それも全く同じです
ライフタイムが尽きたのにその参照を維持してままだから生じた問題です
ライフタイムを管理する言語ならばそのケースも同様にコンパイラがそのコードの問題を指摘します
2021/11/08(月) 21:27:40.83ID:6BzlB5w0
>>523
落ち着きましょう
様々な原因(スコープを外れたり再利用のために)自動開放されてしまったものへの参照を維持し続けてしまい発生するその問題は明らかにメモリ管理使用ミスの問題でありメモリ安全性の問題です
あなたが主張するバッファオーバーフローはメモリ安全性の問題の一つに過ぎません
526デフォルトの名無しさん
垢版 |
2021/11/08(月) 21:29:14.32ID:WC/FOJEL
>>524-525
じゃあ世の中にメモリー安全性を謳う他の言語の本家に文句言って、この言語たちはメモリー安全ではないと
ホームページを書き換えろと文句言いなさいよ。どうせ相手にしてもらえませんがね
RAIIをアピールするならまだしも、それをメモリー安全性なんて言って勘違いし他を暗に危険だと貶める行為は
とても褒められませんし、なんの意味もなく必死なアピールが嫌悪を伴います。正当なアピールでさえ、最近は
ウザいと嫌がられますよ?

「ライフタイムが尽きたのにその参照を維持してままだから生じた問題です」
ライフタイムが尽きたと考えられるのはGo言語のソースでRust的なコードの見方をしているからです。何度も
言っているように参照で渡したデータの寿命は尽きていません。
2021/11/08(月) 21:36:44.29ID:6BzlB5w0
>>526
>> 何度も言っているように参照で渡したデータの寿命は尽きていません。

寿命が尽きて参照先が再利用されてしまい参照が無効状態になっていることをマジで理解できないのですか?
528デフォルトの名無しさん
垢版 |
2021/11/08(月) 21:43:30.84ID:WC/FOJEL
>>527
あなた自分の上げた記事さえ読んでいませんね?「参照が無効状態になっている」無効にはなっていません
$ ./test_gomistake
Values: 3 3 3
ですから問題が起こったのです。もうメモリー安全性でも私の逃げでもイイから勝ち誇って嫌われなさい
Rustには偉い迷惑な存在なので、もう相手しませんよ
2021/11/08(月) 21:43:51.47ID:q/kOwwo+
Goの変数は参照がある限り存在するからお前が全て間違ってる
はっきりして良かったな
2021/11/08(月) 21:56:52.12ID:6BzlB5w0
>>528
わかりやすいように1回目のiをi1と表現すると
i1への参照を他が持ったままi1は寿命が尽きて解放されてますよね
そして2回目のi2が同じ領域を割り当てられて別の値2となりそれも尽きて
最後に3回目のi3が同じ領域を割り当てられて別の値3となりそれも尽きて解放
つまりPrintlnした時点で未割り当ての領域の値3を指していますよね?
2021/11/08(月) 22:12:26.06ID:IqA5SPsy
C言語でもメモリ的に危ないコードにはunsafeってコメント書いとけば
rustと同じで安心安全だよね
2021/11/08(月) 22:49:01.85ID:DpBlQeQQ
上から下までunsafeまみれになるわ
2021/11/08(月) 23:13:31.22ID:LdTjNXcL
GCにも矛盾はあるんだよ
参照できなくなったポインタの集合を参照できないならばGCの実装は不可能

現実的にはunsafeでweakな参照を使って無理矢理GCを実装している
2021/11/08(月) 23:48:37.92ID:dWDs4ee0
だからメモリ安全って言葉使うなって言ったのにw
2021/11/08(月) 23:49:59.34ID:jye9PFXO
分煙と言えば
ミドリ安全です
2021/11/09(火) 00:03:37.26ID:/IIRMA31
プログラマーってメモリが安全かどうかでずーーーーっと同じような話しててキモいわ
安全日とか危険日とかどうでもいいだろ消えろ
2021/11/09(火) 01:09:11.48ID:Ziut+B8+
>>521
そのバグ問題やってみたが興味深い問題だな。
func main() {
 var out []*int
 for i := 0; i < 3; i++ {
  out = append(out, &i)
 }
 fmt.Println("Values:", *out[0], *out[1], *out[2])
}
上記のバギーなGoコードをそのまま普通に以下のRustコードにすると、
fn main() {
 let mut out = vec![];
 for i in 0..3 {
  out.push(&i);
 }
 println!("Values: {} {} {}", *out[0], *out[1], *out[2]);
}
コンパイルエラーとなり「変数iの借用(参照)がforループの外で使われてる!」とライフタイムの問題。
そこで変数iを強引にループの外へ追い出して、この問題が起きないように以下のコードにすると、
fn main() {
 let mut out = vec![];
 let mut i = 0;
 loop {
  if i < 3 {
   out.push(&i);
   i += 1;
  } else {
   break;
  }
 }
コンパイルエラーとなり「変数iが借用(参照)されたままで変数iを書き換えてる!」と書き換え競合の問題。
つまりRustは少なくとも2種類の方法でこの種のバグが生じないように防いでいるということか。
2021/11/09(火) 03:57:16.61ID:d6arxLIn
どこかで拾ったGoの変な挙動を示すコード

slice1 := make([]int, 0, 5)
slice2 := slice1
for i := 0; i < 10; i++ {
slice1 = append(slice1, i)
slice2 = append(slice2, i + 100)
}
fmt.Println("slice1 =", slice1) // => [100 101 102 103 104 5 6 7 8 9]
fmt.Println("slice2 =", slice2) // => [100 101 102 103 104 105 106 107 108 109]

これはなかなか常人には理解しがたい
2021/11/09(火) 04:12:13.75ID:2q5nPARu
実行してみると確かにそうなるな。なんじゃこりゃ
2021/11/09(火) 05:02:02.91ID:mTU/Ys0g
>>538
常人には、というかsliceの仕様を知らないと全くわからんよ。理解してみればシンプル。

sliceはコピーするとバッファも共有されてしまう。
バッファのキャパシティを超えるまでは、同じバッファに書き込まれることになる。
下のページの Slice internals らへんをちゃんと読めばよくわかるよ。
https://go.dev/blog/slices-intro

そのコードの場合は、slice1とslice2はバッファが共有されていて、そのキャパシティは5なので、5番目の要素までは同じバッファに書き込まれてしまう。

そのあとキャパシティを超えるので、slice1とslice2でそれぞれ別々の新しいバッファがallocateされて、元の共有バッファの要素がコピーされる。
なので、6番目からは別々に書き込まれる。

> slice2 := slice1
ここのコードは slice2 := append([]int{}, slice1...) とかに変更すればバッファが共有されないので、違和感のない動作になるぞ。
https://play.golang.org/p/3fCafqo9L5v

このへんか、deferが実行されるタイミングとか、 >>521 らへんは初心者がハマる罠だな。
次にハマるのは goroutine とか channel 使ったときの race condition らへんだな。
2021/11/09(火) 08:45:42.78ID:dNM7/Umh
>>536
変数の型も書かないPythonが人気ナンバー1だからキモいのは少数派
2021/11/09(火) 09:26:15.28ID:Ziut+B8+
>>540
Goのスライスの諸問題は親スライス(=元)と子スライス(=バッファ部分がキャパシティを超えるまでは共有される)が同じスライスとして扱われるところにあるよな

一方でRustはそれをVec(=親=実体)とスライス(=子=部分参照)の2種類へ明確に分離して諸問題を防いでいる
さらにRustのスライスは親がVec(=伸長可)でも配列(=固定長)でも区別なく統一して使える
そしてスライスも参照の一種であるため「読み取り専用共有スライス」と「書き換え可能専有スライス」に分けることで並行&並列処理での競合問題にも対処して安全な効率化を実現している
543デフォルトの名無しさん
垢版 |
2021/11/09(火) 09:57:47.67ID:cs0y0gBS
わざわざmakeでキャパ5作ってるのに、その後に10未満までappendするなんて
バカゴミクズしかこんな事しない。
ほんとRustのせいじゃないのに、このバカゴミクズは何もわかってないので
早く市んでほしい。イメージ最悪

構造をもったコレクション構造と連続領域確保のアロケーションを比べるなんて
頭がどこまでもおかしくなればこんないい加減なことを言えるのか
2021/11/09(火) 10:05:19.89ID:t/ZCl1K7
めっちゃ分かりやすくありがたい挙動w
545デフォルトの名無しさん
垢版 |
2021/11/09(火) 10:06:48.86ID:cs0y0gBS
比べるなら、配列やVecじゃなく、heap::allocate(size, align);なのに
長々と無駄な事を書いて、Vec::with_capacity(len);と比べているという
スパナと釘を比べて、どっちが安全と説いているバカゴミクズ勘違い野郎
2021/11/09(火) 10:16:31.45ID:p+4WEtUZ
>>545
俺もクソみたいなRust推しはどうかと思ってるが
今回の件は君よりもそのゴミクズ野郎のほうが問題の本質を理解してる
547デフォルトの名無しさん
垢版 |
2021/11/09(火) 10:21:06.21ID:cs0y0gBS
また顔真っ赤の何も言わない援護射撃が現れる
2021/11/09(火) 10:23:15.72ID:t/ZCl1K7
C++なんてこれ1だからなw
#include <iostream>
struct s{};
int main() {
std::cout<<sizeof(s)<<std::endl; // 1
return 0;
}
理由は同じポインタ値を同じオブジェクトにしたいからだとw
言語仕様なんて実用本位でそんなもんw
ちなみにCは0w
#include <stdio.h>
struct s{};
int main() {
printf("%ld\n",sizeof(struct s)); // 0
return 0;
}
2021/11/09(火) 10:33:38.60ID:E/uEHC7F
>>545
GoのスライスはRustのVecで合っている
どちらも以下の点で同じ
・3つ組で構成される(領域へのポインタ、確保されている長さキャパシティ、そのうち使用中の長さ)
・append/pushなどで長さは伸長することが出来る
・長さが伸長してキャパシティを超えると自動的にヒープ領域の再割り当てを行ないデータは移動する
・その時に3つ組のポインタ部分は当然変化する

>>545
>> heap::allocate(size, align);なのに

そのようなヒープ領域割り当てはとは異なる
GoのスライスとRustのVecはどちらも伸長して足りなくなるたびにヒープ領域の再割り当てを何度でも自動的に行なう
もちろん再割り当てが頻繁に起きないように大きく確保してそれがキャパシティ
550デフォルトの名無しさん
垢版 |
2021/11/09(火) 10:37:04.74ID:cs0y0gBS
調べてきた
Cでは、構造体が名前付きメンバーなしで定義されている場合、プログラムの動作は"未定義"です。
ですから、処理系によっては0ではない違う値ということもあり得ます、なので0だ、というのは
少々違います。C++の場合、 標準ではサイズ0 のオブジェクトは許可されないため値1を返します。
clangに-std=c++17でCのソースをコンパイルすれば1になります。

未定義動作が多い言語は確かによろしくないですが、それだけ多くの処理系がある事の裏返しです
551デフォルトの名無しさん
垢版 |
2021/11/09(火) 10:39:15.18ID:cs0y0gBS
必死に顔真っ赤になってレス付けてくるけど相手にしません、読むのも嫌
2021/11/09(火) 11:07:58.08ID:t/ZCl1K7
CとC++は実際違う言語だから、CのソースをC++の処理系にかけてもC++として処理されるだけw
gccでもclangでも言語オプションは-xなので、-x cでC言語、-x c++でC++になるw
Cなら-std=c++17ではなく-std=c17かなw
Cの場合古い分事実上の標準に合わせて標準化されてる感じが強いから未定義という扱いになるのは仕方ないw
実際gccでも警告すら出ず--pedantic-errors付けてようやく怒られる程度の話w
2021/11/09(火) 11:20:15.97ID:Ziut+B8+
>>549
単体で使う限りGoのスライスとRustのVecは同じ構造も持ち同じ挙動だが
共有されると両者の挙動が異なってくる

Goのスライスは>>538のようにバッファ部分が共有されていると
別スライスでもキャパシティ限度内ならば書き換えや伸長があっても変化が共有される
そしてキャパシティを超えてバッファ部分再割り当ての時に二つに分岐してそれぞれが最終的にGCで回収される

Rustは競合回避のためsingle writer xor multi readersの原則があるので
RustのVecに書き換えや伸長が起きるときは共有されていない
だからキャパシティを超えてバッファ部分再割り当ての時は移動のみで旧バッファ部分は即座に解放回収
2021/11/09(火) 12:35:36.43ID:UAERt8tt
goは比較的新しい言語とは思えないほど危険がいっぱいなんだな。rustどころかnimや crystalにも大きく劣る言語仕様なのに、信者が無理矢理な理屈で自分を騙してる印象
2021/11/09(火) 12:36:57.75ID:6MNHnF6e
>>540
素直にcopyか参照にしとけば良かったのにね。
効率求めるならCOWにした方が良さそう。なんでCOWにしなかったのかな?COWは並列処理とあんまり相性良くないけど。
556デフォルトの名無しさん
垢版 |
2021/11/09(火) 12:47:14.84ID:Smk+8XDy
スケープゴートを用意し比較的人口の多いGoを攻撃する、Rustは悪くないのに"危険がいっぱいなこいつ"の悪辣性
2021/11/09(火) 12:56:13.87ID:t/ZCl1K7
go最強!!!!
2021/11/09(火) 13:08:33.41ID:0dhxEnJG
>>554
信者が無理矢理な理屈で暴れてるのはRust信者だろ
そんなことしてるからいつまで経っても普及しないオタク言語止まりなんだよ
2021/11/09(火) 17:57:07.15ID:m+qVFCof
capacity は、単なるデフォルト値だろ

別に、それを超えても良いのだろ?
560デフォルトの名無しさん
垢版 |
2021/11/09(火) 18:50:44.35ID:sYcGGX0V
RustはD言語の再来と言われるほど期待されてる。
2021/11/09(火) 19:55:55.57ID:qOqV7S2Y
倒してしまっても構わんのだろ?
562デフォルトの名無しさん
垢版 |
2021/11/09(火) 20:01:35.84ID:NdU8gMYv
うんこ野郎の独演会
2021/11/09(火) 20:12:33.83ID:mTU/Ys0g
>>559
超えていいよ。超えたときには別のバッファが作成されて、元のバッファの要素がコピーされる、ってだけだから。

キャパシティを意識するとしたら、このようなバッファ作成回数を減らしたいっていうような、パフォーマンスを意識するときが多いんじゃないかな。
普通は明示的にキャパシティを設定せずとも、デフォルトの2のべき乗サイズのキャパシティがいい感じのパフォーマンスになるけどね。
2021/11/09(火) 20:57:16.81ID:dNM7/Umh
スライス<T>型がユーザー定義型だったら
それは言語の欠陥ではなくユーザーのミスでしかなかったのに

スライス<T>型をユーザーが再発明できない原因をよく考えるべき
565デフォルトの名無しさん
垢版 |
2021/11/09(火) 23:26:26.60ID:8kpY2GOq
>RustはD言語の再来と言われるほど

言われたくないだろうな
2021/11/09(火) 23:33:50.69ID:t/ZCl1K7
注目度がだいぶ劣るけど後継は多分nimだから・・・
2021/11/10(水) 01:07:58.28ID:trxD4DJA
C++の再来はありますか?
2021/11/11(木) 10:10:47.29ID:SpIFedoW
去ってないから
2021/11/11(木) 14:23:06.64ID:Cobl5Yvk
C/C++は簡単にやばいコードを書けてそれを発見するコストが高いという問題がある
特にC++は使いこなすための練度のハードルが高いせいか凶悪と言ってもいいw
2021/11/11(木) 14:56:27.50ID:JCk4+0H4
C++がよくあそこまで流行ったもんだよね
こうなる前に他の言語を作る動きはなかったのかしら。まあそれが1995年のJavaだったのかなあ。昔すぎて自分にはよくわからんけど
2021/11/11(木) 15:12:54.92ID:Cobl5Yvk
むしろそれまではCしかなかった
Windowsが出てきて、その開発の主要言語でVisual C++が出てきたのでC++が流行った
と思ってる
インターネットが急速に発展したのはWindows 95以降だったので、それまでの流行りは処理系の人気に依存してた
と思う
その頃のUnix系や汎用機の世界までは俺も知らんw
勝手にUnix系はCで汎用機はCOBOLだったんじゃないかと思ってるw
2021/11/11(木) 15:29:17.41ID:jwvU2w1D
要は、スマホのように説明書不要と称する物を特許とか著作権とかの規制で縛って課金する方法と
本体を無料であげる代わりに分厚い説明書を買わせる方法がある
2021/11/11(木) 17:04:48.90ID:JCk4+0H4
>>571
なるほど。たしかにWindowsとVisual Studioがキラーアプリケーションだったんだ
MicrosoftがObjective-Cを採用してたら、Objective-Cがめちゃ流行ったんだろうし、やはりプラットフォーマーは強いな
MicrosoftかAppleのいずれかがLispを採用してたら、Lispの存在感も桁違いだったんだろうなあ。そういう世界線を見てみたい
2021/11/11(木) 17:23:23.65ID:jwvU2w1D
ネットの怪文書を処理する難度がC++よりも凶悪なのでC++が良心的に思える
2021/11/11(木) 18:27:16.30ID:2aD4x3mr
C++は諦めが肝心の言語
機能を全部使うと死ぬ
2021/11/11(木) 19:54:16.99ID:Cobl5Yvk
関数型の言語は当時Unix系の開発者(学術系多め)がemacs lispを中心に好んで使ってたよ(開発ツールとして)
ただWindowsとPCの普及にともなってunixやemacs自体が段々下火になっていった
処理系とはIDEのことなので、IDEの開発効率とその付属ライブラリが言語選択の決め手ということ
当時はC++以外だとpascal(delphiなど)を使う人やVBを使う人がいた
appleは丁度ジョブスいなかったので低迷中だったかな
当時強かったのはMS/IBM/Sunあたりかなぁ
※個人の感想/主観であることに注意
2021/11/11(木) 23:33:58.00ID:jahl/MWB
どうしてprologのことを無視するかなあ
80年代後半から90年代初頭にかけては
unixではprologの天下
Cよりも早くコーディングできた
2021/11/11(木) 23:45:48.82ID:JCk4+0H4
それ天下とはいっても流行してた、って意味じゃないよね?
GNUのソフトウェアもほとんどC言語だろうし・・・。
2021/11/11(木) 23:50:14.50ID:PBlMMjPy
prologはいいんだけどrust製prologのscryerとか見てるとISO準拠にこだわるのやめてくれと思う
文法とか組み込みオペレータ、組み込みプレディケートとかライブラリも新時代に合わせて工夫してほしい
昔ながらのコードをそのまま動かせる…
それは昔ながらのPrologで動かしてもろて…
じゃあprologじゃなくていいじゃんって?
そうだよ!基礎コンセプトそのままでガワを新しく整えたのがほしいんだよ!
2021/11/12(金) 00:06:01.94ID:Zs9GMSbc
Prologが分かる奴はErlangもRustも分かるから早急に次世代に行けた
2021/11/12(金) 02:10:18.26ID:MFojYN0L
prologなんて誰も使ってなかったよw
2021/11/12(金) 14:30:35.33ID:MwEAyDic
>>579
それ、何てOz?
Oz触ったこと無いけど。
2021/11/12(金) 14:41:26.85ID:MFojYN0L
swi-prologなら若干拡張されてるけど、prolog自体が昔からほぼ使われておらず
存在自体あまり知られてないし、結局手続き的思考が必要だし、用途が限定される使いにくい言語だと俺は思ってるw
2021/11/12(金) 14:59:17.99ID:CoiyKYqf
調べてみるとICOTとかいう、Prologをメインに使って、500億円も予算をかけたプロジェクトがあったらしいけど、なんだったんだろうな
585デフォルトの名無しさん
垢版 |
2021/11/12(金) 21:33:34.72ID:x+I3WYUz
第五世代コンピューターと論理プログラミングを基にした現代の深層学習とは違う人工知能・・・ウッ頭が
つまりはアランケイのSmalltalkが最強ってことだろ?
■ このスレッドは過去ログ倉庫に格納されています