আমি ডি সম্পর্কে তেমন কিছুই জানি না, তবে অনেকগুলি, অনেক সি ++ প্রোগ্রামার আমি এটির পক্ষে অপছন্দ করি এবং ব্যক্তিগতভাবে আমাকে সম্মত হতে হয়- আমি ডি এর চেহারা পছন্দ করি না এবং আরও কাছাকাছি নিয়ে যাব না।
কেন ডি আরও ট্র্যাকশন লাভ করছে না তা বোঝার জন্য আপনাকে কী সি ++ তে লোক আকর্ষণ করে তা বুঝতে শুরু করা উচিত। এক কথায়, এক নম্বর কারণ হ'ল নিয়ন্ত্রণ। আপনি যখন সি ++ এ প্রোগ্রাম করেন, তখন আপনার প্রোগ্রামের উপর আপনার সম্পূর্ণ নিয়ন্ত্রণ থাকে। স্ট্যান্ডার্ড লাইব্রেরি প্রতিস্থাপন করতে চান? আপনি পারেন। অনিরাপদ পয়েন্টার কাস্ট করতে চান? আপনি পারেন। কনস্ট-সঠিকতা লঙ্ঘন করতে চান? আপনি পারেন। মেমরি বরাদ্দকারী প্রতিস্থাপন করতে চান? আপনি পারেন। কাঁচা মেমরির প্রকারটি বিবেচনা না করে এটি অনুলিপি করতে চান? আপনি যদি সত্যিই চান। একাধিক বাস্তবায়ন থেকে উত্তরাধিকার পেতে চান? এটা তোমার জানাজা। জাহান্নাম, আপনি বোয়াহ সংগ্রাহকের মতো ময়লা আবর্জনা সংগ্রহের পাঠাগারগুলিও পেতে পারেন। তারপরে আপনার কাছে পারফরম্যান্সের মতো সমস্যা রয়েছে, যা নিয়ন্ত্রণকে ঘনিষ্ঠভাবে অনুসরণ করে a কোনও প্রোগ্রামার যত বেশি নিয়ন্ত্রণ রাখেন, ততই তিনি তার প্রোগ্রামটি তৈরি করতে পারবেন।
কিছু গবেষণা যা আমি দেখেছি যখন একটু গবেষণা করার সময় এবং কয়েকজনের সাথে এটির চেষ্টা করে দেখা হয়েছিল:
ইউনিফাইড টাইপ শ্রেণিবিন্যাস। সি ++ ব্যবহারকারীরা খুব কমই উত্তরাধিকার ব্যবহার করেন, বেশিরভাগ সি ++ প্রোগ্রামাররা রচনাটি পছন্দ করেন এবং এর জন্য যদি খুব ভাল কারণ থাকে তবে প্রকারগুলি কেবল উত্তরাধিকারের মাধ্যমে সংযুক্ত করা উচিত। অবজেক্টের ধারণা প্রতিটি ধরণের লিঙ্ক করে এই নীতিটিকে দৃ strongly়ভাবে লঙ্ঘন করে। তদ্ব্যতীত, এটি সি ++ এর অন্যতম মূল নীতি লঙ্ঘন করছে - আপনি কেবল যা চান তা ব্যবহার করেন। অবজেক্টের উত্তরাধিকার সূত্রে কোনও বিকল্প দেওয়া হচ্ছে না এবং এটির সাথে যে ব্যয় হয় সেগুলি প্রোগ্রামারকে তার প্রোগ্রামের উপর নিয়ন্ত্রণ দেওয়ার ক্ষেত্রে ভাষা হিসাবে সি ++ এর পক্ষে দাঁড়ানোর পক্ষে খুব তীব্র।
আমি ফাংশন এবং প্রতিনিধিদের সাথে সমস্যা সম্পর্কে শুনেছি। স্পষ্টতই, ডি -র রান-টাইম কলযোগ্য ফাংশনের ধরণ হিসাবে উভয় ফাংশন এবং প্রতিনিধি রয়েছে এবং সেগুলি একই নয় তবে তারা বিনিময়যোগ্য বা ... কিছু? আমার বন্ধুর সাথে তাদের বেশ কয়েকটি সমস্যা ছিল। এটি অবশ্যই সি ++ এর একটি ডাউনগ্রেড, যা সবে আছে std::function
এবং আপনি শেষ করেছেন।
তারপরে আপনি সামঞ্জস্যতা পেয়েছেন। ডি সি ++ এর সাথে বিশেষভাবে সামঞ্জস্যপূর্ণ নয়। আমি বলতে চাইছি, কোনও ভাষা সি ++ এর সাথে সামঞ্জস্যপূর্ণ নয়, আসুন এটির মুখোমুখি হোন, সি ++ / সি এল আই ছাড়া যা প্রতারণার মতো, তবে প্রবেশের ক্ষেত্রে বাধা হিসাবে, এটি উল্লেখ করা দরকার।
তারপরে, আরও কিছু জিনিস রয়েছে। উদাহরণস্বরূপ, কেবল উইকিপিডিয়া এন্ট্রি পড়ুন।
import std.metastrings;
pragma(msg, Format!("7! = %s", fact_7));
pragma(msg, Format!("9! = %s", fact_9));
printf
gets
পুরানো সি স্ট্যান্ডার্ড লাইব্রেরির মতো বড় সমস্যাগুলির মতো একই পরিবারে এখন পর্যন্ত তৈরি করা সবচেয়ে নিরাপদ ফাংশন । আপনি যদি স্ট্যাক ওভারফ্লোতে এটি অনুসন্ধান করেন তবে আপনি এর অপব্যবহার সম্পর্কিত অনেকগুলি, অনেক প্রশ্ন দেখতে পাবেন। মূলত, ডিআরওয়াইprintf
লঙ্ঘন- আপনি ফর্ম্যাট স্ট্রিংয়ে টাইপ দিচ্ছেন, এবং তারপরে আপনি যখন কোনও যুক্তি দিবেন তখন এটি আবার দিচ্ছেন। ডিআরওয়াই লঙ্ঘন যেখানে আপনি যদি এটি ভুল হয়ে থাকেন তবে খুব খারাপ জিনিস ঘটে যায় - বলুন, যদি আপনি কোনও টাইপডেফকে 16-বিট সংখ্যার থেকে 32-বিটের মধ্যে পরিবর্তন করেন। এটি মোটেও প্রসারণযোগ্য নয় - প্রত্যেকে যদি নিজস্ব ফর্ম্যাট স্পেসিফায়ার আবিষ্কার করে তবে কী হবে তা কল্পনা করুন। সি ++ এর আইওস্ট্রিমগুলি ধীর হতে পারে এবং তাদের অপারেটরের পছন্দটি সবচেয়ে বড় নাও হতে পারে এবং তাদের ইন্টারফেসটি কাজ ব্যবহার করতে পারে তবে তারা মূলত সুরক্ষিত হওয়ার গ্যারান্টিযুক্ত এবং ডিআরওয়াই লঙ্ঘিত হয় না এবং সেগুলি সহজেই বাড়ানো যেতে পারে। এটি এমন কিছু নয় যা সম্পর্কে বলা যেতে পারে printf
।
একাধিক উত্তরাধিকার নেই। এটা খুব এর না সি ++ উপায়। সি ++ প্রোগ্রামাররা তাদের প্রোগ্রামের উপর সম্পূর্ণ নিয়ন্ত্রণের প্রত্যাশা করে এবং আপনি যে ভাষাটি উত্তরাধিকার সূত্রে গ্রহণ করতে পারবেন না তা প্রয়োগ করা সেই নীতি লঙ্ঘন। এছাড়াও, এটি উত্তরাধিকার (আরও বেশি) ভঙ্গুর করে তোলে কারণ আপনি যদি কোনও ইন্টারফেস থেকে কোনও শ্রেণিতে কোনও ধরণের পরিবর্তন করেন কারণ আপনি একটি ডিফল্ট বাস্তবায়ন বা কিছু সরবরাহ করতে চান, হঠাৎ আপনার সমস্ত ব্যবহারকারীর কোডটি নষ্ট হয়ে যায়। এটা ভাল জিনিস না।
আর একটি উদাহরণ string
এবং wstring
। সি ++ এর মধ্যে তাদের মধ্যে রূপান্তর করতে ইতিমধ্যে বেশ বেদনাদায়ক এবং এই লাইব্রেরিটি ইউনিকোড সমর্থন করে এবং এই পুরাতন সি লাইব্রেরিটি কেবলমাত্র ব্যবহার করে const char*
এবং আপনি যে স্ট্রিং আর্গুমেন্ট টাইপ করতে চান তার উপর নির্ভর করে একই ফাংশনের বিভিন্ন সংস্করণ লিখতে চান। উল্লেখযোগ্যভাবে, উইন্ডোজ শিরোনামগুলির উদাহরণস্বরূপ, সমস্যাটি মোকাবেলায় কিছু বিরক্তিকর ম্যাক্রো রয়েছে যা প্রায়শই আপনার নিজের কোডে হস্তক্ষেপ করতে পারে। যোগ করার পদ্ধতি dstring
মিশ্রণ একমাত্র পরিবর্তে দুই স্ট্রিং ধরনের জিনিষ খারাপ করতে যাচ্ছে, যেমন এখন, আপনি তিন পরিচালনা করতে হবে। একাধিক স্ট্রিং টাইপ থাকা রক্ষণাবেক্ষণের ব্যথা বাড়িয়ে তুলতে চলেছে এবং স্ট্রিংগুলির সাথে সম্পর্কিত পুনরাবৃত্ত কোড প্রবর্তন করবে।
স্কট মায়ারস লিখেছেন:
ডি একটি প্রোগ্রামিং ভাষা যা প্রোগ্রামারদের আধুনিক সফ্টওয়্যার বিকাশের চ্যালেঞ্জগুলি মোকাবেলায় সহায়তা করার জন্য নির্মিত is এটি যথাযথ ইন্টারফেসগুলির মাধ্যমে আন্তঃসংযুক্ত মডিউলগুলি উত্সাহিত করার মাধ্যমে, শক্তিশালীভাবে সংহত প্রোগ্রামিং প্যারাডিজমগুলির একটি ফেডারেশন, ভাষা-প্রয়োগকারী থ্রেড বিচ্ছিন্নতা, মডিউলার ধরণের সুরক্ষা, একটি দক্ষ মেমরির মডেল এবং আরও অনেক কিছু দ্বারা এটি করে।
ভাষা প্রয়োগকারী থ্রেড বিচ্ছিন্নতা কোনও প্লাস নয়। সি ++ প্রোগ্রামাররা তাদের প্রোগ্রামগুলির উপর সম্পূর্ণ নিয়ন্ত্রণের প্রত্যাশা করে এবং কোনও কিছু জোর করার ভাষা অবশ্যই চিকিত্সকের আদেশ অনুসারে নয়।
আমি সংকলন-সময় স্ট্রিং ম্যানিপুলেশন উল্লেখ করতে যাচ্ছি। সংকলন সময়ে ডি কোড ব্যাখ্যা করার ক্ষমতা রয়েছে D এটি কোনও প্লাস নয়। সি এর তুলনামূলকভাবে সীমিত প্রিপ্রোসেসর দ্বারা সৃষ্ট ব্যাপক মাথাব্যথা বিবেচনা করুন, যা সমস্ত প্রবীণ সি ++ প্রোগ্রামারদের দ্বারা সুপরিচিত এবং তারপরে কল্পনা করুন যে এই বৈশিষ্ট্যটি কতটা খারাপভাবে ব্যবহার করা হচ্ছে। সংকলন সময়ে ডি কোড তৈরির ক্ষমতা দুর্দান্ত তবে এটি সিনট্যাক্টিক নয়, শব্দার্থক হওয়া উচিত ।
উপরন্তু, আপনি একটি নির্দিষ্ট প্রতিচ্ছবি আশা করতে পারেন। ডি আবর্জনা সংগ্রহ করেছেন, যা সি ++ প্রোগ্রামার জাভা এবং সি # এর মতো ভাষার সাথে মিলিত করবে যা দর্শনের ক্ষেত্রে একেবারেই সরাসরি বিরোধী এবং সিনট্যাক্টিক মিলগুলি তাদের মনেও আনবে। এটি অগত্যা অবজ্ঞাতভাবে ন্যায়সঙ্গত নয়, তবে এটি এমন কিছু যা অবশ্যই লক্ষ করা উচিত।
মৌলিকভাবে, এটি সি ++ প্রোগ্রামাররা ইতিমধ্যে যা করতে পারে না তেমন প্রস্তাব দেয় না। হতে পারে ডি তে ফ্যাক্টরিয়াল মেটাপোগ্রাম লেখার পক্ষে আরও সহজ, তবে আমরা ইতিমধ্যে সি ++ তে ফ্যাক্টরিয়াল মেটাপোগ্রামগুলি লিখতে পারি । হতে পারে ডি তে আপনি একটি সংকলন-কাল রশ্মি ট্রেসার লিখতে পারেন , তবে সত্যিই যে কেউ যাইহোক এটি করতে চান না। সি ++ দর্শনের মৌলিক লঙ্ঘনের তুলনায় আপনি ডি তে যা করতে পারেন তা বিশেষভাবে উল্লেখযোগ্য নয়।
এমনকি যদি এই বিষয়গুলি কেবল তলদেশে সমস্যা হয় তবে আমি নিশ্চিত যে পৃষ্ঠের উপরে, ডি আসলে সি ++ দেখতে মোটেও পছন্দ করে না এটি সম্ভবত একটি ভাল কারণ যে অনেক সি ++ প্রোগ্রামার ডি তে স্থানান্তরিত হচ্ছে না is সম্ভবত ডি নিজেই একটি ভাল কাজের বিজ্ঞাপন করা প্রয়োজন।