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

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

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

এই উদ্বেগের সমাধান করার জন্য, Apps Script এখন V8 রানটাইম দ্বারা সমর্থিত যা Chrome এবং Node.js কে শক্তি দেয়। আধুনিক জাভাস্ক্রিপ্ট সিনট্যাক্স এবং বৈশিষ্ট্যগুলির সুবিধা নেওয়ার জন্য আপনি বিদ্যমান স্ক্রিপ্টগুলিকে V8 এ স্থানান্তর করতে পারেন।

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

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

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

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

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

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

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

V8 ব্যবহার করে স্ক্রিপ্টগুলির জন্য Apps স্ক্রিপ্ট ফাংশন সনাক্তকরণ উন্নত করা হয়েছে৷ নতুন রানটাইম এই ফাংশন সংজ্ঞা বিন্যাস স্বীকৃতি দেয়:

      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 উদাহরণটি Google পত্রকগুলিতে মেনু আইটেমগুলি তৈরি করার সময় অবজেক্ট পদ্ধতির ব্যবহার দেখায়:

function onOpen() {
  var 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();
}

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

লগ দেখুন

Apps Script দুটি লগিং পরিষেবা প্রদান করে: Logger পরিষেবা এবং console ক্লাস৷ এই উভয় পরিষেবাই একই স্ট্যাকড্রাইভার লগিং পরিষেবাতে লগ লেখে।

Logger এবং console লগগুলি দেখাতে, স্ক্রিপ্ট সম্পাদকের শীর্ষে, এক্সিকিউশন লগ ক্লিক করুন।

মৃত্যুদন্ড দেখুন

আপনার স্ক্রিপ্টের সঞ্চালনের ইতিহাস দেখতে, অ্যাপস স্ক্রিপ্ট প্রকল্প খুলুন এবং বামদিকে, এক্সিকিউশন ক্লিক করুন।

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

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

let এবং const

let এবং const কীওয়ার্ড আপনাকে যথাক্রমে ব্লক স্কোপ স্থানীয় ভেরিয়েবল এবং ব্লক স্কোপ ধ্রুবক সংজ্ঞায়িত করতে দেয়।

// V8 runtime
let s = "hello";
if (s === "hello") {
  let 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 array = [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
var data = {a: 12, b: false, c: 'blue'};
var {a, c} = data;
console.log(a, c);  // Outputs 12 "blue"


var array = [1, 2, 3];
var [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
var name = `Hi ${first} ${last}.`;
var 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
var 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
var multiline = `This on the other hand,
actually is a multi-line string,
thanks to JavaScript ES6`;
      

V8 রানটাইম সক্রিয় করা হচ্ছে

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

  1. অ্যাপস স্ক্রিপ্ট প্রকল্প খুলুন।
  2. বামদিকে, প্রকল্প সেটিংস ক্লিক করুন।
  3. Chrome V8 রানটাইম সক্ষম করুন চেকবক্স নির্বাচন করুন।

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

  1. অ্যাপস স্ক্রিপ্ট প্রকল্প খুলুন।
  2. বামদিকে, প্রকল্প সেটিংস ক্লিক করুন।
  3. সম্পাদক চেকবক্সে "appsscript.json" ম্যানিফেস্ট ফাইল দেখান নির্বাচন করুন।
  4. বাম দিকে, এডিটর > appsscript.json এ ক্লিক করুন।
  5. appsscript.json ম্যানিফেস্ট ফাইলে, runtimeVersion ক্ষেত্রটিকে V8 মানতে সেট করুন।
  6. শীর্ষে, প্রকল্প সংরক্ষণ করুন ক্লিক করুন।

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

রাইনো রানটাইম সক্রিয় করা হচ্ছে

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

  1. অ্যাপস স্ক্রিপ্ট প্রকল্প খুলুন।
  2. বামদিকে, প্রকল্প সেটিংস ক্লিক করুন।
  3. Chrome V8 রানটাইম সক্ষম করুন চেকবক্স সাফ করুন।

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

  1. অ্যাপস স্ক্রিপ্ট প্রকল্প খুলুন।
  2. বামদিকে, প্রকল্প সেটিংস ক্লিক করুন।
  3. সম্পাদক চেকবক্সে "appsscript.json" ম্যানিফেস্ট ফাইল দেখান নির্বাচন করুন।
  4. বাম দিকে, এডিটর > appsscript.json এ ক্লিক করুন।
  5. appsscript.json ম্যানিফেস্ট ফাইলে, runtimeVersion ক্ষেত্রটি DEPRECATED_ES5 মানতে সেট করুন।
  6. শীর্ষে, প্রকল্প সংরক্ষণ করুন ক্লিক করুন।

আমি কিভাবে বিদ্যমান স্ক্রিপ্ট স্থানান্তর করতে পারি?

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

V8 এ স্ক্রিপ্টের স্বয়ংক্রিয় স্থানান্তর

18 ফেব্রুয়ারি, 2020 থেকে Google ধীরে ধীরে বিদ্যমান স্ক্রিপ্টগুলি স্থানান্তর করা শুরু করবে যা আমাদের স্বয়ংক্রিয় সামঞ্জস্য পরীক্ষা V8-এ পাস করে। প্রভাবিত স্ক্রিপ্টগুলি মাইগ্রেশনের পরে স্বাভাবিকভাবে কাজ করতে থাকে।

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

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

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