DCV is @nogc nothrow now.
Ferhat Kurtulmuş
aferust at gmail.com
Fri Apr 28 13:50:35 UTC 2023
I have been working on DCV for some time to make it GC-free. GC
is good. However, people have a prejudice against GC, especially
if computer vision is in question. You may probably ask if any
performance improvement has been gained. I don't know at the
moment; with some limited tests (for instance, convolution),
there is no difference, I would say. I tested most of the things
in video loops to detect memory leaks, and I believe we don't
have any. For the rest, I will copy and paste some of the below
information from the GitHub page https://github.com/libmir/dcv.
- In the new API, all functions accept slice shells as Slice!(T*,
N) as input. On the other hand, API functions return RC-allocated
Slice!(RCI!T, N). In this way, ref-counted slices can be passed
to API functions like input.lightScope. It is recommended to
avoid using lightScope in loop bodies; instead, create a
lightScope outside of the loop body before using it. It has a
cost.
- nogc capabilities of mir libraries and dplug:core are utilized
when needed.
- ThreadPool of dplug:core is used in the entire library for
parallelism.
- class Image and class Figure use manual memory management. A
call of function destroyFigures deallocates all allocated figures
automatically. If an Image instance is initialized with non-null
ubyte[] data, this time, the Image instance behaves like a slice
shell, and it does not attempt to deallocate the borrowed data
slice.
- All examples are up-to-date. Please refer to the examples
instead of the docs at the moment.
- There may be bugs in the library. We need more people to test
for bugs. The docs and unittests are outdated.
Please give it a try and destroy me :)
More information about the Digitalmars-d-announce
mailing list