Hi,
Yes, an array of <T> becomes an Array<Dynamic>, and Array<Dynamic> becomes Dynamic, so data is "Dynamic". So this is the problem.
Consider that you would need completely different implementations for Array<Bool> and Array<SomeObject>, since the "sizeof element" would be different.
Generic (dynamic) code is never going to be fast, so the "unsafe" option is not going to save anything.
If you knew that you were only dealing with objects, not Bool/Int/etc, then you may be able to use some @:functionCode to inject a static_cast, but you would have to really really want to.
Hugh