excel-d v0.0.1 - D API to write functions callable from Excel

Ali Çehreli via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Tue Apr 25 15:21:33 PDT 2017


On 04/25/2017 01:20 PM, jmh530 wrote:
 > On Monday, 24 April 2017 at 21:59:34 UTC, Atila Neves wrote:
 >>
 >> Enter the `@Dispose` UDA:
 >>
 >
 > I found this really interesting.
 >
 > Am I understanding the process correctly: apply map to numbers, allocate
 > and return a new array in D, copy it to Excel, call dispose to free the
 > D memory.

Yes.

 > So if you instead used something like
 > scope(exit) Mallocator.instance.dispose(dArg);
 > then Excel wouldn't be able to use it because it would be freed by D
 > already?

Correct.

 > It seems like your @Dispose UDA could have many uses outside of just the
 > excel-d package. If I understand correctly, it's similar to C++ smart
 > pointers, but not exactly the same. I'm still not sure I totally grok it
 > though.

Just by guessing, what we don't see here is that there is a wrapping 
layer that does the copying. Disposal logic is called by that layer. So, 
your scope(exit) takes place at a higher layer. Here is 
made-up-pseudo-code by me. :)

TypeForExcel wrapper_actually_called_by_excel(/* ... */) {
     /* ... */

     double[] ret_from_your_function = FuncReturnArrayNoGc(/* ... */);
     scope (exit) disposal_function(ret_from_your_function);

     TypeForExcel arg_to_excel = copy_for_excel(ret_from_your_function);
     return arg_to_excel;
}

Ali



More information about the Digitalmars-d-announce mailing list