কীভাবে একটি ভাষা নিজেকে প্রসারিত করে? [বন্ধ]


208

আমি সি ++ শিখছি এবং আমি জিইউআই প্রোগ্রামগুলি কোড করতে Qt এর ক্ষমতা সম্পর্কে কিছু শিখতে শুরু করেছি । আমি নিজেকে নিম্নলিখিত প্রশ্ন জিজ্ঞাসা:

সি ++ কীভাবে, যার আগে ওএসের কাছে উইন্ডো বা নেটওয়ার্কগুলির মাধ্যমে যোগাযোগের কোনও উপায় জিজ্ঞাসা করতে সক্ষম কোনও সিনট্যাক্স ছিল না (এমন APIs সহ যা আমি সম্পূর্ণরূপে বুঝতে পারি না, আমি স্বীকার করি) হঠাৎ সি ++ তে লিখিত লাইব্রেরির মাধ্যমে এই জাতীয় ক্ষমতাগুলি কীভাবে পাওয়া যায়? এগুলি আমার কাছে ভয়াবহভাবে বিজ্ঞপ্তিযুক্ত বলে মনে হয়। আপনি সম্ভবত সেই লাইব্রেরিতে কোন সি ++ নির্দেশাবলী নিয়ে আসতে পারেন?

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


27
কিভাবে স্ট্যান্ড :: কাউট এমনকি মনিটরে কিছু আঁকতে পারে? বা এটি একটি হার্ডওয়্যার বোঝে এমন একটি সংকলক শীর্ষে বসে?
ডক্টরলভ

14
দুর্দান্ত প্রশ্ন। শেষ পর্যন্ত আপনি হার্ডওয়ার অধ্যয়ন না করা পর্যন্ত উত্তর দেওয়া শক্ত।
ব্যবহারকারী541686

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

8
আফাক্স, সি ++ এর ইনলাইন অ্যাসেমব্লি রয়েছে, যা বেশ কিছু করতে পারে
নামটি

9
@ ডেভোলার: আসলে কিউটি তার নিজস্ব সিগন্যাল-স্লট মেকানিজম, প্রতিবিম্ব এবং অন্যান্য অনেক গতিশীল বৈশিষ্ট্য দিয়ে ভাষাকে প্রসারিত করে। এবং এই জিনিসগুলির জন্য সি ++ কোডটি সংকলনের জন্য একটি সংকলক (মেটা-অবজেক্ট সংকলক) প্রয়োজন।
সিয়ুয়ান রেন

উত্তর:


194

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

উদাহরণস্বরূপ উইন্ডোজের ক্ষেত্রে অপারেটিং সিস্টেম উইন্ডোজ চলমান অ্যাপ্লিকেশনগুলির জন্য তথাকথিত WIN32 API প্রকাশ করে। কিউটি লাইব্রেরি তার এপিআইতে কিউটি ব্যবহার করে অ্যাপ্লিকেশন সরবরাহ করতে সেই এপিআই ব্যবহার করে। আপনি Qt ব্যবহার করেন, Qt WIN32 ব্যবহার করেন, WIN32 উইন্ডোজ অপারেটিং সিস্টেমের নিম্ন স্তরের ব্যবহার করে এবং এটি যতক্ষণ না এটি হার্ডওয়্যারে বৈদ্যুতিক সংকেত রয়েছে।


56
দ্রষ্টব্য: Qtএখানে এটির নীচে স্তরটির বিমূর্ততা সরবরাহ করা হয়েছে , কারণ লিনাক্সে Qtলিনাক্স এপিআইকে ডাকে, ডাব্লুআইএন 32 এপিআই নয়।
ম্যাথিউ এম।

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

81
একটি কম্পিউটার একটি পেঁয়াজের মতো: এটি কাটা আপনাকে কাঁদিয়ে তোলে তবে এটি পরে কিছুটা স্বাদযুক্ত।
আলেকোভ

3
ক্রিস্টোফারফোহল হ্যাঁ, এটি ব্যবহার করতে হয়েছিল যেহেতু কম্পিউটার কীভাবে চকোলেটগুলির বাক্সের মতো হবে তা আমি বুঝতে পারি না। :)
কিছু প্রোগ্রামার ডুড

1
@ ক্লেরিটাস শিক্ষক সম্ভবত বলেছেন user32.dll, বা সম্ভবত বলেছেন gdi32.dll
ব্যবহারকারী 253751

59

আপনি ঠিক বলেছেন যে সাধারণভাবে, গ্রন্থাগারগুলি এমন কিছু সম্ভব করতে পারে না যা ইতিমধ্যে সম্ভব নয়।

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

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


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

2
@ মেডলার্বিসেন্টিসি 1) অগত্যা অন্যান্য সংকলক প্রয়োজন। এটি সম্ভব (এবং এটি প্রায়শই ঘটে থাকে) যে একটি একক সংকলক সমাবেশ সহ একাধিক ভাষাগুলি সংকলন করতে সক্ষম এবং এটি ইনলাইন সমাবেশের সাথে সি ++ সংকলন করতেও সক্ষম হতে পারে। ২) নির্দিষ্ট সিস্টেম এবং সংকলকটির উপর নির্ভর করে, সি ++ থেকে কল করা সেই ফাংশনগুলি সত্যই কোনও ইন্টারফেস ফাইলের সাথে সম্পন্ন করা যেতে পারে তবে সেই ধরণের ইন্টারফেস ফাইলটি ইতিমধ্যে সি (বা এমনকি সি ++) শিরোনাম হতে পারে সি ++ থেকে সরাসরি ব্যবহারযোগ্য।

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

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

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

43

সি এবং সি ++ এর 2 টি বৈশিষ্ট্য রয়েছে যা ওপি যে কথা বলছে তা এই সমস্ত বর্ধনের অনুমতি দেয়।

  1. সি এবং সি ++ মেমরি অ্যাক্সেস করতে পারে
  2. সি এবং সি ++ সি বা সি ++ ভাষায় না নির্দেশের জন্য অ্যাসেমব্লিং কোড কল করতে পারে।

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

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

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

এপিআই-এর আরও একটি স্তর রয়েছে যা সিস্টেম কলের চেয়ে অনেক বেশি কার্যকর। উদাহরণস্বরূপ malloc নিন। এটি কেবল মেমরির বৃহত ব্লকগুলি পাওয়ার জন্য সিস্টেমকে কল করবে না তবে যা ঘটেছিল তা রেখে সমস্ত বইয়ের মাধ্যমে এই স্মৃতিটি পরিচালনা করবে।

উইন 32 এপিআইগুলি একটি সাধারণ প্ল্যাটফর্ম উইজেট সেট সহ কিছু গ্রাফিক কার্যকারিতা আবৃত করে। কিউটি উইন 32 (বা এক্স উইন্ডোজ) এপিআই কে ক্রস প্ল্যাটফর্মের উপায়ে মোড় দিয়ে আরও খানিকটা এগিয়ে নিয়ে যায়।

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


কেভেট প্রায় # 2: সি এবং সি ++ কেবলমাত্র "কলিং কনভেনশন" মেনে চলে এমন ফাংশনগুলি কল করতে পারে যা সংকলক বুঝতে পারে এবং প্রত্যাশা করে। (অ্যাসেম্বলি কোড পছন্দসই যে কোনও কনভেনশন ব্যবহার করতে পারে, বা এমনকি কোনওটিই ব্যবহার করতে পারে না - সুতরাং কোডটি সরাসরি কলযোগ্য নাও হতে পারে)) ভাগ্যক্রমে, প্রতিটি স্ব-সম্মানজনক সংকলক প্ল্যাটফর্মের সাধারণ সম্মেলনগুলি ব্যবহার করার জন্য অন্তর্নির্মিত উপায় সরবরাহ করে। (উইন্ডোজ সি সংকলক, উদাহরণস্বরূপ, আপনার কাছে "সিডিসিএল", "স্টেডক্যাল", বা "ফাস্টক্যাল" কনভেনশনগুলি ব্যবহার করে এমন ফাংশন ব্যবহার করতে দিন)) তবে অ্যাসেম্বলি কোডটি অবশ্যই কম্পাইলার জানে এমন একটি কনভেনশন ব্যবহার করতে পারে, বা সি এবং সি ++ পারেন ' টি সরাসরি এটি কল।
সিএওও

2
এছাড়াও: মেমরি-ম্যাপ করা আই / ও সাধারণ, তবে পুরো গল্পটি নয়। পিসি, উদাহরণস্বরূপ, সাধারণভাবে সিরিয়াল বন্দরগুলি, ডিস্ক ড্রাইভগুলি ইত্যাদি x86 এর "আই / ও পোর্ট" ব্যবহার করে সম্পূর্ণ ভিন্ন প্রক্রিয়াটি সম্বোধন করে। (ভিডিও বাফারটি সাধারণত মেমরি-
ম্যাপযুক্ত থাকে

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

আধুনিক পেরিফেরালগুলি বাল্ক ডেটা স্থানান্তরের জন্য ডিএমএ ব্যবহার করবে তবে আপনি এখনও
ঠিকানার যোগ্য

@ ডোরন: উম্মু, আপনি কোনও পিসিতে আই / ও অ্যাড্রেস স্পেসের (মেমরি স্পেস নয়) মাধ্যমে ডিএমএ নিয়ামককে প্রোগ্রাম করেন, যদি আপনি বুদ্ধিমান হন তবে। আধুনিক x86 সিপিইউগুলি কর্মক্ষমতা উন্নত করতে মেমরি অ্যাক্সেসগুলি পুনরায় অর্ডার করতে পছন্দ করে। এমএমআইওর সাথে, এটি বিপর্যয়কর হতে পারে ... সুতরাং আপনাকে সেই ঠিকানাগুলি আনচাবব্যাক করতে এবং সাবধানে সঠিক স্থানগুলিতে নির্দেশাবলী দেওয়ার বিষয়ে সতর্কতা অবলম্বন করা উচিত । ওটিওএইচ, x86 নিজেই নিশ্চিত করে যে I / O স্পেসে পড়তে এবং লিখতে প্রোগ্রাম ক্রমে সম্পন্ন হয়। যে কারণে গুরুত্বপূর্ণ জিনিসগুলির বেশিরভাগটি এখনও I / O স্থানের মাধ্যমে করা হয় (যা সাধারণত পয়েন্টারের মাধ্যমে অ্যাক্সেসযোগ্য হয় না) এবং সম্ভবত সর্বদা থাকবে will
সিএওও

23

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

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

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

অ্যাপ্লিকেশন দৃষ্টিকোণ থেকে, একটি সিস্কাল হল একটি প্রাথমিক মেশিনের নির্দেশ যা SYSENTERx86-64 এর মত কিছু কনভেনশন ( এবিআই ) সহ

আমার লিনাক্স ডেস্কটপে, Qt লাইব্রেরি ফাইলগুলির উপরে হয় , X11 ক্লায়েন্ট X11 সার্ভারের সাথে যোগাযোগ লাইব্রেরি উপলব্ধকারী Xorg পুরনো এক্স উইন্ডোজ প্রোটোকল

লিনাক্স-এ, lddলাইব্রেরিতে নির্ভরতার দীর্ঘ (দীর্ঘ) তালিকা দেখতে আপনার নির্বাহযোগ্যকে ব্যবহার করুন। pmapরানটাইমে কোনটি "বোঝা" রয়েছে তা দেখতে আপনার চলমান প্রক্রিয়াটি ব্যবহার করুন। বিটিডাব্লু, লিনাক্সে, আপনার অ্যাপ্লিকেশন সম্ভবত কেবলমাত্র ফ্রি সফটওয়্যার ব্যবহার করছে আপনি কী ঘটছে তা আরও বুঝতে আপনি তার উত্স কোডটি (কিউটি থেকে Xlib, libc, ... কার্নেল) অধ্যয়ন করতে পারবেন


2
রেফারেন্সের জন্য, এএনএসআই $ 60 মার্কিন ডলারের সামান্য কম বিদ্রোহী মূল্যের জন্য সি ++ 11 টি বিক্রি করে । (এটি আগে অর্ধেক ছিল তবে মুদ্রাস্ফীতি। ত্রুটি / টিআরএস সম্পর্কে নিশ্চিত নয়।
সিএইচও

19

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

সিস্টেম কলগুলি অপারেটিং সিস্টেমের শক্তি ব্যবহারের একটি নিম্ন-স্তরের উপায়, তবে এটি জটিল এবং ব্যবহারযোগ্য জটিল হতে পারে, তাই প্রায়শই এপিআইগুলিতে "মোড়ানো" থাকে যাতে আপনার সরাসরি মোকাবেলা করতে না হয়। তবে নীচে, ও / এস সম্পর্কিত সংস্থাগুলির সাথে জড়িত যে কোনও কাজ সম্পর্কে মুদ্রণ, নেটওয়ার্কিং এবং সকেট ইত্যাদিসহ সিস্টেম কলগুলি ব্যবহার করা হবে etc.

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


3
গুরুত্বপূর্ণ বিষয়টি যা অনুপস্থিত তা হ'ল those সিস্টেম কলগুলি কোনওভাবেই যাদু নয়। এগুলি কার্নেল দ্বারা পরিবেশন করা হয় যা সাধারণত সি (++) তে লেখা থাকে। তদুপরি, সাইককলগুলি এমনকি প্রয়োজনীয় নয়। স্মৃতি সুরক্ষা ব্যতীত প্রাথমিক ওএসে, উইন্ডোজটি সরাসরি পিক্সেলগুলি হার্ডওয়্যার ফ্রেমবফারে রেখে আঁকতে পারে।
el.pescado

15

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

int main(int argc, char **argv)
{
   return 0
}

এবং এখন এই ফাইলটি সংকলন করুন (বিকাশকারী কমান্ড প্রম্পট ব্যবহার করে) cl Test.c /FaTest.asm

এবার আপনার নোটপ্যাডে টেস্ট.সেম খুলুন। আপনি যা দেখেন তা হ'ল অনুবাদকৃত কোড - সি / সি ++ এসেম্বলারের কাছে অনুবাদ করা। আপনি কি ইঙ্গিত পান?

_main   PROC
    push    ebp
    mov ebp, esp
    xor eax, eax
    pop ebp
    ret 0
_main   ENDP

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

এসেম্বলারের উপর নির্ভর করে আমি এভাবে কিছু টাইপ করব:

_getch proc 
   xor AH, AH
   int 16h
   ;AL contains the keycode (AX is already there - so just return)
ret

আমি এটি একটি এসেম্বলারের সাথে চালিত করি এবং একটি .OBJ উত্পন্ন করি - এটি getch.obj এর নাম দিন।

আমি তখন একটি সি প্রোগ্রাম লিখি (আমি # কিছু অন্তর্ভুক্ত করি না)

extern char getch();

void main(int, char **)
{
  getch();
}

এখন এই ফাইলটির নাম দিন - getChTest.c। Getch.obj বরাবর পাশ করে এই ফাইলটি সঙ্কলন করুন। (অথবা পৃথকভাবে .obj এবং LINK getChTest.Obj এবং getch.Obj এ একত্রে সংকলন GetChTest.exe উত্পাদন করতে)।

GetChTest.exe চালান এবং আপনি দেখতে পাবেন যে এটি কীবোর্ড ইনপুটটির জন্য অপেক্ষা করে।

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

উভয় ভাষা __asm ​​কীওয়ার্ডকে সমর্থন করে যার অর্থ আপনি আপনার সমাবেশ ভাষা কোডটিও মিশ্রিত করতে পারেন। সি এবং সি ++ শেখা আপনাকে সামগ্রিকভাবে আরও ভাল গোলাকার প্রোগ্রামার করে তুলবে।

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


10

কীভাবে সি ++ ... হঠাৎ সি ++ তে লিখিত লাইব্রেরির মাধ্যমে এমন ক্ষমতা পাওয়া যায়?

অন্যান্য গ্রন্থাগারগুলি ব্যবহার করার মতো মায়াবী কিছুই নেই। গ্রন্থাগারগুলি হ'ল ফাংশনগুলির সহজ বড় ব্যাগ যা আপনি কল করতে পারেন।

নিজেকে এই জাতীয় একটি ফাংশন লিখুন বিবেচনা করুন

void addExclamation(std::string &str)
{
    str.push_back('!');
}

আপনি যদি সেই ফাইলটি অন্তর্ভুক্ত করেন তবে আপনি লিখতে পারেন addExclamation(myVeryOwnString); । এখন আপনি জিজ্ঞাসা করতে পারেন, "সি ++ হঠাৎ একটি স্ট্রিংয়ে বিস্ময়বোধক পয়েন্ট যুক্ত করার ক্ষমতা কীভাবে পেল?" উত্তরটি সহজ: আপনি এটি করতে একটি ফাংশন লিখেছিলেন তখন আপনি এটি বলেছিলেন।

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

অন্যান্য প্রশ্নগুলির উত্তর কীভাবে উইন্ডো অঙ্কনটি আসলে কাজ করে তবে আপনি কীভাবে গ্রন্থাগারগুলি কাজ করেন সে সম্পর্কে বিভ্রান্তি লাগলেন তাই আমি আপনার প্রশ্নের সবচেয়ে মৌলিক অংশটি সম্বোধন করতে চেয়েছিলাম।


8

কীটি হ'ল অপারেটিং সিস্টেমের একটি এআইপিআই প্রকাশ করার সম্ভাবনা এবং এই এপিআই কীভাবে ব্যবহার করা যায় তার বিশদ বিবরণ।

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

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


7

উইন্ডো তৈরির জন্য বিশেষ সিনট্যাক্সের প্রয়োজন নেই। প্রয়োজনীয় সমস্ত হ'ল ওএস উইন্ডোজ তৈরির জন্য একটি API সরবরাহ করে। এই জাতীয় একটি এপিআই সাধারণ ফাংশন কল নিয়ে গঠিত যার জন্য সি ++ সিনট্যাক্স সরবরাহ করে।

তদুপরি সি এবং সি ++ এগুলি সিস্টেম প্রোগ্রামিং ভাষা হিসাবে পরিচিত এবং এটি নির্বিচার পয়েন্টারগুলিতে অ্যাক্সেস করতে সক্ষম হয় (যা সম্ভবত হার্ডওয়্যার দ্বারা কোনও ডিভাইসে ম্যাপ করা যেতে পারে)। অতিরিক্তভাবে, এটি সমাবেশে সংজ্ঞায়িত ফাংশনগুলি কল করাও মোটামুটি সহজ, যা প্রসেসর সরবরাহ করে এমন পরিপূর্ণ পরিবাহের অনুমতি দেয় allows সুতরাং সি বা সি ++ এবং অল্প পরিমাণে সমাবেশের সাহায্যে নিজেই একটি ওএস লেখা সম্ভব।

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


7

প্রথমত, এখানে কিছুটা ভুল বুঝাবুঝি হচ্ছে think

সি ++ কীভাবে হয় না, যার উইন্ডো বা নেটওয়ার্কগুলির মাধ্যমে যোগাযোগের কোনও উপায়ের জন্য ওএসকে জিজ্ঞাসা করতে সক্ষম কোনও সিনট্যাক্স ছিল না

ওএস অপারেশন করার জন্য কোনও সিনট্যাক্স নেই । এটি শব্দার্থবিজ্ঞানের প্রশ্ন ।

হঠাৎ সি ++ এ লিখিত গ্রন্থাগারগুলির মাধ্যমে এ জাতীয় ক্ষমতা পান

ঠিক আছে, অপারেটিং সিস্টেমটি বেশিরভাগ সি তে রচনা করা হয় the আপনি বহিরাগত কোডটি কল করতে ভাগ করা লাইব্রেরি (সুতরাং, dll) ব্যবহার করতে পারেন । উপরন্তু, অপারেটিং সিস্টেম কোড সিস্টেম রুটিন রেজিস্টার করতে পারেন * syscalls বা বিঘ্নিত যা আপনি ব্যবহার কল করতে পারেন সমাবেশ । ভাগ করা লাইব্রেরিগুলি প্রায়শই কেবল সেই সিস্টেমে আপনার জন্য কল করে, তাই আপনি ইনলাইন অ্যাসেম্বলি ব্যবহার করে বঞ্চিত হন।

এখানে এটির একটি সুন্দর টিউটোরিয়াল: http://www.win.tue.nl/~aeb/linux/lk/lk-4.html
এটি লিনাক্সের জন্য, তবে নীতিগুলি একই।

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


7

অন্যান্য উত্তরের জন্য কিছুটা ভিন্ন দৃষ্টিভঙ্গি দেওয়ার প্রয়াসে আমি এর মতো উত্তর দেব।

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

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

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

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

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

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

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

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

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


6

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

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


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

3
@ মাথিয়াসবি: আচ্ছা, আপনি ভুল করছেন, যেহেতু syscall(এবং এর কাজিন sysenter) আসলে সিপিইউর নির্দেশনা।
ব্যবহারকারী541686

2
এটি কেবল আপনার উত্তরকে উন্নত করার ইঙ্গিত ছিল, কারণ এটি আমার পক্ষে পরিষ্কার ছিল না। এটিকে ব্যক্তিগত আক্রমণ বা অন্য কিছু হিসাবে দেখবেন না।
ম্যাথিয়াসবি

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

3
সিস্টেম কলগুলি সফ্টওয়্যার বিঘ্ন ব্যবহার করে করা হয়। মত নির্দেশগুলি sysenterঅনুকূল কল পথগুলি, যেহেতু বিঘ্নিত হ্যান্ডলারের দ্বারা ব্যবহৃত প্রসঙ্গের স্যুইচিং প্রত্যেকের পছন্দ মতো দ্রুত ছিল না, তবে মূলত এটি এখনও একটি সফ্টওয়্যার তৈরি করা হয় যা ওএস কার্নেলের দ্বারা ইনস্টল হওয়া কোনও হ্যান্ডলারের সাথে ভেক্টরিং দ্বারা পরিচালিত হয়। IS সম্পাদিত কনটেক্সট স্যুইচিং প্রক্রিয়ার অংশটি sysenterহ'ল রিং 0 সেট করতে প্রসেসরের মোড বিটগুলি পরিবর্তন করা - সমস্ত সুবিধাপ্রাপ্ত নির্দেশাবলী, রেজিস্টার এবং মেমরি এবং I / O অঞ্চলে সম্পূর্ণ অ্যাক্সেস।
বেন ভয়েগট

4

আপনার সি ++ প্রোগ্রামটি কিউটি লাইব্রেরি ব্যবহার করছে (সি ++ তেও কোডড)। কিউটি লাইব্রেরি উইন্ডোজ ক্রিয়েট উইন্ডোএক্স ফাংশনটি ব্যবহার করবে (যা কার্নেল 32.dll এর মধ্যে সি কোড করা হয়েছিল)। অথবা লিনাক্সের অধীনে এটি Xlib ব্যবহার করতে পারে (সি তে কোডডও ছিল ), তবে এটি এক্স প্রোটোকলে " প্লিজ আমার জন্য উইন্ডো তৈরি করুন " এর অর্থ কাঁচা বাইটগুলি প্রেরণ করতে পারে ।

আপনার ক্যাচ -২২ প্রশ্নের সাথে সম্পর্কিত theতিহাসিক নোটটি হ'ল "প্রথম সি ++ সংকলকটি সি ++ তে লেখা হয়েছিল" যদিও বাস্তবে এটি কয়েকটি সি ++ ধারনা সহ একটি সি সংকলক ছিল, সুতরাং এটি প্রথম সংস্করণটি সংকলন করতে পারে, যা পরে নিজেই সংকলন করতে পারে ।

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


2

এই প্রশ্নটি আমি কীভাবে দেখছি তা আসলে একটি সংকলক প্রশ্ন।

এটিকে দেখুন, আপনি অ্যাসেমব্লিতে একটি কোডের টুকরো লিখুন (আপনি এটি কোনও ভাষায় এটি করতে পারেন) যা আপনার নতুন লেখা ভাষাকে অনুবাদ করে যা আপনি জেড ++ কে অ্যাসেম্বলিতে কল করতে চান, সরলতার জন্য এটি একটি সংকলক বলতে দেয় (এটি একটি সংকলক) ।

এখন আপনি এই সংকলকটিকে কিছু বেসিক ফাংশন দিন, যাতে আপনি ইন, স্ট্রিং, অ্যারে ইত্যাদি লিখতে পারেন আসলে আপনি এটি পর্যাপ্ত ক্ষমতা দিয়ে থাকেন যাতে আপনি জেড ++ তে নিজেই সংকলকটি লিখতে পারেন। এবং এখন আপনার কাছে Z ++ লিখিত জেড ++ এর জন্য একটি সংকলক রয়েছে, খুব সুন্দর right

এমনকি শীতলতরটি হ'ল এখন আপনি যেটি ইতিমধ্যে রয়েছে তার ক্ষমতাগুলি ব্যবহার করে সেই সংকলকটিতে দক্ষতা যুক্ত করতে পারেন, এইভাবে পূর্ববর্তী বৈশিষ্ট্যগুলি ব্যবহার করে নতুন বৈশিষ্ট্যগুলির সাথে জেড ++ ভাষা প্রসারিত করুন

উদাহরণস্বরূপ, আপনি যদি কোনও রঙে পিক্সেল আঁকার জন্য যথেষ্ট কোড লিখেন তবে আপনি যা চান তা আঁকতে Z ++ ব্যবহার করে এটি প্রসারিত করতে পারেন।


0

হার্ডওয়ারই এটি ঘটতে দেয়। আপনি গ্রাফিক্স মেমরিটিকে একটি বড় অ্যারে (পর্দার প্রতিটি পিক্সেলের সমন্বয়ে) হিসাবে ভাবতে পারেন। স্ক্রিনে আঁকতে আপনি এই স্মৃতিতে সি ++ অথবা যে কোনও ভাষা ব্যবহার করতে পারেন যা সেই মেমরিতে সরাসরি অ্যাক্সেসের অনুমতি দেয় write সেই স্মৃতিটি কেবল গ্রাফিক্স কার্ডের মাধ্যমে অ্যাক্সেসযোগ্য বা অবস্থিত হতে পারে।

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


আমি যে বক্তব্যটি তৈরির চেষ্টা করছিলাম সেটি হ'ল ভাষার কোনও নতুন সংস্করণ নতুন করে লেখার দরকার আছে এমন কোনও অর্থে একটি ভাষার নিজেকে "প্রসারিত" করার দরকার নেই, এবং কোনও প্রোগ্রাম আকর্ষণীয় কিছু করার জন্য এটি সত্যই বিজ্ঞপ্তি নয় isn't হার্ডওয়্যার সঙ্গে ইন্টারফেস অবশ্যই।
জন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.