Building LDC runtime for a microcontroller
Remi
remigillig at gmail.com
Thu Sep 17 09:53:57 UTC 2020
On Wednesday, 16 September 2020 at 18:34:05 UTC, Adam D. Ruppe
wrote:
> 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, etc.
>
>> 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 it.
>
> 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.
I don't mind implementing enough to get my project running, I
first tried Sebastiaan's WASM druntime port but I realised the
project I'm working on wouldn't need that much to get running so
I thought maybe I can slowly port each part until I get the
project to run.
My problem here is mostly understanding the __initZ symbol and
where it comes from. I mostly want classes and the bare minimum
of std like you did for Tetris in WebAssembly for example. My
project is OpenGL/SDL2 so there's a lot of glue code but just
ruinning a simple example gives me problems I want to understand
first.
I'll probably try what you describe in your "Zero-runtime
classes" actually, and hopefully I can get away without the
string manipulation or replace it with my own version of it.
More information about the Digitalmars-d-learn
mailing list