V8 রানটাইম ওভারভিউ

গুগল অ্যাপস স্ক্রিপ্ট এবং জাভাস্ক্রিপ্টে, একটি রানটাইম বা রানটাইম এনভায়রনমেন্টে জাভাস্ক্রিপ্ট ইঞ্জিন থাকে যা স্ক্রিপ্ট কোড পার্স ও এক্সিকিউট করে। রানটাইম এই নিয়মগুলো নির্ধারণ করে দেয় যে কীভাবে মেমরি অ্যাক্সেস করা হবে, প্রোগ্রামটি কীভাবে কম্পিউটারের অপারেটিং সিস্টেমের সাথে যোগাযোগ করবে এবং কোন প্রোগ্রাম সিনট্যাক্স বৈধ। প্রতিটি ওয়েব ব্রাউজারে জাভাস্ক্রিপ্টের জন্য একটি রানটাইম এনভায়রনমেন্ট থাকে।

ঐতিহাসিকভাবে, অ্যাপস স্ক্রিপ্ট মোজিলা-র রাইনো জাভাস্ক্রিপ্ট ইন্টারপ্রেটার দ্বারা চালিত হয়ে আসছে। রাইনো যদিও অ্যাপস স্ক্রিপ্টকে ডেভেলপার স্ক্রিপ্ট চালানোর একটি সুবিধাজনক উপায় প্রদান করেছিল, এটি অ্যাপস স্ক্রিপ্টকে একটি নির্দিষ্ট জাভাস্ক্রিপ্ট সংস্করণের ( ES5 ) সাথেও আবদ্ধ করে রেখেছিল। অ্যাপস স্ক্রিপ্ট ডেভেলপাররা রাইনো রানটাইম ব্যবহার করে তৈরি স্ক্রিপ্টে আরও আধুনিক জাভাস্ক্রিপ্ট সিনট্যাক্স এবং ফিচার ব্যবহার করতে পারেন না।

এই সমস্যাটির সমাধান করতে, অ্যাপস স্ক্রিপ্ট এখন V8 রানটাইম দ্বারা সমর্থিত, যা ক্রোম এবং নোড.জেএস-কে শক্তি জোগায়। আধুনিক জাভাস্ক্রিপ্ট সিনট্যাক্স এবং ফিচারগুলোর সুবিধা নিতে আপনার বিদ্যমান স্ক্রিপ্টগুলোকে V8-এ মাইগ্রেট করুন

এই পৃষ্ঠায় V8 দ্বারা সক্ষম করা নতুন বৈশিষ্ট্যগুলো এবং আপনার স্ক্রিপ্টে ব্যবহারের জন্য কীভাবে V8 সক্রিয় করবেন তা বর্ণনা করা হয়েছে। বিদ্যমান স্ক্রিপ্টগুলোকে V8 রানটাইম ব্যবহার করার জন্য স্থানান্তরের ধাপগুলো ‘স্ক্রিপ্ট V8-এ স্থানান্তর’ অংশে বর্ণনা করা হয়েছে।

V8 রানটাইমের বৈশিষ্ট্যসমূহ

যেসব স্ক্রিপ্ট V8 রানটাইম ব্যবহার করে, সেগুলো নিম্নলিখিত বৈশিষ্ট্যগুলোর সুবিধা নিতে পারে:

আধুনিক ECMAScript সিনট্যাক্স

V8 রানটাইম দ্বারা চালিত স্ক্রিপ্টগুলিতে আধুনিক ECMAScript সিনট্যাক্স ব্যবহার করুন। এই সিনট্যাক্সে let , const এবং আরও অনেক জনপ্রিয় বৈশিষ্ট্য অন্তর্ভুক্ত রয়েছে।

V8 রানটাইম ব্যবহার করে আপনি করতে পারেন এমন কিছু জনপ্রিয় সিনট্যাক্স উন্নতির একটি সংক্ষিপ্ত তালিকার জন্য V8 সিনট্যাক্স উদাহরণগুলো দেখুন।

অন্যান্য প্রচলিত জাভাস্ক্রিপ্ট রানটাইমের তুলনায় অ্যাপস স্ক্রিপ্ট ভি৮ রানটাইমের কিছু সীমাবদ্ধতা এবং মূল পার্থক্য রয়েছে। আরও বিস্তারিত জানতে অ্যাপস স্ক্রিপ্ট ভি৮ রানটাইমের সীমাবদ্ধতাগুলো দেখুন।

উন্নত ফাংশন সনাক্তকরণ

V8 ব্যবহৃত স্ক্রিপ্টগুলির জন্য অ্যাপস স্ক্রিপ্ট ফাংশন সনাক্তকরণ উন্নত করা হয়েছে। নতুন রানটাইম এই ফাংশন ডেফিনিশন ফরম্যাটগুলি শনাক্ত করে:

      function normalFunction() {}
      async function asyncFunction() {}
      function* generatorFunction() {}

      var varFunction = function() {}
      let letFunction = function() {}
      const constFunction = function() {}

      var namedVarFunction = function alternateNameVarFunction() {}
      let namedLetFunction = function alternateNameLetFunction() {}
      const namedConstFunction = function alternateNameConstFunction() {}

      var varAsyncFunction = async function() {}
      let letAsyncFunction = async function() {}
      const constAsyncFunction = async function() {}

      var namedVarAsyncFunction = async function alternateNameVarAsyncFunction() {}
      let namedLetAsyncFunction = async function alternateNameLetAsyncFunction() {}
      const namedConstAsyncFunction = async function alternateNameConstAsyncFunction() {}

      var varGeneratorFunction = function*() {}
      let letGeneratorFunction = function*() {}
      const constGeneratorFunction = function*() {}

      var namedVarGeneratorFunction = function* alternateNameVarGeneratorFunction() {}
      let namedLetGeneratorFunction = function* alternateNameLetGeneratorFunction() {}
      const namedConstGeneratorFunction = function* alternateNameConstGeneratorFunction() {}

      var varLambda = () => {}
      let letLambda = () => {}
      const constLambda = () => {}

      var varAsyncLambda = async () => {}
      let letAsyncLambda = async () => {}
      const constAsyncLambda = async () => {}

ট্রিগার এবং কলব্যাক থেকে অবজেক্ট মেথড কল করুন

V8 ব্যবহারকারী স্ক্রিপ্টগুলো এমন সব জায়গা থেকে অবজেক্ট মেথড এবং ক্লাস স্ট্যাটিক মেথড কল করতে পারে, যেখানে আগে থেকেই লাইব্রেরি মেথড কল করা যেত। এই জায়গাগুলোর মধ্যে নিম্নলিখিতগুলো অন্তর্ভুক্ত:

নিম্নলিখিত V8 উদাহরণটি গুগল শিটসে মেনু আইটেম তৈরি করার সময় অবজেক্ট মেথডের ব্যবহার দেখায়:

function onOpen() {
  const ui = SpreadsheetApp.getUi(); // Or DocumentApp, SlidesApp, or FormApp.
  ui.createMenu('Custom Menu')
      .addItem('First item', 'menu.item1')
      .addSeparator()
      .addSubMenu(ui.createMenu('Sub-menu')
          .addItem('Second item', 'menu.item2'))
      .addToUi();
}

const menu = {
  item1: function() {
    SpreadsheetApp.getUi().alert('You clicked: First item');
  },
  item2: function() {
    SpreadsheetApp.getUi().alert('You clicked: Second item');
  }
}

লগ দেখুন

অ্যাপস স্ক্রিপ্ট দুটি লগিং সার্ভিস প্রদান করে: Logger সার্ভিস এবং console ক্লাস। এই দুটি সার্ভিসই একই স্ট্যাকড্রাইভার লগিং সার্ভিসে লগ লেখে।

Logger এবং console লগ দেখতে, স্ক্রিপ্ট এডিটরের উপরে থাকা ‘এক্সিকিউশন লগ’-এ ক্লিক করুন।

কার্য সম্পাদন দেখুন

আপনার স্ক্রিপ্টের এক্সিকিউশন হিস্ট্রি দেখতে, Apps Script প্রজেক্টটি খুলুন এবং বাম দিকে, Executions ক্লিক করুন।

এক্সিকিউশন প্যানেল স্বতন্ত্র অ্যাপস স্ক্রিপ্ট সার্ভিস কলগুলোর টাইমস্ট্যাম্পযুক্ত লগ প্রদান করে না। উপযুক্ত লগ মেসেজ তৈরি করতে console সার্ভিস ব্যবহার করুন। console দিয়ে তৈরি করা সমস্ত লগ এক্সিকিউশন প্যানেলে প্রদর্শিত হয়।

V8 সিনট্যাক্স উদাহরণ

V8 রানটাইম ব্যবহারকারী স্ক্রিপ্টগুলিতে উপলব্ধ জনপ্রিয় সিনট্যাকটিক্যাল বৈশিষ্ট্যগুলির একটি সংক্ষিপ্ত তালিকা নিচে দেওয়া হলো।

let এবং const

let এবং const কীওয়ার্ড ব্যবহার করে যথাক্রমে ব্লক স্কোপ লোকাল ভেরিয়েবল এবং ব্লক স্কোপ কনস্ট্যান্ট নির্ধারণ করা যায়।

// V8 runtime
let s = "hello";
if (s === "hello") {
  s = "world";
  console.log(s);  // Prints "world"
}
console.log(s);  // Prints "hello"

const N = 100;
N = 5; // Results in TypeError
      

তীর ফাংশন

অ্যারো ফাংশন এক্সপ্রেশনের মধ্যে ফাংশন সংজ্ঞায়িত করার একটি সংক্ষিপ্ত উপায় প্রদান করে।

// Rhino runtime
function square(x) {
  return x * x;
}

console.log(square(5));  // Outputs 25
      
// V8 runtime
const square = x => x * x;
console.log(square(5));  // Outputs 25

// Outputs [1, 4, 9]
console.log([1, 2, 3].map(x => x * x));
      

ক্লাস

ক্লাস ইনহেরিটেন্সের মাধ্যমে কোডকে ধারণাগতভাবে সংগঠিত করার একটি উপায় প্রদান করে। V8-এর ক্লাসগুলো মূলত জাভাস্ক্রিপ্টের প্রোটোটাইপ-ভিত্তিক ইনহেরিটেন্সের উপর একটি সিনট্যাক্সগত পরিবর্ধন।

// V8 runtime
class Rectangle {
  constructor(width, height) { // class constructor
    this.width = width;
    this.height = height;
  }

  logToConsole() { // class method
    console.log(`Rectangle(width=${this.width}, height=${this.height})`);
  }
}

const r = new Rectangle(10, 20);
r.logToConsole();  // Outputs Rectangle(width=10, height=20)
      

পুনর্গঠনমূলক কাজ

ডিস্ট্রাকচারিং অ্যাসাইনমেন্ট এক্সপ্রেশন হলো অ্যারে এবং অবজেক্ট থেকে ভ্যালুগুলোকে আলাদা ভেরিয়েবলে রূপান্তর করার একটি দ্রুত উপায়।

// Rhino runtime
var data = {a: 12, b: false, c: 'blue'};
var a = data.a;
var c = data.c;
console.log(a, c);  // Outputs 12 "blue"

var a = [1, 2, 3];
var x = a[0];
var y = a[1];
var z = a[2];
console.log(x, y, z);  // Outputs 1 2 3
      
// V8 runtime
const data = {a: 12, b: false, c: 'blue'};
const {a, c} = data;
console.log(a, c);  // Outputs 12 "blue"


const array = [1, 2, 3];
const [x, y, z] = array;
console.log(x, y, z);  // Outputs 1 2 3


      

টেমপ্লেট লিটারেল

টেমপ্লেট লিটারেল হলো এমন স্ট্রিং লিটারেল যাতে এমবেডেড এক্সপ্রেশন ব্যবহার করা যায়। এগুলোর সাহায্যে আরও জটিল স্ট্রিং কনক্যাটেনেশন স্টেটমেন্ট এড়ানো যায়।

// Rhino runtime
var name =
  'Hi ' + first + ' ' + last + '.';
var url =
  'http://localhost:3000/api/messages/'
  + id;
      
// V8 runtime
const name = `Hi ${first} ${last}.`;
const url =
  `http://localhost:3000/api/messages/${id}`;


      

ডিফল্ট প্যারামিটার

ডিফল্ট প্যারামিটার আপনাকে ফাংশন ডিক্লারেশনেই ফাংশন প্যারামিটারগুলোর জন্য ডিফল্ট মান নির্দিষ্ট করার সুযোগ দেয়। এর ফলে ফাংশন বডির কোড সহজ হয়ে যায়, কারণ অনুপস্থিত প্যারামিটারগুলোতে আলাদাভাবে ডিফল্ট মান নির্ধারণ করার প্রয়োজন হয় না।

// Rhino runtime
function hello(greeting, name) {
    greeting = greeting || "hello";
    name = name || "world";
    console.log(
        greeting + " " + name + "!");
}

hello();  // Outputs "hello world!"
      
// V8 runtime
const hello =
  function(greeting="hello", name="world") {
      console.log(
        greeting + " " + name + "!");
  }

hello();  // Outputs "hello world!"

      

একাধিক লাইনের স্ট্রিং

টেমপ্লেট লিটারেলের মতোই সিনট্যাক্স ব্যবহার করে একাধিক লাইনের স্ট্রিং সংজ্ঞায়িত করুন। টেমপ্লেট লিটারেলের মতোই, এই সিনট্যাক্স আপনাকে স্ট্রিং সংযুক্তি এড়াতে এবং স্ট্রিং সংজ্ঞা সহজ করতে সাহায্য করে।

// Rhino runtime
var multiline = "This string is sort of\n"
+ "like a multi-line string,\n"
+ "but it's not really one.";
      
// V8 runtime
const multiline = `This on the other hand,
actually is a multi-line string,
thanks to JavaScript ES6`;
      

V8 রানটাইম সীমাবদ্ধতা

অ্যাপস স্ক্রিপ্ট ভি৮ রানটাইম কোনো সাধারণ নোড.জেএস বা ব্রাউজার এনভায়রনমেন্ট নয়। এর ফলে, যখন আপনি থার্ড-পার্টি লাইব্রেরি কল করেন বা অন্য জাভাস্ক্রিপ্ট এনভায়রনমেন্ট থেকে কোডের উদাহরণ গ্রহণ করেন, তখন সামঞ্জস্যজনিত সমস্যা দেখা দিতে পারে।

অনুপলব্ধ এপিআই

নিম্নলিখিত স্ট্যান্ডার্ড জাভাস্ক্রিপ্ট এপিআইগুলো অ্যাপস স্ক্রিপ্ট ভি৮ রানটাইমে উপলব্ধ নয় :

  • টাইমার : setTimeout , setInterval , clearTimeout , clearInterval
  • স্ট্রিমসমূহ : ReadableStream , WritableStream , TextEncoder , TextDecoder
  • ওয়েব এপিআই : fetch , FormData , File , Blob , URL , URLSearchParams , DOMException , atob , btoa
  • ক্রিপ্টো : crypto , SubtleCrypto
  • গ্লোবাল অবজেক্টস : window , navigator , performance , process (Node.js)

বিকল্প হিসেবে নিম্নলিখিত অ্যাপস স্ক্রিপ্ট এপিআইগুলো ব্যবহার করুন:

  • টাইমার : সিঙ্ক্রোনাস বিরতির জন্য Utilities.sleep ব্যবহার করুন। অ্যাসিঙ্ক্রোনাস টাইমার সমর্থিত নয়।
  • ফেচ : HTTP(S) অনুরোধ করার জন্য UrlFetchApp.fetch(url, params) ব্যবহার করুন।
  • atob : Base64-এনকোডেড স্ট্রিং ডিকোড করতে Utilities.base64Decode ব্যবহার করুন।
  • btoa : স্ট্রিংগুলিকে Base64-এ এনকোড করতে Utilities.base64Encode ব্যবহার করুন।
  • ক্রিপ্টো : computeDigest , computeHmacSha256Signature , এবং computeRsaSha256Signature এর মতো ক্রিপ্টোগ্রাফিক ফাংশনগুলোর জন্য Utilities ব্যবহার করুন।

যেসব API-এর Apps Script বিকল্প নেই, যেমন TextEncoder , সেগুলোর জন্য আপনি মাঝে মাঝে একটি পলিফিল ব্যবহার করতে পারেন। পলিফিল হলো একটি লাইব্রেরি যা সেইসব API কার্যকারিতা প্রতিলিপি করে, যা রানটাইম পরিবেশে ডিফল্টভাবে উপলব্ধ থাকে না। পলিফিল ব্যবহার করার আগে, নিশ্চিত হয়ে নিন যে এটি Apps Script-এর V8 রানটাইমের সাথে সামঞ্জস্যপূর্ণ।

অ্যাসিঙ্ক্রোনাস সীমাবদ্ধতা

V8 রানটাইম asyncawait সিনট্যাক্স এবং Promise অবজেক্ট সমর্থন করে। তবে, Apps Script রানটাইম পরিবেশটি মূলত সিনক্রোনাস।

  • মাইক্রোটাস্ক (সমর্থিত) : বর্তমান কল স্ট্যাক খালি হওয়ার পর রানটাইম মাইক্রোটাস্ক কিউ প্রক্রিয়া করে (যেখানে Promise.then কলব্যাক এবং await রেজোলিউশন ঘটে)।
  • ম্যাক্রোটাস্ক (সমর্থিত নয়) : অ্যাপস স্ক্রিপ্টে ম্যাক্রোটাস্কের জন্য কোনো স্ট্যান্ডার্ড ইভেন্ট লুপ নেই। setTimeout এবং setInterval মতো ফাংশনগুলো উপলব্ধ নয়।
  • ওয়েবঅ্যাসেম্বলি ব্যতিক্রম : ওয়েবঅ্যাসেম্বলি এপিআই হলো একমাত্র বিল্ট-ইন ফিচার যা রানটাইমের মধ্যে নন-ব্লকিং পদ্ধতিতে কাজ করে, এবং নির্দিষ্ট অ্যাসিঙ্ক্রোনাস কম্পাইলেশন প্যাটার্ন (WebAssembly.instantiate) ব্যবহারের সুযোগ দেয়।

UrlFetchApp.fetch এর মতো সমস্ত I/O অপারেশন ব্লকিং। সমান্তরাল নেটওয়ার্ক অনুরোধ সম্পন্ন করতে UrlFetchApp.fetchAll ব্যবহার করুন।

শ্রেণী সীমাবদ্ধতা

আধুনিক ES6+ শ্রেণীর বৈশিষ্ট্যগুলির ক্ষেত্রে V8 রানটাইমের নির্দিষ্ট সীমাবদ্ধতা রয়েছে:

  • প্রাইভেট ফিল্ড : প্রাইভেট ক্লাস ফিল্ড (যেমন, #field ) সমর্থিত নয় এবং পার্সিং ত্রুটির কারণ হয়। প্রকৃত এনক্যাপসুলেশনের জন্য ক্লোজার বা WeakMap ) ব্যবহার করার কথা বিবেচনা করুন।
  • স্ট্যাটিক ফিল্ড : ক্লাস বডির মধ্যে সরাসরি স্ট্যাটিক ফিল্ড ঘোষণা (যেমন, static count = 0; ) সমর্থিত নয়। ক্লাসটি সংজ্ঞায়িত করার পরে তাতে স্ট্যাটিক প্রোপার্টি অ্যাসাইন করুন (যেমন, MyClass.count = 0; )।

মডিউলের সীমাবদ্ধতা

  • ES6 মডিউল : V8 রানটাইম ES6 মডিউল ( import / export ) সমর্থন করে না। লাইব্রেরি ব্যবহার করার জন্য, আপনাকে অবশ্যই অ্যাপস স্ক্রিপ্ট লাইব্রেরি পদ্ধতি ব্যবহার করতে হবে অথবা আপনার কোড এবং এর নির্ভরতাগুলোকে একটিমাত্র স্ক্রিপ্ট ফাইলে বান্ডল করতে হবে। ( ইস্যু ট্র্যাকার )
  • ফাইল এক্সিকিউশন অর্ডার : আপনার প্রোজেক্টের সমস্ত স্ক্রিপ্ট ফাইল গ্লোবাল স্কোপে এক্সিকিউট হয়। সাইড ইফেক্টযুক্ত টপ-লেভেল কোড এড়িয়ে চলাই ভালো এবং বিভিন্ন ফাইলে ব্যবহারের আগে ফাংশন ও ক্লাসগুলো সংজ্ঞায়িত করা নিশ্চিত করুন। ফাইলগুলোর মধ্যে কোনো ডিপেন্ডেন্সি থাকলে এডিটরে সেগুলোর ক্রম স্পষ্টভাবে উল্লেখ করুন।

V8 রানটাইম সক্রিয় করুন

যদি কোনো স্ক্রিপ্ট রাইনো রানটাইম ব্যবহার করে, তাহলে নিম্নলিখিত কাজগুলো করে সেটিকে V8-এ পরিবর্তন করুন:

  1. অ্যাপস স্ক্রিপ্ট প্রজেক্টটি খুলুন।
  2. বাম দিকে, প্রজেক্ট ক্লিক করুন।
  3. “Enable Chrome V8 runtime” চেকবক্সটি নির্বাচন করুন।

বিকল্পভাবে, স্ক্রিপ্ট ম্যানিফেস্ট ফাইলটি সম্পাদনা করে সরাসরি স্ক্রিপ্ট রানটাইম নির্দিষ্ট করুন:

  1. অ্যাপস স্ক্রিপ্ট প্রজেক্টটি খুলুন।
  2. বাম দিকে, প্রজেক্ট ক্লিক করুন।
  3. এডিটরে 'appsscript.json' ম্যানিফেস্ট ফাইল দেখানোর চেকবক্সটি নির্বাচন করুন।
  4. বাম দিকে, Editor > appsscript.json ক্লিক করুন।
  5. appsscript.json ম্যানিফেস্ট ফাইলে, runtimeVersion ফিল্ডের মান V8 সেট করুন।
  6. উপরে, ' project' এ ক্লিক করুন।

V8-এ স্ক্রিপ্ট স্থানান্তরের ক্ষেত্রে, আপনার স্ক্রিপ্টটি V8 ব্যবহারে ভালোভাবে কাজ করে তা নিশ্চিত করার জন্য আরও কী কী পদক্ষেপ নেওয়া উচিত, তা ব্যাখ্যা করা হয়েছে।

রাইনো রানটাইম সক্রিয় করুন

যদি আপনার স্ক্রিপ্ট V8 ব্যবহার করে এবং আপনি এটিকে মূল রাইনো রানটাইম ব্যবহার করার জন্য পরিবর্তন করতে চান, তাহলে নিম্নলিখিতগুলি করুন:

  1. অ্যাপস স্ক্রিপ্ট প্রজেক্টটি খুলুন।
  2. বাম দিকে, প্রজেক্ট ক্লিক করুন।
  3. “Enable Chrome V8 runtime” চেকবক্সটি আনচেক করুন।

বিকল্পভাবে, আপনার স্ক্রিপ্ট ম্যানিফেস্ট সম্পাদনা করুন:

  1. অ্যাপস স্ক্রিপ্ট প্রজেক্টটি খুলুন।
  2. বাম দিকে, প্রজেক্ট ক্লিক করুন।
  3. এডিটরে 'appsscript.json' ম্যানিফেস্ট ফাইল দেখানোর চেকবক্সটি নির্বাচন করুন।
  4. বাম দিকে, Editor > appsscript.json ক্লিক করুন।
  5. appsscript.json ম্যানিফেস্ট ফাইলে, runtimeVersion ফিল্ডটির মান DEPRECATED_ES5 সেট করুন।
  6. উপরে, ' project' এ ক্লিক করুন।

আমি বিদ্যমান স্ক্রিপ্টগুলো কীভাবে স্থানান্তর করব?

"V8-এ স্ক্রিপ্ট মাইগ্রেট করার নির্দেশিকা"-তে একটি বিদ্যমান স্ক্রিপ্টকে V8 ব্যবহারের উপযোগী করে তোলার জন্য প্রয়োজনীয় পদক্ষেপগুলো বর্ণনা করা হয়েছে। এর মধ্যে রয়েছে V8 রানটাইম সক্রিয় করা এবং স্ক্রিপ্টটিতে কোনো জ্ঞাত অসঙ্গতি আছে কিনা তা পরীক্ষা করা।

স্ক্রিপ্টগুলির V8-এ স্বয়ংক্রিয় স্থানান্তর

১৮ই ফেব্রুয়ারি, ২০২০ থেকে গুগল আমাদের স্বয়ংক্রিয় সামঞ্জস্যতা পরীক্ষায় উত্তীর্ণ বিদ্যমান স্ক্রিপ্টগুলোকে পর্যায়ক্রমে V8-এ স্থানান্তরিত করছে। স্থানান্তরের পরেও প্রভাবিত স্ক্রিপ্টগুলো স্বাভাবিকভাবে কাজ করতে থাকবে।

যদি আপনি কোনো স্ক্রিপ্টকে স্বয়ংক্রিয় মাইগ্রেশন থেকে বাদ দিতে চান, তাহলে এর ম্যানিফেস্টে থাকা runtimeVersion ফিল্ডটিকে ` DEPRECATED_ES5 এ সেট করুন। এরপর যেকোনো সময়ে স্ক্রিপ্টটিকে ম্যানুয়ালি `V8`-এ মাইগ্রেট করার বিকল্প বেছে নিতে পারেন।

আমি কীভাবে বাগ রিপোর্ট করব?

সাপোর্ট গাইডে ব্যাখ্যা করা হয়েছে কীভাবে স্ট্যাক ওভারফ্লোতে প্রোগ্রামিং সহায়তা পাওয়া যায়, বিদ্যমান ইস্যু রিপোর্ট অনুসন্ধান করা যায়, নতুন বাগ রিপোর্ট করা যায় এবং নতুন ফিচারের জন্য অনুরোধ জানানো যায়।