On 11/14/2012 03:31 PM, Leandro Lucarella wrote:
Tove, el 14 de November a las 13:55 me escribiste:
struct UserProfile {
    @Id(1) i32 uid;
    @Id(2) string name;
    @Id(3) string blurb;
}

Where Id is "thrift.attributes.Id" or something similar.

well, similar... but beginning with a symbol...

[thrift.attributes.Definition]
struct UserProfile
{
   [1] i32 uid;
   [2] string name;
   [3] string blurb;
}

OK, that's just a good example of convenience of allowing native types, but I
think it is still potentially harmful. What if you pass that struct to another
library that have another meaning attached to int annotations? How could you
tell that library that this particular int annotations is not for it?
...

By not telling it that they are for it. Note that the [thrift.attributes.Definition] annotation is significant.

I mean, it convenient to be able to throw numbers or strings too:

void f() { throw 1; }

void g() { throw "error"; }

int main()
{
        try {
                g();
        } catch (char[] e) {
                writefln(e);
        }
        try {
                f();
        } catch (int i) {
                return i;
        }
        return 0;
}


What he does is more like (but not exactly like):

class ThriftException{
    int x;
    this(int x){ this.x = x; }
}



Reply via email to