GC
ここでいうGCはいわゆる古典的なMark and SweepだとかCopy GCだとかの実行時にゴミを発見して回収するシステムのことを指しています。
ガーベジコレクションはない方がいいですよね。
どんなにデータローカリティを最適化していようが、応答速度を気にしていようが、Copy on Writeを意識した作りをしていようが、GCが走ると全ての努力を無に帰します。
Hello Worldのプログラムにさえリンクされますし、アプリケーションがどんなに速くてもGCが遅ければ全体が遅くなります。
ちゃんと作らないと言語に並行性を導入できませんし、並行性に耐えられるように作ってもどうしてもStop the Worldが発生します。
GCによるリソースの回収はタイミングが遅いのでファイルディスクリプタなんかは別途手で管理しないとならなくなります。
Rustのライフタイムによるメモリ管理は銀の弾丸ではない Rustはシステムプログラミング言語だから許されるのであって他の言語でライフタイムとかを意識しながら書くのはつらい
Rustよりももう少し緩い仕組みが必要で
メモリを捨てずに別のデータを上書ける仕組み、要にはC++のplacement newのようなものをコンパイラが頑張ってやってくれたら便利ですよね。
最悪、GCはあってもいいのですがメモリを即座に開放できる仕組みもセットで欲しくなります。 個人的に有望だなと思ってるのは以下の3つです。
ML Kit with Regionsみたいに処理系がデータの生存期間をある程度推論して開放する仕組み
C# みたいにユーザが特定の書き方をしたらメモリを即座に開放できる仕組み C# にあまり詳しくないんですがローカル変数に null を代入したらその場で開放してくれるんですよね?
Lobster みたいにいくつかの仕組みを組み合わせて参照カウントでも安心して使える仕組み 実装上メモリ管理まで手が回ってるかは不明だが、原理的にはできるはず