Building LDC runtime for a microcontroller

Adam D. Ruppe destructionator at
Wed Sep 16 18:34:05 UTC 2020

On Wednesday, 16 September 2020 at 17:59:41 UTC, Remi wrote:
> I tried to modify the hello.d example from your blog post. It 
> works without changes but when I tried to do a string 
> concatenation

Yeah, concatenation is one of the features that uses druntime, 
and specifically, it is done through TypeInfo. I would actually 
personally skip it if you are doing a minimal custom thing.

If you skip it, you can implement your own type instead of using 
the built-in array concat. You can make a struct with an operator 
overload to look basically the same, and it can give a slice to 
pass to other functions. This is much easier here - no druntime 
code needed and the user code will be clearer that they might 
have to manage the memory. Typical code with normal append tends 
to just assume there's no stomping, that the GC takes care of it, 

> I'm hitting linker errors related to TypeInfo:

But if you do implement it, as of right now, you have to define 
TypeInfo. Which suckssssss because it is super tedious. There's a 
WIP pull request up there with dmd to templatize this which would 
help a lot. But right now it means implementing at least some of 

You'd need the base class TypeInfo, then TypeInfo_a (a == 
"char"), TypeInfo_Array, TypeInfo_Aa (which means "array of 
char"), then finally, TypeInfo_Aya, which is "array of immutable 
char", aka, string.

Once you get enough of that up - and the compiler is picky about 
those right now - then the append operation is 
`_d_arrayappendcTX`, which takes TypeInfo as a param.

Search these names in the druntime source to see their official 
implementations... it is a bit of a beast, which is why I 
recommend actually skipping them if you can. It quickly explodes 
in size and by the time you follow it to its final conclusion, 
you've reimplemented 3/4 of full druntime anyway and might as 
well have just done a port.

More information about the Digitalmars-d-learn mailing list