Re: Garbage collector - ccl:terminate (memory stuff)

GrĂ©gory Vanuxem <[email protected]> Sun, 5 May 2024 04:55:20 +0200
Newsgroups gmane.lisp.openmcl.devel
Message-ID <CAHnU2dbPmKuXZmwoC6aqqNYv9YMOS6HrFbzAcMNPNUMAthTRpA@mail.gmail.com>
--000000000000a024f40617ac1718
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

> Thanks. I think I get the basic idea: There is hybrid language FFI memory
management situation going on, and the terminate method for the non-Lisp
language is not being called when you wish it were.

I have to let Julia know it can reclaim memory about no longer referenced
variables. And I want to use the CCL GC to let me know when it is GCing the
memory related to some no longer bound variables. But it is the CCL:
terminate method that allows that. There are some other CL implementations,
at least SBCL, where I can give it directy a lambda form in such a way it
does my job:

            (let ((ret (make-instance 'jlref :id id
                    :type (|jl_string_eval_string|
                        (concatenate 'string "string(typeof(getindex(refs,\=
"
" id "\")))")))))
                    #+:sbcl (sb-ext:finalize ret (lambda ()
                        (sb-concurrency:enqueue index *jqueue*))) ret)


Here is a sample session with SBCL,
)juliad is a system command that display the output of the command executed
in Julia
)julia execute a command in Julia,
)lisp same thing but in CL subsystem
refs the indexed dictionary in Julia
*jqueue* a FIFO queue populated by the CL terminate command. Since Julia
does not support multiple thread access through its library libjulia.so it
is up to the main FriCAS (CL) thread to delete entries in Julia 'refs', so
on user input,I check if some entries can be deleted in Julia, if so, I
delete them. Notice, there is a code helper here, a printf in the C
wrapper.

FriCAS Computer Algebra System
Version: FriCAS 1.3.11-dev built with SBCL 2.4.4
    Timestamp: sam. 04 mai 2024 22:03:28 CEST
---------------------------------------------------------------------------=
--
Issue )copyright to view copyright notices.
Issue )summary for a summary of useful system commands.
Issue )quit to leave FriCAS and return to shell.
---------------------------------------------------------------------------=
--


(1) -> )juliad refs
IdDict{String, Any}()
(1) -> a:=3Dmatrix([[urand01(),urand01()],[urand01(),urand01()]])$JMATRIX
(JCFLOAT)

2=C3=972 Matrix{Complex{BigFloat}}:
0.202264+0.215084im  0.837934+0.841468im
0.881676+0.53561im   0.643403+0.736287im
(1)  Julia Output
                           Type: JuliaMatrix(JuliaComplexFloat)
             Time: 0.05 (IN) + 1.72 (EV) + 2.48 (OT) =3D 4.26 sec <- includ=
e
the time taken to load the Julia library
(2) -> )julia display(refs)
IdDict{String, Any} with 7 entries:
"2873853940934582137" =3D> 0.837934+0.841468im
"3013752598065164257" =3D> 0.643403+0.736287im
"1799302827895858725" =3D> 0.0+0.0im
"1193941380623146742" =3D> 0.202264+0.215084im
"525699342094945562" =3D> Complex{BigFloat}[0.202264+0.215084im 0.837934+
0.841468im; 0.881676+0.53561im 0.643403+0.736287im]
"2441597211547797803" =3D> 1.0+0.0im
"2342493223442167775" =3D> 0.881676+0.53561im

(2) -> jlRef a

(2)  #<JLREF  Matrix{Complex{BigFloat}} 525699342094945562 {100236FE33}>
                                              Type: SExpression
                                     Time: 0.03 (OT) =3D 0.03 sec
(3) -> )lisp *jqueue*

Value =3D #S(SB-CONCURRENCY:QUEUE
:HEAD #1=3D(SB-CONCURRENCY::.DUMMY.)
:TAIL #1#
:NAME "JuliaQueue")
(3) -> )clear all
All user variables and function definitions have been cleared.
(1) -> a

(1)  a
                                              Type: Variable(a)
                                                    Time: 0 sec
(2) -> )lisp *jqueue*

Value =3D #S(SB-CONCURRENCY:QUEUE
:HEAD #1=3D(SB-CONCURRENCY::.DUMMY.)
:TAIL #1#
:NAME "JuliaQueue")
(2) -> )lisp (reclaim)

Value =3D NIL
(2) -> )lisp *jqueue*

Value =3D #S(SB-CONCURRENCY:QUEUE
:HEAD (SB-CONCURRENCY::.DUMMY. "525699342094945562"
    "3013752598065164257" "1193941380623146742"
    "2873853940934582137" . #1=3D("2342493223442167775"))
:TAIL #1#
:NAME "JuliaQueue")
(2) -> a
Freeing... 525699342094945562
525699342094945562 freed
Freeing... 3013752598065164257
3013752598065164257 freed
Freeing... 1193941380623146742
1193941380623146742 freed
Freeing... 2873853940934582137
2873853940934582137 freed
Freeing... 2342493223442167775
2342493223442167775 freed

(2)  a
                                              Type: Variable(a)
                                     Time: 0.02 (IN) =3D 0.02 sec
(3) -> )julia display(refs)
IdDict{String, Any} with 2 entries:
"1799302827895858725" =3D> 0.0+0.0im
"2441597211547797803" =3D> 1.0+0.0im

(3) ->

--000000000000a024f40617ac1718
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"auto">&gt; Thanks. I think I get the basic ide=
a: There is hybrid language FFI memory management situation going on, and t=
he terminate method for the non-Lisp language is not being called when you =
wish it were.</div><div dir=3D"auto"><br></div><div dir=3D"auto">I have to =
let Julia know it can reclaim memory about no longer referenced variables. =
And I want to use the CCL GC to let me know when it is GCing the memory rel=
ated=C2=A0to some no longer bound variables. But it is the CCL: terminate m=
ethod that allows that. There are some other CL implementations, at least S=
BCL, where I can give it directy a lambda form in such a way it does my job=
:</div><div dir=3D"auto"><br></div><div dir=3D"auto"><div style=3D"color:rg=
b(186,190,216);background-color:rgb(41,45,62);font-family:Consolas,&quot;Co=
urier New&quot;,monospace;font-size:14px;line-height:19px;white-space:pre">=
<div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (<span style=3D"color:rgb(13=
7,221,255);font-style:italic">let</span> ((ret (<span style=3D"color:rgb(13=
7,221,255);font-style:italic">make-instance</span> &#39;jlref <span style=
=3D"color:rgb(137,221,255)">:id</span> id</div><div>=C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 <span style=3D"color:rgb(1=
37,221,255)">:type</span> (|jl_string_eval_string|</div><div>=C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (<spa=
n style=3D"color:rgb(137,221,255);font-style:italic">concatenate</span> &#3=
9;string <span style=3D"color:rgb(137,221,255)">&quot;</span><span style=3D=
"color:rgb(195,232,141)">string(typeof(getindex(refs,</span>\&quot;<span st=
yle=3D"color:rgb(137,221,255)">&quot;</span> id <span style=3D"color:rgb(13=
7,221,255)">&quot;</span>\&quot;<span style=3D"color:rgb(195,232,141)">)))<=
/span><span style=3D"color:rgb(137,221,255)">&quot;</span>)))))</div><div>=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 <span=
 style=3D"color:rgb(137,221,255)">#</span>+:sbcl (sb-ext:finalize ret (<spa=
n style=3D"color:rgb(137,221,255);font-style:italic">lambda</span> ()</div>=
<div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 (sb-concurrency:enqueue index <span style=3D"color:rgb(137,22=
1,255)">*</span>jqueue<span style=3D"color:rgb(137,221,255)">*</span>))) re=
t)</div></div></div><div dir=3D"auto"><br></div><div dir=3D"auto"><br></div=
><div>Here is a sample session=C2=A0with SBCL,</div><div>)juliad is a syste=
m command that display the output of the command=C2=A0executed in Julia</di=
v><div>)julia execute a command in Julia,</div><div>)lisp same thing but in=
 CL subsystem</div><div>refs the indexed dictionary=C2=A0in Julia</div><div=
>*jqueue* a FIFO queue populated by the CL terminate command. Since Julia d=
oes not support multiple thread access through its library libjulia.so it i=
s up to the main FriCAS (CL) thread to delete entries in Julia &#39;refs&#3=
9;, so on user input,I check if some entries can be deleted in Julia, if so=
, I delete them. Notice, there is a code helper here, a printf in the C wra=
pper.=C2=A0</div><div><br></div><div><span style=3D"background-color:rgb(41=
,45,62);color:rgb(186,190,216);font-family:Consolas,&quot;Courier New&quot;=
,monospace;font-size:14px;white-space:pre">FriCAS Computer Algebra System</=
span><br></div><div><div style=3D"color:rgb(186,190,216);background-color:r=
gb(41,45,62);font-family:Consolas,&quot;Courier New&quot;,monospace;font-si=
ze:14px;line-height:19px;white-space:pre"><div>Version: FriCAS <span style=
=3D"color:rgb(247,140,108)">1.3</span>.<span style=3D"color:rgb(247,140,108=
)">11</span><span style=3D"color:rgb(137,221,255)">-</span>dev built with S=
BCL <span style=3D"color:rgb(247,140,108)">2.4</span>.<span style=3D"color:=
rgb(247,140,108)">4</span></div><div>=C2=A0 =C2=A0 Timestamp: sam. <span st=
yle=3D"color:rgb(247,140,108)">04</span> mai <span style=3D"color:rgb(247,1=
40,108)">2024</span> <span style=3D"color:rgb(247,140,108)">22</span>:<span=
 style=3D"color:rgb(247,140,108)">03</span>:<span style=3D"color:rgb(247,14=
0,108)">28</span> CEST</div><div><span style=3D"color:rgb(103,110,149);font=
-style:italic">------------------------------------------------------------=
-----------------</span></div><div>Issue )copyright to view copyright notic=
es.</div><div>Issue )summary <span style=3D"color:rgb(137,221,255);font-sty=
le:italic">for</span> a summary of useful system commands.</div><div>Issue =
)quit to leave FriCAS <span style=3D"color:rgb(137,221,255)">and</span> <sp=
an style=3D"color:rgb(137,221,255);font-style:italic">return</span> to shel=
l.</div><div><span style=3D"color:rgb(103,110,149);font-style:italic">-----=
------------------------------------------------------------------------</s=
pan></div><br><br><div>(<span style=3D"color:rgb(247,140,108)">1</span>) <s=
pan style=3D"color:rgb(137,221,255)">-&gt;</span> )juliad refs</div><div><s=
pan style=3D"color:rgb(130,170,255)">IdDict</span><span style=3D"color:rgb(=
255,203,107)">{String, Any}</span>()</div><div>(<span style=3D"color:rgb(24=
7,140,108)">1</span>) <span style=3D"color:rgb(137,221,255)">-&gt;</span> a=
<span style=3D"color:rgb(137,221,255)">:=3D</span><span style=3D"color:rgb(=
130,170,255)">matrix</span>([[<span style=3D"color:rgb(130,170,255)">urand0=
1</span>(),<span style=3D"color:rgb(130,170,255)">urand01</span>()],[<span =
style=3D"color:rgb(130,170,255)">urand01</span>(),<span style=3D"color:rgb(=
130,170,255)">urand01</span>()]])<span style=3D"color:rgb(137,221,255)">$</=
span><span style=3D"color:rgb(130,170,255)">JMATRIX</span>(JCFLOAT)</div><b=
r><div><span style=3D"color:rgb(247,140,108)">2</span><span style=3D"color:=
rgb(137,221,255)">=C3=97</span><span style=3D"color:rgb(247,140,108)">2</sp=
an> Matrix{Complex{BigFloat}}:</div><div><span style=3D"color:rgb(247,140,1=
08)">0.202264</span><span style=3D"color:rgb(137,221,255)">+</span><span st=
yle=3D"color:rgb(247,140,108)">0.215084im</span> =C2=A0<span style=3D"color=
:rgb(247,140,108)">0.837934</span><span style=3D"color:rgb(137,221,255)">+<=
/span><span style=3D"color:rgb(247,140,108)">0.841468im</span></div><div><s=
pan style=3D"color:rgb(247,140,108)">0.881676</span><span style=3D"color:rg=
b(137,221,255)">+</span><span style=3D"color:rgb(247,140,108)">0.53561im</s=
pan> =C2=A0 <span style=3D"color:rgb(247,140,108)">0.643403</span><span sty=
le=3D"color:rgb(137,221,255)">+</span><span style=3D"color:rgb(247,140,108)=
">0.736287im</span></div><div>(<span style=3D"color:rgb(247,140,108)">1</sp=
an>) =C2=A0Julia Output</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Type: <span style=
=3D"color:rgb(130,170,255)">JuliaMatrix</span>(JuliaComplexFloat)</div><div=
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Time: <span style=3D"color=
:rgb(247,140,108)">0.05</span> (IN) <span style=3D"color:rgb(137,221,255)">=
+</span> <span style=3D"color:rgb(247,140,108)">1.72</span> (EV) <span styl=
e=3D"color:rgb(137,221,255)">+</span> <span style=3D"color:rgb(247,140,108)=
">2.48</span> (OT) <span style=3D"color:rgb(137,221,255)">=3D</span> <span =
style=3D"color:rgb(247,140,108)">4.26</span> sec &lt;- include the time tak=
en to load the Julia library</div><div>(<span style=3D"color:rgb(247,140,10=
8)">2</span>) <span style=3D"color:rgb(137,221,255)">-&gt;</span> )julia <s=
pan style=3D"color:rgb(130,170,255)">display</span>(refs)</div><div>IdDict{=
String, Any} with <span style=3D"color:rgb(247,140,108)">7</span> entries:<=
/div><div><span style=3D"color:rgb(137,221,255)">&quot;</span><span style=
=3D"color:rgb(195,232,141)">2873853940934582137</span><span style=3D"color:=
rgb(137,221,255)">&quot;</span> <span style=3D"color:rgb(137,221,255)">=3D&=
gt;</span> <span style=3D"color:rgb(247,140,108)">0.837934</span><span styl=
e=3D"color:rgb(137,221,255)">+</span><span style=3D"color:rgb(247,140,108)"=
>0.841468im</span></div><div><span style=3D"color:rgb(137,221,255)">&quot;<=
/span><span style=3D"color:rgb(195,232,141)">3013752598065164257</span><spa=
n style=3D"color:rgb(137,221,255)">&quot;</span> <span style=3D"color:rgb(1=
37,221,255)">=3D&gt;</span> <span style=3D"color:rgb(247,140,108)">0.643403=
</span><span style=3D"color:rgb(137,221,255)">+</span><span style=3D"color:=
rgb(247,140,108)">0.736287im</span></div><div><span style=3D"color:rgb(137,=
221,255)">&quot;</span><span style=3D"color:rgb(195,232,141)">1799302827895=
858725</span><span style=3D"color:rgb(137,221,255)">&quot;</span> <span sty=
le=3D"color:rgb(137,221,255)">=3D&gt;</span> <span style=3D"color:rgb(247,1=
40,108)">0.0</span><span style=3D"color:rgb(137,221,255)">+</span><span sty=
le=3D"color:rgb(247,140,108)">0.0im</span></div><div><span style=3D"color:r=
gb(137,221,255)">&quot;</span><span style=3D"color:rgb(195,232,141)">119394=
1380623146742</span><span style=3D"color:rgb(137,221,255)">&quot;</span> <s=
pan style=3D"color:rgb(137,221,255)">=3D&gt;</span> <span style=3D"color:rg=
b(247,140,108)">0.202264</span><span style=3D"color:rgb(137,221,255)">+</sp=
an><span style=3D"color:rgb(247,140,108)">0.215084im</span></div><div><span=
 style=3D"color:rgb(137,221,255)">&quot;</span><span style=3D"color:rgb(195=
,232,141)">525699342094945562</span><span style=3D"color:rgb(137,221,255)">=
&quot;</span> <span style=3D"color:rgb(137,221,255)">=3D&gt;</span> Complex=
{BigFloat}[<span style=3D"color:rgb(247,140,108)">0.202264</span><span styl=
e=3D"color:rgb(137,221,255)">+</span><span style=3D"color:rgb(247,140,108)"=
>0.215084im</span> <span style=3D"color:rgb(247,140,108)">0.837934</span><s=
pan style=3D"color:rgb(137,221,255)">+</span><span style=3D"color:rgb(247,1=
40,108)">0.841468im</span>; <span style=3D"color:rgb(247,140,108)">0.881676=
</span><span style=3D"color:rgb(137,221,255)">+</span><span style=3D"color:=
rgb(247,140,108)">0.53561im</span> <span style=3D"color:rgb(247,140,108)">0=
.643403</span><span style=3D"color:rgb(137,221,255)">+</span><span style=3D=
"color:rgb(247,140,108)">0.736287im</span>]</div><div><span style=3D"color:=
rgb(137,221,255)">&quot;</span><span style=3D"color:rgb(195,232,141)">24415=
97211547797803</span><span style=3D"color:rgb(137,221,255)">&quot;</span> <=
span style=3D"color:rgb(137,221,255)">=3D&gt;</span> <span style=3D"color:r=
gb(247,140,108)">1.0</span><span style=3D"color:rgb(137,221,255)">+</span><=
span style=3D"color:rgb(247,140,108)">0.0im</span></div><div><span style=3D=
"color:rgb(137,221,255)">&quot;</span><span style=3D"color:rgb(195,232,141)=
">2342493223442167775</span><span style=3D"color:rgb(137,221,255)">&quot;</=
span> <span style=3D"color:rgb(137,221,255)">=3D&gt;</span> <span style=3D"=
color:rgb(247,140,108)">0.881676</span><span style=3D"color:rgb(137,221,255=
)">+</span><span style=3D"color:rgb(247,140,108)">0.53561im</span></div><br=
><div>(<span style=3D"color:rgb(247,140,108)">2</span>) <span style=3D"colo=
r:rgb(137,221,255)">-&gt;</span> jlRef a</div><br><div>(<span style=3D"colo=
r:rgb(247,140,108)">2</span>) =C2=A0#<span style=3D"color:rgb(137,221,255)"=
>&lt;</span>JLREF =C2=A0Matrix{Complex{BigFloat}} <span style=3D"color:rgb(=
247,140,108)">525699342094945562</span> {<span style=3D"color:rgb(247,140,1=
08)">100236</span>FE33}<span style=3D"color:rgb(137,221,255)">&gt;</span></=
div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 Type: SExpression</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Time: <span style=3D"color:rgb(247,140,10=
8)">0.03</span> (OT) <span style=3D"color:rgb(137,221,255)">=3D</span> <spa=
n style=3D"color:rgb(247,140,108)">0.03</span> sec</div><div>(<span style=
=3D"color:rgb(247,140,108)">3</span>) <span style=3D"color:rgb(137,221,255)=
">-&gt;</span> )lisp <span style=3D"color:rgb(137,221,255)">*</span>jqueue<=
span style=3D"color:rgb(137,221,255)">*</span></div><br><div>Value <span st=
yle=3D"color:rgb(137,221,255)">=3D</span> #<span style=3D"color:rgb(130,170=
,255)">S</span>(SB<span style=3D"color:rgb(137,221,255)">-</span>CONCURRENC=
Y:QUEUE</div><div><span style=3D"color:rgb(137,221,255)">:HEAD</span> #<spa=
n style=3D"color:rgb(247,140,108)">1</span><span style=3D"color:rgb(137,221=
,255)">=3D</span>(SB<span style=3D"color:rgb(137,221,255)">-</span>CONCURRE=
NCY::<span style=3D"color:rgb(137,221,255)">.</span>DUMMY.)</div><div><span=
 style=3D"color:rgb(137,221,255)">:TAIL</span> #<span style=3D"color:rgb(24=
7,140,108)">1</span>#</div><div><span style=3D"color:rgb(137,221,255)">:NAM=
E</span> <span style=3D"color:rgb(137,221,255)">&quot;</span><span style=3D=
"color:rgb(195,232,141)">JuliaQueue</span><span style=3D"color:rgb(137,221,=
255)">&quot;</span>)</div><div>(<span style=3D"color:rgb(247,140,108)">3</s=
pan>) <span style=3D"color:rgb(137,221,255)">-&gt;</span> )clear all</div><=
div>All user variables <span style=3D"color:rgb(137,221,255)">and</span> fu=
nction definitions have been cleared.</div><div>(<span style=3D"color:rgb(2=
47,140,108)">1</span>) <span style=3D"color:rgb(137,221,255)">-&gt;</span> =
a</div><br><div>(<span style=3D"color:rgb(247,140,108)">1</span>) =C2=A0a</=
div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 Type: <span style=3D"color:rgb(130,170,255)">Variable<=
/span>(a)</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Time: <span style=3D"c=
olor:rgb(247,140,108)">0</span> sec</div><div>(<span style=3D"color:rgb(247=
,140,108)">2</span>) <span style=3D"color:rgb(137,221,255)">-&gt;</span> )l=
isp <span style=3D"color:rgb(137,221,255)">*</span>jqueue<span style=3D"col=
or:rgb(137,221,255)">*</span></div><br><div>Value <span style=3D"color:rgb(=
137,221,255)">=3D</span> #<span style=3D"color:rgb(130,170,255)">S</span>(S=
B<span style=3D"color:rgb(137,221,255)">-</span>CONCURRENCY:QUEUE</div><div=
><span style=3D"color:rgb(137,221,255)">:HEAD</span> #<span style=3D"color:=
rgb(247,140,108)">1</span><span style=3D"color:rgb(137,221,255)">=3D</span>=
(SB<span style=3D"color:rgb(137,221,255)">-</span>CONCURRENCY::<span style=
=3D"color:rgb(137,221,255)">.</span>DUMMY.)</div><div><span style=3D"color:=
rgb(137,221,255)">:TAIL</span> #<span style=3D"color:rgb(247,140,108)">1</s=
pan>#</div><div><span style=3D"color:rgb(137,221,255)">:NAME</span> <span s=
tyle=3D"color:rgb(137,221,255)">&quot;</span><span style=3D"color:rgb(195,2=
32,141)">JuliaQueue</span><span style=3D"color:rgb(137,221,255)">&quot;</sp=
an>)</div><div>(<span style=3D"color:rgb(247,140,108)">2</span>) <span styl=
e=3D"color:rgb(137,221,255)">-&gt;</span> )lisp (reclaim)</div><br><div>Val=
ue <span style=3D"color:rgb(137,221,255)">=3D</span> NIL</div><div>(<span s=
tyle=3D"color:rgb(247,140,108)">2</span>) <span style=3D"color:rgb(137,221,=
255)">-&gt;</span> )lisp <span style=3D"color:rgb(137,221,255)">*</span>jqu=
eue<span style=3D"color:rgb(137,221,255)">*</span></div><br><div>Value <spa=
n style=3D"color:rgb(137,221,255)">=3D</span> #<span style=3D"color:rgb(130=
,170,255)">S</span>(SB<span style=3D"color:rgb(137,221,255)">-</span>CONCUR=
RENCY:QUEUE</div><div><span style=3D"color:rgb(137,221,255)">:HEAD</span> (=
SB<span style=3D"color:rgb(137,221,255)">-</span>CONCURRENCY::<span style=
=3D"color:rgb(137,221,255)">.</span>DUMMY. <span style=3D"color:rgb(137,221=
,255)">&quot;</span><span style=3D"color:rgb(195,232,141)">5256993420949455=
62</span><span style=3D"color:rgb(137,221,255)">&quot;</span></div><div>=C2=
=A0 =C2=A0 <span style=3D"color:rgb(137,221,255)">&quot;</span><span style=
=3D"color:rgb(195,232,141)">3013752598065164257</span><span style=3D"color:=
rgb(137,221,255)">&quot;</span> <span style=3D"color:rgb(137,221,255)">&quo=
t;</span><span style=3D"color:rgb(195,232,141)">1193941380623146742</span><=
span style=3D"color:rgb(137,221,255)">&quot;</span></div><div>=C2=A0 =C2=A0=
 <span style=3D"color:rgb(137,221,255)">&quot;</span><span style=3D"color:r=
gb(195,232,141)">2873853940934582137</span><span style=3D"color:rgb(137,221=
,255)">&quot;</span> . #<span style=3D"color:rgb(247,140,108)">1</span><spa=
n style=3D"color:rgb(137,221,255)">=3D</span>(<span style=3D"color:rgb(137,=
221,255)">&quot;</span><span style=3D"color:rgb(195,232,141)">2342493223442=
167775</span><span style=3D"color:rgb(137,221,255)">&quot;</span>))</div><d=
iv><span style=3D"color:rgb(137,221,255)">:TAIL</span> #<span style=3D"colo=
r:rgb(247,140,108)">1</span>#</div><div><span style=3D"color:rgb(137,221,25=
5)">:NAME</span> <span style=3D"color:rgb(137,221,255)">&quot;</span><span =
style=3D"color:rgb(195,232,141)">JuliaQueue</span><span style=3D"color:rgb(=
137,221,255)">&quot;</span>)</div><div>(<span style=3D"color:rgb(247,140,10=
8)">2</span>) <span style=3D"color:rgb(137,221,255)">-&gt;</span> a<br></di=
v><div>Freeing<span style=3D"color:rgb(137,221,255)">..</span>. <span style=
=3D"color:rgb(247,140,108)">525699342094945562</span></div><div><span style=
=3D"color:rgb(247,140,108)">525699342094945562</span> freed</div><div>Freei=
ng<span style=3D"color:rgb(137,221,255)">..</span>. <span style=3D"color:rg=
b(247,140,108)">3013752598065164257</span></div><div><span style=3D"color:r=
gb(247,140,108)">3013752598065164257</span> freed</div><div>Freeing<span st=
yle=3D"color:rgb(137,221,255)">..</span>. <span style=3D"color:rgb(247,140,=
108)">1193941380623146742</span></div><div><span style=3D"color:rgb(247,140=
,108)">1193941380623146742</span> freed</div><div>Freeing<span style=3D"col=
or:rgb(137,221,255)">..</span>. <span style=3D"color:rgb(247,140,108)">2873=
853940934582137</span></div><div><span style=3D"color:rgb(247,140,108)">287=
3853940934582137</span> freed</div><div>Freeing<span style=3D"color:rgb(137=
,221,255)">..</span>. <span style=3D"color:rgb(247,140,108)">23424932234421=
67775</span></div><div><span style=3D"color:rgb(247,140,108)">2342493223442=
167775</span> freed</div><br><div>(<span style=3D"color:rgb(247,140,108)">2=
</span>) =C2=A0a</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Type: <span style=3D"color:rgb(130,1=
70,255)">Variable</span>(a)</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0Time: <span style=3D"color:rgb(247,140,108)">0.02</=
span> (IN) <span style=3D"color:rgb(137,221,255)">=3D</span> <span style=3D=
"color:rgb(247,140,108)">0.02</span> sec</div><div>(<span style=3D"color:rg=
b(247,140,108)">3</span>) <span style=3D"color:rgb(137,221,255)">-&gt;</spa=
n> )julia <span style=3D"color:rgb(130,170,255)">display</span>(refs)</div>=
<div>IdDict{String, Any} with <span style=3D"color:rgb(247,140,108)">2</spa=
n> entries:</div><div><span style=3D"color:rgb(137,221,255)">&quot;</span><=
span style=3D"color:rgb(195,232,141)">1799302827895858725</span><span style=
=3D"color:rgb(137,221,255)">&quot;</span> <span style=3D"color:rgb(137,221,=
255)">=3D&gt;</span> <span style=3D"color:rgb(247,140,108)">0.0</span><span=
 style=3D"color:rgb(137,221,255)">+</span><span style=3D"color:rgb(247,140,=
108)">0.0im</span></div><div><span style=3D"color:rgb(137,221,255)">&quot;<=
/span><span style=3D"color:rgb(195,232,141)">2441597211547797803</span><spa=
n style=3D"color:rgb(137,221,255)">&quot;</span> <span style=3D"color:rgb(1=
37,221,255)">=3D&gt;</span> <span style=3D"color:rgb(247,140,108)">1.0</spa=
n><span style=3D"color:rgb(137,221,255)">+</span><span style=3D"color:rgb(2=
47,140,108)">0.0im</span></div><br><div>(<span style=3D"color:rgb(247,140,1=
08)">3</span>) <span style=3D"color:rgb(137,221,255)">-&gt;</span></div></d=
iv></div></div>

--000000000000a024f40617ac1718--