It's not just about the cost of allocation; heap accesses are incredibly slow compared to stack accesses.
> On May 30, 2017, at 5:36 PM, Jean-Daniel via swift-evolution > <[email protected]> wrote: > > >> Le 30 mai 2017 à 12:42, Charlie Monroe via swift-evolution >> <[email protected]> a écrit : >> >> There was someone a few weeks ago trying to port his Go game to Swift from >> (I believe) C++ and found out that the lack of fixed-size arrays was causing >> the move-computing algorithm to slow down significantly. >> >> This is due to fixed arrays being able to live on stack, while "normal >> Array" is dynamically allocated on heap, etc. > > Really ? Isn’t it due to the value semantic of swift arrays ? > > If this is the former, its algorithm can probably be tweak to reuse the array > and require less allocations. > > Unless if you algorithm is eager in memory allocation/deallocation, you > shouldn't get a significant difference between static array and dynamic array. > > >> 10 000 may have been David's exageration, but imagine trying to form a >> chessboard using tuples - aside from the fact that you can't iterate over >> the tuple, the tuple type would be huge - instead of ChessPiece[8][8] (or >> similar syntax), you get: >> >> ((ChessPiece, ChessPiece, ChessPiece, ChessPiece, ChessPiece, ChessPiece, >> ChessPiece, ChessPiece), >> (ChessPiece, ChessPiece, ChessPiece, ChessPiece, ChessPiece, ChessPiece, >> ChessPiece, ChessPiece), >> (ChessPiece, ChessPiece, ChessPiece, ChessPiece, ChessPiece, ChessPiece, >> ChessPiece, ChessPiece), >> (ChessPiece, ChessPiece, ChessPiece, ChessPiece, ChessPiece, ChessPiece, >> ChessPiece, ChessPiece), >> (ChessPiece, ChessPiece, ChessPiece, ChessPiece, ChessPiece, ChessPiece, >> ChessPiece, ChessPiece), >> (ChessPiece, ChessPiece, ChessPiece, ChessPiece, ChessPiece, ChessPiece, >> ChessPiece, ChessPiece), >> (ChessPiece, ChessPiece, ChessPiece, ChessPiece, ChessPiece, ChessPiece, >> ChessPiece, ChessPiece), >> (ChessPiece, ChessPiece, ChessPiece, ChessPiece, ChessPiece, ChessPiece, >> ChessPiece, ChessPiece)) >> >> And the practical use isn't just games - just think of any fixed-size >> matrices. >> >>> On May 30, 2017, at 12:25 PM, Pavol Vaskovic via swift-evolution >>> <[email protected]> wrote: >>> >>>> On Tue, May 30, 2017 at 7:51 AM, David Sweeris <[email protected]> wrote: >>>> >>>> `(Int, Int, Int, Int)` isn't *that* horrible compared to "[Int x 4]", but >>>> would you want to replace "[Int8 x 10000]" with the multipage-long tuple >>>> equivalent? >>> >>> 😳 >>> It would be really helpful to my understanding, if you spoke about a >>> practical use case. This reads as a contrived counterexample to me… >>> >>> If your type really has 10 000 values in it, why does it have to be static, >>> why doesn't normal Array fit the bill? >>> >>> --Pavol >>> _______________________________________________ >>> swift-evolution mailing list >>> [email protected] >>> https://lists.swift.org/mailman/listinfo/swift-evolution >> >> _______________________________________________ >> swift-evolution mailing list >> [email protected] >> https://lists.swift.org/mailman/listinfo/swift-evolution > > _______________________________________________ > swift-evolution mailing list > [email protected] > https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
