আমি সি শিখতে বিবেচনা করছি
সি না শিখার কোনও নির্দিষ্ট কারণ নেই তবে আমি সি ++ এর পরামর্শ দেব suggest এটি সি যা করে তার অনেক কিছুই সরবরাহ করে (যেহেতু সি ++ সি এর একটি দুর্দান্ত সেট), এতে প্রচুর পরিমাণে "অতিরিক্ত" থাকে। সি ++ এর পূর্বে সি শেখা অপ্রয়োজনীয় - এগুলি কার্যকরভাবে পৃথক ভাষা।
অন্য একটি উপায় রাখুন, সি যদি কাঠের সরঞ্জামগুলির সেট হয় তবে এটি সম্ভবত:
- হাতুড়ি
- নখ
- হাত দেখেছি
- হ্যান্ড ড্রিল
- ব্লক স্যান্ডার
- ছেনি (সম্ভবত)
আপনি এই সরঞ্জামগুলির সাথে কিছু নির্মাণ করতে পারেন - কিন্তু কিছু চমৎকার সম্ভাব্য সময় এবং দক্ষতা অনেক প্রয়োজন।
সি ++ হ'ল আপনার স্থানীয় হার্ডওয়্যার স্টোরের পাওয়ার সরঞ্জামগুলির সংগ্রহ।
আপনি যদি শুরু করার জন্য বেসিক ভাষার বৈশিষ্ট্যগুলি সাথে আটকে থাকেন তবে সি ++ এর তুলনামূলকভাবে অতিরিক্ত অতিরিক্ত শিক্ষার বক্ররেখা রয়েছে।
তবে লোকেরা কেন সি (বা সি ++) ব্যবহার করে যদি এটি 'বিপজ্জনকভাবে' ব্যবহার করা যায়?
কারণ কিছু লোক IKEA থেকে আসবাব চায় না। =)
গুরুতরভাবে যদিও, অনেকগুলি ভাষা সি বা সি ++ এর চেয়ে "উচ্চতর" থাকতে পারে এমন কিছু জিনিস থাকতে পারে যা তাদের নির্দিষ্ট দিকগুলিতে ব্যবহার করতে (সম্ভাব্য) "সহজ" করে তোলে, এটি সর্বদা ভাল জিনিস নয়। যদি আপনি কিছু করা বা কোনও বৈশিষ্ট্য সরবরাহ না করা উপায় পছন্দ না করেন তবে সম্ভবত এটি সম্পর্কে আপনি বেশি কিছু করতে পারেন না। অন্যদিকে, সি এবং সি ++ পর্যাপ্ত "নিম্ন-স্তরের" ভাষার বৈশিষ্ট্য সরবরাহ করে (পয়েন্টার সহ) যা আপনি অনেকগুলি জিনিসকে সরাসরি (উদাহরণস্বরূপ হার্ডওয়্যার বা ওএস-ভিত্তিক) অ্যাক্সেস করতে পারেন বা নিজেই এটি তৈরি করতে পারেন যা অন্য ক্ষেত্রেও সম্ভব নয় may প্রয়োগ হিসাবে ভাষা।
আরও সুনির্দিষ্টভাবে, সি এর নীচে এমন কয়েকটি বৈশিষ্ট্য রয়েছে যা এটি অনেক প্রোগ্রামারদের জন্য কাঙ্ক্ষিত করে তোলে:
- গতি - বছরের পর বছর ধরে এটি তুলনামূলক সরলতা এবং সংকলক অপ্টিমাইজেশনের কারণে এটি স্থানীয়ভাবে খুব দ্রুত। এছাড়াও, ভাষা ব্যবহারের সময় প্রচুর লোক নির্দিষ্ট লক্ষ্যে প্রচুর শর্টকাট বের করে ফেলেছে, এটি এটিকে সম্ভাব্য এমনকি আরও দ্রুততর করে তোলে।
- আকার - গতির তালিকাভুক্ত হিসাবে একই কারণে, সি প্রোগ্রামগুলিকে খুব ছোট করা যায় (এক্সিকিউটেবল আকার এবং মেমরির ব্যবহারের ক্ষেত্রে উভয় ক্ষেত্রে), যা সীমিত মেমরির (যেমন এমবেডেড বা মোবাইল) পরিবেশের জন্য কাঙ্ক্ষিত।
সামঞ্জস্যতা - সি দীর্ঘকাল ধরে রয়েছে এবং প্রত্যেকের কাছে এটির জন্য সরঞ্জাম এবং গ্রন্থাগার রয়েছে। ভাষা নিজেই পছন্দসই নয় - এটি কোনও প্রসেসরের কাছে স্টাফ রাখার জন্য নির্দেশাবলী এবং মেমরি কার্যকর করার প্রত্যাশা করে এবং এটি প্রায় এটিই।
তদ্ব্যতীত, অ্যাপ্লিকেশন বাইনারি ইন্টারফেস (এবিআই) হিসাবে পরিচিত এমন কিছু আছে । সংক্ষেপে, এটি প্রোগ্রামগুলির জন্য একটি মেশিন-কোড স্তরে যোগাযোগ করার একটি উপায়, যার অ্যাপ্লিকেশন প্রোগ্রামিং ইন্টারফেস (এপিআই) এর মাধ্যমে সুবিধা থাকতে পারে । অন্য ভাষা যেমন সি ++ এর এবিআই থাকতে পারে, সাধারণত এগুলি সি এর তুলনায় কম ইউনিফর্ম (একমত হয়), তাই আপনি যখন কোনও কারণে কোনও প্রোগ্রামের সাথে যোগাযোগের জন্য কোনও এবিআই ব্যবহার করতে চান তখন সি একটি ভাল ভিত্তি ভাষা তৈরি করে।
প্রোগ্রামাররা কেন কেবল জাভা বা পাইথন বা ভিজুয়াল বেসিকের মতো অন্য সংকলিত ভাষা ব্যবহার করে না?
দক্ষতা (এবং মাঝেমধ্যে মেমরির অপেক্ষাকৃত সরাসরি অ্যাক্সেস ছাড়া মেমরি পরিচালনা স্কিমগুলি প্রয়োগ করা যায় না)।
পয়েন্টারগুলির সাথে সরাসরি স্মৃতিতে অ্যাক্সেস করা অনেকগুলি ঝরঝরে (সাধারণত দ্রুত) কৌশলগুলি প্রবর্তন করে যখন আপনি নিজের মেমরি কিউবিহোলগুলিতে আপনার গ্রুবি পাঞ্জাগুলি সামান্য এবং জিরোগুলিতে সরাসরি রাখতে পারেন এবং কেবলমাত্র খেলনাগুলি হস্তান্তর করার জন্য ওল শিক্ষককে অপেক্ষা করতে হবে না প্লেটাইম এ আবার এগুলি স্কুপ করুন।
সংক্ষেপে, স্টাফ যুক্ত করা সম্ভাব্যভাবে পিছিয়ে বা অন্যথায় অযাচিত জটিলতার পরিচয় দেয়।
স্ক্রিপ্টেড ভাষা এবং সেই জাতীয় বিষয়ে, আপনাকে সি (বা কোনও সংকলিত ভাষা) স্থানীয়ভাবে কার্যকরভাবে দক্ষতার সাথে চালানোর জন্য মাধ্যমিক প্রোগ্রামগুলির প্রয়োজন মতো ভাষাগুলি পেতে কঠোর পরিশ্রম করতে হবে। অন-দ্য ফ্লাইয়ে ইন্টারপ্রেটার যুক্ত করার ফলে অন্তর্নিহিতভাবে প্রয়োগের গতি হ্রাস এবং মেমরির ব্যবহার বাড়ার সম্ভাবনার পরিচয় হয় কারণ আপনি মিশ্রণটিতে আরও একটি প্রোগ্রাম যুক্ত করছেন। আপনার প্রোগ্রামের দক্ষতা এই মাধ্যমিক প্রোগ্রামের দক্ষতার উপর নির্ভর করে যত ভাল (খারাপভাবে =)) আপনি আপনার মূল প্রোগ্রাম কোডটি লিখেছিলেন। আপনার প্রোগ্রামটি উল্লেখ না করা প্রায়শই সম্পাদন করতে দ্বিতীয় প্রোগ্রামের উপর সম্পূর্ণ নির্ভর করে। যে দ্বিতীয় প্রোগ্রামটি কোনও নির্দিষ্ট সিস্টেমে কোনও কারণে উপস্থিত নেই? কোড নেই।
আসলে, "অতিরিক্ত" যে কোনও কিছুর পরিচয় করানো আপনার কোডকে ধীর করে দেয় বা জটিল করে তোলে। "ভয়ঙ্কর পয়েন্টারবিহীন" ভাষায়, আপনি সবসময় কোডের অন্যান্য বিটগুলি আপনার পিছনে পরিষ্কার করার জন্য অপেক্ষা করেন বা অন্যথায় জিনিসগুলি করার জন্য "নিরাপদ" উপায়গুলি খুঁজে পান - কারণ আপনার প্রোগ্রামটি এখনও একই মেমরি অ্যাক্সেস অপারেশনগুলি সম্পন্ন করছে যা দিয়ে করা যেতে পারে পয়েন্টার। আপনি কেবল এটি পরিচালনা করছেন না (যাতে আপনি এটি * সিকে আপ করতে পারেন না, প্রতিভা = পি)।
বিপজ্জনক দ্বারা, আমি পয়েন্টার এবং অন্যান্য অনুরূপ স্টাফ দিয়ে বোঝাতে চাইছি। [...] স্ট্যাক ওভারফ্লো প্রশ্নটির মতো কেন গেমগুলির কাজটি এত বিপজ্জনক যে এটি ব্যবহার করা উচিত নয়?
গৃহীত উত্তর অনুযায়ী:
"এটি ১৯৯ 1999 এর আইএসও সি স্ট্যান্ডার্ড পর্যন্ত ভাষার একটি সরকারী অংশ হিসাবে রয়ে গিয়েছিল তবে এটি ২০১১ এর স্ট্যান্ডার্ড দ্বারা আনুষ্ঠানিকভাবে সরানো হয়েছিল। বেশিরভাগ সি বাস্তবায়ন এখনও এটি সমর্থন করে তবে কমপক্ষে জিসিসি কোনও কোডের জন্য এটি একটি সতর্কতা জারি করে।"
ধারণাটি যেহেতু কোনও ভাষায় কিছু করা যেতে পারে, এটি অবশ্যই নির্বোধ। ভাষাগুলিতে ত্রুটি রয়েছে যা স্থির হয়ে যায়। পুরানো কোডের সাথে সামঞ্জস্যতার কারণে, এই নির্মাণটি এখনও ব্যবহার করা যেতে পারে। তবে কোনও প্রোগ্রামারকে জেনেস () ব্যবহার করতে বাধ্য করার মতো কিছুই নেই (সম্ভবত) এবং এই কমান্ডটি মূলত নিরাপদ বিকল্পের সাথে প্রতিস্থাপন করা হয়েছিল।
আরও উল্লেখযোগ্য বিষয় হ'ল , (সহ) সমস্যাটি প্রতি সেঙ্কের কোনও পয়েন্টার ইস্যু নয় । এটি একটি কমান্ডের সাথে সমস্যা যা নিরাপদে কীভাবে স্মৃতি ব্যবহার করতে হয় তা জানে না। একটি বিমূর্ত অর্থে, এটি সমস্ত পয়েন্টার ইস্যু - পড়া এবং লেখার স্টাফগুলি যা আপনার অনুমিত নয়। পয়েন্টারগুলির সাথে এটি কোনও সমস্যা নয়; এটি পয়েন্টার বাস্তবায়নে সমস্যা।
পরিষ্কার করার জন্য, পয়েন্টারগুলি বিপজ্জনক নয় যতক্ষণ না আপনি দুর্ঘটনাক্রমে এমন কোনও মেমরির অবস্থান অ্যাক্সেস করেন যা আপনি অভিপ্রায়িত ছিলেন না। এবং তারপরেও গ্যারান্টি দেয় না যে আপনার কম্পিউটারটি গলে যাবে বা বিস্ফোরিত হবে। বেশিরভাগ ক্ষেত্রে, আপনার প্রোগ্রামটি কেবলমাত্র (সঠিকভাবে) কাজ করা বন্ধ করবে।
এটি বলেছিল যে, পয়েন্টারগুলি মেমরির অবস্থানগুলিতে অ্যাক্সেস সরবরাহ করে এবং ডেটা এবং এক্সিকিউটেবল কোড একসাথে মেমরিতে উপস্থিত থাকে তাই দুর্ঘটনাজনিত দুর্নীতির প্রকৃত বিপদ রয়েছে যা আপনি সঠিকভাবে মেমরি পরিচালনা করতে চান।
এই মুহূর্তে, সত্যিকারের সরাসরি মেমরি অ্যাক্সেস অপারেশনগুলি প্রায়শ বছর আগের তুলনায় সাধারণত কম উপকার সরবরাহ করে, এমনকি সি ++ এর মতো নন- আবর্জনা সংগ্রহ করা ভাষাগুলি স্মৃতি পয়েন্টারগুলির মতো জিনিসগুলি স্মৃতিশক্তির দক্ষতা এবং সুরক্ষার মধ্যকার ব্যবধান দূর করতে সহায়তা করে।
সংক্ষেপে, পয়েন্টারটি নিরাপদে ব্যবহার করা অবধি ভয় পাওয়ার খুব কম কারণ রয়েছে fear স্টিভ "দ্য কুমির হান্টার" ইরভিনের সাউথ পার্কের সংস্করণ থেকে কেবল একটি ইঙ্গিত নিন - ক্রোকসের বুমহোলগুলিতে আপনার থাম্বটি আটকাবেন না ।