এটি একটি এসও প্রশ্ন হিসাবে শুরু হয়েছিল তবে আমি বুঝতে পেরেছিলাম যে এটি বেশ প্রচলিত এবং ওয়েবসাইটগুলিতে প্রকৃত বিবরণের ভিত্তিতে এটি প্রোগ্রামারদের পক্ষে আরও উপযুক্ত হতে পারে কারণ প্রশ্নটির ধারণাটি অনেক বেশি weight
আমি ল্যাংটুলিং শিখছি এবং এটি একটি খুব শক্তিশালী সরঞ্জাম যা কোডটির সম্পূর্ণ "নিত্তৃতাকরতা" কে বন্ধুত্বপূর্ণ উপায়ে, অর্থাত্ শব্দার্থক উপায়ে প্রকাশ করতে সক্ষম, না হয় অনুমান করেই। যদি বিড়ম্বনাটি আপনার কোডটি সংকলন করতে পারে তবে সেই কোডের অভ্যন্তরে প্রতিটি অক্ষরের শব্দার্থকতা সম্পর্কে ঝাঁকুনি নিশ্চিত ।
এখন আমাকে এক মুহুর্তের জন্য পিছনে যেতে দিন।
যখন C ++ টেম্পলেট মেটাপোগ্র্যামিংয়ে নিযুক্ত হয় (এবং বিশেষত ভয়াবহ ম্যাক্রোগুলির অঞ্চলতেও টেমপ্লেটগুলি পেরিয়ে বেরিয়ে আসার সময়) অনেকগুলি ব্যবহারিক সমস্যা দেখা দেয়। সত্য কথা বলতে গেলে, অনেক প্রোগ্রামারদের কাছে আমি নিজেই অন্তর্ভুক্ত থাকি, টেমপ্লেটের প্রচলিত সাধারণ ব্যবহারগুলি কিছুটা ভীতিজনকও হয়।
আমি অনুমান করি একটি ভাল উদাহরণ সংকলন সময় স্ট্রিং হবে । এটি এমন একটি প্রশ্ন যা এখন এক বছরেরও বেশি পুরানো, তবে এটি স্পষ্ট যে সি ++ এই মুহূর্তে নিখরচিক প্রাণীদের পক্ষে এটিকে সহজ করে না। এই বিকল্পগুলি সন্ধান করা আমার পক্ষে বমিভাবকে উত্সাহিত করার পক্ষে যথেষ্ট নয়, তবুও এটি আমার সফ্টওয়্যারটির জন্য আমার অভিনব অ্যাপ্লিকেশনটির জন্য উপযুক্ত যাদুকর, সর্বাধিক দক্ষ মেশিন কোড উত্পাদন করতে সক্ষম হওয়া সম্পর্কে আমাকে অনিশ্চিত করে ফেলে।
মানে, আসুন আমরা এটির মুখোমুখি হই, লোকেরা, স্ট্রিংগুলি বেশ সহজ এবং মৌলিক। আমাদের মধ্যে কিছু লোক কেবল মেশিন কোড নির্গত করার জন্য একটি সহজ উপায় চান যা নির্দিষ্ট স্ট্রিংগুলি "বেকড" থাকে যা এটিকে সোজা পথের কোডিংয়ের তুলনায় আমাদের তুলনায় উল্লেখযোগ্য পরিমাণে বেশি। আমাদের সি ++ কোডে।
ঝনঝন এবং লিবিটুলিং প্রবেশ করুন, যা উত্স কোডটির বিমূর্ত সিনট্যাক্স ট্রি (এএসটি) উন্মোচিত করে এবং একটি সাধারণ কাস্টম সি ++ অ্যাপ্লিকেশনটিকে Rewriter
এএসটি-র প্রতিটি কিছুর সমৃদ্ধ শব্দার্থ-কেন্দ্রিক মডেলের পাশাপাশি কাঁচা উত্স কোড (ব্যবহার করে ) সঠিকভাবে এবং নির্ভরযোগ্যভাবে ম্যানিপুলেট করতে দেয়। এটি অনেক কিছুই পরিচালনা করে। এটি ম্যাক্রো সম্প্রসারণ সম্পর্কে জানে এবং আপনাকে সেই চেইনগুলি অনুসরণ করতে দেয়। হ্যাঁ, আমি উত্স থেকে উত্স কোড রূপান্তর বা অনুবাদ সম্পর্কে বলছি।
আমার মৌলিক থিসিসটি এখানে যে ঝাঁকুনি এখন আমাদের এক্সিকিউটেবলগুলি তৈরি করতে সক্ষম করে যা তারা আমাদের সি ++ সফ্টওয়্যারটিতে আদর্শ কাস্টম প্রিপ্রসেসর পর্যায় হিসাবে কাজ করতে পারে এবং আমরা সি ++ সহ এই রূপান্তরকেন্দ্রগুলি বাস্তবায়ন করতে পারি। আমরা কেবল এই বিষয়টির দ্বারা আবদ্ধ হয়েছি যে এই পর্যায়ে অবশ্যই বৈধ সি ++ কোডের ইনপুট নিতে হবে এবং আরও কার্যকর সি ++ কোড হিসাবে আউটপুট তৈরি করতে হবে। প্লাস আপনার বিল্ড সিস্টেম প্রয়োগ করে অন্য যে কোনও প্রতিবন্ধকতা প্রয়োগ করে।
ইনপুটটি কমপক্ষে বৈধ সি ++ কোডের খুব কাছাকাছি থাকতে হবে কারণ সর্বোপরি ঝাঁকুনিটি সংকলকটি ফ্রন্ট-এন্ড এবং আমরা কেবল তার চারপাশে ঝাঁকিয়ে পড়েছি এবং এর এপিআই সহ সৃজনশীল হচ্ছি। আমি জানি না যে নতুন সিনট্যাক্সটি ব্যবহারের জন্য সংজ্ঞায়িত করতে সক্ষম হওয়ার কোনও বিধান রয়েছে কিনা, তবে স্পষ্টত আমাদের এটির জন্য সঠিকভাবে পার্স করার এবং ঝনঝন প্রকল্পে যুক্ত করার উপায়গুলি বিকাশ করতে হবে। আরও কিছু প্রত্যাশা করা ঝনঝন প্রকল্পে এমন কিছু রয়েছে যা সুযোগের বাইরে।
কোন সমস্যা নেই. আমি কল্পনা করব যে কোনও কোনও অপ-ম্যাক্রো ফাংশন এই কাজটি পরিচালনা করতে পারে।
আমি যা বর্ণনা করছি তা দেখার আরেকটি উপায় হ'ল ভাষায় উপলব্ধ আরও সীমাবদ্ধ সরঞ্জামগুলি ব্যবহার করে আমাদের উত্স কোডের এসএসটি (ঝনঝন এবং তার API এর ধন্যবাদ) ব্যবহার করে রানটাইম সি ++ ব্যবহার করে মেটাপোগ্র্যামিং কনস্ট্রাক্টগুলি বাস্তবায়ন করা। এর স্পষ্ট সংকলন কর্মক্ষমতা সুবিধাও রয়েছে (টেমপ্লেট-ভারী শিরোনামগুলি আপনি কত ঘন ঘন ব্যবহার করেন তার আনুপাতিকভাবে ধীরে সংকলন। প্রচুর সংকলিত স্টাফগুলি সাবধানতার সাথে মিলে যায় এবং লিঙ্কার দ্বারা ফেলে দেওয়া হয়)।
এটি অবশ্য বিল্ড প্রসেসে অতিরিক্ত পদক্ষেপ বা দু'টি প্রবর্তন করার জন্য ব্যয় করে এবং কিছু (স্বীকারোক্তি সহ) আরও কিছু ভার্বোস সফ্টওয়্যার লেখার প্রয়োজনে (তবে অন্তত এটি সরলতম রানটাইম সি ++) আমাদের সরঞ্জামের অংশ হিসাবে ।
এটি পুরো ছবি নয়। আমি বেশ নিশ্চিত যে কার্যকারিতার অনেক বড় জায়গা রয়েছে যা মূল ভাষা বৈশিষ্ট্যগুলির সাথে অত্যন্ত কঠিন বা অসম্ভব কোড তৈরি করা থেকে পাওয়া যেতে পারে। সি ++ এ আপনি কোনও টেমপ্লেট বা ম্যাক্রো বা উভয়ের পাগল সংমিশ্রণ লিখতে পারেন, তবে একটি ঝনঝন সরঞ্জামে আপনি ক্লাস এবং ক্রিয়াকলাপগুলি যে কোনও উপায়ে সি ++ এর সাথে অর্জন করতে পারবেন, রানটাইমে , যখন শব্দার্থক সামগ্রীতে সম্পূর্ণ অ্যাক্সেস পেয়ে থাকতে পারেন, টেমপ্লেট এবং ম্যাক্রো এবং অন্যান্য কিছুর পাশাপাশি ।
সুতরাং, আমি ভাবছি কেন সবাই ইতিমধ্যে এটি করছে না। ঝাঁকুনির এই কার্যকারিতাটি কি এতটা নতুন এবং ঝড়ের এএসটির বিশাল শ্রেণীর শ্রেণিবিন্যাসের সাথে কেউ পরিচিত নয়? এটা হতে পারে না।
সম্ভবত আমি এইটির অসুবিধাটি কেবল একটু কমই দেখছি, তবে একটি ঝাঁকুনির সরঞ্জাম দিয়ে "সংকলন-সময়ের স্ট্রিং ম্যানিপুলেশন" করা প্রায় ফৌজদারী সহজ। এটি ভার্জোজ, তবে এটি অত্যন্ত সোজাসাপ্টা। যা দরকার তা হ'ল একচেটিয়া অপ-ম্যাক্রো ফাংশন যা প্রকৃত বাস্তব std::string
ক্রিয়াকলাপে ম্যাপ করে। ক্ল্যাং প্লাগইনটি প্রাসঙ্গিক নো-ওপেন ম্যাক্রো কল আনার মাধ্যমে এটি প্রয়োগ করে এবং স্ট্রিং সহ ক্রিয়াকলাপ সম্পাদন করে। এই সরঞ্জামটি তখন বিল্ড প্রক্রিয়াটির অংশ হিসাবে .োকানো হয়। বিল্ড করার সময়, এই কোনও অপ-ম্যাক্রো ফাংশন কলগুলি তাদের ফলাফলগুলিতে স্বয়ংক্রিয়ভাবে মূল্যায়ন করা হয় এবং তারপরে প্রোগ্রামটিতে প্লেইন পুরাতন সংকলন-সময়ের স্ট্রিং হিসাবে ফিরে .োকানো হয়। প্রোগ্রামটি যথারীতি সংকলিত হতে পারে। আসলে এই ফলস্বরূপ প্রোগ্রামটি ফলস্বরূপ অনেক বেশি পোর্টেবল, সি ++ 11 সমর্থনকারী অভিনব নতুন সংকলক প্রয়োজন হয় না।