Hello, That sounds good to me.
Best regards, Robin > On Oct 20, 2017, at 17:06, Caio Lima <[email protected]> wrote: > > 2017-10-20 12:21 GMT-02:00 Robin Morisset <[email protected] > <mailto:[email protected]>>: > Hello, > > I was planning to start implementing the BigInt proposal as soon as I am done > optimizing tail calls and tweaking the inliner (probably within a month). > > That's good to know. According the plan you sent, it seems that I could work > on item 1 which means implement Parsing, > naive implementation and spec defined operations. After that, there is a > plenty of work to be done on optimization/JIT part, as you mentioned, mainly > because Int64 usage is intended to be used with BigInt. On other steps, I > also could help you, if you are interested as well. So my proposal is: > > I will start the work on implement parsing and first model of BigInt > allocation into JSCell and then go through operations defined by spec, > following naive algorithms. I think I could finish it before you start and > then we could sync in which part we could work. Does it sound like a plan? > > Regards, > Caio. > > My plan was to proceed in several steps: > First a very naive implementation, treating them as fairly new kind of > JSCell, with all the data in the butterfly; and very simple algorithms for > the arithmetic. > Implement some interesting benchmark, probably a port of some crypto library > + some miscellaneous arithmetic. > Inline some of the data in the cell itself when we can reasonably estimate > its size (takes us from 2 to 1 indirection in the common case). > For “small” big ints, put them directly in the JSValue, through some encoding > trick. Huge gain for most code, but likely to be very tricky in my opinion > Use fancy, state-of-the art algorithms/operations for the arithmetic > operations. This should probably not happen earlier, to avoid baking in the > location of the data. > Add an optimization phase that turns big ints into normal ints when > static/dynamic analysis tells us they are guaranteed to be small. This should > happen last so it can be benchmarked in realistic conditions since we are not > sure it will be a win. > I am not opposed to the idea of reusing a library, but I am not sure how to > make sure it will let us put the data wherever we need (with special cases > such as small bigInts fitting inside a single JSValue). > > Best regards, > Robin > >> On Oct 20, 2017, at 06:49, Jordi Montes <[email protected] >> <mailto:[email protected]>> wrote: >> >> Hello Filip, >> >> I spent some time looking for the perfect library to implement BigInts in JS >> some months ago and I did not find any match. Many of the C++ librearies >> have or a license problem (GMP, MPFR..), or need the size of the integer at >> compile time (ttmath,..) or two indirections header + the number >> (libtommath). >> >> I looked for how other programs with GC implemented it. I checked in detail >> how Python (CPython) had it implemented and they have something like: >> >> >> struct _longobject { >> PyObject_VAR_HEAD >> digit ob_digit[1]; >> }; >> >> So no indirection is needed to interact with the number itself. (Link to >> longObject in CPython >> <https://github.com/python/cpython/blob/6f0eb93183519024cb360162bdd81b9faec97ba6/Include/longintrepr.h>) >> >> >> As Dan pointed out, I started to implement a library based in >> libtommath/CPython BigInts but it is in an early stage. Mozilla is using GMP >> because they do not have any license problem but the other browsers do. My >> advice would be to start with the V8's implementation as you said. >> >> >> Let me know if you need help with anything else, I am glad to help :) >> >> >> P.S.: I was not subrscibed toOn 20 October 2017 at 06:44, Jordi Montes >> <[email protected] <mailto:[email protected]>> wrote: >> Hello Filip, >> >> I spent some time looking for the perfect library to implement BigInts in JS >> some months ago and I did not find any match. Many of the C++ librearies >> have or a license problem (GMP, MPFR..), or need the size of the integer at >> compile time (ttmath,..) or two indirections header + the number >> (libtommath). >> >> I looked for how other programs with GC implemented it. I checked in detail >> how Python (CPython) had it implemented and they have something like: >> >> >> struct _longobject { >> PyObject_VAR_HEAD >> digit ob_digit[1]; >> }; >> >> So no indirection is needed to interact with the number itself. (Link to >> longObject in CPython >> <https://github.com/python/cpython/blob/6f0eb93183519024cb360162bdd81b9faec97ba6/Include/longintrepr.h>) >> >> >> As Dan pointed out, I started to implement a library based in >> libtommath/CPython BigInts but it is in an early stage. Mozilla is using GMP >> because they do not have any license problem but the other browsers do. My >> advice would be to start with the V8's implementation as you said. >> >> >> Let me know if you need help with anything else, I am glad to help :) >> >> >> Jordi. >> >> the mailing list, sorry if you recived this message more than once. >> >> Jordi. >> >> >> >> >> On 19 October 2017 at 15:32, Filip Pizlo <[email protected] >> <mailto:[email protected]>> wrote: >> Seems like V8’s is an ok place to start. Maybe all you’d have to do is >> remove the accurate GC artifacts (Handle and such). >> >> -Filip >> >> > On Oct 19, 2017, at 2:31 AM, Daniel Ehrenberg <[email protected] >> > <mailto:[email protected]>> wrote: >> > >> > On 2017-10-19 03:18, Filip Pizlo wrote: >> >>> On Oct 18, 2017, at 5:50 PM, Caio Lima <[email protected] >> >>> <mailto:[email protected]>> wrote: >> >>> >> >>> Hi WebKittens. >> >>> >> >>> I’m planning to start implement JS BigInt proposal on JSC, however I >> >>> would like to sync with you the way you are planning to implement such >> >>> feature. >> >>> >> >>> Right now, I’m thinking in implement BigInt operations into C++ >> >>> (possibly on WTF?) and make the JSBigInt use this implementation. >> >> >> >> We need something GC-optimized from the start since that will >> >> determine a lot of the details. So, I don’t think that a WTF >> >> implementation is appropriate. It should be a JSCell from day one. >> >> >> >>> As I >> >>> have checked with some other implementors, some of them are going to >> >>> use libgmp (SpiderMonkey case), but I don’t think its license (GPLv2) >> >>> aligns with WebKit’s license and I heard that V8 is implementing their >> >>> BigInt lib as well. By now, I’m thinking in implement a proof of >> >>> concept and then, optimize the BigInt lib part. So, what I would like >> >>> to collect from you is: Is there any problem start work on that >> >>> feature? >> >> >> >> We should do a GC-optimized bigint. If there was a great library that >> >> had the right license, we could port it to allocate using our GC. I >> >> don’t have a strong view on whether we should write our own from >> >> scratch or use somebody else’s as a starting point (so long as the >> >> license is ok). >> > >> > I'm not sure if there is such a great library. The other programming >> > languages I've seen BigInt implementations in were either based on >> > external libraries and didn't have GC integration, or were based on >> > writing their own BigInt library or forking it from another programming >> > language. I'm not aware of an existing BigInt library which permits GC >> > integration. >> > >> > If GC optimization weren't needed,then libtommath [1] could be a good >> > choice. However, this does not store BigInts in a single contiguous >> > memory region, but rather has a header and discontiguous payload. I >> > believe Jordi Montes (cc'd) is working on a library based on libtommath >> > which would work more like this, but I'm not sure how far along it is, >> > or how well it would integrate into JSC GC. >> > >> > If you want to follow the tradition of forking another library, one >> > option would be to start with V8's. It's relatively new and not quite >> > finished, but the nice thing is that it implements the same operations >> > that will be needed in JSC. [2] >> > >> > [1] http://www.libtom.net/LibTomMath/ <http://www.libtom.net/LibTomMath/> >> > [2] https://github.com/v8/v8/blob/master/src/objects/bigint.cc >> > <https://github.com/v8/v8/blob/master/src/objects/bigint.cc> >> >> >> >> I don’t have any objection to you working on this. >> >> >> >> -Filip >> >> >> >>> >> >>> It is one of the proposals that I’ve made to my Coding Experience at >> >>> Igalia, so I will also have the support of developers from there, >> >>> since they are implementing it on SpiderMonkey and the spec champion >> >>> is also in the team. >> >>> >> >>> Regards, >> >>> Caio. >> >>> _______________________________________________ >> >>> webkit-dev mailing list >> >>> [email protected] <mailto:[email protected]> >> >>> https://lists.webkit.org/mailman/listinfo/webkit-dev >> >>> <https://lists.webkit.org/mailman/listinfo/webkit-dev> >> > >> >> >> _______________________________________________ >> webkit-dev mailing list >> [email protected] <mailto:[email protected]> >> https://lists.webkit.org/mailman/listinfo/webkit-dev >> <https://lists.webkit.org/mailman/listinfo/webkit-dev> > >
_______________________________________________ webkit-dev mailing list [email protected] https://lists.webkit.org/mailman/listinfo/webkit-dev

