Question on Container Array.

Eugene Wissner belka at caraus.de
Mon Sep 18 12:20:13 UTC 2017


On Monday, 18 September 2017 at 11:47:07 UTC, Vino.B wrote:
> Hi All,
>
>   Can some one explain me on the below question.
>
> Q1: void main (Array!string args) : Why can't we use container 
> array in void main?
>
> Q2: What is the difference between the below?
> insert, insertBack
> stableInsert, stableInsertBack
> linearInsert, stableLinearInsert, stableLinearInsert
>
> Q3: Storing the data in a container array store's the data in 
> memory which is managed by malloc/free, where as operation such 
> as appending data using any of the above nor "~=" is managed by 
> gc, is my understanding correct.
>
>
> From,
> Vino.B

Q1: I think that someone could explain it better, but basically a 
program gets its arguments as an array of C strings. So a C main 
looks like:

main(int argc, char **argv);

To make this a bit safer, D's main works with an array of strings 
instead of pointers. D's main function is called from druntime: 
https://github.com/dlang/druntime/blob/95fd6e1e395e6320284a22f5d19fa41de8e1dcbb/src/rt/dmain2.d#L301. And it wouldn't be that cool to make the druntime depend on phobos and containers. But theoretically it would be possible to make 'void main (Array!string args)' with custom dmd and druntime.

Q2: They are the same for Array. But theoretically they can be 
defined differently. "stable" in "stableInsert" just means that a 
range got from container can be used after changing the 
container. So if you get an Array range with Array[], you can 
still use this range after stableInsert. "insert" is just shorter 
than "insertBack".

Q3: "~=" uses GC only for built-in arrays. You can define your 
own "~=" for containers. "~=" for Array calls insertBack. So it 
will use malloc here.


More information about the Digitalmars-d-learn mailing list