প্রোগ্রামাররা কীভাবে উচ্চ স্তরের ভাষায় নিম্ন স্তরের সফ্টওয়্যার বিকাশ নিয়ে কাজ করে?


20

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

আমি জাভা এবং সি # তে বেসিক জিনিসগুলি কীভাবে করব তা আমি জানি। একটি ছোট উইন্ডোজের মতো জিনিস প্রয়োগ করে বা জেনেরিক ক্লাস করে class আমি মূলত শিখছি এবং এখনও বড় কিছু করার চেষ্টা করিনি। যাইহোক, আমি সবসময় কীভাবে "হুডের নীচে" জিনিসগুলি করা হয় তা সম্পর্কে আমি কৌতূহলী ছিলাম আমার ধারণা আপনি বলতে পারেন।

আমি জানি এটি সমস্ত 1s এবং 0 এর মধ্যে সিদ্ধ হয়ে যায় এবং এই ভাষাগুলি মূলত 1s এবং 0 এর নিদর্শনগুলিকে কমান্ড দেয়, তবে মনে হয় সেখান থেকে এই লাফ রয়েছে: এর জন্য একটি লাইব্রেরি ব্যবহার করুন। আমার কাছে দেখে মনে হচ্ছে লাইব্রেরি ছাড়া সমস্ত সি # করণীয় পাটিগণিত এবং বাইনারি যুক্তি। ইনপুট বা আউটপুট পেতে, আপনি লাইব্রেরি ইত্যাদি ব্যবহার করুন ...

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

তাই আমার প্রশ্ন হল এটি:

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

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


7
"হুডের নীচে" কী চলছে তা বোঝার একটি কৌশল হ'ল বিষয়গুলি পড়ার ও বুঝতে সহজ করার জন্য অনুচ্ছেদে ফোকাস করা এবং ব্যবহার করা। পড়তে সহজ হতে দয়া করে এই প্রশ্নটি সম্পাদনা করুন ।
এস। লট

1
আপনার আগ্রহের ভিত্তিতে আপনি চার্লস পেটজোল্ডের কোড: কম্পিউটার হার্ডওয়্যার এবং সফ্টওয়্যার এর লুকানো ভাষাটির একটি অনুলিপি নিতে চাইতে পারেন। এটি একটি ভাল পড়া। amazon.com/Code-Language- কম্পিউটার-
Hardware

@ এসলট উদ্ধার করতে :-)
মার্টিন উইকম্যান

@ মার্টিন উইকম্যান: খুব সুন্দর কাজ করার পরেও কি এটি @ fender1901 সম্পাদনা বা ফোকাস করতে সহায়তা করেছিল?
এস.লট

1
@ মার্টিন উইকম্যান: পরিবর্তনগুলি পূর্বাবস্থায় ফেলা মুখ্য বিষয় নয়। অন্যকে শেখার জন্য উত্সাহিত করা আমার বিষয়। আপনি পরিষ্কারভাবে ইতিমধ্যে জানেন। @ fender1901 এর মাধ্যমে শিখতে হবে। আমার প্রশ্নটি হ'ল: "এটি সম্পাদনা বা ফোকাস করতে @ fender1901 কে সহায়তা করেছিল?" আপনি কি মনে করেন?
এস.লোট

উত্তর:


9

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

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

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

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

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

আছে HTH


আপনি আসলে মধ্যবর্তী ভাষা দিয়ে প্রোগ্রাম করতে পারেন বা সেগুলি পরীক্ষা করার জন্য কেবল সেখানে রয়েছে?
fender1901

আপনি কি জিজ্ঞাসা করছেন যে আপনি 'বাইটকোড' উত্স কোড লিখতে পারেন?
মার্টিজন ভার্বার্গ

আমি মনে করি. আমি ভাবছি আপনি যদি জাভা বা সি # এর মতোই কেবল বাইটোকড বা আইল ব্যবহার করে কোডিং শুরু করতে পারেন?
fender1901

জাভা বা সি #, খুব কম লোকই বাইটকোড নিয়ে
কৌশলে লিপ্ত হয়

4

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

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

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

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


2

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

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


2

আমি কী করেছি যা উচ্চ স্তরের ভাষা (জাভা) শিখেছে তখন আপনি নিম্ন স্তরের ভাষা এবং হার্ডওয়্যার সম্পর্কে আরও আগ্রহী হয়ে উঠলেন। এর সবচেয়ে আদিম অবস্থায় একটি কম্পিউটার হল ইলেকট্রনিক্স। 1 এবং 0 এর কেবল বৈদ্যুতিক চার্জ (চালু এবং বন্ধ) এর পরিসংখ্যান। একবার আমি প্রসেসরের পিছনে যুক্তি বুঝতে শুরু করেছিলাম এবং একটি পাটিগণিত লজিক ইউনিটের ভিতরে কী রয়েছে, জিনিসগুলি সত্যিই জায়গায় পড়ে যায়।
আমার মনে হয় আপনার পড়াশোনা শুরু করা উচিতবুলিয়ান লজিক (এবং, ওআর, এক্সওআর, ইত্যাদি) এর মতো জিনিসগুলি দিয়ে, তারপরে ছোট ছোট ALU ডিজাইন করা শুরু করুন এবং কীভাবে মেমরি এবং রেজিস্ট্রিগুলি জিনিসগুলিতে খেলা যায় তা দেখুন। এর পরে কিছু সমাবেশ ভাষা শিখুন এবং তারপরে আপনি বুঝতে পারবেন যে একটি সংকলন কীভাবে কাজ করে। খুব শীঘ্রই উচ্চ স্তরের ভাষাগুলি বিরক্তিকর বলে মনে হবে! :) শুধু মজা করছি. যদিও এটি সমস্ত কিছু জায়গায় পড়ে যায় এটি সুন্দর, এবং এটি শিখতে উপভোগ করা উচিত। একবার আপনি কৌতূহলের পথে চলতে শুরু করার পরে, আপনি কিছু সময় নেবেন না pick


2

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

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

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


আমি মনে করি আমার এই মুহূর্তে আমার বৃহত্তম সমস্যাটি হ'ল এই বিষয়গুলির অনেকগুলি বোঝা মুশকিল হতে চলেছে কারণ আমার পটভূমি নেই। আমার ধারণা, এই অঞ্চলগুলিতে একটি সেতু দরকার।
fender1901

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

1

আপনাকে অবশ্যই খুঁজে বার করতে হবে, ব্যবহৃত প্ল্যাটফর্ম / ভাষা দিয়ে নিম্ন-স্তরের কাজটি করা কি সম্ভব:

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

হুঁ, একটি ভাষা চয়ন করা এলোমেলো হওয়া উচিত sounds


-2

প্রশ্নের বেশ কয়েকটি উত্তর রয়েছে: ১. জাভা এবং সি # হ'ল উচ্চ স্তরের ভাষাগুলি এগুলি মেমরি পরিচালনা করে এমন একটি বিদ্যমান অপারেটিং সিস্টেমে অ্যাপ্লিকেশন বিকাশের জন্য তৈরি করা হয়েছে (এটি বিভিন্ন সিস্টেমে চলতে পারে এমন হাইব্রিড প্রোগ্রামগুলি তৈরি করাও সম্ভব করে তোলে)। ২. নিম্ন স্তরের প্রোগ্রামিংগুলির যে অংশগুলি প্রয়োজন সেগুলি হ'ল ওএস বিকাশ, ড্রাইভার বিকাশ, এএএ গেমস ডেভলপমেন্ট ইত্যাদি Java সাধারণত জাভা বা সি # তে নিম্ন স্তরের প্রোগ্রামিং করা হয় না এটি সি / সি ++ এবং সমাবেশ ভাষা ব্যবহার করে চালিত হয়।

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

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


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