স্ট্যান্ডার্ডটি অনুসরণ করা কি সেই বিষয়ে সি স্ট্যান্ডার্ড নেওয়া দরকার?


17

স্ট্যাক ওভারফ্লোতে কিছু অভিজ্ঞ অভিজ্ঞ লোক আছেন যারা সবসময় সি স্ট্যান্ডার্ড সম্পর্কে কথা বলেন। লোকেরা আমার জন্য কাজ করা সত্ত্বেও অ-বহনযোগ্য সমাধানগুলি পছন্দ করে না বলে মনে হয়। ঠিক আছে, আমি বুঝতে পারি যে স্ট্যান্ডার্ডটি অনুসরণ করা দরকার, তবে এটি প্রোগ্রামারের সৃজনশীলতার উপর ঝাঁকুনি রাখে না?

একটি মান অনুসরণ করে আসে যে কংক্রিট সুবিধা কি? বিশেষত যেহেতু সংকলকগণ স্ট্যান্ডার্ডটি কিছুটা ভিন্নভাবে প্রয়োগ করতে পারে।


7
আপনি "স্ট্যান্ডার্ড" বলতে কী বোঝাতে চান তা পরিষ্কার করে বলতে পারেন? আপনি কি এমন আচরণটির প্রতি উপলব্ধি করছেন না যা মান দ্বারা নির্ধারিত নয়? বা এক্সটেনশন / সংকলক বৈশিষ্ট্য ব্যবহার করছেন না? বা স্টাইলের সম্মেলনগুলি?
ik

1
@ শেখ তিনি আইএসও সি মান (সি 90, সি 99, সি 11) সম্পর্কে নিচ্ছেন।
অসীম বানসাল

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

আপনি কি "উদাহরণস্বরূপ নন-পোর্টেবল সমাধানগুলি পছন্দ করেন না, এমনকি তারা আমার জন্য কাজ করলেও" উদাহরণ যুক্ত করতে পারেন?
21

1
@ পিআইএফআইফাউন্ডার কেবলমাত্র এই শেষ কেসটি সম্বোধন করার জন্য, আপনি মূলটি থেকে ফিরতি বাদ দিতে পারেন, এটি স্পষ্টতই ফিরে আসে 0 :)
ড্যানিয়েল গ্র্যাটিজার

উত্তর:


45

স্ট্যান্ডার্ডের সাথে লেগে থাকা কেন ভাল কারণ এটির কয়েকটি কারণ রয়েছে।

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

  2. প্ল্যাটফর্মে লক হওয়া আরও শক্ত করে চুষে দেয়। আপনি যদি লিনাক্সে সফ্টওয়্যারটি চাপ দিচ্ছেন এবং উইন্ডোজে স্যুইচ করতে চান কারণ আপনি বুঝতে পারেন যে আপনার বাজারটি সত্যিই আছে, আপনি আপনার কোডটি পেয়েছেন এমন প্রতিটি নন-পোর্টেবল হ্যাক পরিবর্তন করার জন্য একটি সময় আছে nice জিসিসি এবং এমএসভিসি উভয়ের সাথেই। যদি আপনি এরকম কিছুকে কেন্দ্র করে আপনার মূল নকশার বেশ কয়েকটি টুকরো পেয়ে থাকেন তবে শুভকামনা!

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

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

  • লাইব্রেরি
  • সমর্থন (লোকেরা স্ট্যান্ডার্ড জানে, প্রতিটি জটিল জটিল সংকলক-নির্দিষ্ট হ্যাক নয়)
  • উপলব্ধ প্ল্যাটফর্মগুলি
  • পরিপক্ক সরঞ্জাম
  • সুরক্ষা (ভবিষ্যতের প্রমাণ)

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


+1 মোটামুটি :), ধন্যবাদ ... সংকলকগণ যেভাবে মানদণ্ড থেকে সামান্য বিচ্যুত হয়েছিল এবং আমাকে এর কঠোরভাবে অনুসরণ করা সম্পর্কে সন্দেহের উদ্রেক করেছিল এবং এর বিভিন্ন দিকগুলি জানা দরকার এবং আপনি সেগুলি স্পষ্টভাবে চিহ্নিত করেছেন।
ডিসেম্বর 0

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

@ কোডসনচাওস সম্মত হয়েছেন, একদিকে অপরিজ্ঞাত আচরণ দুর্দান্ত কারণ এটি কিছুটা পাগল অপ্টিমাইজেশনের সুযোগ দেয় তবে অন্যদিকে এটি ডিবাগ করে ...
ড্যানিয়েল গ্রেটজার

6

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

সুতরাং, নিজের মানসিক মডেলটি না রেখে মান অনুসরণ করার সুবিধা কী?

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

লোকেরা আমার জন্য কাজ করা সত্ত্বেও অ-বহনযোগ্য সমাধানগুলি পছন্দ করে না বলে মনে হয়।

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


1
আপনি এর সাথে সংকলন করতে পারেন -fwrapvএবং তারপরে আপনি কিছুটা আলাদা, অ-মানক ভাষা ব্যবহার করছেন যেখানে স্বাক্ষরিত পূর্ণসংখ্যার গাণিতিক সবসময় মোড়কে থাকে।
ব্যবহারকারী 253751

@ মিম্বিস: যখন C89 রচনা করা হয়েছিল, এর যুক্তিযুক্ত দলিল অনুসারে, সমসাময়িক সংখ্যক সমসাময়িক সংকলক সংখ্যার ওভারফ্লোয়ের জন্য নিঃশব্দ মোড়ক শব্দার্থকে সংজ্ঞায়িত করেছিলেন। অনেক ক্ষেত্রে, পূর্ণসংখ্যার অতিরিক্ত প্রবাহের ক্ষেত্রে কী ঘটে যায় সে সম্পর্কে কিছু ধরণের গ্যারান্টি থাকার কারণে কোডটি এই ধরনের গ্যারান্টি ছাড়াই যতটা সম্ভব সম্ভব হতে পারে তার চেয়ে বেশি কার্যকরী হতে পারে, বিশেষত যদি গ্যারান্টিগুলি যথাযথ মোড়ানোর আচরণের আদেশ দেয় না [সুনির্দিষ্ট মোড়ানো আচরণ স্বাক্ষরবিহীন গণিত ব্যবহার করে অনুকরণ করা যেতে পারে, তবে শব্দার্থকগুলি যেগুলি লুজার তবে প্রয়োজনীয়তাগুলি পূরণ করার জন্য পর্যাপ্ত এখনও আরও কার্যকর কোডের অনুমতি দিতে পারে]।
সুপারক্যাট

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

4

আমি বুঝতে পারি যে স্ট্যান্ডার্ডটি অনুসরণ করা দরকার, তবে এটি প্রোগ্রামারের সৃজনশীলতার উপর ঝাঁকুনি রাখে না? বিভিন্ন সংকলকগণ যেভাবে মানগুলি অনুসরণ করে সেভাবে এখনও কিছু পার্থক্য রয়েছে। আমি উদাহরণস্বরূপ এমন কোনও কোড লিখতে পারি যা কাজ করে, পারফরম্যান্স এবং গতিতে খুব ভাল অর্থাৎ সমস্ত কিছু গুরুত্বপূর্ণ, তবে এখনও এটি প্রয়োজনীয়ভাবে কঠোরভাবে মানগুলি অনুসরণ করতে পারে না।

না। মানটি কী করার অনুমতি দেয় তা বলে। যদি এটি নির্দিষ্ট না করা হয়, আপনি অনির্ধারিত আচরণের অঞ্চলে রয়েছেন, এবং তারপরে সমস্ত বেট বন্ধ রয়েছে - প্রোগ্রামটি যে কোনও কিছু করতে মুক্ত do


যেহেতু আপনি নির্দিষ্ট উদাহরণ উল্লেখ void main()বনাম int main(), আমি আমার উত্তর উন্নত করতে পারেন।

void main()মূল ফাংশনের মানক ঘোষণা নয় decla এটি এক্সটেনশনের মাধ্যমে কিছু সংকলকগুলিতে কাজ করতে পারে তবে এটি বাস্তবায়নের উপর নির্ভর করে। এমনকি যদি এটি কাজ করে তবে আপনার যা যা চান তা তা আপনাকে পরীক্ষা করে দেখতে হবে। সমস্যাটি হ'ল সংকলক বিকাশকারীরা void main()আপনার অ্যাপ্লিকেশনটি ভেঙে পরবর্তী সংকলক রিলিজ সহ অপসারণের সিদ্ধান্ত নিতে পারে ।

অন্যদিকে, মানটি মূলটির স্বাক্ষরটি পরিষ্কারভাবে সংজ্ঞায়িত করে int main()এবং এটি কী করা উচিত তা জানিয়ে দেয়।


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


4
সংকলক যা কিছু করেন তা স্ট্যান্ডার্ড নয়, সংজ্ঞায়িত আচরণ নয়, সংকলক এক্সটেনশনগুলি এই সংজ্ঞায় সংজ্ঞায়িত করা হয় যে তারা নির্বিচারক এবং ইচ্ছাকৃত। ইউবি না।
ড্যানিয়েল গ্রেটজার

@ জোজেফগ যেভাবে এটি জিজ্ঞাসা করা হয়েছিল - এটি স্পষ্টতই যে ওপি বাস্তবায়নের জন্য ইউবি পদ্ধতি সম্পর্কে চিন্তা করেছিল। উদাহরণস্বরূপ, থ্রেডগুলি সি ++ 03 তে সংজ্ঞায়িত করা হয়নি।
BЈовић

1
@ ডেওয়ার্ড: মন্তব্যটি উত্তর থেকে সরানো হয়েছে।
কেভিন

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

-6

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


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

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