জাভাস্ক্রিপ্ট ভাষাটি ধীরে ধীরে উন্নত হচ্ছে। নিয়মিত নতুন নতুন প্রস্তাবনা আসছে, সেগুলো বিশ্লেষণ করা হচ্ছে এবং, যদি যোগ্য বলে বিবেচিত হয় তাহলে এই তালিকাতে https://tc39.github.io/ecma262/ নিবন্ধিত হচ্ছে, এবং তারপর স্পেসিফিকেশন এ উন্নীত হচ্ছে।
জাভাস্ক্রিপ্টের পেছনে যে দলটি কাজ করছে তারা তাদের মত বিবেচনা করছে কোনটিকে আগে বাস্তবায়ন করা দরকার। তারা হয়তো সিদ্ধান্ত নিতে পারে, যেগুলো খসড়া তালিকাভুক্ত সেগুলো আগে করার এবং যেগুলো ইতিমধ্যে স্পেসিফিকেশনে আছে সেগুলো পরে করার, কারণ সেগুলো কম আকর্ষণীয় বা করা কঠিন।
তাই প্রায়শ ইঞ্জিনগুলো স্ট্যান্ডার্ড এর শুধু আংশিক বাস্তবায়ন করে।
ভাষার কোন কোন বৈশিষ্ট্য বর্তমানে সমর্থিত সেটি জানার একটি ভাল পেইজ হল এটি https://kangax.github.io/compat-table/es6/ (এটি অনেক বড়, আমাদের এখনও অনেককিছুই জানতে হবে)।
যখন আমরা ভাষার আধুনিক ফিচারগুলো ব্যবহার করি, কিছু ইঞ্জিন হয়তো এধরণের কোড সমর্থন করবে না। যেমনটা কিচ্ছুক্ষণ আগে বলেছি, সব ফিচার সব যায়গায় সমর্থিত নয়।
এখানে ব্যাবেল আমাদের সাহায্য করতে পারে।
ব্যাবেল একটি ট্রান্সপাইলার। এটি আধুনিক জাভাস্ক্রিপ্ট কোডকে পুরাতন স্ট্যান্ডার্ড এ পুনরায় লিখে দেয়।
আসলে, ব্যাবেলের দুটি অংশ আছেঃ
-
প্রথমত, ট্রান্সপাইলার প্রোগ্রামটি, যেটি কোডকে পুনরায় লিখে। ডেভেলপার তার নিজের কম্পিউটারে এটি রান করে। এটি কোডকে পুরাতন স্ট্যান্ডার্ড এ পরিবর্তন করে। এবং তারপর কোডটি ইউজারদের জন্য ওয়েবসাইটে প্রেরণ করা হয়। আধুনিক প্রজেক্ট বিল্ড সিস্টেম যেমন ওয়েবপ্যাক প্রতিবার কোড লেখার সাথে সাথে ট্রান্সপাইলারকে স্বয়ংক্রিয়ভাবে রান করে, তাই ডেভেলপমেন্টের সময় এটিকে ইন্টিগ্রেট করা সহজ হয়।
-
দ্বিতীয়ত, পলিফিল।
ভাষার নতুন ফিচারে হয়তো নতুন কোন বিল্ড-ইন ফাংশন এবং সিনট্যাক্স কন্সট্রাক্ট থাকতে পারে। ট্রান্সপাইলার কোড পুনরায় লিখার সময়, সিনট্যাক্স কন্সট্রাক্টকে পুরাতন সিনট্যাক্সে পরিবর্তন করে। কিন্তু নতুন বিল্ড-ইন ফাংশনের ক্ষেত্রে, আমাদের সেগুলো ইমপ্লিমেন্ট করতে হবে। জাভাস্ক্রিপ্ট অত্যন্ত ডাইনামিক ভাষা, যেকোনো ফাংশনকে আধুনিক স্ট্যান্ডার্ডের মত আচরণ করানোর জন্য স্ক্রিপ্ট তাদের এড/মডিফাই করতে পারে। যে স্ক্রিপ্টটি নতুন ফাংশনকে আপডেট/এড করে থাকে তাকে "পলিফিল" বলা হয়। কারণ এটি "fills in" বা দূরত্বটি দূর করে এবং পুরাতন স্ট্যান্ডার্ড এ নেই এমন ইমপ্লিমেন্টেশন প্রদান করে।
দুটি মজার পলিফিল হলঃ
- core js অনেককিছুই সমর্থন করে, শুধু যেটা প্রয়োজন সেটা ব্যবহার করা যায়। that supports a lot, allows to include only needed features.
- polyfill.io ফিচার এবং ইউজারের ব্রাউজারের উপর ভিতটি করে পলিফিলের স্ক্রিপ্ট প্রদান করার একটি সার্ভিস।
তাই, যদি আমরা ভাষার আধুনিক ফিচার ব্যবহার করতে চাই, তাহলে আমাদের একটি ট্রান্সপাইলার এবং পলিফিল ব্যবহার করতে হবে।
অধিকাংশ উদাহরণ যেখানে আছে সেখানেই রান করা যাবে, যেমনঃ
```js run
alert('Press the "Play" button in the upper-right corner to run');
```
যেসব উদাহরণে আধুনিক জাভাস্ক্রিপ্ট ব্যবহার করা হয়েছে সেগুলো শুধু আপনার ব্রাউজার সমর্থন করলেই রান করা যাবে।
এমনি যদি অফলাইন ভার্সনটি ব্যবহার করেন, পিডিএফ এর উদাহরণগুলো রান করা যাবে না। EPUB এ কিছু উদাহরণ রান করা যাবে।
গুগল ক্রোম সাধারণত ভাষার ফিচারগুলোর সাথে সবচাইতে বেশী আপ-টু-ডেট থাকে, এটি ব্লিডিং-এজ ডেমোগুলো ট্রান্সপাইলার ছাড়াই রান করার জন্য খুবই ভালো, কিন্তু যেকোনো আধুনিক ব্রাউজারই ভালভাবেই কাজ করবে।