[−][src]Module jlrs::frame
Frames ensure Julia's garbage collector is properly managed.
Julia data is freed by the GC when it's not in use. You will need to use frames to do things like calling Julia functions and creating new values, this ensures the values created with a specific frame are protected from garbage collection until that frame goes out of scope.
Four different kinds of frames exist; StaticFrame
, DynamicFrame
, NullFrame
, and
AsyncFrame
. The first two of them can be nested and freely mixed. The main difference
between those two is that a StaticFrame
is created with a definite capacity, while a
DynamicFrame
will dynamically grow its capacity whenever a value is created or a function
is called. A StaticFrame
is more efficient, a DynamicFrame
is easier to use. Creating
a nested frame takes no space in the current frame.
The third type, NullFrame
can only be used if you call Rust from Julia. They don't
allocate at all and can only be used to borrow array data.
The final type, AsyncFrame
is only available when you use the async runtime. Structs that
implement JuliaTask
can use this kind of frame in the run
-method. It's essentially a
DynamicFrame
with the additional feature that it can be used to call
Value::call_async
.
Frames have a lifetime, 'frame
. This lifetime ensures that a Value
can only be used as
long as the frame that protects it has not been dropped.
Most functionality that frames implement is defined by the Frame
trait.
Structs
DynamicFrame | A |
FrameIdx | |
NullFrame | A |
Output | An |
StaticFrame | A |