D: pay for what you use?

tcak tcak at pcak.com
Thu Feb 13 13:36:59 PST 2014


On Thursday, 13 February 2014 at 21:35:27 UTC, tcak wrote:
> On Thursday, 13 February 2014 at 21:08:01 UTC, Mike wrote:
>> On Thursday, 13 February 2014 at 17:04:44 UTC, Rel wrote:
>>> 4) What compiler is better to use when I want to compile and 
>>> run D on "bare bones" (running code without operating 
>>> system)? Is it DMD? Or is it LDC? Or GDC?
>>
>> What's your target platform (x86, ARM, etc...)?  My platform 
>> is ARM Cortex-M bare metal.
>>
>> DMD doesn't support ARM.  LDC and GDC do to some extent.
>>
>> LCD crashed when I omitted some of the TypeInfo stuff.  A fix 
>> was created [1], but I'm waiting for it to be released in a 
>> binary with an ARM Thumb backend before I test it again.
>>
>> I'm currently using GDC, and am making good progress with it.  
>> I'm using the -fno-emit-moduleinfo switch and consider it 
>> essential for going minimal.
>>
>> My wiki describes everything I'm doing, and many of your 
>> questions will be answered there if you take the time to read 
>> through it [2].
>>
>>
>>> Hello! I really enjoy D and some brilliant concepts in the 
>>> language, like scope(exit) for example. But what I dislike 
>>> about D is the druntime, where each single function depends 
>>> on 100 other functions. I'd like to be able to develop system 
>>> level code in D (like windows drivers or linux kernel modules 
>>> or do osdev), but I can not do it, as D is very dependent on 
>>> the druntime. It would be great if D would have the same "pay 
>>> for what you use" way, as C/C++ do. So I'd like to ask 
>>> several questions:
>>
>> I'm doing just that.  My first step was to build a minimal 
>> "hello world" (no C, no runtime, no phobos).  I created a wiki 
>> post about it [3].  I've expanded on this in my repository's 
>> "hello world", and have been able to get it down to 56 bytes 
>> [4].
>>
>>>
>>> 1) Is it possible to fully disable exceptions? Generally I 
>>> tend not to use exceptions in C++ as well, as exception path 
>>> may take a whole lot of a time. Also returning error codes or 
>>> using something like Expected<T> is more readable in most 
>>> cases. Obviously I'm not going to use exceptions in my code, 
>>> and I won't be linking with code that throws/catches 
>>> exceptions.
>>>
>>
>> I don't think there's any way to prevent you from using 
>> exceptions except by not implementing the specific runtime 
>> hooks, and getting linker errors if you attempt to use 
>> exceptions.  I, for one, fully intend to use exceptions even 
>> though I'm targeting the most minimal of hardware.  I believe 
>> it is a useful idiom if used tastefully.
>>
>>> 2) Is it possible to fully disable runtime type information? 
>>> I understand that being able to get different information 
>>> about object type in the runtime may be very useful, but I've 
>>> never used it. However D compilers do generate RTTI-tables no 
>>> matter what with all class names, module names and etc.
>>
>> I use -ffunction-sections and -fdata-sections, in collusion 
>> with ld's --gc-sections to strip out stuff I'm not using.  
>> This can also be done with a custom linker script.  Again, my 
>> wiki describes this.
>>
>> To get GDC just to compile my code, I've had to stub out the 
>> TypeInfo stuff in object.d/di.  I have a 20 line object.d that 
>> allows me to declare structs [6].  With one or two more stubs, 
>> I can have classes with static properties.  I have the code, 
>> but I haven't checked it in yet.
>>
>> There was an excellent discussion about this on the forum [7].
>>  I encourage you to read it if you're really serious about 
>> your pursuit of this knowledge.
>>
>>>
>>> 3) Is it possible to fully disable garbage collection? 
>>> Sometimes having GC is a good thing, but I'd rather do manual 
>>> memory management or use automatic reference counting instead.
>>>
>>
>> If you throw away the runtime from the start, and pay as you 
>> go from there, yes.  That is the approach I have taken.  I 
>> have a malloc/free [8], and as far as I know its the only 
>> malloc written in D.  It's naive and not well tested, but 
>> working for what I need so far.
>>
>> I believe this could be used with the gcstub [14], but I 
>> haven't made it that far yet.
>>
>>>
>>> 5) Does anyone try to make a tiny druntime library? Did it 
>>> work out well for you? And can I have a look at it?
>>>
>>
>> Timo Sintonen's minlibd [9]
>> Vladimir Panteleev's SlimD [10]
>> Adam D. Ruppe's minimal D [11]
>> Daniel Murphy's microD [12]
>> Mine, which is hardly even started [13]
>>
>> Are there others?  Please let me know by posting a response.
>>
>>> PS I know that these kind of questions come out in the D 
>>> community from time to time, but there's a lot of things I'd 
>>> like to discuss on this subject, so I decided to make a new 
>>> thread... sorry...
>>
>> I wouldn't mind seeing more discussion and participation a 
>> bare metal D effort.  As you can tell by my verbose posts, I'm 
>> quite excited about it.
>>
>> Mike
>>
>> [1] https://github.com/ldc-developers/ldc/issues/551
>> [2] 
>> https://github.com/JinShil/D_Runtime_ARM_Cortex-M_study/wiki/1.0-Introduction
>> [3] 
>> http://wiki.dlang.org/Extremely_minimal_semihosted_%22Hello_World%22
>> [4] 
>> https://github.com/JinShil/D_Runtime_ARM_Cortex-M_study/wiki/1.1---Hello,-World! 
>> (watch the ending '!')
>> [5] http://wiki.dlang.org/Runtime_Hooks
>> [6] 
>> https://github.com/JinShil/D_Runtime_ARM_Cortex-M_study/blob/structs/source/object.d
>> [7] 
>> http://forum.dlang.org/post/jynxfglpulguvqbivrms@forum.dlang.org
>> [8] 
>> https://github.com/JinShil/D_Runtime_ARM_Cortex-M_study/blob/master/source/memory.d
>> [9] https://bitbucket.org/timosi/minlibd
>> [10] https://github.com/CyberShadow/SlimD
>> [11] http://arsdnet.net/dcode/minimal.zip
>> [12] https://github.com/yebblies/dmd/tree/microd
>> [13] https://github.com/JinShil/D_Runtime_ARM_Cortex-M_study
>> [14] 
>> https://github.com/D-Programming-Language/druntime/blob/master/src/gcstub/gc.d
>
> I would like support for PIC 8bit/16bit/32bit as well, though 
> probably that will never happen. At least for 8bit and 16bit 
> PIC microprocessors.

* I meant PIC microcontrollers.


More information about the Digitalmars-d mailing list