সি ++ 11 এর সাথে সামনের সামঞ্জস্যতা অর্জন করা


12

আমি একটি বৃহত সফ্টওয়্যার অ্যাপ্লিকেশন নিয়ে কাজ করি যা অবশ্যই বেশ কয়েকটি প্ল্যাটফর্মে চালানো উচিত। এই প্ল্যাটফর্মগুলির কয়েকটি সি ++ 11 (যেমন এমএসভিএস 2010) এর কয়েকটি বৈশিষ্ট্য সমর্থন করে এবং কিছু কিছু (যেমন জিসিসি 4.3.x) সমর্থন করে না। আমি আশা করি কয়েক বছর ধরে এই পরিস্থিতি অব্যাহত থাকবে (আমার সেরা অনুমান: 3-5 বছর)

এটি দেওয়া, আমি একটি উপযুক্ততা ইন্টারফেস স্থাপন করতে চাই যে (যে কোনও ডিগ্রীতেই সম্ভব) লোকেরা সি ++ 11 কোড লিখতে পারে যা এখনও কমপক্ষে রক্ষণাবেক্ষণের সাথে পুরানো সংকলকগুলির সাথে সংকলন করবে। সামগ্রিকভাবে, লক্ষ্যটি হ'ল প্ল্যাটফর্মগুলিতে বেসিক সি ++ 11 সিনট্যাক্স / বৈশিষ্ট্যগুলি সক্ষম করার পরেও # ইফদেফকে যথাসম্ভব যথাসম্ভব হ্রাস করা এবং প্ল্যাটফর্মগুলিতে এমুলেশন সরবরাহ করা যা না।

চলুন শুরু করা যাক std :: মুভ () দিয়ে। সামঞ্জস্যতা অর্জনের সর্বাধিক সুস্পষ্ট উপায় হ'ল একটি সাধারণ শিরোনাম ফাইলে এই জাতীয় কিছু রাখা:

#if !defined(HAS_STD_MOVE)
namespace std { // C++11 emulation
  template <typename T> inline T& move(T& v) { return v; }
  template <typename T> inline const T& move(const T& v) { return v; }
}
#endif // !defined(HAS_STD_MOVE)

এটি লোকেদের মতো জিনিস লিখতে দেয়

std::vector<Thing> x = std::move(y);

... দায়মুক্তি সহ এটি সি ++ 11 এ তারা যা চায় তা করে এবং এটি সি ++ 03 এ যা করতে পারে তা সেরা করে। আমরা শেষ পর্যন্ত সি ++ 03 সংকলকগুলির সর্বশেষটি ফেলে দিলে এই কোডটি যেমন রয়েছে তেমন থাকতে পারে।

যাইহোক, মান অনুসারে, নাম স্পেসে নতুন প্রতীক ইনজেকশন করা অবৈধ std। এটাই তত্ত্ব। আমার প্রশ্ন হ'ল: কার্যত বলতে গেলে সামনের সামঞ্জস্যতা অর্জনের উপায় হিসাবে এর কোনও ক্ষতি আছে কি?


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

হ্যাঁ, আমি সেই বৈশিষ্ট্যগুলি সম্পর্কে বিশেষভাবে ভাবছি যা গ্রন্থাগার পর্যায়ে প্রয়োগ করা যেতে পারে, সিনট্যাকটিকাল পরিবর্তনগুলি নয়। বুস্ট সত্যিই (বিরামবিহীন) ফরোয়ার্ড সামঞ্জস্যের বিষয়টি বিবেচনা করে না। আমি যদি কিছু মিস করছি না ...
এমএমসিসিসি

Gcc 4.3 এর মধ্যে ইতিমধ্যে বেশ কয়েকটি সি ++ 11 বৈশিষ্ট্য রয়েছে, মূল্য-রেফারেন্সগুলি সম্ভবত সবচেয়ে গুরুত্বপূর্ণ।
জান হুডেক

@ জানহুদেক: আপনি ঠিক বলেছেন। দরিদ্র উদাহরণ। যাইহোক, অন্যান্য সংকলক রয়েছে যা অবশ্যই সিনট্যাক্সকে সমর্থন করে না (যেমন আমাদের আইবিএম এর সি ++ সংকলকটির সংস্করণ যাই হোক না কেন)।
এমএমসিসিসি

উত্তর:


9

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

ব্যবহারিক ব্যবহারের জন্য পর্যাপ্ত পর্যায়ে সি ++ 03 তে অনুকরণ করা যায় এমন অনেকগুলি বৈশিষ্ট্য রয়েছে - এবং উদাহরণস্বরূপ আসা সমস্ত ঝামেলা ছাড়াই: বুস্ট। মুরগি, এমনকি সি ++ মানের প্রস্তাবনাতে nullptrএকটি সি ++ 03 ব্যাকপোর্টের পরামর্শ দেওয়া হয়। এবং তারপরে টিআর 1 রয়েছে প্রতিটি সি ++ 11 এর জন্য উদাহরণস্বরূপ ‑ তবে আমাদের কাছে ‑ বছরের স্টাফের জন্য ‑ পূর্বরূপ। ছিল। শুধু তাই নয়, কিছু সি ++ 14 বৈশিষ্ট্য যেমন আসর্ট ভেরিয়েন্টস, স্বচ্ছ ফান্টেক্টর এবং সি ++ 03 তে প্রয়োগ করা optional যেতে পারে!

কেবলমাত্র দুটি জিনিস যা আমি জানি যে একেবারে ব্যাকপোর্ট করা যায় না সেগুলি হ'ল কনটেক্সটপ্রপ এবং ভেরিয়াদিক টেম্পলেট।

নেমস্পেসে স্টাফ যুক্ত করার পুরো বিষয়টি সম্পর্কে std, আমার এ সম্পর্কে আমার দৃষ্টিভঙ্গি হ'ল এটি মোটেই গুরুত্বপূর্ণ নয় । বুস্টের কথা চিন্তা করুন, অন্যতম গুরুত্বপূর্ণ এবং প্রাসঙ্গিক সি ++ গ্রন্থাগার, এবং তাদের টিআর 1: বুস্ট.আরটিআর 1 বাস্তবায়ন। আপনি সি উন্নত করতে চান ++ এটা ফরোয়ার্ড সি ++ 11 সঙ্গে সামঞ্জস্যপূর্ণ করুন, তারপরে সংজ্ঞা দ্বারা আপনি এটা কিছু যে মধ্যে চালু করছেন না সি ++ 03, তাই নিজের একটি স্ট্যান্ডার্ড ধরে ব্লক যে আপনার এড়ান বা আসলে ফেলে যাত্তয়া মনস্থ , সহজভাবে বলতে গেলে, পাল্টা। পুরিস্টরা অভিযোগ করবেন, তবে সংজ্ঞা অনুসারে তাদের যত্ন নেওয়া উচিত নয়।

অবশ্যই, আপনি সর্বোপরি (03) স্ট্যান্ডার্ডটি অনুসরণ করবেন না এর অর্থ এই নয় যে আপনি চেষ্টা করতে পারবেন না, বা আনন্দের সাথে এটি ভঙ্গ করবেন। ঐটা আসল কথা না. আপনি যতক্ষণ stdনেমস্পেসে যুক্ত হন সে সম্পর্কে খুব সতর্কতা অবলম্বন করে রাখুন এবং আপনার সফ্টওয়্যারটি যেখানে ব্যবহার করা হচ্ছে এমন পরিবেশের নিয়ন্ত্রণ রাখবেন (যেমন: পরীক্ষা করুন!) কোনওরকম অপ্রতিরোধ্য ক্ষতি হওয়া উচিত নয়। যদি সম্ভব হয় তবে পৃথক নেমস্পেসে সমস্ত কিছু সংজ্ঞায়িত করুন এবং কেবল নেমস্পেসে usingনির্দেশিকা যুক্ত করুন stdযাতে আপনি "একেবারে" ভিতরে যাওয়ার দরকারের বাইরে সেখানে কিছু যোগ করছেন না। আইআইএনএম, বুস্ট.আরটিআর 1 বা আরও কম কি করবে।


আপডেট (2013) : মূল প্রশ্নের অনুরোধ হিসাবে এবং জবাবের অভাবের কারণে আমি যুক্ত করতে পারি না এমন কিছু মন্তব্য দেখার জন্য, এখানে সি ++ 11 এবং সি ++ 14 বৈশিষ্ট্যগুলির একটি তালিকা এবং তাদের বহনযোগ্যতার ডিগ্রি সি ++ 03 তে:

  • nullptr: অফিসিয়াল কমিটির ব্যাকপোর্টের কারণে পুরোপুরি বাস্তবায়নযোগ্য; আপনাকে সম্ভবত কিছু টাইপ_ট্রেট বিশেষীকরণ সরবরাহ করতে হবে যাতে এটি একটি "নেটিভ" ধরণের হিসাবে স্বীকৃত হয়।
  • forward_list: সম্পূর্ণরূপে প্রয়োগযোগ্য, যদিও বরাদ্দকারী সহায়তা আপনার ট্র 1 টি ইমপ্লিমেন্টেশন কী সরবরাহ করতে পারে তার উপর নির্ভর করে।
  • নতুন অ্যালগরিদম (পার্টিশন_কপি ইত্যাদি): সম্পূর্ণরূপে প্রয়োগযোগ্য।
  • ব্রেস-সিকোয়েন্সগুলি (যেমন vector<int> v = {1, 2, 3, 4};:) থেকে ধারক নির্মাণগুলি : সম্পূর্ণরূপে বাস্তবায়িত, যদিও একের চেয়ে আরও বেশি শব্দ পছন্দ করবে।
  • static_assert: ম্যাক্রো হিসাবে প্রয়োগ করার সময় কাছাকাছি-সম্পূর্ণরূপে প্রয়োগযোগ্য (আপনাকে কেবল কমা দিয়ে সতর্ক থাকতে হবে)।
  • unique_ptr: কাছাকাছি-সম্পূর্ণ বাস্তবায়নযোগ্য, তবে আপনার কলিং কোড থেকে সহায়তাও প্রয়োজন (সেগুলি পাত্রে সংরক্ষণ করার জন্য ইত্যাদি); নীচে যদিও দেখুন।
  • মূল্য-রেফারেন্স: আপনি তাদের কাছ থেকে কতটা প্রত্যাশা করবেন তার উপর নির্ভর করে কাছাকাছি সম্পূর্ণরূপে বাস্তবায়নযোগ্য (যেমন: বুস্ট মুভ)।
  • পূর্বাঞ্চ পুনরাবৃত্তি: কাছাকাছি-সম্পূর্ণরূপে বাস্তবায়িত, সিনট্যাক্স কিছুটা পৃথক হবে।
  • স্থানীয় ফাংশনগুলি আর্গুমেন্ট হিসাবে ব্যবহার করে (উদাহরণস্বরূপ: রূপান্তর): কাছাকাছি-সম্পূর্ণরূপে বাস্তবায়িত, তবে সিনট্যাক্স যথেষ্ট পৃথক হবে - উদাহরণস্বরূপ, স্থানীয় ফাংশনগুলি কল সাইটটিতে সংজ্ঞায়িত করা হয়নি তবে ঠিক আগে।
  • সুস্পষ্ট রূপান্তর অপারেটরগুলি: ব্যবহারিক স্তরে প্রয়োগযোগ্য (রূপান্তরটি স্পষ্ট করে দেওয়া), অসম্পূর্ণ সি ++ এর "স্পষ্টিক_কাস্ট" দেখুন; তবে ভাষার বৈশিষ্ট্যগুলির সাথে একীকরণ যেমন static_cast<>-অসাধ্য might
  • আর্গুমেন্ট ফরোয়ার্ডিং: উপরোক্ত মূল্যায়ন-রেফারেন্সগুলিতে ব্যবহারিক স্তরের প্রয়োগযোগ্য, তবে আপনাকে ফরওয়ার্ডযোগ্য আর্গুমেন্ট গ্রহণ করে আপনার কার্যগুলিতে এন ওভারলোড সরবরাহ করতে হবে।
  • সরান: বাস্তব স্তরে প্রয়োগযোগ্য (উপরের দুটি দেখুন) অবশ্যই, এ থেকে লাভ করার জন্য আপনাকে সংশোধক পাত্রে এবং অবজেক্টগুলি ব্যবহার করতে হবে।
  • স্কোপযুক্ত বরাদ্দকারী: আপনার টিআর 1 বাস্তবায়ন যদি সহায়তা না করে তবে বাস্তবে বাস্তবায়িত হয় না।
  • মাল্টিবাইট চরিত্রের প্রকারগুলি: আপনার টিআর 1 আপনাকে সমর্থন না করতে পারলে বাস্তবে বাস্তবায়িত হয় না। তবে উদ্দেশ্যপ্রাপ্ত উদ্দেশ্যে সি ++ 11 ব্যবহার করা সত্ত্বেও আইসিইউয়ের মতো বিষয়টির জন্য বিশেষভাবে তৈরি লাইব্রেরির উপর নির্ভর করা ভাল ।
  • ভারিয়াদিক আর্গুমেন্টের তালিকা: কিছু ঝামেলা সহ কার্যকরযোগ্য, যুক্তি ফরোয়ার্ডিংয়ে মনোযোগ দিন।
  • noexcept: আপনার সংকলক এর বৈশিষ্ট্য উপর নির্ভর করে।
  • নিউ autoশব্দ এবং decltype: - যেমন .: আপনার কম্পাইলার এর বৈশিষ্ট্য উপর নির্ভর করে __typeof__
  • আকারের পূর্ণসংখ্যার প্রকারগুলি ( int16_tইত্যাদি): আপনার সংকলকের বৈশিষ্ট্যগুলির উপর নির্ভর করে - বা আপনি পোর্টেবল stdint.h এ উপস্থাপন করতে পারেন।
  • বৈশিষ্ট্যগুলি টাইপ করুন: আপনার সংকলকের বৈশিষ্ট্যগুলির উপর নির্ভর করে।
  • প্রারম্ভক তালিকা: আমার জ্ঞানের প্রয়োগযোগ্য নয়; তবে আপনি যদি চান সেটি সিকোয়েন্স সহ পাত্রে আরম্ভ করার জন্য, উপরের "ধারক নির্মাণ" উপর দেখুন see
  • টেমপ্লেট অ্যালিজিং: আমার জ্ঞানের জন্য বাস্তবায়নযোগ্য নয়, তবে এটি যাইহোক একটি অনিবদ্ধ বৈশিষ্ট্য এবং আমরা ::typeটেমপ্লেটগুলিতে চিরকাল রেখেছি
  • ভারিয়াদিক টেম্পলেটগুলি: আমার জ্ঞানের প্রয়োগযোগ্য নয়; বন্ধটি হ'ল টেমপ্লেট আর্গুমেন্ট ডিফল্ট, যার জন্য এন বিশেষীকরণ প্রয়োজন requires
  • constexpr: আমার জ্ঞানের প্রয়োগযোগ্য নয়।
  • ইউনিফর্ম ইনিশিয়ালাইজেশন: আমার জ্ঞানের জন্য প্রয়োগযোগ্য নয়, তবে গ্যারান্টিযুক্ত ডিফল্ট- কনস্ট্রাক্টর ইনিশিয়ালেশন আলা বুস্টের মান-প্রাথমিককরণ বাস্তবায়ন করা যেতে পারে।
  • সি ++ 14 dynarray: সম্পূর্ণরূপে প্রয়োগযোগ্য।
  • সি ++ ১৪ optional<>: আপনার সি ++ 03 সংকলক প্রান্তিককরণ সেটআপগুলিকে সমর্থন করে যতক্ষণ না প্রায় সম্পূর্ণরূপে কার্যকর হয়।
  • সি ++ ১৪ স্বচ্ছ ফান্টেক্টর: কাছাকাছি-সম্পূর্ণ বাস্তবায়নযোগ্য, তবে আপনার ক্লায়েন্ট কোড সম্ভবত স্পষ্টভাবে উদাহরণস্বরূপ ব্যবহার std::less<void>করতে হবে .: এটি কার্যকর করতে।
  • সি ++ ১৪ টি নতুন নতুন আসরেন্টের রূপগুলি (যেমন assure): আপনি যদি দৃser়ভাবে দাবি করতে চান তবে সম্পূর্ণরূপে বাস্তবায়নযোগ্য, আপনি পরিবর্তে নিক্ষেপ সক্ষম করতে চাইলে কাছাকাছি-সম্পূর্ণ বাস্তবায়নযোগ্য।
  • সি ++ ১৪ টি টিপল এক্সটেনশান (টাইপ দিয়ে টিপল এলিমেন্ট পান): সম্পূর্ণরূপে বাস্তবায়িত এবং আপনি এমনকি বৈশিষ্ট্য প্রস্তাবনায় বর্ণিত সঠিক কেসগুলি সংকলন করতে ব্যর্থ হতে পারেন।

(অস্বীকৃতি: এই বৈশিষ্ট্যগুলির বেশ কয়েকটি আমার সি ++ ব্যাকপোর্ট লাইব্রেরিতে প্রয়োগ করা হয়েছে যা আমি উপরে লিঙ্ক করেছি, তাই আমি মনে করি আমি জানি যখন আমি "সম্পূর্ণ" বা "কাছাকাছি-সম্পূর্ণ" বলি তখন আমি কী সম্পর্কে কথা বলি))


6

এটি মূলত অসম্ভব। বিবেচনা করুন std::unique_ptr<Thing>। যদি গ্রন্থাগার হিসাবে মূল্যবোধের রেফারেন্সগুলি অনুকরণ করা সম্ভব হয় তবে এটি কোনও ভাষা বৈশিষ্ট্য নয়।


1
আমি "যাই হোক না কেন ডিগ্রী সম্ভব" বলেছিলাম। স্পষ্টতই কিছু বৈশিষ্ট্যগুলি # ইফদেফের পিছনে ছেড়ে যেতে হবে বা একেবারেই ব্যবহার করা হবে না। std :: মুভ () এমনটি ঘটে যা আপনি সিনট্যাক্সকে সমর্থন করতে পারেন (যদিও কার্যকারিতা নয়)।
এমএমসিসিসি

2
প্রকৃতপক্ষে মূল্যবোধের রেফারেন্স প্রস্তাবনাটিতে একটি গ্রন্থাগার-ভিত্তিক সমাধানের কথা বলা হয়েছে!
জান হুডেক

আরও সুনির্দিষ্টভাবে বলা যায় যে, C ++ 03 তে নির্দিষ্ট শ্রেণীর জন্য মুভ std::unique_ptrসিমানটিকগুলি প্রয়োগ করা সম্ভব, সুতরাং সেখানে সংজ্ঞায়িত করা সম্ভব হওয়া উচিত , তবে এটি সিভিলিউস রেফারেন্সের কিছু অন্যান্য বৈশিষ্ট্য সি ++ 03 তে প্রয়োগ করা যায় std::forwardনা , সুতরাং এটি সম্ভব নয়। অন্য জিনিসটি হ'ল এটি কার্যকর std::unique_ptrহবে না, কারণ সংগ্রহগুলি মুভ শব্দার্থবিজ্ঞানগুলি ব্যবহার করবে না আপনি যদি না সেগুলি প্রতিস্থাপন করেন।
জান হুডেক

@ জানহুদেক: সংজ্ঞা দেওয়া সম্ভব নয় unique_ptr। এর ব্যর্থতা দেখুন auto_ptrunique_ptrকার্যতঃ এমন একটি শ্রেণীর পাঠ্যপুস্তকের উদাহরণ, যার শব্দার্থক ভাষা বৈশিষ্ট্য দ্বারা মূলত সক্ষম হয়েছিল।
ডেডএমজি

@ ডিড এমএমজি: না, এটি unique_ptrভাষা বৈশিষ্ট্য দ্বারা মৌলিকভাবে সক্ষম ছিল না । যদিও বৈশিষ্ট্যটি ছাড়া এটি খুব কার্যকর হবে না। কারণ নিখুঁত ফরওয়ার্ডিং ব্যতীত এটি অনেক ক্ষেত্রে ব্যবহারযোগ্য হবে না এবং নিখুঁত ফরোয়ার্ডিংয়ের জন্য সেই বৈশিষ্ট্যটি প্রয়োজন require
জান হুডেক

2
  1. জিসিসি ৪.৩-এ সি ++ 11 (এখনও সেই সময়ে সি ++ 0x) প্রবর্তন শুরু করেছে। এই টেবিলটি বলছে এর ইতিমধ্যে মূলসূত্র উল্লেখ এবং কিছু অন্যান্য কম ব্যবহৃত বৈশিষ্ট্য রয়েছে ( -std=c++0xএগুলি সক্ষম করার জন্য আপনাকে বিকল্প নির্দিষ্ট করতে হবে)।
  2. সি ++ 11 এ স্ট্যান্ডার্ড লাইব্রেরিতে অনেকগুলি সংযোজন ইতিমধ্যে টিআর 1 এ সংজ্ঞায়িত হয়েছিল এবং GNU stdlibc ++ এগুলি std :: tr1 নেমস্পেসে সরবরাহ করে। সুতরাং কেবল উপযুক্ত শর্তযুক্ত ব্যবহার করে করুন using
  3. বুস্ট বেশিরভাগ টিআর 1 ফাংশনকে সংজ্ঞায়িত করে এবং এটি টিআর 1 নেমস্পেসে ইনজেক্ট করতে পারে যদি আপনার কাছে না থাকে (তবে ভিএস 2010 করে এবং জিসিসি 4.3 এটিও করে যদি আপনি জিএনইউ স্টিডলিব ++ ব্যবহার করেন)।
  4. stdনেমস্পেসে যেকোন জিনিস রাখা একটি "অপরিজ্ঞাত আচরণ"। তার মানে স্পেসিফিকেশনটি কী হবে তা বলে না। তবে আপনি যদি জানেন যে নির্দিষ্ট প্ল্যাটফর্মে স্ট্যান্ডার্ড গ্রন্থাগারটি কোনও কিছু সংজ্ঞায়িত করে না, কেবল এগিয়ে যান এবং এটি সংজ্ঞা দিন। কেবলমাত্র আশা করুন যে আপনার প্রতিটি প্ল্যাটফর্মটি আপনাকে কী প্রয়োজন এবং আপনি কী সংজ্ঞা দিতে পারবেন তা পরীক্ষা করে দেখতে হবে।
  5. Rvalue রেফারেন্সের জন্য প্রস্তাব, N1690 কিভাবে C ++ 03 পদক্ষেপ শব্দার্থবিদ্যা বাস্তবায়ন উল্লেখ করা হয়। এটি বিকল্প ব্যবহার করা যেতে পারে unique_ptr। তবে এটি খুব বেশি কার্যকর হবে না, কারণ এটি মুভ সিমেন্টিকস ব্যবহার করে সংগ্রহগুলিতে নির্ভর করে এবং সি ++ 03 এগুলি অবশ্যই ব্যবহার করবে না।

1
আপনি জিসিসি সম্পর্কে সঠিক তবে দুর্ভাগ্যক্রমে, আমাকে অন্যান্য (জিসিসিবিহীন) সংকলকগুলিও সমর্থন করতে হবে। আপনার # 4 গুলিটি আমি জিজ্ঞাসা করছি এমন প্রশ্নের কেন্দ্রবিন্দুতে। # 5 আকর্ষণীয় তবে আমি পুরানো এই প্ল্যাটফর্মগুলিতে মুভ শব্দার্থবিজ্ঞান (অনুলিপি অপ্টিমাইজেশন) সমর্থন করতে চাইছি না বরং সংকলন বাক্য গঠন হিসাবে কেবল "স্টাড :: মভ ()" উপস্থাপন করব।
এমএমসিসিসি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.