k47.cz
mastodon twitter RSS
bandcamp explorer 0xDEADBEEF
komentáře článku 

Ceylon Project



Text komentáře


v6ak (2011-05-13 11:32)
K reifikaci: ve Scale jde něco podobného pomocí implicitních parametrů typu Manifest[T]. Na první pohled to sice vypadá krypticky, ale dá se na to zvyknout.


kaja47 (2011-05-15 02:55)
Manifesty dělají skoro přesně to, co jsem měl na mysli. Skoro. Hlavní síla reifikace je, že mám v runtime dostupné hodnoty typových parametrů. Manifest doplní hodnotu typového parametru staticky v době kompilace. Z dostupných statických informací, nemusí reflekovat skutečný runtime typ. V nejlepším případě bude, v horších případech bude vracet předky skutečných typů.

`class X[T: Manifest](v: T) { val m = manifest[T] }`

`val t: Any = 1`

`val x = new X(t)`


v6ak (2011-05-16 07:19)
Tady jsem nepochopil, jak chceš získat něco přesnějšího. Chci-li znát typ z času kompilace, funguje to dobře. A chci-li znát skutečný typ, mám tu getClass, přičemž erasure mi nevadí. Jo, pokud chci znát nějaký typový parametr typového parametru (mám např. A[B[C]] a z A chci zjistit C), pak mi to musí poskytnout třída C, nestačí-li mi znát hodnotu při kompilaci a nemohu-li se spolehnout na nějakou runtime hodnotu.

Co se týče integrace do jazyka, souhlas. Mohlo by to tam být zakomponováno lépe. Ale:
* Pro občasné použití (můj případ) to bohatě stačí.
* Princip tu je, v budoucnu to půjde vylepšit.


píše k47, ascii@k47.cz