বেশিরভাগ প্রোগ্রামিং ভাষাগুলি কেন নীড় বাঁধা মন্তব্য করে না?


18

কয়েকজন করেন, তবে যতটা আমি জানি তত জনপ্রিয় জনপ্রিয় কেউ নেই। মন্তব্য নেস্টিং খারাপ কিছু আছে?

আমি যে (ছোট) ভাষায় কাজ করছি তাতে ব্লক মন্তব্য নেস্ট করার পরিকল্পনা করি, তবে আমি জানতে চাই এটি কোনও খারাপ ধারণা কিনা।


কয়েকটি উত্তর পুনরায়: ওহ, তার অর্থ বোধ হয় =) আমি সম্পূর্ণ নেস্টেড ব্লক মন্তব্য করছি তখন; যদিও আমার একটি পৃথক লেক্সিং পর্যায় রয়েছে, তবে এটি সীমাবদ্ধ ধরণের এসকে-যুক্তিযুক্ত নয়।

@ ভ্যান্টিক: আপনার যদি একটি আলাদা লেক্সিং মঞ্চ থাকে যা নিয়মিত প্রকাশের চেয়ে জিনিস আরও জটিল ব্যবহার করে তবে আপনার পারফরম্যান্স সংক্রান্ত সমস্যা থাকতে পারে। ডিআরএফএস প্রয়োগ করে আরইএস দ্রুত এবং সহজেই ব্যবহারযোগ্য।
ডেভিড থর্নলি

বাসা

4
@ ডেভিড: ... মোটেও না এটি আসলেই দ্রুত।
আমারা

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

উত্তর:


6

একটি জিনিস এখনও কেউ উল্লেখ করেনি, তাই আমি এটি উল্লেখ করব: নীড় মন্তব্য করার আকাঙ্ক্ষাটি প্রায়শই নির্দেশ করে যে প্রোগ্রামারটি ডোন ইট ভুল।

প্রথমে সম্মত হোন যে প্রোগ্রামারটির কাছে কেবল "নেস্টিং" বা "বাসা বাঁধাই নয়" দৃশ্যমান তখনই যখন প্রোগ্রামার কাঠামোগতভাবে কিছু লিখে থাকে:

do_something();
/* comment /* nested comment */ more comment */
do_something_else();

এখন, কখন এ জাতীয় জিনিসটি বাস্তবে আসে? অবশ্যই প্রোগ্রামার নেস্টেড মন্তব্যগুলি লিখবে না যা আক্ষরিকভাবে উপরের স্নিপেটের মতো দেখাচ্ছে! না, বাস্তবে আমরা মন্তব্যগুলিতে বাসা বেঁধে থাকি (বা আমরা আশা করি যে এগুলি বাসা বেঁধে ফেলতে পারি), কারণ আমরা এরকম কিছু লিখতে চাই:

do_something();  /* do a thing */
/* [ajo] 2017-12-03 this turned out to be unnecessary
do_something_else(); /* do another thing */
*/

এবং এই হল খারাপ। এটি এমন একটি নিদর্শন নয় যা আমরা (ভাষা ডিজাইনার হিসাবে) উত্সাহিত করতে চাই! সঠিক উপরে স্নিপেট লিখতে পথ হল:

do_something();  /* do a thing */

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

এটি সমস্তই থাম্বের একটি সহজ নিয়মে ফোটে যা আপনি আগে শুনে থাকতে পারেন: কোড মন্তব্য করবেন না। (এই শব্দগুচ্ছ একটি আপ চালু হবে খুঁজছেন অনেক এর মতামত মধ্যে চুক্তি ।)

আগে আপনি জিজ্ঞাসা: হ্যাঁ, এই ধরনের সি, সি #, এবং C যেমন ভাষায় ++, ইতিমধ্যে প্রোগ্রামার দিতে অন্য টুল কোডের বড় ব্লক "মন্তব্য আউট": #if 0। তবে এটি কেবল সি প্রিপ্রোসেসরের একটি নির্দিষ্ট অ্যাপ্লিকেশন, যা এটি তার নিজস্বভাবে একটি বৃহত এবং দরকারী সরঞ্জাম। ভাষার পক্ষে শর্তসাপেক্ষ সংকলন সমর্থন করা #ifএবং এখনও সমর্থন না করা সত্যিই এটি অত্যন্ত কঠিন এবং বিশেষ-কেসিসি হবে #if 0


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

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

নেস্টেড মন্তব্য ক্ষেত্রে, সব অন্য হয় সমান - আপনি নিরাপদে উপেক্ষা করতে পারেন কম ভোট উত্তরগুলি বলে যে দাবি করা নেস্টেড পার্স /*একরকম পার্সার জন্য "কঠিন" হতে হবে। (নেস্টেড নেস্টেডের /*চেয়ে শক্ত কিছু নয়)( , যা বিশ্বের প্রতিটি পার্সারকে ইতিমধ্যে পরিচালনা করতে হবে needs)

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

Qed


পাদটীকা। লক্ষ্য করুন যে আপনি যদি নেস্টেড মন্তব্যের অনুমতি না দিয়ে থাকেন তবে

hello /* foo*/bar.txt */ world

এটি একটি বিভ্রান্তিকর "মন্তব্য" - এটি সমান

hello bar.txt */ world

(যা সম্ভবত একটি সিনট্যাক্স ত্রুটি)। কিন্তু আপনি যদি না নেস্টেড মন্তব্যকে অনুমতি, তারপর

hello /* foo/*.txt */ world

এটি একটি বিভ্রান্তিকর "মন্তব্য" - এটি সমান

hello

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


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

@ গ্রীনল্ডম্যান: বেশিরভাগ ভাষায় বাসা বাঁধার মত মন্তব্য নেই, তবে তাদের "কোডের একটি ব্লক মুছে ফেলার" জন্য কিছু বাস্তব বৈশিষ্ট্য থাকবে যা "একটি মন্তব্য দিন" বৈশিষ্ট্যের চেয়ে কম ব্যবহৃত হয়। সি এর #if DEADক্যানোনিকাল এবং সেরা-নকশা করা উদাহরণ। অনেক ভাষায় আপনি কেবল ডেড কোডটি সমতুল্যভাবে মোড়ানো করতে পারেন if (DEAD)। এবং অনেক আইডিইতে, আপনি প্রকৃতপক্ষে মৃত কোডটি সরিয়ে ফেলতে পারেন এবং আপনি চান তা ফিরে পেতে Ctrl + Z এবং / অথবা সংস্করণ নিয়ন্ত্রণের উপর নির্ভর করতে পারেন on একটি মন্তব্য, ডাস্ট্রিং, যাই হোক না কেন, যার পাঠ্যটি মৃত কোডের একগুচ্ছ, এখনও পঠনযোগ্যতার জন্য সবচেয়ে খারাপ বিকল্প।
কুইকসপ্লসোন

11

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


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

ঝনঝনানিও একই কাজ করছে। তবে এটি এখনও বিদ্যমান জনপ্রিয় ভাষা সংকলকগুলির একটি ক্ষুদ্র অনুপাত।
এসকে-লজিক

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

কেউ কোনও অ-তুচ্ছ কম্পাইলারের জন্য তাদের লেক্সিংয়ে নিয়মিত এক্সপ্রেশন ব্যবহার করছে না।
নুওজি

@ নিউজি - অ-তুচ্ছ - নিশ্চিত তবে যারা ফ্লেক্স এবং অনুরূপ সরঞ্জামগুলির উপর নির্ভর করে তারা তা করে।
এসকে-যুক্তি

7

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

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

বাসা বাঁধে না এমন মন্তব্যগুলির একটি উল্টোটি হ'ল:

/*
some code
more code
blah blah blah
/**/

যেখানে আপনি প্রথম লাইনটি সরিয়ে বা যুক্ত করে কোডটি সহজেই ভিতরে বা বাইরে মন্তব্য করতে পারেন - একটি 1-লাইন সম্পাদনা। অবশ্যই, যদি সেই কোডটিতে নিজেই একটি মন্তব্য থাকে তবে এটি ভঙ্গ হবে, যদি না আপনি সেখানে সি ++ - স্টাইল //মন্তব্যের অনুমতি না দেন। তাই আমি কি করতে ঝোঁক।


1
//মন্তব্যগুলিও সি 99-স্টাইল।
জ্যাব

বিকল্পভাবে, কোনও ভাষা মন্তব্য-প্রারম্ভকে নির্দিষ্ট করতে পারে /*$token, যেখানে identifierকোনও আলফানিউমেরিক টোকেন থাকে এবং মন্তব্য-এর শেষে থাকে token$*/। টোকেনাইজারের জন্য কোড অন্তর্ভুক্ত করা তুলনামূলকভাবে সহজ হবে যাচাই করার জন্য প্রতিটি প্রান্ত-মন্তব্য চিহ্নটিতে তার ম্যাচিং-স্টার্ট-মন্তব্য ব্লকের জন্য উপযুক্ত টোকেন রয়েছে।
সুপারক্যাট

5

যেহেতু অন্য কারও এটি উল্লেখ করা হয়নি, আমি কয়েকটি ভাষাগুলি তালিকাবদ্ধ করব যা নেস্টেড মন্তব্যগুলিকে সমর্থন করে: রেএক্সএক্স, মডিউলা -২, মডিউলা -3, ওবেরন। অসুবিধা এবং গতির সমস্যা সম্পর্কে এখানে সমস্ত অভিযোগ থাকা সত্ত্বেও এগুলির কোনওটিরই কোনও বিশাল সমস্যা বলে মনে হয় না।


4
যা আমি যুক্ত করছি: হাস্কেল, ফ্রিজ
ইনগো

Scala দ্বারা সমর্থিত।
ম্যাট আর

4

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

একটি বিকল্প পদ্ধতি হ'ল লাইন কমেন্ট শুরু সিকোয়েন্সের সাথে একগুচ্ছ রেখাগুলি তৈরি করা যদি আপনার এমন কোনও সম্পাদক থাকে যা এটি সমর্থন করে।

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


3

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

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


1
"কোনও বৈশিষ্ট্য অপসারণের চেয়ে যোগ করা আরও সহজ" এর জন্য +1।
আর ..

3
একবার আপনি নেস্টেড মন্তব্যগুলি অস্বীকার করার পরে আপনি তাদের /*/**/
অনুমতিও

2

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


3
এটি "গন্ধ" নয়। নিয়মিত প্রকাশের "নিয়মিত" শব্দটি অন্তর্নিহিতভাবে পুনরাবৃত্তি বাদ দেয়।
আর ..

3
@ আর: গণিতে অবশ্যই তবে প্রোগ্রামিংয়ে, আমাদের কাছে এমন জিনিস রয়েছে যা আমরা পুনর্বিবেচনাকে সমর্থন করি যা পুনরাবৃত্তি সমর্থন করে।
আমারা

প্রশ্নটি: এটি কি কোনও সমস্যা? বেশিরভাগ ভাষায় ইতিমধ্যে বাসা বাঁধতে হয়েছে। কিছু নাম রাখার জন্য: লিস্প, সি, জাভা, পাইথন, রুবি, পার্ল।
টমাস এডিং

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

2
@ দ্যপপম্যাচিন: আমি যা বলেছি তা সম্পর্কে আমি নিশ্চিত, নিয়মিতর একটি সংজ্ঞায়িত আনুষ্ঠানিক অর্থ রয়েছে, আপনি যে অর্থটি ব্যবহার করছেন তা নয়, এবং "নিয়মিত" প্রকাশের "নিয়মিত" এই অর্থটির জন্য বেছে নেওয়া হয়েছিল। অপরিবর্তনীয় হওয়া তার সংজ্ঞাটির একটি ফলাফল।
আর ..

-1

কে জানে? আমি অনুমান করব কারণ নেস্টেড মন্তব্যগুলিকে সমর্থন করা আরও কাজ - আপনাকে কোনও ধরণের স্ট্যাক বজায় রাখতে হবে, এবং এটি ভাষার ব্যাকরণকে জটিল করে তোলে।


-1

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


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