এই উত্তরে যেমন পরামর্শ দেওয়া হয়েছে , এটি হার্ডওয়্যার সমর্থনের বিষয়, যদিও ভাষা নকশায় traditionতিহ্যও একটি ভূমিকা পালন করে।
যখন কোনও ফাংশন প্রত্যাবর্তন করে এটি নির্দিষ্ট রেজিষ্টারে প্রত্যাবর্তনকারী অবজেক্টে একটি পয়েন্টার রেখে দেয়
তিনটি ভাষার মধ্যে, ফোর্টরান, লিস্প এবং সিওবিওএল, প্রথমটিতে একক রিটার্ন মান ব্যবহার করা হয়েছিল কারণ এটি গণিতে মডেল হয়েছিল। দ্বিতীয়টি যেভাবে প্যারামিটারগুলি পেয়েছিল সেভাবেই সেগুলি একটি নির্বিচার সংখ্যক ফিরিয়েছিল: একটি তালিকা হিসাবে (এটি যুক্তিযুক্তও হতে পারে যে এটি কেবলমাত্র একটি একক প্যারামিটারটি পাস করেছে এবং তালিকার ঠিকানা)। তৃতীয় রিটার্ন শূন্য বা এক মান।
এই প্রথম ভাষাগুলি তাদের অনুসরণকারী ভাষার নকশায় অনেক প্রভাব ফেলেছিল, যদিও একমাত্র একাধিক মূল্যবোধ ফিরিয়েছিল, লিস্প কখনও খুব বেশি জনপ্রিয়তা অর্জন করেনি।
সি এসেছিল, যখন এর আগে ভাষাগুলি দ্বারা প্রভাবিত হয়ে, এটি সি ভাষা কী করেছিল এবং মেশিন কোড যা এটি কার্যকর করেছিল তার মধ্যে ঘনিষ্ঠতা রেখে, হার্ডওয়্যার রিসোর্সের দক্ষ ব্যবহারের উপর একটি দুর্দান্ত মনোযোগ দিয়েছে। এর কিছু প্রাচীনতম বৈশিষ্ট্য যেমন "অটো" বনাম "রেজিস্টার" ভেরিয়েবলগুলি সেই নকশার দর্শনের ফলাফল।
এটি এও উল্লেখ করতে হবে যে 80 এর দশক পর্যন্ত সমাবেশের ভাষা ব্যাপক জনপ্রিয় ছিল, যখন শেষ পর্যন্ত মূলধারার বিকাশের মধ্য দিয়ে পর্যায়ক্রমে এটি শুরু হয়েছিল। সংকলক লিখেছেন এবং ভাষাগুলি তৈরি করেছেন এমন লোকেরা সমাবেশের সাথে পরিচিত ছিলেন এবং বেশিরভাগ ক্ষেত্রে, সেখানে সবচেয়ে ভাল যা কাজ করেছিল তা বজায় রেখেছিল।
এই রীতি থেকে সরিয়ে নেওয়া বেশিরভাগ ভাষা কখনই খুব বেশি জনপ্রিয়তা পায়নি এবং তাই ভাষা ডিজাইনারদের সিদ্ধান্তগুলিকে প্রভাবিত করতে কখনও দৃ a় ভূমিকা নেয়নি (যারা অবশ্যই তারা জানত তাই অনুপ্রাণিত হয়েছিল)।
সুতরাং আসুন সমাবেশ ভাষা পরীক্ষা করা যাক। আসুন প্রথমে 6502 এ দেখুন , একটি 1975 মাইক্রোপ্রসেসর যা অ্যাপল II এবং VIC-20 মাইক্রোকম্পিউটারগুলির দ্বারা বিখ্যাতভাবে ব্যবহৃত হয়েছিল। প্রোগ্রামিং ল্যাঙ্গুয়েজের ভোর বেলা ২০, ৩০ বছর আগে প্রথম কম্পিউটারের তুলনায় শক্তিশালী হলেও তদানীন্তন মেইনফ্রেম এবং মিনি কম্পিউটারে যা ব্যবহৃত হয়েছিল তার তুলনায় এটি খুব দুর্বল ছিল।
আপনি যদি প্রযুক্তিগত বিবরণটি দেখেন তবে এটিতে 5 টি রেজিস্টার প্লাস কয়েকটি এক বিট পতাকা রয়েছে। একমাত্র "পূর্ণ" নিবন্ধকটি ছিল প্রোগ্রাম কাউন্টার (পিসি) - যা পরবর্তী নির্দেশ কার্যকর করার জন্য নির্দেশ দেয় register অন্যান্য নিবন্ধগুলি যেখানে সঞ্চালক (এ), দুটি "সূচক" নিবন্ধিত হয় (এক্স এবং ওয়াই), এবং একটি স্ট্যাক পয়েন্টার (এসপি)।
সাবউরটিন কল করা এসিপি দ্বারা চিহ্নিত স্মৃতিতে পিসি রাখে এবং তারপরে এসপি হ্রাস করে। সাববুটিন থেকে ফিরে আসা বিপরীতে কাজ করে। কেউ স্ট্যাকের উপর অন্য মানগুলি ধাক্কা দিতে এবং টানতে পারে, তবে এসপির তুলনায় মেমরির উল্লেখ করা মুশকিল, সুতরাং পুনরায় প্রবেশকারী সাবরুটাইনগুলি লেখা কঠিন ছিল। এই জিনিসটি আমরা মর্যাদার জন্য গ্রহণ করি, যে কোনও সময় আমাদের মতো মনে হয় এমন একটি সাবরুটিন কল করা এই আর্কিটেকচারে এত সাধারণ ছিল না। প্রায়শই, একটি পৃথক "স্ট্যাক" তৈরি করা হত যাতে পরামিতিগুলি এবং সাব্রুটিনের ফেরতের ঠিকানা পৃথক রাখা যায়।
আপনি যদি প্রসেসরের দিকে তাকান যা 6502, 6800 কে অনুপ্রাণিত করেছিল , এটির একটি অতিরিক্ত রেজিস্ট্রার, সূচক রেজিস্টার (আইএক্স), এসপি হিসাবে বিস্তৃত ছিল, যা এসপি থেকে মান গ্রহণ করতে পারে।
মেশিনে, একটি পুনরায় প্রবেশকারী সাব্রুটিনকে কল করে স্ট্যাকের উপর প্যারামিটারগুলি চাপানো, পিসি ঠেকানো, পিসিকে নতুন ঠিকানায় পরিবর্তন করা এবং তারপরে সাব্রোটাইন তার স্থানীয় ভেরিয়েবলগুলি স্ট্যাকের উপর চাপ দেয় । যেহেতু স্থানীয় ভেরিয়েবল এবং পরামিতিগুলির সংখ্যা জানা আছে, তাদের সম্বোধন করা স্ট্যাকের সাথে তুলনামূলকভাবে করা যায়। উদাহরণস্বরূপ, একটি ফাংশন দুটি প্যারামিটার গ্রহণ করে এবং দুটি স্থানীয় ভেরিয়েবলগুলি এর মতো দেখায়:
SP + 8: param 2
SP + 6: param 1
SP + 4: return address
SP + 2: local 2
SP + 0: local 1
এটি যে কোনও সংখ্যক বার বলা যেতে পারে কারণ সমস্ত অস্থায়ী স্থান স্ট্যাকের মধ্যে রয়েছে।
8080 , টিআরএস-80 CP / এম-ভিত্তিক microcomputers একটি হোস্ট ব্যবহার করা 6800 অনুরূপ কিছু করতে পারে, স্ট্যাক এসপি ঠেলাঠেলি এবং তারপর তার পরোক্ষ রেজিস্টার, ঐ খ তে এটি পপিং দ্বারা।
এটি জিনিসগুলি বাস্তবায়নের একটি খুব সাধারণ উপায় এবং বেস পয়েন্টারটি সহজে ফিরে আসার আগে সমস্ত স্থানীয় ভেরিয়েবল ডাম্পিং করে তোলে এটি আরও আধুনিক প্রসেসরের উপর আরও বেশি সমর্থন পেয়েছিল।
সমস্যা, দ্য, আপনি কীভাবে কিছু ফিরিয়ে দেবেন ? প্রসেসরের রেজিস্টারগুলি খুব প্রথম দিকে খুব বেশি ছিল না এবং মেমরির কোন অংশটি সম্বোধন করতে হবে তা অনুসন্ধান করার জন্য প্রায়শই তাদের কয়েকটি ব্যবহার করা প্রয়োজন। স্ট্যাকের জিনিসগুলি ফিরিয়ে দেওয়া জটিল হবে: আপনাকে সমস্ত কিছু পপ করতে হবে, পিসিটি সংরক্ষণ করতে হবে, ফিরে আসা প্যারামিটারগুলি ধাক্কা দিতে হবে (যা ইতিমধ্যে সেখানে সংরক্ষণ করা হবে?), তারপরে আবার পিসি টিপুন এবং ফিরে আসুন।
সুতরাং সাধারণত যা করা হত তা ছিল রিটার্ন মানটির জন্য একটি নিবন্ধক সংরক্ষণ করা । কলিং কোড জানত যে রিটার্নের মানটি একটি নির্দিষ্ট রেজিস্টারে থাকবে, এটি সংরক্ষণ বা ব্যবহার না করা অবধি সংরক্ষণ করতে হবে।
আসুন এমন একটি ভাষা দেখি যা একাধিক ফেরতের মানগুলিকে মঞ্জুরি দেয়: চতুর্থ। ফোর্থ যা করে তা হ'ল আলাদা রিটার্ন স্ট্যাক (আরপি) এবং ডেটা স্ট্যাক (এসপি) রাখা, যাতে সমস্ত ফাংশনটি করতে হয় তার সমস্ত পরামিতিগুলি পপ করে এবং স্ট্যাকের উপর ফেরতের মানগুলি রেখে দেয়। যেহেতু রিটার্ন স্ট্যাকটি পৃথক ছিল, এটি আর পায়নি।
যে কেউ কম্পিউটারের সাথে অভিজ্ঞতার প্রথম ছয় মাসের মধ্যে সমাবেশের ভাষা এবং ফোর্থ শিখেছে, একাধিক রিটার্ন মান আমার কাছে সম্পূর্ণ স্বাভাবিক বলে মনে হয়। ফোর্থের মতো অপারেটরগুলি /mod
, যারা পূর্ণসংখ্যা বিভাগ এবং বাকী অংশগুলি ফিরিয়ে দেয় , সুস্পষ্ট বলে মনে হয়। অন্যদিকে, আমি সহজেই দেখতে পাচ্ছি যে যার প্রাথমিক অভিজ্ঞতা সি মাইন্ড সেই ধারণাটিকে কীভাবে অদ্ভুত বলে মনে করে: এটি একটি "ফাংশন" কী তার তাদের অন্তর্নিহিত প্রত্যাশার বিরুদ্ধে যায়।
গণিতের জন্য ... ভাল, আমি গণিতের ক্লাসে ফাংশন পাওয়ার আগে কম্পিউটার প্রোগ্রামিং করছিলাম। সেখানে হয় সি এস এবং প্রোগ্রামিং ভাষায় যা গণিত দ্বারা প্রভাবিত একটি সম্পূর্ণ অধ্যায় সেখানে একটি সম্পূর্ণ অধ্যায় যা নয়, কিন্তু, তারপর আবার।
সুতরাং আমাদের এমন একটি উপাদান রয়েছে যেখানে গণিত প্রাথমিক ভাষার নকশাকে প্রভাবিত করেছিল, যেখানে হার্ডওয়্যার সীমাবদ্ধতাগুলি সহজেই কার্যকরভাবে প্রয়োগ করা হয়েছিল এবং যেখানে জনপ্রিয় ভাষাগুলি হার্ডওয়্যারটি কীভাবে বিকশিত হয়েছিল তা প্রভাবিত করেছিল (লিস্প মেশিন এবং ফোর্থ মেশিন প্রসেসরগুলি এই প্রক্রিয়াটিতে রোডকিল ছিল)।