সংকলকগুলি কি উন্নয়নের বাইরে ব্যবহার করা হয়?


14

আমার বোধগম্যতা অবধি, সংকলকগুলি বিকাশকারীদের বোঝানো হয় তাদের কোডটি এক্সিকিউটেবল (মেশিন-কোড) ফাইলগুলিতে তাদের কোড সংকলন করে। সংকলকগুলি কোনও ক্লায়েন্টের মেশিন বা শেষ ব্যবহারকারী সিস্টেমে প্রসারিত হয় না।

পরিবর্তে, বিকাশকারীরা তাদের কোডটিকে মেশিন কোডে রূপান্তর করতে কেবল সংকলকটি ব্যবহার করেন, যা পরে অ্যাপ্লিকেশন হিসাবে ব্যবহারের জন্য অন্যান্য মেশিনে স্থানান্তরিত হয়।

সংকলকগুলির কি এই প্রক্রিয়াটির বাইরে কোনও কার্য রয়েছে? যদি তাই হয় তবে সেগুলি কখন ব্যবহৃত হয়?


21
হ্যাঁ, সংকলকগণ কোড সংকলন করে।
টম স্কোয়ায়ার্স

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

3
@ পঙ্কজ উপাধ্যায়: এটা সম্ভব যে কোডটি কোনও মেশিনে প্রেরণ হতে পারে এবং তারপরে একটি অভ্যন্তরীণ প্রক্রিয়া দ্বারা সংকলিত হয়। ডিভাইসের ব্যবহারকারীরা কখনই এটি ঘটবে তা দেখতে বা এটি সম্পর্কে জানার সম্ভাবনা নেই। এটি করা যেতে পারে যদি কোডের অংশগুলি নির্দিষ্ট হার্ডওয়ারের জন্য সংকলন করা প্রয়োজন হয় এবং রানটাইমের সময় হার্ডওয়্যারের জন্য পরীক্ষা করা সমাধানগুলি খুব ধীর হয়, যার ফলে কোডটি বিতরণ করা হয় এবং ইনস্টলের সময় সংকলন করা প্রয়োজন। হতে পারে ...
হতাশাহীন

3
@ পঙ্কজ কোনও গেম সংকলক সহ শিপকে কনসোল দেয় না, তবে কিছু এগুলিতে ইনস্টল করা যায়। সনি লিনাক্স এবং জিসিসির একটি সংস্করণ সরবরাহ করেছে যা PS2 এ ইনস্টল করা যেতে পারে। অন্যান্য লোকেরা অন্যান্য ওএস এবং সফ্টওয়্যার কনসোলগুলিতে পাওয়ার জন্য তাদের ক্র্যাক / হ্যাক করেছে।
আয়রনমেনসান

4
@ স্টারগাজার: আপনার অর্থ কি: "না, সংকলকগণ কোনও উত্স ভাষা থেকে লক্ষ্য ভাষায় অনুবাদ করেন"? কমা ছাড়াই আপনার বাক্যটিকে আপনার উদ্দেশ্যযুক্ত বিপরীতে পরিণত করে।
ড্যানিয়েল প্রাইডেন

উত্তর:


19

হ্যা এবং না. হ্যাঁ, শাস্ত্রীয় দৃশ্যটি উত্স কোড থেকে মেশিন কোড উত্পন্ন করতে একটি সংকলক ব্যবহার করে এমন বিকাশকারী এবং মেশিন কোডটি তখন ব্যবহারকারীদের মধ্যে বিতরণ করা হয়।

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

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

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


24

হ্যাঁ, সংকলকগুলি বেশ কয়েকটি উল্লেখযোগ্য ব্যতিক্রম সহ মূলত বিকাশকারীরা ব্যবহার করেন। শেষ ব্যবহারকারীরা মাঝে মধ্যে সর্বশেষতম ওপেন সোর্স সফ্টওয়্যার সংকলন এবং ইনস্টল করতে সংকলকগুলি ব্যবহার করে, যদিও তারা কোডটিতে কোনও পরিবর্তন না করে। এছাড়াও, কিছু প্রোগ্রামিং ভাষার সংকলক নেই। তারা ফ্লাইটে "সংকলন" পরিবর্তে দোভাষী ব্যবহার করে। সেক্ষেত্রে শেষ ব্যবহারকারীদের তাদের মেশিনে দোভাষী সংযুক্ত করা দরকার।


4
যদি আমরা "সংকলক" এর সংজ্ঞাটি কার্যকর প্রোগ্রাম তৈরি করতে সক্ষম প্রোগ্রামগুলি বোঝাতে সীমাবদ্ধ করে থাকি তবে এটি একটি উত্তরের উত্তর হবে। তবে, এটি কেবল "সংকলক" এর সত্য সংজ্ঞাটির একটি উপসেট
রিওয়ালক

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

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

6
উত্স ডাউনলোড করা এবং তারপরে "মেক ইনস্টল" চালানো কোনও বিকাশকারী নয়। এটি অবশ্যই একটি শেষ ব্যবহারকারী অপারেশন।
ক্রিস্টোফার জনসন

3
@ জান: আমি মেনে নিতে পারি যে জেন্টোর মতো একটি ডিস্ট্রো ব্যবহার করা যা প্যাকেজগুলি সংকলন করে আপনাকে কমপক্ষে একটি শক্তি ব্যবহারকারীর করে তোলে , তবে এটি এখনও স্পষ্টতই একধরণের ব্যবহারকারী। অন্যের কোড সংশোধন করে, এটিকে সংশোধন না করে, এতে যুক্ত না করা, এমনকি এটি পড়া না করে, আপনাকে বিকাশকারী করে তোলে না।
কারসন 63000

10

হ্যাঁ

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

উদাহরণস্বরূপ, পাইথন বাইট-কোড উত্পন্ন করে যখন এটি একটি মডিউল আমদানি করে, এবং এটি একটি সংকলকের সংজ্ঞা অনুসারে ফিট করে (কারণ এটি উত্স ভাষা, পাইথন থেকে লক্ষ্য ভাষায় পাইথন বাইট-কোড রূপান্তর করে)।

আর একটি উদাহরণ ভি 8 জাভা স্ক্রিপ্ট ইঞ্জিন। এটি জাভাস্ক্রিপ্টকে x86 মেশিন কোডে রূপান্তরিত করে এবং এইভাবে সংকলকের সংজ্ঞাতেও ফিট করে। ভি 8 কেবলমাত্র একটি সংকলকের সংজ্ঞা ফিট করে না, এটি ক্রোমের অন্তর্ভুক্ত এবং ক্লায়েন্ট মেশিনে খুব ব্যাপকভাবে ব্যবহৃত হয়।


4

একটি কেস এমন একটি অ্যাপ্লিকেশনের জন্য হবে যা রানটাইম সময়ে গতিশীলভাবে কোড উত্পন্ন করেছিল এবং তারপরে উত্পন্ন কোডটি চালিয়েছিল। এই কোডটি রানটাইমে সংকলন করা দরকার।

সম্পাদনা: অন্যান্য ব্যতিক্রম রয়েছে, তবে ইতিমধ্যে অন্যান্য উত্তরে সেগুলি উল্লেখ করা হয়েছিল।


+1 টি শুধু বলতে জে আই টি JIT
মশা

1
ক্রোমের ভি 8 ইঞ্জিন কোনও অডবোল ব্যতিক্রম নয়।
রিওয়ালক

আপডেট করতে আপডেট হয়েছে। আমি বুঝতে পারি অন্যান্য ব্যতিক্রম আছে।
মরগান হের্লোকার

3

সংকলকগুলি কেবল ডেভলপারদের তাদের প্রোগ্রামিং-ভাষা কোডটি এক্সিকিউটেবল (মেশিন-কোড) ফাইলগুলিতে সংকলনের জন্য বোঝানো হয়

আমি বলব "সংকলকগুলি বিকাশকারীদের জন্য প্রাথমিক ..."। তবে আমি উদাহরণগুলি দেখেছি যেখানে প্রোগ্রামগুলি ফ্লাই-এ নতুন প্রোগ্রামিং-ল্যাঙ্গুয়েজ কোড উত্পন্ন করে এবং তাই শেষ ব্যবহারকারীদের মেশিনে ইনস্টল করার জন্য একটি সংকলক প্রয়োজন। এর অর্থ এই নয় যে শেষ ব্যবহারকারীকে নিজেই সংকলকটির সাথে কাজ করতে হবে।

এই প্রোগ্রাম ডিজাইনের সম্ভাব্য কারণগুলি:

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

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


হুঁ .... এর অর্থ এই নয় যে শেষ ব্যবহারকারীকে নিজেই সংকলকটি নিয়ে কাজ করতে হবে । এটি বেশ ব্যাখ্যা এবং স্পষ্ট করে।
পঙ্কজ উপাধ্যায়

2

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

"বিকাশকারী" এবং "শেষ ব্যবহারকারী" এর মধ্যে একটি স্পষ্ট লাইন আঁকানো কঠিন যদি না আপনি নিজের আলোচনাকে একটি নির্দিষ্ট পণ্যের মধ্যে সীমাবদ্ধ করেন। বিকাশকারীরা তাদের যে সরঞ্জামগুলি ব্যবহার করেন সেগুলির সব "শেষ ব্যবহারকারী" এবং "শেষ ব্যবহারকারীদের" বিকাশকারী সরঞ্জাম যেমন সংকলক এবং দোভাষী তাদের মেশিনে ইনস্টল থাকতে পারে।


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

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

1

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


1

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

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

উদাহরণস্বরূপ, মেল্ট (যা জিসিসি প্রসারিত করার জন্য সি ++ কোড উত্পন্ন করে ) বা জে.পিত্রেটের সিএআইএ কৃত্রিম বুদ্ধিমত্তা ব্যবস্থা (যা সংযুক্তি সমস্যাগুলি সমাধান করার জন্য সি কোড উল্লেখযোগ্যভাবে নিজস্ব কোড তৈরি করে) দেখুন।

এছাড়াও, কিছু ভাষা এবং কিছু বাস্তবায়নের জন্য প্রায় সর্বত্র উপস্থিত হওয়ার জন্য একটি সংকলক প্রয়োজন (প্রতিটি ভাষাতেই সেই ভাষা এবং বাস্তবায়নে কোডযুক্ত) comp প্রথমত, বেশ কয়েকটি ওয়েব ব্রাউজারে একটি জাভাস্ক্রিপ্ট JIT ইঞ্জিন থাকে ( ভি 8 এর মতো )। এছাড়াও, বেশিরভাগ প্রচলিত লিস্প বাস্তবায়নগুলি --eg এসবিসিএল - একটি সংকলক ধারণ করে (এমনকি অ্যাপ্লিকেশনগুলি চালিত করতে কার্যকর, যা এক্সপ্রেশন উত্পন্ন এবং মূল্যায়ন করতে পারে )। হোমোকোনিক ভাষা এবং কাইন প্রোগ্রামগুলি সম্পর্কেও পড়ুন ।

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