Cari, con questa mail apro un long term thread di discussione sulle interfacce jolie.E' un tema a cui tengo molto perché è un punto di forza importante che abbiamo e che dobbiamo rafforzare ancora di più per poter vantare un vantaggio competitivo sulle altre tecnologie.
la regola per noi è: contract first! Cosa che noi facciamo normalmente ma che invece non è affatto scontata per gli altri.
In generale io propongo di aggiungere delle keyword come segue al linguaggio di interfaccia:
native enum MyEnum: string { // può anche essere int, long, double, ecc, se dovesse servire "pippo", "pluto"
"paperino"}
native regex MyRegex: string { max-lenght: 100,
min-length: 0
regex: // una sintassi per le regex}
native range MyRange: int { // può esserci anche double o long [0,10], ]12,13], ]15,24[, [30,32[}
map MyMap { // questo modella le mappe chiave-valore dove la chiave è sempre una stringa mentre il valore può essere un tipo standard jolie. Min e max esprimono il minimo di chiavi ed il massimo di chiavi attese keytype: MyRegex, keytype: MyOrdinaryType, min: 1, max: 10,}
un tipo potrebbe a questo punto diventare
type MyType: void { .field1: MyEnum,
.field2: MyRegex,
.field3: MyRange, .field4: MyMap,
.field4: string,
....}
tra i native aggiungerei oltre a int, long e double, anche decimalper poter esprimere i BigDecimal cosa che al momento non riusciamo a trattare.