কোনও প্রোগ্রামিং ভাষায় আপনি যে সর্বাধিক ডিজাইনের ত্রুটির মুখোমুখি হয়েছেন? [বন্ধ]


29

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

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


6
নোট করুন যে এটি ভাষা ডিজাইনারদের জন্য গঠনমূলক (এড়াতে ভুল), যদি কেউ প্রশ্ন করতে চান যে এই প্রশ্নটি কতটা গঠনমূলক।
Anto

সুস্পষ্ট প্রতারিত programmers.stackexchange.com/questions/20985/...
greyfade

1
@ গ্রেফ্যাড: সত্যই নয়, এটি প্রকৃত ভাষার ত্রুটিগুলি সম্পর্কে, মনে হয় এটি এমন ভাষা সম্পর্কে যা মনে হয় যে কোনও ভাষা গ্রহণ কম করে, যার মধ্যে খারাপ মানের স্ট্যান্ডার্ড লাইব্রেরি বা ভাষার জন্য কোনও খারাপ ওয়েবসাইট অন্তর্ভুক্ত থাকতে পারে। কিছু উত্তরের তালিকা যেমন খারাপ সিনট্যাক্স, তবে এটি কোনও নির্দিষ্ট নকশার ত্রুটি নয়
এন্টো

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

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

উত্তর:


42

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

আমার মনে আছে ১৯৯৫ সালের দিকে যখন আমি প্রথমবারের মতো জাভা সম্পর্কিত বিবরণ পড়ছিলাম, যখন আমি switchবিবৃতিটি সম্পর্কে অংশ পাই তখন আমি খুব হতাশ হয়ে পড়েছিলাম যে তারা ডিফল্ট পতনের মাধ্যমে আচরণটি ধরে রেখেছে। এটি কেবল অন্য নামের সাথে switchগৌরবময় করে তোলে goto


3
@ ক্রিস্টোফার মাহান: সেভাবে switchকাজ করতে হবে না। উদাহরণস্বরূপ, আদার কেস / যখন স্টেটমেন্ট (স্যুইচ / কেস এর সমতুল্য) এর পতনের মাধ্যমে আচরণ হয় না।
গ্রেগ হিউগিল

2
@ গ্রেগ: switch- সি এর সাথে সম্পর্কিত নয় এমন ভাষাগুলির মতো বিবৃতিগুলিকে সেভাবে কাজ করতে হবে না। কিন্তু আপনি যদি সি-শৈলী নিয়ন্ত্রণ প্রবাহ (ব্যবহার {... }, for (i = 0; i < N; ++i), return, ইত্যাদি), ভাষা অনুমান মানুষ আশা করতে হবে switchC- এর মতো কাজ করে, এবং এটি দান আদা / পাসকাল / বেসিক মত শব্দার্থবিদ্যা বিভ্রান্ত যেত মানুষ। C # এর প্রয়োজন breakমধ্যে switch, একই কারণে বিবৃতি যদিও তোলে ক্ষেত্রে ত্রুটি'র সম্ভাবনা হ্রাস নীরব fallthrough বাধা দিত দ্বারা। (তবে আমি আশা করি আপনি fall;goto case
কুৎসকের

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

9
-1 আমি এটিকে পড়তে দেওয়া একটি সুবিধা হিসাবে বিবেচনা করি, বোকামি বাদে এর থেকে কোনও বিপদ নেই, তবুও এটি অতিরিক্ত ক্রিয়াকলাপ দেয়।
অরব্লিং

11
সমস্যাটি হ'ল পতনের সুযোগটি switch দেয় না । এটি হ'ল পতনের জন্য সর্বাধিক ব্যবহার ইচ্ছাকৃত নয়।
dan04

41

=অ্যাসাইনমেন্টের ==জন্য এবং সি-উদ্ভূত ভাষাগুলিতে সমতা পরীক্ষার জন্য আমি সত্যই পছন্দ করি নি । বিভ্রান্তি এবং ত্রুটির সম্ভাবনা খুব বেশি। এমনকি ===জাভাস্ক্রিপ্টে আমাকে আরম্ভ করবেন না ।

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


3
@ নিমঞ্জা ত্রিফুনোভিচ: আমি প্রথমে সেই পরামর্শটিই ভেবেছিলাম তবে এটি নেগেটিভ সংখ্যার (যেমন। x<-5) তুলনায় তুলনায় কম সি নিয়ে একটি দুর্ভাগ্যজনক দ্ব্যর্থতা রয়েছে । সি প্রোগ্রামাররা এ জাতীয় প্রয়োজনীয় সাদা স্থান সহ্য করবে না :)
গ্রেগ হিউগিল

7
@ গ্রেগ: আমি পছন্দ করব :=এবং ==কারণ :আপনি =আজকে ভুলে যাওয়ার আগে এটি ইতিমধ্যে কেস (বিপরীত হলেও) এর মতো ভুলে যাওয়া এবং অবহিত হওয়া খুব সহজ হবে । আমি এই সম্পর্কে সংকলক সতর্কতা জন্য কৃতজ্ঞ ...
ম্যাথিউ এম।

13
প্রায় সব কীবোর্ডে আমি ব্যবহার করেছি, ": =" টাইপ করার সময় শিফট কী পরিবর্তন করতে হবে। আমি এখন যেটি ব্যবহার করছি, তার উপরে ':' হ'ল বড় হাতের অক্ষর এবং '=' হ'ল ছোট হাতের অক্ষর I've আমি অনেক অ্যাসাইনমেন্ট টাইপ করি, এবং সেগুলির মধ্যে টাইপ করার ঝামেলা দরকার নেই।
ডেভিড থর্নলি

14
@ ডেভিড থর্নলি: কোডটি লেখার চেয়ে অনেক বার পঠিত হয়। আমি "টাইপিং ঝামেলা" সম্পর্কে কোনও যুক্তি কিনছি না।
গ্রেগ হিউগিল

8
@ গ্রেগ হিউগিল: অবশ্যই এটি লিখিত চেয়ে বেশিবার পড়েছে। তবে এর মধ্যে সমস্যাটি পড়ার মধ্যে নেই =এবং ==কারণ এটি স্বতন্ত্র প্রতীক। এটি লিখিতভাবে এবং নিশ্চিত করে যে আপনি সঠিকটি পেয়েছেন।
ডেভিড থর্নলি

29

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

$স্ট্রিং কন্ডকেটেশনের মতো সম্পূর্ণ নতুন অপারেটরটি প্রবর্তন করা শুরুতে সহজ হত ।


13
@ ব্যারি: সত্যই নয়। +একটি দৃ strongly়ভাবে টাইপ করা ভাষায় স্ট্রিং কনকন্টেশন অপারেটর হিসাবে প্রচুর অর্থবোধ তৈরি করে। সমস্যাটি হচ্ছে জাভাস্ক্রিপ্ট এটি ব্যবহার করে তবে দৃ strongly়ভাবে টাইপ করা হয় না।
ম্যাসন হুইলারের

13
@ ম্যাসন: কনট্যাক্টেশনের +জন্য কোনও অর্থবোধ করে না, কারণ সংক্ষেপণ অবশ্যই পরিবর্তনশীল নয়। যতটা আমি উদ্বিগ্ন এটি আপত্তিজনক।
ম্যাথিউ এম।

12
@ ম্যাথিউ: উম্মম ... ব্যাপারটা কেন? কনটেনটেশন কমিটিকেটিভ নয় (যেমন সংযোজন হ'ল) ​​তবে দুটি স্ট্রিং যোগ করা বোকামিযুক্ত তাই কেউ এটিকে সেভাবে ভাবেন না। আপনি এমন একটি সমস্যা আবিষ্কার করছেন যেখানে কোনওটিই নেই।
ম্যাসন হুইলারের

4
কেবল সি ++ এ স্যুইচ করুন এবং আপনার পছন্দের অপারেটরে কোনও প্রকারের ওভারলোডিংয়ের সাথে যুক্ত করুন
নিউটোপিয়ান

8
@ ম্যাথিউঃ: যোগাযোগ এখানে সমস্যা নয়। যদি জেএসের একটি ম্যাট্রিক্স ক্লাস থাকে তবে আপনি এটি *অপারেটর রাখার জন্য এটি অপব্যবহার হিসাবে বিবেচনা করবেন ?
dan04

24

আমি জাভাস্ক্রিপ্টকে একটি প্রধান ইস্যুতে গ্লোবাল ডিফল্ট হিসাবে খুঁজে পাই এবং আপনি যদি জেএসলিন্ট বা এর মতো ব্যবহার না করেন তবে প্রায়শই বাগের উত্স source


2
বিশ্বব্যাপী ডিফল্ট? আমি আনন্দিত আমি তখন জেএস ব্যবহার করি না ...
এন্টো

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

1
varআপনি যখন কোনও ভেরিয়েবল ঘোষণা করেন কেবল তখনই ব্যবহার করুন এবং আপনি যেতে ভাল। এবং আমাকে এটি খুব বেশি টাইপিংয়ের কথা বলবেন না কারণ জাভা আপনাকে সমস্ত ধরণের দু'বার ঘোষণা করতে বাধ্য করে এবং এটি কোনও ছদ্মবেশী নকশা পছন্দ বলে অভিযোগ করে না।
davidk01

3
@ ডেভিডক 01: লোকেরা সে সম্পর্কে অভিযোগ করে। একইভাবে, লোকেরা std::map<KEY, VALUE>::const_iteratorসি ++ এ ভেরিয়েবলগুলি যথেষ্ট পরিমাণে ঘোষিত করার বিষয়ে অভিযোগ autoকরেছে যা সেই ভাষায় যুক্ত হচ্ছে।
dan04

1
এস 5-এ যুক্ত "use strict"নির্দেশনাটি অঘোষিত রেফারেন্সগুলিকে ত্রুটিতে পরিবর্তন করে।
শন ম্যাকমিলান

22

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

  • #include একটি বাস্তব মডিউল সিস্টেম দিয়ে প্রতিস্থাপন করা উচিত ছিল।

  • ইনলাইন ফাংশন এবং টেম্পলেট / জেনেরিকগুলি বেশিরভাগ ফাংশন কল ব্যবহারের ক্ষেত্রে প্রতিস্থাপন করতে পারে।

  • কিছু ধরণের ম্যানিফেস্ট / কম্পাইল টাইম ধ্রুবক বৈশিষ্ট্য এ ধরণের স্থিরতা ঘোষণার জন্য ব্যবহার করা যেতে পারে। ডি'র এনাম এক্সটেনশনগুলি এখানে দুর্দান্ত কাজ করে।

  • রিয়েল সিনট্যাক্স ট্রি লেভেল ম্যাক্রোগুলি প্রচুর বিবিধ ব্যবহারের কেস সমাধান করতে পারে।

  • কোড ইনজেকশন ব্যবহারের ক্ষেত্রে স্ট্রিং মিক্সিন ব্যবহার করা যেতে পারে।

  • static ifবা versionবিবৃতি শর্তসাপেক্ষ সংকলনের জন্য ব্যবহার করা যেতে পারে।


2
@ ডিডিমছা: আমি #includeইস্যুটির সাথে একমত , কিন্তু মডিউল সিস্টেমটি আবিষ্কার হয়েছিল ... পরে! এবং সি এবং সি ++ সর্বাধিক পিছিয়ে সামঞ্জস্যের জন্য লক্ষ্য: /
ম্যাথিউ এম।

@ ম্যাথিউ: হ্যাঁ, মডিউল সিস্টেমগুলি পরবর্তীকালের পরে উদ্ভাবিত হয়েছিল, তবে আমরা এখানে কোনওভাবেই হ্যান্ডসাইটের কথা বলছি।
dsimcha

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

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

5
@ স্টেফেন: আমি একমত যে প্রিপ্রোসেসরযুক্ত জাভা ছাড়া জাভা থেকে ভাল হতে পারে তবে কেবল জাভাতে প্রিপ্রসেসর প্রতিস্থাপনের জন্য প্রয়োজনীয় কয়েকটি "আসল" বৈশিষ্ট্য নেই। ডি এর মতো ভাষায়, এর মধ্যে এমন বৈশিষ্ট্য এবং পাইথন অন্তর্ভুক্ত রয়েছে, যা গতিশীল হয়ে অন্য উপায়ে নমনীয়তা লাভ করে, আমি এটিকে কিছুটা মিস করি না।
dsimcha

21

কেউ শত শত ভাষায় শত ভুলকে তালিকাভুক্ত করতে পারে, তবে আইএমও এটি কোনও ভাষা নকশার দৃষ্টিকোণ থেকে কার্যকর অনুশীলন নয়।

কেন?

কারণ এমন কিছু যা একটি ভাষায় ভুল হবে অন্য ভাষায় ভুল হবে না। এই ক্ষেত্রে:

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

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

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

যদি সাধারণ পাঠ শেখা হয় তবে তারা "মেটা" পর্যায়ে রয়েছে:

  • আপনি কোনও প্রোগ্রামিং ভাষা ডিজাইন করতে পারবেন না যা সমস্ত উদ্দেশ্যে আদর্শ all
  • আপনি ভুল করা এড়াতে পারবেন না ... বিশেষত যখন পশ্চাৎ দৃষ্টি থেকে দেখা হয়।
  • আপনার ভাষার ব্যবহারকারীদের জন্য অনেক ভুল সংশোধন করা বেদনাদায়ক are
  • আপনার লক্ষ্যযুক্ত দর্শকদের পটভূমি এবং দক্ষতার হিসাব নিতে হবে; অর্থাত্ বিদ্যমান প্রোগ্রামারগণ।
  • আপনি সবাইকে খুশি করতে পারবেন না।

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

আমার বক্তব্যটি ডিজাইনের লক্ষ্যগুলি বিবেচনায় না নিয়ে পাঠ শেখা কঠিন difficult
স্টিফেন সি

1
আমার কাছে মনে হয় যে ওপি ইতিমধ্যে প্রশ্নের দ্বিতীয় অনুচ্ছেদে আপনার উত্তরটির জন্য জবাবদিহি করেছে।
আইডন কুলি

20

সি এবং সি ++ : All সমস্ত পূর্ণসংখ্যার ধরণের যা কোনও অর্থ নয়।

বিশেষ করে char। এটি পাঠ্য বা এটি একটি ছোট পূর্ণসংখ্যা? যদি এটি পাঠ্য হয় তবে এটি একটি "এএনএসআই" অক্ষর বা কোনও ইউটিএফ -8 কোড ইউনিট? এটি যদি পূর্ণসংখ্যা হয় তবে এটি স্বাক্ষরিত বা স্বাক্ষরবিহীন?

int "দেশীয়" আকারের পূর্ণসংখ্যা হিসাবে লক্ষ্য করা হয়েছিল, তবে 64৪-বিট সিস্টেমে এটি হয় না।

longএর চেয়ে বড় হতে পারে বা নাও হতে পারে int। এটি পয়েন্টারের আকার বা নাও হতে পারে। সংকলক লেখকদের পক্ষ থেকে এটি 32-বিট বা 64-বিট হোক না কেন এটি বেশ নির্বিচার সিদ্ধান্ত।

অবশ্যই 1970 এর দশকের একটি ভাষা। ইউনিকোডের আগে 64৪-বিট কম্পিউটারের আগে।


10
সি স্ট্যান্ডার্ড ফিট-সমস্ত ভাষা হিসাবে ডিজাইন করা হয়নি, সুতরাং এটি কোনও ডিজাইনের ত্রুটি হতে পারে না। এটি সিপিইউ-নির্দিষ্ট এসেমব্লার কোডকে এড়িয়ে পোর্টেবল এসেমব্লার হিসাবে একটি সিপিইউ মডেল করার জন্য তৈরি করা হয়েছিল। তবে এটি জাভাতে স্থির হয়েছিল।

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

5
একটি চর কোনও utf-8 ইউনিট নয়। একটি utf-8 অক্ষর সংরক্ষণ করতে আরও 8 টি বিট নিতে পারে সি 1970 এর দশকের ভাষা নয়, আমি এখন এটি একটি প্রকল্পের জন্য (স্বেচ্ছায়) ব্যবহার করছি।
ড্যান_ওয়াটারওয়ার্থ

4
সি পিডিপি -11 প্রসেসরের উচ্চ-স্তরের বিমূর্ততা থেকে কিছুটা বেশি। উদাহরণস্বরূপ, প্রাক এবং পোস্ট ইনক্রিমেন্টেশন সরাসরি পিডিপি -11 দ্বারা সমর্থিত ছিল।
বিট-টুইডলার

5
এটি একটি মারাত্মক বিভ্রান্ত উত্তর answer প্রথম প্রথম, সি এবং সি ++ বিনিময়যোগ্য নয়। দ্বিতীয়ত, ভাষাগুলি স্পষ্টভাবে একটি চর কী তা সংজ্ঞায়িত করে - টাইপ চর হিসাবে ঘোষিত একটি অবজেক্টটি বেসিক এক্সিকিউশন ক্যারেক্টার সেটের যে কোনও সদস্যকে সঞ্চয় করতে যথেষ্ট বড়। । তৃতীয়, সি একটি "70 এর দশকের ভাষা" নয়, এটি এমন একটি ভাষা যা হার্ডওয়্যারটির কাছাকাছি বাস করে এবং সম্ভবত এটি এমন ভাষা যা শেষ পর্যন্ত আপনার সমস্ত উচ্চ স্তরের বিমূর্তিগুলিকে একটি সিপিইউতে বাস্তবে বোঝায়। আপনি এমন একজন ব্যক্তি হিসাবে এসেছেন যিনি কেবলমাত্র উচ্চ স্তরের ভাষাগুলি জানেন এবং জিনিসগুলি কীভাবে বাস্তবে কাজ করে তার কোনও প্রশংসা নেই। -1
এড এস

18

null

তার উদ্ভাবক টনি হোয়ারে, এটা কল "বিলিয়ন ডলারের ভুল"

এটি 60 এর দশকে ALGOL এ চালু হয়েছিল এবং বর্তমানে ব্যবহৃত বেশিরভাগ ব্যবহৃত প্রোগ্রামিং ভাষায় এটি বিদ্যমান।

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

(যদিও টনি তার বিনয়ের দিক থেকে দুর্দান্ত, তবুও আমি মনে করি যে প্রায় যে কেউ একই ভুল করেছে, এবং সে ঠিক প্রথম হয়েছে))


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

4
@ ইউজার ১4579 Every৯: যে কোনও ভাষা যে কোনও ধরণের সেট বা স্ট্রিং বা অ্যারে সমর্থন করে} রয়েছে, তবে এগুলি এখনও শব্দার্থগতভাবে উপযুক্ত এবং আপনার ইতিমধ্যে এমন কিছু না থাকলে ক্রাশ হবে না যতক্ষণে সম্ভবত অ্যারে সীমা ত্রুটির কারণ হতে পারে - তবে এটি অন্য একটি সমস্যা। আপনি সমস্ত অক্ষর বড় হাতের জন্য একটি খালি স্ট্রিং প্রক্রিয়া করতে পারেন, যার ফলে খালি স্ট্রিং হবে। আপনি একই জিনিসটি নাল স্ট্রিংয়ে চেষ্টা করে দেখুন এবং যথাযথ বিবেচনা না করে এটি ক্র্যাশ হয়ে যাবে। সমস্যাটি হ'ল এই সঠিক বিবেচনাটি ক্লান্তিকর, প্রায়শই ভুলে যাওয়া এবং একক-অভিব্যক্তি ফাংশন (অর্থাত ল্যাম্বডাস) লিখতে অসুবিধা হয় difficult
রিয় মিয়াসাকা

1
আমি যতবার নাল টাইপ করি ততবার আমি অর্থ উপার্জন করি ... ওহ হ্যাঁ, প্রতিবার নাল টাইপ করে কেউ কেউ টাকা হারায়। এই সময় ব্যতীত।
কেভিপি

3
@ ইউলক্যাট - যখন আপনার ওক্যামল, হাস্কেল এবং এফ # এর মতো প্যাটার্ন মেলানো ভাষা রয়েছে, তখন সম্ভবত এক্স | কোনও প্যাটার্ন আপনাকে সঙ্কলন সময়ে নাল কেসটি ভুলে যাওয়া থেকে বিরত রাখে। সংকলন-কালের কৌতুকপূর্ণ পরিমাণে কোনও ভাষা ত্রুটি ধরতে পারে না যেখানে নাল প্রতিষ্ঠিত প্রতিমা। যেহেতু আপনার স্পষ্টতই যে ভাষাগুলিতে সম্ভবত কিছু ও কিছু মোনাড রয়েছে তাদের নাল ক্ষেত্রে মোকাবেলা না করার জন্য বেছে নিতে হবে, তাই তাদের "নাল" পদ্ধতির উপর গুরুতর সুবিধা রয়েছে।
জেসনট্রু

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

14

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

আমি একজন পিএইচপি বিকাশকারী। পিএইচপি টাইপ করতে মজা নয়।

Who::in::their::right::mind::would::do::this()? ::অপারেটর হোল্ডিং শিফ্ট ও তারপর দুই মূল প্রক্রিয়া প্রয়োজন। কি শক্তি অপচয়।

Although-> this-> যা-> not-> বহুল> ভাল। এটির জন্য দুটি চিহ্নের মধ্যে স্থান পরিবর্তন সহ তিনটি কী প্রেসও প্রয়োজন।

$last = $we.$have.$the.$dumb.'$'.$character। ডলার সাইনটি প্রচুর পরিমাণে ব্যবহৃত হয় এবং কীবোর্ডের একেবারে শীর্ষে শিফ্ট কী প্রেসের জন্য অ্যাওয়ার্ডটি প্রসারিত করতে হবে।

টাইপ করার চেয়ে তাত্পর্যযুক্ত কীগুলি কী তারা পিএইচপি ডিজাইন করতে পারেনি? we.do.this()ভার্সগুলি এমন কী দিয়ে শুরু করতে পারেনি যার কেবলমাত্র একটি কী কী চাপতে পারে - বা মোটেও নন (জাভাস্ক্রিপ্ট) এবং কেবলমাত্র সমস্ত বর্ণ পূর্বনির্ধারিত করা (যেমন আমি যাইহোক E_STRICT এর জন্য করতে হবে)!

আমি কোনও ধীর টাইপিস্ট না - তবে এটি কেবল খোঁড়া ডিজাইনের পছন্দ।


পার্ল এই ব্যথা ভাগ করে নেয়।
দেনিথ

2
সি ++ এবং পাওয়ার অবধি কিছু অনির্বচনীয় উদ্ভট কারণেও এটি করা যায়।
রেই মিয়াসাকা

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

1
I::have::nothing::against::this->at.all()
মতিন উলহাক

1
সম্ভবত তারা কিওয়ার্টি কীবোর্ড ব্যবহার করবেন না। $ এবং: কীবোর্ডের মতো সমস্ত অ্যাজার্টিতে শিফট কী টিপতে হবে না।
আরখ

13

ডেস্কটপের ব্যবহার অনুপ্রাণিত ফর্ম মধ্যে asp.net

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


18
এটা কি লাইব্রেরির জিনিস না?
নিকি

@ নিকি এটি একটি ভাল পয়েন্ট;)
কবুতর

1
@ নিকি আসলে, এক্সএমএল-ভিত্তিক এএসপিএক্স কোডটি একটি ভাষা, তাই আপনি এটিতে কাজ করতে মোচড় দিতে পারেন। : ডি
কোডেক্সআর্কানিয়াম

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

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

13

আমার কাছে এটি পিএইচপি এর আদর্শ লাইব্রেরিতে নামকরণ এবং যুক্তি অর্ডার কনভেনশনের একেবারে অভাব।

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


9
পিএইচপি এর stdlib এ কনভেনশন অভাব একটি ভাষা নকশা ত্রুটি নয় তর্কযোগ্য ।

3
@ ডেলানন: কনভেনশনগুলির অভাব পিএইচপি কীভাবে ডিজাইন করা হয়েছিল তার ফলস্বরূপ এবং তাই ভাষা নকশার সাথে অনেক কিছুই করার আছে। এছাড়াও এটি আমার কাছে পরিষ্কার নয় যে গ্রন্থাগার এবং ভাষার মধ্যে একটি স্পষ্ট পার্থক্য রয়েছে। বিশেষত লিস্পের একটি ভাষা অন্য ভাষার উপরে বুটস্ট্র্যাপ করার গর্বিত traditionতিহ্য রয়েছে।
বুটিলি

1
জাসএস সম্পর্কে সত্যই উল্লেখযোগ্য বিষয় হ'ল এতে হ্যান্ডলগুলিতে রেফারেন্স গণনা ছিল, তবে সেগুলি ম্যানুয়ালি ধ্বংস না করা পর্যন্ত এগুলি পরিষ্কার করে না (এবং গ্রাফিক ইন্টারফেসে ফাংশন তৈরি হয়েছে যা সর্বত্র স্মৃতি ফাঁস করে)!
ক্রেগ গিডনি

13

আমি যে সবচেয়ে বড় নকশার ত্রুটির মুখোমুখি হই তা হ'ল পাইথনটি শুরু করার জন্য পাইথন 3.x এর মতো নকশা করা হয়নি।


1
ঠিক আছে, এমনকি

5
@ ডেলান, ওহ আমি জানি, এবং পাইথন <3 এখনও একটি বিস্ময়করভাবে ভাল ভাষা, তবে পাইথন ৩.x আকারে আরও ভাল ভাষা পাওয়া আমার পক্ষে একটু বিরক্তিকর যেটি আমি ব্যবহার করতে পারি না কারণ এটি সমস্ত মডিউলকে ভেঙে দেয় যা আমার দরকার.
ড্যান_ওয়াটারওয়ার্থ

আপনার অজগর 3.x মডিউলগুলির জন্য লবি চালিয়ে যান! ইতিমধ্যে আমি লিখতে হবে 2.5.4। ধন্যবাদ তাই আমি আসলে মনে করি যে 3.x জীবিত এবং ভাল।
কেভিপি

@ কেভপি ফার্স্ট, লাইব্রেরি রক্ষণাবেক্ষণকারীদের জন্য ট্রানজিশনটি সহজ করার জন্য অজগরটিতে শর্তসাপেক্ষ সংকলন যুক্ত লবি 2to3 দীর্ঘমেয়াদে একটি রক্ষণাবেক্ষণযোগ্য সমাধান নয়।
ইভান প্লেইস

12

সিটিতে অ্যারে ক্ষয় এবং ফলস্বরূপ সি ++।


আমি যথাযথ অ্যারে সমর্থনের জন্যও চাই। সি ++ তে আপনি অ্যাবসকন সিনট্যাক্স এবং টেম্পলেট ব্যবহার করে ক্ষয় রোধ করতে পারবেন ... তবে এটি হ্যাকের বেশি: /
ম্যাথিউ এম।

1
নোট করুন যে এই কারণেই সি ++ এর পৃথক deleteএবং delete[]অপারেটর থাকতে হবে।
dan04

আপনি সর্বদা স্ট্রাক্টে একটি অ্যারে রাখতে পারেন এবং আপনি যদি এটি চান তবে এটি মান দিয়ে ঘুরতে পারেন তবে এটি মূল সমস্যাটির চেয়ে সাধারণত আরও বিশ্রী হয়। সি ++ এ আপনি সাধারণত অ্যারে ব্যবহারের প্রয়োজন এড়াতে পারেন।
ডেভিড থর্নলি

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

@ স্টেফেন সি: অ্যারের ক্ষয়ের সাথে অ্যারের সীমানা যাচাইয়ের কী আছে?
নেমানজা ত্রিফুনোভিচ

11

জাভা মধ্যে আদিম ধরনের।

তারা এই নীতিটি ভঙ্গ করে যে সবকিছুই বংশধর java.lang.Object , যা তাত্ত্বিক দৃষ্টিকোণ থেকে ভাষা নির্দিষ্টকরণের অতিরিক্ত জটিলতার দিকে নিয়ে যায় এবং ব্যবহারিক দৃষ্টিকোণ থেকে তারা সংগ্রহগুলি ব্যবহারকে অত্যন্ত ক্লান্তিকর করে তোলে।

অটোবক্সিং ব্যবহারিক ত্রুটিগুলি লাঘব করতে সহায়তা করেছে তবে স্পেসিফিকেশনটিকে আরও জটিল করে তুলতে এবং একটি বড় ফ্যাট কলা ত্বকের পরিচয় দেওয়ার জন্য: এখন আপনি সাধারণ গাণিতিক অপারেশনের মতো দেখতে একটি নাল পয়েন্টার ব্যতিক্রম পেতে পারেন।


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

সেই সময়, এটি জাভা ডিজাইনারদের দ্বারা একটি বুদ্ধিমান সিদ্ধান্ত ছিল। 90 এর দশকে মেশিনগুলি / ভিএমগুলিতে প্রদত্ত পারফরম্যান্স লাভগুলি জাভা.লং.অবজেক্টের চারপাশে সমস্ত কিছু একীকরণের ধারণামূলক সুবিধার চেয়েও বেশি।
মাইকের

10

আমি পার্লকে সবচেয়ে ভাল জানি, তাই আমি এটি গ্রহণ করব।

পার্ল অনেক ধারণা চেষ্টা করে। কিছু ভাল ছিল। কিছু খারাপ ছিল। কিছুগুলি আসল ছিল এবং ভাল কারণে অনুলিপি করা হয়নি।

একটি প্রসঙ্গে ধারণা - প্রতিটি ফাংশন কল তালিকা বা স্কেলারের প্রসঙ্গে হয় এবং প্রতিটি প্রসঙ্গে সম্পূর্ণ ভিন্ন জিনিস করতে পারে। যেমনটি আমি http://use.perl.org/~btilly/jorter/36756 এ দেখিয়েছি এটি প্রতিটি এপিআই জটিল করে তোলে এবং প্রায়শই পার্ল কোডে সূক্ষ্ম নকশার সমস্যা নিয়ে আসে।

পরেরটি সিন্ট্যাক্স এবং ডেটা টাইপগুলি পুরোপুরি বেঁধে রাখার ধারণা। এটি টাইয়ের উদ্ভাবনে নেতৃত্ব দেয় যাতে অন্য ডেটা ধরণের হিসাবে বস্তুগুলিকে মাস্ক্রেড করতে দেওয়া হয়। (আপনি ওভারলোড ব্যবহার করে একই প্রভাব অর্জন করতে পারেন তবে পার্লের ক্ষেত্রে টাই আরও সাধারণ পদ্ধতি approach

অনেকগুলি ভাষায় করা অন্য একটি সাধারণ ভুল হ'ল শব্দাবলীর পরিবর্তে গতিশীল স্কোপিং অফার দিয়ে শুরু করা। এই নকশার সিদ্ধান্তটি পরে আবার ফিরিয়ে নেওয়া শক্ত এবং দীর্ঘস্থায়ী ওয়ার্সের দিকে নিয়ে যায়। পার্লের এই ওয়ার্টগুলির ক্লাসিক বর্ণনাটি হ'ল http://perl.plover.com/FAQs/Namespaces.html । লক্ষ্য করুন যে পার্ল ourভেরিয়েবল এবং staticভেরিয়েবল যুক্ত করার আগে এটি লেখা হয়েছিল ।

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

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


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

@ জাচারি-কে: একেবারে সম্মত। এবং আমি ইস্যুগুলি নিয়ে চলার আগে এটি পরিষ্কার করার চেষ্টা করেছি।
বুটিলি

4
লিপসগুলি মূলত গতিশীলভাবে স্কোপড ছিল এবং সময়ের সাথে সাথে লেক্সিকালি স্কোপড (কমপক্ষে স্কিম এবং কমন লিস্পে) রূপান্তরিত হয়। এটি পরিবর্তন করা অসম্ভব নয়।
ডেভিড থর্নলি

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

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

10

কোড ব্লক এবং অবজেক্ট আক্ষরিকের জন্য জাভাস্ক্রিপ্টের অস্পষ্টতা।

  {a:b}

একটি কোড ব্লক হতে পারে, যেখানে aএকটি লেবেল এবং bএকটি প্রকাশ; অথবা এটি কোনও অবজেক্টের সংজ্ঞা দিতে পারে, একটি বৈশিষ্ট্য aযার মান রয়েছেb


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

2
জিওনক্রস: আমি সাধারণত অস্পষ্টতা পছন্দ করি না। এই ক্ষেত্রে এটি বিকাশকারীদের কাছে সুস্পষ্ট, তবে ইভাল () এর অতিরিক্ত বন্ধনী প্রয়োজন।
ব্যবহারকারী 281377

2
@ ইম্মকিউ: এটা সুস্পষ্ট? এটা কি হয় তারপর? একটি অবজেক্ট বা একটি কোড ব্লক?
কনফিগারকারী

কনফিগারার: ​​অবশ্যই একটি অবজেক্ট। কোনও বুদ্ধিমান ব্যক্তি নামক একটি লেবেল ব্যবহার করবেন না a
ব্যবহারকারী 281377

10

আমি ফোরট্রান এবং হোয়াইটস্পেস সংবেদনশীলতা ফিরে যেতে চলেছি।

এটি স্পেসিফিকেশন বিস্তৃত। দ্যENDকার্ড, বরং "শেষ" সঙ্গে একটি কার্ড চেয়ে সঠিক অন্য কোন nonblanks একটি 'ই' এর সাথে একটি কার্ড, একটি 'এন', এবং কলাম 7-72 মধ্যে, যাতে একটি 'ডি', এবং হিসাবে সংজ্ঞায়িত করা হয়েছিল কলাম এবং অন্য কিছুই।

এটি সহজ সিনট্যাক্টিক বিভ্রান্তির দিকে পরিচালিত করেছিল। DO 100 I = 1, 10এটি একটি লুপ কন্ট্রোল স্টেটমেন্ট DO 100 I = 1. 10ছিল , যখন একটি বিবৃতি ছিল যা ভেরিয়েবলের 1.1 মান নির্ধারণ করেDO10I । (যে ঘোষণাটি ছাড়াই ভেরিয়েবলগুলি তৈরি করা যেতে পারে, তাদের প্রথম অক্ষরের উপর নির্ভর করে তাদের ধরনটি এতে অবদান রেখেছিল)) অন্যান্য ভাষার মতো নয়, ছদ্মবেশের অনুমতি দেওয়ার জন্য টোকেনকে আলাদা করার জন্য স্পেস ব্যবহার করার কোনও উপায় ছিল না।

এটি অন্যান্য লোককে সত্যই বিভ্রান্তিকর কোডও লিখতে দেয়। ফোরট্রানের এই বৈশিষ্ট্যটি আর কখনও নকল করা হয়নি তার কারণ রয়েছে।


1
এমন একটি ভাষায় যেখানে আপনি আক্ষরিককে পুনরায় সংজ্ঞা দিতে পারেন এটি সবচেয়ে খারাপ উদাহরণ - আমার অর্থ এটি কেবলমাত্র একটি ক্ষুদ্রতম মহাকাশযান ক্র্যাশ করেছিল
মার্টিন বেকেট

প্রথমদিকে, আপনি DIMENSION এর জায়গায় DAMNATION লিখতে পারেন এবং এটি কার্যকর হবে।
মাইক ডুনলাভে 8'11

এটি এখনও সিএসের বাইরের লোকেরা শেখানো হচ্ছে। যারা এখনও ক) ঘোষণার বিরুদ্ধে লড়াই করেন, খ) হোয়াইটস্পেসের বিরুদ্ধে লড়াই করেন, গ) "ধারাবাহিকতা লাইন" এর মতো, ঘ) 6-চরিত্রের নাম ব্যবহার করেন, বা ৪, ডি) তারা যখন দেখেন (test ? a : b), তখন স্টাম্পড হয় , e) জোর দিয়েছিলেন ব্যবহারে **, চ) কেস-সংবেদনশীলতা পরিচালনা করতে পারে না। এর বেশিরভাগটি 50 এর দশকে কিপঞ্চগুলির কারণে হয়েছিল।
মাইক ডুনলাভে

1
@ মার্টিন বেকেট - ফরটারনে আক্ষরিককে নতুনভাবে সংজ্ঞায়িত করা একটি ভাষা বৈশিষ্ট্যের চেয়ে সত্যই সংকলক ত্রুটি ছিল। এটি অবশ্যই কোনও উদ্দেশ্যমূলক ভাষার বৈশিষ্ট্য ছিল না।
স্টিফেন সি

1
@ ওস্টারওয়াল: আমি অবশ্যই করেছি। আমার ভুল হতে পারে তবে পাঞ্চ কার্ডের উপর ভিত্তি করে ভাষা সংজ্ঞাটি আমি অস্পষ্টভাবে মনে করি। এগুলি আবার ফোরট্রান প্রোগ্রামগুলি ইনপুট করার প্রধান উপায় ছিল এবং 80৩-৮০ সংরক্ষিত কলামগুলির সাথে একটি ৮০-কলামের লাইনের ধারণাটি পাঞ্চ কার্ড থেকে।
ডেভিড থর্নলে

9

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

প্রায় কোনও ভাষা কোনও ক্রেজি প্রোগ্রামার দ্বারা সাধারণ উদ্দেশ্যে ব্যবহারে বাঁকানো হবে। পাগল ধারণাটি যদি বন্ধ হয়ে যায় সে ক্ষেত্রে শুরুতে সেই সাধারণ উদ্দেশ্য ব্যবহারের জন্য পরিকল্পনা করা ভাল।


2
+1: যথাযথ মডিউল এবং গ্রন্থাগারগুলি ব্যতীত যে কোনও ভাষা হ'ল এটি হওয়ার অপেক্ষা a সিবিওএল এটির দ্বারা ভুগেছে, এটি সুসংগত নয় এমন অদ্ভুত রূপগুলির দিকে পরিচালিত করে।
এসলট

8

আমি ডিএসএলগুলিতে (ডোমেন-নির্দিষ্ট-ভাষাগুলি) বিশ্বাস করি এবং একটি ভাষায় আমি যে মূল্যকে মূল্যবান বলে মনে করি তা হল যদি এটি আমাকে এর উপরে একটি ডিএসএল সংজ্ঞায়িত করতে দেয়।

লিস্পে ম্যাক্রো রয়েছে - বেশিরভাগ লোক এটিকে একটি ভাল জিনিস বলে মনে করে, যেমন আমি করি।

সি এবং সি ++ তে ম্যাক্রো রয়েছে - লোকেরা তাদের সম্পর্কে অভিযোগ করে তবে আমি ডিএসএল সংজ্ঞায়িত করতে সেগুলি ব্যবহার করতে সক্ষম হয়েছি।

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


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

1
আপনি আপনার ডিএসএলকে একটি বাহ্যিক ম্যাক্রো প্রক্রিয়াকরণ ভাষায় লিখতে পারেন (এম 4 এর মতো, অন্যদের অগণিতের মধ্যে বলুন)।
আমার সঠিক মতামত

4
@ এসকে: আমি বলব না সি প্রিপ্রোসেসর লিস্পের তুলনায় (উদাহরণস্বরূপ) একটি শালীন ম্যাক্রো সিস্টেম। তবে, কোনও কিছুর তুলনায় এটি অত্যন্ত কার্যকর।
মাইক ডুনলাভে

4
@ রিনিয়ারপোস্ট: আমি লিস্পে যে কাজগুলি করতে পারছিলাম সেগুলি নিয়ে ভাবছি, যেমন ডিফারেনশিয়াল এক্সিকিউশন এবং ব্যাকট্র্যাকের মতো নিয়ন্ত্রণ কাঠামো প্রবর্তন করা। এগুলি লিস্প ম্যাক্রোগুলির সাহায্যে করা যেতে পারে। সি / সি ++ এ আমি সি ম্যাক্রো (এবং একটি সামান্য প্রোগ্রামার শৃঙ্খলা) দিয়ে ডিফারেনশিয়াল এক্সিকিউশন করতে পারতাম, তবে ব্যাকট্র্যাক নয়। সি # দিয়ে আমিও পারি না। বিনিময়ে যা পাই তা হ'ল ইন্টেলিজেন্সের মতো জিনিস। BFD।
মাইক ডুনলাভে

1
@ ডেভিড: আমি যেভাবে এটি করেছি তা হ'ল আমার কাছে সাধারণ কোড, যেমন বিবৃতিগুলির তালিকার মতো लपेटানোর জন্য একটি ম্যাক্রো ছিল। এটি cdrতালিকার তালিকাটি গ্রহণ করবে এবং এটির বাইরে একটি ল্যাম্বদা ক্লোজার তৈরি করবে (অর্থাত্ একটি ধারাবাহিকতা) এবং carতালিকাটির আর্গুমেন্ট হিসাবে এটি পাস করবে । এটি অবশ্যই পুনরাবৃত্তভাবে করা হয়েছিল, এবং শর্তসাপেক্ষ, লুপস এবং ফাংশন কলগুলির জন্য "সঠিক কাজটি" করবে। তারপরে "পছন্দ" ফাংশন সবেমাত্র একটি সাধারণ লুপে পরিণত হয়েছিল। সুন্দর নয়, তবে এটি দৃust় ছিল। সমস্যাটি হ'ল অতি-নেস্টেড লুপগুলি তৈরি করা এটি অত্যন্ত সহজ করে তোলে।
মাইক ডুনলাভে

7

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

// With statements:
node.listen(function(arg) {
  var result;
  if (arg) {
    result = 'yes';
  } else {
    result = 'no';
  }
  return result;
})

// Without:
node.listen(function(arg) if (arg) 'yes' else 'no')

আমি এখানে বিভ্রান্ত: আপনি কি কাজগুলি করার সহজ উপায় চান?
TheLQ

2
সঠিক। সমস্ত কিছুর জন্য এক্সপ্রেশন।
উপুড়হস্ত

1
লিস্প এই জন্য ভাল কাজ করে।
ডেভিড থর্নলি

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

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

6

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


3
সি ++ এর অন্যতম মূল লক্ষ্য ছিল সি এর সাথে পুরোপুরি সামঞ্জস্য বজায় রাখা যদি তারা যদি শব্দার্থক আচরণের পরিবর্তন ঘটে থাকে তবে এটি এর মতো করে ফেলতে পারে না (বা কমপক্ষে, সে সময়কার এই ধারণাটি ছিল)
এড এস

2
@ এড এস, তবে, "ঝাঁকুনি অন্য" সমস্যার সমাধান ব্যাকরণগত উত্পাদনকে মুছে ফেলা এবং কোঁকড়ানো ধনুর্বন্ধনীগুলিকে শর্তযুক্ত এবং পুনরুক্তি নিয়ন্ত্রণ কাঠামোগুলিতে অন্তর্ভুক্ত করার মাধ্যমে সম্পন্ন করা যেতে পারে যখন তারা করেছিলেন যোগ করুন চেষ্টা / ধরুন ব্যতিক্রমী নিয়ন্ত্রণের কাঠামো ধরুন। জাভা এবং সি # তে এই ব্যাকরণগত অস্পষ্টতা সংশোধন না করার কোনও অজুহাত নেই। ব্যাকরণগত অস্পষ্টতার জন্য বর্তমানে প্রতিরক্ষামূলক কাজটি হ'ল প্রতিটি বিবৃতি যা শর্তাধীন বা পুনরুক্তি নিয়ন্ত্রণের বিবৃতিটি একটি যৌগিক বিবৃতি অনুসরণ করে make
বিট-টুইডলার

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

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

3
@ বিট-টুইডলার: না, তা হয় না। পাইথন লেক্সার কেবল শ্বেত স্থানটিকে উপযুক্ত আইডেন্ট এবং ডিডেন্ট টোকনে রূপান্তর করে। এটি শেষ হয়ে গেলে পাইথনের একটি প্রচলিত ব্যাকরণ রয়েছে ( ডকস.পিথন.আর / রেফারেন্স / গ্র্যামার এইচটিএমএল )।
dan04

6

আমি মনে করি এখনও পর্যন্ত সমস্ত উত্তর অনেকগুলি মূলধারার ভাষার একক ব্যর্থতার দিকে ইঙ্গিত করে:

পশ্চাদপটে সামঞ্জস্যতা প্রভাবিত না করে মূল ভাষা পরিবর্তন করার কোনও উপায় নেই।

যদি এটি সমাধান হয়ে যায় তবে অন্য সমস্ত গ্রিপগুলিও সমাধান করা যায়।

সম্পাদনা করুন।

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

শেষ পর্যন্ত আমি মনে করি না যে আমি এটি সম্পূর্ণরূপে সন্তোষজনক এমনভাবে সমাধান করতে জানি তবে এর অর্থ এই নয় যে কোনও সমাধানের অস্তিত্ব নেই, বা আরও বেশি কিছু করা যায় না


1
আপনি কীভাবে এটি "সমাধান" করতে যাবেন?
বার্জারে ফ্রুন্ড-হানসেন

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

1
পিছনে সামঞ্জস্যপূর্ণ দ্বারা, আপনি কি নতুন সংকলকগুলি পুরানো কোডটি সংকলন করতে সক্ষম হওয়া উচিত?
রে মিয়াসাকা

আমার অর্থ নতুন সংকলকগুলি পুরানো কোডটির অর্থ পরিবর্তন করা উচিত নয়, সংকলন করতে ব্যর্থ হওয়া এটির একটি উপসেট হবে
জে.কে.

বেশিরভাগ ক্ষেত্রে, যখন কোনও নির্দিষ্ট বৈশিষ্ট্য বিদ্যমান না থাকে বা পরিবর্তন করতে চায়, লোকেরা আগেরটির ভিত্তিতে একটি নতুন ভাষা তৈরি করে। ক্লাস সহ সি => সি ++
ইউলক্যাট


4

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

পরেরটির উদাহরণ হিসাবে, এটি বিবেচনা করুন

সর্বজনীন স্ট্যাটিক টি পার্স <টি> (টাইপ করুন <T> টাইপ, স্ট্রিং স্ট্রিং) যেখানে টি: এনুম
পাশাপাশি বা প্রতিস্থাপন
পাবলিক স্ট্যাটিক অবজেক্ট পার্স (টাইপ টাইপ, স্ট্রিং স্ট্র)
মধ্যে Enumবর্গ সম্ভব হবে
MyEnum e = Enum.Parse (typof (MyEnum), str);
বরং টোটোলজিকাল
মাইইনুম ই = (মাইএনম) এনাম. পার্স (টাইপফ (মাইইনাম), স্ট্র);

tl; dr: আপনি যখন আপনার টাইপ সিস্টেমটি ডিজাইন শুরু করবেন, তখন সংস্করণ 1 প্রকাশের পরে নয় para


2
এনুমে টাইপগুলি সীমাবদ্ধ রাখতে অক্ষমতা সি # তে বিরক্তিকর, তবে আপনি এ জাতীয় চারপাশে এই জাতীয় কাজ করতে পারেন MyMethod<T>(T value) where T : struct, IComparable, IFormattable, IConvertible তবে আপনাকে এখনও একটি এনামের জন্য পরীক্ষা করতে হবে এবং এটি একটি হ্যাক। আমি মনে করি যে সি # জেনেরিকের মধ্যে বৃহত্তর অভাবটি উচ্চতর ধরণের জন্য কোনও সমর্থন নয়, যা ভাষাটি সত্যিই কিছু শীতল ধারণার কাছে উন্মুক্ত করবে।
কোডেক্সআর্কানিয়াম

4

আমার মনে হচ্ছে আমি আগুন জ্বলে উঠার জন্য নিজেকে খুলছি, তবে সি ++ তে উল্লেখ করে প্লেইন পুরাতন ডেটা টাইপগুলি পাস করার ক্ষমতাটিকে আমি ঘৃণা করি। রেফারেন্স দ্বারা জটিল ধরণের পাস করতে পেরে আমি সামান্যই ঘৃণা করি। যদি আমি কোনও ফাংশনটি দেখছি:

void foo()
{
    int a = 8;
    bar(a);
}

কলিং পয়েন্ট থেকে, এটি বলার কোনও উপায় নেই bar, যা সম্পূর্ণ আলাদা ফাইলে সংজ্ঞায়িত করা যেতে পারে:

void bar(int& a)
{
    a++;
}

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

bar(&a);

অনেক বেশি পঠনযোগ্য।


+1 আমি আপনার সাথে একমত নই, তবে আমি আপনার যুক্তিটির প্রশংসা করি।
জন পুর্ডি

@ জনের আমি আসলে আপনার ভাবনায় খুব আগ্রহী হব। আপনি কি "ভাষাটিকে দোষ দিবেন না" দেখুন না?
জেফ

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

@ জন সম্মতি জানালেন, পিওডি ছাড়াও সমস্ত কিছুর ক্ষেত্রে প্রযোজ্য রেফারেন্সটি পাসের পক্ষে খুব অদ্ভুত হবে। বিকল্প হিসাবে সি ++ থেকে এই বৈশিষ্ট্যটি পুরোপুরি অনুপস্থিত থাকলে আমি এটিকে পছন্দ করব তবে আমরা একমত হতে রাজি হতে পারি না :)। ইনপুট জন্য ধন্যবাদ!
জেফ

জাভা আপনার মতো পয়েন্টার পছন্দ করছে না বলে মনে হচ্ছে।
মতিন উলহাক

4

ALTER

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

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

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


যদিও এটির ব্যবহারের ক্ষেত্রে ভাল ব্যবহার রয়েছে - স্টাবিং বা স্মৃতিচারণ। লেখার পরিবর্তে v() { if (not alreadyCalculatedResult) { result = long(operation); alreadyCalculatedResult = true; } result; }আপনি বলছেনv() { result = long(operation); v = () => result; result; }
কনফিগারকারী

4

প্রোগ্রামিং ভাষার সবচেয়ে খারাপ পাপটি সঠিকভাবে সংজ্ঞায়িত হচ্ছে না। আমার মনে আছে যে কেসটি হ'ল সি ++, এটির উত্স:

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

যেমনটি আমার মনে আছে, সি ++ হিসাবে এটি পেশাদার হিসাবে নির্ভরযোগ্য হিসাবে তৈরি করার জন্য যথেষ্ট পরিমাণে সি ++ তৈরি করতে প্রায় এক দশক লেগেছে something এটি এমন কিছু যা আবার কখনও ঘটে না।

আমি পাপকে বিবেচনা করে অন্য কিছু (এটি কি অন্য কোনও উত্তরে উচিত?) কিছু সাধারণ কাজ করার জন্য একাধিক "সেরা" উপায় রয়েছে is এটি (আবার) সি ++, পার্ল এবং রুবির ক্ষেত্রে।


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

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

আমি সম্মত হই যে সু-সংজ্ঞায়িত ভাষাগুলি সম্ভব, তবে প্রাক-স্ট্যান্ডার্ড সি ++ এর মতো বিকশিত ভাষায় এটি ঘটবে না। বিকল্পটি হ'ল প্রতিটি ভাষা মুক্তির আগে পুরোপুরি ডিজাইন করা হয়েছে এবং এটি সর্বোত্তম ভাষা পাওয়ার উপায়টি অবশ্যই নয়। আমি বলব যে বেশিরভাগ প্রোগ্রামিং ল্যাঙ্গুয়েজ ডিজাইনাররা শুরুতেই জিনিসগুলি ভুল হয়ে যায়, যেহেতু ভাষার নকশা অত্যন্ত জটিল।
ডেভিড থর্নলি

আমি অনুমান করি যে "সুস্পষ্ট সংজ্ঞায়িত" বলতে আপনার অর্থ কী তা বুঝতে আমার সমস্যা হচ্ছে। আপনার অভিযোগ কি বিভিন্ন সি ++ সংকলক আসলে একই ভাষা সংকলন করেন নি?
শন ম্যাকমিলান

3

সি ++ এর ক্লাসগুলি ভাষার একধরনের জোরপূর্বক নকশার ধরণ।

কাঠামো এবং শ্রেণীর মধ্যে রানটাইমটিতে কার্যত কোনও পার্থক্য নেই এবং এটি "তথ্য গোপন করা" এর আসল সত্যিকারের প্রোগ্রামিং সুবিধাটি কী তা আমি বুঝতে চাইছি তা বুঝতে এত বিভ্রান্তিকর।

আমি এটির জন্য নিম্নমানের হতে চলেছি, তবে যাইহোক, সি ++ সংকলকরা এই ভাষাটি লিখতে এতই শক্ত একটি দৈত্যের মতো অনুভব করে।


2
তথ্য গোপন করা গুরুত্বপূর্ণ কারণ এটি আপনাকে API এর অ্যাক্সেসযোগ্য অংশগুলি (API এর "UI") থেকে প্রয়োগের সুনির্দিষ্ট বিবরণ গোপন করতে দেয়, যাতে প্রোগ্রামে পরিবর্তনগুলি করা সহজ এবং কম বেদনাদায়ক হয়ে ওঠে।
এন্টো

1
এপিআইয়ের ইউআই ... না, সিরিয়াসলি, আমি এটি কিনব না।
জোকুন

3
এই পার্থক্যটি সি ++ এর সর্বাধিক ঘূর্ণায়মান অংশ নয়, এমনকি ঘনিষ্ঠও নয়। পার্থক্যটি হ'ল একটি ডিফল্ট অ্যাক্সেস মডিফায়ার (স্ট্র্টগুলির জন্য সর্বজনীন, শ্রেণীর জন্য ব্যক্তিগত)। সি ++ হ'ল একটি ভয়ঙ্কর, রাক্ষসী ভাষা, তবে অবশ্যই এই অংশে নেই।
এসকে-লজিক

স্ক-লজিক: ঠিক আছে, আমি বলতে পারি সেখানে ভয়াবহতা শুরু হয়।
জোকুন

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

3

যদিও প্রতিটি ভাষারই এর ত্রুটি রয়েছে, একবার তাদের সম্পর্কে জানার পরে কোনওটিই উপদ্রব নয়। এই জুটি ব্যতীত:

কমপ্লেক্স সিনট্যাক্স একটি শব্দযুক্ত API এর সাথে মিলিত

এটি অবজেক্টিভ-সি এর মতো ভাষার ক্ষেত্রে বিশেষভাবে সত্য। সিনট্যাক্স কেবল মাত্রাতিরিক্ত জটিল নয় এপিআই ফাংশন নামগুলি ব্যবহার করে:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

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


উদ্দেশ্য-সি সিনট্যাক্স অত্যধিক জটিল? আপনি কি সি ++ দেখেন নি? এবং প্রকৃত পদ্ধতির নামটি এখানে রয়েছে tableView:cellForRowAtIndexPath:যা আমার মতে খুব বর্ণনামূলক।
রাইটফোল্ড

টাচ-টাইপ করতে শিখুন।
ফিনউইউ

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

আমি আপনার স্বাক্ষরিত অক্ষরের মন্তব্য হিসাবে হারিয়েছি, আপনি ব্যাখ্যা করতে পারেন?
উইনস্টন ইওয়ার্ট

1
একটি মানুষের কাছে, (আন) স্বাক্ষরিত অক্ষরের ধারণা এবং সংকলককে স্বাক্ষরযুক্ত অক্ষরগুলি ডিফল্ট হিসাবে ব্যবহার করার কথা বলার প্রয়োজনীয়তা অবশ্যই একজন গণিতবিদের মত দাবী হিসাবে ঠিক যে 2! = 2, কারণ দ্বিতীয় 2 বড় হাতের, সাহসী , বা তির্যক।
keকহার্ড.হর্নার

5
সমস্যাটি হ'ল সি "চর" (অর্থাত্ একটি পাঠ্য স্ট্রিংয়ের অংশ) এবং "বাইট" (অর্থাত্) এর ধারণাকে মিশ্রিত করে (u)int_least8_t। স্বাক্ষরতা ছোট ছোট পূর্ণসংখ্যার জন্য নিখুঁত ধারণা তৈরি করে, তবে অক্ষরের জন্য কোনও অর্থেই তা বোঝায় না।
dan04

@ ডান04: আমি সম্মত, আমি চাই যে তাদের ছোট ছোট পূর্ণসংখ্যার (স্বাক্ষরিত এবং স্বাক্ষরযুক্ত), বাইট এবং চরিত্রের জন্য বিভিন্ন ধরণের থাকুক। আপনি যখন নবাবিদের ব্যাখ্যা করেন যে কাঁচা স্মৃতি হস্তান্তর করতে তাদের char*একটি সি-স্ট্রিংয়ের মতো একটি কাস্ট করা দরকার তখন তারা সত্যিই বিভ্রান্ত হয়।
ম্যাথিউ এম।

C # এর পৃথক সঙ্গে এই ঠিক sbyte, byteএবং charধরনের।
dan04
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.