D: pay for what you use?
tcak
tcak at pcak.com
Thu Feb 13 13:35:25 PST 2014
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.
More information about the Digitalmars-d
mailing list