সি ++: সি ++ বৈশিষ্ট্যগুলির চেয়ে একটি সংকলক এপিআই দিয়ে ধাতব প্রোগ্রামিং


10

এটি একটি এসও প্রশ্ন হিসাবে শুরু হয়েছিল তবে আমি বুঝতে পেরেছিলাম যে এটি বেশ প্রচলিত এবং ওয়েবসাইটগুলিতে প্রকৃত বিবরণের ভিত্তিতে এটি প্রোগ্রামারদের পক্ষে আরও উপযুক্ত হতে পারে কারণ প্রশ্নটির ধারণাটি অনেক বেশি weight

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

এখন আমাকে এক মুহুর্তের জন্য পিছনে যেতে দিন।

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

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

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

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

আমার মৌলিক থিসিসটি এখানে যে ঝাঁকুনি এখন আমাদের এক্সিকিউটেবলগুলি তৈরি করতে সক্ষম করে যা তারা আমাদের সি ++ সফ্টওয়্যারটিতে আদর্শ কাস্টম প্রিপ্রসেসর পর্যায় হিসাবে কাজ করতে পারে এবং আমরা সি ++ সহ এই রূপান্তরকেন্দ্রগুলি বাস্তবায়ন করতে পারি। আমরা কেবল এই বিষয়টির দ্বারা আবদ্ধ হয়েছি যে এই পর্যায়ে অবশ্যই বৈধ সি ++ কোডের ইনপুট নিতে হবে এবং আরও কার্যকর সি ++ কোড হিসাবে আউটপুট তৈরি করতে হবে। প্লাস আপনার বিল্ড সিস্টেম প্রয়োগ করে অন্য যে কোনও প্রতিবন্ধকতা প্রয়োগ করে।

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

কোন সমস্যা নেই. আমি কল্পনা করব যে কোনও কোনও অপ-ম্যাক্রো ফাংশন এই কাজটি পরিচালনা করতে পারে।

আমি যা বর্ণনা করছি তা দেখার আরেকটি উপায় হ'ল ভাষায় উপলব্ধ আরও সীমাবদ্ধ সরঞ্জামগুলি ব্যবহার করে আমাদের উত্স কোডের এসএসটি (ঝনঝন এবং তার API এর ধন্যবাদ) ব্যবহার করে রানটাইম সি ++ ব্যবহার করে মেটাপোগ্র্যামিং কনস্ট্রাক্টগুলি বাস্তবায়ন করা। এর স্পষ্ট সংকলন কর্মক্ষমতা সুবিধাও রয়েছে (টেমপ্লেট-ভারী শিরোনামগুলি আপনি কত ঘন ঘন ব্যবহার করেন তার আনুপাতিকভাবে ধীরে সংকলন। প্রচুর সংকলিত স্টাফগুলি সাবধানতার সাথে মিলে যায় এবং লিঙ্কার দ্বারা ফেলে দেওয়া হয়)।

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

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

সুতরাং, আমি ভাবছি কেন সবাই ইতিমধ্যে এটি করছে না। ঝাঁকুনির এই কার্যকারিতাটি কি এতটা নতুন এবং ঝড়ের এএসটির বিশাল শ্রেণীর শ্রেণিবিন্যাসের সাথে কেউ পরিচিত নয়? এটা হতে পারে না।

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


এটি একটি অস্বাভাবিক দীর্ঘ প্রশ্ন। আপনি সম্ভবত এটি আপনার সবচেয়ে প্রাসঙ্গিক বিষয়গুলিকে ঘনীভূত করতে পারেন?
আমন

আমি অনেক দীর্ঘ প্রশ্ন পোস্ট করি। তবে বিশেষত এইটির সাথে, প্রশ্নের সমস্ত অংশই গুরুত্বপূর্ণ, আমি মনে করি। প্রথম 6 অনুচ্ছেদটি এড়িয়ে যেতে পারেন? হা হা।
স্টিভেন লু

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

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

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

উত্তর:


7

হ্যাঁ, ভার্জিনিয়া, সান্তা ক্লজ রয়েছে।

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

লোকেরা সাধারণত উত্স কোডটি পরিবর্তন করতে চায় । এটি বেশিরভাগ প্রোগ্রাম রূপান্তর সিস্টেম (পিটিএস) আকারে উপলব্ধি করা হয় ।

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

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

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

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

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

আপনি যা চান তা উভয় বিশ্বের সেরা, এমন একটি সিস্টেম যা আপনাকে ভাষা-প্যারামিটারাইজড ধরণের পিটিএস (এমনকি একাধিক ভাষাগুলি পরিচালনা করে) এর সাধারণতা সরবরাহ করে, অতিরিক্ত স্ট্যাটিক বিশ্লেষণ সহ, প্রক্রিয়াগতের সাথে উত্স থেকে উত্স রূপান্তরগুলি মিশ্রিত করার ক্ষমতা Apis। আমি কেবল দুজনকে জানি যারা এটি করে:

  • রাস্কাল (এমপিএল) মেটাপ্রগ্রামিং ভাষা Language
  • আমাদের ডিএমএস সফ্টওয়্যার পুনর্নির্ধারণের সরঞ্জামদণ্ড

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

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

আমি জোর দিয়েছি, আমাদের [বাণিজ্যিক] ডিএমএস সরঞ্জামটিতে জাভা, সি, সি ++ সম্পূর্ণ সম্মুখ প্রান্ত উপলব্ধ রয়েছে। সি ++ এর জন্য, এটি জিসিসি এবং এমনকি মাইক্রোসফ্টের বৈচিত্রগুলি (এবং আমরা এখন পলিশ করছি), ম্যাক্রো সম্প্রসারণ এবং শর্তসাপেক্ষ ব্যবস্থাপনা এবং পদ্ধতি-স্তরের নিয়ন্ত্রণ এবং ডেটা প্রবাহ বিশ্লেষণের জন্য সি +++ এর প্রায় সমস্ত কিছুই কভার করে। এবং হ্যাঁ, আপনি ব্যবহারিক উপায়ে ব্যাকরণ পরিবর্তনগুলি নির্দিষ্ট করতে পারেন ; আমরা একটি ক্লায়েন্টের জন্য একটি কাস্টম ভেক্টর ++ সিস্টেম তৈরি করেছি যা F90 / APL ডেটা-সমান্তরাল অ্যারে ক্রিয়াকলাপগুলিতে কোন পরিমাণ ব্যবহার করতে সি ++কে মূলত প্রসারিত করেছিল। ডিএমএস বৃহত সি ++ সিস্টেমে (যেমন, অ্যাপ্লিকেশন আর্কিটেকচারাল পুনঃনির্মাণ) অন্যান্য বৃহত রূপক কার্য সম্পাদন করতে ব্যবহৃত হয়। (আমি ডিএমএসের পিছনে স্থপতি)।

হ্যাপি মেটা-মেটাপ্রোগ্রামিং।


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

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

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

আপনি তাজা থেকে কলঙ্ক বা ডিএমএসের মতো সরঞ্জাম তৈরি করতে পারবেন না। অথবা আপনি সাধারণত 5 বছরেরও বেশি সময় ধরে 10 টি দলের সাথে যে অ্যাপ্লিকেশনটি লিখেছিলেন তা নিক্ষেপ করতে পারবেন না। সফ্টওয়্যার আকার এবং লাইফটাইম ক্রমবর্ধমান অবিরত হিসাবে আমাদের আরও বেশি বার এই জাতীয় সরঞ্জামের প্রয়োজন হবে।
ইরা

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

4

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

সুতরাং, আমি ভাবছি কেন সবাই ইতিমধ্যে এটি করছে না। ঝাঁকুনির এই কার্যকারিতাটি কি এতটা নতুন এবং ঝড়ের এএসটির বিশাল শ্রেণীর শ্রেণিবিন্যাসের সাথে কেউ পরিচিত নয়? এটা হতে পারে না।

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

যাইহোক, যেহেতু আমরা কমন লিস্প এবং এর ম্যাক্রো সিস্টেমের উল্লেখ করছি (বেসিলের উত্তর দেখুন), আমাকে অবশ্যই বলতে হবে যে ঠিক গতকালই, ক্লজটি মুক্তি পেয়েছিল (আমি অনুমোদিত নয়):

আলিঙ্গন একটি অনুসারী প্রচলিত পাতার মর্মর বাস্তবায়ন হতে ইচ্ছুক যে LLVM আইআর করার প্রনয়ন। তদুপরি, এটি বিকাশকারীদের কাছে কলং লাইব্রেরি (এএসটি, ম্যাচার) প্রকাশ করে।

  • প্রথমত, এর অর্থ হ'ল আপনি সিএল-তে লিখতে পারবেন এবং সি ++ ব্যবহার করতে পারবেন না, এর লাইব্রেরিগুলি ব্যবহার করার সময় (এবং যদি আপনার ম্যাক্রোর প্রয়োজন হয়, সিএল ম্যাক্রোগুলি ব্যবহার করুন)।

  • দ্বিতীয়ত, আপনি আপনার বিদ্যমান সি ++ কোড (বিশ্লেষণ, রিফ্যাক্টরিং, ...) এর জন্য সিএলে সরঞ্জামগুলি লিখতে পারেন।


3

বেশিরভাগ সি ++ সংকলকের কিছু বেশি বা কম নথিভুক্ত এবং স্থিতিশীল এপিআই থাকে, বিশেষত বেশিরভাগ বিনামূল্যে সফ্টওয়্যার সংকলকগুলিতে।

ঝনঝন / এলএলভিএম বেশিরভাগ লাইব্রেরির একটি বড় সেট এবং আপনি সেগুলি ব্যবহার করতে পারেন।

সাম্প্রতিক জিসিসি প্লাগইন গ্রহণ করছে । বিশেষত, আপনি এটি মেল্ট (যা নিজেই একটি মেটা-প্লাগইন, এটি আপনার জিসিসি প্রসারিত করার জন্য একটি উচ্চ-স্তরের ডোমেন নির্দিষ্ট ভাষা সরবরাহ করে) ব্যবহার করে এটি প্রসারিত করতে পারে ।

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

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


মজাদার. জিসিসি এখানে বিবর্তিত হতে দেখলে এটি খুব ভাল। এটি এমন কোনও উত্তর নয় যা আমি জিজ্ঞাসা করা সমস্ত কিছুকে সম্বোধন করে, তবে আমি তা তবে তা পছন্দ করি।
স্টিভেন লু

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