That makes good sense for internal implementation, do you think that class API should also use a custom type, or should it use size_t?
With Vector though, I don't know how we would differentiate code paths that need large allocations from ones that don't. Nearly anything that is exposed as a JS API or deals with external world can hit sizes over 4Gb. That's not out of reach in most scenarios, not even for resources loaded from network. - Alexey 19 нояб. 2014 г., в 13:19, Filip Pizlo <fpi...@apple.com> написал(а): > 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> написал(а): >> >>> 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> 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 >>>> [2] http://trac.webkit.org/changeset/176293 >>>> [3] http://trac.webkit.org/changeset/148891 >>>> >>>> _______________________________________________ >>>> webkit-dev mailing list >>>> 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 >> >> >
_______________________________________________ webkit-dev mailing list webkit-dev@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-dev