এত কম সি সংকলক কেন?


72

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

তাহলে সব সংকলক কোথায়?

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

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

কেন? সি বাস্তবায়ন কি এত কঠিন? এটি সি ++ নয়। এটি কোন জটিলতা গ্রুপে পড়েছে (যেমন এটি স্কিমের চেয়ে আসলে সি ++ এর কাছাকাছি রয়েছে) সে সম্পর্কে ব্যবহারকারীদের খুব সহজেই কী খুব ধারণা রয়েছে?


61
এমএসভিসি এখনও কমপক্ষে সি 89 সংকলক হিসাবে গণনা করে। এমনকি ইন্টেলের চেয়েও বেশি জনপ্রিয়।
রাফলেউইন্ড

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

113
আপনার সি কোডটি সংকলন করতে আপনার কত সংকলক দরকার?
ব্রায়ান চেন

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

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

উত্তর:


153

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

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

একটি অনুকূলিতকরণ সংকলক কোডিং কঠিন। লক্ষ্য করুন যে জিসিসি এবং ক্ল্যাং উভয়ই কিছু "উত্স ভাষা-নিরপেক্ষ" কোড উপস্থাপনা (জিম্পলের জন্য জিম্পল, ক্ল্যাংয়ের জন্য এলএলভিএম) অপ্টিমাইজ করছে। একটি ভাল সি সংকলকের জটিলতা পার্সিং পর্যায়ে নেই!

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

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

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

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

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

আমি বিনামূল্যে সফ্টওয়্যার হিসাবে স্ক্র্যাচ থেকে সি সংকলকটিতে কাজ করার জন্য তহবিল পেয়ে আনন্দিত হতে পারি, তবে আমি আজ বিশ্বাস করতে পারছি না যে এতটুকু বিশ্বাস করি!


14
(there is no more a market for proprietary compilersভিজ্যুয়াল স্টুডিও টিমকে এটি বলুন ...
ম্যাসন হুইলারের

18
মাইক্রোসফ্ট একচেটিয়া আছে। আমি বোঝাতে চাইছি যে নতুন সংস্থাগুলি বিকাশকারী ছোট সংস্থাগুলি তাদের প্রচুর বিক্রি করবে না। আপনি কি এমএসভিসির সাম্প্রতিক মালিকানাধীন প্রতিযোগীর নাম বলতে পারবেন?
বেসিল স্টারিনকিভিচ

12
এইচপিসি বিশ্বে অনেক মালিকানাধীন সংকলক রয়েছে। পিজিসিসি, এনএজি এবং আইসিসি সবচেয়ে বেশি ব্যবহৃত হয়।
ডেভিডমহ

37
@ মেসনহিলার: আজকাল ভিয়ারকে বিনামূল্যে দেওয়া হয় (বিয়ারের মতো)। নিখরচায় সংস্করণগুলি টুলিং যুক্ত করে তবে ভিএস ২০১৩-এর সি সংকলক সমস্ত সংস্করণে একই। এখানে কেবল বাজার নেই, এমনকি তাদের জন্যও নয়।
এমসাল্টার্স

3
তবে জিসিসি এবং এলএলভিএম উভয়ই অনেক কম উপস্থাপনার উপর কাজ করছে এবং তারা একইভাবে সি ++ এবং সি (এবং জেডিসির জন্য অ্যাডা এবং ফোর্টরান) কোডটি অপ্টিমাইজ করে। আমি বিপরীতে বলতে চাই যে সি ++ এর চেয়ে সিটির চেয়ে আরও বেশি অপ্টিমাইজেশন প্রয়োজন (বিশেষত কোডটি এসটিএল ব্যবহার করে সংকলন করার সময়)!
বেসিল স্টারিনকিভিচ

70

আমি আপনার অন্তর্নিহিত ধারণাটি প্রতিদ্বন্দ্বিতা করতে চাই যে কেবলমাত্র কয়েকটি সি সি বাস্তবায়ন রয়েছে।

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

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

.তিহ্যগতভাবে, প্রতিটি ওএস বিক্রেতা এবং প্রতিটি চিপ বিক্রেতার নিজস্ব সংকলক ছিল had মাইক্রোসফ্ট, ওএস বিক্রেতা হিসাবে, মাইক্রোসফ্ট ভিজ্যুয়াল সি আইবিএম রয়েছে, যেমন একটি ওএস বিক্রেতা এবং একটি চিপ বিক্রেতা উভয়ই এক্সএলসি (যা এআইএক্সের জন্য ডিফল্ট সিস্টেম সংকলক, এবং সংকলক যার সাথে AIX এবং i / OS উভয়ই সংকলিত রয়েছে) । ইন্টেলের নিজস্ব সংকলক রয়েছে। সান স্টুডিওতে সান / ওরাকলের নিজস্ব সংকলক রয়েছে।

তারপরে, প্যাথস্কেল এবং দ্য পোর্টল্যান্ড গ্রুপের মতো উচ্চ-সম্পাদনা সংকলক বিক্রেতারা রয়েছেন, যাদের সংকলক (এবং ওপেনএমপি লাইব্রেরি) নম্বর ক্র্যাঞ্চিংয়ের জন্য ব্যবহৃত হয়।

ডিজিটাল মঙ্গলও এখনও ব্যবসায় রয়েছে। আমি বিশ্বাস করি যে ওয়াল্টার ব্রাইটের গ্রহের একমাত্র ব্যক্তি হওয়ার এক অনন্য বৈশিষ্ট্য রয়েছে যিনি নিজেই একটি উত্পাদন-মানের সি ++ সংকলক তৈরি করেছিলেন (বেশিরভাগ)।

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

সম্মানসূচক উল্লেখ ট্রলফ্লিসির কাছে যায় , জেভিএম (!) এর উপর লেখা সি সি ইন্টারপ্রেটার (!) ট্রফল এএসটি ইন্টারপ্রেটার ফ্রেমওয়ার্ক ব্যবহার করে লেখা হয় যা জিসিসি এবং ক্ল্যাংয়ের (যা নির্দিষ্ট কোনও মানদণ্ডে সবচেয়ে দ্রুততম) সবচেয়ে কম fas কম্পিউটার ল্যাঙ্গুয়েজ বেঞ্চমার্ক গেম এবং মাইক্রোব্যাঙ্কমার্কে উভয়ের চেয়ে দ্রুত। ট্রুফল সি ব্যবহার করে, ট্রফল টিম রুবি সি এক্সটেনশনগুলি বাস্তব সি রুবি বাস্তবায়নের চেয়ে দ্রুত কার্যকর করতে তাদের JRuby + Truffle এর সংস্করণ পেতে সক্ষম হয়েছিল!

সুতরাং, আপনি তালিকাভুক্ত হওয়াগুলি ছাড়াও এগুলি 6 টি বাস্তবায়ন যা আমি সি সম্পর্কে কিছু না জেনেও আমার মাথার উপরের অংশটি নামিয়ে রাখতে পারি can


1
মাইক্রোসফ্ট ভিজ্যুয়াল সি এর বাইরে আপনার উল্লেখ করা বেশিরভাগ সি সংকলক খুব কমই ব্যবহৃত হয়।
বেসাইল স্টারিঙ্কেভিচ

6
এমএসভিসি হ'ল বড় সি ++ সংকলক, তবে সি এর জন্য এটি ব্যবহার করা শক্ত এবং স্থায়ীভাবে সি 98 এ আটকে যায়; মাইক্রোকন্ট্রোলার সংকলক সাধারণত লক্ষ্য নির্দিষ্ট, সি 98 এবং আটকে থাকা আটকে থাকে; TruffleC এখনও উপলব্ধ বলে মনে হচ্ছে না (তবে আকর্ষণীয়, ধন্যবাদ)। প্যাথস্কেল এবং ডিজিটাল মার্সের মতো ধরণের কাউন্টারিক্সের উদাহরণগুলি আমি সন্ধান করছি বলে মনে হয়।
লেউশেনকো

8
@ মারিওর অর্থ আমার এই নয় যে সি 98 টি ভাঙ্গা হয়েছে, তবে সি 89 ভাষার আপ-টু-ডেট রূপ নয়; এবং এর অর্থ হ'ল কম সংকলক যা আপ টু ডেট রয়েছে।
Leushenko

6
@ লুশেনকো এমএসভিসি সি 98-এ স্থায়ীভাবে আটকে নেই। কিছু আলোচনা হয়েছে এবং আরও C99 বৈশিষ্ট্য যুক্ত করা উচিত। প্রারম্ভিকদের জন্য, বেশিরভাগ সি 99 লাইব্রেরি এমএসভিসি 2015 এবং কয়েকটি ভাষার বৈশিষ্ট্য হিসাবে সমর্থিত (মূলত সি ++ 11 এর জন্য প্রয়োজনীয় জিনিসগুলি) supported
মরউভেন

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

8

আপনার কত সংকলক দরকার?

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

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

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


1
এটি স্পষ্টত যে একটি এমএল সংকলক বিকাশের আরও আকর্ষণীয় কারণ রয়েছে ... আমি কেবল ভেবেছিলাম যে সি সম্প্রদায় সম্ভবত তিনটি বৃহত্তর আকারের হওয়ার কারণে সেই প্রভাবটি ভারসাম্য বজায় রাখবে। তবে আপনি ঠিক থাকতে পারেন, 1000 * 0এখনও আছে 0
Leushenko

একটি নতুন সংকলক তৈরি করা প্রায়শই সম্প্রদায়ের টুকরো টুকরো করার সাথে সংযুক্ত থাকে (হয় কারণে বা কারণে)। উদাহরণস্বরূপ, egcs বনাম জিসিসি রক্ষণাবেক্ষণকারী বিভাজন। এছাড়াও, সি উত্স সামঞ্জস্যতা 100% এর নীচে থাকে।
pjc50

@ পিজেসি 50: যেভাবে স্ট্যান্ডার্ডটি কার্যকরভাবে রচিত হয় সেটিকে মৌলিক ধরণের মতো বিষয়ের উপর ভিত্তি করে কয়েকটি বিচ্ছিন্ন উপভাষায় বিভক্ত করা হয় intএবং একই উত্স কোডটি খুব আলাদা উপায়ে ব্যাখ্যা করতে বিভিন্ন সংকলক প্রয়োজন।
সুপারক্যাট

5
আমি বিশ্বাস করি, গোতে দুটি বাস্তবায়ন হয়েছে ( 6g/ 8g/… সরঞ্জামচেইন এবং জিসিসিগো)। এরগো নামে পরিচিত একটি অত্যন্ত আকর্ষণীয় মালিকানাধীন বাণিজ্যিক বাস্তবায়নও ব্যবহৃত হত, যা ক) একটি সময়ে গো-র একটি নেটিভ উইন্ডোজ বাস্তবায়ন যখন উইন্ডোজে জিসিসিগো বা আসল গো সংকলক খুব ভাল কাজ করেনি, খ) গো-তে বাজি ধরেছিল এমন একটি সংস্থা এটি এমনকি ১.০ হওয়ার আগে এবং গ) গো-র প্রথম প্রয়োগ (জিসিসিগো এবং g জি / ৮ জি উভয়ই সি-তে লিখিত)। প্রজেক্ট এবং সংস্থা উভয়ই নিখোঁজ হয়েছিল, এমনকি তারা বন্ধ বিটা থেকে বের হওয়ার আগেই।
Jörg ডব্লু মিটাগ

6

সি / সি ++ সংকলিত ভাষার মধ্যে স্বতন্ত্র যে এতে একটি সাধারণ স্পেসিফিকেশনের 3 টি বড় বাস্তবায়ন রয়েছে implement

যেটি খুব বেশি ব্যবহৃত হয় না তা খারিজের নিয়ম অনুসারে প্রতিটি অন্যান্য সংকলিত ভাষাতে 0 থেকে 1 থাকে has

এবং আমি মনে করি জাভাস্ক্রিপ্টই কেবল আপনাকে 'সংকলিত' নির্দিষ্ট করার প্রয়োজন।


2
"সি" লেবেলটি বিভিন্ন ভাষার বিভিন্ন ক্ষেত্রে প্রয়োগ করা হয়; কিছু কোড নির্ধারণ uint16_t a=48000u; unsigned uint32_t b=(a*a)/2;করার বরাদ্দ হিসাবে bমান 8192. কিছু বরাদ্দ 1152000000. সর্বাধিক আজকাল অনির্ধারিত আচরণ যেমন বিবেচনা, এবং 3299483648 সংরক্ষণ কিন্তু যে বিষয়ে কোন প্রতিশ্রুতি করতে সম্ভবত যেমন নির্ধারণ করুন।
সুপারক্যাট

1
@ সুপের্যাট: আহ, ওভারফ্লো এবং পূর্ণসংখ্যার প্রচারের নিয়ম সহ একটি দুর্দান্ত অদ্ভুত। এটি ব্যবহার 2বা 2uদৃশ্যত উপর নির্ভর করে ।
জ্যান লিংস

1
@ জ্যানলিনেক্স: আমার মনে হয় এমন কোনও মামলা নেই যেখানে 2 বনাম 2u বৈধভাবে বিবেচনা করে; আমি জানি কেবলমাত্র এটির ক্ষেত্রে 2 এবং 2u উভয়ের সাথেই অনির্ধারিত আচরণ জড়িত।
সুপারক্যাট

3
@ সুপের্যাট: আপনি কীভাবে অপরিবর্তিত আচরণ পাবেন /2u? স্বাক্ষরযুক্ত ওভারফ্লোটি সংজ্ঞায়িত করা হয় (প্রয়োগ-সংজ্ঞায়িত এন জন্য মডুলো 2 ^ N হিসাবে) তবে বিভাগ এমনকি ওভারফ্লোও করতে পারে না।
এমসাল্টার

2
অপরিজ্ঞাত আচরণটি এমন মানের গুণাগুণ থেকে আসে যা স্বাক্ষরে উন্নীত হবে int, তবে যার পণ্যটি এই ধরণের মানায় না। স্বাক্ষরবিহীন ইন্টিতে সেই ফলাফলকে বাধ্য করা ফলাফলের মানটির ব্যাখ্যা বদলে দিতে পারে, তবে পূর্ববর্তী গণনা থেকে অনির্ধারিত আচরণকে অস্বীকার করবে না।
ক্যাট

5

সুতরাং আপনার লক্ষ্য ভাষা কি?

এসএমএল সংকলকরা প্রায়শই সি বা এলএলভিএম এর মতো কিছু লক্ষ্য করে থাকে (বা আপনার লিঙ্কটিতে দেখা যায়, জেভিএম বা জাভাস্ক্রিপ্ট)।

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

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


এসএমএল / এনজে এবং পলিমিএল উভয়ই মেশিন কোডে সংকলন করছে ...
বেসাইল স্টারিঙ্কেভিচ

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

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

@ এসএমএল্টাররা বেশিরভাগ লোক int32 বা 64 বিটের আশা করেন তবে এটি 16 বিটের মতো ছোট হতে পারে। এটা তোলে পরিসীমা বাইরে একটি সংখ্যা উত্পাদন করতে এ সব কঠিন না [−32767, +32767]এবং intওভারফ্লো UB হয়। মূল ধরণের প্রতিটি মান উপস্থাপন করতে পারে কিনা তার উপরও char/ shortপ্রচারিত হওয়া int বা তার unsigned int উপর নির্ভর করে অপারেন্ডদের বিভিন্ন ধরণের থাকে এবং আলাদাভাবে intরূপান্তরিত intহয় unsigned intতবে আরও থেকে রূপান্তরকে ট্রিগার করতে পারে , পাশাপাশি আপনি যখন কোনও পরিবর্তনকে ফলাফল নির্ধারণ করেন তখন সম্ভাব্য অন্য রূপান্তর ।
ডোভাল

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