Hello Igor,
thanks for the quick response!
Am 20.06.2011 um 14:25 schrieb Igor Peshansky:
> Hi, Manfred,
>
> DistArray is a generic type. Thus, you always have to specify the
> appropriate type arguments when referring to an instance of that type
> (like in the formals for printDistArray()).
>
> All generic types in X10 are invariant.
> So, a DistArray[Int{c}]
> cannot be assigned to a variable (or passed into a formal) of type
> DistArray[Int] (the constraint makes it a different type). Because
> you did not specify it explicitly, the type of the elements in the
> array is actually inferred from the initializer argument of
> DistArray.make() (which is a literal "0").
Ok, this sounds reasonable.
However, after reading through the language specification again
I could not directly find the info about the invariance of generic types
and the resulting implications for using them as parameter types.
Maybe this could be explained a little bit more extensively.
> To fix this, you can do one of three things:
> (a) force the element
> type when constructing the array, e.g.,
> DistArray.make[Int](distribution, 0),
> (b) make the formal type of
> printDistArray() match the inferred type of the argument, i.e.,
> printDistArray(distArray:DistArray[Int{self==0}]),
> or (c) make
> printDistArray generic and let the system infer the type, e.g., def
> printDistArray[U](distArray: DistArray[U]) { ... }.
I went with suggestion c) because the array is not always initialised with
Integers.
Now everything is working great.
Thanks again,
Manfred
> Hope this helps,
> Igor
>
> 2011/6/20 Kröhnert, Manfred <[email protected]>:
>> Hello all,
>>
>> I am using the current X10 v2.2 release on OS X 10.6.7 with the C++ backend
>> and it gives me trouble with the following code:
>>
>> -------------------------------------------------
>> import x10.array.DistArray;
>>
>> public class Test {
>> public static def main(args: Array[String]) {
>> val region = 0 .. 79;
>>
>> val distribution = Dist.makeBlock(region);
>> val array = DistArray.make(distribution, 0);
>> printDistArray(array);
>> }
>>
>> static def printDistArray(distArray: DistArray) : void
>> {
>> Console.OUT.println(distArray);
>> }
>> }
>> -------------------------------------------------
>>
>> Compiling it produces the following error:
>>
>> Test.x10:9: No valid method call found for call in given type.
>> Call: printDistArray(x10.array.DistArray[x10.lang.Int])
>> Type: Test
>> Test.x10:12: Type is missing parameters.
>> Type: x10.array.DistArray
>> Expected parameters: [T]
>> 2 errors.
>>
>>
>> Changing the parameter type to 'distArray: DistArray[Int]' produces this
>> compiler error:
>>
>> Test.x10:9: Parameter 0 does not have the expected base type.
>> Formal base type: x10.array.DistArray[x10.lang.Int]
>> Actual base type: x10.array.DistArray[x10.lang.Int{self==0,
>> horizontalDist.region.zeroBased==true, horizontalDist.region.rect==true,
>> horizontalDist.region.rank==1, horizontalDist.region!=null,
>> x10.array.PlaceGroup.WORLD!=null, region.zeroBased==true, region.min==0,
>> region.max==79, region!=null}]{self==h_sum, h_sum.dist==horizontalDist,
>> h_sum!=null, horizontalDist.region.zeroBased==true,
>> horizontalDist.region.rect==true, horizontalDist.region.rank==1,
>> horizontalDist.region!=null, x10.array.PlaceGroup.WORLD!=null,
>> region.zeroBased==true, region.min==0, region.max==79, region!=null}
>> (method static Test.printDistArray(arg93:
>> x10.array.DistArray[x10.lang.Int]))
>> 1 error.
>>
>>
>> And my last try was to use the type Any like this 'distArray:
>> DistArray[Any]' which also results in an error:
>>
>> Test.x10:9: No valid method call found for call in given type.
>> Call: printDistArray(x10.array.DistArray[x10.lang.Int])
>> Type: Test
>> 1 error.
>>
>> Can anybody give me a hint on how to achieve this correctly or is this a bug
>> in X10 somehow?
>> I would have expected the code to work as it is given in the first place.
>>
>> Best,
>> Manfred
>
> ------------------------------------------------------------------------------
> EditLive Enterprise is the world's most technically advanced content
> authoring tool. Experience the power of Track Changes, Inline Image
> Editing and ensure content is compliant with Accessibility Checking.
> http://p.sf.net/sfu/ephox-dev2dev
> _______________________________________________
> X10-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/x10-users
------------------------------------------------------------------------------
EditLive Enterprise is the world's most technically advanced content
authoring tool. Experience the power of Track Changes, Inline Image
Editing and ensure content is compliant with Accessibility Checking.
http://p.sf.net/sfu/ephox-dev2dev
_______________________________________________
X10-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/x10-users