লোকেরা এত বিপজ্জনক হলে কেন সি ব্যবহার করবে?


132

আমি সি শিখতে বিবেচনা করছি

তবে লোকেরা কেন সি (বা সি ++) ব্যবহার করে যদি এটি 'বিপজ্জনকভাবে' ব্যবহার করা যায়?

বিপজ্জনক দ্বারা, আমি পয়েন্টার এবং অন্যান্য অনুরূপ স্টাফ দিয়ে বোঝাতে চাইছি।

স্ট্যাক ওভারফ্লো প্রশ্নটির মতো কেন এই কার্যটি এতটা বিপজ্জনক যে এটি ব্যবহার করা উচিত নয়? । প্রোগ্রামাররা কেন কেবল জাভা বা পাইথন বা ভিজুয়াল বেসিকের মতো অন্য সংকলিত ভাষা ব্যবহার করে না?


152
শেফরা কেন ছুরি ব্যবহার করে, যদি সেগুলি 'বিপজ্জনকভাবে' ব্যবহার করা যায়?
oerkelens

78
মহান শক্তি দিয়ে মহান দায়িত্ব আসে.
পিটার বি

10
জো ব্লো, অনেক পন্টিফেট?
ম্যাথু জেমস ব্রিগেস

4
কারণ "ব্যাক ইন দ্য ডে" যখন সি চয়েসের ল্যাঙ্গুয়েজ হয়ে যায় তখন আমাদের কাছে প্রত্যাশা করা হত যে আমরা এটির মতো জিনিসগুলি পরিচালনা করতে পারি, কারণ আমাদের ছিল। ব্যাখ্যায়িত বা বাইট-কোডেড ভাষাগুলি খুব ধীর ছিল কারণ দিনের প্রসেসরগুলি এত ধীর ছিল। (আজ আমি ডেল থেকে ২+ গিগাহার্জ মাল্টি-কোর সিপিইউ এবং 4 জিবি মেমরির সাথে একটি নিম্ন-প্রান্তের ডেস্কটপ পিসি কিনতে পারি You 279 ডলারে আপনার কোনও আইডিইএ নেই যে এটি সম্পূর্ণরূপে অবিশ্বাস্য বলে মনে হয় যার জন্য একটি 4 মেগাহার্টজ পিসি) 640 কিলোবাইট মেমরির সাথে আনন্দ ছিল ...)। এটির মুখোমুখি - মুরের আইন জিতেছে। গেম। ওভার!
বব জার্ভিস

6
@ بابি জার্ভিস: খেলা শেষ হয়নি। আপনি যদি মনে করেন যে আপনার 2 + গিগাহার্জ, 4 জিবি পিসি - বা এই বিষয়টির জন্য, আপনার সাম্প্রতিকতম সিইউডিএ জিপিইউ সহ বেশ কয়েকটি শতাধিক 4 গিগাহার্টজ পিসি বা যে কোনও কিছু - খুব দ্রুত, আপনি সহজেই যথেষ্ট সমস্যা নিয়ে কাজ করছেন না :-)
জামেস্কেফ

উত্তর:


246
  1. সি আপনি যে অন্যান্য ভাষা ভাবছেন তার অনেকগুলিই পূর্বাভাস দেয়। প্রোগ্রামিংকে "নিরাপদ" কীভাবে তৈরি করা যায় সে সম্পর্কে আমরা এখন অনেক কিছুই सी এর মতো ভাষার সাথে অভিজ্ঞতা থেকে আসে comes

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

    • সি বাস্তবায়নের জন্য অনেক সহজ ভাষা কারণ এটি তুলনামূলকভাবে ছোট, এবং এমনকি দুর্বলতম পরিবেশে পর্যাপ্ত পরিমাণে সঞ্চালনের সম্ভাবনা রয়েছে, তাই অনেকগুলি এম্বেডড সিস্টেম যা তাদের নিজস্ব সংকলক এবং অন্যান্য সরঞ্জামগুলি বিকাশ করতে হবে সম্ভবত কার্যকরী সংকলক সরবরাহ করতে সক্ষম হতে পারে সি এর জন্য

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

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

    আজ, কয়েকটি সিস্টেম প্রোগ্রামিং ভাষা রয়েছে (জং, নিম, ডি, ...) যা সি বা সি ++ এর চেয়ে নিরাপদ than তাদের দৃষ্টিশক্তির সুবিধা রয়েছে এবং তারা বুঝতে পারে যে বেশিরভাগ সময় এ জাতীয় সূক্ষ্ম নিয়ন্ত্রণের প্রয়োজন হয় না, তাই সত্যিকারের প্রয়োজনে কিছুটা অনিরাপদ হুক / মোডের সাথে একটি সাধারণ নিরাপদ ইন্টারফেস সরবরাহ করুন।

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


এছাড়াও, আপনি কখনই অস্পষ্ট জাভা প্রতিযোগিতাকে মনমুগ্ধকারী সি প্রতিযোগিতার মতো বিনোদন হিসাবে দেখবেন না ।


7
"সর্বনিম্ন সাধারণ ডিনোমিনেটর" অস্বীকারকারী শোনায়। আমি বলব যে, অনেক বেশি ভারী ভাষার মতো নয়, সি আপনার প্রয়োজন হয় না এমন এক টন অতিরিক্ত লাগেজ প্রয়োগ করে না এবং আপনাকে প্রয়োজনীয় জিনিসগুলি বাস্তবায়নের জন্য একটি বাজ-দ্রুত বেস দেয়। আপনি কি বোঝাতে চেয়েছিলেন?
আন্ডারস্কোর_

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

6
1) কোন বৈধ পয়েন্ট নয়! সি আলগোল from 68 থেকে বৈশিষ্ট্য নিয়েছিল, যা এই অর্থে একটি "নিরাপদ" ভাষা; সুতরাং লেখকরা এই জাতীয় ভাষা সম্পর্কে জানতেন। অন্যান্য পয়েন্ট দুর্দান্ত।
পুনরায় পোস্টার

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

3
@ লুয়ান: মিডোরি দেখতে খুব দুর্দান্ত লাগছে; আমি সর্বদা জো এর ব্লগ নিবন্ধগুলির অপেক্ষায় থাকি।
ম্যাথিউ এম।

41

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

দ্বিতীয়ত, সি জাভা এবং পাইথনের মতো ভাষাগুলি এমন পারফরম্যান্স দেয়। সাধারণত, জাভা এবং পাইথনে উচ্চ পারফরম্যান্সের কম্পিউটিং ভারী উত্তোলন করতে সি এর মতো উচ্চ-পারফরম্যান্স ভাষায় রচিত লাইব্রেরি ব্যবহার করবে।

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


একটি "সিস্টেম প্রোগ্রামিং ল্যাঙ্গুয়েজ" এমন একটি ভাষা যা শিল্প-শক্তি ব্যবস্থা তৈরির জন্য উপযুক্ত; যেহেতু তারা দাঁড়ায়, জাভা এবং পাইথন সিস্টেম প্রোগ্রামিং ভাষা নয়। "হুবহু কী কী সিস্টেম প্রোগ্রামিং ল্যাঙ্গুয়েজ তৈরি করে" এই প্রশ্নের ক্ষেত্রের বাইরে, তবে একটি সিস্টেম প্রোগ্রামিং ল্যাঙ্গুয়েজের অন্তর্নিহিত প্ল্যাটফর্মের সাথে কাজ করার জন্য সহায়তা সরবরাহ করা প্রয়োজন।

অন্যদিকে (মন্তব্য প্রতিক্রিয়ায়), একটি সিস্টেম প্রোগ্রামিং ভাষা নেই না আত্ম-হোস্টিং থাকতে হবে। এই সমস্যা নিয়ে এসেছেন কারণ মূল প্রশ্ন জিজ্ঞাসা "মানুষ কেন সি ব্যবহার করব", প্রথম মন্তব্য জিজ্ঞাসা করলেন, "কেন তুমি C- এর মতো একটি ভাষা হবে" আপনি যখন PyPy আছে, এবং আমি লক্ষনীয় যে PyPy নেই আসলে সি সুতরাং ব্যবহার করেন, এটা মূলত প্রশ্নের সাথে প্রাসঙ্গিক ছিল, তবে দুর্ভাগ্যক্রমে (এবং বিভ্রান্তিকরভাবে) "স্ব-হোস্টিং" আসলে এই উত্তরের সাথে প্রাসঙ্গিক নয়। আমি দুঃখিত এটি আমি এনেছে।

সুতরাং, সংক্ষেপে: জাভা এবং পাইথন সিস্টেম প্রোগ্রামিংগুলিতে অসমর্থিত কারণ তাদের প্রাথমিক বাস্তবায়নগুলি ব্যাখ্যা করা হয় না, বা স্থানীয়ভাবে সংকলিত বাস্তবায়নগুলি স্ব-হোস্ট করা হয় না, কারণ তারা অন্তর্নিহিত প্ল্যাটফর্মের সাথে কাজ করার জন্য প্রয়োজনীয় সমর্থন সরবরাহ করে না।


19
"আপনি যদি জাভা ভার্চুয়াল মেশিন বা পাইথন ইন্টারপ্রেটার লিখেন তবে সেগুলিতে লেখার জন্য আপনার সিস্টেম প্রোগ্রামিং ভাষা প্রয়োজন" " উহ? আপনি কীভাবে পিপিআই ব্যাখ্যা করবেন? সংকলক বা দোভাষী বা ভার্চুয়াল মেশিন লিখতে আপনার কেন সি এর মতো একটি ভাষার প্রয়োজন হবে?
ভিনসেন্ট সাভার্ড

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

16
এমনকি যদি এটি পুরোভাবে কচ্ছপ হয় তবে পাইপির মতো কিছু অন্য কোনও ভাষায় লিখিত পাইথন দোভাষী ছাড়া অস্তিত্ব রাখতে পারে না।
blrfl

18
@ বির্ফ্ল তবে এটি আসলে বেশি কিছু বলছে না। সি অ্যাসেমব্লির সংকলক ব্যতীত সি লেখা যায় না এবং আপনি এটি প্রয়োগ করে এমন হার্ডওয়্যার ব্যতীত এসেম্বলিকে লিখতে পারবেন না।
বাগানের মাথা

11
যদি পাইপই কোনও "সিস্টেম প্রোগ্রামিং ল্যাঙ্গুয়েজ" না হয় কারণ কোনও সি কম্পাইলার কোথাও জড়িত থাকে, তবে সি কোনও সিস্টেম প্রোগ্রামিং ল্যাঙ্গুয়েজ হয় না কারণ এসেমব্লার কোথাও ব্যবহৃত হয়। আসলে, আজকাল সিটিকে অন্য কোনও ভাষায় অনুবাদ করা কি জনপ্রিয় নয়? যেমন এলএলভিএম
বাদ পড়েছে এবং

30

আরও একটি উত্তর যুক্ত করার জন্য দুঃখিত, তবে আমি মনে করি না যে বিদ্যমান উত্তরগুলির মধ্যে সরাসরি আপনার প্রথম বাক্যটি সম্বোধন করে:

'আমি সি শিখতে বিবেচনা করছি'

কেন? আপনি কি আজ সাধারণত সি ধরণের জিনিস ব্যবহার করতে চান (যেমন ডিভাইস ড্রাইভার, ভিএম, গেম ইঞ্জিন, মিডিয়া লাইব্রেরি, এমবেডেড সিস্টেম, ওএস কার্নেল)?

যদি হ্যাঁ, তবে হ্যাঁ, আপনি কাদের আগ্রহী তার উপর নির্ভর করে অবশ্যই সি বা সি ++ শিখুন you আপনি কি এটি শিখতে চান যাতে আপনার উচ্চ স্তরের ভাষাটি কী করছে তা সম্পর্কে আপনার আরও গভীর ধারণা হবে?

তারপরে আপনি সুরক্ষা সংক্রান্ত উদ্বেগগুলি উল্লেখ করতে যান। উচ্চতর স্তরের ভাষায় একটি কোড উদাহরণ আপনাকে উত্পাদন প্রস্তুত না করে বোঝাতে পারে একইভাবে, পরবর্তীকালে আপনাকে নিরাপদ সি সম্পর্কে গভীর বোঝার প্রয়োজন হবে না ।

গিস্টটি পেতে কিছু সি কোড লিখুন। তারপরে একেবারে তাক লাগিয়ে দিন। আপনি উত্পাদন সি কোড লিখতে না চাইলে সুরক্ষা সম্পর্কে খুব বেশি চিন্তা করবেন না ।


2
আসল প্রশ্ন বলে মনে হচ্ছে উত্তরের কাজ! সেগুলির জন্য সি / সি ++ এবং "নিরাপদ" ভাষার প্রশংসা করার দুর্দান্ত উপায় হ'ল একটি সাধারণ ডাটাবেস ইঞ্জিনের মতো কিছু লেখার চেষ্টা করা। আপনি চেষ্টা করেছেন এমন প্রতিটি পদ্ধতির জন্য আপনি একটি ভাল অনুভূতি পাবেন এবং এটি আপনাকে কোথায় নিয়ে যায় see আপনি উভয়ই প্রাকৃতিক অনুভূতি দেখতে পাবেন এবং যেখানে প্রাকৃতিক পদ্ধতির ব্যর্থতা রয়েছে তা দেখতে পাবেন (উদাহরণস্বরূপ সি তে কাঁচা তথ্য "সিরিয়ালাইজ" করা খুব সহজ - কেবল ডেটা লিখুন!) তবে ফলাফলটি বহনযোগ্য নয়, তাই এটি সীমিত ব্যবহার হতে পারে)। সুরক্ষা বোঝা জটিল, কারণ বেশিরভাগ সমস্যার মুখোমুখি হতে পারে to
লুয়ান

1
@ লুয়ান ঠিক, পয়েন্টার ব্যবহার করে স্ট্রিংয়ের অনুলিপি করতে শেখা আপনাকে ধারণা দেয়, নিরাপদে কীভাবে এটি করা যায় তা শেখা অন্য স্তর এবং কারও লক্ষ্যগুলির উপর নির্ভর করে সম্ভবত অপ্রয়োজনীয় one
জারেড স্মিথ

2
এটা আসলে প্রশ্ন ছিল না। তবে এটি একটি বিযুক্তি তৈরির জন্য সহায়ক ছিল। আমি এটা করার সিদ্ধান্ত নিয়েছে। আমি প্রতিটি বিষয়টির অভ্যন্তরীণ কাজটি এগিয়ে চলছে সে সম্পর্কে আরও জানতে আগ্রহী। এবং আমি ঠিক প্রোগ্রামিং পছন্দ করি। এইভাবে আমি কম্পিউটারের অভ্যন্তরীণ কাজগুলি আরও ভাল করে বুঝতে পারব বলে আশা করি। এটা শুধু মজা করার জন্য।
ত্রিস্তান

10
আমি শেষ বাক্যটির সাথে একমত নই। খারাপ অভ্যাস বিকাশের আগে কীভাবে এটি করা যায় তা শিখুন।
glglgl

2
@glglgl IDK, যদি আমি ওয়েবে একটি জাভাস্ক্রিপ্ট স্নিপেট পড়ি (বা লিখি) তবে আমি বুঝতে পারি যে এটি প্রস্তুত নয়: এটির ব্যতিক্রম হ্যান্ডেলিং নেই, এটি ও (এন ^ 2), ইত্যাদি হতে পারে etc. এর পয়েন্টটি পারাপারের জন্য প্রয়োজনীয়। এগুলি সবই প্রোডাকশন কোডের জন্য প্রয়োজনীয়। কেন এটা আলাদা? বৌদ্ধিকভাবে বুঝতে পেরে আমি নিজের সংশোধনের জন্য নিখুঁত সি লিখতে পারি যে আমি যদি এটি সেখানে রেখে দিতে চাই তবে আমাকে আরও অনেক কাজ করা দরকার।
জ্যারেড স্মিথ

14

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

আপনার শেষ পয়েন্টটি সম্বোধন করার জন্য, জাভা / পাইথনের উপর কেন সি / সি ++ রয়েছে, এটি প্রায়শই গতিতে নেমে আসে। আমি গেমস তৈরি করি এবং জাভা / সি # সম্প্রতি গতিতে পৌঁছেছে যা গেমগুলি চালানোর পক্ষে যথেষ্ট ভাল। সর্বোপরি, আপনি যদি নিজের গেমটি প্রতি সেকেন্ডে 60 ফ্রেমে রান করতে চান এবং আপনি আপনার গেমটি অনেক কিছু করতে চান (রেন্ডারিং বিশেষত ব্যয়বহুল) তবে আপনার যত দ্রুত সম্ভব কোড চালানো দরকার। পাইথন / জাভা / সি # / আরও অনেকে "দোভাষী" তে চালান, সফটওয়্যারের একটি অতিরিক্ত স্তর যা সি / সি ++ না করে এমন সমস্ত ক্লান্তিকর জিনিসগুলি পরিচালনা করে, যেমন মেমরি পরিচালনা এবং আবর্জনা সংগ্রহের ব্যবস্থা করে। অতিরিক্ত অতিরিক্ত ওহেড জিনিসগুলি ধীর করে দেয়, তাই আপনি দেখেন যে প্রায় প্রতিটি বড় খেলা সি বা সি ++ এ (গত 10 বছরে, যাইহোক) সম্পন্ন হয়েছিল। ব্যতিক্রম রয়েছে: theক্য গেম ইঞ্জিন সি # * ব্যবহার করে, এবং মাইনক্রাফট জাভা ব্যবহার করে তবে এগুলি ব্যতিক্রম, নিয়ম নয়। সাধারণভাবে,

* এমনকি ইউনিটি সমস্ত সি # নয়, এর বিশাল অংশগুলি সি ++ এবং আপনি কেবল আপনার গেম কোডের জন্য সি # ব্যবহার করেন।

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

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

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

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

এবং কেবল "আপনার খেলাটি 200fps বা 120fps এ চলে যদি কে খেয়াল করে" পড়তে আমাকে তাড়িত করেছে, আপনি যদি গেমটি 60fps এর চেয়ে দ্রুত চলতে থাকেন তবে আপনি সম্ভবত সিপিইউ সময় নষ্ট করছেন, যেহেতু গড় মনিটর এমনকি তা রিফ্রেশ করে না দ্রুত। কিছু উচ্চতর শেষ এবং নতুন এটি করে তবে এটি মানক নয় (এখনও ...)।

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


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

2
"এমনকি ইউনিটি সমস্ত সি # নয়, এর বিশাল অংশগুলি সি ++" এবং? ইউনিটির গেমগুলিতে প্রায়শই সি # বিস্তৃতভাবে ব্যবহার করা হয় এবং বেশ কিছুদিন ধরেই ছিল। সি # 'সম্প্রতি অতি দ্রুত গতিতে পৌঁছেছে' এমন পরামর্শ দেওয়ার জন্য হয় আরও প্রসঙ্গ প্রয়োজন, বা এই দশক প্রযুক্তিতে অন্ধ হওয়ার ঝুঁকি রয়েছে runs
এনপিএসএফ 3000

2
প্রায় প্রতিটি বড় গেমটি ব্যবহৃত ইঞ্জিনের ভাষায় রচিত ছিল: যে পরিমাণটির নকল তৈরির প্রয়োজন হত তা এত বেশি যে অন্য কোনও প্রযুক্তিগত বিবেচনার বিষয়টিও বিবেচনায় নেওয়ার মতো ছিল না। রেন্ডারিং প্রকৃতপক্ষে ব্যয়বহুল, তবে আজকাল এগুলি সমস্ত শেডারে লেখা এবং লজিক লুপের ভাষা অপ্রাসঙ্গিক।
পিটার টেলর

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

1
@gbjbaanb এটি কেবল সিপিইউগুলি দ্রুততর হচ্ছে না - একটি বড় কথা হ'ল সি ++ এবং সি এর সংকলক এবং রানটাইম নিখুঁত করার কয়েক দশক ছিল, যখন জাভা মূলত শূন্য থেকে শুরু হয়েছিল (মূলত মাল্টি-প্ল্যাটফর্ম প্ল্যাটফর্ম হিসাবে ডিজাইন করা হচ্ছে)। ভিএম যেমন উন্নত হয়েছে (যেমন দোভাষী থেকে জেআইটি সংকলকটিতে স্যুইচ, উন্নত জিসি ...), তেমন জাভা অ্যাপ্লিকেশনগুলির পারফরম্যান্সও ঘটল। সি / সি ++ এর অনেক প্রান্ত এখনও "আসুন আশা করি কিছুই ভাঙবে না" পদ্ধতির মধ্যে রয়েছে - "অযাচিত" বলে বিবেচিত এমন অনেকগুলি চেক এড়ানো। তবে এটি এখনও একটি বিশাল মেমরি হগ - আসলে, সিপিইউ ব্যবহারের উন্নতি প্রায়শই খারাপ মেমরির কার্যকারিতা বোঝায় :)
লুয়ান

13

মজার বিষয় যে আপনি দাবি করেন যে সি অসমাপ্ত কারণ "এর পয়েন্টার রয়েছে"। বিপরীতটি সত্য: জাভা এবং সি # এর কার্যত কেবলমাত্র পয়েন্টার রয়েছে (অ-নেটিভ ধরণের ক্ষেত্রে)। জাভাতে সর্বাধিক সাধারণ ত্রুটি সম্ভবত নাল পয়েন্টার ব্যতিক্রম (সিএফ। Https://www.infoq.com/preferencesations/ নাল- রেফারেন্সস- দ্য বিলিয়ন- ডলার- ভুল - টনি- হোয়ার )। দ্বিতীয় সবচেয়ে সাধারণ ত্রুটি সম্ভবত অব্যবহৃত অবজেক্টগুলির গোপন রেফারেন্সগুলি রাখা (যেমন বন্ধ ডায়ালগগুলি নিষ্পত্তি করা হয় না) তাই এটি প্রকাশ করা যায় না, এটি একটি ক্রমবর্ধমান মেমরি ফুট মুদ্রণের সাথে দীর্ঘমেয়াদী প্রোগ্রামগুলির দিকে পরিচালিত করে।

দুটি প্রাথমিক পদ্ধতি রয়েছে যা সি # এবং জাভা নিরাপদ এবং দুটি ভিন্ন উপায়ে নিরাপদ করে:

  • আবর্জনা সংগ্রহের ফলে প্রোগ্রামটি ফেলে দেওয়া বস্তুগুলিতে অ্যাক্সেস করার চেষ্টা কম হওয়ার সম্ভাবনা কম। প্রোগ্রামটি অপ্রত্যাশিতভাবে শেষ হওয়ার সম্ভাবনা কম করে makes সি, জাভা এবং সি # এর বিপরীতে ডিফল্টরূপে অ-নেটিভ ডেটা গতিশীলভাবে বরাদ্দ করুন। এটি প্রোগ্রামটির যুক্তিটিকে প্রকৃতপক্ষে আরও জটিল করে তোলে, তবে অন্তর্নির্মিত আবর্জনা সংগ্রহ - ব্যয়বহুল - হার্ড অংশটি গ্রহণ করে।

সাম্প্রতিক সি ++ 'স্মার্ট পয়েন্টারগুলি প্রোগ্রামারদের জন্য সেই কাজটি আরও সহজ করে।

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

এটি লক্ষণীয় যে বিস্তৃত রান সময়ও একটি সুরক্ষা ঝুঁকি। আমার কাছে এটি প্রতীয়মান হয় যে নতুন আবিষ্কার হওয়া সুরক্ষা সমস্যার কারণে ওরাকল প্রতি সপ্তাহে দু'বার JVM আপডেট করে চলেছে। এটি অবশ্যই একক প্রোগ্রামের চেয়ে জেভিএম যাচাই করা অনেক বেশি শক্ত

বিস্তৃত রান সময়ের সুরক্ষা অতএব অস্পষ্ট এবং একটি ডিগ্রি ধোঁকা দেওয়ার জন্য: আপনার গড় সি প্রোগ্রাম, পর্যালোচনা এবং পুনরাবৃত্তির সাথে যুক্তিসঙ্গতভাবে সুরক্ষিত করা যায়। আপনার গড় জাভা প্রোগ্রামটি কেবল জেভিএমের মতোই সুরক্ষিত; যে, আসলে না। কখনও।

gets()আপনি যে লিঙ্কটির সাথে লিঙ্ক করেছেন তার নিবন্ধটি historicalতিহাসিক গ্রন্থাগারের সিদ্ধান্তগুলি প্রতিফলিত করে যা মূল ভাষা নয়, আজ ভিন্নভাবে নেওয়া হবে।


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

1
এছাড়াও, স্ট্যাকওভারফ্লো.com / প্রশ্নগুলি / 5৪৮৮৮/২ - এটি আরও সঠিক হবে যে জাভাটির "কার্যত কেবলমাত্র উল্লেখ" রয়েছে।
স্যাম ডুফেল

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

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

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

10

যেহেতু "সুরক্ষা" গতির জন্য ব্যয় হয়, তাই "নিরাপদ" ভাষাগুলি ধীর গতিতে সম্পাদন করে।

আপনি কেন জিজ্ঞাসা করেন যে "বিপজ্জনক" ভাষা যেমন সি বা সি ++ ব্যবহার করেন, কেউ আপনাকে কোনও ভিডিও ড্রাইভার বা পাইথন বা জাভা ইত্যাদির মতো লিখতে পারেন এবং দেখুন "সুরক্ষা" সম্পর্কে আপনি কী অনুভব করছেন :)

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


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

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

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

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

3
@ ভু কুকুর সি করছে? ... এতে অবাক হওয়ার কিছু নেই যে আমি সেখানে খুব খারাপ কোড দেখেছি ... জে / কে পয়েন্টটি মরিচা সম্পর্কে নিয়েছে (আমি কেবল এটি ডাউনলোড করে ইনস্টল করেছি, যাতে আপনার যুক্ত করতে অন্য রূপান্তর থাকতে পারে) মরিচা এটি সঠিকভাবে করাতে ... আমি "ডি" এর জন্য একই বর্ধন করতে পারি :)
উইন্টারমুট 3

9

উপরের সমস্তটি ছাড়াও, একটি সাধারণ প্রচলিত ব্যবহারের কেসও রয়েছে, যা সি অন্যান্য ভাষার জন্য একটি সাধারণ গ্রন্থাগার হিসাবে ব্যবহার করে।

মূলত, প্রায় সমস্ত ভাষার সি এর একটি এপিআই ইন্টারফেস থাকে

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

  • আইওএস: ওজেক্টিভসি সি লাইব্রেরিগুলি স্থানীয়ভাবে ব্যবহার করতে পারে
  • অ্যান্ড্রয়েড: জাভা + জেএনআই
  • লিনাক্স / উইন্ডোজ / ম্যাকোস: জিটিকে /। নেট দিয়ে আপনি নেটিভ লাইব্রেরি ব্যবহার করতে পারেন। আপনি যদি পাইথন, পার্ল, রুবি ব্যবহার করেন তবে তাদের প্রত্যেকেরই নেটিভ API গুলি ইন্টারফেস রয়েছে। (জাভা আবার জেএনআই সহ)।

আমার দুই সেন্ট,


আমি পিএইচপি, যেটি ব্যবহার করতে পছন্দ করি তার একটি কারণ হ'ল এর প্রায় সমস্ত লাইব্রেরি সত্যই সিতে লেখা রয়েছে - ধন্যবাদ, তাই, বা পিএইচপি অসহনীয়ভাবে ধীর হবে :) পিএইচপি ভয় ছাড়াই opালু কোড লিখতে দুর্দান্ত PH 'বিপজ্জনক' কিছু করা (এবং সে কারণেই আমি অন্য যে কোনও কিছুর চেয়ে অনেক বেশি পিএইচপি কোড লেখার ঝোঁক রাখি I আমি স্লপি কোডটি পছন্দ করি !: ডি), তবে এটি জেনে রাখা ভাল যে এই ফাংশন কলগুলির অনেকের নীচে ভাল অল 'বিশ্বাসযোগ্য রয়েছে are সি লাইব্রেরিগুলি এটিকে কিছুটা পারফরম্যান্স বাড়িয়ে তুলবে ;-) বিপরীতে, সিতে স্লোপি কোড লেখা একটি বড় সংখ্যা নয় ...
গুইনেথ ল্লেওলিন

7

সি এর সাথে একটি মৌলিক অসুবিধা হ'ল নামটি একই রকম সিনট্যাক্স সহ বেশ কয়েকটি উপভাষার বর্ণনা দেওয়ার জন্য ব্যবহৃত হয় তবে একেবারে ভিন্ন শব্দার্থতত্ত্ব। কিছু উপভাষা অন্যের তুলনায় অনেক বেশি নিরাপদ।

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

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

এর মতো কিছু বিবেচনা করুন:

int hey(int x)
{
   printf("%d", x);
   return x*10000;
}
void wow(int x)
{
  if (x < 1000000)
    printf("QUACK!");
  hey(x);    
}

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

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


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

1
আমি আপনার উদাহরণটি "তাত্ক্ষণিক!" উত্পাদনের প্রমাণ দেখতে চাই নিঃশর্তভাবে। এক্স অবশ্যই করতে তুলনা বিন্দু, এবং পরে মূল্যায়ন যা ওভারফ্লো ফলে যে বাধা দেয় না হবে এ বেশি 1000000 হও। আরও তাই, যদি আপনি ইনলাইনিং সক্ষম করে থাকেন যা উপচে পড়া গুণটিকে অপসারণের অনুমতি দেয় তবে অন্তর্নিহিত পরিসীমা বিধিনিষেধ সম্পর্কে আপনার যুক্তি ধরে রাখে না।
গ্রাহাম

2
@ রবার্টব্রিস্টো-জনসন: প্রকৃতপক্ষে, স্ট্যান্ডার্ডটি বেশ স্পষ্টভাবে বলেছে যে যেমন দেওয়া হয়েছে int arr[5][[5], অ্যাক্সেস করার একটি প্রচেষ্টা arr[0][5]অনির্ধারিত আচরণ অর্জন করবে। এই জাতীয় নিয়ম কোনও সংকলকের পক্ষে এটি সম্ভব করে তোলে যা মূল্য নির্ধারণের পরিবর্তে 4 কে সমান arr[1][0]=3; arr[0][i]=6; arr[1][0]++;করার মতো কিছু সরবরাহ করা arr[1][0]হয় i
সুপারক্যাট

2
@ রবার্টব্রিস্টো-জনসন: যদিও সংকলকটি ফাঁকা ছাড়াই ধারাবাহিকভাবে কোনও কাঠামোর মধ্যে অ্যারেগুলি বরাদ্দ করে, এটির কোনও গ্যারান্টি দেয় না যে অ্যারেগুলির মধ্যে একটিকে অন্যকে প্রভাবিত করার নিশ্চয়তা দেওয়া হয়। গিগিটি কীভাবে এই কোডটি ব্যবহার করবে তার উদাহরণের জন্য Godbolt.org/g/Avt3KW দেখুন ।
সুপারক্যাট

1
@ রবার্টব্রিস্টো-জনসন: সমাবেশটি কী করছে তা ব্যাখ্যা করার জন্য আমি মন্তব্য করেছিলাম। সংকলকটি কোডটি 1 টি s-> arr2 [0] এবং তারপরে বৃদ্ধি s-> arr2 [0] এ সঞ্চয় করে দেখায়, সুতরাং জিসিসি এই দুটি অপারেশনকে কোড যুক্ত করে কেবল মূল্য মান 2 সংরক্ষণ করে, হস্তক্ষেপমূলক লেখার সম্ভাবনা বিবেচনা না করেই। s-> arr1 [i] s-> arr1 [0] এর মানকে প্রভাবিত করতে পারে (যেহেতু, স্ট্যান্ডার্ড অনুসারে, এটি পারে না)।
সুপারক্যাট

5

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

কিছু শিক্ষার্থী যখন বলে, আমি বিরক্ত হতে পারি, "তবে আপনি যখন ওয়াই করছেন তখন পৃথিবীতে আপনি কেন এই ভয়ঙ্কর এক্স করেন?"। ঠিক আছে, এক্স হ'ল আমি যে কাজ পেয়েছি এবং এটি বিলগুলি খুব সুন্দরভাবে প্রদান করে। আমি উপলক্ষে ওয়াই করেছি, এবং এটি মজাদার ছিল, তবে এক্স আমাদের বেশিরভাগ ক্ষেত্রেই করেন।


5

"বিপজ্জনক" কী?

সি যে "বিপজ্জনক" তা দাবী ভাষা শিখার যুদ্ধগুলির একটি ঘন ঘন কথাবার্তা (জাভার তুলনায় বেশিরভাগ ক্ষেত্রে)। তবে এই দাবির পক্ষে প্রমাণ অস্পষ্ট।

সি বৈশিষ্ট্যগুলির একটি নির্দিষ্ট সেট সহ একটি ভাষা। এই বৈশিষ্ট্যগুলির মধ্যে কয়েকটি নির্দিষ্ট ধরণের ত্রুটিগুলির মঞ্জুরি দিতে পারে যা অন্য ধরণের ভাষার দ্বারা অনুমোদিত নয় (সি এর স্মৃতি পরিচালনার ঝুঁকি সাধারণত হাইলাইট করা হয়)। তবে এটি সামগ্রিকভাবে অন্যান্য ভাষার চেয়ে সি আরও বিপজ্জনক যে যুক্তি হিসাবে একই নয় । আমি এই বিষয়টিতে প্রত্যয়ী প্রমাণ সরবরাহকারী সম্পর্কে সচেতন নই।

এছাড়াও, "বিপজ্জনক" প্রসঙ্গে নির্ভর করে: আপনি কী করার চেষ্টা করছেন এবং কী ধরণের ঝুঁকি নিয়ে আপনি উদ্বিগ্ন?

অনেক প্রসঙ্গে আমি সি-কে একটি উচ্চ-স্তরের ভাষার তুলনায় আরও "বিপজ্জনক" বলে বিবেচনা করব, কারণ এটির জন্য আপনার বাগের ঝুঁকি বাড়ানো, মৌলিক কার্যকারিতা আরও ম্যানুয়াল প্রয়োগ করা প্রয়োজন। উদাহরণস্বরূপ, কিছু বেসিক পাঠ্য প্রক্রিয়াকরণ করা বা সি তে ওয়েবসাইট বিকাশ করা সাধারণত বোবা হয়ে যায়, কারণ অন্যান্য ভাষার বৈশিষ্ট্যগুলিতে এটি এটিকে অনেক সহজ করে তোলে।

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

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

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


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

5

বিদ্যমান উত্তরগুলিতে যুক্ত করার জন্য, এটি ভাল এবং ভাল বলেছে যে আপনি তাদের প্রকল্পের জন্য পাইথন বা পিএইচপি বেছে নিতে চলেছেন, তাদের আপেক্ষিক সুরক্ষার কারণে। তবে কেউ those ভাষাগুলি বাস্তবায়ন করতে পারে এবং যখন তারা করে, সম্ভবত তারা এটি সিতে করতে চলেছে (বা, ভাল, এটির মতো কিছু))

সুতরাং যে কারণে লোকেরা সি ব্যবহার করে - আপনার ব্যবহার করতে চান এমন কম বিপজ্জনক সরঞ্জামগুলি তৈরি করতে।


2

আমাকে আপনার প্রশ্নটির পুনঃব্যবহারের অনুমতি দিন:

আমি [সরঞ্জাম] শেখার বিষয়ে বিবেচনা করছি।

তবে লোকেরা কেন [সরঞ্জাম] (বা [সম্পর্কিত সরঞ্জাম]) ব্যবহার করে যদি [তারা] 'বিপজ্জনকভাবে' ব্যবহার করা যায়?

প্রোগ্রামিং ভাষা সহ যে কোনও আকর্ষণীয় সরঞ্জাম বিপজ্জনকভাবে ব্যবহার করা যেতে পারে। আপনি শিখতে আরো যাতে আপনি পারেন না আরো (এবং যাতে যখন আপনি টুল ব্যবহার কম বিপদ তৈরি করা হয়)। বিশেষত, আপনি সরঞ্জামটি শিখেন যাতে আপনি সেই জিনিসটি সেই উপকরণটির পক্ষে করতে পারেন (এবং সম্ভবত যে সরঞ্জামটি আপনি জানেন সেই সরঞ্জামগুলির মধ্যে সেরা সরঞ্জাম হ'ল) ​​recognize

উদাহরণস্বরূপ, আপনার যদি কাঠের একটি ব্লকে 6 মিমি ব্যাস, 5 সেন্টিমিটার গভীর, নলাকার গর্ত লাগাতে হয় তবে একটি ড্রিল একটি এলএলআর পার্সারের চেয়ে অনেক ভাল সরঞ্জাম। আপনি যদি জানেন যে এই দুটি সরঞ্জাম কী, আপনি জানেন যে কোনটি সঠিক সরঞ্জাম। আপনি যদি ইতিমধ্যে একটি ড্রিল, ভোইলা !, গর্ত কীভাবে ব্যবহার করবেন তা জানেন।

সি কেবল অন্য একটি সরঞ্জাম। এটি কিছু কাজের জন্য অন্যের চেয়ে ভাল। অন্যান্য উত্তরগুলি এখানে এটিকে সম্বোধন করে। আপনি যদি কিছু সি শিখেন তবে আপনি কখন সঠিক সরঞ্জাম এবং কখন তা নয় তা বুঝতে পারবেন।


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

1

আমি সি শিখতে বিবেচনা করছি

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

অন্য একটি উপায় রাখুন, সি যদি কাঠের সরঞ্জামগুলির সেট হয় তবে এটি সম্ভবত:

  • হাতুড়ি
  • নখ
  • হাত দেখেছি
  • হ্যান্ড ড্রিল
  • ব্লক স্যান্ডার
  • ছেনি (সম্ভবত)

আপনি এই সরঞ্জামগুলির সাথে কিছু নির্মাণ করতে পারেন - কিন্তু কিছু চমৎকার সম্ভাব্য সময় এবং দক্ষতা অনেক প্রয়োজন।

সি ++ হ'ল আপনার স্থানীয় হার্ডওয়্যার স্টোরের পাওয়ার সরঞ্জামগুলির সংগ্রহ।

আপনি যদি শুরু করার জন্য বেসিক ভাষার বৈশিষ্ট্যগুলি সাথে আটকে থাকেন তবে সি ++ এর তুলনামূলকভাবে অতিরিক্ত অতিরিক্ত শিক্ষার বক্ররেখা রয়েছে।

তবে লোকেরা কেন সি (বা সি ++) ব্যবহার করে যদি এটি 'বিপজ্জনকভাবে' ব্যবহার করা যায়?

কারণ কিছু লোক IKEA থেকে আসবাব চায় না। =)

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

আরও সুনির্দিষ্টভাবে, সি এর নীচে এমন কয়েকটি বৈশিষ্ট্য রয়েছে যা এটি অনেক প্রোগ্রামারদের জন্য কাঙ্ক্ষিত করে তোলে:

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

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

প্রোগ্রামাররা কেন কেবল জাভা বা পাইথন বা ভিজুয়াল বেসিকের মতো অন্য সংকলিত ভাষা ব্যবহার করে না?

দক্ষতা (এবং মাঝেমধ্যে মেমরির অপেক্ষাকৃত সরাসরি অ্যাক্সেস ছাড়া মেমরি পরিচালনা স্কিমগুলি প্রয়োগ করা যায় না)।

পয়েন্টারগুলির সাথে সরাসরি স্মৃতিতে অ্যাক্সেস করা অনেকগুলি ঝরঝরে (সাধারণত দ্রুত) কৌশলগুলি প্রবর্তন করে যখন আপনি নিজের মেমরি কিউবিহোলগুলিতে আপনার গ্রুবি পাঞ্জাগুলি সামান্য এবং জিরোগুলিতে সরাসরি রাখতে পারেন এবং কেবলমাত্র খেলনাগুলি হস্তান্তর করার জন্য ওল শিক্ষককে অপেক্ষা করতে হবে না প্লেটাইম এ আবার এগুলি স্কুপ করুন।

সংক্ষেপে, স্টাফ যুক্ত করা সম্ভাব্যভাবে পিছিয়ে বা অন্যথায় অযাচিত জটিলতার পরিচয় দেয়।

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

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

বিপজ্জনক দ্বারা, আমি পয়েন্টার এবং অন্যান্য অনুরূপ স্টাফ দিয়ে বোঝাতে চাইছি। [...] স্ট্যাক ওভারফ্লো প্রশ্নটির মতো কেন গেমগুলির কাজটি এত বিপজ্জনক যে এটি ব্যবহার করা উচিত নয়?

গৃহীত উত্তর অনুযায়ী:

"এটি ১৯৯ 1999 এর আইএসও সি স্ট্যান্ডার্ড পর্যন্ত ভাষার একটি সরকারী অংশ হিসাবে রয়ে গিয়েছিল তবে এটি ২০১১ এর স্ট্যান্ডার্ড দ্বারা আনুষ্ঠানিকভাবে সরানো হয়েছিল। বেশিরভাগ সি বাস্তবায়ন এখনও এটি সমর্থন করে তবে কমপক্ষে জিসিসি কোনও কোডের জন্য এটি একটি সতর্কতা জারি করে।"

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

আরও উল্লেখযোগ্য বিষয় হ'ল , (সহ) সমস্যাটি প্রতি সেঙ্কের কোনও পয়েন্টার ইস্যু নয় । এটি একটি কমান্ডের সাথে সমস্যা যা নিরাপদে কীভাবে স্মৃতি ব্যবহার করতে হয় তা জানে না। একটি বিমূর্ত অর্থে, এটি সমস্ত পয়েন্টার ইস্যু - পড়া এবং লেখার স্টাফগুলি যা আপনার অনুমিত নয়। পয়েন্টারগুলির সাথে এটি কোনও সমস্যা নয়; এটি পয়েন্টার বাস্তবায়নে সমস্যা।

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

এটি বলেছিল যে, পয়েন্টারগুলি মেমরির অবস্থানগুলিতে অ্যাক্সেস সরবরাহ করে এবং ডেটা এবং এক্সিকিউটেবল কোড একসাথে মেমরিতে উপস্থিত থাকে তাই দুর্ঘটনাজনিত দুর্নীতির প্রকৃত বিপদ রয়েছে যা আপনি সঠিকভাবে মেমরি পরিচালনা করতে চান।

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

সংক্ষেপে, পয়েন্টারটি নিরাপদে ব্যবহার করা অবধি ভয় পাওয়ার খুব কম কারণ রয়েছে fear স্টিভ "দ্য কুমির হান্টার" ইরভিনের সাউথ পার্কের সংস্করণ থেকে কেবল একটি ইঙ্গিত নিন - ক্রোকসের বুমহোলগুলিতে আপনার থাম্বটি আটকাবেন না


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

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

2
"তাদের বিভিন্ন সুবিধা এবং ব্যবহার রয়েছে এবং প্রত্যেকেরই এমন বৈশিষ্ট্য রয়েছে যা অন্যরা তা করে না" " - যেমনটি উল্লেখ করা হয়েছে "সি না শিখার কোনও নির্দিষ্ট কারণ নেই [।]" সি একটি দুর্দান্ত ভাষা এবং আমি সে অনুসারে আঁকড়ে থাকি। যদি এটি ওপি বা অন্য কারও উপযুক্ত হয় তবে আমি এটি শিখতে সম্পূর্ণ সমর্থন করি। =)
আনাকসুমান

লার্নিং সি আপনাকে শিখিয়ে দেয় যে মেশিনটি কীভাবে কাজ করে (সমস্ত পথে নামেনি, তবে ধাতবটির আরও এক ধাপ বেশি)। এটি শেখার জন্য এটি খুব ভাল কারণ।
এজেন্ট_এল

1

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

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

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

নীচের লাইনটি হ'ল, আপনার যতটা সম্ভব সরঞ্জাম, ভাষা এবং দৃষ্টান্তগুলি শেখা উচিত।

দয়া করে মানসিকতা থেকে দূরে থাকুন: "আমি এক্স প্রোগ্রামার আমি" (এক্স = সি, সি ++, জাভা ইত্যাদি)

শুধু "আমি একজন প্রোগ্রামার" ব্যবহার করুন।

একজন প্রোগ্রামার সমস্যা সমাধান করে এবং কাজের চাপ সম্পাদনের জন্য মেশিনকে নির্দেশ দিয়ে অ্যালগরিদমগুলি ডিজাইন করে। গল্পের শেষে. এটি ভাষার সাথে অপ্রাসঙ্গিক। আপনার সর্বাধিক গুরুত্বপূর্ণ দক্ষতা হ'ল সমস্যা সমাধান এবং কাঠামোগত সমস্যার যৌক্তিক ভাঙ্গন, ভাষা দক্ষতা / পছন্দ সবসময়ই মাধ্যমিক এবং / অথবা সমস্যার প্রকৃতির পরিণতি।

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


0

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


0

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

সেক্ষেত্রে আপনি সি ++ ব্যবহার করেন তা বিবেচ্য নয়। আপনি এখনও পয়েন্টার static_castsথেকে কাস্ট করার জন্য সমস্ত কোড জুড়ে void*ছিটকে যাচ্ছেন এবং এখনও বিট এবং বাইট নিয়ে কাজ করছেন এবং সি এর চেয়ে এই প্রসঙ্গে টাইপ সিস্টেমকে সম্মান করার সাথে সম্পর্কিত আরও ঝামেলা মোকাবিলা করছেন যেখানে আপনি মুক্ত যেখানে আরও সহজ টাইপ সিস্টেম রয়েছে থেকে memcpyবিট এবং টাইপ সিস্টেমের উপর bulldozing সম্পর্কে উদ্বেজক ছাড়া প্রায় বাইট।

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

এবং ভাষাগুলিতে এমন বরাদ্দকারী কার্যকর করা অসম্ভব যেগুলি আপনাকে এখানে "বিপজ্জনক" পেতে দেয় না; তারা যে পরিমাণ বরাদ্দ সরবরাহ করে তার উপর ঝুঁকতে হবে (সম্ভবত সি বা সি ++ এর ক্ষেত্রে কার্যকরভাবে প্রয়োগ করা হয়েছে) এবং আশা করা যায় যে এটি আপনার উদ্দেশ্যগুলির পক্ষে যথেষ্ট ভাল। এবং প্রায় সবসময় আরও দক্ষ কিন্তু কম সাধারণ বরাদ্দকারী এবং ডেটা কাঠামো আপনার নির্দিষ্ট উদ্দেশ্যে উপযুক্ত তবে আরও সংকীর্ণভাবে প্রযোজ্য যেহেতু তারা আপনার উদ্দেশ্যে বিশেষভাবে তৈরি করা হয়েছে।

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

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

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

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