নোড.জেএস কি একটি কাঠামো? [বন্ধ]


35

আমি নিয়োগকারী, বিকাশকারী ইত্যাদিকে দেখছি N আমার মতে, নোড.জেএস আসলে কী তা এটি অজ্ঞতার বাইরে।

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

আমার মতে, নোড.জেএস একটি প্ল্যাটফর্ম , বা রানটাইম পরিবেশ; এটি ফাইল সিস্টেমের মতো (যেমন এটি একটি সার্ভার হিসাবে চালিত হয়, এবং ব্রাউজারে নয়) অন্যান্য বিভিন্ন API- র জন্য DOM API (ব্রাউজারে জাভাস্ক্রিপ্ট) স্যুইচ করে।

লোকেরা কেন নোড.জেএসকে একটি কাঠামো বলে মনে করে; আমি কি ভূল? এটি কি আসলে একটি কাঠামো?



5
বিশেষভাবে নয়, তবে আমি বিভ্রান্তি দেখতে পেলাম।
ndugger

1
অনেক দিন আগে, যখন নোড প্রথম প্রকাশিত হয়েছিল, আমি এসও-তে একটি উত্তর পোস্ট করেছি যাতে বলে যে নোড কোনও কাঠামো নয়। সেই উত্তরটি তখন খুব পিছিয়ে ছিল। আজ, খুব কম লোক যারা নোড ব্যবহার করেন তারা বিশ্বাস করেন যে এটি একটি কাঠামো। এটি একই অর্থে একটি কাঠামো যে সুইফট একটি কাঠামো বা গো একটি কাঠামো বা মরিচ একটি কাঠামো। আধুনিক প্রোগ্রামিং ভাষাগুলিতে খুব উচ্চ-স্তরের এপিআই রয়েছে যা ফ্রেমওয়ার্ক হিসাবে প্রয়োগ করা হত implemented "প্ল্যাটফর্ম" একটি ভাল শব্দ। আমি বলব এটি নিজেই একজন অনুবাদক (সেই শব্দের প্রচলিত ইউনিক্স অর্থ ব্যবহার করে)
slebetman

নোটটি ডিওএম এপিআই-কে সরিয়ে দেয় না এবং জাভাস্ক্রিপ্টের সাহায্যে আপনি চালাতে পারেন এমন কোনও কিছুই নোড সহ বা ছাড়াই আপনার কাছে উপলভ্য।
রব

@ স্লেবেটম্যান দোভাষী এর "অন্য" অর্থ কী? আমি বুঝতে পারি না যে সেখানেও বিতর্ক হয়েছে! : এস
জে আব্রাহামসন

উত্তর:


44

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

এটি সমস্ত ধরণের হয়ে যায় এবং আমি প্রায়শই ভাষার সত্যই দুর্বল ব্যবহার দেখতে পাই, তাই আমি স্পষ্ট হয়ে নীচ থেকে শুরু করব


জাভাস্ক্রিপ্ট হ'ল একটি কম্পিউটার ভাষা, যা সংক্ষেপে বলা যেতে পারে, একটি সম্মেলনের একটি সেট যা "নির্দেশকে একটি সেট হিসাবে ভাষাটির ব্যাখ্যা করার উপায়" এর জন্য আমাদের প্রচলিত শব্দার্থ বা অভিনব শব্দের পাঠক এবং তা ব্যাখ্যা করতে দেয় । নামক প্রোগ্রামের ক্লাস দোভাষী , কম্পাইলার , transpilers , linters , highlighters ইত্যাদি সমস্ত পাঠ্য নিন এবং কিভাবে কোড সঞ্চালিত হয়ে এই প্রচলিত বোঝার সঙ্গে কিছু করতে চেষ্টা করে।

  • দোভাষীরা আসলে কিছু মেশিন — সাধারণত আপনার কম্পিউটারকে পরিচালনা করে এক্সিকিউশন সিঁটমিকগুলি সম্পাদন করে। আপনার জাভাস্ক্রিপ্ট প্রোগ্রামে লেখা নির্দেশের উপর ভিত্তি করে "কম্পিউটারের এই চরিত্রটি মুদ্রণ করুন" এর মতো স্যুইচগুলি আপনার কম্পিউটারের অভ্যন্তরে ছোট্ট মানুষ হিসাবে আপনি ভাবতে পারেন।
  • সংকলকগণ জাভাস্ক্রিপ্ট পাঠ্যটিকে একটি নতুন পাঠ্যে রূপান্তরিত করার চেষ্টা করেন যা বিভিন্ন ভাষার জন্য এক্সিকিউশন শব্দার্থবিজ্ঞান রয়েছে one সম্ভবত একটি বিশেষ সম্পত্তি যা কম্পিউটারগুলি সরাসরি এটি কার্যকর করতে পারে।
  • ট্রান্সপ্লেলারগুলি সংকলকের একটি সাধারণ রূপ যা তারা জাভাস্ক্রিপ্ট পাঠ্য এবং অন্য কোনও ভাষার পাঠ্য আউটপুট নেয়। পার্থক্যটি এইভাবে সামান্য সাবজেক্টিভ, তবে সাধারণত কেউ খুব কম স্তরের কোড আউটপুট এবং উচ্চতর স্তরের কোড আউটপুট হিসাবে ট্রান্সপ্লেলার হিসাবে একটি সংকলক মনে করে ।
  • Linters , highlighters , টাইপ চেকারস , ইত্যাদি জাভাস্ক্রিপ্ট টেক্সট এবং আউটপুট বিশ্লেষণাত্মক পণ্যের কোন ধরণের সমস্ত নিতে, হাইলাইট টেক্সট যেমন, যা সম্পাদন শব্দার্থবিদ্যা দ্বারা প্রভাবিত, কিন্তু আসলে এটা প্রতিনিধি নয়।

এখন, এক্সিকিউশন এক্সামেন্টিক কিছুটা খনন করি। সাধারণত, সম্পাদন শব্দার্থবিজ্ঞান ভাষার পাঠ্য পড়ার এবং একটি বিমূর্ত মেশিনের বিবরণ বা পর্যবেক্ষণযোগ্য পার্শ্ব প্রতিক্রিয়াগুলির বিবরণে পৌঁছানোর প্রক্রিয়া জড়িত । আমি যেটি সুপারিশ করতে চাই তা হ'ল এই উভয়টিই মেশিনটি পরিচালনা করতে বা পর্যবেক্ষণযোগ্য প্রভাবগুলি সম্পাদন করার জন্য কোনও ধরণের "নিম্ন-স্তরের এপিআই" থাকা দরকার ume এগুলি সাধারণত রানটাইম পরিবেশের অংশ হিসাবে বিবেচিত হয়

  • রানটাইম এনভায়রনমেন্ট বা রানটাইম অধিকৃত প্রিমিটিভের একটি সেট যে ভাষা প্রচলিত রীতি অর্ডার কাজ চালানোর জন্য টিকে থাকতে প্রয়োজন। ভাষা যতদূর যায়, তাদের আচরণ সম্পর্কে কিছুটা ধারণা থাকতে পারে তবে তারা আপত্তিজনক নয়। উপরোক্ত দোভাষীর চিত্রের মধ্যে, "ভিতরে থাকা মানুষ" রানটাইমের সুইচগুলিকে কেবল টিকিয়ে দেয় --- তারা ব্যক্তিগতভাবে কী করছে তা তিনি ব্যক্তিগতভাবে পরীক্ষা করতে পারবেন না।

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


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

আসলে কোনও ভাষা ব্যবহার করার জন্য আপনি রানটাইম বাস্তবায়নের পাশাপাশি সংকলক বা দোভাষীর মতো কিছু চান। সংকলক / দোভাষী এবং এই রানটাইমটি আসলে আপনার কোডটি কার্যকর করতে এক সাথে চলে।

  • ক্রোমের ভি 8 , প্রায়শই একটি ইঞ্জিন বলা হয় , এমন একটি প্যাকেজ চুক্তি যা ইসিএমএ স্ট্যান্ডার্ড জাভাস্ক্রিপ্ট কনভেনশনগুলির দ্বারা দাবিত রানটাইম ইন্টারফেসের সাথে সঙ্গতিপূর্ণ একটি দোভাষী, সংকলক, রানটাইম বাস্তবায়ন সমন্বিত package

তাহলে নোড.জেএস কোথায় এটি ফিট করে?

আমাদের এটিকে কিছু অংশে বিভক্ত করতে হবে:

  1. নোড.জেএস জাভাস্ক্রিপ্ট ভাষা প্রসারিত করে রানটাইম এনভায়রনমেন্ট প্রিমিটিভগুলির একটি বৃহত্তর সেট সরবরাহ করে - যা ইসিএমএ এর মানদণ্ডের বাইরে নয়। এর মধ্যে ফাইল I / O এর মতো জিনিস অন্তর্ভুক্ত রয়েছে । এর অর্থ হ'ল নোড.জেএস ভাষা পরিবর্তন করে এবং কিছুটা অর্থে একটি নতুন ভাষা: "নোড.জেএস জাভাস্ক্রিপ্ট"
  2. নোড.জেএস, একটি প্যাকেজ হিসাবে, একটি দোভাষী এবং একটি সংকলক রয়েছে। এটি কেবল ভি 8 থেকে চুরি করে।
  3. নোড.জেএস নোড.জেএস রানটাইম এনভায়রনমেন্টের একটি বাস্তবায়ন সরবরাহ করে যা "নোড.জেএস জাভাস্ক্রিপ্ট" কার্যকর করতে দেয়।
  4. নোড.জেএস নতুন আদিমগুলির উপরে নির্মিত মানক গ্রন্থাগারগুলির একটি সেট সরবরাহ করে যা তাদের "নোড.জেএস জাভাস্ক্রিপ্ট" এর শেষ ব্যবহারকারীদের কাছে আরও অ্যাক্সেসযোগ্য করে তোলে।

সুতরাং নোড.জেএস অনেক জিনিস!

তবে এটি কি একটি কাঠামো?


এটিই যেখানে পরিভাষাটি পুরোপুরি পৃথক হয়ে যায় framework ফ্রেমওয়ার্কটি আসলে কী তার কোনও ভাল, ধারাবাহিক, অর্থপূর্ণ সংজ্ঞা নেই।

এই বিতর্কগুলি রয়েছে: "লাইব্রেরি বনাম একটি কাঠামো কী" এবং এগুলি "লাইব্রেরি হ'ল এমন একটি জিনিস যা আপনি কল করেন এবং ফ্রেমওয়ার্ক এমন একটি জিনিস যা আপনাকে ডাকে"। এমনকি আমি সত্যিই এমন দুঃখজনক ব্যাখ্যাটি দিনের আলো দিতে চাই না - তবে জাভাস্ক্রিপ্ট, এবং বিশেষ করে জাভাস্ক্রিপ্ট, এই সংজ্ঞাটির জন্য এক বিরাট আঘাত, কারণ পুরো কলব্যাক-পাসিং কৌশলটির অর্থ আপনি ক্রমাগত কলিংয়ের মধ্যে স্যুইচ করছেন since এবং বলা হচ্ছে।

আমার ব্যক্তিগত মতামত, এখানে যথেষ্ট কিছু আছে। আমি একটি উজ্জ্বল রেখা আঁকতে চাই না, তবে তাই আমি কেবল বলব

  • কোডের একটি সেট লাইব্রেরির মতো হয় যদি এটি লেগোসের সেটের মতো কাজ করে : বিভাজ্য এবং সমাবেশের জন্য তৈরি। লাইব্রেরিটি কীভাবে ব্যবহার করবেন সে সম্পর্কে কিছু উদাহরণ থাকতে পারে, তবে এটি সাধারণত তাদের প্রয়োজনীয়তার দিকে একত্রিত করা ব্যবহারকারীদের মধ্যে থাকে।
  • কোডের একটি সেট ফ্রেমওয়ার্কের মতো - যদি এটি অবিভাজ্য হয় এবং কনভেনশনগুলি বোঝায় *: এর টুকরো টুকরো টানা অনেক অনুমানকে ব্যর্থ করে দিতে পারে যাতে কোনও কাঠামো সঠিকভাবে ব্যবহার করার জন্য আপনাকে প্রচলিত ব্যবহার বুঝতে হবে ।

এটি নিশ্চিত হওয়ার জন্য এটি হ্যান্ড-ওয়েভ লাইন, তবে আমি ফ্রেমওয়ার্ক সম্পর্কে একটি সত্যই আকর্ষণীয় পয়েন্টটি আঁকতে চাই:

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

এটি এমন কিছু বিষয় হতে পারে যা সম্পর্কে লোকেরা তর্ক করতেও চায়, তবে আপনি যদি আমার পূর্ববর্তী সংজ্ঞাটি কিনে থাকেন যে কোনও ভাষা হ'ল একটি সম্মেলনের একটি সেট যা পাঠ্যের একটি ব্লকে প্রাণ দেয়, তবে যখনই আপনি সম্মেলনের একটি নতুন স্তর রেখে যান ' একটি নতুন ভাষা নির্মিত। ফ্রেমওয়ার্কের সাহায্যে কাঁচামালগুলি কাঁচা পাঠ্য ফাইলগুলির পরিবর্তে তাদের হোস্ট ভাষার অর্থগত ব্যাখ্যা হয়, তবে ধারণাটি একই!


তাই যা বলেছিল তার সাথে, আমি নোড.জেএসকে একটি কাঠামো বললেও পুরোপুরি খুশি, যদিও এটি আদর্শের তুলনায় কিছুটা হলেও যায়! নোড.জেএস ভাষা সম্প্রসারণের পথে কাঁচা জাভাস্ক্রিপ্টে কার্যকারিতা যুক্ত করে । এটি এই প্রসারিত ভাষায় কাজের জন্য নতুন অনুমান এবং সরঞ্জাম নিয়ে আসে। কার্যকরীভাবে, এই ধারণাগুলি রেল অন রুবেলের মতো অন্যান্য স্বীকৃত ফ্রেমওয়ার্কগুলির ধারণার মতো ।

আমি যুক্তি দিয়ে বলব যে এই মুহুর্তে আপনি যদি কিছুটা কৌতূহল বোধ করেন এবং তর্ক করতে চান যে এইভাবে এই পদ্ধতিতে রুবেলগুলিকে রেলস এবং নোড.জেএসের মধ্যে একটি বিরাট বিভাজন রয়েছে তবে আমি অবশ্যই আপনার সাথে সেখানে আছি । দু'জনের মধ্যে যে ধরণের ধারণাগত সংসার রয়েছে তা নাটকীয়ভাবে আলাদা — আমি কেবল এটিই বলতে চাই যে তারা একই ধরণের জিনিস: একটি নির্দিষ্ট ডোমেনের মধ্যে ভিত্তি ভাষার শক্তিগুলির সম্প্রসারণের জন্য সম্মেলনের সেট।

আমি নোড.জেএস এর ডোমেনটি ক্ষুদ্র এবং শক্ত এবং এইভাবে এটি যে সম্মেলনগুলি যুক্ত করেছে সেগুলি যুক্তিযুক্ত করার পক্ষে সহজ এবং তুলনামূলকভাবে সঠিক করা সহজ বলেও আমি খুশি। ওটিওএইচ, রুবি অন রেলস "বিজনেস ওয়েব অ্যাপ্লিকেশনস" এর একটি জটিল, দুর্বল সংজ্ঞায়িত ডোমেনে বাস করে যার অর্থ এটি যে কনভেনশনগুলি রাখে তা অবশ্যই অস্পষ্ট এবং ভাঙা।


তবে এগুলি সবই বলার একটি দীর্ঘ পথ, হ্যাঁ, নিয়োগকারীরা সম্ভবত এটি বলতে পারেন না যে তারা যখন এটি বলবে তখন mean আমি "ফ্রেমওয়ার্ক" অনুমান করছি কেবল "রানটাইম" বা "ইঞ্জিন" এর চেয়ে আরও ভাল, আরও কড়া কথায় শব্দ।


আরে, উল্লেখযোগ্যভাবে ভারসাম্যহীন! সুতরাং probably have no idea,: 'ফ্রেমওয়ার্ক' এমন একটি শব্দ যা আপনি প্রোগ্রামার না হয়েও বুঝতে পারবেন, একটি দরকারী বৈশিষ্ট্য, কখন যদি তা আসলে কোনও তাত্পর্য তৈরি করে।
n611x007

"নোড.জেএস ভাষা সম্প্রসারণের পথে কাঁচা জাভাস্ক্রিপ্টে কার্যকারিতা যুক্ত করে।" সত্য নয়, এটি কার্যকারিতা প্রসারিত করছে এবং ভাষা নয়, এটি আপনাকে অনেক ফ্রেমওয়ার্কের মতো কোড লেখার যেভাবে প্রয়োজন তা পরিবর্তন করে না। অন্তর্ভুক্ত লাইব্রেরি যুক্ত করতে পারে এমন অন্যান্য ফাংশন বা অবজেক্ট রয়েছে objects আপনি এটিকে কল করতে বা এটি কোনও নতুন ফাংশন বা অবজেক্টের মতো ব্যবহার করতে পারেন। প্রোগ্রামিংয়ের স্টাইল পরিবর্তন হয় না, ভাষার মূল বিষয়গুলি একই 'কেবল' কিছু কার্যকারিতা যুক্ত করে। সুতরাং এটি কোনও কাঠামো বা ভাষা সম্প্রসারণ নয়, জাভাস্ক্রিপ্ট যুক্ত করা ডিফল্ট প্ল্যাটফর্ম লাইব্রেরি এবং এইভাবে কার্যকারিতা সহ।
কোডবিট

অবশ্যই, আমি আপনার পক্ষকে পুরোপুরি অনুসরণ করতে পারি। আমি মনে করি এখানে লাইনটি অস্পষ্ট। যেভাবেই চিন্তাভাবনা বোধগম্য হয়। একটি কঠোর পয়েন্ট হিসাবে, নোড একটি এফএফআই সরবরাহ করে জেএস প্রসারিত করে, যা মূল টুকরাটি নোডকে পরবর্তীকালে আরও সিস্টেম লাইব্রেরি সরবরাহ করে। অন্যদিকে, যেখানে "কোর" নোডটি কেবল রানটাইম (এবং এই এফএফআই) রয়েছে, বেশিরভাগ সময় লোকেরা নোড নিয়ে আলোচনা করে তাদের আসলে "মূল রানটাইম, এফএফআই এক্সটেনশানস এবং এর ভিত্তিতে নির্মিত গ্রন্থাগারের কার্যকারিতা" বোঝায় of নোড প্যাকেজ হয় কিভাবে।
জে আব্রাহামসন

20

নোড.জেএস® ক্রোমের ভি 8 জাভাস্ক্রিপ্ট ইঞ্জিনে নির্মিত একটি জাভাস্ক্রিপ্ট রানটাইম

সূত্র

নোড একটি রানটাইম বা পরিবেশ। এটি কোনও কাঠামো নয়। লোকেরা (আমার মনে হয়) প্রায়শই এটি ভুল হয় কারণ এক্সপ্রেসের মতো ফ্রেমওয়ার্কগুলি নোডের সাথে সর্বব্যাপী।

আপনার আগ্রহী হলে রানটাইম বনাম ফ্রেমওয়ার্কগুলিতে আরও পড়া


inb4 "তবে প্রায় পৃষ্ঠাটি বলেছে 'একটি অ্যাসিনক্রোনাস ইভেন্ট চালিত কাঠামো হিসাবে" "আমি সচেতন।
rlemon

3
এম্বেড করা ভি 8 রানটাইম নয়? ;-)
জোহান্নস

@ জোহানেস আমি এতে আপনার সাথে একমত হতে চাইছি। ভি 8 রানটাইম এবং নোডটি সহজেই বিকাশকারীদের জন্য উপলব্ধ সরঞ্জামগুলিকে প্রসারিত করে (HTTP সার্ভার, ব্যবহার, ইত্যাদি) সুতরাং আমি মনে করি ফ্রেমওয়ার্ক লেবেলটি এখনও কাজ করে। তবুও, এটি একটি পরিবর্তিত ভি 8 পরিবেশ; নোড এমন কিছু নয় যা আপনি কেবল আপনার প্রকল্পে "অন্তর্ভুক্ত" করেন। এটি আমার অনুমানের দৃষ্টিকোণের বিষয়।
নিক

@ রলেমন, অংশের কাঠামোটি সরানো হয়েছে।
ইব্রাম খলিল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.