জিএসএল লাইব্রেরিতে স্প্যান এবং অ্যারে_ভিউয়ের মধ্যে পার্থক্য কী?


94

বেশ কয়েকটি সাম্প্রতিক সম্মেলনের উপস্থাপনায় আমি শুনেছি বাজনে স্ট্রস্ট্রপ এবং অন্যরা সি ++ এর জন্য নতুন কোডিং গাইডলাইন এবং তাদের সমর্থন করে এমন কিছু প্রকারের উল্লেখ করেছেন।

বিশেষত, আমি কোনও ফাংশনটির পরামিতি পরিবর্তে উদাহরণস্বরূপspan<T>(T* p, int n) মনে করি (সময়ে প্রায় 32:00 টক); তবে আমি ব্যবহার করার পরামর্শটি মনে রাখি array_view<T>। এগুলি কি দুটি বিকল্প ছাড়াও একই ধারণা? বা আমি কি জিনিস গুলিয়ে ফেলছি এবং সেগুলি আসলে এতটা সম্পর্কিত নয়?

তারা উভয়ই যে সম্পর্কে ধারণা করা হচ্ছে তার কোনও অনুমোদনমূলক সংজ্ঞা আমি খুঁজে পাচ্ছি না।


@ ডেভিডহাইম: সম্পাদনা দেখুন, উদাহরণস্বরূপ এখানে
einpoklum

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

4
আমি বিশ্বাস করি যে এর array_viewনামকরণ করা হয়েছিল span
গালিক

@ গালিক: আপনি কি প্রমাণ সরবরাহ করতে পারবেন? যদি আপনি পারেন তবে এটি উত্তর হিসাবে লিখুন এবং আমি গ্রহণ করব ...
einpoklum

একটির বেশি জিনিস নামে সেখানে হতে পারে মূর্ত হ্যা, একটু, কিন্তু আমি যা অগত্যা কোনও সম্পর্ক নেই, মাইক্রোসফট সি ++, AMP ইত্যাদি আমি অংশ মত দেখতে বলে মনে হচ্ছে: @Yakk array_viewচারপাশে ঘিরে আছে।
einpoklum

উত্তর:


190

আমরা মানুষের সঙ্গে কথা বলত লাইব্রেরি ওয়ার্কিং গ্রুপ মধ্যে মান কমিটি । তারা চেয়েছিল যে array_viewতারা পড়তে কেবল মানদণ্ডে .োকার চেষ্টা করছে। মূল নির্দেশিকাগুলির জন্য, আমাদের একটি বিমূর্ততা প্রয়োজন যা পড়া এবং লেখা ছিল। (সম্ভাব্য) মান ও নির্দেশাবলী মধ্যে সংঘর্ষ এড়াতে সমর্থন লাইব্রেরী (GSL), আমরা আমাদের (পড়া এবং লেখা) নতুন নামকরণ array_viewকরা span: https://github.com/microsoft/gsl


41
এবং const array_view<T>প্লাস array view<const T>সন্তোষজনক ছিল না?
einpoklum

শূন্য দাম বিমূর্ত মন্ত্র প্রতি প্রতিশ্রুতিবদ্ধ থাকার জন্য ধন্যবাদ - আমি সত্যিই মনে করি spanযে প্রচুর প্রোগ্রামারদের বোকা ত্রুটি করা থেকে বাঁচাতে পারে। আমি মনে করি এই নতুন পরিবর্তনগুলি যোগাযোগ করা যদিও আরও পরিষ্কার উপায়ে করা যেতে পারে। আমি কেবল ভাবছি - এটি কি এমন কিছু নয় যা নিয়মিত র্যান্ডম অ্যাক্সেস পুনরুক্তি দিয়ে স্পষ্টভাবে সমাধান করা যায়? টাইপটি কি কেবল স্পষ্টতার জন্য যুক্ত করা হয়েছিল?
বেনিয়ামিন গ্রুইনবাউম

6
এটি ছিল সংস্থানসমূহ এবং সংলগ্ন পয়েন্টারগুলির বিষয়ে একটি আলাপ। স্প্যান এবং জিএসএল একটি পার্শ্ব সমস্যা ছিল। নীল ম্যাকআইনটোসের সিপিপিসন 2015 আলাপটি দেখুন: "নিরাপদ সি ++ কোডের জন্য বিবর্তিত অ্যারে_ভিউ এবং স্ট্রিং_ভিউ" youtube.com/watch?v=C4Z3c4Sv52U এবং / বা জিএসএল উত্সটি দেখুন: github.com/microsoft/gsl We এছাড়াও একটি আনুষ্ঠানিক (স্ট্যান্ডার্ড স্টাইল) স্পেসিফিকেশন উপর কাজ করে।
বজর্ন স্ট্রস্ট্রপ

4
একটি উদ্বেগ ছিল যে "ভিউ" কেবল বিষয়বস্তুগুলির দিকে তাকিয়ে বোঝায়, সেগুলি পরিবর্তন করে না, তাই কিছু লোক পড়ুন / লেখার সংস্করণটির জন্য পৃথক প্রত্যয় চেয়েছিল। আমি মনে করি না যে উপস্থিত কেউই কেবল পঠনযোগ্য অ্যারে_ভিউ টাইপ সম্পর্কে খুব বেশি চিন্তা করে। এটি স্ট্রিং_ভিউ যা লোকেদের কেবলমাত্র ডিফল্টরূপে পঠনযোগ্য মনে করে।
জেফ্রি ইয়াসকিন

গ্রাফিক্স কোডার হিসাবে যেখানে 'ভিউ'র অর্থ কেবল পঠন / লেখার ডেটাতে (যেমন: glViewPort, D3D- এর সেটভিউপোর্ট) into পঠন / লেখার উইন্ডোর চেয়ে কেবল পঠনযোগ্য উইন্ডোর মতো।
ডোয়াইন রবিনসন

45

ইন CppCoreGuidlines মূল array_viewনাম পালটে করা হয়েছে span

দেখুন: https://github.com/isocpp/CppCoreGuidlines/pull/377

এটি বর্ণনা করা হয়েছে:

স্প্যানটি অ্যারে অ্যাক্সেসের জন্য পয়েন্টারগুলি ব্যবহারের সীমাবদ্ধ-পরীক্ষা করা, নিরাপদ বিকল্প


4
আমি আপনাকে +1 করেছি, তবে বার্জার্ন স্ট্রস্ট্রপ (সত্যি??) এর উত্তরটি আরও বিশদ is
einpoklum

30
@ আইনপোকলুম না, আমি পেয়েছি আমি সম্ভবত আমার উপর বর্জন স্ট্রস্ট্রপ বেছে নিয়েছি। না (স্নিফ) এটি গ্রহণ করছে (স্নিফ) এটি (স্নিফ) ব্যক্তিগত (ওয়াহহঃহঃ) ...
গালিক

4
এই মন্তব্যটি আমার ভিতরে কিছু অনুভব করেছে, তাই আমার কাছ থেকেও +1 ;-)
ইয়েপিক

11

লাইব্রেরি বিবর্তন ওয়ার্কিং গ্রুপ (এলডব্লুজি) এর দস্তাবেজ P0122R ( 2016-02-12) আনুষ্ঠানিকভাবে নামটির নাম দেয় :
array_viewspan

চেঞ্জলগ

আর0 থেকে পরিবর্তনগুলি

  • কোনার বৈঠকে এলইডব্লুজি থেকে প্রতিক্রিয়া অনুসরণ array_viewকরার জন্য প্রস্তাবিত ধরণের নাম পরিবর্তন করা হয়েছে span
  • [...]

আমরা এটি পড়তে পারি:

স্ট্যান্ডার্ডের উপর প্রভাব

এই প্রস্তাবটি খাঁটি গ্রন্থাগারের এক্সটেনশন। এটি স্ট্যান্ডার্ড ক্লাস, ফাংশন, বা শিরোনামে কোনও পরিবর্তন প্রয়োজন হয় না। এটি P0257 এরbyte প্রস্তাবিত এলিয়াসিং আচরণের ধরণ এবং পরিবর্তনের উপর নির্ভর করতে পারলে এটি বাড়ানো হবে ।

তবে - যদি গৃহীত হয় - তবে এই নতুন ধরণের জন্য কিছু স্ট্যান্ডার্ড লাইব্রেরি ফাংশন ওভারলোড করা কার্যকর হতে পারে (উদাহরণস্বরূপ এটি হবে copy())।

spanস্ট্যান্ডার্ড সি ++ (সি ++ 11) এ প্রয়োগ করা হয়েছে এবং সি ++ কোডের পাশাপাশি বাণিজ্যিক অফিস উত্পাদনশীলতা সফ্টওয়্যার হিসাবে বাণিজ্যিক স্ট্যাটিক বিশ্লেষণ সরঞ্জামের মধ্যে সফলভাবে ব্যবহার করা হচ্ছে। একটি মুক্ত উত্স, রেফারেন্স বাস্তবায়ন https://github.com/Mic Microsoft/GSL এ উপলব্ধ ।

পরবর্তী অধ্যায়ে, এই নথিগুলি কেবল পঠনযোগ্য এবং পঠন-লিখনের ( পরিবর্তনযোগ্য ) অ্যাক্সেসগুলি উপস্থাপন করে:

এলিমেন্টের ধরণ এবং রূপান্তর

spanটেমপ্লেট প্যারামিটারের মাধ্যমে অবশ্যই এর উপাদান প্রকারের সাথে কনফিগার ValueTypeকরতে হবে, এটি একটি সম্পূর্ণ অবজেক্ট টাইপ যা কোনও বিমূর্ত শ্রেণীর ধরণের নয়। spanএটি কেবলমাত্র পঠনযোগ্য বা মোড়যোগ্য অ্যাক্সেসটিকে সমর্থন করে যা এটি সজ্জিত করে দেয় to এক্সেস শুধুমাত্র পাঠযোগ্য ডেটাতে, তবে ব্যবহারকারী একটি ডিক্লেয়ার করতে পারেন span<const T>, এবং চপল ডেটাতে অ্যাক্সেস একটি ব্যবহার করেন span<T>

[...]


আরও দেখুন নির্দেশিকা সাপোর্ট লাইব্রেরী পর্যালোচনা:span<T> Marius Bancila (মার্চ 2016) সংজ্ঞা থেকে spanহিসাবে:

নির্দেশিকা সাপোর্ট লাইব্রেরী ধরনের এবং বর্ণিত কার্যাবলী কিছু একটা মাইক্রোসফট বাস্তবায়ন সি ++ কোর নির্দেশিকা দ্বারা পরিচালিত স্ট্যান্ডার্ড সি ++ ফাউন্ডেশন । জিএসএল প্রদত্ত প্রকারগুলির মধ্যে span<T>পূর্বে হিসাবে পরিচিত array_view<T>

span<T>পয়েন্টার (এবং আকারের কাউন্টার) বা স্ট্যান্ডার্ড পাত্রে (যেমন std::vectorবা std::array) এর পরিবর্তে ব্যবহারের জন্য সুপারিশকৃত স্বতন্ত্র মেমরির একটি অ-মালিকানা পরিসর range

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