নোট করুন যে আমি আমার সমস্ত যুক্তি রিয়েল-ওয়ার্ল্ড ব্যবহারের ক্ষেত্রে নির্ভর করছি। বাস্তব, সম্পূর্ণ, আকর্ষণীয়, দরকারী অ্যাপ্লিকেশনগুলিতে ব্যবহারের উদাহরণ দিয়ে ব্যাক আপ করা যায় না এমন পাল্টা যুক্তিগুলি অবৈধ। আমি প্রত্যেকেরই ছোট্ট "ভাষা ডেমো" দেখেছি, প্রোটোটাইপ এবং গতিশীল টাইপগুলি সি # এর চেয়ে কয়েকটি লাইনকে আরও ছোট করে তুলতে পারে তার বিবরণ দিয়ে আমি ব্লগ পোস্টগুলি দেখেছি, তবে সেগুলি কেবল প্রাসঙ্গিক নয়
মাইক্রো-ডেমো এবং খেলনাগুলির চেয়ে আপনি রিয়েল কোড লেখার ক্ষেত্রে যে সমস্যাগুলি চালাচ্ছেন to সুতরাং এখানে জেএসের সাথে আমার গ্রিপগুলি রয়েছে:
ক) যাদু 'এই'। এটি যখন এটি তখন ব্যতীত। জাভাস্ক্রিপ্ট আপনাকে সমস্ত জায়গায় বেনাম ফাংশন ব্যবহার করার জন্য চাপ দেয়, যদি না তারা সর্বদা 'এই' ভেরিয়েবলের জন্য যথাযথ প্রসঙ্গটি হারিয়ে ফেলে, তবে আপনার জায়গায় "var _this = this" এর মতো বোকা কোড থাকবে এবং তারপরে এটি ব্যবহার করে আপনার কলব্যাক বা অন্যান্য ফাংশনের ভিতরে কিছু দিন আমি শপথ করে বলছি যে আমি লিখতে পরিচালিত যে ফাংশনগুলির নাম পরিবর্তন করে 'এই' নামটি ব্যবহার করে না সেগুলি আসলে সংখ্যার চেয়ে কম হয়।
খ) 1 + "1" - 1 = 10 এছাড়াও, "1" + 0 = "10"। হ্যাঁ, এটি আসলে আমাদের অ্যাপ্লিকেশনগুলির জন্য বাগ তৈরি করেছে, যেখানে অন্য কোনও অ্যাপ্লিকেশনের ত্রুটির কারণে কোনও স্ট্রিং হিসাবে JSON ফাইল থেকে একটি সংখ্যা হওয়ার আশঙ্কা করা ডেটা লোড করা হয়েছিল এবং ফলাফলটি ভাল হয়নি। পুরো জায়গা জুড়ে এক টন ধরণের রূপান্তর যুক্ত করতে আমাদের সমস্ত লোডিং কোড আপডেট করতে হয়েছিল। যখন আমার কোনও সংখ্যা হওয়ার জন্য কিছু দরকার তখন আমি সত্যই একেবারে শঙ্কিত করতে চাই যে এটি কোনও সংখ্যা হোক, স্ট্রিং বা কোনও বস্তু বা নাল বা অন্য কিছু নয়। লুভা, যা বেশিরভাগ ক্ষেত্রেই জাভাস্ক্রিপ্টের সাথে খুব সমান, এই সমস্যাটি কেবলমাত্র সংযোজন এবং স্ট্রিং কনটেন্টেশনের জন্য একই অপারেটরটি ব্যবহার করার জন্য যথেষ্ট প্রতিবন্ধক না হয়ে এই সমস্যার সমাধান করেছে।
গ) গ্লোবাল বাই ডিফল্ট ভেরিয়েবল। এমনকি আপনি যদি যুক্তিটি গ্রহণ করেন যে গতিশীল টাইপিং কেবল "সহজ" কারণ আপনাকে পরিবর্তনশীল ঘোষণার বিষয়ে ভাবার দরকার নেই, জাভাস্ক্রিপ্ট সেই আর্গুমেন্টটিকে উইন্ডোটির বাইরে ফেলে দিয়ে নতুন জায়গায় সনাক্তকারীদের সামনে 'ভার' রাখে place । আপনি যদি ভুলে যান তবে তা নিঃশব্দে আপনাকে স্ক্রু করে দেয় ws
ঘ) ক্লাসের পরিবর্তে প্রোটোটাইপগুলি। অল্প অল্প অল্প পরিমাণে রিয়েল-ওয়ার্ল্ড জাভাস্ক্রিপ্ট অ্যাপ্লিকেশন রয়েছে যা বৃহত অ্যাপ্লিকেশন আর্কিটেকচারে প্রোটোটাইপের অন্তর্নিহিত অব্যর্থতার চারপাশে কাজ করার জন্য তাদের নিজস্ব শ্রেণী ব্যবস্থাতে প্লাগ না করে। সেই একই অ্যাপ্লিকেশনগুলি জাভাস্ক্রিপ্টের বেসগুলি প্রসারিত করতে প্রোটোটাইপগুলির সর্বনিম্ন ব্যবহার করে এবং কেবল জেএস এতটাই দুর্বলভাবে নকশাকৃত হয়েছিল যে দুটি আকর্ষণীয় অন্তর্নির্মিত প্রকারের সাথেই এটি আসে তার চেয়ে অর্ধেক বৈশিষ্ট্যের অভাব রয়েছে যা আপনি আশা করেন।
ঙ) পাস-বাই-মান ধরণের তৈরি করতে অক্ষমতা। এটি প্রকৃতপক্ষে সি ++ / ডি বাদ দিয়ে প্রায় প্রতিটি ভাষায় ঘন সমস্যা। যাঁরা জাভাস্ক্রিপ্টটি ওয়েবজিএল অ্যাপ্লিকেশন লিখতে ব্যবহার করছেন তাদের জন্য জাভাস্ক্রিপ্টের জন্য সমস্ত লিনিয়ার বীজগণিত গ্রন্থাগারগুলি একবার দেখুন। 3 ডি অ্যাপ্লিকেশনগুলিতে, আপনি প্রায়শই স্কেলারের তুলনায় প্রায়শই ভেক্টর ব্যবহার করেন। আপনার অ্যাপ্লিকেশনের প্রতিটি পূর্ণসংখ্যা যদি রেফারেন্সের মাধ্যমে পাস করা হয়েছে তা কল্পনা করুন, যাতে "a = 1; b = a; b ++" এ এবং বি উভয়কে 2 এর সমান করে তোলে প্রতিটি ছোট তিনটি উপাদান ভেক্টর একটি সম্পূর্ণ পূর্ণ বস্তু। এগুলি রেফারেন্স দ্বারা পাস করা হয়েছে (আমাদের ওয়েবজিএল গেমটিতে এখনও পর্যন্ত প্রায় অর্ধেক বাগের উত্স, আসলে)। এগুলি প্রচুর পরিমাণে বিদ্যমান, গাদা-বরাদ্দ, এবং আবর্জনা-সংগ্রহ করা হয়, যা জিসির উপর তীব্র পরিমাণ চাপ সৃষ্টি করে যা জিসি এমনকি সাধারণ ওয়েবজিএল গেমগুলিতে বিরতি দিতে পারে এবং করতে পারে, যদি না বিকাশকারীরা হাস্যকর জটিল হুপের মধ্যে দিয়ে না যায় তবে সমস্ত জায়গায় নতুন ভেক্টর তৈরি করা এড়াতে যেখানে এটি নতুন ভেক্টর তৈরি করা যুক্তিসঙ্গত। আপনার অপারেটর ওভারলোডিং থাকতে পারে না, তাই বেসিক ক্রিয়াকলাপগুলি করার জন্য আপনার কাছে খুব বড় এবং কদর্য প্রকাশ রয়েছে। স্বতন্ত্র উপাদান অ্যাক্সেস ধীর। অবজেক্টগুলি স্থানীয়ভাবে প্যাক করা হয়নি এবং তাই আপনি যদি কোনও ফ্লোট 32আরারি উদাহরণ হিসাবে এগুলি প্রয়োগ না করেন তবে এটি বর্তমানে ভি 8 এবং স্পাইডারমোনকি উভয়ের অপ্টিমাইজারের বাইরে ছাঁটাইটিকে বিভ্রান্ত করে তোলে। আমি উল্লেখ করেছি তারা রেফারেন্স দ্বারা পাস হয়েছে? স্বতন্ত্র উপাদান অ্যাক্সেস ধীর। অবজেক্টগুলি স্থানীয়ভাবে প্যাক করা হয়নি এবং তাই আপনি যদি কোনও ফ্লোট 32আরারি উদাহরণ হিসাবে এগুলি প্রয়োগ না করেন তবে এটি বর্তমানে ভি 8 এবং স্পাইডারমোনকি উভয়ের অপ্টিমাইজারের বাইরে ছাঁটাইটিকে বিভ্রান্ত করে তোলে। আমি উল্লেখ করেছি তারা রেফারেন্স দ্বারা পাস হয়েছে? স্বতন্ত্র উপাদান অ্যাক্সেস ধীর। অবজেক্টগুলি স্থানীয়ভাবে প্যাক করা হয়নি এবং তাই আপনি যদি কোনও ফ্লোট 32আরারি উদাহরণ হিসাবে এগুলি প্রয়োগ না করেন তবে এটি বর্তমানে ভি 8 এবং স্পাইডারমোনকি উভয়ের অপ্টিমাইজারের বাইরে ছাঁটাইটিকে বিভ্রান্ত করে তোলে। আমি উল্লেখ করেছি তারা রেফারেন্স দ্বারা পাস হয়েছে?
চ) কোন অন্তর্নির্মিত কার্যকারিতা অন্তর্ভুক্ত বা প্রয়োজন। সিরিয়াসলি, এখনও। তৃতীয় পক্ষের গ্রন্থাগারগুলির উপস্থিতি রয়েছে তবে তাদের প্রায় সকলেরই কোনও না কোনও ত্রুটি বা অন্য কিছু রয়েছে যার মধ্যে কমপক্ষে ক্রোমের একটি বিভ্রান্তিকর ক্যাচিং সমস্যা যা প্রকৃত বিকাশকে বাটকে ব্যথা করে তোলে।
ছ) গতিশীল টাইপিং। হ্যাঁ, আমি এই যুক্তিটি শুরু করতে রাজি আছি। আপনি এটি দ্বিতীয়বার লক্ষ্য করা শুরু করেন আপনি ছোট ওয়েব অ্যাপস বা ওয়েব পৃষ্ঠাগুলি লেখা বন্ধ করে দেন এবং বড় অ্যাপ্লিকেশনগুলি লিখতে শুরু করেন যেখানে আপনার কাছে এমন ডেটা রয়েছে যা একক মাউস ক্লিক বা অনুরোধ / প্রতিক্রিয়া চক্রের চেয়ে বেশি সময় ধরে থাকে: একটিতে ভুল ধরণের অবজেক্ট যুক্ত করুন পরে প্রক্রিয়া করার জন্য অ্যারে এবং আসল ভুল যেখানে ছিল তার চেয়ে সম্পূর্ণ ভিন্ন কোডে কোনও অনুপস্থিত পদ্ধতি বা সদস্যের কাছ থেকে ক্রাশ পান। মজা বার. হ্যাঁ, জাভা স্থির টাইপিংকে খারাপ বলে মনে করে। না, জাভা / সি # / সি ++ স্থিতিশীল টাইপিংয়ের একমাত্র উপায় নয়। ইনফরমেশন টাইপ করুন, অন্তর্নিহিত ইন্টারফেস বাইন্ডিং ইত্যাদি আপনাকে সমস্ত বাগ ছাড়াই ডায়নামিক টাইপিংয়ের "অনেকগুলি কীট্রোক মোকাবেলা করতে সহজ এবং অনেকগুলি" সুবিধা দেয়। দ্বিতীয় সর্বাধিক জনপ্রিয় ওয়েব ভাষা - অ্যাকশনস্ক্রিপ্ট 3 - আসলে অন্যথায় জেএস / ইসমাস্ক্রিপ্টের সাথে অভিন্ন হওয়া সত্ত্বেও স্থিতিশীলভাবে টাইপ করা হয়। অন্যদিকে, আমি আমার ফেডোরা ডেস্কটপে পাইথন অ্যাপ্লিকেশনগুলি থেকে সি / সি ++ অ্যাপ্লিকেশনগুলির চেয়ে বেশি ক্র্যাশ পেয়েছি (আসলে, আমার ডেস্কটপের ক্র্যাশে থাকা কোনও সি / সি ++ অ্যাপ্লিকেশন নয়, এখন আমি এটি সম্পর্কে চিন্তা করি)। হারিয়ে যাওয়া সদস্য ব্যাতিক্রম == অ্যাপ্লিকেশন বিকাশ এবং বজায় রাখা এত সহজ, তাই না?
জ) গতি। হ্যাঁ, জেএসকে একটি নিম্ন-গ্রেড সি সংকলকের প্রায় অর্ধেক দ্রুততর করার জন্য ভাষা রানটাইমগুলিতে প্রচুর পরিমাণে সুপার ব্যাড-গাধা বিকাশকারীরা হাস্যকরভাবে প্রচুর পরিশ্রম করেছেন যা একটি কলেজ কলেজ জুনিয়র কয়েকটিতে লিখতে পারে মাস। এবং লুয়াজিট মূল ভাষা সীমাবদ্ধতার ক্ষেত্রে জেএসের মতো একই নৌকায় থাকলেও যাইহোক যাইহোক প্রতিটি জাভাস্ক্রিপ্ট প্রয়োগের চেয়ে আরও ভাল করতে পরিচালিত হয়। ভি 8 বা এ জাতীয় সমস্ত জেএস অপ্টিমাইজেশানগুলি কী বোঝে না কিজেএস দাবি করতে পছন্দ করেন যে গতি অনুযায়ী জিনিসগুলি আশ্চর্যজনক কিছু করতে পারে, তবে বাস্তবতাটি হ'ল এই সমস্ত অপ্টিমাইজেশনগুলি মূলত "ভেরিয়েবলের জন্য বিভিন্ন ধরণের সনাক্তকরণের জন্য কোডটি বিশ্লেষণ করার জন্য খুব চেষ্টা করে এবং তারপরে একে একে সামান্য প্রতিবন্ধী স্ট্যাটিকালি টাইপের মতো সংকলন করে ভাষার সংকলক এটি করবে "" ওহ, এবং ট্রেসিং রয়েছে, তবে তারপরেও ট্রেসিং স্থিতিশীলভাবে টাইপ করা ভাষাগুলিতে কাজ করে (এবং উত্পন্ন মেশিন কোডে টাইপ গার্ডের প্রয়োজনের অভাবে আরও ভাল কাজ করে)। বাস্তবে জেএস বা তাদের পক্ষে এই হুইসবাং অপটিমাইজেশনগুলির একটিও আবিষ্কার করেননি; বেশিরভাগ গবেষণা জেভিএম (জাভা অশুভ!) বা শাস্ত্রীয় ওওপি ভাষা (প্রোটোটাইপগুলি দুর্দান্ত!) থেকে নেওয়া হয়েছিল।
i) কোনও ইন্টেলিজেন্স এমনকি সম্ভব নয়। আপনার পাঠ্য সম্পাদকের foo.js এর লাইন 187 এ আপনি সেখানে পেয়েছেন সেই পরিবর্তনশীলটিতে কী কী পদ্ধতি রয়েছে তা দেখতে চান? খুব খারাপ. কোডটি কোথায় শুরু করা হয়েছিল তা সনাক্ত না করা পর্যন্ত কোডটি সন্ধান করুন, তারপরে কোডটির মাধ্যমে তার প্রোটোটাইপ কী আছে তা সন্ধান করুন। এবং তারপরে আশা করুন আপনার পিছনের পেছনের প্রোটোটাইপটি পরিবর্তনশীলভাবে পরিবর্তন করার মতো কোনও কোড নেই। প্রকৃতপক্ষে, কেবল এটি একটি ব্রাউজারে চালান এবং ব্রেকপয়েন্টগুলি সেট করুন, কারণ জাভাস্ক্রিপ্টের আপোলোজিস্টরা জাভাস্ক্রিপ্টের স্বাচ্ছন্দ্য এবং সরলতার প্রশংসা করতে যে খেলোয়াড় উইকিপিডিয়া প্রত্নতাত্ত্বিকগুলি ব্যবহার করেন, তার চেয়ে বড় কোনও কোডবাসের জন্য অন্য কোনও উপায়ে মূল্য সম্পর্কে কার্যকর কিছু সন্ধান করা অসম্ভব। কিছু কোড সম্পাদক আরও ভাল করার জন্য খুব চেষ্টা করে , এবং প্রায় কৃপণতা সত্যিই সাধারণ ক্ষেত্রে কখনও কখনও সফল হয়, সফল হয়।
j) কোনও সুবিধা নেই। অন্যান্য গতিশীল টাইপ করা ভাষার তুলনায় জাভাস্ক্রিপ্ট এমনকি বিশেষ নয়। এটি লুয়া, পাইথন, রুবি ইত্যাদি দ্বারা করা যায় না এমন মজাদার কিছু করার পক্ষে সক্ষম নয় the জেএস বাস্তবায়নগুলির কোনওটিই লুয়াজিট বা পাইপাই বা অন্যান্য গতিশীলের বিভিন্ন উন্নত জেআইটি-ইন বাস্তবায়নের চেয়ে দ্রুত নয় are ভাষা। অন্যান্য সাধারণভাবে উপলভ্য ভাষার তুলনায় জেএসের কোনও প্লাস দিক নেই। ওহ, এটি প্লাগইন ছাড়াই কোনও ওয়েব ব্রাউজারে স্থানীয়ভাবে চলে runs এটি কেন এত জনপ্রিয় তা বিশ্বের একমাত্র কারণ। আসলে, এটি ঘটনার একমাত্র কারণ উপস্থিত। যদি 10 বছর আগে কেউ কেবল এই কথাটি ভেবেছিল, "হ্যাক, আসুন আমরা একটি বিদ্যমান সু-নকশাকৃত এবং সুপ্রতিষ্ঠিত ভাষাটি আমাদের ব্রাউজারে ফেলে দিই এবং সবাইকে এই বোকা ছোট্ট হ্যাকজব ব্যবহারের পরিবর্তে নেটস্কেপ নিয়ে এসেছিল অন্য ছেলেদেরও একই কাজ করতে দিন that , "ওয়েবটি আজ অনেক আলাদা (আরও ভাল) দেখবে। ক্রোম যদি পাইথনকে একটি সমর্থিত ভাষা হিসাবে ক্রোমে ফেলে দেয় তবে ভবিষ্যতের কথা ভাবুন। বা প্রকৃতপক্ষে, এটি কল্পনা করুন: গুগল সি / সি ++ কে একটি সমর্থিত ভাষা হিসাবে ক্রোমে ফেলে দেয় (http://code.google.com/p/nativeclient/)।