ArrayBuffers are very special because they are part of ECMAScript. We use unsigned for the length, because once upon a time, that would have been the right type; these days the right type would be a 53-bit integer. So, size_t would be wrong. I believe that ArrayBuffers should be changed to use a very special size type; probably it wouldn't even be a primitive type but a class that carefully checked that you never overflowed 53 bits.
-Filip > On Nov 19, 2014, at 12:54 PM, Alexey Proskuryakov <a...@webkit.org> wrote: > > > This is not exactly about Vector, but if one uses > FileReader.prototype.readAsArrayBuffer() on a large file, I think that it > overflows ArrayBuffer. WebKit actually crashes when uploading multi-gigabyte > files to YouTube, Google Drive and other similar services, although I haven't > checked whether it's because of ArrayBuffers, or because of a use of > int/unsigned in another code path. > > I think that we should use size_t everywhere except for perhaps a few key > places where memory impact is critical (and of course we need explicit checks > when casting down to an unsigned). Or perhaps the rule can be even simpler, > and unsigned may never be used for indices and sizes, period. > > - Alexey > > > 19 нояб. 2014 г., в 12:32, Filip Pizlo <fpi...@apple.com > <mailto:fpi...@apple.com>> написал(а): > >> Whatever we do, the clients of Vector should be consistent about what type >> they use. I'm actually fine with Vector internally using unsigned even if >> the API uses size_t, but right now we have lots of code that uses a mix of >> size_t and unsigned when indexing into Vectors. That's confusing. >> >> If I picked one type to use for all Vector indices, it would be unsigned >> rather than size_t. Vector being limited to unsigned doesn't imply 4GB >> unless you do Vector<char>. Usually we have Vectors of pointer-width >> things, which means 32GB on 64-bit systems (UINT_MAX * sizeof(void*)). Even >> in a world where we had more than 32GB of memory to use within a single web >> process, I would hope that we wouldn't use it all on a single Vector and >> that if we did, we would treat that one specially for a bunch of other >> sensible reasons (among them being that allocating a contiguous slab of >> virtual memory of that size is rather taxing). So, size_t would buy us >> almost nothing since if we had a vector grow large enough to need it, we >> would be having a bad time already. >> >> I wonder: are there cases that anyone remembers where we have tried to use >> Vector to store more than UINT_MAX things? Another interesting question is: >> What's the largest number of things that we store into any Vector? We could >> use such a metric to project how big Vectors might get in the future. >> >> -Filip >> >> >>> On Nov 19, 2014, at 12:20 PM, Chris Dumez <cdu...@apple.com >>> <mailto:cdu...@apple.com>> wrote: >>> >>> Hi all, >>> >>> I recently started updating the WTF::Vector API to use unsigned types >>> instead of size_t [1][2], because: >>> - WTF::Vector is already using unsigned type for size/capacity internally >>> to save memory on 64-bit, causing a mismatch between the API and the >>> internal representation [3] >>> - Some reviewers have asked me to use unsigned for loop counters iterating >>> over vectors (which looks unsafe as the Vector API, e.g. size(), returns a >>> size_t). >>> - I heard from Joseph that this type mismatch is forcing us (and other >>> projects using WTF) to disable some build time warnings >>> - The few people I talked to before making that change said we should do it >>> >>> However, Alexey recently raised concerns about this change. it doesn't >>> "strike him as the right direction. 4Gb is not much, and we should have >>> more of WebKit work with the right data types, not less.”. >>> I did not initially realize that this change was controversial, but now >>> that it seems it is, I thought I would raise the question on webkit-dev to >>> see what people think about this. >>> >>> Kr, >>> -- >>> Chris Dumez - Apple Inc. >>> Cupertino, CA >>> >>> >>> [1] http://trac.webkit.org/changeset/176275 >>> <http://trac.webkit.org/changeset/176275> >>> [2] http://trac.webkit.org/changeset/176293 >>> <http://trac.webkit.org/changeset/176293> >>> [3] http://trac.webkit.org/changeset/148891 >>> <http://trac.webkit.org/changeset/148891> >>> _______________________________________________ >>> webkit-dev mailing list >>> webkit-dev@lists.webkit.org <mailto:webkit-dev@lists.webkit.org> >>> https://lists.webkit.org/mailman/listinfo/webkit-dev >>> <https://lists.webkit.org/mailman/listinfo/webkit-dev> >> >> _______________________________________________ >> webkit-dev mailing list >> webkit-dev@lists.webkit.org <mailto:webkit-dev@lists.webkit.org> >> https://lists.webkit.org/mailman/listinfo/webkit-dev > >
_______________________________________________ webkit-dev mailing list webkit-dev@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-dev