Hi, I think the hurdle for a C++ API is a lot lower, and I can see the usefulness of GetScriptSource as you suggest.
I'm somewhat indifferent about a metadata object. Isn't that a bit like import.meta for modules? Cheers, Yang On Wed, Feb 17, 2021 at 2:43 PM Alex Kodat <ako...@rocketsoftware.com> wrote: > Thanks Yang, > > Got it on prepareStackTrace -- it's a funny and sketchy beast. getThis and > getFunction are particularly beyond the pale in terms of encapsulation. In > fact, it wouldn't hurt to have a flag to disable the API. > > In hindsight, the right solution is for me to use Exception::GetStackTrace > and the StackFrame class. This does have the ScriptId. I guess I had it in > my head that prepareStackTrace was the preferred API. Clearly not. ;-) > > So changing my proposal to adding a Local<Value> GetScriptSource to > StackFrame. The idea is to prevent storage leaks by eliminating the need to > manage script source external to the internal Script as it's very difficult > to manage the lifetime of the source that way. By providing access to the > source via the internal Script, the lifetime is nicely managed for us. This > seems pretty safe from a security/encapsulation perspective as embedders > can limit access to this information as they see fit. > > It would also be useful to have a Local<Object> GetScriptMetadata (or > GetScriptMemo?) in StackFrame to allow memoization of the script data. The > metadata object could be lazily instantiated and again, would reduce the > risk of storage leaks as the lifetime of the ScriptMetadata would generally > match the lifetime of the internal Script object. UnboundScript and maybe > Module could also have a GetScriptMetadata to provide access to the same > object. > > Might either of these be more palatable? > > On Wednesday, February 17, 2021 at 4:07:31 AM UTC-6 Yang Guo wrote: > >> Generally I would discourage adding more non-spec features to the V8's JS >> implementation. In the long run, these non-spec features cause >> compatibility problems, and often are a security nightmare. They also add >> unnecessary complexity to maintain. The reason we have not removed the >> prepareStackTrace API is because it was introduced more than 10 years ago, >> and so much existing code already relies on it. We would not have >> introduced it today. Providing this non-spec feature is already causing >> unnecessary memory leaks in some cases, and exposing script source as you >> suggest is not going to improve that. >> >> I'm also skeptical about exposing the script ID. We only expose it via >> Chrome DevTools protocol, which is orthogonal to the JS-accessible stack >> trace API. >> >> +Shu-yu Guo to maybe provide another perspective. >> >> I'd encourage you to use the Chrome DevTools protocol to achieve what you >> are trying to do. >> >> Cheers, >> >> Yang >> >> On Wed, Feb 17, 2021 at 5:42 AM Alex Kodat <ako...@rocketsoftware.com> >> wrote: >> >>> In managing a menagerie of scripts from various sources, I've found it >>> useful to enhance CallSite locally to have two additional functions >>> getScriptId and getScriptSource. The former provides a unique identifier >>> for the script that contains the code in the stack frame and the latter >>> access to the script source so one can say extract a sourceMappingUrl or >>> display more than one line around the point of error or show source lines >>> in a stack trace or whatever. While it's possible to maintain a table of >>> source ourselves (the scriptId would be helpful in managing such a table) >>> there's no great way of managing the lifespan of entries in the table so it >>> seems useful to be able to get access to the source via the Script object >>> which manages the lifespan of the source nicely. >>> >>> It was pretty trivial to add these so it doesn't seem like there's a >>> major downside, so does it seem reasonable to submit a CL for this? I'd >>> offer to fix up the doc at https://v8.dev/docs/stack-trace-api if it >>> does, but, of course, I don't have access. >>> >>> A bit more controversial, perhaps, would be that it seems it would be >>> useful to add a lazily instantiated metadata object on (internal) Script >>> objects. A CallSite could have a getScriptMetadata function to provide >>> access to this object. Similarly, maybe a GetScriptMetadata method for the >>> UnboundScript and maybe Module and Function classes would also provide >>> access to the object. The first request for the ScriptMetadata could create >>> an empty JS Object which could then be used by apps to store script >>> metadata such as, for example, a dereferenced sourceMappingURL. Again, we >>> could manage such metadata externally ourselves but it's a major pain >>> managing the lifespan of such metadata, especially as there's no way of >>> having a direct weak reference to the internal Script object -- the closest >>> we can get is a weak reference to the UnboundScript which is a proxy for >>> the SharedFunctionInfo which isn't quite right but might be workable. >>> >>> Does ScriptMetadata sound too crazy/special-purpose or should I try >>> coding it up and submitting a CL and let the reviewers judge if the pain >>> justifies the gain? >>> >>> Thanks >>> >>> -- >>> -- >>> v8-dev mailing list >>> v8-...@googlegroups.com >>> 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 v8-dev+un...@googlegroups.com. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/v8-dev/46c81d5a-e18e-43fe-b1ae-80002cbd56d8n%40googlegroups.com >>> <https://groups.google.com/d/msgid/v8-dev/46c81d5a-e18e-43fe-b1ae-80002cbd56d8n%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >> -- > -- > v8-dev mailing list > v8-dev@googlegroups.com > 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 v8-dev+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/v8-dev/2f6aaef5-4d2f-4c29-9df6-0ed133e0143fn%40googlegroups.com > <https://groups.google.com/d/msgid/v8-dev/2f6aaef5-4d2f-4c29-9df6-0ed133e0143fn%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- -- v8-dev mailing list v8-dev@googlegroups.com 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 v8-dev+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/v8-dev/CAFSTc_hQr8ZYT%2Bsxuc%2BMdQag%3DLFSFLY9FANJ5VUtQe8PiL9uPw%40mail.gmail.com.