সংকলকরা এত নির্ভরযোগ্য কিভাবে আসে?


62

আমরা প্রতিদিনের ভিত্তিতে সংকলকগুলি ব্যবহার করি যেন তাদের যথার্থতা দেওয়া হয় তবে সংকলকগুলি খুব প্রোগ্রাম হয় এবং সম্ভাব্যভাবে বাগগুলি থাকতে পারে। আমি এই অবিশ্বাস্য দৃust়তা সম্পর্কে সর্বদা ভাবতাম। আপনি কি কখনও সংকলনে নিজেই কোনও বাগের মুখোমুখি হয়েছেন? এটি কী ছিল এবং আপনি কীভাবে বুঝতে পেরেছিলেন যে সমস্যাটি সংকলকটিতেই ছিল?

... এবং কিভাবে করবেন তারা কম্পাইলার তাই নির্ভরযোগ্য করা?


16
ঠিক আছে, তারা এটিতে সংকলকটি সংকলন করে ...
মাইকেল কে

31
এগুলি ফলপ্রসূ হয় না। সংকলক বাগ রয়েছে - এটি কেবলমাত্র খুব বিরল।
ক্রিসএফ

5
কোড স্ট্যাকের নামার সাথে সাথে বাগগুলি বিরল হয়ে উঠবে: অ্যাপ্লিকেশন বাগগুলি সংকলক বাগের চেয়ে বেশি সাধারণ। সংকলক বাগগুলি সিপিইউ (মাইক্রোকোড) বাগের চেয়ে বেশি সাধারণ। এটি আসলে এক সুসংবাদ: আপনি কি ভাবতে পারেন এটি যদি অন্যদিকে থাকে?
ফিক্সি

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

উত্তর:


96

তারা সময়ের সাথে সাথে হাজার হাজার বা এমনকি কয়েক মিলিয়ন বিকাশকারী দ্বারা ব্যবহারের মাধ্যমে পুরোপুরি পরীক্ষিত হয়।

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

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


32
সংকলক কোডের বেশিরভাগটি সম্ভবত সঠিক প্রমাণিত হতে পারে।
বিজিক্লপ

@ বিজিক্লপ, ভাল কথা, এটি কার্যের বিশেষ প্রকৃতির আরেকটি পরিণতি।
পিয়েটার তারেক

প্রথম সম্পূর্ণ সংকলকটি জন ব্যাকাস লিখেছিলেন ফরট্রান ভাষার জন্য ১৯৫7 সালে। সুতরাং, আপনি দেখুন, সংকলক প্রযুক্তি 50 বছরেরও বেশি পুরানো। এটি সঠিকভাবে পেতে আমাদের বেশ কিছুটা সময় ছিল যদিও অন্যরা দেখায় যে কম্পাইলারগুলিতে বাগ রয়েছে।
leed25d

@ বিজিক্লপ, আসলে, লেক্সার এবং পার্সারগুলির মতো কিছু উপাদান এমনকি একটি ব্যাকরণ থেকে স্বয়ংক্রিয়ভাবে তৈরি করা যেতে পারে, যা বাগের ঝুঁকি আবারও কমিয়ে দেয় (প্রদত্ত লেক্সার / পার্সার জেনারেটর শক্তিশালী - যা তারা সাধারণত উপরে বর্ণিত একই কারণে) ।
পিয়েটার তুরিক

2
@ পেটার: লেক্সার / পার্সার জেনারেটরগুলি বহুল ব্যবহৃত ব্যবহৃত সংকলকগুলিতে বরং বিরল বলে মনে হচ্ছে - বেশিরভাগ কারণে হাতে লেখে লেক্সার এবং পার্সার লিখুন, গতি এবং প্রশ্নে ভাষার জন্য পর্যাপ্ত স্মার্ট পার্সার / লেক্সার জেনারেটরের অভাব সহ (যেমন সি )।

61

এখন পর্যন্ত সমস্ত দুর্দান্ত উত্তর ছাড়াও:

আপনার একটি "পর্যবেক্ষক পক্ষপাতিত্ব" রয়েছে। আপনি বাগগুলি পর্যবেক্ষণ করেন না, এবং তাই আপনি ধরে নেন যে কোনওটি নেই।

আমি তোমার মত ভাবতাম। তারপরে আমি পেশাগতভাবে সংকলকগুলি লিখতে শুরু করেছিলাম এবং আপনাকে বলি, সেখানে প্রচুর বাগ রয়েছে!

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

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

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

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

static void N(ref int x){}
...
N(ref 123);

সংকলকটি তিনটি ত্রুটি দেয়।

  • একটি রেফ বা আউট আর্গুমেন্ট একটি নির্ধারিত পরিবর্তনশীল হতে হবে।
  • এন (রেফ ইন্ট এক্স) এর সেরা ম্যাচে অবৈধ যুক্তি রয়েছে।
  • আর্গুমেন্ট 1 এ "রেফ" হারিয়েছে।

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

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

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


4
প্রথমটির পরে ভাল ত্রুটির বার্তাগুলি করা খুব কঠিন very

অবশ্যই, কমপ্লায়ারগুলি সম্পূর্ণ "বোকা" -রূপ তৈরি করার পরে অবশ্যই আরও ভাল শক্তি ব্যয় করতে হবে :)
হোমডে

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

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

7
@ আইজ: "স্পষ্টত আইনী সি # কোড" অর্থে সঠিক করুন। উদাহরণস্বরূপ, আপনি কি কখনও এমন একটি প্রোগ্রাম লিখেছেন যা দুটি ইন্টারফেসের উত্তরাধিকার সূত্রে প্রাপ্ত একটি ইন্টারফেসের যেখানে একটি ইন্টারফেসের সম্পত্তি ছিল এবং অন্যটির সম্পত্তি হিসাবে একই নামের পদ্ধতি ছিল? দ্রুত, অনুমানের দিকে না তাকিয়ে: এটি আইনী কী? এখন ধরুন আপনার সেই পদ্ধতিতে একটি কল আছে; এটা কি অস্পষ্ট ? ইত্যাদি। লোকেরা এমন কোড লিখেন যা তারা সর্বদা বোঝায় না। তবে খুব কমই তারা কোড লেখেন যেখানে আপনি আইনী সি # কিনা এটির জন্য আপনাকে বিশেষজ্ঞ বিশেষজ্ঞ হতে হবে।
এরিক লিপার্ট

51

তুমি কি আমার সাথে মজা করছো? কম্পাইলারগুলিতে বাগ রয়েছে, সত্যই বোঝা।

জিসিসি সম্ভবত গ্রহের সবচেয়ে বেশি ওপেন সোর্স সংকলকগুলির মধ্যে সবচেয়ে বেশি উদযাপিত এবং এর বাগ ডেটাবেসটি একবার দেখুন: http://gcc.gnu.org/bugzilla/buglist.cgi?product=gcc&component=c%2B%2B&resolution=-- -

জিসিসি ৩.২ এবং জিসিসি ৩.২.৩ এর মধ্যে কতগুলি বাগ ঠিক করা হয়েছে তা একবার দেখুন: http://gcc.gnu.org/gcc-3.2/changes.html

ভিজ্যুয়াল সি ++ এর মতো অন্যদের জন্য, আমি এমনকি শুরু করতে চাই না।

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

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


19

আমার দিনে দু'জন তিনজনের মুখোমুখি হয়েছি। একটিকে সনাক্ত করার একমাত্র আসল উপায় হ'ল সমাবেশ কোডটি দেখা।

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


6
"সংকলকটিকে স্ট্যান্ডার্ড হিসাবে দেখার জন্য +1"। আমি দীর্ঘদিন ধরে ধরে রেখেছি যে দুটি ভাষা সত্যই কোনও ভাষার সংজ্ঞা দেয়: সংকলক এবং স্ট্যান্ডার্ড লাইব্রেরি। একটি স্ট্যান্ডার্ড ডকুমেন্ট হ'ল ডকুমেন্টেশন।
ম্যাসন হুইলারের

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

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

1
@ ডেভিড: বা আরও সঠিকভাবে, একটি প্রভাবশালী বাস্তবায়ন। বোরল্যান্ড পাস্কালকে সংজ্ঞায়িত করেছে এবং মাইক্রোসফ্ট এএনএসআই এবং ইসিএমএ যা বলুক না কেন সি # কে সংজ্ঞায়িত করেছে।
dan04

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

14

সংকলকগুলির বেশ কয়েকটি বৈশিষ্ট্য রয়েছে যা তাদের সঠিকতার দিকে পরিচালিত করে:

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

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

13

আমরা প্রতিদিন ভিত্তিতে সংকলক ব্যবহার করি

... এবং কীভাবে তারা সংকলকগুলি এত নির্ভরযোগ্য করে তোলে?

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

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

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

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


11

ইতিমধ্যে সমস্ত উত্তর ছাড়াও, আমি যোগ করতে চাই:

আমি অনেকবার বিশ্বাস করি , বিক্রেতারা তাদের নিজস্ব কুকুরের খাবার খাচ্ছেন। অর্থ, তারা নিজের মধ্যে সংকলক লিখছেন।


7

আমি প্রায়শই সংকলক বাগগুলিতে চলে এসেছি।

আপনি এগুলিকে আরও গাer় কোণে খুঁজে পেতে পারেন যেখানে পরীক্ষার্থী কম রয়েছে। উদাহরণস্বরূপ, জিসিসিতে বাগগুলি খুঁজতে আপনার চেষ্টা করা উচিত:

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

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

@ ওমেগা: অপ্টিমাইজেশানটি কেটে নেওয়া দেখে মনে হয় সবাই যা করে। দুর্ভাগ্যক্রমে, Itanium ভাল সঞ্চালনের জন্য উচ্চ-অনুকূলকরণ সংকলক প্রয়োজন । ওহ ভাল ...
ঝ্যান লিংস

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

@ ওমেগা: দুর্ভাগ্যক্রমে, আমি সত্যই সত্যই ইটানিয়াম পছন্দ করি। এটি একটি দুর্দান্ত স্থাপত্য। আমি x86 এবং x86-64 অপ্রচলিত হিসাবে বিবেচনা করি তবে অবশ্যই তারা কখনও মরবে না।
জ্যান লিংস

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

5

বিভিন্ন কারণে:

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

4

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

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


4

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


দুর্ভাগ্যক্রমে আমরা বাগের দ্বিতীয় শ্রেণিটি দেখতে পাচ্ছি না: কোডগুলি কম্পাইল করে = সবকিছু ঠিক আছে। সুতরাং সম্ভবত অর্ধেক বাগ (দুটি বাগ শ্রেণীর মধ্যে 50-50 এর বিভাজন অনুপাত ধরে) লোকেরা খুঁজে পায় না তবে সংকলক ইউনিট পরীক্ষার মাধ্যমে
জিয়ানলুকা ঘেটিনি

3

হ্যাঁ, আমি গতকাল এএসপি.এনইটি সংকলনে একটি বাগের মুখোমুখি হয়েছি:

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

ViewUserControl<System.Tuple<type1, type2, type3, type4, type5>>

type5অপসারণ করা থাকলে যেমন হয় তেমন সংকলন করবে না will

ViewUserControl<System.Tuple<MyModel, System.Func<type1, type2, type3, type4>>>

type4অপসারণ করা হলে সংকলিত হবে ।

নোট করুন যে System.Tupleএর অনেকগুলি ওভারলোড রয়েছে এবং এটি 16 টি প্যারামিটার নিতে পারে (এটি আমি জানি পাগল)।


3

আপনি কি কখনও সংকলনে নিজেই কোনও বাগের মুখোমুখি হয়েছেন? এটি কী ছিল এবং আপনি কীভাবে বুঝতে পেরেছিলেন যে সমস্যাটি সংকলকটিতেই ছিল?

হা!

দুটি স্মরণীয় দুটি হ'ল প্রথম দু'টি আমি যেদিকে ছড়িয়ে পড়েছিলাম। 1985-7 প্রায় 680x0 ম্যাকের জন্য লাইটস্পিড সি সংকলনে তারা দুজনেই ছিলেন।

প্রথমটি ছিল যেখানে, কিছু পরিস্থিতিতে, পূর্ণসংখ্যা পোস্টক্রেমেন্ট অপারেটর কিছুই করেনি - অন্য কথায়, একটি নির্দিষ্ট কোডের "i ++" কেবল "i" তে কিছুই করেনি। আমি আমার চুলগুলি টেনে আনছিলাম যতক্ষণ না আমি একটি বিচ্ছিন্নতার দিকে তাকালাম। তারপরে আমি কেবল ইনক্রিমেন্টটি অন্যভাবে করেছি এবং একটি বাগ রিপোর্ট জমা দিয়েছি।

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

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

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

তার পর থেকে 25-ইশ বছর ধরে, আমি সময়ের সাথে কম এবং কম সংকলক বাগগুলি দেখেছি। আমি মনে করি যে এর কয়েকটি কারণ রয়েছে:

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

স্ব-সংশোধনকারী কোড এড়ানোর অন্যতম কারণ।
টেকনোফিল

3

5.5 বছর আগে টার্বো প্যাসকেলে একটি চমকপ্রদ ত্রুটি পাওয়া গেছে। সংকলকটির পূর্ববর্তী (5.0) বা পরবর্তী (6.0) সংস্করণে উপস্থিত একটি ত্রুটি। এবং এটি যা পরীক্ষা করা সহজ হওয়া উচিত ছিল, কারণ এটি একেবারে কর্নেকেস ছিল না (কেবল একটি কল যা এটি সাধারণত ব্যবহৃত হয় না)।

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


2

যখন আপনার সফ্টওয়্যারটির আচরণটি -O0 এবং -O2 দিয়ে সংকলিত করার সময় আলাদা হয়, তখন আপনি একটি সংকলক বাগ খুঁজে পেয়েছেন।

আপনার সফ্টওয়্যারটির আচরণ যখন আপনি প্রত্যাশা করেন তার থেকে ঠিক আলাদা হয়, তবে সম্ভাব্যতাগুলি আপনার কোডটিতে রয়েছে।


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

2

সংকলক বাগগুলি ঘটে তবে আপনি সেগুলি বিজোড় কোণে সন্ধান করার ঝোঁক ...

1990 এর দশকে ডিজিটাল সরঞ্জাম কর্পোরেশন ভ্যাক্স ভিএমএস সি সংকলকটিতে একটি অদ্ভুত বাগ ছিল

(আমি আমার বেল্টে একটি পেঁয়াজ পরেছিলাম, সেই সময়কার ফ্যাশনটি যেমন ছিল)

লুপের জন্য পূর্বের যে কোনও জায়গায় একটি বহির্মুখী সেমিকোলন লুপের মূল অংশ হিসাবে সংকলিত হবে।

f(){...}
;
g(){...}

void test(){
  int i;
  for ( i=0; i < 10; i++){
     puts("hello");
  }
}

প্রশ্নে সংকলকটিতে, লুপটি একবারে কার্যকর করে।

এটা দেখে

f(){...}
g(){...}

void test(){
  int i;
  for ( i=0; i < 10; i++) ;  /* empty statement for fun */

  {
     puts("hello");
  }
}

এতে আমার অনেক সময় ব্যয় হয়।

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

এমএসভিসি 6 সংকলকের লিঙ্কারে একটি নিফ্টি বাগ ছিল, এটি বিভাজন ত্রুটিযুক্ত ছিল এবং সময়ে সময়ে অকারণে মারা যায়। একটি পরিষ্কার বিল্ড সাধারণত এটি স্থির করে (তবে দীর্ঘশ্বাস ফেলেন না)।


2

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


1

আমি বেশ কয়েকটি সংকলক বাগ দেখেছি, কয়েক জন নিজে রিপোর্ট করেছেন (বিশেষত, এফ # তে)।

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

তাদের মধ্যে বেশিরভাগই ল্যাম্বদা ক্যালকুলাস, আনুষ্ঠানিক যাচাইকরণ, ডোনোটেশনাল শব্দার্থিক ইত্যাদির মতো জিনিসগুলির সাথে সম্ভবত খুব পরিচিত stuff এমন জিনিস যা আমার মতো একজন গড় প্রোগ্রামার সবেই বুঝতে পারে না।

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


1

আমি সি # সংকলকটিতে খুব বেশিদিন আগে একটি বাগ পেয়েছি, আপনি দেখতে পাচ্ছেন যে এরিক লিপার্ট (যিনি সি # ডিজাইন দলের সাথে আছেন) কীভাবে বাগটি এখানে রয়েছে তা কীভাবে খুঁজে বের করেছিলেন ।

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

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

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