Le 16/05/2012 22:19, Alex Rønne Petersen a écrit :
On 16-05-2012 22:00, deadalnix wrote:
Le 16/05/2012 12:10, Timon Gehr a écrit :
On 05/16/2012 12:29 AM, deadalnix wrote:
Le 15/05/2012 20:34, Alex Rønne Petersen a écrit :
Besides, this is probably not going to change anyway. We're
focusing on
stabilizing the language, not changing it.
This always have been a design mistake to auto cast array in pointers.
This is silent fallback to usafe world, and what we want to avoid.
Getting a pointer to the beginning of a zero-terminated string literal
is perfectly safe.
This has no benefit because using .ptr isn't really complex and make
the
transition obvious.
This has been raised many time in the past as being an issue, and it
fit
nicely here.
This is a compile time error:
int[] arr;
int* p=arr;
What exactly are you asking for?
void foo(const(char)*);
foo("bar");
isn't .
And shouldn't be. Working with C APIs or just working on druntime would
be a nightmare.
Having \0 terminated string in D were it has no usage is quite dumb.
What you don't seem to get is that it actually has usage.
I understand that. I want to propose something more subtle.
Array in D are already typed according to what the are assigned. int[]
foo = [1, 2] and immutable(int)[] = [1, 2] are both possible). Isn't it
possible to \0 terminate string chen they are used as char* and not when
they are used as array ?
Theoretically, yes, practically, not really.
void myLog(string msg)
{
printf(msg);
}
This is exactly why array shouldn't fallback into pointer silently.
Your code here is flawed and unsafe. You NEED a toStringz here.