যদি হ্যাঁ, আপনি কোথায় এবং কেন এটি ব্যবহার করবেন?
যদি না হয় তবে দয়া করে কেন সি আপনার কাছে গ্রহণযোগ্য নয় সে সম্পর্কে একটি ব্যাখ্যা সরবরাহ করুন।
যদি হ্যাঁ, আপনি কোথায় এবং কেন এটি ব্যবহার করবেন?
যদি না হয় তবে দয়া করে কেন সি আপনার কাছে গ্রহণযোগ্য নয় সে সম্পর্কে একটি ব্যাখ্যা সরবরাহ করুন।
উত্তর:
আমি যদি কিছু হারওয়ার ড্রাইভার প্রয়োগ করি তবে আমি সি ব্যবহার করব। এবং আমি সি ব্যবহার করব যদি আমি নিজের অপারেটিং সিস্টেম কার্নেল বা আমার নিজস্ব ভার্চুয়াল মেশিন প্রয়োগ করি।
উইন্ডোজ এপিআই, লিনাক্স, ম্যাক ওএস এক্স, সোলারিস এবং এর জন্য যদি হার্ডওয়্যার বা নিম্ন-স্তরের ওএস এপিআইগুলির সাথে ডিল করতে হয় তবে নিম্ন-স্তরের জিনিসগুলি করা খুব ভাল ভাষা ... এম্বেড থাকা সিস্টেমগুলিতে সাধারণত সি এর জন্য ভাল সমর্থন থাকে একটি সংকলক + বিকাশ কিট সহ।
হ্যা অবশ্যই. আমি সিস্টেমের নিম্নতর স্তরের যোগাযোগের পারফরম্যান্সের সমালোচনামূলক অংশগুলি লেখার জন্য সি ব্যবহার করব। উদাহরণস্বরূপ, আমি এরলং প্রকল্পে এনআইএফ লেখার জন্য সি ব্যবহার করব কারণ এটি এই ধরণের কাজের জন্য ডান টুল (টিএম)। অথবা আমি পার্ল প্রকল্পে অনুরূপ অংশ (এক্সএস) লেখার জন্য সি ব্যবহার করব।
আমি প্রায় প্রতিদিন প্রফেশনালি সি ব্যবহার করি। আসলে, সি হ'ল উচ্চ স্তরের ভাষা যেখানে আমি নিয়মিত প্রোগ্রাম করি।
যেখানে আমি সি ব্যবহার করি: আমি নিম্ন-স্তরের গ্রন্থাগার কোডটি লিখি যার যথাসম্ভব দক্ষ হওয়ার প্রয়োজন রয়েছে। আমার আঠালো কোড সি লেখা হয়েছে, অভ্যন্তরীণ গণনা লুপগুলি সমাবেশে লেখা আছে।
কেন আমি সি ব্যবহার করি: জটিল আর্গুমেন্ট স্ট্রাকচার এবং ত্রুটির শর্তগুলি সমাবেশের তুলনায় এটি পরিচালনা করা অনেক সহজ এবং আসল গণনা শুরু করার আগে এই ধরণের শর্ত পরীক্ষার জন্য কার্য সম্পাদন ওভারহেড প্রায়শই নগণ্য। যেহেতু সি একটি সহজ, সুনির্দিষ্ট ভাষা, আমি যখনই অগ্রহণযোগ্য পারফরম্যান্সের ঝুঁকির সাথে সংকলিত কোডটি দেখি তখন কোড জেনারেশনের উন্নতি করতে কাজের সংস্থাপক দলের সাথে কাজ করার জন্য আমার একটি সহজ সময় হয়।
পোর্টেবিলিটি সি এর আরেকটি দুর্দান্ত গুণ, আমার আঠালো কোডটি আমি যে লাইব্রেরিতে কাজ করি তার একাধিক হার্ডওয়্যার-নির্দিষ্ট বাস্তবায়ন জুড়ে ভাগ করা হয়, যা সত্যই নতুন প্ল্যাটফর্মগুলির জন্য সমর্থন আনতে সহজতর করে। বেশিরভাগ প্ল্যাটফর্মগুলিতে মাসের ভাষার স্বাদের জন্য ভার্চুয়াল মেশিন বা দোভাষী নেই। কিছু প্ল্যাটফর্মের ভাল সি ++ সংকলক নেই। খুব কম প্ল্যাটফর্ম রয়েছে যেগুলির ব্যবহারযোগ্য সি সংকলকের অভাব রয়েছে (এবং যেহেতু আমাদের সংকলক দলের সাথে আমার একটি ভাল কাজের সম্পর্ক রয়েছে, তাই আমার সাধারণত আমার সমর্থন সমর্থন পেতে খুব বেশি সময় লাগে না)।
হ্যাঁ, আমি একটি গুরুতর সংস্থান-সীমাবদ্ধ এম্বেডড সিস্টেমে সি ব্যবহার করব। পরিবর্তে আমি সি ++ ব্যবহার করতে পারি কারণ এটি সফ্টওয়্যার উপাদানগুলির মধ্যে দৃ strong় ইন্টারফেসগুলি প্রচার করা সহজ করে তোলে তবে কেবলমাত্র যদি প্রকল্পে কাজ করা সমস্ত প্রকৌশলী বুঝতে পারেন যে সি ++ কোডের আকারের ব্লাটের দিকে পরিচালিত করা সহজ হয় (ভার্চুয়াল ফাংশন এবং টেমপ্লেটগুলি এড়ানোর জন্য জিনিসগুলির উদাহরণ) )।
আমি একটি সি ++ প্রোগ্রামারকেও দেখেছিলাম যে 1K স্ট্যাকের উপর 10 কে অবজেক্ট তৈরি করার চেষ্টা করছে, এটি ভাল ধারণা নয়।
virtual
ফাংশনগুলি ঠিক আছে কারণ তারা "আপনি যা ব্যবহার করেন না তার জন্য অর্থ প্রদান করেন না" নীতি অনুসরণ করে তবে মেমরির প্রতিবন্ধক পরিবেশে আপনি ব্যতিক্রম এবং আরটিটিআই অক্ষম করতে চাইতে পারেন।
আমি বেশিরভাগ জেন হাইপারভাইজার, বিভিন্ন ধরণের লাইব্রেরি এবং লিনাক্স কার্নেলের সাথে কাজ করি। উপলক্ষে, আমাকে একটি ডিভাইস ড্রাইভার লিখতে হবে (বা একটি আবার লিখতে হবে যাতে এনএক্সএক্স ভার্চুয়াল মেশিনগুলি এইচআরএনজির মতো একটি ডিভাইস ভাগ করতে পারে)। সি আমার প্রাথমিক ভাষা এবং এতে আমি বেশ খুশি।
আমি কি এটি ব্যবহার করে একটি স্প্রেডশিট প্রোগ্রাম লেখার চেষ্টা করব? কোনভাবেই না. প্রতিটি সরঞ্জামের অ্যাপ্লিকেশন রয়েছে এবং আমি খুশি যে আমার কাছে অনেক সরঞ্জাম রয়েছে।
আমি সি পছন্দ করি, কিন্তু আমি হাতুড়ি দিয়ে স্ক্রু পাউন্ড করার চেষ্টা করি না।
সি যদি কোনও নতুন প্রকল্পের জন্য বুদ্ধিমান পছন্দ হয় তবে তা নিশ্চিত। যদি তা না হয় তবে আমি অন্য কিছু ব্যবহার করব।
আমি কিছু প্রকল্পের জন্য চাই। অবশ্যই যদি আমাকে একটি এম্বেড সিস্টেম প্রয়োগ করতে হয় তবে স্বায়ত্তশাসিত বিমানের নিয়ামক হিসাবে বলুন। সমাবেশ সহ কিছু অংশে এমনকি নিম্ন স্তরে যেতে পারে।
যদি এটি প্রকল্পটি ফিট করে তবে আমার তাতে কোনও সমস্যা নেই।
আপনি যদি কোনও ওয়েব-অ্যাপ্লিকেশন বিকাশ করতে চান তবে হুম, সম্ভবত না (বা আমার খুব দৃ strong় এবং সত্য-সমর্থিত ন্যায়সঙ্গততা দেখতে হবে)।
মূলত অন্যান্য ভাষার সাথে বিকাশিত অন্যান্য প্রকল্পগুলি থেকেও আমি এটি ব্যবহার করব যখন কোনও বাধা স্পষ্টভাবে চিহ্নিত হয়ে গেছে এবং নেটিভ কোড ব্যবহার করে একটি অপ্টিমাইজেশন প্রয়োগ করা যেতে পারে। উদাহরণস্বরূপ, একটি জাভা সমাধান যা কিছু উন্নত রেন্ডারিংয়ের জন্য নিবিড় গণনা সম্পাদন করা প্রয়োজন (বলুন, একটি উপস্থাপনা ইঞ্জিন বা কিছু)। আপনি যদি কোনও জাভা প্রয়োগে ডিফল্ট হতে পারেন তবে এটি কোনও সমর্থিত প্ল্যাটফর্ম নয়, তবে কয়েকটি সমর্থিত প্ল্যাটফর্মের জন্য সি থেকে স্থানীয়ভাবে সংকলিত বাস্তবায়ন সরবরাহ করুন এবং একটি দুর্দান্ত পারফরম্যান্স উত্সাহ পাবেন।
প্রত্যেকটি ভাষারই ব্যবহারের একটি শালীন কুলুঙ্গি রয়েছে। আমি প্রায়শই নিজেকে উচ্চ-স্তরের ভাষায় জিনিসগুলি বাস্তবায়ন করতে দেখি এবং তারপরে ধীরে ধীরে সেগুলিকে সি-ল্যান্ডে নামিয়ে আনতে যদি আমার প্রয়োজন হয় উচ্চতর পারফরম্যান্স বা এমনকি কেবল আরও বহনযোগ্য be অস্তিত্বের প্রায় প্রতিটি কিছুর জন্য সি সংকলক রয়েছে এবং আপনি যদি সর্বজনীনভাবে উপলব্ধ এমন একটি API- তে লিখেন (যেমন POSIX), তবে এটি খুব কার্যকর হতে পারে।
আমি প্রায়শই যেসব লোকদের আজ প্রোগ্রামিং শিখতে আগ্রহী তাদের বলি তা হ'ল কোনও সময় তারা সি শিখায় এবং এতে স্বাচ্ছন্দ্য বোধ করে। আপনার যেখানে প্রয়োজন সেখানে নিজেকে খুঁজে পেতে পারেন। একাধিক উপলক্ষে, আমাকে একটি ছোট, স্ট্যাটিকালি লিঙ্কযুক্ত "ফাস্ট রিবুট" প্রোগ্রামটি কম্পাইল করতে হয়েছিল এবং ডিস্কের সাবসিস্টেমটি পুরোপুরি চলে গেছে এমন একটি সার্ভারের র্যাম ডিস্কে রাখার জন্য scp ব্যবহার করতে হয়েছিল। (সস্তা, সস্তা সার্ভার, কোনও অনলাইন রিডানডেন্সি নয়, এবং কেবল একটি ছোট প্রোগ্রাম লোড করার ক্ষমতা? সি যাওয়ার উপায়)
এছাড়াও, নিজেকে পায়ে গুলি না করে সিতে কীভাবে কাজ করা যায় তা শেখা অন্য ভাষা এবং পরিবেশে দক্ষতার সাথে লেখার দক্ষতায় উল্লেখযোগ্য অবদান রাখতে পারে। অন্তত যে আমার অভিজ্ঞতা হয়েছে.
যদিও আমি অবশ্যই এটি সমস্ত কিছুর জন্য এমনকি বেশিরভাগ জিনিসের জন্য ব্যবহার করি না, এর এটির জায়গা রয়েছে এবং এটি বেশ সর্বজনীন: তাই হ্যাঁ, আমি এটি অতীতে ব্যবহার করেছি এবং ভবিষ্যতে এটি ব্যবহার করব (যদিও আমি এটি করি না) এই মুহুর্তে জানুন)।
হ্যাঁ, আমি সব সময় এটি করি।
আপনি যদি কোনও লাইব্রেরি কল না করেন, সি থেকে উত্পন্ন কোডটির কোনও ওএস সমর্থন প্রয়োজন নেই। এটি উত্পন্ন যন্ত্রের ভাষার উপরও সূক্ষ্ম নিয়ন্ত্রণ দেয়। তাই ড্রাইভার বা অন্যান্য কোড যা কর্নেল স্পেসে থাকে এবং অন্য রকম পরিস্থিতিতে যেমন এমবেডেড সিস্টেমের কাজ করে এমনগুলি যেমন লেখার ক্ষেত্রে এটি দুর্দান্ত। এক্স উইন্ডোজ, জিটিকে + এবং ক্লটারের মতো আমি যে ওপেন-সোর্স প্রকল্পগুলির সাথে কাজ করি এটিগুলির প্রাথমিক ভাষাও।
আপনি সিতে যা কিছু করতে পারেন আপনি সি ++ তে করতে পারেন, প্রায়শই সি ++ এর পদ্ধতিগুলি কোডটি দ্রুত এবং সহজতর করে তোলে। আমি ওওপি এবং সি ++ ক্লাসগুলির কার্যকারিতাটি যেভাবে encapsulate করি সেগুলি এবং আমি RAII পছন্দ করি। স্বয়ংক্রিয়ভাবে ডেস্ট্রাক্টর অনুরোধের যত্ন সহকারে ব্যবহার যখন কোনও বস্তু সুযোগের বাইরে চলে যায় তখন বেশিরভাগ মেমরি এবং রিসোর্স লিকগুলি সরিয়ে দেয় যা সি প্রোগ্রামিংয়ের ব্যান। এসটিএল মূলত উচ্চতর অনুকূলিতকরণ করা অ্যালগরিদম এবং ডেটা স্ট্রাকচারের একটি বিশাল গ্রন্থাগার; আপনি যদি সেগুলি সি থেকে ব্যবহার করতে চান তবে আপনাকে সেগুলি নিজে লিখতে হবে বা অন্য কোথাও কিনে রাখতে হবে।
দুর্ভাগ্যক্রমে, যে কারণে আমি বুঝতে পারি না, লিনাক্সের রানটাইম সিস্টেমে যে কোনও সি ++ চালানোর জন্য একটি বিশেষ শেয়ার্ড অবজেক্ট লাইব্রেরি (উইন্ডোজে ডিএলএল সমতুল্য, ম্যাকের উপরে ডাইলিব) প্রয়োজন হয় এবং আপনি যখন কোনও সি প্রোগ্রাম চালাবেন তখন এটি পাওয়া যায় না। সুতরাং আমি আমার প্রিয় ম্যাক এবং উইন্ডোজ ট্রিকগুলির একটিও করতে পারছি না, যা সি-ভিত্তিক এপিআই সহ একটি সি ++ - ভিত্তিক ভাগ করা অবজেক্ট লিখতে হবে এবং এটি একটি সি প্রোগ্রাম থেকে কল করে।
সুতরাং এখানে আমার সিদ্ধান্ত গ্রহণ প্রক্রিয়া:
একটি দুর্দান্ত বিষয় হ'ল যেহেতু সি ++ সি সংকলন করতে পারে, যদি আপনার কোনও নির্দিষ্ট পরিস্থিতির জন্য উত্পন্ন কোডটির উপর যদি সত্যিই সূক্ষ্ম-নিয়ন্ত্রণযুক্ত নিয়ন্ত্রণের প্রয়োজন হয় তবে আপনি কেবল তার জন্য সি লিখতে পারেন, এবং বাকীটির জন্য সি ++ লিখতে পারেন এবং সবগুলি সি ++ সংকলক দিয়ে সংকলন করতে পারেন ।
যদি এটা উভয় হতে হবে
তারপরে আমি সি ব্যবহার করব সি ++।
হ্যাঁ, আসলে আমি সম্প্রতি করেছি!
আমি সি তে প্রোগ্রামিং পছন্দ করি আমি আমার বেশিরভাগ প্রোগ্রামিং পাইথনে করি, তবে এমন অনেক সময় আছে যখন আমার দ্রুত কোডের প্রয়োজন হয় এবং আমি ভাষাটির সরলতা থেকে আগত কমনীয়তা উপভোগ করি।
আমি এখন যে প্রকল্পটি নিয়ে কাজ করছি তা হ'ল একটি ডাটাবেস, যা আপনি কল্পনা করতে পারেন, পারফরম্যান্স সমালোচনা। এই মুহুর্তে আমি সি এবং কিছু অজগর ব্যবহার করছি তবে এটি পুরোপুরি সি না হলে অবশেষে এটি মূলত হবে it
হ্যাঁ. আমি আমার ক্যারিয়ারের বেশিরভাগ প্রোগ্রামিং সি ++ এ ব্যয় করেছি, তবে এখন আমি আমার কোডের বেশিরভাগ অংশ রুবিতে লিখি এবং যদি আমার কম পারফরম্যান্স বা নিম্ন স্তরের স্টাফ অ্যাক্সেসের প্রয়োজন হয় তবে আমি সি এক্সটেনশন লিখি। এটা ভবিষ্যতের মানুষ!
আমি সি ব্যবহার করব যদি আমি একটি অপারেটিং সিস্টেম লিখছি। যেহেতু পরবর্তী বিশ বছরে এটি ঘটবে না, যদি না আমি লোটো আঘাত করি এবং আমার নিজের দুর্দান্ত লিনাক্স ডিস্ট্রো না বানিয়ে অন্য কিছু করার না থাকে তবে আমি সম্ভবত সি #, জাভা, পাইথন, ইত্যাদি ইত্যাদির সাথে লেগে থাকব I খুব দীর্ঘ সময়ে সি ব্যবহার করা হয়নি তবে আমি এটি ব্যবহার করে সবসময় উপভোগ করেছি; যদিও আমি মনে করি, আজকাল আমার মাথা OO এর চারপাশে এতটা আবৃত আছে যদি আমাকে এটির কাছে ফিরে যেতে হয় তবে আমাকে আবার ঘূর্ণায়মান হতে খানিকটা সময় লাগবে।
সি ++ প্ল্যাটফর্ম এবং মাইক্রোকন্ট্রোলারের মতো এম্বেড থাকা ডিভাইসগুলিতে পোর্টেবল। (সি ++ সিতে সংকলিত হতে পারে, সুতরাং মাইক্রোকন্ট্রোলার।
সি অন্যান্য ভাষায় এমনকি বহনযোগ্য (বিদেশী ফাংশন হিসাবে)। অতএব, যদি আমি নিম্ন স্তরের গ্রন্থাগারগুলি প্রোগ্রাম করি তবে আমি সি ++ এর চেয়ে বেশি সামঞ্জস্য চাই।
হাস্কেল প্ল্যাটফর্মগুলি জুড়ে বহনযোগ্য (এআরএম শীঘ্রই আসছে) তবে মাইক্রোকন্ট্রোলারগুলির মতো এম্বেড থাকা ডিভাইসগুলি নয়। এর গতি সি এবং সি ++ এর সাথে তুলনীয়; তবে এটি কার্যকরী হওয়ায় এটি রানটাইম-স্ট্যাকের পরিবর্তে একটি আবর্জনা সংগ্রহকারী ব্যবহার করে, তাই এটি বিভিন্ন সময় সি-এর থেকে দ্রুত এবং ধীর হতে পারে (আবর্জনা সংগ্রহ) এবং বিভিন্ন পরিস্থিতিতে (উপ-রুটিন কলগুলির পরিবর্তে ধারাবাহিকতা)।
আমি সম্ভব সর্বাধিক বিমূর্ত ভাষাটি বেছে নিই, কারণ প্রোগ্রামের গতি আলাদা হয় না তবে উন্নয়নের সময় এবং বাগ-রেট। সি এবং সি ++ এর মধ্যে অনেক পার্থক্য রয়েছে, তবে হাস্কেলের দৃষ্টিকোণ থেকে নয়।
আমি দু'হাত ভরা জানলেও আমি অন্য ভাষা পছন্দ করি না। ... কয়েকটি ক্ষেত্রে বাদে, ভাল, বাশ ।
এম্বেড থাকা সিস্টেমে প্রায়শ কয়েক কিলোবাইট র্যাম এবং সম্ভবত কয়েক মেগাহার্জ প্রসেসরের ঘড়ির হারের সাথে কয়েক ডজন কিলোবাইট ফ্ল্যাশ থাকে। সি এমন একমাত্র বিকল্প যা এই জাতীয় খালি-ধাতব পরিবেশে কোনও ধারণা তৈরি করে।