আজকে আপনার অনুকূলকরণ সংকলক হতে একটি সত্যিকারের সি সংকলক প্রয়োজন , বিশেষত কারণ সি আর হার্ডওয়্যারটির কাছাকাছি কোনও ভাষা নেই, কারণ বর্তমান প্রসেসরগুলি অবিশ্বাস্যরকম জটিল ( আউট-অফ-অর্ডার , পাইপলাইনযুক্ত , সুপারক্যালার , জটিল ক্যাশে এবং টিএলবি সহ , অতএব , নির্দেশের সময়সূচী ইত্যাদি প্রয়োজন ...)। আজকের x86 প্রসেসরগুলি পূর্ববর্তী শতাব্দীর i386 প্রসেসরের মতো নয়, এমনকি যদি উভয়ই একই মেশিন কোড চালাতে সক্ষম হয়। দেখুন ডেভিড চিসনালের সি কোনও নিম্ন স্তরের ভাষা নয় (আপনার কম্পিউটারটি দ্রুত পিডিপি -11 নয়) paper
খুব কম লোক নিখরচায় অ-অপ্টিমাইজ করা সি সংকলক যেমন টিনিসিসি বা এনডব্লিউসিসি ব্যবহার করছে , যেহেতু তারা কোড তৈরি করে যা সংযোজনকারীরা অপ্টিমাইজ করতে পারে তার চেয়ে কয়েকগুণ ধীর হয়।
একটি অনুকূলিতকরণ সংকলক কোডিং কঠিন। লক্ষ্য করুন যে জিসিসি এবং ক্ল্যাং উভয়ই কিছু "উত্স ভাষা-নিরপেক্ষ" কোড উপস্থাপনা (জিম্পলের জন্য জিম্পল, ক্ল্যাংয়ের জন্য এলএলভিএম) অপ্টিমাইজ করছে। একটি ভাল সি সংকলকের জটিলতা পার্সিং পর্যায়ে নেই!
বিশেষত, সি ++ কম্পাইলার তৈরি করা সি-কম্পাইলার তৈরির চেয়ে বেশি শক্ত নয়: সি ++ পার্স করা এবং কিছু অভ্যন্তরীণ কোড উপস্থাপনায় রূপান্তর করা জটিল (কারণ সি ++ স্পেসিফিকেশন জটিল) তবে ভালভাবে বোঝা গেছে তবে অপ্টিমাইজেশনের অংশগুলি আরও বেশি জটিল (জিসিসির অভ্যন্তরে: মাঝের প্রান্তের অপ্টিমাইজেশন, উত্স-ভাষা এবং টার্গেট-প্রসেসর নিরপেক্ষ) সংকলকটির বেশিরভাগ অংশ গঠন করে, বাকী অংশগুলি বেশ কয়েকটি ভাষার জন্য সামনের দিকে এবং বেশ কয়েকটি প্রসেসরের ব্যাক- এন্ডের মধ্যে ভারসাম্যপূর্ণ থাকে । অতএব সর্বাধিক অনুকূলকরণকারী সি সংকলকগুলি সি ++, ফোরট্রান, ডি, ... এর মতো আরও কয়েকটি ভাষাও সংকলন করতে সক্ষম হয় ... জিসিসির সি ++ নির্দিষ্ট অংশগুলি সংকলকটির প্রায় 20% ...
এছাড়াও, সি (বা সি ++) এত ব্যাপকভাবে ব্যবহৃত হয় যে লোকেদের কোডটি সরকারী মানগুলি ঠিকমতো অনুসরণ না করেও তাদের কোডটি সংকলনযোগ্য হওয়ার প্রত্যাশা করে, যা ভাষার যথার্থভাবে শব্দার্থক সংজ্ঞা দেয় না (সুতরাং প্রতিটি সংকলকটির নিজস্ব ব্যাখ্যা থাকতে পারে) এর)। মধ্যে এছাড়াও দেখুন CompCert সি কম্পাইলার বলে প্রমাণিত হয়েছিল, Frama-সি স্ট্যাটিক বিশ্লেষক, যা আরো প্রথাগত যত্নশীল শব্দার্থবিদ্যা সি
এবং অপ্টিমাইজেশানগুলি একটি দীর্ঘ-পুচ্ছ ঘটনা: কয়েকটি সাধারণ অপ্টিমাইজেশান বাস্তবায়ন করা সহজ তবে তারা সংকলককে প্রতিযোগিতামূলক করে তুলবে না! প্রতিযোগিতামূলক এমন একটি বাস্তব-বিশ্বের সংকলক পেতে আপনাকে অনেকগুলি বিভিন্ন অপ্টিমাইজেশান বাস্তবায়ন করতে হবে এবং চালাকতার সাথে সেগুলি সংগঠিত এবং একত্রিত করতে হবে। অন্য কথায়, একটি বাস্তব-বিশ্বের অপ্টিমাইজ করা সংকলকটি সফ্টওয়্যারের একটি জটিল অংশ হতে হবে। বিটিডাব্লু, জিসিসি এবং ক্ল্যাং / এলএলভিএম উভয়েরই বেশ কয়েকটি অভ্যন্তরীণ বিশেষায়িত সি / সি ++ কোড জেনারেটর রয়েছে। এবং উভয়ই একটি বিশাল বিকাশকারী সম্প্রদায়ের (কয়েকশো ব্যক্তি, বেশিরভাগ সময়কালীন, বা কমপক্ষে অর্ধ-সময়) কাজ করে এমন বিশাল জন্তু (প্রতি বছর কয়েক শতাংশের বৃদ্ধির হারের সাথে কোডের কয়েক মিলিয়ন উত্স রেখা))
লক্ষ্য করুন যে কোনও (আমার জ্ঞানের সর্বোত্তম অংশে) মাল্টি-থ্রেড সি সংকলক নেই, এমনকি যদি কোনও সংকলকটির কিছু অংশ সমান্তরালভাবে চালানো যেতে পারে (যেমন অন্তঃ-প্রক্রিয়াগত অপ্টিমাইজেশন, নিবন্ধকরণ বরাদ্দ, নির্দেশের সময়সূচী ...)। এবং সমান্তরাল বিল্ড make -j
সর্বদা পর্যাপ্ত হয় না (বিশেষত এলটিও সহ )।
এছাড়াও, স্ক্র্যাচ থেকে সি সংকলক কোডিংয়ের জন্য অর্থায়ন করা কঠিন এবং এই জাতীয় প্রচেষ্টা কয়েক বছর স্থায়ী হওয়া দরকার। শেষ অবধি, বেশিরভাগ সি বা সি ++ সংকলক আজ নিখরচায় সফ্টওয়্যার (স্টার্টআপস দ্বারা বিক্রি হওয়া নতুন মালিকানাধীন সংকলকগুলির জন্য আর বাজার নেই) বা কমপক্ষে একচেটিয়া পণ্য (যেমন মাইক্রোসফ্ট ভিজ্যুয়াল সি ++ এর মতো ), এবং একটি নিখরচায় সফ্টওয়্যার হওয়া প্রায়শই কম্পাইলারদের জন্য প্রয়োজনীয় ( কারণ তাদের বিভিন্ন সংস্থার অবদানের দরকার আছে)।
আমি বিনামূল্যে সফ্টওয়্যার হিসাবে স্ক্র্যাচ থেকে সি সংকলকটিতে কাজ করার জন্য তহবিল পেয়ে আনন্দিত হতে পারি, তবে আমি আজ বিশ্বাস করতে পারছি না যে এতটুকু বিশ্বাস করি!