সি # তে নিয়ন্ত্রিত নিরাপদ কোড ব্যবহার করবেন না কেন


10

সি # তে অপশন রয়েছে যাচাই না হওয়া কোডটি কার্যকর করতে। এটি সাধারণত পরামর্শ দেওয়ার পরামর্শ দেওয়া হয় না, কারণ পরিচালিত কোডটি অনেক বেশি নিরাপদ এবং এটি অনেকগুলি সমস্যা কাটিয়ে ওঠে।

তবে আমি ভাবছি, আপনি যদি নিশ্চিত হন যে আপনার কোডটি ত্রুটি সৃষ্টি করবে না এবং আপনি কীভাবে মেমরি পরিচালনা করতে জানেন তবে কেন (যদি আপনি দ্রুত কোড পছন্দ করেন) সাধারণ পরামর্শ অনুসরণ করেন কেন?

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

এখন আমি সাধারণভাবে আশ্চর্য হয়েছি, আপনি যদি নিশ্চিত হন যে আপনার কাছে মেমরি ফাঁস, বা ক্র্যাশের ঝুঁকি নেই, তবে কেন আপনি প্রায়শই নিয়ন্ত্রিত কোডটি ব্যবহার করবেন না?

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


8
unsafeএর অর্থ "আপনি কী করছেন তা জেনে রাখুন এবং ঝুঁকিগুলির বিরুদ্ধে সুবিধার বিষয়টি বিবেচনা করুন" " আমি unsafeমুষ্টিমেয় সময় ব্যবহার করেছি এবং এটি সর্বদা পারফরম্যান্সের সাথে সম্পর্কিত এমন নির্দিষ্ট কিছু জন্য যা তার নিজস্ব পদ্ধতিতে দেয়াল হয়ে যেতে পারে। আমি এটিকে একটি সাধারণ প্রোগ্রামিং কৌশল হিসাবে ব্যবহার করি না, কারণ বেশিরভাগ সময় অতিরিক্ত কর্মক্ষমতা বেনিফিটটি সুরক্ষিত ক্ষতি হ্রাস করার যোগ্য নয়।
রবার্ট হার্ভে

14
আমি কয়েক বছর ধরে প্রচুর কোড লিখেছি যা কখনও কখনও ক্র্যাশ হয়ে যায় বা মেমরি ফাঁস হয় যে আমি নিশ্চিত যে মেমরি ফাঁস বা ক্র্যাশের ঝুঁকি নেই pretty
হোয়াজসাইম

1
এখানে unsafeব্যবহারের একটি ভাল উদাহরণ রয়েছে: stackoverflow.com/q/11660127/102937
রবার্ট হার্ভে

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

1
কারণ আপনি যখন নিশ্চিত হন যে আপনার কোড ত্রুটি সৃষ্টি করবে না তবুও এটি ত্রুটি ঘটায়।
ব্যবহারকারী 253751

উত্তর:


27

ঠিক আছে, এটি বেশিরভাগ বয়সের প্রবাদের একটি ঘটনা

  • অপ্টিমাইজ করবেন না
  • (কেবল বিশেষজ্ঞদের জন্য) এখনও অপ্টিমাইজ করবেন না

তবে আসলে আমি অনিরাপদ কোড এড়ানোর তিনটি মূল কারণ সম্পর্কে ভাবতে পারি।

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

  2. আপনি যতটা ভাবেন তত দ্রুত নয় : অন্যটি বিষয়: সমস্যার উপর নির্ভর করে লাভটি এত বড় নাও হতে পারে। যদিও আমি এখনই তাদের সন্ধান করতে পারি না বলে মনে করি, গুগলের জাভা, স্কেলা, গো এবং সি ++ এর গতির তুলনা করে একটি সমীক্ষা মনে পড়ে। একবার মাটিতে অনুকূলিত হয়ে গেলে অবশ্যই সি ++ অনেক দ্রুত ছিল। তবে "আইডিয়োমেটিক" উপায়ে প্রোগ্রামিত অ্যালগরিদম আসলে খুব বেশি দ্রুত ছিল না। মূর্তিমানের দিক থেকে তারা মানক কাঠামো এবং আইডিয়ামগুলি ব্যবহার করছে (স্টিলের ধারক, কোনও নিবন্ধবিহীন লুপ ইত্যাদি)। মাইক্রোসফ্ট সি # এবং সি ++ নিয়ে একই রকম পরীক্ষা করেছে। শীর্ষস্থানীয় মাইক্রোসফ্ট ইঞ্জিনিয়ারদের একজন, রেমন্ড চেনকে সি # কে পরাজিত করার জন্য স্ট্যান্ড :: স্ট্রিংয়ের নিজস্ব প্রয়োগ লিখতে হয়েছিল। (দেখুন: http://www.codinghorror.com/blog/2005/05/on-managed-code-performance-again.html) অনেক কম পরিশ্রমের জন্য, আপনি পরিচালিত কোডে বেশ শালীন পারফরম্যান্স পেয়েছেন, তাই এটি প্রায়শই ঝামেলার মতো নয়।

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

সুতরাং মূলত: এটির উপর নির্ভর করে কারণ এটি অপ্রয়োজনীয় বাগগুলি প্রবর্তন করতে পারে, এটি কোনও লাভের জন্য নয় এবং এটি আপনার কোডের পুনঃব্যবহারযোগ্যতা হ্রাস করে।

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


4

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

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

মূলত, আপনার প্রশ্নের উত্তরটি কেন সবাই ফেরারি চালায় না তার উত্তরের সাথে মিল: এটি আরও অনেক ভাল গাড়ি, তাই না? (আন) ভাগ্যক্রমে, সবাই এটি বহন করতে পারে না।


* সংকলকগুলিতে অপ্টিমাইজেশন প্রযুক্তিতে বিগত কয়েক দশকের অগ্রগতিগুলি এই ব্যবধানটিকে এতটাই সংকুচিত করেছে যে এটি আর একটি নিশ্চিত বাজির মত নয়।


0

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

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


1
আমি মনে করি না যে যুক্তিযুক্ত সঠিকতা বা সরলতার সাথে এর কোনও সম্পর্ক আছে ..
জিমি হোফা

কেউই সঠিকতার আনুষ্ঠানিক প্রমাণ সম্পর্কে কথা বলছে না।

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

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

1
@ ফিশ: আপনি কী বলছেন তা আমি দেখতে পাচ্ছি। কিছু প্রমাণ করার পক্ষে কঠিন এবং কিছু সম্পর্কে বিতর্ক করা কঠিন বলে একটি সম্পর্ক রয়েছে। যদি এটি সঠিক প্রমাণ করা শক্ত হয় তবে খুব সম্ভবত এটি সঠিক কিনা তা নিশ্চিত হওয়া খুব কঠিন।
মাইকেল শ 0

0

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

বিপরীতে, সি # এর নিরাপদ / পরিচালিত এবং জোরালোভাবে টাইপ করা বিকাশের পরিবেশ সরবরাহ করে NET ফ্রেমওয়ার্কে নিরাপদে চালনার সুবিধা রয়েছে।

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

সুতরাং, 4.0 থেকে শুরু হওয়া নেট ফ্রেমওয়ার্কে আন-ম্যানেজড কোডের সাথে কাজ করার বিকল্পটি প্রান্তের ক্ষেত্রে একটি বিকল্প যখন আপনি নিশ্চিত যে এটি ব্যবহার না করে আপনি লাভ অর্জন করতে পারেন ...


আহা আকর্ষণীয় আপনি দেখতে পাচ্ছেন যে আমি মাইক্রো কন্ট্রোলার ওয়ার্ল্ড থেকে এসেছি এবং সেখানে একজন সাধারণত শালীন সি ++ লেখেন সেখানে ত্রুটির জন্য খুব কম জায়গা থাকে এবং সফ্টওয়্যারটির ভাল ভাল নকশা করাই হ'ল মূল বিষয়
হ'ল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.