কেন সি ++ এর ধারণা বাস্তবায়নের জন্য ডি এর পদ্ধতির অবলম্বন করতে পারে না?


19

আপনারা অনেকেই জানেন, ধারণাগুলি , টেমপ্লেট আর্গুমেন্টের জন্য সম্ভাব্য প্রকারের সীমাবদ্ধতার জন্য সি ++ এর পদ্ধতি সি ++ 11 এ অন্তর্ভুক্ত হতে ব্যর্থ হয়েছে।

আমি শিখেছি যে ডি প্রোগ্রামিং ভাষা ২.০ এর জেনেরিক প্রোগ্রামিংয়ের জন্য একই বৈশিষ্ট্য রয়েছে। এর সমাধানটি আমার কাছে বেশ মার্জিত এবং সাধারণ বলে মনে হচ্ছে।

সুতরাং আমার প্রশ্ন হ'ল কেন সি ++ অনুরূপ পন্থা ব্যবহার করতে পারে না

  • সি ++ এর ধারণার লক্ষ্য ডি এর বাস্তবায়নের চেয়ে বড় হতে পারে?
  • অথবা সি ++ এর উত্তরাধিকার এ জাতীয় দৃষ্টিভঙ্গি গ্রহণ করা থেকে বাধা দেয়?
  • নাকি অন্য কোন?

আপনার উত্তরের জন্য ধন্যবাদ।

পি ডি এর জেনেরিক প্রোগ্রামিং পাওয়ারের কয়েকটি উদাহরণ দেখতে দয়া করে এটিকে দেখুন: /programming/7300298/metaprogramming-in-c-and-in-d/7303534#7303534


2
এই প্রশ্নটি প্রোগ্রামার্স.সে স্থানান্তরিত হওয়া উচিত ছিল। (আমি তার পক্ষে ভোট দিয়েছি, তবে ৩ টি ভোট ছিল "গঠনমূলক নয়")।
iammilind

3
আমি মনে করি যে প্রশ্নটি সবচেয়ে গঠনমূলক উপায়ে লেখা নাও হতে পারে, তবে এর মূল্য আছে। আমি কাউকে ডি কীভাবে ধারণাগুলি পরিচালনা করে তা ব্যাখ্যা করতে পছন্দ করব এবং সি ++ কমিটি দুটি বৈশিষ্ট্য সম্পূর্ণরূপে স্থগিত করার সিদ্ধান্ত নেওয়ার আগে যে ধারণাগুলি গ্রহণ করেছে তার সাথে এটি তুলনা করতে সক্ষম হব ... যদি এটি বন্ধ করতে হয়, তবে এটির উচিত খুব
স্বল্পতম

2
@ ডেভিড: আমি আবার খোলার পক্ষে ভোট দিয়েছি (এবং তারপরে সম্ভবত এটি প্রোগ্রামার সাইটে স্থানান্তরিত হতে পারে)
নওয়াজ

1
ডেভিডের সাথে একমত। কেউ কিছু নির্মাণের চেষ্টা করার আগে আমি প্রিপ্রিমটিভলি "অ-গঠনমূলক" বলার কোনও কারণ দেখছি না। 0 টি উত্তর সহ "গঠনমূলকতা" 0/0 তাই অনির্দিষ্ট।
এমিলিও গারাভাগলিয়া

1
@ জেজে 1: আমরা যারা ভাষা জানি না তাদের জন্য আপনি কি ডি এর পদ্ধতির উপর একটি সংক্ষিপ্ত ব্যাখ্যা সরবরাহ করতে পারেন?
ডেভিড রদ্রিগেজ - ড্রিবিস

উত্তর:


9

সি ++ এর মানক একটি আদর্শ নথি, যা নিয়মগুলি সেট করে যা ভবিষ্যতে নথিগুলিতে থাকবে (বেশিরভাগই ক্ষতিগ্রস্থ হবে না)। সুতরাং কমিটি তার আপডেট সম্পর্কে খুব সতর্ক দৃষ্টিভঙ্গি গ্রহণ করেছে।

স্ট্যান্ডার্ড লাইব্রেরিতে সংযোজনগুলি কিছুটা সহজ ছিল। বেশ কয়েকটি গ্রন্থাগার বুস্টে দীর্ঘকাল ধরে ছিল: এটি প্রমাণিত হয়েছিল যে তারা কাজ করেছিল।

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

বৈশিষ্ট্যগুলির মতো constexprবা static_assertসহজ ছিল (এবং ইতিমধ্যে লাইব্রেরি দ্বারা emulated)। ল্যাম্বডাস অন্যান্য ভাষায় বিভিন্ন ভাষায় বেশ ভালভাবে বোঝা এবং প্রয়োগ করা হয়েছে, এরইমধ্যে এখানে ব্যাপক গবেষণা হয়েছে, সুতরাং এটি মূলত বাক্য গঠনের বিষয় ছিল।

অন্যদিকে ধারণাগুলি খুব নতুন এবং অপ্রচলিত হিসাবে বিচার করা হয়েছিল । এগুলিকে সময়মতো সুনির্দিষ্টভাবে নির্দিষ্ট করা হয়েছিল, ধারণার কোনও প্রমাণ ছিল না ... এবং সুতরাং তাদের প্রতীক্ষার (বা কোনও ভুল) করার পরিবর্তে এগুলি প্রত্যাখ্যান করা হয়েছিল।

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

এফওয়াইআই: বর্তমানে ইন্ডিয়ানা বিশ্ববিদ্যালয় থেকে লরিস ভুফোর নেতৃত্বে এই পরীক্ষায় নিবেদিত ক্লাঙ্গের একটি শাখা রয়েছে।


গৌণ মন্তব্য: রফতানি কীওয়ার্ডটি আসলে একটি সি ++ 98 বৈশিষ্ট্য (মূল মানীকরণ) ছিল। 2003 এর সূত্রপাত মূলত গ্রন্থাগারের বৈশিষ্ট্যগুলিকে সম্বোধন করেছিল।
ex0du5

@ ex0du5: ঠিক আছে, '03 হ'ল সি ++ 98 স্ট্যান্ডার্ডের একটি সংক্ষিপ্ত সংশোধন, যা বেশিরভাগ সংশোধনকে কেন্দ্র করে।
ম্যাথিউ এম।

3

২০১১ স্ট্যান্ডার্ডের জন্য, সি ++ ধারণাগুলি সেগুলি নিয়ে কাজ করা হয়েছিল এবং শেষ পর্যন্ত সেগুলি সেই মান থেকে বাদ দেওয়া হয়েছিল, কারণ সেগুলি "যথেষ্ট বেকড" ছিল না। সি ++ টি ধারণাগুলিতে কাজ অব্যাহত রয়েছে যা এটিকে পরবর্তী মান হিসাবে তৈরি করতে পারে। তবে এটি হতে পারে যে কিছু লোক পরবর্তী স্ট্যান্ডার্ডের প্রস্তাব নিয়ে কাজ করবে যা ডি এর টেম্পলেট সীমাবদ্ধতার মতো। তা ঘটবে কি না তা এখনও দেখার দরকার নেই। আমি যতদূর জানি, ২০১১ এর মানদণ্ডের জন্য এমন কোনও প্রস্তাব ছিল না, সুতরাং এর গুণাগুণ নির্বিশেষে এটিকে মানদণ্ডে পরিণত করার কোনও সুযোগ ছিল না, তবে পরবর্তী মান হিসাবে এটি কী করবে বা করবে না তা সম্পূর্ণ অজানা এই মুহূর্তে.

আমি ডি + টেমপ্লেট সীমাবদ্ধতার অনুরূপ কিছু সি ++ এর জন্য প্রয়োগ করতে না পারার কোনও বড় কারণ সম্পর্কে অবগত নই, যদিও প্রদত্ত যে, সি ++ সাধারণত এটি কমপাইল সময়ে যা করতে পারে তার মধ্যে আরও সীমাবদ্ধ থাকে, তবে তাদের পক্ষে এই হিসাবে কাজ করা আরও কঠিন হতে পারে পাশাপাশি তারা ডি তে করেন (যদিও স্টাফের প্রবর্তন constexprঅবশ্যই সহায়তা করে)।

সুতরাং সত্যিই, আমি মনে করি যে সংক্ষিপ্ত উত্তরটি হ'ল ডি এর টেম্পলেট সীমাবদ্ধতার অনুরূপ কিছু সি ++ তে থাকতে পারে না তার কোনও প্রযুক্তিগত কারণ নেই।

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


2

আপনি ডি এর টেম্পলেট বাধা বোঝাতে চান?

আমি যতদূর জানি, সি ++ ধারণা উত্থাপন :: ধারণাটির পক্ষে প্রস্তাব করা হয়েছিল। সমস্যাটি এখানে, বুস্ট হ'ল সি ++ 03 এর জন্য লেখা একটি লাইব্রেরি। সি ++ 11 এর মধ্যে অন্যান্য বাক্য গঠন ক্ষমতা রয়েছে যা নির্দিষ্ট কিছুকে ভিন্ন উপায়ে প্রয়োগ করতে দেয় সি ++ 03 অনুমতি দেয় (অতএব, উত্সাহটি নতুন সিনট্যাক্সের সুবিধাগুলি নিয়ে আবারও লেখা যেতে পারে)।

স্ট্যান্ডার্ড কমিটি ধারণাগুলি বাদ দিয়েছে কারণ সেগুলি নির্দিষ্ট করতে খুব বেশি সময় লেগেছিল (এভাবে সি ++ 11 অনুমোদনে আবার বিলম্ব হচ্ছে)। তারা সম্ভবত পরবর্তী সি ++ প্রকাশে যাবে।

এদিকে, ডি সিনট্যাক্সটি আলাদা তখন সি ++ এবং ডি নিজেই সংকলনের সময় কিছু এক্সপ্রেশন মূল্যায়ন ক্ষমতা বজায় রাখে সি ++ কিছু লিগ্যাসি কোড ভঙ্গ না করে সর্বদা থাকতে পারে না (এর কোনও সংক্ষিপ্ত ইতিহাস থাকার সাথে ডি-এর কিছু নেই)। সি ++ নিজেই এখন রয়েছে static_assertএবং costexprএটি কমপাইল সময় মূল্যায়ন ক্ষমতা উন্নত করতে দেয়। ভবিষ্যতে হতে পারে একই স্তরে পৌঁছে যাবে।


2

এখানে হার্ব সটারের সাথে একটি কিউএ রয়েছে, তিনি 15 মিনিটের চিহ্নে ধারণাগুলি সম্পর্কে কথা বলেছেন।

http://channel9.msdn.com/Shows/Going+Deep/Herb-Sutter-C-Questions-and-Answers

আপনি যে যদি চান তাহলে, এখানে অন্য একটি হল: http://channel9.msdn.com/Shows/Going+Deep/Conversation-with-Herb-Sutter-Perspectives-on-Modern-C0x11

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

কেন এটি সি ++ 0x এ অন্তর্ভুক্ত করা হয়নি। ভাল কারণ এটি বিশাল ছিল। প্রস্তাবটি ছিল 100 পৃষ্ঠাগুলি দীর্ঘ এবং কার্যকর করা খুব কঠিন। সিদ্ধান্ত নেওয়া হয়েছিল যে এই বৈশিষ্ট্যটি মান হিসাবে অন্তর্ভুক্ত না করা পর্যন্ত পরিপক্ক হতে আরও বেশি সময় প্রয়োজন।


2

একদম সহজভাবে, সি ++ এর ডি এর চেয়ে অনেক বেশি historicalতিহাসিক ব্যাগ রয়েছে it এবং প্রত্যাশিত হিসাবে ডি এই সমস্যা নেই।


হতে পারে আপনি ঠিক এটি ভুল বলেছিলেন, তবে বিষয়টি লিগ্যাসি কোড নয়, সমস্যাটি হ'ল যে কোনও নতুন বৈশিষ্ট্য কয়েক দশক ধরে ভাষাতে উপস্থিত থাকবে এবং তাকে সমর্থন করতে হবে। এর অর্থ হ'ল প্রতিটি নতুন বৈশিষ্ট্য খুব সাবধানে বেছে নিতে হবে।
আসুন_আমি_বলে

@ লেট_মে_বি: ঠিক আছে, লিগ্যাসি কোডটিতে বিষয়টি হ'ল আমরা যদি এখন ধারণাগুলি ফেলে রাখি তবে আমাদের এই লাইনের দশ বছর থাকবে।
ডেভিড থর্নলি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.