Migrating dmd to D?

js.mdnq js_adddot+mdng at gmail.com
Sun Mar 3 07:51:00 PST 2013


On Sunday, 3 March 2013 at 12:05:00 UTC, jerro wrote:
>> Really what is needed is gc arrays and ngc arrays as well as 
>> other essential features. e.g., gc arrays would not be part of 
>> the core spec while ngc arrays would.
>
> You can already use slices without a gc, like this:
>
> T[] allocate(T)(int n)
> {
>     return (cast(T*) malloc(T.sizeof * n))[0 .. n];
> }
>
> void deallocate(T)(ref T[] a)
> {
>     free(a.ptr)
>     a = null;
> }
>
> Of course, you can not append to such slices or expand them 
> without a GC. It would be useful to have a @nogc flag which 
> would result in an error if a feature that needs a GC was used.
>
> I think adding @nogc would be better than defining a "core 
> spec", because most D code does not need that feature. If we 
> add a a @nogc flag, the people that don't need it can just 
> ignore its existence and do not need to learn about it, but if 
> we call the subset of D that doesn't use a GC a "core spec", 
> people will feel that's something they need to learn, which 
> will make the language seem more complex.

A core spec is not just about gc features. It was also about 
migrating the compiler from C++ to D. The core spec can provide 
many useful benefits but the gc shouldn't be one of them.

What happens when you append to a slice using manual allocation? 
Does the compiler throw an error or just crash and burn? A core 
language spec for a self-compiler is required and because it must 
be gc agnostic to work across a multitude of platforms(most to 
work well with embedded apps or for performance reasons) one 
needs a way to signify this(hence marking modules as being 
gc-free and having ngc constructs).

For example, by marking a module as core it can only use other 
core modules. Since a core module can't use the gc any all arrays 
are ngc and gc operations on them would be in error. This also 
helps when migrating a module from non-core to core once you get 
the module compiled you know it is gc free(as well as other 
things).








More information about the Digitalmars-d mailing list