দেখে মনে হচ্ছে আপনি "নেমস্পেস" এবং "মডিউল" উভয়ের পরিভাষা ওভারলোড বেছে নিচ্ছেন। আপনার সংজ্ঞাগুলি মাপসই না করে আপনি জিনিসগুলি "পরোক্ষ" হিসাবে দেখেন তাতে অবাক হওয়ার কিছু নেই।
সি # সহ নেমস্পেস সমর্থন করে এমন বেশিরভাগ ভাষায়, নেমস্পেস কোনও মডিউল নয়। একটি নামস্থান স্কোপিং নামগুলির একটি উপায়। মডিউলগুলি স্কোপিং আচরণের একটি উপায়।
সাধারণভাবে। নেট রানটাইমটি মডিউলটির ধারণাকে সমর্থন করে (আপনি যে বিষয়টি বোঝাতে চাইছেন তার চেয়ে কিছুটা আলাদা সংজ্ঞা সহ), এটি খুব কমই ব্যবহৃত হয়; আমি কেবল এটি শার্পডেভলভ নির্মিত প্রকল্পগুলিতেই দেখেছি, বেশিরভাগ যাতে আপনি বিভিন্ন ভাষায় নির্মিত মডিউলগুলি থেকে একটি ডিএলএল তৈরি করতে পারেন। পরিবর্তে, আমরা গতিশীলভাবে সংযুক্ত লাইব্রেরি ব্যবহার করে গ্রন্থাগারগুলি তৈরি করি।
সি # তে, নেমস্পেসগুলি কোনও "দিকনির্দেশের স্তর" ছাড়াই সমাধান করে যতক্ষণ না তারা সমস্ত একই বাইনারি থাকে; যে কোনও নির্দেশনা আবশ্যক হ'ল সংকলক এবং লিঙ্কারের একটি দায়িত্ব যা আপনাকে খুব বেশি চিন্তা করতে হবে না। একবার আপনি একাধিক নির্ভরতা নিয়ে একটি প্রকল্প তৈরি শুরু করার পরে, আপনি তারপরে বাহ্যিক লাইব্রেরিগুলি উল্লেখ করুন। আপনার প্রকল্পটি একবার বাহ্যিক গ্রন্থাগারের (ডিএলএল) রেফারেন্স তৈরি করার পরে, সংকলকটি এটি আপনার জন্য সন্ধান করে।
স্কিমে, আপনার যদি কোনও বাহ্যিক লাইব্রেরি লোড করতে হয় তবে আপনাকে (#%require (lib "mylib.ss"))
প্রথমে কিছু করতে হবে , বা বিদেশী ফাংশন ইন্টারফেসটি সরাসরি ব্যবহার করতে হবে, যেমনটি আমি মনে করি। আপনি যদি বাহ্যিক বাইনারিগুলি ব্যবহার করে থাকেন তবে বাহ্যিক বাইনারিগুলি সমাধান করার জন্য আপনার সমান পরিমাণ কাজ রয়েছে। সম্ভবত আপনি সাধারণত গ্রন্থাগারগুলি এত সাধারণভাবে ব্যবহার করেছেন যে আপনার কাছে এমন একটি স্কিম-ভিত্তিক শিম রয়েছে যা এটিকে বিমূর্ত করে তোলে, তবে আপনি যদি কখনও কোনও তৃতীয় পক্ষের লাইব্রেরির সাথে নিজের ইন্টিগ্রেশন লিখতে চান তবে আপনাকে অবশ্যই "লোড করার জন্য কিছু কাজ করতে হবে" " লাইব্রেরি.
রুবিতে, মডিউলগুলি, নেমস্পেসগুলি এবং ফাইলের নামগুলি আসলে আপনার তুলনায় অনেক কম সংযুক্ত; LOAD_PATH জিনিসগুলি কিছুটা জটিল করে তোলে এবং মডিউল ঘোষণা যে কোনও জায়গায় হতে পারে। সিমে তৃতীয় পক্ষের লাইব্রেরিগুলি এখনও একটি (ছোট) বলি যুক্ত করে, স্কিমে আপনি যেভাবে দেখছেন বলে মনে করেন পাইথন সম্ভবত সেগুলি করার কাছাকাছি।
তদ্ব্যতীত, রুবি, পাইথন এবং লিস্পের মতো গতিশীলভাবে টাইপ করা ভাষাগুলির সাধারণত "চুক্তিগুলি" স্ট্যাটিকালি টাইপ করা ভাষার মতোই হয় না। গতিশীলভাবে টাইপ করা ভাষায়, আপনি সাধারণত কেবলমাত্র "জেন্টলম্যানের চুক্তি" বাছাই করেন যে কোডটি নির্দিষ্ট পদ্ধতিগুলিতে প্রতিক্রিয়া জানাবে এবং যদি আপনার ক্লাসগুলি একই ভাষায় কথা বলে মনে হয়, সমস্ত ভাল। সংক্ষিপ্তভাবে টাইপ করা ভাষাগুলির সংকলনের সময় এই নিয়মগুলি প্রয়োগ করার জন্য অতিরিক্ত ব্যবস্থা রয়েছে। সি # তে, এই জাতীয় চুক্তি ব্যবহার করা আপনাকে এই ইন্টারফেসগুলিতে আনুগত্যের কমপক্ষে মাঝারি পর্যায়ে দরকারী গ্যারান্টি সরবরাহ করতে দেয়, যা আপনাকে কিছুটা সাধারণতার গ্যারান্টি সহ প্লাগইন এবং বিকল্পগুলি বান্ডিল করতে দেয় কারণ আপনি সবাই একই চুক্তির বিরুদ্ধে সংকলন করেন। রুবি বা স্কিমে আপনি এই চুক্তিগুলি রানটাইমের সময় কাজ করে এমন পরীক্ষা লিখে যাচাই করে নিন।
এই সংকলন সময়ের গ্যারান্টিগুলি থেকে একটি পরিমাপযোগ্য পারফরম্যান্স সুবিধা রয়েছে কারণ কোনও পদ্ধতিতে অনুরোধের জন্য ডাবল প্রেরণের প্রয়োজন হয় না। লিস্প, রুবি, জাভাস্ক্রিপ্ট বা অন্য কোথাও এই সুবিধা পাওয়ার জন্য, বিশেষায়িত ভিএমগুলিতে জাস্ট-ইন-টাইম স্ট্যাটিক্যালি ক্লাসিং ক্লাসগুলির সামান্য বহিরাগত প্রক্রিয়াগুলি বর্তমানে প্রয়োজনীয়।
সি # বাস্তুতন্ত্রের জন্য এখনও অপেক্ষাকৃত অপরিণত সমর্থন রয়েছে এমন একটি বিষয় এই বাইনারি নির্ভরতাগুলির পরিচালনা; আপনার সমস্ত প্রয়োজনীয় নির্ভরতা আছে কিনা তা নিশ্চিত করার জন্য জাভা কয়েক বছর ধরে ম্যাভেনকে ধরে রেখেছিল, যদিও সি # তে এখনও বেশিরভাগ আদিম মেক-এর মতো পদ্ধতির মধ্যে রয়েছে যা কৌশলগতভাবে সময়ের আগে সঠিক জায়গায় ফাইল স্থাপনের সাথে জড়িত।