কেন একটি প্রোগ্রামিং ভাষা থেকে অন্য প্রোগ্রামে স্বয়ংক্রিয় অনুবাদক নেই? [বন্ধ]


37

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

কমপক্ষে তত্ত্ব অনুসারে, সমস্ত ভাষার মধ্যে 100% সঠিক অনুবাদক লিখতে কি সম্ভব? বাস্তবে চ্যালেঞ্জগুলি কী কী? সেখানে কি বিদ্যমান অনুবাদকরা কাজ করছেন?


5
মনে রাখবেন, "সমস্ত ভাষা" এর মধ্যে ওউকের মতো বোকাও রয়েছে! (টিউরিং সম্পূর্ণতা পুরো গল্প নয়; আপনার অনুশীলনের জন্য খুব বেশি সিস্টেম দরকার
ডোনাল ফেলো

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

রোজলিন। নেট সংকলকটিকে একটি পরিষেবা হিসাবে দেখুন যা সি # কে ভিবিতে অনুবাদ করার ক্ষমতা এবং তদ্বিপরীত।
ড্যানিয়েল লিটল

2
সমস্ত সংকলক একটি পিএলকে অন্য একটিতে অনুবাদ করে, তারা গ্যারান্টি দেয় না যে লক্ষ্য পিএল কোডটি পড়তে সহজ যদিও
জে কে।

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

উত্তর:


32

সবচেয়ে বড় সমস্যা হ'ল প্রোগ্রাম কোডের আসল অনুবাদ নয়, তবে প্ল্যাটফর্ম এপিআই এর পোর্টিং।

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

এই কারণেই কেবল এ জাতীয় সরঞ্জামগুলি মনে হয় যে কোডগুলি অনুবাদ করার জন্য এটি এটি মোতায়েন করার জন্য, পরে এটি রক্ষণাবেক্ষণের জন্য নয়। গুগলের জিডাব্লুটিটি জাভাস্ক্রিপ্টে জাভা "কম্পাইল" করে। ফেসবুকের হিপহপ পিএইচপি সংকলন করে সি।



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

20

আপনি কোন মধ্যবর্তী বিন্যাস, তাহলে আপনি কিছু যে ভাষা এক্স একটি প্রোগ্রাম অনুবাদ বাস্তবায়ন হতে পারে জন্য যে বিন্যাস, এবং এছাড়াও থেকে ভাষা ওয়াই যে বিন্যাস সমস্ত ভাষা আপনি আগ্রহী জন্য ঐ ধর্মান্তর বাস্তবায়ন এবং আপনার কাজ সম্পন্ন, ঠিক?

আচ্ছা তুমি কি জানো? এই জাতীয় বিন্যাস ইতিমধ্যে বিদ্যমান: সমাবেশ। সংকলক ইতিমধ্যে "ভাষা এক্স থেকে অ্যাসেম্বলি" রূপান্তরটি করে এবং "অ্যাসেম্বলি টু ল্যাঙ্গুয়েজ ওয়াই" রূপান্তরকে বিচ্ছিন্ন করে।

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

অবশ্যই, দুটি বড় সমস্যা যা আপনি পাবেন:

  1. কোডটি মূলত অপঠনযোগ্য। এমএসআইএল (এমনকি ডিবাগিং তথ্য সহ) মূল উত্স থেকে প্রচুর তথ্য সরিয়ে দেয়, সুতরাং অনুবাদকৃত সংস্করণটিতে 100% বিশ্বস্ততা নেই (তাত্ত্বিকভাবে একটি সি # -> এমএসআইএল-> সি # রূপান্তর আপনাকে মূল কোডটি ফিরিয়ে দেবে, তবে এটি হবে না)।
  2. অনেক .NET ভাষার নিজস্ব কাস্টম লাইব্রেরি রয়েছে (যেমন ভিবি রানটাইম লাইব্রেরি, এফ # লাইব্রেরি এবং অন্যান্য)। আপনি যখন আপনার রূপান্তরও করেন তখন এগুলি অন্তর্ভুক্ত করা (বা রূপান্তরিত) হতে হবে।

সত্যিই # 2 পাওয়ার কিছু নেই, তবে আপনি সম্ভবত এমএসআইএল-তে কিছু অতিরিক্ত টিকা দিয়ে প্রায় 1 টি পেতে পারেন (বৈশিষ্ট্যের মাধ্যমে, সম্ভবত)। এটি অবশ্যই অতিরিক্ত কাজ হবে।


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

@ রবার্ট: এক্সএমএল মন্তব্যগুলি এমএসআইএল-এ অন্তর্ভুক্ত নয়। Microsoft.NET\Framework\v2.0.50727\enউদাহরণস্বরূপ আপনি যদি সন্ধান করেন তবে আপনি সিস্টেম লাইব্রেরির জন্য সমস্ত এক্সএমএল ডকুমেন্টেশন দেখতে পাবেন। মন্তব্যগুলি প্রদর্শন করতে এটিই প্রতিফলক (এট আল) ব্যবহার করে। রূপান্তরটি অপঠনযোগ্য নয়, আমি যা বলছিলাম তা হ'ল এটি 100% বিশ্বস্ততা নয় যা আপনি উত্স-স্তরের অনুবাদ থেকে আশা করতে পারেন।
ডিন হার্ডিং

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

20

কমপক্ষে তত্ত্ব অনুসারে, সমস্ত ভাষার মধ্যে 100% সঠিক অনুবাদক লিখতে কি সম্ভব? বাস্তবে চ্যালেঞ্জগুলি কী কী?

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

1
আপনি মাথায় পেরেক আঘাত। এলএলভিএম এর সি ব্যাকএন্ড থেকে বেরিয়ে আসা কোডটি পড়ার চেষ্টা করুন। এটি প্রযুক্তিগতভাবে আইনী সি কোড তবে এটি প্রেটি (টিএম) নয়।
dsimcha

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

10

আপনি কেন একটি প্রোগ্রাম রূপান্তর করতে চান?

উভয় ভাষা, উত্স এবং লক্ষ্য ভাষা যেকোন উপায়েই (ভার্চুয়াল) মেশিনকোডে সংকলিত হয়েছে, সুতরাং প্রযুক্তিগত কারণে অন্য উচ্চ স্তরের ভাষার সংকলক লাগবে না।

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

উদাহরণস্বরূপ, সিতে একটি সাধারণ পুনরাবৃত্তির তুলনা করুন এবং একটি লিসপে। বা অজগরকে 'এক সেরা উপায়' প্রতিচ্ছবিযুক্ত রুবি দিয়ে।

এখানে, একই সমস্যাগুলি প্রকৃত ভাষায় আপনার প্রদর্শিত হতে শুরু করে, যেমন আপনি 'এটি বিড়াল এবং কুকুরের বৃষ্টি হচ্ছে' এর অর্থ দিয়ে অনুবাদ করেন যখন 'ইংরেজিতে জার্মান থেকে অনুবাদ করার সময় এটি বালতি থেকে wouldেলে দেয়' এর অর্থ দিয়ে আপনি করতে পারেন না শব্দটির দ্বারা শব্দটি আর অনুবাদ করুন তবে আপনাকে অর্থটি সন্ধান করতে হবে।

এবং 'অর্থ' কাজ করা সহজ ধারণা নয়।

*) ভাল, কফিসক্রিপ্ট আছে ...


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

6

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

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

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


5

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


4

যদিও এটি প্রতি সেডের কোড অনুবাদ নয়, ভাষার ওয়ার্কব্যাঞ্চগুলির ধারণাটি দেখায় যে কীভাবে সমস্ত ভাষার মধ্যে 100% সঠিক অনুবাদকের অনুরূপ কিছু কার্যকর করা যেতে পারে।

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

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

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


আপনি এই দলের কিছু নাম দিতে পারেন?
কিওয়ার্টি

4

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

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


3

এটি সর্বদা করা হয়।

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

আমি ভাবছি যে আপনি এটি সম্পর্কে কথা বলছেন না, যদিও। আপনি সম্ভবত এমন একটি অনুবাদক চান যা সি ++ কে জাভা বা পাইথনের মতো কিছুতে রূপান্তর করে। যদিও এর মুল্য কি? সর্বোপরি, শেষের ফলাফলটিতে মূল উত্সের মতো হুবহু দক্ষতা থাকবে। (কার্যতঃ, এটি আরও খারাপ হবে))

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

এটি কারণ খুব তুচ্ছ জিনিসগুলি সরাসরি একটি ভাষা থেকে অন্য ভাষায় অনুবাদ করে। প্রায়শই, একটি ভাষায় যা সহজ তা অন্যের জন্য বৃহত্তর গ্রন্থাগারগুলির প্রয়োজন হয় - বা পুরোপুরি অসম্ভব হতে পারে। অতএব:

  1. প্রোগ্রামটি যদি তুচ্ছ হয় তবে আপনি একটি ভাল ফলাফল পেতে পারেন। তবে, যদি এটি এত সহজ হয় তবে এটি কোনও অনুবাদকের মাধ্যমে চালানোর বিষয়টি কী?
  2. যদি প্রোগ্রামটি অনানুষ্ঠানিক হয় তবে কোডটি নিম্নমানের হবে।

শেষ পর্যন্ত, ভাল কোডটি লেখার একমাত্র উপায় আসলে এটি লেখা write কম্পিউটার কেবল পাঠযোগ্যতা, সেরা-অনুশীলন এবং মার্জিত সমাধানের ক্ষেত্রে মানুষের সাথে মেলে - কমপক্ষে এখনও নয় -

সংক্ষেপে, এটি ঠিক এটি মূল্য নয়।


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

1

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

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

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

এটি সমস্যার সম্পূর্ণ তালিকা নয়, তবে সেগুলি কেবল দুটি এবং সেগুলি বড় big আমার একজন অধ্যাপক উল্লেখ করেছেন যে কেউ তার নিয়োগকর্তাকে বোঝায় যে তারা মেশিন কোড থেকে সি-তে 80 এর দশকে তৈরি করতে পারেন, তবে এটি কার্যকর হয়নি। আমি সন্দেহ করি যে এমন কোনও এক আছে যা পুরোপুরি কার্যকর হয়।


আমি মনে করি বিদ্যমান লাইব্রেরিগুলি জানার দরকার নেই, এটি লাইব্রেরিগুলি যেমন যায় তেমন অনুবাদ করতে পারে (ধরে নিলে তাদের কাছে উত্স উপলব্ধ রয়েছে)।
সার্জ

1
এটি আসলে দ্বিতীয় সমস্যার জটিলতা বাড়িয়ে তোলে। এবং এটি ধরে নিচ্ছে যে এটির অনুবাদ করার জন্য সোর্স কোডটিতে আপনার অ্যাক্সেস রয়েছে। যেভাবেই হোক, এটি এখনও অপরিবর্তনীয়।
indyK1ng

Libs সম্পর্কে +1 পয়েন্ট সম্পূর্ণ বৈধ, এবং সবসময়ই libs থাকে।
ড্যান রোজনস্টার্ক

1

সংকলনের মূল বিষয়টি হ'ল কম্পিউটারের জন্য দরকারী কিছু পাওয়া। অর্থাত্‍ এমন কিছু যা চালাতে পারে। আপনি যা লিখেছেন তার চেয়ে উচ্চ স্তরের এমন কিছু কেন সংকলন করবেন?

আমি নেট নেট কৌশল ভাল। একটি সাধারণ ভাষায় সবকিছু সংকলন করুন। এটি ভাষাগুলি (N ^ 2) -N ক্রস ল্যাঙ্গুয়েজ সংকলক তৈরি না করে যোগাযোগ করতে সক্ষম হওয়ার সুবিধা দেয়।

উদাহরণস্বরূপ যদি আপনার 10 টি প্রোগ্রামিং ল্যাঙ্গুয়েজ থাকে তবে আপনার কেবল NET মডেলের অধীনে 10 সংকলক লিখতে হবে এবং তারা সকলেই একে অপরের সাথে যোগাযোগ করতে পারে। আপনি যদি সমস্ত সম্ভাব্য ক্রস ল্যাঙ্গুয়েজ সংকলক তৈরি করেন আপনার 90 সংকলক লিখতে হবে। সামান্য সুবিধার জন্য এটি অনেক অতিরিক্ত কাজ।

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