পরিচালিত নেমস্পেস

সারসংক্ষেপ

ভূমিকা

Weave SDK-এ পরিচালিত নেমস্পেস ব্যবহার করা হয় Weave SDK ডেভেলপার এবং ইন্টিগ্রেটর উভয়কে একইভাবে SDK-এর মধ্যে নির্দিষ্ট API সেটগুলির উপাধিতে বিজ্ঞাপিত নির্দেশিকা এবং সাবটেক্সট প্রদান করার জন্য যাতে তারা Weave SDK রিলিজ জুড়ে তাদের মাইগ্রেশন পথের পরিকল্পনা এবং পূর্বাভাস দিতে পারে এবং সম্ভাব্যভাবে, একটি প্রদত্ত মডিউলের জন্য একাধিক, সমবর্তী ওয়েভ এপিআই পরিচালনা করুন।

উপাধি

পরিচালিত নামস্থান চারটি পদের একটি হিসাবে পরিচালিত হতে পারে:

উন্নয়ন

ডেভেলপমেন্ট উপাধির সাথে পরিচালিত যেকোন নামস্থান ডেভেলপার এবং ইন্টিগ্রেটরদের জন্য একটি ইঙ্গিত যে এর মধ্যে থাকা APIগুলি সক্রিয় বিকাশের অধীনে রয়েছে, পরিবর্তনের সাপেক্ষে হতে পারে এবং আনুষ্ঠানিকভাবে সমর্থিত নয়। ইন্টিগ্রেটরদের সাধারণত এই APIগুলি ব্যবহার করতে নিরুৎসাহিত করা হয় যদি না তারা নির্দিষ্টভাবে এটি করার জন্য নির্দেশিত হয়।

পরবর্তী

পরবর্তী উপাধির সাহায্যে পরিচালিত যেকোন নামস্থান হল ডেভেলপার এবং ইন্টিগ্রেটরদের জন্য একটি ইঙ্গিত যে APIগুলির মধ্যে রয়েছে, যদিও তারা বহুলাংশে সক্রিয় বিকাশ সম্পন্ন করেছে, এখনও পরিবর্তন সাপেক্ষে হতে পারে এবং প্রাথমিক মূল্যায়নের উদ্দেশ্যে সমর্থিত। তাই মনোনীত APIগুলি একটি Weave SDK API-তে পরবর্তী বিবর্তনমূলক ফ্রন্টের প্রতিনিধিত্ব করে এবং অবিলম্বে নিকটবর্তী ভবিষ্যতে একটি প্রধান রিলিজ চক্রে বর্তমান, ডিফল্ট API হয়ে যাবে।

একটি API এবং ওভার-দ্য-ওয়্যার প্রোটোকল দৃষ্টিকোণ থেকে পশ্চাদগামী সামঞ্জস্যতা, বিদ্যমান থাকতে পারে কিন্তু তাই মনোনীত API-এ নিশ্চিত নয়।

পরবর্তী ম্যানেজড নেমস্পেস উপাধিটি কার্যকরভাবে বিকাশকারী এবং ইন্টিগ্রেটরদের একটি ভিউ প্রদান করে যেখানে ওয়েভ এসডিকে নেতৃত্বে রয়েছে তা ইঙ্গিত করে যে ভবিষ্যতে রিলিজে বর্তমান, ডিফল্ট API কী হবে।

পরবর্তী পরিচালিত নেমস্পেস উপাধিটি ঐচ্ছিক যেমন একটি পরিচালিত নামস্থান এটি ব্যবহার না করে একটি জীবনচক্রের মাধ্যমে স্থানান্তরিত হতে পারে ( পরিচালিত নেমস্পেস লাইফসাইকেল দেখুন)।

কারেন্ট

বর্তমান পদবী দিয়ে পরিচালিত যেকোন নেমস্পেস বা কোনো অব্যবস্থাপিত নামস্থান (অর্থাৎ পরিচালিত নামস্থানের উপাধির অভাব) ওয়েভ SDK-এর সেই অংশ বা মডিউলের জন্য বর্তমান, ডিফল্ট, অফিসিয়াল সমর্থিত API প্রতিনিধিত্ব করে। যদিও এখনও এই ধরনের API-তে চলমান উন্নতি হতে পারে, পরিবর্তনগুলি মূলত বৃদ্ধিমূলক এবং পশ্চাদমুখী সামঞ্জস্যপূর্ণ হবে, API এবং ওভার-দ্য-ওয়্যার উভয়ই বজায় রাখা উচিত।

বর্তমান পরিচালিত নামস্থান উপাধিটি ঐচ্ছিক যাতে একটি পরিচালিত নামস্থান এটি ব্যবহার না করে একটি জীবনচক্রের মাধ্যমে স্থানান্তরিত হতে পারে ( পরিচালিত নেমস্পেস লাইফসাইকেল দেখুন)। প্রকৃতপক্ষে, কোনো অব্যবস্থাপিত নামস্থান অন্তর্নিহিতভাবে বর্তমান।

উত্তরাধিকার

লিগ্যাসি উপাধির সাথে পরিচালিত যেকোন নেমস্পেস ডেভেলপার এবং ইন্টিগ্রেটরদের জন্য একটি ইঙ্গিত যে এর মধ্যে থাকা APIগুলিকে অবমূল্যায়ন করা হয়েছে এবং একটি নতুন, বর্তমান API দিয়ে প্রতিস্থাপন করা হয়েছে। এই APIগুলি পূর্বে বর্তমান APIগুলিকে উপস্থাপন করে।

পরবর্তী বড় ওয়েভ এসডিকে রিলিজে এমনভাবে মনোনীত APIগুলি সম্পূর্ণরূপে অদৃশ্য হয়ে যাবে; ফলস্বরূপ, ডেভেলপার এবং ইন্টিগ্রেটরদের উচিত এই API গুলি থেকে দূরে স্থানান্তরের পরিকল্পনা স্থাপন করা যদি তারা Weave SDK রিলিজের অগ্রণী প্রান্তের সাথে থাকতে চায়।

পরিচালিত নেমস্পেস লাইফসাইকেল

নিম্নলিখিত চিত্রটি একটি পরিচালিত নামস্থানের জীবনচক্রকে ব্যাখ্যা করে কারণ এটি বিকাশ থেকে এবং সম্ভাব্যভাবে, উত্তরাধিকারে রূপান্তরিত হয়:

.-------------.      .- - - .      .- - - - -.      .--------.
| Development | -.->   Next   -.->   Current   ---> | Legacy |
'-------------'  |   '- - - '  |   ' - - - - '      '--------'
                 |             |
                 '-------------'

যদি এটি নিযুক্ত করা হয়, পরিচালিত নেমস্পেস জীবনচক্র উন্নয়ন উপাধি দিয়ে শুরু হয়।

যখন বিকাশ সম্পূর্ণ হয় এবং কোডটি মূল্যায়ন এবং একীকরণের জন্য প্রস্তুত হয়, তখন উপাধিটি পরবর্তী বা বর্তমানে স্থানান্তরিত হয়। বিকল্পভাবে, উপাধিটি সম্পূর্ণভাবে বাদ দেওয়া যেতে পারে এবং পরিচালিত নেমস্পেস আর নিযুক্ত করা যাবে না, কার্যকরভাবে উপাধিটিকে অন্তর্নিহিতভাবে বর্তমান করে।

যদি কোডটি পাশাপাশি থাকতে হয় এবং এখনও বর্তমান কোডকে প্রতিস্থাপন না করে, তাহলে উপাধিটি পরবর্তীতে স্থানান্তরিত করা উচিত। যদি কোডটি বর্তমান কোডের প্রতিস্থাপন করতে হয়, তাহলে উপাধিটি বর্তমানে স্থানান্তরিত হওয়া উচিত।

পরবর্তী উপাধি ব্যবহার করে, কোডটি পছন্দসই সংখ্যা প্রকাশ এবং মূল্যায়ন চক্রের মধ্য দিয়ে যাওয়ার পরে, উপাধিটি বর্তমানে স্থানান্তরিত হয় বা আবার, পদবীটি সম্পূর্ণভাবে বাদ দেওয়া হতে পারে।

বর্তমান উপাধি ব্যবহার করে, যদি কোডটি নতুন কোড দ্বারা প্রতিস্থাপন করা হয় কিন্তু তারপরও বেশ কয়েকটি রিলিজ চক্রের জন্য রক্ষণাবেক্ষণের প্রয়োজন হয়, তাহলে পদবীটি উত্তরাধিকারে স্থানান্তরিত হয়।

লিগ্যাসি উপাধি থেকে, কোডটি শেষ পর্যন্ত Weave SDK থেকে সম্পূর্ণভাবে সরানো হয়।

পরিচালিত নেমস্পেস ব্যবহার করে

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

একজন বিকাশকারী হিসাবে পরিচালিত নেমস্পেস ব্যবহার করা

Weave SDK বিকাশকারীর একটি মূল ফোকাস হল নতুন Weave SDK API এবং কার্যকারিতা উন্নত করা এবং বিকাশ করা, যখন অনেক ক্ষেত্রে একই সময়ে বিদ্যমান API এবং কার্যকারিতা স্থাপনকে সমর্থন করে৷

যেখানে একই API-এর মধ্যে ব্যাকওয়ার্ড-সামঞ্জস্যপূর্ণ উপায়ে এই উভয় ফোকাস ক্ষেত্রগুলিকে সন্তুষ্ট করা সম্ভব নয়, পরিচালিত নেমস্পেসগুলি এই APIগুলিকে সমান্তরালভাবে পরিচালনা করার জন্য একটি পদ্ধতি প্রদান করে, এমনভাবে যা বিদ্যমান API এবং কার্যকারিতা স্থাপনে ব্যাঘাত ঘটায় না।

একটি কার্যকরী উদাহরণ হিসাবে, বুধের একটি ওয়েভ প্রোফাইল অনুমান করুন, যা বর্তমানে নিম্নোক্ত, অব্যবস্থাপিত, নেমস্পেস অনুক্রমের অধীনে বিদ্যমান:

namespace nl {
namespace Weave {
namespace Profiles {
namespace Mercury {

// ...

}; // namespace Mercury
}; // namespace Profiles
}; // namespace Weave
}; // namespace nl

এবং নিম্নলিখিত পাবলিক হেডার:

  • বুনন/প্রোফাইল/মারকারি/Mercury.hpp
  • ওয়েভ/প্রোফাইল/মারকারি/বার.এইচপিপি
  • বুনন/প্রোফাইল/মারকারি/Foo.hpp
  • Weave/Profiles/Mercury/Foobar.hpp

যেখানে Mercury.hpp হল মডিউল "ছাতা" হেডার। বেশিরভাগ ইন্টিগ্রেটরগুলি কেবল দেখানো হিসাবে মডিউল "ছাতা" শিরোনাম অন্তর্ভুক্ত করে:

#include 

যাইহোক, বুধের বিকাশকারী এখন এমন একটি বিন্দুতে পৌঁছেছে যেখানে একটি পরবর্তী প্রজন্মের API এবং সম্ভাব্যভাবে, ওভার-দ্য-ওয়্যার প্রোটোকল বিকাশের প্রয়োজন রয়েছে যা বিদ্যমান স্থাপনার সাথে পিছিয়ে-সামঞ্জস্যপূর্ণ নয়। পরিচালিত নেমস্পেস ব্যবহার করা এই বিদ্যমান স্থাপনাগুলিকে ভঙ্গ না করে এটি সম্পন্ন করতে সহায়তা করতে পারে।

বর্তমান নামস্থান বর্তমানে সরান

এপিআই-এর বর্তমান রিলিজ এবং বিদ্যমান স্থাপন করা ইন্টিগ্রেশনের কার্যকারিতাকে সমর্থন করার লক্ষ্য নিয়ে, প্রথম কাজটি হল বর্তমান কোডটি সরানো:

% cd src/lib/profiles/mercury
% mkdir Current
% mv Mercury.hpp Bar.hpp Foo.hpp Foobar.hpp *.cpp Current/

দ্রষ্টব্য, ফাইলগুলি সরানোর পাশাপাশি, সরানো ফাইলগুলির জন্য হেডার অন্তর্ভুক্ত গার্ডগুলির নামও পরিবর্তন করা উচিত, সম্ভাব্যভাবে সেগুলিকে '_CURRENT' দিয়ে সজ্জিত করা উচিত, যেহেতু নতুন, অনুরূপ-নামযুক্ত ফাইলগুলি নীচে তাদের জায়গা তৈরি করা হবে৷

কোড সরানোর সাথে সাথে, পরবর্তী পদক্ষেপটি হল উপযুক্ত পদবি সহ নামস্থান পরিচালনা করা, এখানে 'বর্তমান'। প্রথমে, একটি হেডার তৈরি করুন যা পরিচালিত নেমস্পেসকে 'Current/MercuryManagedNamespace.hpp' হিসাবে সংজ্ঞায়িত করে। একাধিক শিরোনাম ফাইল থাকাকালীন প্রতিটি হেডার ফাইলে এই বিষয়বস্তু পুনরাবৃত্তি এবং নকল করার চেয়ে এই ধরনের একটি হেডার তৈরি করা পছন্দনীয়৷

% cat << EOF > Current/MercuryManagedNamespace.hpp
#ifndef _WEAVE_MERCURY_MANAGEDNAMESPACE_CURRENT_HPP
#define _WEAVE_MERCURY_MANAGEDNAMESPACE_CURRENT_HPP

#include 

#if defined(WEAVE_CONFIG_MERCURY_NAMESPACE) && WEAVE_CONFIG_MERCURY_NAMESPACE != kWeaveManagedNamespace_Current
#error Compiling Weave Mercury current-designation managed namespace file with WEAVE_CONFIG_MERCURY_NAMESPACE defined != kWeaveManagedNamespace_Current
#endif

#ifndef WEAVE_CONFIG_MERCURY_NAMESPACE
#define WEAVE_CONFIG_MERCURY_NAMESPACE kWeaveManagedNamespace_Current
#endif

namespace nl {
namespace Weave {
namespace Profiles {

namespace WeaveMakeManagedNamespaceIdentifier(Mercury, kWeaveManagedNamespaceDesignation_Current) { };

namespace Mercury = WeaveMakeManagedNamespaceIdentifier(Mercury, kWeaveManagedNamespaceDesignation_Current);

}; // namespace Profiles
}; // namespace Weave
}; // namespace nl

#endif // _WEAVE_MERCURY_MANAGEDNAMESPACE_CURRENT_HPP
EOF

পরবর্তী, বিদ্যমান শিরোনামগুলিতে অন্যান্য মডিউল-নির্দিষ্ট অন্তর্ভুক্ত নির্দেশাবলীর আগে এই শিরোনামটি অন্তর্ভুক্ত করুন। উদাহরণ স্বরূপ:

#include 

#include 

সামঞ্জস্যপূর্ণ শিরোনাম তৈরি করুন

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

এটি মোকাবেলা করার জন্য, সামঞ্জস্যপূর্ণ র্যাপার শিরোনামগুলি তৈরি করতে হবে যা এইমাত্র সরানো হয়েছে।

% touch Mercury.hpp Bar.hpp Foo.hpp Foobar.hpp

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

#ifndef _WEAVE_MERCURY_BAR_HPP
#define _WEAVE_MERCURY_BAR_HPP

#include 

#endif // _WEAVE_MERCURY_BAR_HPP

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

আগের মতো, পরিচালিত নেমস্পেস কনফিগারেশনের জন্য একটি হেডার তৈরি করা হয়েছে, এখানে MercuryManagedNamespace.hpp হিসাবে। আবার, যখন একাধিক হেডার ফাইল থাকে তখন প্রতিটি হেডার ফাইলে এই বিষয়বস্তুটি পুনরাবৃত্তি এবং নকল করার জন্য এটি পছন্দনীয়।

% cat << EOF > MercuryManagedNamespace.hpp
#ifndef _WEAVE_MERCURY_MANAGEDNAMESPACE_HPP
#define _WEAVE_MERCURY_MANAGEDNAMESPACE_HPP

#include 

#if defined(WEAVE_CONFIG_MERCURY_NAMESPACE)                             \
  && (WEAVE_CONFIG_MERCURY_NAMESPACE != kWeaveManagedNamespace_Current) \
  && (WEAVE_CONFIG_MERCURY_NAMESPACE != kWeaveManagedNamespace_Development)
#error "WEAVE_CONFIG_MERCURY_NAMESPACE defined, but not as namespace kWeaveManagedNamespace_Current or kWeaveManagedNamespace_Development"
#endif

#if !defined(WEAVE_CONFIG_MERCURY_NAMESPACE)
#define WEAVE_CONFIG_MERCURY_NAMESPACE kWeaveManagedNamespace_Current
#endif

#endif // _WEAVE_MERCURY_MANAGEDNAMESPACE_HPP
EOF

মনে রাখবেন যে এই ডিফল্ট, ইচ্ছামতো, পরিচালিত নেমস্পেস উপাধি 'বর্তমান'-এ যদি কোনো কনফিগারেশন সংজ্ঞায়িত করা না থাকে।

এই শিরোনামটি জায়গায় রেখে, সামঞ্জস্যপূর্ণ র‍্যাপার শিরোনামগুলি এখন ধারণ করতে সম্পাদনা করা যেতে পারে:

#include 

#if WEAVE_CONFIG_MERCURY_NAMESPACE == kWeaveManagedNamespace_Development
#include 
#else
#include 
#endif // WEAVE_CONFIG_MERCURY_NAMESPACE == kWeaveManagedNamespace_Development

বা নামস্থান ব্যবস্থাপনা ব্যবহারের ক্ষেত্রে যা উপযুক্ত তা হাতের কাছে।

ডেভেলপমেন্ট কন্টেন্ট তৈরি করুন

এই মুহুর্তে, বিদ্যমানগুলির পাশাপাশি নতুন কার্যকারিতা এবং API গুলি তৈরি করা শুরু করার জন্য অবকাঠামো এখন রয়েছে৷

% mkdir Development
% touch Development/Mercury.hpp Development/Bar.hpp Development/Foo.hpp Development/Foobar.hpp
% cat << EOF > Development/MercuryManagedNamespace.hpp
#ifndef _WEAVE_MERCURY_MANAGEDNAMESPACE_DEVELOPMENT_HPP
#define _WEAVE_MERCURY_MANAGEDNAMESPACE_DEVELOPMENT_HPP

#include 

#if defined(WEAVE_CONFIG_MERCURY_NAMESPACE) && WEAVE_CONFIG_MERCURY_NAMESPACE != kWeaveManagedNamespace_Development
#error Compiling Weave Mercury development-designated managed namespace file with WEAVE_CONFIG_MERCURY_NAMESPACE defined != kWeaveManagedNamespace_Development
#endif

#ifndef WEAVE_CONFIG_MERCURY_NAMESPACE
#define WEAVE_CONFIG_MERCURY_NAMESPACE kWeaveManagedNamespace_Development
#endif

namespace nl {
namespace Weave {
namespace Profiles {

namespace WeaveMakeManagedNamespaceIdentifier(Mercury, kWeaveManagedNamespaceDesignation_Development) { };

namespace Mercury = WeaveMakeManagedNamespaceIdentifier(Mercury, kWeaveManagedNamespaceDesignation_Development);

}; // namespace Profiles
}; // namespace Weave
}; // namespace nl

#endif // _WEAVE_MERCURY_MANAGEDNAMESPACE_DEVELOPMENT_HPP
EOF

অবশ্যই, যদি একটি মডিউল এখানে উপস্থাপিত উদাহরণের চেয়ে অনেক সহজ হয় এবং এতে অনেকগুলি ক্লাস, উত্স, ফাইল বা শিরোনাম না থাকে, তবে ফাইলগুলিকে চারপাশে সরানো এবং একাধিক স্বতন্ত্র কনফিগারেশন এবং সামঞ্জস্যপূর্ণ শিরোনাম তৈরি না করেই এটি একই হেডার ফাইলে সম্পন্ন করা যেতে পারে। . যাইহোক, এই জটিল উদাহরণের সাথে, এটি একটি জটিল থেকে সরল বর্ণালী বরাবর পরিচালিত নেমস্পেস সমাধানগুলিকে অনুপ্রাণিত করবে।

একটি ইন্টিগ্রেটর হিসাবে পরিচালিত নেমস্পেস ব্যবহার করা

ওয়েভ SDK ইন্টিগ্রেটরের একটি মূল ফোকাস হল উপযুক্ত ওয়েভ SDK পাবলিক API হেডার এবং তাদের বিরুদ্ধে অ্যাপ্লিকেশনগুলিকে একীভূত করা এবং বিকাশ করা।

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

  • বুনন/প্রোফাইল/মারকারি/Mercury.hpp
  • ওয়েভ/প্রোফাইল/মারকারি/বার.এইচপিপি
  • বুনন/প্রোফাইল/মারকারি/Foo.hpp
  • Weave/Profiles/Mercury/Foobar.hpp
  • বুনন/প্রোফাইল/মারকারি/পরবর্তী/Mercury.hpp
  • বুনন/প্রোফাইল/মারকারি/পরবর্তী/বার.এইচপিপি
  • বুনন/প্রোফাইল/মারকারি/পরবর্তী/Foo.hpp
  • বুনন/প্রোফাইল/মারকারি/পরবর্তী/Foobar.hpp
  • বুনন/প্রোফাইল/মারকারি/কারেন্ট/Mercury.hpp
  • ওয়েভ/প্রোফাইল/মারকারি/কারেন্ট/বার.এইচপিপি
  • বুনন/প্রোফাইল/মারকারি/কারেন্ট/Foo.hpp
  • ওয়েভ/প্রোফাইল/মারকারি/কারেন্ট/ফুবার.এইচপিপি
  • Weave/Profiles/Mercury/Legacy/Mercury.hpp
  • ওয়েভ/প্রোফাইল/মারকারি/লিগেসি/বার.এইচপিপি
  • ওয়েভ/প্রোফাইল/মারকারি/লিগেসি/Foo.hpp
  • Weave/Profiles/Mercury/Legacy/Foobar.hpp

যেখানে Mercury.hpp হল মডিউল "ছাতা" হেডার।

যদি না হাতের ব্যবহারের ক্ষেত্রে স্পষ্টভাবে উইভের মধ্যে একটি নামস্থান পরিচালিত মডিউল সহ প্রেরণা না দেয়, উদাহরণস্বরূপ:

#include 

ওয়েভ মডিউল পাবলিক হেডারগুলিকে তাদের অব্যবস্থাপিত, ডিফল্ট পাথ (যেমন Weave/Profiles/Mercury/Mercury.hpp) দ্বারা উল্লেখ করা ভাল। এটি করা একটি প্রকল্পের অন্তর্ভুক্ত নির্দেশাবলীকে ক্রমাগত পরিবর্তন না করে API বিকাশের অগ্রগতি অনুসরণ করার অনুমতি দেয় কারণ সেই APIগুলি পরিচালিত জীবনচক্রের মাধ্যমে প্রবাহিত হয়।

এই কৌশল অনুসরণ করে, ডিপ্লোয়মেন্টগুলি তাদের কোডকে একটি ভিন্ন পরিচালিত নেমস্পেস উপাধিতে পুনরায় লক্ষ্য করতে পারে, বর্তমান উপাধি যেমন, C/C++ প্রিপ্রসেসরে পছন্দসই কনফিগারেশন নির্দিষ্ট করে। এটি কমান্ড লাইনে, সোর্স কোডে বা কনফিগারেশন বা উপসর্গ শিরোনামে করা যেতে পারে:

#define WEAVE_CONFIG_MERCURY_NAMESPACE kWeaveManagedNamespace_Current

এবং অব্যবস্থাপিত / অযোগ্য অন্তর্ভুক্ত পাথ ব্যবহার করুন:

#include 

কখন, এবং যদি, টার্গেটেড API-এর জন্য পরিচালিত নেমস্পেস উপাধি পরিবর্তিত হয়, উদাহরণস্বরূপ বর্তমান থেকে উত্তরাধিকারে, কেবল প্রিপ্রসেসর সংজ্ঞা সামঞ্জস্য করে পুনরায় লক্ষ্য করুন:

#define WEAVE_CONFIG_MERCURY_NAMESPACE kWeaveManagedNamespace_Legacy