icon

@tadd WeakRefを自動挿入するとセマンティックが変わるから困るのでは?

icon

@tadd
例えば、
```
function setup() {
const el = document.getElementById("hoge");
el.addEventListener("click", function() {
el.style.color="red"; // A
});
el.parentElement.removeChild(el);
}
```
とした時に、elがリークすると思うんだけど、
elを勝手にWeakRefにしたとして、Aの行で、el.deref()を呼んだときにnullが帰ってきたらどうするように書き換えるか?という疑問。

icon

jekyllは定数部分で遅いというよりは、オーダー的に遅いのがツラいのだが、挙動を変えずにオーダーを落とせないと思う。

icon

@tadd
```
if (weakRef) {
doSomething(weakRef);
}
```
としたときに、JavaScriptだとweakRefが途中で空になる事はないけど、
それがありえるようになると困るんじゃないかな。

Rubyのは、一定範囲でピンする方法はあるのかな?

icon

@tadd 空になっても困らないコードが想像できない。という話だな。例えばどういう変換?

JSだと、インスタンスAを差すWeakRefのderefメソッドを呼んで、その返り値であるAへの参照を変数に入れたら、Aへの参照をWeakRef経由ではない形で持っていることになるから、掴んでる間はAはGCされないんだと思う。

icon

@tadd 例えば、saveボタンを押したら、textareaの中身をsaveする機能があって、textareaがGCされて、saveされなくなると困るみたいなレイヤの話をしてた。

icon

@tadd これは、
JavaScriptでは前者ができるけど、RubyのWeakRefのAPIは後者相当の事しかできない気がするんだけど、大丈夫?という疑問だった。

icon

@tadd いや、「GCされる」は、オブジェクトが持つリソース(メモリとか)が回収されるという話だけ。 > これをいけじは「GCされる」と表現してる、であってる?

icon

@tadd この「うん」は こっちへのレスね。 > なるほど、何となく分かってきた。textareaがもはやdocumentにつながってないとしてもclicked相当を処理する意味があるし、他にもそういう場合があるよ、ってことであってるかな?

icon

@tadd あと、ちゃぶだいを引っくり返すようで申しわけないんだけど、
これはDOMのGCとJavaScritのGCが平行してあるのが問題で、
たぶん、Rubyで同じ状況にあると同じようにメモリリークする。
例えば、Gaucheのtcl/tkバインディングは、gaucheのGCとTclのGCが混じってるから、
メモリリークする。
https://github.com/shirok/Gauche-tk#avoiding-leak

で、この2つのGCをまとめて1つにするという解決策があって、
operaはそれを統一してメモリリークを無くする計画だという話を聞いたが、
その後Chromiumベースになったから、今はその計画はなくなったと思う。

Web site image
GitHub - shirok/Gauche-tk: Simple Gauche binding of Tk toolkit
icon

@tadd セーブというのはアプリケーションの話だよね。
セーブするアプリケーションもありえるので、処理系にはわからないと思う。
> 画面上にあるテキストはもはやセーブされない。

icon

@tadd そうだね。またisConnectedにしたくなるかもしれないし。

icon

@tadd false->true->false->trueとかもありえるかも。
たぶん、isConnectedとGCは関係ないかなと思ってる。

icon

@tadd 関係してそうだね。

icon

@tadd いや、GCの方>いけじが昔「リーク」と書いたのは、isConnectedの方でGCじゃない、であってるかな。

```
var a = {};
var b = {};
a.b = b;
b.a = a;
a = null;
b = null;
```
は、JavaScriptはaもbもGCできる。
しかし、aかbがDOM elementだったら、GCできなくなる。

DOM側は、イベントハンドラに設定されてるJSのオブジェクトがGCされると困るので、イベントハンドラをGCのルートに指定する(ピンする)。
JavaScriptは、イベントハンドラから参照されてるDOM ElementがGCされると困るので、DOM側のGCのルートに指定する(ピンする)。
と、どっちのGCもルートに指定されてるaやbをGCできなくなる。

(ピンするはC#で使われてた用語だった。GCのルートに指定するが正しい?)

icon

@tadd ピンは、メモリアドレスを変えないという意味も含んでる気がする。

icon

@tadd いや、rb_gc_register_address の方のつもりだった。

icon

@tadd https://i.loveruby.net/ja/rhg/book/gc.html
RHG呼んでた。

rb_gc_markはGCの処理の中で呼んでるやつ。
rb_gc_register_addressは、次のGCの時に配慮してくれって頼むやつ。

第5章 ガ−ベージコレクション
icon

@tadd s/呼ん/読ん/

icon

ふるさと納税の返礼品は上限があるとして、
ふるさと納税しない人に返礼品をあげることにしたら、上限なかったりしない?

icon

@tadd
なつかしい。

rb_global_variable は rb_gc_register_address のaliasらしい。
https://github.com/ruby/ruby/blob/master/gc.c#L9075

M&S中に、各Decimalインスタンスがマークされる時に、dec_markが呼ばれるから、inumをマークしてるんだね。

例えば、VALUE_PINFというCの変数があって、ここに入ってるVALUEが、GCされてしまうと嫌だから、GCで消さないでおいてね、という。
https://github.com/tadd/decimal/blob/master/decimal.c#L2244

https://i.loveruby.net/ja/rhg/book/images/ch_gc_gcimage.jpg
この絵で、一番上の行に、3つ丸があって、真ん中の丸を黒くマークする時に、
右の丸もマークするのが、rb_gc_markで、
丸を縦線の左に移動するのがrb_global_variable(かrb_gc_register_address)じゃないかな。

icon

@tadd こんな感じ?

Attach image
icon

GCの話ししてて、そういやcSRUのGCはどうやって実装したっけ?ってなって、実装したらオブジェクトに自分がルートかどうかのフラグが用意されてた。
しかも、カウンタで。
大味な実装だし、デバッグ用のアサーションが大量にあって苦労が忍ばれる。(覚えてないけど)

icon

絵を書こうとしたら、アップルペンシルがどっか行った。もう一本買うか?

icon

いっそ、筆圧検知できるペンが使えるAndroidタブレット買うか!と思ったけど、検索して出てくるやつが高すぎて退散してきた。

icon

今月は2G使い切らなかったな。最近ネットが遅いから?

icon

角度あたりの解像度の単位はあるのだろうか?
スマホとデスクトップだとdpiが同じでも、見え方がだいぶ違うよな。

icon

@zundan おお、確かに自分の視力以上の解像度はいらないですからね。

icon

neovimに移行したさはあるんだけど、gvimでXのクリップボード使ってると厳しいんじゃないかと思ってる。

icon

http://hylang.org/ というのをみつけた。
PythonにコンパイルされるLispらしい。
これ使ったらcadQuery書くのが楽になる?

The Hy programming language
icon

完全無線イヤホンで、ケースに入れると電源が切れるやつで、ケースからポゴピン出ててそれで充電できるやつ使ってるけど、
ケースの電池が切れると、ケースに入れてもイヤホンの電源が切れないな。
盲点だった。

icon

前に読んだ何かのソースだと、メモリ番地の下2bitをタグにしてたけど、
今だと、上の方がいっぱいタグを付けられる?

icon

ミャクミャク stl 多色

icon

コスモ星丸 stl

icon

自然言語を書くの、LR文法の言語を書くより3.7倍ぐらい疲れる。

icon

newlispのソースみてて、SYMBOL構造体にcolorっていうフィールドがあって、何じゃと思ったら、赤黒木だった