On Tuesday, May 16, 2017 at 9:13:32 PM UTC+8, Jochen Eisinger wrote: > > I'd vote for either importing chromium's base version, or sticking with > the pure C++ version >
I can try to look for more V8 code that can be benefited from Callback<>. In my opinion Callable<>'s syntax is quite different from std::function or function_view. std::function was used in the first case only because they need to use lambda function. Most V8 codes just use raw function pointer directly (e.g: https://cs.chromium.org/chromium/src/v8/src/codegen.h?type=cs&l=97) Docs: https://chromium.googlesource.com/chromium/src/+/master/docs/callback.md > > On Tue, May 16, 2017 at 3:12 PM <[email protected] <javascript:>> wrote: > >> On Tuesday, May 16, 2017 at 9:05:41 PM UTC+8, Camillo Bruni wrote: >>> >>> FYI, the code in src/builtin/builtin-*-gen.cc is no longer shipped and >>> is neither performance critical as it is only used to create the code stubs >>> for the snapshot. >>> >> >> I am aware of that. I noted that in one comment of the CL, but forgot to >> re-mention it again in this thread. src/runtime/runtime-regexp.cc and other >> codes also use a bit of std::function + lambda, so this refactoring will >> still benefit snapshot build slightly. >> >> By the way, Official Node.js binary is built with snapshot or nosnaphot >> configuration? >> >> >>> >>> On Tue, May 16, 2017 at 2:52 PM <[email protected]> wrote: >>> >> On Tuesday, May 16, 2017 at 8:34:43 PM UTC+8, Jochen Eisinger wrote: >>>>> >>>>> Thanks for the summary! >>>>> >>>>> I'm wondering whether you also plan other refactoring work for V8? >>>>> >>>> >>>> No, I only have plan for this refactoring for now. >>>> >>>> >>>>> >>>>> Also, why not just import base::Bind and friends from Chromium? >>>>> >>>> >>>> Chromium's implementation uses many other Chromium-specific features >>>> like weak_ptr<>, we might end up introducing more code than V8 actually >>>> needs. As far as I can see, CodeAssemblerCallback seems to be the only use >>>> case of std::function that might benefit from Chromium's Callable<>. >>>> >>>> >>>>> >>>>> On Tue, May 16, 2017 at 2:04 PM <[email protected]> wrote: >>>>> >>>>>> Hi V8 devs, >>>>>> >>>>>> I saw a few functions in src/builtin/builtin-*-gen.cc and >>>>>> src/code-stub-assembler.h uses quite a few std::function as a parameter, >>>>>> then pass lambda function to these functions to avoid code duplication >>>>>> as >>>>>> much as possible. std::function was used because raw function pointer >>>>>> can't >>>>>> accept lambda function. >>>>>> >>>>>> However, because std::function is really powerful, it comes with a >>>>>> cost in terms of code size and overhead when calling std::function. >>>>>> >>>>>> I am working on introducing function_view to src/base, a lightweight >>>>>> callable reference that can accept normal and lambda function. >>>>>> >>>>>> function_view is adapted from [1] >>>>>> <https://vittorioromeo.info/index/blog/passing_functions_to_functions.html>. >>>>>> >>>>>> I have changed it so that it can be compiled with C++11, which is the >>>>>> minimum compiler support requirement to build Chromium. >>>>>> >>>>>> Note: >>>>>> >>>>>> The callable itself must be alive longer or equal to the life time of >>>>>> function_view object. Therefore, function_view is not a universal >>>>>> replacement for the general-purpose std::function. >>>>>> >>>>>> If you need to store lambda function as class property, std::function >>>>>> is still needed. Use case like [2] >>>>>> <https://cs.chromium.org/chromium/src/v8/src/compiler/code-assembler.h?type=cs&l=601> >>>>>> >>>>>> cannot be replaced with function_view. >>>>>> >>>>>> Chromium do have a very powerful library to store callback at >>>>>> https://cs.chromium.org/chromium/src/base/bind_internal.h >>>>>> (std::function is banned in Chromium). >>>>>> >>>>>> Plan: >>>>>> >>>>>> - Add base::function_view implementation to src/base/functional.h >>>>>> - Convert std::function to base::function_view in >>>>>> src/builtin/builtin-*-gen.cc and maybe other parts of src/* if >>>>>> appropriate. >>>>>> Usage of std::function in test/* will be ignored. >>>>>> - Add documentation. >>>>>> - Add unittest. >>>>>> >>>>>> src/compiler/s390/instruction-selector-s390.cc also uses a lot of >>>>>> std::function + lambda, but because I can't test on this platform >>>>>> myself, I >>>>>> don't feel safe to change it. It looks like dry run does not have bot >>>>>> for >>>>>> s390. >>>>>> >>>>>> WIP CL: >>>>>> >>>>>> https://chromium-review.googlesource.com/c/505653/ >>>>>> >>>>>> [1]: >>>>>> https://vittorioromeo.info/index/blog/passing_functions_to_functions.html >>>>>> [2]: >>>>>> https://cs.chromium.org/chromium/src/v8/src/compiler/code-assembler.h?type=cs&l=601 >>>>>> >>>>>> Sincerely, >>>>>> Rong Jie >>>>>> >>>>> -- >>>> -- >>>> v8-dev mailing list >>>> >>> [email protected] >>> >>> >>>> http://groups.google.com/group/v8-dev >>>> --- >>>> You received this message because you are subscribed to the Google >>>> Groups "v8-dev" group. >>>> >>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to [email protected]. >>> >>> >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>> -- >>> Camillo Bruni | Software Engineer, V8 | Google Germany GmbH | Erika-Mann >>> Str. 33, 80636 München >>> <https://maps.google.com/?q=Erika-Mann+Str.+33,+80636+M%C3%BCnchen&entry=gmail&source=g> >>> >>> Registergericht und -nummer: Hamburg, HRB 86891 | Sitz der >>> Gesellschaft: Hamburg | Geschäftsführer: Matthew Scott Sucherman, Paul >>> Terence Manicle >>> >> -- >> -- >> v8-dev mailing list >> [email protected] <javascript:> >> http://groups.google.com/group/v8-dev >> --- >> You received this message because you are subscribed to the Google Groups >> "v8-dev" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected] <javascript:>. >> For more options, visit https://groups.google.com/d/optout. >> > -- -- v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev --- You received this message because you are subscribed to the Google Groups "v8-dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
