Either I'm confused or the gc is

donallen donaldcallen at gmail.com
Thu Oct 22 23:48:22 UTC 2020


On Thursday, 22 October 2020 at 22:05:42 UTC, user1234 wrote:
> On Thursday, 22 October 2020 at 19:38:42 UTC, donallen wrote:
>> On Thursday, 22 October 2020 at 18:54:24 UTC, tsbockman wrote:
>>> On Thursday, 22 October 2020 at 04:02:10 UTC, donallen wrote:
>>>> I tried this. With the gc on, the problem still occurs.
>>>>
>>>> I am working on 64-bit Arch Linux systems, up-to-date, DMD64 
>>>> D Compiler v2.094.0
>>>
>>> Have you tried using a different compiler?
>>
>> Yes -- to no avail:
>> dca at franz:~/Software/newcash_d/verifier$ make
>> cd ../library ; make
>> make[1]: Entering directory 
>> '/home/dca/Software/newcash_d/library'
>> make[1]: Nothing to be done for 'all'.
>> make[1]: Leaving directory 
>> '/home/dca/Software/newcash_d/library'
>> #dmd -g -profile=gc -I=../library -L='-lsqlite3' verifier.d 
>> ../library/lib.o
>> ldc -g -I=../library -L='-lsqlite3' verifier.d ../library/lib.o
>> ../library/lib.o:lib.d:function 
>> _D3std9exception__T7bailOutHTC9ExceptionZQwFNaNfAyamMAxaZv: 
>> error: undefined reference to '_d_throwdwarf'
>> ../library/lib.o:lib.d:function [...]
>
> The errors you get are because you must compile *everything* 
> with ldc (program name should be ldc2 BTW), but the lib.o file 
> is still produced with dmd as it contains DMD specific symbols.

Yes, you are right. I deleted the .o files and rebuilt everything 
with ldc and it linked properly. But it not only produces the 
same error as dmd, but a new one as well (see the last line:

A commodity with the same name as the account does exist. The 
account will be linked to it.
  requires a link to a commodity but doesn't have one.
A commodity with the same name as the account does exist. The 
account will be linked to it.
  requires a link to a commodity but doesn't have one.
A commodity with the same name as the account does exist. The 
account will be linked to it.
  requires a link to a commodity but doesn't have one.
A commodity with the same name as the account does exist. The 
account will be linked to it.
  requires a link to a commodity but doesn't have one.
A commodity with the same name as the account does exist. The 
account will be linked to it.
  requires a link to a commodity but doesn't have one.
A commodity with the same name as the account does exist. The 
account will be linked to it.
  requires a link to a commodity but doesn't have one.
A commodity with the same name as the account does exist. The 
account will be linked to it.
walk_account_tree: child index exceeds n_children
dca at igor:~/Software/newcash_d/verifier$


>
>> I hate to say this, because so much of this project makes 
>> sense to me -- the design of the language, the effort that has 
>> been put into documentation, the helpfulness of the community 
>> -- but I think I have to throw in the towel. I can't spend any 
>> more time on this and it appears that D is just not solid 
>> enough for the work I'm trying to do with it.
>
> Yeah, that's perfectly understandable.
>
> As you've been said in one of the first answer this must be 
> because D GC sees a pointer allocated with malloc, and this 
> pointer looks orphan to the GC as it has no root.
>
> Would you put something that's mallocated in a D struct or in a 
> D array ?
> From the memory point of view the code you have shown is 
> correct (the `fromStringz().dup` is exactly what's must be done 
> to prevent problems when mixin manual and D managed memory) so 
> the origin of the problem really *has* to be somewhere else.




More information about the Digitalmars-d mailing list