আমি সি এবং সি ++ জানার কারণে কেন সি ++ 11 শিখব? [বন্ধ]


28

আমি সি এবং সি ++ তে একজন প্রোগ্রামার, যদিও আমি কোনও ভাষার সাথে লেগে থাকি না এবং দুটির মিশ্রণ লিখি। কখনও কখনও ক্লাসে কোড থাকা, সম্ভবত অপারেটর ওভারলোডিং, বা টেম্পলেটগুলির সাথে এবং ওহ এত দুর্দান্ত এসটিএল সম্ভবত একটি ভাল উপায় a কখনও কখনও একটি সাধারণ সি ফাংশন পয়েন্টার ব্যবহার অনেক বেশি পঠনযোগ্য এবং স্পষ্ট। সুতরাং আমি উভয় ভাষায় সৌন্দর্য এবং ব্যবহারিকতা খুঁজে পাই। আমি "যদি আপনি সেগুলি মিশ্রণ করেন এবং একটি সি ++ সংকলকটি সংকলন করেন তবে এটি আর কোনও মিশ্রণ নয়, এটি সমস্ত সি ++" এর আলোচনায় আসতে চাই না "আমি মনে করি আমরা সবাই তাদের মিশ্রণ দিয়ে কী বোঝাতে চাই understand এছাড়াও, আমি সি বনাম সি ++ সম্পর্কে কথা বলতে চাই না, এই প্রশ্নটি সমস্ত সি ++ 11 সম্পর্কে।

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

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

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

সুতরাং প্রশ্নটি হল: কেন আমি সি ++ 11 শিখব?

learning  c++  c  c++11 

3
আমি বুঝতে পেরেছি যে এই ফোরামে কোনও সি ++ 11 রেন্ট হওয়া উচিত নয় এবং আমি এর সাথে সম্পূর্ণ একমত: প্রতিটি বিকাশকারীর প্রোগ্রামিং ভাষা এবং সরঞ্জাম সম্পর্কিত নিজস্ব স্বাদ থাকার অধিকার রয়েছে। তবে, আমার কাছে আরও অনেক ব্যবহারিকভাবে ইস্যু রয়েছে: আমি একজন সি ++ বিকাশকারী এবং আমি সি ++ 11 পছন্দ করি না, আমাকে কি সি ++ 11 ব্যবহার করতে বাধ্য করা হবে বা বাজারের বাইরে যেতে হবে / এর মধ্যে অন্য কোনও ভাষাতে যেতে হবে? কয়েক বছর?
জর্জিও

ঠিক আছে আমি সে সম্পর্কে কিছুটা ভেবেছিলাম অবশ্যই ডি-প্রোগ্রামিং ল্যাঙ্গুয়েজ বা গো এর মতো আরও আধুনিক থেকে স্ক্র্যাচ ভাষা রয়েছে। এগুলি আপনার সমস্যাযুক্ত ডোমেনের জন্য উপযুক্ত হতে পারে, আরও সহজতর ধারাবাহিক ইত্যাদি However তবে বাজার ভাগ .. শিল্পের মূল খেলোয়াড়দের কেউ ডি এবং এমনকি গো সমর্থন করে না এটি গুগলগুলির একটি "পরীক্ষা-নিরীক্ষা" বলে মনে হচ্ছে .. সুতরাং সি + এর পিছনে অনুপ্রেরণা + +11 হ'ল দরকারী উন্নতি হওয়া উচিত যা আপনাকে আরও ভাল পাঠযোগ্য, নিরাপদ এবং দ্রুত কোডের পাশাপাশি বিস্তৃত শিল্প সমর্থন লেখার মঞ্জুরি দেয়।
নীল

@ জিওরজিও, বিগত দুই বছরে আমি সি ++ ব্যবহার আগের মতোই করা বন্ধ করে দিয়েছি (বেশিরভাগ কারণেই এই প্রশ্নটির উত্তর পড়ার কারণে ধর্মীয় সি ++ অনুরাগীরা কীভাবে বুঝতে পেরেছেন), কিন্তু তবুও আমি সি ++ লাইব্রেরিতেও কাজ করেছি যা আমি স্বেচ্ছায় করেছি সি ++ 11 এর জন্য ব্যবহার করা হয়েছে। আমার অভিজ্ঞতাটি হ'ল: সি ++ 11 সি ++ এর অনেক কৃপণ কোণকে সম্বোধন করে, এবং এটি প্রশংসনীয় এবং সত্যই এটি এতে উন্নতি করে। এটির যেভাবে এটির নিজস্ব কৃপণ কোণ রয়েছে (আসল অশিক্ষিত পোস্টটি দেখুন)। যাইহোক, এই কৃপণ কর্নারগুলি মনে হয় আপনি যদি "সাধারণ উপায়" (যেমন ভবিষ্যতে ব্যবহারের জন্য ল্যাম্বডা সংরক্ষণ না করেন) করেন তবে তা পথছাড়া।

@ জিওরজিও, আমার অর্থ হ'ল, সি ++ 11 শুরুতে খারাপ দেখতে পারে, আসলে সি ++ নিজেই ভয়ঙ্কর দেখাচ্ছে তবে আপনি যদি সি ++ এর সাথে ঠিক থাকেন তবে আপনি সম্ভবত সি ++ 11ও পছন্দ করবেন। কেবল এর দু: খজনক অংশগুলি স্পর্শ করা এড়িয়ে চলুন এবং আপনি সম্ভবত এটি উপভোগ করতে পারেন।

@ অ্যানন: কোনও ভাষার ভঙ্গুর অংশগুলি থেকে মুক্তি পাওয়ার এক উপায় হ'ল অতীতের সাথে কাটা এবং নতুন ভাষা শুরু করা, যেমন অ্যাপল সুইফটের সাথে করছে (অসংখ্য উদাহরণের মধ্যে কেবল একটির নাম হিসাবে)। লিগ্যাসি কোডের সাথে ইন্টারফেসিং পৃথক সংকলনের মাধ্যমে করা যেতে পারে। সি ++ এর সমস্যাটি হ'ল এটি অনির্দিষ্টকালের জন্য প্রসারিত হয়, সম্ভবত এটি ভক্তদের একটি সম্প্রদায় দ্বারা সমর্থিত যারা ধর্মীয়ভাবে বিশ্বাস করে যে সি ++ একটি সত্য ভাষা true নীচের লাইন: আমি সি ++ 03 কে কিছুটা কৃপণ পেয়েছি তবে এটি কাজটি করেছে, বিশেষত Qt এবং boost এর মতো লাইব্রেরিগুলিকে ধন্যবাদ। অন্যদিকে, আমি আমার হাত সি ++ 11 থেকে দূরে রাখব।
জর্জিও

উত্তর:


24

আপনার যদি মনে হয় চাকরি পাওয়ার জন্য ভবিষ্যতে আপনার এটি জানা দরকার। আপনি যদি আত্মবিশ্বাসী হন যে আপনি কর্মীশক্তিগুলিতে সি / সি ++ হিসাবে বিপণনযোগ্য হয়ে উঠবেন [এবং আপনি যা কিছু জানেন তা] তবে এটি শিখবেন না। যদি আপনার বস আপনাকে সি ++ 11 ব্যবহার করতে বলেন, "না, আমি এটি করি না" বলুন। যদি সে আপনাকে গুলি চালায় তবে অন্য কোথাও কাজ করে যান। সি ++ ১১ শিখুন যখন আপনি ভবিষ্যদ্বাণী করেছিলেন যে শীঘ্রই আপনি বর্তমানে আপনার দক্ষতাগুলির সাথে সন্তুষ্টিজনক কর্মসংস্থান পেতে পারবেন না।

আমার যুক্তি স্পষ্ট করতে চেয়েছিলেন: আমি C ++ 11 বিরোধী নই। কেবল এই বলে যে আপনি ওপির প্রশ্নটিকে "কেন আমি এক্স শিখব" to আমি কখনই এমএল, স্কিম বা হ্যাশেল শিখিনি কারণ আমার সি এবং সি ++ এর সাথে একটি চাকরি রয়েছে। আমি নিশ্চিত যে এই ভাষাগুলি কারও পক্ষে দরকারী তবে এগুলি এখনই আমার পক্ষে শেখার পক্ষে উপকারী নয়। কেউ যদি আমাকে এমএল-তে প্রোগ্রাম করার জন্য ভাল অর্থের অফার দেয় তবে আমি এটি শেখার চেষ্টা করতে পারি।


3
আপনি যদি একজন "সি / সি ++" বিকাশকারী হন এবং যদি আপনার বস আপনাকে সি ++ 11 ব্যবহার করতে বলেন, আপনি কি কেবল এগিয়ে গিয়ে আপনার অস্ত্রাগারে যুক্ত করা উচিত নয়? আমি সম্মত হই যে আপনার ভাষা শেখার জন্য আপনার সমস্ত সময় ব্যয় করা উচিত নয়, তবে যখন আপনার বস বলেন, "এটি শিখুন", তখন সম্ভবত এগিয়ে যাওয়া এবং এটি শেখা ভাল ধারণা। আপনার পরবর্তী অ্যাপ্লিকেশনটি বোঝানোর বিপরীতে এটি আপনাকে আরও বিপণনযোগ্য করে তোলে যা আপনি অন্তর্নিহিততার কারণে বরখাস্ত হয়ে পড়েছেন।
Panzercrisis

হাস্কেল ... মজার, কারণ সি ++ এ ধীরে ধীরে ল্যাম্বডাস অন্তর্ভুক্তির কারণে। : পি
আরবেলেকসান্দার

85

ইহা সাধারণ. সি ++ 11 কোডকে নাটকীয়ভাবে সহজ করে, পরিষ্কারভাবে লিখতে এবং আরও দ্রুত করে তোলে।

nullptrপুরানো তুলনায় একটি ভ্যাস উন্নতি 0। এটা তোলে ধরন-নিরাপদ এবং রূপান্তর নেই যখন এটি অসদৃশ shouldn't- 0। এটি একটি ভাল জিনিস যা nullptrকোনও রূপান্তরিত হয় না int। এটি আদৌ ঘটবে তা বোঝা যায় না। আপনি কী জানেন যে সি ++ কমিটি যখন তারা বিবেচনা করার চেষ্টা করেছিল তখন কী পেয়েছিল #define NULL nullptr? স্টাফ পছন্দ char c = NULL;। এটা কত ভয়ানক? এখানে ব্যতিক্রম হওয়ার একমাত্র কারণ হ'ল কারণ boolএটি একটি অবিচ্ছেদ্য প্রকার হিসাবে বিবেচিত হয়, যা বেশ ভুল but তবে এটি আগে সি ++ তে ছিল এবং সি তেও ছিল সত্য যে nullptrরূপান্তর হয় না এটি ভাল , এটি দুর্দান্ত এবং আপনার এটি পছন্দ করা উচিত।

অথবা মূল্য সংক্রান্ত তথ্যসূত্র এবং বৈকল্পিক টেম্পলেটগুলি সম্পর্কে কীভাবে? দ্রুততর, আরও জেনেরিক কোড। এটি ঠিক সেখানে মোট জয়।

গ্রন্থাগারের উন্নতি সম্পর্কে কীভাবে? স্টাফ পছন্দসই function, unique_ptrএবং shared_ptrআগে যা ছিল তার থেকে অনেক বেশি ভাল, এটি যুক্তিযুক্ত হওয়া অসম্ভব যে সি ++ 03 উপায় ভাল ছিল।

#define adding_func(x, y) ((x)+(y))

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

#define add_twice(x) (x + x)

ওহ অপেক্ষা করুন, আমি আশা করি আপনি বাড়ায় বা কিছু করা হয়নি x। যা টেম্পলেট ফাংশন সংস্করণ সম্পূর্ণরূপে অনাক্রম্য। আমিও আশা করি যে আপনার প্রশংসা করি না নামব্যবধান উদাহরণস্বরূপ,।

তারপরে আপনি বাহ্যিক ভেরিয়েবলগুলি ব্যবহারের জন্য অপরিজ্ঞাত আচরণের বিশ্বে নিজেকে উন্মুক্ত করেন যার স্কোপগুলি ইতিমধ্যে শেষ হয়ে গেছে।

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

উদাহরণস্বরূপ সি নিন। এত বছর পরে, এখনও অনেক লোক সি শিখছেন এবং কোড লেখছেন কেন? কেন?

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

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

আপনি যদি সি বা পুরাতন স্টাইলের সি ++ নেন তবে আপনি অনেকগুলি ব্যতিক্রম খুঁজে পাবেন না।

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

আপনার মূল যুক্তিগুলি যৌক্তিক ভুল এবং ভুল বোঝাবুঝিতে পূর্ণ।


7
> নাল্প্টার রূপান্তরিত করে না এ বিষয়টি ভাল, এটি দুর্দান্ত এবং আপনার এটি পছন্দ করা উচিত। আপনার মতামতটি ঠিক আছে, তবে অন্য কারও কী প্রেম করা উচিত সে সম্পর্কে কিছুক্ষণ শান্ত করুন, দয়া করে ... পরবর্তী পদক্ষেপটি সি ++ আইনজীবীদের তালিবানিজম!
এমিলিও গারাভাগলিয়া

5
আমি মনে করি আপনার উত্তরের পরবর্তী অংশটি কেন সি ++ এর চেয়ে সি এর চেয়ে বেশি পছন্দ করা উচিত তা প্রশ্নযুক্ত। "সি লাইব্রেরিগুলি অনিরাপদ" - পৃথিবীতে এই প্রশ্নের উত্তর কীভাবে দেয়? আমি বলতে চাইছি অবশ্যই নতুন বৈশিষ্ট্যগুলি সি ++ 11 অফারগুলি শিখতে হবে, তবে সি এবং সি ++ একই জিনিস বোঝাতে নয়। সি ++ যদি নিম্ন স্তরে বাস্তবায়ন করার জন্য একটি দুশ্চরিত্রা হয়, তবে সি #, জাভা, পাইথন এবং হোয়াট নোট কারণ এগুলি কম চালানোর উদ্দেশ্যে নয় । কেবলমাত্র সি ++ স্থানীয় কোডে সংকলন করার অর্থ এই নয় যে আপনি ওও এবং পৃষ্ঠার সাথে সংযুক্ত পৃষ্ঠটিকে সমালোচনামূলক, কার্নেল স্তর কোডের জন্য ব্যবহার করতে পারেন।
ইয়াতী সাগাদ

11
@ শাহবাজ, স্পষ্টতই আপনাকে প্রোগ্রামিং ভাষা (যেমন, টাইপ সিস্টেম, লেক্সিকাল স্কোপিং ইত্যাদি) সম্পর্কে আরও কিছুটা শিখতে হবে, আপনার সমস্ত মন্তব্য সম্পূর্ণ সিঙ্কের বাইরে of এই বইটি দিয়ে শুরু করুন: অ্যামাজন
-

5
@ ইয়াতী: সি ++ এর সি'র মতো একই মডিউল সিস্টেম রয়েছে সদস্য ফাংশনগুলি সরল পুরানো সি ফাংশন হিসাবে প্রয়োগ করা হয়। ভার্চুয়াল ফাংশনগুলি একটি ডিএলএল থেকে লোডিং ফাংশনের সমানভাবে প্রয়োগ করা হয়। সেগুলি সম্পর্কে পৃষ্ঠপোষকতা করার কিছুই নেই। এবং হ্যাঁ, এটি অবশ্যই প্রযোজ্য। শুরু করার জন্য, আপনার বিশ্বাস যে ইউনিক্সই সর্বোত্তম sub এটি 5% মার্কেট শেয়ার অন্যথায় প্রস্তাব দেয়। এবং দ্বিতীয়ত, আমি ইউনিক্সকে শেষ পর্যন্ত আদর করলেও একটি উদাহরণ ট্রেন্ড সেট করবে না। আপনার উদ্ধৃত অন্যান্য উদাহরণগুলির ক্ষেত্রেও একই কথা। কি উদাহরণ? তারা অর্থহীন। সি ++ সি এর মতো পদ্ধতিগুলির জন্য উপযুক্ত suited
ডেড এমএমজি

8
@yatisagade C ++ একটি বহু-দৃষ্টান্তমূলক ভাষা যা প্রতিটি কিছুর জন্য ভার্চুয়াল ফাংশন প্রয়োগ করে না এবং সি ++ তে আমার প্রোগ্রামগুলি একই রকম। এর কিছু অংশ অবজেক্ট-ওরিয়েন্টড ডিজাইন ব্যবহার করে, এর নির্দিষ্ট অংশগুলি কী কী সেই নির্দিষ্ট উপ-সমস্যাটিকে সবচেয়ে ভাল সমাধান করে on আমি অবজেক্ট-ওরিয়েন্টেড স্টাইল যুক্ত করার জন্য সি ++ এর প্রশংসা করি এবং কার্যকরী প্রোগ্রামিংয়ের জন্য সমর্থন প্রসারিত করার জন্য আমি সি ++ 11 এর প্রশংসা করি।
ডেভিড স্টোন

29

সি ++ 11 কোনও নতুন ভাষা নয়; এটি কেবলমাত্র C ++ এর একটি এক্সটেনশন / পরিবর্তন যা আপনি ইতিমধ্যে জানেন। সি ++ 11 যেমন অন্যান্য প্রোগ্রামিং ভাষার বৈশিষ্ট্যগুলি নিয়ে গঠিত। তাদের মধ্যে অনেক আগে থেকেই ছিল, তাদের মধ্যে কিছু নতুন। তবে আপনার প্রশ্নটি সত্যই, আমি কি ভাষার সমস্ত বৈশিষ্ট্য শিখব (এই ক্ষেত্রে সি ++ 11), বা কেবল 90% এর সাথে নিজেকে পরিচিত করব?

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

অন্যদিকে, আপনি যদি ইতিমধ্যে লাইব্রেরি / কোর কোড লেখার ক্ষেত্রে ছড়িয়ে পড়ে যা কিছু এসটিএল / বুস্ট কার্যকারিতা অনুকরণ করে এবং নিজেকে ভাষা দ্বারা সীমাবদ্ধ বলে মনে করে কারণ আপনি খুব শীতল, মার্জিত সমাধান পেয়ে 95% এসেছেন তবে আপনাকে থামানো হয়েছে কারণ আপনি জানতে পেরেছেন যে ভাষা যা চান তা কেবল সমর্থন করে না, আপনি সি ++ 11 এর সত্যিকারের দুর্দান্ত শক্তি উপলব্ধি করতে পারবেন। যখন থেকে আমাদের দল ভিএস 2010 এ আপগ্রেড করেছে (এবং আমরা প্রসেসে বুস্টকে আবিষ্কার করেছি), তখন থেকে আমি কিছু ক্রেজি অসাধারণ কোডটি ক্র্যাঙ্ক করতে সক্ষম হয়েছি, এটি আর-মান উল্লেখ এবং টেমপ্লেট প্যারামিটার ফরওয়ার্ডিংয়ের মতো বিষয়গুলির আগে কেবল অসম্ভব হবে।

ল্যাম্বডা জাতীয় জিনিসগুলি বিদেশী দেখতেও পারে তবে তারা কোনও নতুন নির্মাণের প্রবর্তন করে না। পরিবর্তে তারা লিখতে এত সহজ আমাদের আগে কি ছিল। পূর্বে প্রতিটি ল্যাম্বডা ফাংশন একটি পৃথক শ্রেণি হতে হবে। এখন এটি কেবল {... কোড ...}} ভাল লাগবে।

কীটি হ'ল এই বৈশিষ্ট্যগুলি না দেখুন এবং ভাবেন যে তালিকাটি কতটা ভয়ঙ্কর। পরিবর্তে, আপনি সাধারণত হিসাবে সি ++ ব্যবহার করুন এবং যখন আপনি এমন কিছু দৃশ্য জুড়ে আসেন যেখানে এই নতুন সি ++ 11 বৈশিষ্ট্যগুলি কাজে আসে (90% এর বেশি লোকেরা কখনই সেই পয়েন্টে পৌঁছাতে পারে না), আপনি খুব খুশি হবেন যে এক্সটেনশনটি ভাষা করা হয়েছিল। আপাতত, আমি আপনাকে কেবল সেখানে কী আছে তা জানার জন্য ভাষা সম্পর্কে যথেষ্ট শিখার পরামর্শ দিচ্ছি, কীভাবে এটি সমস্ত ব্যবহার করা যায় তা নয়।


7
@ শাহবাজ - আমি মনে করি কেন এখনও নামহীন কার্যাদি যুক্ত করা হয়েছিল তার অভিপ্রায়টি আপনি মিস করছেন missing এবং "ভেরিয়েবলগুলিকে ইনপুট হিসাবে না নিয়ে ব্যবহার করে" ক্লোজার বলা হয় এবং এটি অন্যান্য অনেকগুলি উচ্চ-স্তরের ভাষায় উপলভ্য। আপনি যদি সি ++ 11 দিয়ে ফান্টারের সাথে প্রচুর টেম্পলেট কোড লিখে থাকেন তবে আপনি খোলা বাহুতে ল্যাম্বডা ফাংশনকে স্বাগত জানাবেন। এটিকে এভাবে ভাবুন ... সংকলক যখন মেশিন কোড জেনারেট করে, তখন টেমপ্লেট ফাংশন বা শ্রেণীর মতো জিনিস নেই। তারা সবাই "পয়েন্ট" এর আগে কংক্রিট ক্লাস / ফাংশন তৈরি করতে "তাত্ক্ষণিক"। রাষ্ট্রীয় অবস্থার কথা উঠলে লাম্বদাস একই জিনিস ...
DXM

5
... functors। লোকেরা এক টন কোড লেখার পরিবর্তে, প্রতিটি ধরণের ফান্টারের জন্য এবং প্রতিটি ক্লোজার উপাদানগুলির মধ্যে একটিতে আপনাকে প্রবেশ করতে চান, সি ++ 11 আপনাকে একটি শর্টকাট বাক্য গঠন নির্দিষ্ট করার অনুমতি দেয় এবং এটি সম্পূর্ণ অভ্যন্তরীণ ফান্টারের শ্রেণীর মতো স্বয়ংক্রিয়ভাবে ইনস্ট্যান্ট করবে like এটি টেমপ্লেট ইনস্ট্যান্ট করে তোলে। আবার, মনে রাখবেন যে এই বৈশিষ্ট্যগুলির বেশিরভাগ অ্যাপ্লিকেশন-স্তরের কোডের 98% ব্যবহার করা হবে না, তবে এসটিএল / বুস্টের মতো লাইব্রেরি তৈরি করতে এগুলি যুক্ত করা হয়েছিল যা আরও কার্যকর এবং কার্যকর / বজায় রাখা / ডিবাগ করা সহজ
DXM

10
@ শাহবাজ: ঠিক আছে, আপনি ল্যাম্বদা ফাংশন বা বন্ধগুলি বুঝতে পারবেন না। এটা যুক্তিযুক্ত। এগুলি যে অনেকগুলি ভিন্ন ভাষায় ব্যবহৃত হচ্ছে তা বোঝাতে হবে যে তারা কার্যকর কিনা আপনি তাদের বুঝতে পারছেন না এবং তাদের খুব বেশি সমালোচনা করার আগে আপনার সেগুলি বোঝা উচিত।
ডেভিড থর্নলি

8
@ শাহবাজ: যদি আপনি ভাবেন যে ক্লোজারগুলি বৈশ্বিক চলকের সাথে সমান হয় তবে আপনি ক্লোজার বুঝতে পারবেন না। (ইঙ্গিত: গ্লোবাল ভেরিয়েবলগুলি সমস্যার কারণ হ'ল যে কোনও ফাংশন এগুলি সংশোধন করতে পারে)) যদি আপনি ল্যাম্বডাস ধারণাটি বোঝেন, বাস্তবায়ন নয়, তবে আপনি এটি ক্লাস বনাম কোডের বিভ্রান্তির কারণ হিসাবে চিহ্নিত করবেন না। সি ++ স্ট্যান্ডার্ডের সমস্ত কিছুর কারণ রয়েছে যা বিপুল সংখ্যক বুদ্ধিমান লোকের কাছে বিশ্বাসী ছিল। কারণগুলির সাথে আপনার একমত হতে হবে না, তবে তাদের না জেনে আপনি অজ্ঞতা থেকে সমালোচনা করছেন।
ডেভিড থর্নলি

6
@ শাহবাজ, ক্লোজার এবং গ্লোবালগুলির মধ্যে একেবারে কোনও মিল নেই, আপনি বিষয়টি পুরোপুরি অনুপস্থিত। এটি পড়ুন: en.wikedia.org/wiki/Lambda_calculus এবং আপনার মস্তিষ্ককে ফুটিয়ে
এসকে-যুক্তি

18

কোনও ফাংশন লেখার পক্ষে কি এতটা শক্ত, যে আপনাকে কোনও নাম না দিয়েই কোডটির সাথে ইনলাইন ফাংশনটির বিষয়বস্তু লিখতে হবে?

যখন আপনি এটি করেন যে আপনি স্ক্রোল আপ করছেন বা একটি নতুন উত্স ফাইল খুলুন এবং সেখানে ফাংশনটির সংজ্ঞা যুক্ত করুন। তারপরে আপনাকে ফিরে যেতে হবে এবং আপনি যা কাজ করছেন তা চালিয়ে যেতে হবে, যা আপনাকে কিছুটা ডিগ্রি থেকে বিভ্রান্ত করে।

তা ছাড়া, অন্যান্য লোকেরা যখন আপনার কোড পড়ছে তখন একটি ল্যাম্বডা কিছু ক্ষেত্রে স্ব-ডকুমেন্টিং হতে পারে, "ওহ, এই ফাংশনটি কী করে?" এবং এর ঘোষণায় ঝাঁপিয়ে পড়া আপনি নিজের জায়গায় এটি কী করছে তা একবার দেখতে পারেন।

ল্যাম্বডাস সম্পর্কে হার্ব সাটারের একটি চমৎকার কথা আছে, সম্ভবত তিনি আপনাকে আরও ভাল বোঝাতে পারেন:

http://channel9.msdn.com/events/PDC/PDC10/FT13

ঠিক আছে, আপনি কেন ল্যাম্বডা-ফাংশন তৈরির পরিবর্তে কেবল কোডটি লেখেন না?

কারণ আপনি এটি করতে পারবেন না যখন আপনি এসটিএল অ্যালগরিদম ব্যবহার করছেন বা আপনি যে কোনও ফাংশন ব্যবহার করছেন যা আপনাকে কোনও ফাংশন পাস করার প্রয়োজন pass

# নির্ধারিত সংযোজন_ফঙ্ক (x, y) ((x) + (y))

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

template<class Lhs, class Rhs>
auto adding_func(const Lhs &lhs, const Rhs &rhs)
                -> decltype(lhs+rhs) {return lhs + rhs;}

আমি একমত, এটি কদর্য। তবে আমি নিজেকে বলেছিলাম "কম্পাইলার এটি অনুমান করতে পারলেও আমি কেন এই অভিব্যক্তিটির ধরণটি জানব?" প্রচুর ক্ষেত্রে। এই মুহুর্তগুলিতে এটি অনেক সাহায্য করতে পারে।

সংক্ষেপে:

যদিও সি ++ 11-র নতুন বৈশিষ্ট্যগুলি তাদের সিনট্যাক্সে কুৎসিত মনে হয়, তবে আমি মনে করি যে খুব অল্প সময়ের মধ্যেই তাদের অভ্যস্ত হয়ে উঠতে পারে। প্রতিটি নতুন ভাষা নির্মাণ প্রথমে শেখা কঠিন; আপনি যখন প্রথমবার পুরো ক্লাসটি লিখতে শিখলেন তা কল্পনা করুন: শিরোনামের ফাইলে ঘোষণাটি দেওয়া, শেষে অতিরিক্ত সেমিকোলনটি ভুলে না যাওয়া, হেডার ফাইল সহ উত্স ফাইলে সংজ্ঞা দেওয়া, এটির প্রতিরোধের জন্য কোনও প্রহরী রয়েছে তা নিশ্চিত করে একাধিক অন্তর্ভুক্তি, সদস্য ফাংশন ঘোষণায় স্কোপ রেজোলিউশন অপারেটরটিকে ভুলে যাওয়া নয় ...

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


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

কুরুচিপূর্ণ চেহারাটির বাক্য গঠন সম্পর্কে, এই দুটি উদাহরণস্বরূপ নিন: bool is_alive;এবং bool thisSpecialObjectOfMineIsAlive;। উভয়ই একই কাজ করে তবে দ্বিতীয়টি দেখতে সত্যই কুৎসিত লাগে। কেন? কারণ আমি ভুল করে ভেবেছিলাম যে আরও তথ্য রাখলে এটি আরও স্পষ্ট হয় তবে এটি বিপরীতভাবে ঘটেছে। এটি এখানে একই চুক্তি, স্ট্রস্ট্রস্ট্রপ আমাদের বৈশিষ্ট্যগুলি দিয়ে ভাল বোঝানো হয়েছিল, তবে তিনি কেবল এটি ভাল দেখায়নি। আমার কাছে এটি একটি খারাপ নকশা দেখায়।
শাহবাজ

3
ভাল দেখাচ্ছে! = ভাল, এবং খারাপ চেহারা! = খারাপ।
ডেড এমজি

@ শাহবাজ: আমার মনে হয় ল্যাম্বডাস একটি দুর্দান্ত ধারণা (এবং লিস্পের মতো ভাষায় বহু বছর ধরে রয়েছে)। আমি তাদের হাস্কেলগুলিতে প্রচুর ব্যবহার করি। আমি কম নিশ্চিত যে এগুলি সি ++, জাভা ইত্যাদির মতো ভাষাতে ফিট করে They তারা আমার কাছে কিছুটা চিন্তাভাবনার মতো বোধ করে: ল্যাম্বডাস জনপ্রিয় হয়ে উঠেছে বলে পরে যা যুক্ত হয়েছিল। প্রথম থেকেই কেন এই ভাষাগুলিতে তাদের পরিচয় দেওয়া হয়নি? স্ট্রস্ট্রপ এবং গোসলিন কি কখনও লিস্পের কথা শুনেনি?
জর্জিও

8

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

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

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

আপনি কি সব শিখতে হবে? হ্যাঁ, কারণ সমস্ত বৈশিষ্ট্য ভাল বা খারাপ, তাড়াতাড়ি বা পরে ব্যবহার করা হয়। ভাষার "গুণমান" ( এটির জন্য একটি উদ্দেশ্যমূলক ব্যবস্থা রয়েছে তা স্বীকার করে নেওয়া) এটি কী আরও ভাল গল্প কিনা: কতক্ষণ পিছিয়ে থাকা সামঞ্জস্যতা বজায় রাখা উচিত? উত্তর খুঁজে পাওয়া শক্ত, যখন কেউ 3 বছর এবং কেউ কেউ 50 বলে।

সি ++ আরও "নিয়মিত" রাখার বিকল্প হ'ল ... স্ক্র্যাচ পুনরায় চালু করার সাথে এটি প্রায়শই ভাঙা। তবে এটি আর কোনও সি ++ হবে না।

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

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

যদি আপনি এটি আর সহ্য করতে না পারেন, ... অন্য একটি অল্প বয়স্ক ভাষা বিবেচনা করা ভাল। সি ++ কেবল সেই অর্থে সরল করা যায় না। এই বয়সে না।


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

"সি ++ কেবল সেই অর্থে সরল করা যায় না this এই বয়সে নয়" ": অন্য প্রোগ্রামিং ভাষা (যেমন সি, আদা, ...) একই পথ অনুসরণ করছে না কেন? সম্ভবত তাদের অ্যাপ্লিকেশনগুলির নিজস্ব কুলুঙ্গি রয়েছে এবং তারা সম্ভাব্য সমস্ত অ্যাপ্লিকেশন অঞ্চলের হাতিয়ার হওয়ার আশা করা যায় না ।
জর্জিও

@ জিওরজিও: হ্যাঁ ... আপনি সম্ভবত "বাস্তববাদী" অর্থে ঠিকই আছেন। তবে তাত্ত্বিকভাবে ... আমার মনে আছে কিছু ভাল দিন যেখানে পাস্কাল ছিল "শিক্ষাদানের রেফারেন্স ল্যাঙ্গুয়েজ" এবং অ্যাডা ছিল "প্রোগ্রামিং ল্যাঙ্গুয়েজ ভাষা ওয়ানবে"।
এমিলিও গারাভাগলিয়া

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

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

7

এমনকি যদি আপনি নতুন সি ++ 11 বৈশিষ্ট্যগুলি উপেক্ষা করার সিদ্ধান্ত নেন তবে আপনি তাদের থেকে এখনও উপকৃত হবেন কারণ সি ++ স্ট্যান্ডার্ড লাইব্রেরি সেগুলি ব্যবহার করবে। উদাহরণস্বরূপ, সি ++ 98 তে ভেরিয়েবলের ধরণের পরিবর্তনশীলতা vector<string>একটি পারফরম্যান্স দুর্যোগ ছিল কারণ ভেক্টর বড় হওয়ার সাথে সাথে কপি করার প্রয়োজনীয় সংখ্যার সংখ্যা ছিল। সি ++ 11 মুভ কনস্ট্রাক্টর সহ এটি একটি ইস্যু নয়। আসলে, আমি চাই সি ++ 11 আমাদের আরও নতুন বৈশিষ্ট্য এনেছে, কম নয় - বিশেষত স্ট্যান্ডার্ড লাইব্রেরিতে।


6

এত বছর পরে, এখনও অনেক লোক সি শিখছেন এবং কোড লেখছেন কেন? কেন? কারণ ভাষা ভাল।

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

শিল্পের কোনও প্রোগ্রামারের পক্ষে ব্র্যান্ড-নতুন প্রকল্পে কাজ শুরু করা যা বিদ্যমান কোড বেসের সাথে আবদ্ধ নয় এবং একা কাজ চালিয়ে যাওয়া খুব বিরল। সুতরাং, সি ++ 11 শিখার কারণটি হ'ল আপনাকে অন্যান্য ব্যক্তির দ্বারা লিখিত কোডগুলি ব্যবহার করতে হবে, যা নতুন বৈশিষ্ট্যগুলি ব্যবহার করে। এছাড়াও, যুক্ত করা বৈশিষ্ট্যগুলি একটি কারণে যুক্ত করা হয়েছিল। আপনি একবার সেগুলি শিখতে এবং সেগুলি ব্যবহার করার পরে আপনি তাদের প্রশংসা করতে পারেন।


আপনি আমার বাক্য অসম্পূর্ণভাবে উদ্ধৃত করেছেন। আমি পরে বাক্যটিতে যেমন বলেছি, এর goodঅর্থ এটি একটি ভাল প্রোগ্রামিং ভাষার ডিজাইনের নিয়ম অনুসরণ করে। আপনি কোথায় পড়াশোনা করছেন তা আমি জানি না, তবে আমি 4 বা 5 টি দেশ সম্পর্কে জানি এবং তারা সকলেই সি দিয়ে প্রোগ্রামিং শিখতে শুরু করে Like যেমন আমি বলেছিলাম, সি এর সাথে কোনও ব্যতিক্রম নেই (জাভাতে বিপরীত কিছু, আপনি সবেই পারবেন না) একটি ব্যতিক্রম আছে না এমন একটি নির্মাণ সন্ধান করুন)।
শাহবাজ

1
@ শাহবাজ: আমি সম্পূর্ণ বাক্য উদ্ধৃত করেছি। আপনি একটি কার্যকরী সংযোগ করেছেন, এবং আমি বলেছিলাম যে এটি সেরা অসম্পূর্ণ। ধন্যবাদ, আমি আর পড়াশোনা করি না। :) আমি যথেষ্ট যথেষ্ট করেছি। আমি মার্কিন যুক্তরাষ্ট্রে থাকি এবং আমি যখন কলেজে যাই (১৫ বছর আগে) সি ছিল প্রবর্তনীয় ভাষা। তবে, বর্তমানে বেশিরভাগ মার্কিন স্কুলগুলি জাভা দিয়ে শুরু হয় এবং এমন অনেক তরুণ প্রোগ্রামার নেই যারা সি জানে
ডিমা

5
@ শাহবাজ: ভাষা নিয়মের ব্যতিক্রম থাকলে আমি সত্যিই সমস্যাটি দেখতে পাচ্ছি না। হ্যাঁ, সি ++ এর চেয়ে অনেক সহজ ভাষা। অন্যদিকে, সি ++ আরও সহজ কোড লিখতে সহজ করে তোলে। সহজ কোড লিখতে আপনার আরও ভাষার বৈশিষ্ট্য প্রয়োজন। এটি ভাষাটিকে আরও জটিল করে তুলেছে। আমি একের জন্য ক্লাস, রেফারেন্স, আরএআইআই, টেম্পলেট, কনস্ট্রাক্টর, ডেস্ট্রাক্টর, ব্যতিক্রম এবং নেমস্পেসের মতো জিনিস পছন্দ করি। তবে আপনি বলেছিলেন যে আপনার প্রশ্নটি সি বনাম সি ++ সম্পর্কে নয়, সুতরাং আমি উত্তরে সে সম্পর্কে লিখিনি।
ডিমা

5
  • সমাবেশটি তৈরি করা হয়েছিল কারণ লোকেরা মেশিন কোড লিখতে পছন্দ করে না
  • সি তৈরি করা হয়েছিল কারণ লোকজন সমাবেশ লিখতে পছন্দ করে না
  • সি ++ তৈরি করা হয়েছিল কারণ লোকেরা সি লিখতে পছন্দ করে না
  • সি ++ 11 তৈরি করা হয়েছিল কারণ লোকেরা সি ++ লিখতে পছন্দ করেন না

আপনি আপনার সি ++ ক্যারিয়ারের এমন একটি পয়েন্টে আসতে চলেছেন যেখানে আপনি নিজেকে বলে থাকেন, "আমি অবশ্যই আশা করি ফান্টেক্টরগুলি সহজ ছিল," বা "কেন নুল একটি অন্তর্নিহিত?" এবং তারপরে আপনি সি ++ 11 বুঝতে পারবেন।


সমস্ত ভাষা তৈরি করা হয়েছিল কারণ কেউ বিদ্যমান ভাষা পছন্দ করে না। এটি তাদের কোনওটিই ভাল করে না।
শাহবাজ

আমি বলি না যে NULLএকটি হওয়া উচিত int। এটা করা উচিত নয়। আমি যা সঠিকভাবে পাই না তা হ'ল ভাষায় এমন কোনও কনস্ট্রাক্টের পরিচয় দেওয়া যা এটি সমাধান করে তবে ব্যতিক্রমগুলি প্রবর্তন করে। তাদের আরও ভাল পদ্ধতিতে একই জিনিস করতে সক্ষম হওয়া উচিত ছিল।
শাহবাজ

2
"সি ++ 11 তৈরি করা হয়েছিল কারণ লোকেরা সি ++ লেখা পছন্দ করেনি": তারা যদি সি ++ লিখতে পছন্দ করেন না তবে সি ++ কেন সি ++ 11 এর উপসেট?
জর্জিও

1
এটি হওয়া উচিত: সি # এবং জাভা তৈরি করা হয়েছিল কারণ লোকেরা সি ++ লিখতে পছন্দ করেন না।
কলমারিয়াস

4

পড়াশোনা সর্বদা উপকারী। জ্ঞানই শক্তি.

মূলত এটিই উত্তর। আপনি কেবল কীভাবে এটি থেকে উপকৃত হতে পারবেন এবং এটি জেনে আপনার কী ক্ষমতা থাকতে পারে তার বিশদগুলি কেবলমাত্র বিশদ and

একটি উদাহরণ আপনার নিজের প্রশ্ন। আপনি এটির কিছুটা না শিখেও জিজ্ঞাসা করতে সক্ষম হবেন না।

এবং আমি যেমন মন্তব্য করেছি - আসল উদ্বেগ কেন শিখতে হবে তা নয়, কেন ব্যবহার করতে হবে । এবং এটি সম্পূর্ণ ভিন্ন প্রশ্ন।


4

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

সি ++ 11 'মুভিং' এবং 'অনুলিপি'র পৃথক ধারণা সমর্থন করে। নিয়মিত সি ++ এ, আমাদের কেবলমাত্র অপারেটর রয়েছে যা মূলত এই দুটি করে does তবে সত্যই, আমরা একটি অপারেটরের সাথে দুটি পৃথক ধারণা প্রকাশ করছি যা বিপজ্জনক।

এটি কার্যকর যেখানে সর্বাধিক সুস্পষ্ট উদাহরণ হ'ল নতুন ইউনিক_পিটার। এটিতে পুরানো অটো_পিটার এবং স্কোপড_পিটারের সমস্ত দুর্দান্ত বৈশিষ্ট্য রয়েছে। ধরা যাক আমরা একটি পয়েন্টার রাখতে চাই যা কেবলমাত্র কোনও পয়েন্টারকে কেবলমাত্র কোনও পয়েন্টারকে নির্দেশ করতে হবে guaran আমরা কীভাবে একটি = বি সাথে ডিল করব? ঠিক আছে, এর আগে, আমরা আটকে গিয়েছিলাম, আপনি এটি সম্পূর্ণরূপে অস্বীকার করতে পারেন (স্কোপড_পিটার হিসাবে), অথবা আমরা অটো_সিপিআর যা করতে পারি সেখানে যেখানে খ = খ থেকে মালিকানা চুরি করে। অটো_পিটারের এই আচরণটি খুব বিভ্রান্তিকর কারণ a = b আসলে বি পরিবর্তন করে। অনন্য_পিটার এটি হ্যান্ডেল করে: a = b এর অনুমতি নেই তবে মালিকানা চুরি করতে আপনার কাছে a = std :: পদক্ষেপ (খ) রয়েছে। এটা কিভাবে দরকারী? যেখানে, অদলবদলের একটি পৃথক (ওভারলোডেড) সংস্করণ রয়েছে যা কপির শব্দার্থবিজ্ঞানের পরিবর্তে সরানো শব্দার্থক ব্যবহার করে। এর অর্থ এই যে অনন্য_আপনারটি অদলবদল করতে পারে, কোনও সমস্যা নেই। এর অর্থ অটো_পিটারের বিপরীতে অনন্য_পিটার, ধারকটিতে ব্যবহার করা নিরাপদ এবং তারপরে বাছাই করুন। অনন্য_পিটার হ'ল মূলত সমস্তটি হতে পারে এবং নিরাপদ মেমরি পরিচালনার সব শেষ করে যখন আপনার একই বস্তুতে একাধিক পয়েন্টার প্রয়োজন হয় না।

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

চলন্ত শব্দার্থক কোডগুলি লিখনকে আরও সহজ করে তোলে যা ফাঁস হয় না এবং থ্রেড নিরাপদ।


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