প্রথম সংকলক প্রথম সংক্ষেপকারীর আগে কেন লেখা হয়েছিল?


72

প্রথম সংকলক ১৯৫২ সালে গ্রেস হপার লিখেছিলেন এবং লিস্প দোভাষী ১৯৫৮ সালে জন ম্যাকার্থির ছাত্র স্টিভ রাসেল লিখেছিলেন। সংকলক লেখার জন্য অনুবাদকের চেয়ে অনেক কঠিন সমস্যা মনে হয়। যদি তা হয় তবে প্রথম সংকলক কেন প্রথম দোভাষীর ছয় বছর আগে রচনা করা হয়েছিল?


67
কারণ তখন একজন দোভাষীর চেয়ে সংকলকটির বেশি প্রয়োজন ছিল
রাচেট ফ্রিক

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

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

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

5
আসলে, আমি শুনেছি ম্যাককার্তি এলআইএসপিকে অবিচ্ছেদ্য বলে বিশ্বাস করেছিলেন। এটা তোলে রাসেল যারা উপলব্ধি করেন যে পাতার মর্মর ম্যানুয়াল A থেকে ম্যাকার্থি এর সার্বজনীন ফাংশন) ছিল ছিল একজন দোভাষী এবং খ) বাস্তবায়নযোগ্য ছিল।
Jörg ডব্লু মিট্টাগ

উত্তর:


97

সংকলক লেখার জন্য অনুবাদকের চেয়ে অনেক কঠিন সমস্যা মনে হয়।

এটি আজ সত্য হতে পারে, তবে আমি যুক্তি দিয়ে বলব যে প্রায় 60 বছর আগে এটি ছিল না not কয়েকটি কারণ কেন:

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

65
এবং সংকলক ছাড়াই আপনাকে সমাবেশে দোভাষী লিখতে হবে
ratchet freak

34
প্রথম সংকলক যেখানে মানুষ। (লোকেরা যখন দোভাষী হয় তখন আমাদের কম্পিউটারের দরকার হয় না)। তারপরে কেউ অবশ্যই একটি সংকলিত ভাষায় একটি সংকলক লেখার কথা বিবেচনা করেছেন (কেবল তাদের ছিল, তবে সময়টি আমার মানুষের সংকলন হিসাবে)।
ctrl-alt-delor

1
আসলে .... আমি সম্প্রতি পড়েছি যে s০ এর দশকের চাঁদের ফ্লাইটগুলিতে ব্যবহৃত অ্যাপোলো গাইডেন্স কম্পিউটারটির একটি দোভাষী ছিল: উইকি এন্ট্রি "... এজিসি স্থানীয়ভাবে সমর্থিত ব্যতীত অনুবাদক আরও অনেক নির্দেশনা সরবরাহ করেছিলেন ..." আমি মনে করি এই "অনুবাদক" ছিল মত আরো "দ্য সুইট 16" পাতার মর্মর ভালো কিছু চেয়ে পুরাতন অ্যাপল দ্বিতীয় কম্পিউটারের এমবেড অনুবাদক।
ক্যালফুল

6
@ratchetfreak এবং এটি ছিল। যেমন প্রথম সংকলক ছিল।
আরবেরি ইয়ং

3
@রিচার্ড: লোকেরা যখন দোভাষী / ক্যালকুলেটর ছিল তাদের কাজের শিরোনামটিকে "কম্পিউটার" বলা হত। লোকেরা যখন দোভাষী ছিল তখন তারা কম্পিউটার ছিল, আক্ষরিক অর্থেই। ম্যানহাটান প্রকল্পে হাজার হাজার "কম্পিউটার" (প্রকৃত কাজের শিরোনাম, গুরুত্ব সহকারে) নিযুক্ত করা হয়েছিল যেখানে পারমাণবিক পদার্থবিজ্ঞানীরা তাদের গণনা সম্পাদনের জন্য মেইলে পাঠিয়েছিলেন by প্রকৃতপক্ষে, এই প্রকল্পটিতে গণিতবিদদেরও নিয়োগ দেওয়া হয়েছিল যারা প্রকৌশলীদের কাছ থেকে গণনাগুলি ভেঙে দিয়েছিলেন যারা পদার্থবিদদের তত্ত্ব থেকে "কম্পিউটার" পাঠানোর জন্য গণনা তৈরি করেছিলেন।
slebetman

42

মূল কথাটি হ'ল 1950-এর দশকের কম্পিউটিং হার্ডওয়্যার পরিবেশটি এমনটি তৈরি করেছিল যে তখনকার কম্পিউটারগুলির ব্যাচ-ওরিয়েন্টেড প্রসেসিংয়ের ফলে কেবলমাত্র একটি সংকলক সম্ভব ছিল।

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

1950 এর দশকে অসংখ্য কম্পিউটার নির্দেশাবলী লোড করতে ফ্রন্ট প্যানেল স্যুইচ ব্যবহার করত এবং আউটপুটটি কেবল সারি সারি ল্যাম্প / এলইডি ছিল এবং শখের লোকেরা এমনকি 1970-এর দশকে ফ্রন্ট-প্যানেল স্যুইচ এবং এলইডি ব্যবহার করত। সম্ভবত আপনি কুখ্যাত আলটিয়ার 8800 এর সাথে পরিচিত ।

অন্যান্য হার্ডওয়্যার সীমাবদ্ধতাও দোভাষীকে অনিবার্য করে তুলেছিল। 1950 এর দশকে কম্পিউটারে প্রাথমিক মেমরির (যেমন র‌্যাম) সীমাবদ্ধতা ছিল। অর্ধপরিবাহী বর্তনী ইন্টিগ্রেটেড মেমরি (যা না হওয়া পর্যন্ত 1958 আসেনি) এর আগে সীমিত ছিল চৌম্বক কোর মেমরির বা বিলম্ব লাইন মেমরির যা মাপা হয় বিট বা শব্দ , কোন উপসর্গ। মাধ্যমিক স্টোরেজ মেমরির স্বচ্ছলতার সাথে মিলিত (উদাহরণস্বরূপ ডিস্ক বা টেপ), প্রোগ্রামটি বোঝানোর আগেই দোভাষীর জন্য প্রচুর মেমরি ব্যবহার করা যদি অপ্রয়োজনীয় না হয় তবে তা অপব্যয় হিসাবে বিবেচিত হবে।

আইবিএম-এ জন ব্যাকাসের নেতৃত্বাধীন দল ১৯৫৪-৫7 সালে ফরট্রেন সংকলক তৈরি করার সময় স্মৃতি সীমাবদ্ধতাগুলি তখনও একটি প্রধান কারণ ছিল। এই উদ্ভাবনী সংকলকটি শুধুমাত্র সফল হয়েছিল কারণ এটি একটি অনুকূলিতকরণ সংকলক ছিল

1950 এর দশকের বেশিরভাগ কম্পিউটারের সবেমাত্র কোনও অপারেটিং সিস্টেম ছিল, ডায়নামিক লিঙ্কিং এবং ভার্চুয়াল মেমরি পরিচালনার মতো আধুনিক বৈশিষ্ট্যগুলিকে ছেড়ে দেওয়া যাক, সেই সময় একটি দোভাষীর ধারণাটি খুব মৌলিক এবং অযৌক্তিক ছিল।

অভিযোজ্য বস্তু

1950 এর দশকের ভাষা ছিল আদিম। তারা শুধুমাত্র একটি অন্তর্ভুক্ত ছোট অপারেশনের থাবা অন্তর্নিহিত হার্ডওয়্যার এর নির্দেশাবলী বা তাদের লক্ষ্যবস্তু ব্যবহারের সমস্যা সংজ্ঞা দ্বারা প্রভাবিত প্রায়ই পারেন।

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

কম্পিউটার বিজ্ঞানের দৃষ্টিকোণ থেকে, সংকলক এবং দোভাষী উভয় অনুবাদক এবং বাস্তবায়নের ক্ষেত্রে জটিলতায় প্রায় সমান।


কম্পিউটারগুলি ভাগ করে নেওয়ার আগে টেলিটাইপগুলি ব্যবহার করেছিল? আমি তাদের কাছে লাইন প্রিন্টার বা টেপ থেকে স্পুল ব্যবহার করার আশা করতাম। অন্যথায়, কম্পিউটারকে 1-8 সেকেন্ডের জন্য অপেক্ষা করতে হবে পাঠ্যের প্রতিটি লাইন এমন 1-8 সেকেন্ড উপস্থাপন করবে যা কম্পিউটারটি হতে পারে - তবে কিছু ছিল না - দরকারী কিছু করছে।
21c10

2
@ সুপের্যাট - হ্যাঁ, টেলি টাইপগুলি ব্যবহৃত হয়েছিল, তবে সেগুলি "ইন্টারেক্টিভ" থেকে খুব দূরে ছিল। আমি প্রথম যে কম্পিউটারটি প্রোগ্রাম করেছিলাম তার 18 টি বিট শব্দের সমন্বয়ে একটি স্মৃতি ছিল - এর মধ্যে 1K K মেমরিটি নিজেই একটি ঘোরানো ড্রাম ছিল , সুতরাং আপনি যখন কম্পিউটারটি চালু করবেন তখন আপনাকে স্মৃতিটি গতিতে না আসা পর্যন্ত অপেক্ষা করতে হবে। এটিতে একটি টেলি টাইপ সংযুক্ত ছিল এবং আপনি ক) কীবোর্ড থেকে টাইপ করা একটি অক্ষর বা কাগজের টেপ পাঠক দ্বারা পড়তে পারেন (কম্পিউটারের দৃষ্টিতে উভয়ই একই ছিল), খ) "প্রিন্টারে একটি অক্ষর লিখতে পারে" "টেলি টাইপের। আহ, দুর্দান্ত দিন - দুর্দান্ত দিন ..! আমার গুরুতর গরম কি?!?!? :-)
বব জার্ভিস

@ বোবি জারভিস: কী বছর হত?
সুপারক্যাট

1
@ সুপের্যাট - 1973 - তবে প্রশ্নযুক্ত কম্পিউটারটি (একটি EDP-18, শিক্ষামূলক ডেটা পণ্য দ্বারা তৈরি) তখনও তুলনামূলকভাবে বয়স্ক ছিল। তবুও, আমরা যা করেছি তা ছিল (এবং 70 এর দশকের গোড়ার দিকে হাই স্কুলটিতে গণ্ডগোল করার জন্য কোনও কম্পিউটার থাকা অস্বাভাবিক ছিল) তাই আমরা ভেবেছিলাম যে এটি বেশ আশ্চর্যজনক। :-)
বব জার্ভিস

2
এটি গৃহীত উত্তরটির চেয়ে অনেক ভাল এবং সম্পূর্ণ উত্তর।
জিম গ্যারিসন

12

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

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

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

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

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

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

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

লিস্পের সাফল্য মূলত এই কারণে যে এই স্ব-নির্ভরযোগ্যতা এটিকে প্রোগ্রামিং কাঠামো অধ্যয়ন করার জন্য এবং নতুন ভাষাগুলি ডিজাইনের (এবং এটি প্রতীকী গণনার জন্য সুবিধার্থে) একটি দুর্দান্ত টেস্টবেড করেছে।


3
আমার, কত সাহসী
ফারাপ

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

@ বেনামে-ডাউনভোটার কোনও ব্যাখ্যামূলক মন্তব্য ছাড়াই ডাউনভোটিং দেখায় যে কেউ বোকা হতে পারে। তবে কে তা বলে নি।
বাবু

4

আমি প্রশ্নের ভিত্তিতে একমত নই।

অ্যাডম। হপারের প্রথম সংকলক (এ -0) আরও লিঙ্কার বা ম্যাক্রো ভাষার মতো ছিল। তিনি একটি টেপে সাবরুটাইনগুলি সঞ্চয় করেছিলেন (প্রত্যেকে প্রত্যেককে একটি সংখ্যা নির্ধারিত হয়েছিল) এবং তার প্রোগ্রামগুলি সাবরুটাইনগুলি এবং যুক্তিগুলির তালিকা হিসাবে লেখা হবে। সংকলকটি অনুরোধ করা সাবরুটাইনগুলি টেপ থেকে অনুলিপি করে একটি সম্পূর্ণ প্রোগ্রামে পুনরায় অর্ডার করবে।

তিনি "সংকলন" শব্দটি একই অর্থে ব্যবহার করেছিলেন যে একজন কবিতার একটি নৃতাত্ত্বিক সংকলন করেছেন: বিভিন্ন আইটেমকে এক খণ্ডে একত্রিত করে।

এই প্রথম সংকলনে কোনও লেসার বা পার্সার ছিল না, যতদূর আমি বলতে পারি, যা এটি একটি আধুনিক সংকলকের দূরবর্তী পূর্বপুরুষ করে তোলে। পরে তিনি আরও একটি ইংরেজী-জাতীয় বাক্য গঠনের লক্ষ্য নিয়ে আরেকটি সংকলক (বি -0, ওরফে ফ্লো-ম্যাটিক) তৈরি করেছিলেন, তবে এটি লিস্প দোভাষী হিসাবে একই সময়ে 1958 বা 1959 অবধি সমাপ্ত হয়নি।

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

এখানে উদ্ধৃতি সহ আরও ভাল উত্তর: https://stackoverflow.com/a/7719098/122763


3

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

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

সময়ের রেফারেন্স হিসাবে, আমি 1972 সালের দিকে ফোন সংস্থায় প্রোগ্রামিং শুরু করি।


2

আপনি যদি মেমরিতে সমস্ত কিছু ধরে না রাখেন তবে সংকলিত কোডটি আরও দ্রুত। ভুলে যাবেন না যে এই সময়গুলিতে সংকলিত কোডটিতে ফাংশন যুক্ত হয়েছিল। আপনি যদি সংকলন না করে থাকেন তবে আপনার কী ফাংশনগুলি প্রয়োজন তা আপনি জানেন না। সুতরাং, আপনি ফাংশনগুলি কল করছেন ... ওহ, ডিস্ক থেকে এখনও নয়, আমরা 50-শুরুর দিকে, তবে কার্ড থেকে! রানটাইমে!

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


1

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

তবে সংকলকগণ দোভাষীদের চেয়ে অনেক বেশি কার্যকর। আপনি যদি সেই সময়ে দোভাষী লেখার পরামর্শ দিতেন, লোকেরা আপনাকে পাগল মনে করেছিল। আপনি কী এক মিলিয়ন ডলার কম্পিউটার কিনে তার কোডটির ব্যাখ্যা করার জন্য এর 90% শক্তি নষ্ট করার কল্পনা করতে পারেন?


আমি 1950 এর কম্পিউটার সম্পর্কে খুব বেশি জানি না, তবে অন্তত পরবর্তী দশকের সাধারণ ভন নিউম্যান মেশিনগুলির জন্য, দোভাষা ওভারহেডের ব্যাখ্যা করা নির্দেশ অনুযায়ী দু থেকে পাঁচটি নির্দেশনা (সম্ভবত চার থেকে দশ চক্র মোট) হতে পারে: ডিকোড, পরোক্ষ লাফ, সম্ভবত ডিকোড অতিরিক্ত যুক্তি। আপনি যদি দোভাষী নির্দেশকে পর্যাপ্ত উচ্চ-স্তরের সেট করেন (সুতরাং আপনি দোভাষী প্রতি নির্দেশে বেশ কয়েকটি মেশিনের নির্দেশাবলী কার্যকর করেন) এটি 90% এর চেয়ে কম এবং সম্ভবত গ্রহণযোগ্যও হবে। আরও দেখুন: চতুর্থ

3
প্রথম সংকলকটি লেখার আগে বেশিরভাগ প্রোগ্রামগুলি প্রকৃত মেশিন কোডে লেখা হত, সমাবেশের ভাষা নয় (অপ-কোডগুলি স্মৃতিবিজ্ঞান)।
ম্যাকটাইলার

2
@ ডেলান এই সমস্ত সিস্টেমগুলি কিলো হার্টজ-এ ঘড়ি নিয়ে ছুটেছিল, সুতরাং কর্মক্ষমতাতে 3-5 সময় হ্রাস করা সম্ভবত হার্ডওয়্যার ব্যর্থতার কারণে সিস্টেমটি ব্যর্থ হওয়ার আগে প্রোগ্রামটি সফলভাবে শেষ হওয়ার মধ্যে পার্থক্য হতে পারে (যেমন ভ্যাকুয়াম টিউব নষ্ট হয়েছে) বা না। আমি সঠিকভাবে স্মরণ করতে পারলে 1950 এর দশকে হার্ডওয়্যার ব্যর্থতা হ'ল একটি নিত্য ঘটনা।
ম্যাকটাইলার

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

@ গ্যাশনার: 1974 সালে, আমি কেরোনিক্স (আহেম, ডেটা জেনারেল নোভা ক্লোনস) এর জন্য একটি উচ্চ-পারফরম্যান্স বেসিক ইন্টারপ্রিটার তৈরি করেছি যা বেসিক স্টেটমেন্টটি এনকোড করার জন্য বাইট-ভিত্তিক পি-কোড ব্যবহার করেছিল। বাইট আনার জন্য একটি পিসোডের "ব্যাখ্যা" করতে প্রায় 25-50 মেশিনের নির্দেশনা নিয়েছিল। (আমি ১৯69৯ সালে একটি টোকেন ভিত্তিক একটি করেছি যা আরও বেশি লেগেছিল কারণ এটি প্রকাশ্যে প্রকাশের পুনরায় পার্স করতে হয়েছিল)। তবে এটি "গাজিলিয়নস" নষ্ট এবং নিখোঁজ।
ইরা

1

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

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


1
ডিস্ক? Ummmm ... কোন। টেপ। বড়, ধীর, রিল টু রিল টেপ। এবং তাদের প্রচুর। আমার মনে আছে গ্রেস মারে হপারের দেওয়া একটি বক্তৃতায় গিয়েছিলাম (দ্বিগুণ আমার কাছে আকর্ষণীয় কারণ আমি একটি সিস্টেম বিশ্লেষণ মেজর এবং ক্যাম্পাসের নেভি আরওটিসি বিচ্ছিন্নতার একজন মিডশপম্যান, এবং সিএপিটি হপার একজন সার্ভিস নৌ কর্মকর্তা ছিলেন)। তিনি একটি গল্প বর্ণনা করেছিলেন যেখানে তিনি বলেছিলেন, তিনি কোনও প্রোগ্রামের অব্যবহৃত অংশ টেপ করার জন্য লেখার ধারণা নিয়ে এসেছিলেন - তিনি এটিকে "সহায়ক স্টোরেজ ব্যবহার করে" বলেছেন। "তবে", তিনি বলেছিলেন, "আইবিএম একই কাজ না করে এটিকে ভার্চুয়াল মেমোরি না বলে এই ধারণাটি কার্যকর হয় নি"। সিএপিটি হপার সত্যিই আইবিএমকে অপছন্দ করেছে ... :-)
বব জার্ভিস

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

0

কারণ কাজ করার জন্য দোভাষীদের সংকলক প্রয়োজন।

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

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

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

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

এজন্য প্রথমে সংকলকগুলি লেখা হয়েছিল। সংকলকগণ কল্পনা করার পরেও ডেটা স্ট্রাকচারের ব্যাখ্যার ধারণাটি নতুন ছিল না, তবে সংকলকগুলি "অনুপস্থিত লিঙ্ক" ছিল যা প্রোগ্রামাররা সেই কাঠামোটিকে পাঠ্যবইয়ের বাইরে তৈরি করতে দেয়।


অ্যাপলের মূল বুনিয়াদি অনুবাদক] [যা আমি বুঝতে পেরেছি সে থেকে মেশিন কোডে হস্তান্তরিত হয়েছিল এবং মেশিন-পঠনযোগ্য উত্স-কোড ফর্ম্যাটে কখনও অস্তিত্ব ছিল না। আমি নিশ্চিত নই যে আপনি যে "সংকলক" বলবেন এটি তৈরি করার জন্য ব্যবহৃত হয়েছিল।
সুপারক্যাট

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

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

... চরিত্র অনুসারে চরিত্র, বাম থেকে ডান; A = 1234 "এর মতো বিবৃতিটি 1, 2, 3, এবং 4 অঙ্কগুলিকে রান-টাইমে ভাসমান-পয়েন্ট সংখ্যায় রূপান্তরিত করবে
সুপারক্যাট

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

-1

আরেকটি বিষয়: প্রথম সংকলকগুলি যখন মেশিনের সময়ের ব্যয়টি লিখেছিলেন তখন এটি এখনকার তুলনায় অনেক বেশি ছিল। দোভাষীরা মেশিনের জন্য অনেক বেশি সময় ব্যবহার করেন।

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