আধুনিক সি ++ এর পরীক্ষামূলক বৈশিষ্ট্যগুলি কি দীর্ঘমেয়াদী প্রকল্পগুলির জন্য নির্ভরযোগ্য?


87

আমার একটি প্রকল্প রয়েছে যা বর্তমানে সি ++ 11/14 ব্যবহার করে তবে এর জন্য এমন কিছু দরকার std::filesystemযা কেবলমাত্র সি ++ 17 এ উপলব্ধ এবং তাই বর্তমানে এটি ব্যবহার করার সুযোগ আমার নেই। তবে আমি দেখতে পাচ্ছি যে এটি আমার বর্তমান সংকলক হিসাবে উপলব্ধ std::experimental::filesystem। ভবিষ্যতে আমি এই জাতীয় কিছু যুক্ত করতে পারি এই ধারণা করেই কি পরীক্ষামূলক বৈশিষ্ট্যগুলি ব্যবহার করা ভাল ধারণা?

#ifdef CXX17 //if this is C++17
std::filesystem::something ...;
#else
std::experimental::filesystem::something ...;
#endif

আমার উদ্বেগগুলি হ'ল:

1. সমস্ত গালাগালিত কম্পাইলারের পরীক্ষামূলক বৈশিষ্ট্যগুলি কি একই গ্যারান্টিযুক্ত?

২. পরীক্ষামূলক বৈশিষ্ট্যগুলি কি বড় পরিবর্তনগুলির ঝুঁকিতে পড়ে যা এগুলি অবিশ্বস্ত করে তোলে?

অবাক হওয়ার মতো আরও কিছু বিষয় রয়েছে। আমি বা কেন সেগুলি ব্যবহার করব না? আমি একটি নতুন প্রকল্প নিয়ে হতবাক হয়েছি এবং কী সিদ্ধান্ত নেবে তা জানি না।


25
পরীক্ষামূলক শব্দটি আপনার প্রশ্নের উত্তর দেয় না ?
101010

6
মূলত স্বাদের বিষয়, তবে আমি কোডটি দিয়ে বিশৃঙ্খলা এড়াতে চাই #idef CXX17। আইএমএইচও, বহনযোগ্য উপায় হ'ল সমস্ত ফাইল সিস্টেম সম্পর্কিত কোডকে একটি একক সংকলন ইউনিটে (কোনও শ্রেণি হতে পারে) রেখে কোডের অবশিষ্ট অংশগুলিতে এটি ব্যবহার করুন, এটি বর্তমান সি ++ 11/14 স্ট্যান্ডার্ড সহ কোড করুন। আপনি কীভাবে এটি কেন লিখছেন তা নথিভুক্ত করুন এবং কোনও রক্ষণাবেক্ষণের পর্যায়ে পরে তা C ++ 17 পরে পোর্ট করুন, যদি তা বোঝা যায়। (মূল প্রশ্নের উপর মন্তব্য করা)
সার্জে বাল্টেস্তা

4
মানদণ্ডে প্রবেশের প্রার্থী হিসাবে এটি কেবল "পরীক্ষামূলক" ছিল। এটি কোডের মানের প্রতিফলন নয়।
গালিক

4
"পরীক্ষামূলক" এবং চূড়ান্ত সি ++ 17 সংস্করণের মধ্যে বেশ কয়েকটি পরিবর্তন ছিল, ডকুমেন্টটি P0492R1 দেখুন
বো পারসন

7
আপনার ক্ষেত্রে filesystemএটি অন্যান্য জিনিসের তুলনায় এটির ব্যবহারের তুলনায় অনেক কম ঝুঁকি নিয়েছে, আপনি ইতিমধ্যে জানেন যে এটি সি ++ 17 তে প্রমিত হয়ে গেছে এবং এর সঠিক সি ++ 17 স্পেসিফিকেশন সর্বজনীনভাবে উপলভ্য। সুতরাং আপনাকে যা করতে হবে তা নিশ্চিত করেই আপনি কেবল experimental::filesystemসি ++ 17 স্পেসিফিকেশনে থাকা বৈশিষ্ট্যগুলি ব্যবহার করেন । এবং অবশ্যই আপনাকে জানতে হবে যে আপনার লক্ষ্যযুক্ত প্ল্যাটফর্মগুলির মধ্যে একটি experimental::filesystemবা সি ++ 17 সমর্থন করে std::filesystem
হাওয়ার্ড হিন্যান্ট

উত্তর:


79
  1. এটি কি গ্যারান্টিযুক্ত যে সমস্ত আনুগত্য সংকলকগুলির পরীক্ষামূলক বৈশিষ্ট্যগুলি একই রকম?

না, পরীক্ষামূলক বৈশিষ্ট্যগুলি alচ্ছিক।

  1. পরীক্ষামূলক বৈশিষ্ট্যগুলি কি বড় পরিবর্তনগুলির ঝুঁকিতে পড়ে যা এগুলি অবিশ্বস্ত করে তোলে?

হ্যাঁ, সি ++ কমিটি এমনকি কোনও বৈশিষ্ট্য বর্জন করার সিদ্ধান্ত নিতে পারে বা মানককরণের প্রক্রিয়ায় কোনও ত্রুটি আসতে পারে যা কোনও বৈশিষ্ট্যকে পরিবর্তন করতে বাধ্য করে।

সাধারণত, পরীক্ষামূলক বৈশিষ্ট্যগুলির উপর নির্ভর করা ভাল ধারণা নয়। পরীক্ষামূলক বৈশিষ্ট্যগুলি হ'ল শব্দটি যা বলেছে (অর্থাত্ পরীক্ষার জন্য)।


4
দ্বিতীয় পয়েন্টটি উল্লেখ করে, দয়া করে নোট করুন যে আমি এমন বৈশিষ্ট্যগুলি নিয়ে কথা বলছি যা ইতিমধ্যে স্বীকৃত, তবে ভিন্ন হতে পারে।
কোয়ান্টাম পদার্থবিজ্ঞানী

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

4
@ কেরেকএসবি: আপনি চূড়ান্ত খসড়া আন্তর্জাতিক স্ট্যান্ডার্ড ওরফে এফডিআইএস বলতে চাইছেন না । ? খসড়াটি একটি স্থায়ী প্রক্রিয়া।
এমসাল্টারস

4
@ এসএমএলটাররা: না, আপনি যদি তাড়াহুড়ো করেন তবে ডিআইএস সম্ভবত যথেষ্ট ভাল। এবং আমাদের যাইহোক এবার কোনও এফডিআইএস নাও থাকতে পারে।
কেরেক এসবি

4
@ কেরেকএসবি: আমি নেদারল্যান্ডসের সি সি ++ এর আশেপাশের জাতীয় সংস্থা ছিলাম;); এসসি 22 এর জন্য আমাদের একটি জাতীয় সচিব ছিল যা আইএসও পদ্ধতি এবং এফডিআইএস-এর জবাব কীভাবে জানত, তবে কী নয়। আমাদের ডাব্লুজি 14 প্রতিনিধি রেন্ডি মার্কস ব্যতীত) আমাদের এসসি 22 প্রতিনিধিদের কেউই সি ++ সম্পর্কে কিছুই জানত না। এবং র্যান্ডি কেবল এই বিষয়টি নিয়ে মজা করছিল যে সি ++ এর সমস্ত ইউবি সংজ্ঞায়িত করার জন্য সংজ্ঞায়িত আচরণের জন্য সি এর চেয়ে বেশি পৃষ্ঠাগুলির প্রয়োজন হবে - সে
এফডিআইএসে

50

নাম থেকে কোনও কিছু ব্যবহার করা থেকে ব্যবহারকারীদের নামের সঞ্চার করার নামের সম্ভাবনা সম্পর্কে সিপ্পিকন ২০১ 2016 ( ইউটিউব ) তে "সি ++ স্ট্যান্ডার্ড লাইব্রেরি প্যানেল" আলোচনার সময় শ্রোতাদের মধ্য থেকে কেউ একটি প্রশ্ন জিজ্ঞাসা করেছিলেন experimental:

আপনি কি ছেলেরা [ std::experimentalনামের স্থানের বিষয়বস্তু ] উত্পাদন প্রস্তুত বলে বিবেচনা করছেন এবং এটি এমন একটি যুক্তি যা তৈরি করা যেতে পারে, [এটি] এটি কার্যকরভাবে উত্পাদনটি পরবর্তী 3 বছরের জন্য প্রস্তুত, এবং সম্ভবত আপনার কোডটি 3 বছর পরে পরিবর্তন করতে হবে, সম্ভবত?

মাইকেল ওয়াং (এসজি 5 এবং এসজি 14 এর চেয়ার এবং কনকুরেন্সি টিএসের সম্পাদক) প্রথমে প্রশ্নটি ফিল্ড করেছেন:

আমি মনে করি কমিটির মধ্যে দৃ strong় sensক্য আছে যে এটি কার্যত উত্পাদন প্রস্তুত। যেমনটি আমি আগেই বলেছি, বেশিরভাগ ক্ষেত্রে এর 99% বায়ু-বর্জন হয়ে যায় We আমরা এটি নিশ্চিত করতে চাই যে এটি আপনার ব্যবহারে কোনও প্রতিবন্ধক নয়। আপনি বুঝতে পারবেন যে আমরা কেন এমন প্রসঙ্গে বড় বৈশিষ্ট্যগুলি, বৃহত বৈশিষ্ট্যগুলির বৃহত গোষ্ঠীগুলি রাখতে চাই, যাতে এটি পুরো লাইব্রেরি সিস্টেমকে বিশৃঙ্খলা না করে, তবে এটি এটি আপনার পক্ষে সহজতর করে তোলে। এখন আপনি ধারণাগুলির জন্য একটি নির্দিষ্ট পতাকা নিয়ে জিসিসি চালু করতে পারেন, আপনি জানেন যে এটি আপনার পক্ষে এটি ভাগ করে নেওয়া সহজ করে তোলে।

অ্যালিসডায়ার মেরিডিথ (এলডাব্লুজির প্রাক্তন চেয়ার) তারপরে অনুসরণ করেছিলেন:

আমি এখানে বিপরীত অবস্থান নিতে যাচ্ছি। হার্ব [সুটার] ডাব্লু জি 21, স্ট্যান্ডার্ড গ্রুপের আহ্বায়ক হিসাবে যে জিনিসগুলি বলেছিল তার মধ্যে একটি, যখন আমরা টিএসস এর পথটি সরিয়েছিলাম, তিনি ভাবেন নি যে আমরা কিছু সামনে আনতে ব্যর্থ না হওয়া পর্যন্ত টিএসস সফল হবে, কারণ এটি এর অর্থ আমরা পরীক্ষামূলকভাবে যথেষ্ট নই, আমরা টিএসস যেটির জন্য ব্যবহার করছি তাতে আমরা যথেষ্ট উচ্চাভিলাষী হচ্ছি না। আমরা সত্যিই এটি চাইexperimentalএকটি ইঙ্গিত হতে হবে যে, হ্যাঁ, এই জিনিসগুলি পরিবর্তন সাপেক্ষে, আমরা তার সাথে আবদ্ধ নই, এবং আমরা জিনিসগুলি ভুল হতে পারি। এটি যে বিষয়গুলিকে আমরা উচ্চাভিলাষী বলে বিবেচনা করি এবং যতটা সম্ভব আমরা পৌঁছাতে পারি তার জন্য আমাদের প্রতিবন্ধকতা হ্রাস করা [...] এখন মানটি তিন বছরের রিলিজ চক্রের বলে মনে হচ্ছে, সত্যই পরীক্ষামূলক বৈশিষ্ট্যগুলি রাখার ক্ষেত্রে আমাদের আরও বেশি উচ্চাকাঙ্ক্ষী হওয়া উচিত টিএসে, এবং সম্ভবত মূল স্ট্যান্ডার্ডে আরও দ্রুত জিনিসগুলি এগিয়ে নেওয়া। তবে আবার, পরবর্তী কয়েক [সি ++ স্ট্যান্ডার্ড কমিটি] সভায় আমাদের জন্য এটি আলোচনার জন্য মজাদার বিষয় হয়ে উঠবে।

স্টিফান টি। লাভভেজ (মাইক্রোসফ্টের এসটিএল বাস্তবায়নের রক্ষণাবেক্ষণকারী) শেষ প্রতিক্রিয়া জানিয়েছিলেন:

ইন্টারফেসের পরীক্ষামূলকতা এবং বাস্তবায়নের পরীক্ষামূলকতার মধ্যে পার্থক্য আঁকানো গুরুত্বপূর্ণ, কারণ আপনি যখন "উত্পাদন প্রস্তুত" বলছেন, তার অর্থ কী? সাধারণত, "উত্পাদন প্রস্তুত", আপনি বাস্তবায়নের বিষয়ে কথা বলবেন। এটি বাস্তবায়নের পক্ষে [কোনও কিছুতে std::experimental] একেবারে [...] বুলেটপ্রুফ হওয়া সম্ভব। [...] <random>টিআর 1-তে শিরোনামের মতো [...] টিআর 1 এ আসলেই দুর্দান্ত ছিল, এবং আপনার এটির পুরোপুরি বুলেট-প্রুফ বাস্তবায়নও হতে পারে, তবে এটি প্রমাণিত হয়েছিল যে ইন্টারফেসটি মন্থর হয়েছে উল্লেখযোগ্যভাবে [মুক্তির আগে] সি ++ ১১ এবং [...] যদি আমরা যদি আবার জানতাম তবে এখন আমরা কী করব, এটি স্থাপন experimentalকরা মানুষের পক্ষে আরও ভাল সংকেত হত যে, "আরে, সম্ভবত আপনি চান না ব্যবহারstd::experimental::variate_generator কারণ, হা-হা, এটি সি ++ 11 এ অদৃশ্য হয়ে যাবে।

সুতরাং মনে হয় প্রমিত লাইব্রেরি বিকাশকারী এবং কমিটির সদস্যদের মধ্যে কিছুটা আকাঙ্ক্ষা রয়েছে যে ভবিষ্যতে কমপক্ষে std::experimentalনামের স্থানগুলি প্রকৃতির প্রকৃতপক্ষে "পরীক্ষামূলক" হওয়া উচিত এবং এটি std::experimentalইচ্ছামত কিছু করার বিষয়টি গ্রহণ করা উচিত নয় এটি সি ++ স্ট্যান্ডার্ড হিসাবে তৈরি করুন।

আর, যতটা আমি বুঝেছি, এটা তারা মধ্যে বিভিন্ন বৈশিষ্ট্য জন্য বাস্তবায়নের প্রদান কিনা মান গ্রন্থাগার বিক্রেতাদের আপ হয় std::experimental


47
আমি প্রথম নামটি পড়ার 10 বছর পরে, মাইক্রোসফ্টের এসটিএল রক্ষণাবেক্ষণকারীটির নাম এসটিএল এখনও আমাকে মাতাল করে তোলে।
Jörg W Mittag

19
@ জার্গডব্লিউমিতাগ আপনার তাদের সংকলক রক্ষণাবেক্ষণকারী, মাইকেল স্যাম ভিক্টর কলিন্সের সাথে দেখা উচিত
এমএম

28

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

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

সংকলকগুলির মধ্যে সামঞ্জস্যতা হিসাবে, এটি যুক্তিসঙ্গত হবে বলে আশা করুন। তবে কোণার কেসগুলি হবে (উদাহরণস্বরূপ উইন্ডোজ ড্রাইভ-সম্পর্কিত পাথগুলি ভাবেন) এবং ঠিক এই কারণেই কোনও ভবিষ্যতের স্ট্যান্ডার্ড আপনার বিদ্যমান কোডটি ভেঙে দিতে পারে। আদর্শভাবে, এটি আপনার কোডটি ভেঙে দেবে যদি এবং কেবলমাত্র আপনি যদি সেই কোণার ক্ষেত্রে নির্ভর করেন তবে এটি কোনও গ্যারান্টি নয়।


8

অবাক হওয়ার মতো আরও কিছু বিষয় রয়েছে।

কয়েকটি বিষয় বিবেচনা করুন:

  • আপনার প্রকল্পটি কীভাবে বহুমুখী? যদি কেবলমাত্র একটি সংকলক জড়িত থাকে, তবে আপনি সিদ্ধান্ত গ্রহণের জন্য এর বাস্তবায়ন এবং ট্র্যাক রেকর্ড পরিদর্শন করতে পারেন। নাকি তাদের জিজ্ঞাসা করুন!

  • আপনার কোডবেস কত বড়? পরিবর্তনের প্রভাব কত বড় হবে?

  • আপনার প্রকল্পের মৌলিক বৈশিষ্ট্যগুলি কীভাবে এপিআই / গ্রন্থাগার / বৈশিষ্ট্য সরবরাহ করে?

  • বিকল্পগুলি কি?

    • পরীক্ষামূলক বৈশিষ্ট্যটি ব্যবহার করুন, তারপরে কোডটি যখন / এটি মানক হয়ে যায় তখন পরিবর্তনগুলিতে অভিযোজন করুন। মুছে ফেলার মতই সহজ হতে পারে experimental::, বা কাজের চাপগুলি জোর করার মতো কঠোর হতে পারে ।
    • একটি বিমূর্ত স্তর যুক্ত করুন (সার্জ বলস্টা মন্তব্য)। পরীক্ষামূলক বৈশিষ্ট্য পরিবর্তন হলে আপনার পুনরায় লেখাগুলি বিচ্ছিন্ন। মানক বৈশিষ্ট্যের জন্য, এটি ওভারকিল হতে পারে (স্ট্যান্ড :: ফাইল সিস্টেম ইতিমধ্যে একটি বিমূর্ত স্তর ...)।
    • অন্য একটি এপিআই / লাইব্রেরি ব্যবহার করুন। একই প্রশ্ন: পরিপক্কতা? দৃust়তা? স্থায়িত্ব? বহনযোগ্যতা? ব্যবহারে সহজ? বৈশিষ্ট্যগুলি?
  • স্ট্যান্ড :: ফাইল সিস্টেম (বা নেটওয়ার্কিং টিএস) এর ক্ষেত্রে বিকল্প বা ফলব্যাক হিসাবে বুস্ট :: ফাইল সিস্টেম (রেস। বুস্ট :: এসিও) রয়েছে, যদি experimentalকোনওটি ব্যর্থ হয় বা অদৃশ্য হয়।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.