Am Sat, 08 Mar 2014 09:12:48 +0000 schrieb "Mike" <n...@none.com>:
> On Saturday, 8 March 2014 at 08:09:29 UTC, Timo Sintonen wrote: > > > > Why do you need synchronized? Are you building some kind of > > multithreading library? > > I don't need it yet. I'm just exploring features of D and trying > to learn how to implement them. The real problem isn't that I > can't use synchronized, but rather that the compiler is not aware > of my target. I haven't searched through GDC's source code yet, > but I suspect there will be more problems in the near future if > the compiler is not taught about this target. > > Mike > critsecsize looks like a perfect example for configuration parameters which should be provided by the runtime. I'm thinking of a core/config.d module which can be read by the compiler to get information about the runtime: ------------ enum critsecsize = 4; enum hasGC = true; enum hasAArray = true; enum hasUnicodeLoops = true; enum hasExceptions = true; enum ... ------------ I wouldn't be too worried about 'isLinux' in general. Iain moved many of these checks out of the frontend IIRC and rewrote them as checks using Target::. In the end isLinux is just not the correct check if you want to know the critsecsize/used ABI/... grep isLinux */* shows that the only place in GDC where it's ever used is critsecsize. If you grep for isWindows you'll see that these checks are DMD-only and GDC already avoids them. (isWindows affects extern(System) but that's fine). It's similar for in the other cases. So the compiler doesn't really have to be aware you're targeting bare-metal as it shouldn't be tightly coupled to OS anyway. But what you might want is a version identifier for 'BareMetal/NoOS' and 'CortexM3'. If you really need those, file a pull request for this documentation: http://dlang.org/version.html For GDC version identifiers are implemented using these GCC patches: https://github.com/D-Programming-GDC/GDC/blob/master/gcc/d/patches/patch-versym-cpu-4.9.x https://github.com/D-Programming-GDC/GDC/blob/master/gcc/d/patches/patch-versym-os-4.9.x I'm not really sure if CortexM3/M4 versions are easy to add though. General rule: If there's some kind of macro for this in GCC/C/C++ it's easy to add for GDC.