On Wednesday, 15 June 2016 at 10:08:41 UTC, Ola Fosheim Grøstad wrote:

That's just because your example isn't realistic. A realistic case in Python etc is where you accidentally assign when you wanted to introduce a new symbol. That is not a typing issue.

A realistic D/C++ scenario:

import std.stdio;
// imported from libraries:

auto create_name(string n){
        return ["PersonName",n];
}

auto create_name(const(char)* n){
        import core.stdc.string: strlen;
        auto slice = n[0 .. strlen(n)];
        return slice.dup;
}


void main(){
     auto myname = create_name("Ola");
     writeln("Letter count: ", myname.length);
}

It's much harder to shoot yourself in the foot, though:

`
auto create_name(string n)
{
        return ["PersonName",n];
}

auto create_name(const(char)* n)
{
        import core.stdc.string: strlen;
        auto slice = n[0 .. strlen(n)];
        return slice.dup;
}


void main()
{
  auto myname = create_name("Ola");
  writeln("Letter count: ", myname.length);
  auto p = Person();
  p.firstName = myname;
  writeln(p.firstName);
}

struct Person
{
 char[] firstName;
 char[] secondName;
}
`
Error: cannot implicitly convert expression (myname) of type string[] to char[]

If you have
`
void main()
{
  import std.conv : to;
  auto myname = create_name("Ola");
  writeln("Letter count: ", myname.length);
  auto p = Person();
  p.firstName = to!string(myname);
  writeln(p.firstName);
}

struct Person
{
 string firstName;
 string secondName;
}
`

Then you will convert `string[]` into the string `["PersonName", "Ola"]`, and you have a bug. However, factually, I hardly ever encounter bugs like this, whereas in Python this happens quite a lot once you deal with more than one module.


Reply via email to