Using ImportC to augment a big C project with D

Carl Sturtivant sturtivant at gmail.com
Wed Feb 21 19:03:52 UTC 2024


On Tuesday, 20 February 2024 at 18:33:42 UTC, Carl Sturtivant 
wrote:
> 1.
> When the resulting executable runs it will have D call C which 
> in turn calls D. In that last D (the D files replacing some C 
> files), if I throw an exception and don't catch it in the D 
> files that replace some C files, will it propagate correctly to 
> the D main function where I can catch it?

My understanding is that [this 
reply](https://forum.dlang.org/post/ur5g46$fmb$1@digitalmars.com) 
indicates that this works. Exceptions thrown by D can be caught 
by D in general in the presence of ImportC.

> 2.
> The C source calls exit() from C's stdlib, and D needs to 
> terminate properly. Throwing an exception and catching it in 
> D's main function seems to be a way to achieve this. What is 
> the best way to deal with exit() ?

So I can simulate C's exit() by throwing an exception and 
catching it in main() as [suggested 
here](https://forum.dlang.org/post/mailman.5856.1600355565.31109.digitalmars-d-learn@puremagic.com).

> 3.
> I want to use D's remarkable Fiber class to reimplement a 
> deterministic stack changing context switch that in the 
> original project is achieved with assembly code on a 
> per-platform basis. This will mean that D's main function will 
> call C which will call D which will effect a context switch. Is 
> there any reason to believe this will work as naively hoped?

I'll have to proceed experimentally, but I'd like to know in 
advance if this is doomed. Anyone?


More information about the Digitalmars-d-learn mailing list