node icon indicating copy to clipboard operation
node copied to clipboard

V8 13.0 Deprecations

Open avivkeller opened this issue 1 year ago • 1 comments

Another PR is updated V8 to 13.0, so I compiled a list of deprecations from that version onward. While they don't need to be fixed immediately, it's important to know they exist.

  • [ ] template<class T> struct v8::FastApiTypedArray

    • Reason: When an API function expects a TypedArray as a parameter, the type in the signature should be v8::Local<v8::Value> instead of FastApiTypedArray<>.
    • Action: Type-check the parameter and convert it to v8::Local<v8::TypedArray> to access the data. Handle the parameter the same way as for a regular API call.
    • Details:
      ‘template<class T> struct v8::FastApiTypedArray’ is deprecated: 
      When an API function expects a TypedArray as a parameter, 
      the type in the signature should be `v8::Local<v8::Value>` instead of FastApiTypedArray<>. 
      The API function then has to type-check the parameter and convert it to a `v8::Local<v8::TypedArray` to access the data. 
      In essence, the parameter should be handled the same as for a regular API call. 
      
  • [ ] v8::Local<v8::Value> v8::Object::GetPrototype() (https://github.com/nodejs/node/pull/55453)

    • Reason: V8 will stop providing access to the hidden prototype (i.e., JSGlobalObject).
    • Action: Use GetPrototypeV2() instead.
    • Reference: crbug.com/333672197
    • Details:
      ‘v8::Local<v8::Value> v8::Object::GetPrototype()’ is deprecated: 
      V8 will stop providing access to hidden prototype (i.e. JSGlobalObject). 
      Use GetPrototypeV2() instead. See http://crbug.com/333672197. 
      
  • [ ] v8::Maybe<bool> v8::Object::SetPrototype(v8::Local<v8::Context>, v8::Local<v8::Value>) (https://github.com/nodejs/node/pull/55453)

    • Reason: V8 will stop providing access to the hidden prototype (i.e., JSGlobalObject).
    • Action: Use SetPrototypeV2() instead.
    • Reference: crbug.com/333672197
    • Details:
      ‘v8::Maybe<bool> v8::Object::SetPrototype(v8::Local<v8::Context>, v8::Local<v8::Value>)’ is deprecated: 
      V8 will stop providing access to hidden prototype (i.e. JSGlobalObject). 
      Use SetPrototypeV2() instead. See http://crbug.com/333672197. 
      
  • [ ] v8::SnapshotCreator::SnapshotCreator(v8::Isolate*, const intptr_t*, const v8::StartupData*, bool) (#55337)

    • Reason: Deprecated in favor of a version that passes CreateParams.
    • Action: Use the version that passes CreateParams.
    • Details:
      ‘v8::SnapshotCreator::SnapshotCreator(v8::Isolate*, const intptr_t*, const v8::StartupData*, bool)’ is deprecated: 
      Use the version that passes CreateParams instead. 
      
  • [ ] v8::String::Value::Value(v8::Isolate*, v8::Local<v8::Value>) (#55458)

    • Reason: Prefer alternatives for better performance.
    • Action: Use String::ValueView if possible, or use string->Write to a buffer if not.
    • Details:
      ‘v8::String::Value::Value(v8::Isolate*, v8::Local<v8::Value>)’ is deprecated: 
      Prefer using String::ValueView if you can, or string->Write to a buffer if you cannot. 
      
  • [ ] void v8::Isolate::AttachCppHeap(v8::CppHeap*)

    • Reason: Set the heap on Isolate creation.
    • Action: Use CreateParams instead.
    • Details:
      ‘void v8::Isolate::AttachCppHeap(v8::CppHeap*)’ is deprecated: 
      Set the heap on Isolate creation using CreateParams instead. 
      
  • [ ] void v8::Isolate::DetachCppHeap()

    • Reason: Set the heap on Isolate creation.
    • Action: Use CreateParams instead.
    • Details:
      ‘void v8::Isolate::DetachCppHeap()’ is deprecated: 
      Set the heap on Isolate creation using CreateParams instead. 
      

avivkeller avatar Oct 18 '24 23:10 avivkeller

* [ ]  **`v8::SnapshotCreator::SnapshotCreator(v8::Isolate*, const intptr_t*, const v8::StartupData*, bool)`**
  
  * **Reason**: Deprecated in favor of a version that passes `CreateParams`.
  * **Action**: Use the version that passes `CreateParams`.
  * **Details**:
    ```
    ‘v8::SnapshotCreator::SnapshotCreator(v8::Isolate*, const intptr_t*, const v8::StartupData*, bool)’ is deprecated: 
    Use the version that passes CreateParams instead. 
    ```

Refs: https://github.com/nodejs/node/pull/55337

richardlau avatar Oct 18 '24 23:10 richardlau

hey @RedYetiDev I am gonna try to have a crack at solving one of these tasks. I am new to node.js and looking forward to making my first contribution.

malinjawi avatar Oct 20 '24 21:10 malinjawi

I am new to node.js and looking forward to making my first contribution.

Be my guest 😃. By the way, for issues specifically labeled to help get you started, see issues with the "good first issue" label.

avivkeller avatar Oct 20 '24 21:10 avivkeller

template<class T> struct v8::FastApiTypedArray

Regarding this one. Both us (me) and Deno has commented on the Chromium issue tracker that we believe this deprecation is problematic. IMHO we should try to stick with it while it still works even if deprecated. The alternative is significantly slower (at least the way we compile V8).

Refs: https://issues.chromium.org/issues/356158110 Refs: https://x.com/rough__sea/status/1819296459071598668 Refs: https://github.com/v8/node/pull/197 Refs: https://github.com/nodejs/node/pull/54087 Refs: https://github.com/nodejs/node/pull/54103

ronag avatar Oct 21 '24 05:10 ronag

@ronag FastApiTypedArray has just been removed from upstream: https://chromium-review.googlesource.com/c/v8/v8/+/5982984

targos avatar Nov 14 '24 06:11 targos

IIUC we should use this instead: https://chromium-review.googlesource.com/c/v8/v8/+/5915615

targos avatar Nov 14 '24 06:11 targos