@ikeji うーむむ、なるほど、そっか。
自分が想像できてたのは、リスナ内でのノードのisConnectedが、true→falseに遷移してノードは無意味になる、ってケースだけだったのが分かってきた。true→false→trueもあるか。
新しく自分で作ったのはfalse→trueになるでしょ、というのは分かるんだけど、それはtrue→falseの遷移がないから区別できるような気が薄っすらとしていた。ここも間違ってるかも。
@ikeji うーむむ、なるほど、そっか。
自分が想像できてたのは、リスナ内でのノードのisConnectedが、true→falseに遷移してノードは無意味になる、ってケースだけだったのが分かってきた。true→false→trueもあるか。
新しく自分で作ったのはfalse→trueになるでしょ、というのは分かるんだけど、それはtrue→falseの遷移がないから区別できるような気が薄っすらとしていた。ここも間違ってるかも。
@ikeji ほう、なるほど、深淵が近づいてきた音がする…….。
自分が書いた「画面上のtextareaとは関係しない状態になる」までは真だけど、それ以後は分からん、という話かな?
@ikeji 「GCされる」はこれだよね。ごめん、自分が混乱してたっぽいな……ボタンと勘違いしてたんだけど、textareaがGCされちゃう話だった。
自分の話とは関係なく(ノードがなくならない前提)、ということで、どのあたりまで合ってるか聞きたい。
そのtextareaノードがもしisConnectedでなくなったら、画面上のtextareaとは関係しない状態になるし、画面上にあるテキストはもはやセーブされない。
けどオブジェクトとしては生きてるから、実行時エラーにはならない。
という理解をしてるんだけど、ここまでは合ってるだろうか。
@ikeji うんうん、これは了解。別の方でツリー見間違ってたかもすまん、見直す
@ikeji おー合ってた、よかったサンクス。その辺を自分が分かってなかったのが、一番足りてなかったんだと思う。
@ikeji あとすまぬ、Rubyの方はまったく知らない……。
@ikeji というか、あれだな。「GCされる」っていう意味も多義的だしあやふやだよね。
RubyでもJSでも、ユーザーが使うつもりで参照してるオブジェクトがいきなりなくなったら(それこそWeakRefみたいな特殊な例を除けば)単に処理系のバグだよね。自分は今は、それは気にしてなくて、いけじもそうなんじゃないかと思ってる。
で、JSのDOMに関してもそうだけど、documentにつながってたノードが勝手に繋がらなくなって、結果おかしくなる、って話だと思う。これをいけじは「GCされる」と表現してる、であってる?
@ikeji なるほど、何となく分かってきた。textareaがもはやdocumentにつながってないとしてもclicked相当を処理する意味があるし、他にもそういう場合があるよ、ってことであってるかな?
@ikeji あと後半は分かるんだけど、それは
```
let foo = weakRef.deref();
if (foo)
doSomething(foo);
```
という話?だとするとたしかに、だいぶ話が違ってきそう。
自分は いけじが、 `if (weakRef.deref()) doSomething(weakRef.deref());` というのを短縮して書いた、んだと思っていた。
@ikeji えっと、こないだ書いた?.とか。
@ikeji うむ、なので空になっても困らないコードに自動変換する(のはできないのかな)、という話をしているつもりだった。うまく伝わってなくて申し訳ない。
あとは、今のJSだと空になることはない、も分かってないや。WeakRefオブジェクト自体がundefinedにならないのは分かるんだけど、derefした後の保証はないんじゃないかって思ってた。
@ikeji なるほどーねー、具体例助かりますく。
WeakRefってderefしなくちゃいけないのか、Proxyみたいな透過的なもんだと勘違いしてた……(というくらいの初心者です)
で、考えてたのは、自動挿入以外の変換とか検査とかも含めて静的になんかできないかなー、だった。
そのコードでやりたいこと、何になるんだろうなー。素人で分からなさすぎる。
もし死んでたらほっとけばいい、なら、?.でもNullオブジェクト(総受け)でも、どうにでもできそうだけど、どうなんだろう?
@ikeji うん、それはそう。なんだけど原理としてリーク自体は、という話をしたかった。
もしWeakRefを使って原理的に効果があるなら、それをやる時に同時に対処できることは他にもあると思う。
けどその場合、意味論の何がどう変わるんだろう、どこまで許されるんだろう、とかはちゃんと調べて・考えてない。
isConnectedじゃないもの全部をuse-after-freeみたいに扱っていいかというと、きっと違いそうだよね。
@ikeji 前話してたメモリリークとDOMのイベントやつなんだけどさ、
WeakRefとか` if (!n.isConnected) return;`とか、その辺を静的変換で自動挿入できたり、あるいは「ノードは全部WeakRefだからな!」っていうモードを作っちゃえば、リークそのものは解決する、のかな?
(と、ふとこれを見て思った https://zenn.dev/jotaifriends/articles/0c1f4c3a6ed7e5 )
本質的には、部分的に書き換わり続けるグローバル変数(window.document)に自分自身の参照を追加できる(属性に登録するイベントリスナ関数を呼ぶ時はtargetを渡す)、っていう循環構造があるから、どうにも逃れられない辛さは残るんだろうな、という気はする。
@ikeji デバッグ一択……!(いや無理せず)
@ikeji そう、自分はギリ現役で触ったことなかったからしらなかった。SCSIさん、物理的なコネクタもいくつも種類あるんだね。内部も外部も。
CD読み込ませる時、ターミネータ必要なのはしってたけど、はまるのを探すだけで右往左往してた。
@ikeji ふーむふむ、解説ありがと。
べ、べるく……と調べたら、四ピンの電源のやつか。そのページでいうと、5の写真の黄色い奴、のすぐ右にある、青くて小さい二ピン二つ、だよね?
たしかに電源足りないときはそれは合った方がよさそうだけど、素人的にはどう見ても、上の幅広の黒い方じゃね?って思う。けど、分からん……。
番号で言うと6番、次のアイテムの50ピンの方。
@ikeji なんかページを開いたら、筑波大の森の中にいそうな虫みたいな……いや違った失礼。
うーん。ともかくまず、どれが欲しいものか・望ましいものかが分からなさすぎるよねぇ。買うにしても、部分的に作るにしても。
せっかくそういうコミュニティとか成果があるなら、新しめのがいいかなーとは思うし。けどそれとは別に、入手容易性とか、Sunとの相性問題(動作実績)もあるし。
それで、いろいろあるけどまず先に。「あの黒いリボンケーブル」は、内部でSCSIとしてつなぐやつ? じゃなくて、Blueとラズパイ(GPIO?)をつなぐ、とかいうやつかな?
もし前者なら、新品を普通に安く売ってるのは確認してる。
@ikeji 本格的すぎるw 申し訳ないくらいで、ほんとありがとう。
Zuluさんはここに購入場所がまとまってて https://zuluscsi.com/wheretobuy/
自分はうさぎさんちから買おうと思っていた。
https://store.rabbitholecomputing.com
@ikeji でも、Reが動作報告があって、それのforkだからPiは動きそう、というのは有力情報だな。
Zuluは動いてそうな人と
https://kb.pocnet.net/wiki/SunOS_4.0.3c_SPARC
うまく行かないと言ってる人(けどキットで組み立てたからなのかなー)と
https://www.djerickson.com/sun/
Blueはだめぽって人と
https://github.com/erichelgeson/BlueSCSI/discussions/50
だいたい動いたって人と。
https://github.com/erichelgeson/BlueSCSI/discussions/193
正直、ここまで選択肢がたくさんあるものとは思ってなかったのでした。
076萌SNS is a social network, courtesy of 076. It runs on GNU social, version 2.0.2-beta0, available under the GNU Affero General Public License.
All 076萌SNS content and data are available under the Creative Commons Attribution 3.0 license.