C একটি অত্যন্ত জনপ্রিয় প্রোগ্রামিং ল্যাংগুয়েজ এর নাম। আর প্রোগ্রামিং ল্যাংগুয়েজ হল যা দিয়ে কম্পিউটার প্রোগ্রাম তৈরি করা হয়। C জনপ্রিয় হবার কারণ হচ্ছে এটি একটি মিড লেভেল, প্রোসিডিউরাল, স্ট্রাকচার্ড, ও মেশিন ইন্ডিপেন্ডেন্ট ভাষা। এই বিশেষণ গুলোর মানে কি সেটা আস্তে আস্তে পরিষ্কার হবে। যিনি এই প্রোগ্রামিং ভাষা তৈরি করেছেন তার নাম ডেনিস রিচি। সি ল্যাঙ্গুয়েজ তৈরি হয়েছিল ইউনিক্স অপারেটিং সিস্টেম ডেভেলপমেন্ট করার জন্য।
সংক্ষিপ্ত ইতিহাস
সব আধুনিক প্রোগ্রামিং ভাষাগুলির মূল ALGOL। এটা ১৯৬০ সাল এ তৈরি। ALGOL প্রথম স্ট্রাকচার প্রোগ্রামিং এর ধারণা দেয়।
১৯৬৭ এর দিকে মার্টিন রিচার্ডস BCPL (Basic Combined Programming Language) তৈরি করেন। ১৯৭০ সালে, যুক্তরাষ্ট্রের বেল গবেষণাগারে বিজ্ঞানী কেন টমসন তৈরি করেন B নামক একটি প্রোগ্রামিং ভাষা। এটি ছিল পূর্বের BCPL-এর একটি উন্নত সংস্করণ। B দিয়েই UNIX অপারেটিং সিস্টেম প্রথমে তৈরি হয়েছিল বেল গবেষণাগারে। BCPL এবং B উভয়েই টাইপবিহীন একটি প্রোগ্রামিং ভাষা ছিল।
১৯৭২ সালে, ডেনিস রিচি বেল গবেষণাগারে ALGOL, B এবং BCPL অনুসরণ করেন এবং নিজে থেকে আরো কিছু কৌশল ব্যবহার করে তৈরি করেন "সি" (C) ল্যাঙ্গুয়েজ। মূলত B-এর সীমাবদ্ধতা গুলো দূর করার উদ্দেশ্যেই "সি" এর উৎপত্তি। এর পর UNIX অপারেটিং সিস্টেমকে C দ্বারা ডেভেলপ করা হয়। UNIX আজকের সর্বাধিক জনপ্রিয় নেটওয়ার্ক অপারেটিং সিস্টেম।
৭০ এবং ৮০ দশকের দিকে C এর জনপ্রিয়তা বাড়ার সাথে সাথে এর অনেকগুলো ভার্সন তৈরি হয়। ১৯৮৩ সালে আমেরিকান মাননিয়ন্ত্রক সংস্থা (American National Standards Institute ; সংক্ষেপে ANSI) C এর ১টি আদর্শ ভার্সন তৈরির জন্য কমিটি গঠন করে। দীর্ঘ ৬ বছর পরে ১৯৮৯ সালে সেই আদর্শ সি ভাষাটি তৈরি হয়, যা আমেরিকান মাননিয়ন্ত্রক সংস্থা C (আনসি সি (ANSI C)) নামে পরিচিত। পরবর্তিতে আন্তর্জাতিক মাননিয়ন্ত্রক সংস্থা (ISO) ১৯৯০ সালে C এর এই আদর্শ ভার্সনটি গ্রহণ করে, যা C90 নামে পরিচিত। মুলত "C89" এবং "C90" একই ভাষা। যুগের প্রয়োজনে আন্তর্জাতিক মাননিয়ন্ত্রক সংস্থা ১৯৯৫ সালে এই সংস্করণকে বর্ধিত করে এবং পরবর্তিতে ১৯৯৯ সালে সম্পূর্ণ নতুন একটি সংস্করণ প্রকাশ করে যা C99 নামে পরিচিত। সর্বশেষ ২০১১ সালে সি প্রোগ্রামিং ল্যাঙ্গুয়েজের নবীনতম সংস্করণ C11 প্রকাশিত হয়।
মূলত প্রোগ্রামিং এর কাজ হল কম্পিউটারকে ভাল মত বুঝিয়ে দেয়া যে তাকে ঠিক কি করতে হবে এবং কী ভাবে করতে হবে। আর সেই বুঝানর কাজটা সম্পন্ন করে কম্পিউটার প্রোগ্রামাররা। আমাদের কম্পিউটার এর ভেতর যেই সকল সফটওয়্যার আছে সেই সব গুলই প্রোগ্রামিং করে তৈরি করা হয়েছে । তবে সেটা হতে পারে সি অথবা সি++ অথবা জাভা অথবা পাইথন অথবা পিএইচপি দিয়ে আবার মজার বিষয় হল এই সব প্রোগ্রামিং ভাষা একসাথে মিশিয়েও একটা সফটওয়্যার হতে পারে । কি মজা তাইনা! আমরা আস্তে আস্তে সব শিখবো ।
প্রোগ্রামিং দক্ষতা
প্রোগ্রামিং দক্ষতা বৃদ্ধি করতে C অতুলনীয় একটি প্রোগ্রামিং ভাষা। তারমানে এই নয় যে C ভাষা শিখলেই তুমি প্রোগ্রামিং এ দক্ষ হয়ে যাবে।
ভাষা মনের ভাব প্রকাশ এর একটি মাধ্যম। যদি তুমি কোন ভাষা শিখ তাহলে সেটার মাধ্যমে তোমার মনের ভাবও প্রকাশ করতে পারবে বা বলতে পারবে। কিন্তু তোমার মনের ভাব প্রকাশ করাটা ভাষার ওপর নির্ভর করে না। বিষয়টা হলো তুমি যা ভাব তা প্রকাশ করার একটা মাধ্যম হল ভাষা। তোমাকে বলা হলো তুমি বাংলা ভাষা জান তাহলে বাংলা ভাষায় একটি রচনা লিখো। এখন কি লিখবা তা তো তোমাকেই ভাবতে হবে। এখন তুমি যা লিখতে চাও তা যদি তোমার ভাবনায় চলে আসে তাহলে সেটা যেকোনো ভাষায় লিখতে পারবে। তুমি বাংলা ভাষা জান সেই জন্য তুমি মনে করো না যে তুমি ভাবতেও পার। ঠিক তেমনি প্রোগ্রামিং দক্ষতা উন্নয়ন এর জন্য আপনাকে ভাবতে শিখতে হবে। সবাই তো ভাষা জানে তবে সবাই ভাবতে পারে না। তোমাকে চিন্তা করতে হবে কি ভাবে একটা প্রব্লেম বা একটা প্রোগ্রাম এর সমাধান করতে হবে আর এটাকেই বলে প্রোগ্রামিং এর দক্ষতা। তোমরা যত বেশি প্রোগ্রামিং প্রব্লেম নিয়ে চিন্তা করবা ততই তোমার প্রোগ্রামিং এ দক্ষতা বৃদ্ধি পাবে। তোমাদের অনেক ধরণের প্রোগ্রাম বানাতে হবে আর সেটা বিভিন্ন ভাবে বানানোর চেষ্টা করতে হবে।
বাংলা ভাষা ব্যবহার করতে পারলেই যেমন, তা দিয়ে সাহিত্য রচনা করা যায় না ঠিক তেমনি, কোন প্রোগ্রামিং ল্যাংগুয়েজ এর নিয়মকানুন (syntax) মুখস্ত, কণ্ঠস্থ বা ঠোটস্থ করলেই তুমি খুব ভালো ভালো প্রোগ্রামার হয়ে যাবে ব্যাপারটা তা নয়। প্রোগ্রামার হতে গেলে তোমাদের নিয়মকানুন গুলোকে বিভিন্ন ক্ষেত্রে সৃজনশীল উপায়ে কিভাবে ব্যবহার করা যায়, সেটা নিয়ে ভাবতে হবে।
বেসিক উপাদান
C এর বেসিক উপাদান গুলো প্রায় সকল প্রোগ্রামিং ভাষাকেই কভার করে। সব প্রোগ্রামিং ল্যাঙ্গুয়েজ এই ভ্যারিয়েবল, if-else, loop, swich case, function, array ইত্যাদি এর ধারণা আছে। আর এই সব কিছুর ধারণা C থেকে নিবো আমরা। আর এই ধারণা আমরা একবার পেয়ে গেলে আমাদের নতুন প্রোগ্রামিং ভাষা শিখতে বেশি কষ্ট হবেনা।
C দিয়ে তৈরি কিছু জনপ্রিয় সফটওয়্যার -
- ওরাকল - এটা ডাটাবেজ সফটওয়্যার
- এন্ড্রয়েড এর কোর লাইব্রেরি সি দিয়ে লেখা
- MySQL - এটাও একটা ডাটাবেজ সফটওয়্যার
- প্রায় সকল ডিভাইস ড্রাইভার সি দিয়ে লেখা
- প্রতিটা ওয়েব ব্রাউজার এর প্রধান অংশ সি দিয়ে লেখা
- Unix অপারেটিং সিস্টেম ডেভেলপ হয়েছে সি দিয়ে
সি ভাষায় সফটওয়্যার কিভাবে তৈরি হয় ?
আমাদের সবাই জানি যে .exe ফাইল একটি সফটওয়্যার। মনে করো, এখন আমরা একটা সফটওয়্যার বানাব যার নাম calculator.exe । এখন বিষয়টা হলো .exe ফাইল আমরা বানাবো কিভাবে, .exe ফাইল অনেক গুলো ০ আর ১ এর সমাবেশ। আর ০,১ মেশিন ভাষা, আর এই ভাষায় কোড করা অনেক কঠিন এবং কোড লিখতেও অনেক কষ্ট হয়। আচ্ছা ধরো আমরা .exe ফাইল বানিয়েও ফেললাম কিন্তু .exe তো অপারেটিং সিস্টেম ডিপেন্ডেন্ট যেটা অন্য কোনো অপারেটিং সিস্টেম এর জন্য উপযোগি না। তাহলে কি করতে হবে অন্য অপারেটিং সিস্টেম এর জন্য আমাদের আবার নতুন করে কোড লিখতে হবে ঐ অপারেটিং সিস্টেম এর ফরমেট অনুযায়ী। তাহলে ভাব তোমাকে কত কষ্ট করতে হবে ?
এর থেকে সহজ উপায় হলো আমরা একটা সহজ ভাষা শিখবো আর সেটা হলো C ল্যাঙ্গুয়েজ। C ল্যাঙ্গুয়েজ এ আমরা কোড করবো আর এই কোড থেকে যেই ফাইল তৈরি হবে সেটাকে বলা হয় সোর্স ফাইল। আর এই ফাইল এর এক্সটেনশন .c হবে। এই ফাইল এর মধ্যে আমরা C ল্যাঙ্গুয়েজ দিয়ে যে সব নির্দেশনা বা ইন্সট্রাকশন লিখেছি, সেটা আমাদের মেশিন দিয়ে করতে হবে। কিন্তু .c ফাইল এটা সফটওয়্যার না কারণ অপারেটিং সিস্টেম .exe ফাইল কে বুজতে পারে .c ফাইল বুজতে পারে না। তারমানে অপারেটিং সিস্টেম C ল্যাঙ্গুয়েজ বুঝে না।
এর থেকে সহজ উপায় হলো আমরা একটা সহজ ভাষা শিখবো আর সেটা হলো C ল্যাঙ্গুয়েজ। C ল্যাঙ্গুয়েজ এ আমরা কোড করবো আর এই কোড থেকে যেই ফাইল তৈরি হবে সেটাকে বলা হয় সোর্স ফাইল। আর এই ফাইল এর এক্সটেনশন .c হবে। এই ফাইল এর মধ্যে আমরা C ল্যাঙ্গুয়েজ দিয়ে যে সব নির্দেশনা বা ইন্সট্রাকশন লিখেছি, সেটা আমাদের মেশিন দিয়ে করতে হবে। কিন্তু .c ফাইল এটা সফটওয়্যার না কারণ অপারেটিং সিস্টেম .exe ফাইল কে বুজতে পারে .c ফাইল বুজতে পারে না। তারমানে অপারেটিং সিস্টেম C ল্যাঙ্গুয়েজ বুঝে না।
আচ্ছা তাহলে আমরা .c ফাইল কেন বানালাম ?
কারণ C ল্যাঙ্গুয়েজ হার্ডওয়্যার ইন্ডিপেন্ডেন্ট এবং এতে প্রোগ্রাম তৈরি করা ও সহজ। ধরো আমাদের দুইটা নম্বর অ্যাড এর একটি প্রোগ্রাম বানাতে হবে তাহলে (২ + ৩) লিখলেই হয়ে গেল (এইটা আমরা প্রোগ্রাম করার সময় ভালো মতো বুজবো) কিন্তু আমাদের যদি .exe ফাইল এ কোডিং করতে হয় তাহলে ওখানে ০ এবং ১ এর কিছু কোডিং করতে হতো আর সেটা আমাদের জন্য সুবিধাজনক না। এখন ধরো আমরা একটা ক্যালকুলেটর এর প্রোগ্রাম লিখে ফেলেছি এবং সোর্স কোডটি calculator.c নাম এর ফাইল এ আছে।
এখন আমাদের দরকার .c ফাইলকে সফটওয়্যার এ কনভার্ট করা কারণ .c ফাইল সফটওয়্যার না। এই কাজটা করার জন্য সবচেয়ে প্রথমে যেটা দরকার সেটা হলো প্রিপ্রসেসর সফটওয়্যার।
প্রিপ্রসেসর সফটওয়্যার কি করে বা এর কাজ কি ?
একটা প্রোগ্রাম এ যত গুলো স্টেটমেন্ট "#" দিয়ে শুরু হয় সেই স্টেটমেন্ট গুলো হেন্ডেল করে প্রিপ্রসেসর সফটওয়্যার। আমরা পরে বিস্তারিত জানব যে, "#" দিয়ে শুরু স্টেটমেন্ট কি কাজ করে।
আমাদের প্রোগ্রাম তৈরির সময় অনেক গুলো হেডার ফাইল অ্যাড করতে হয় যে গুলো আমাদের তৈরি না। কিন্তু এই ফাইল এর ভিতরের কোড গুলো আমাদের কোড এর সাথে অ্যাড করা গুরুত্বপূর্ণ। আমরা কোড এর মধ্যে এমন কিছু লাইন লিখি যার কারণে প্রিপ্রসেসর হেডার ফাইল এর কনটেন্ট গুলো কে আমাদের ফাইল এর কনটেন্ট এর সাথে মিশিয়ে একটা নতুন ফাইল তৈরি করে। যার এক্সটেনশন .i তার মানে calculator.c এই ফিলকে প্রিপ্রসেসর এ কনভার্ট করলে calculator.i নাম একটি ফাইল তৈরি হবে। এই নতুন ফাইলটা আমাদের ফাইল এর মতোই শুধু "#" দ্বারা শুরু ওই সকল স্টেটমেন্ট গুলোর পরিবর্তে কিছু অন্য স্টেটমেন্ট অ্যাড হয়েছে যেই স্টেটমেন্ট গুল ঐ হেডার ফাইল এর মধ্যে ছিল।
সাধারণত, প্রিপ্রসেসর "#" দিয়ে শুরু সকল স্টেটমেন্ট হ্যান্ডেল করে। আর সবচেয়ে জনপ্রিয় স্টেটমেন্ট হলো #include, যেমন আমরা প্রতিটা প্রোগ্রাম এ #include<stdio.h> এই স্টেটমেন্টটা আমরা লিখি, এইটা একধরণের কম্যান্ড যার মানে হেডার ফাইল stdio.h এর মধ্যে যেই কনটেন্ট গুল আছে তা প্রোগ্রাম এর সাথে যুক্ত হয়ে যাও।
প্রিপ্রসেসর এর মাধ্যমে calculator.i নামে যেই ফাইলটা তৈরি হয়েছে সেইটা এখন কম্পাইলার সফটওয়্যার এর মাধ্যমে ট্রান্সলেট করতে হবে। কম্পাইলার ওই প্রোগ্রাম ফাইলকে ট্রান্সলেট করে একটা ফাইল তৈরি করে যেটাকে বলা হয় অবজেক্ট (calculator.obj/calculator.o) ফাইল।
অবজেক্ট ফাইল কোন একটা নির্দিষ্ট অপারেটিং সিস্টেম এর হিসেবে চুড়ান্ত সফটওয়ার তৈরি হয়। কম্পাইলার, আলাদা আলাদা অপারেটিং সিস্টেম জন্য আলাদা আলাদা ভাবে তৈরি হয়। কিছু কম্পাইলার কোডেকে ডস অপারেটিং সিস্টেম এর হিসেবে ট্রান্সলেট করে আবার কিছু কম্পাইলার লিনাক্স অপারেটিং সিস্টেম এর হিসেবে ট্রান্সলেট করে। কম্পাইলার যেটা তৈরি করেছে সেটাকে অবজেক্ট বলে যেটার এক্সটেনশন .obj /.o।
এর পর আমাদের দরকার হয় লাইব্রেরি ফাইল এর কারণ অবজেক্ট ফাইল এ এমন কিছু লেখা আছে যা অপারেটিং সিস্টেম এর বোঝার ক্ষমতা নাই কিন্তু সেই গুলোর অর্থ লাইব্রেরি ফাইল এর মধ্যে আগে থেকেই থাকে।
বিষয়টা কিছুটা এমন তুমি একটা ইংরেজি বই পড়তে শুরু করেছো সেই বই এর মধ্যে এমন কিছু শব্দ আছে যার অর্থ তুমি জাননা তখন তুমি ডিকশনারীর ব্যবহার করো। ঠিক তেমনি অপেরেটিং সিস্টেম যেই শব্দ গুল বুঝবে না তার জন্য আগে থেকেই লাইব্রেরি ফাইল এর মধ্যে অর্থ গুল দেয়া থাকে।
লাইব্রেরি ফাইল এর কোড এবং অবজেক্ট ফাইল এর কোড লিংক করার জন্য লিংকার সফটওয়্যার ব্যবহার হয়। লিংকার অবজেক্ট ফাইল এন্ড লাইব্রেরি এর কানেক্ট করে একটা নতুন ফাইল তৈরি করে আর সেটাই হলো .exe ফাইল। যেই ফাইল এর অপেক্ষায় আমরা ছিলাম কি তাইতো ? তাহলে সর্বশেষ যে ফাইলটি আমরা পাব তা calculator.exe ফাইল। এই .exe ফাইলটাই আমাদের সফটওয়্যার।
আমাদের প্রোগ্রাম তৈরির সময় অনেক গুলো হেডার ফাইল অ্যাড করতে হয় যে গুলো আমাদের তৈরি না। কিন্তু এই ফাইল এর ভিতরের কোড গুলো আমাদের কোড এর সাথে অ্যাড করা গুরুত্বপূর্ণ। আমরা কোড এর মধ্যে এমন কিছু লাইন লিখি যার কারণে প্রিপ্রসেসর হেডার ফাইল এর কনটেন্ট গুলো কে আমাদের ফাইল এর কনটেন্ট এর সাথে মিশিয়ে একটা নতুন ফাইল তৈরি করে। যার এক্সটেনশন .i তার মানে calculator.c এই ফিলকে প্রিপ্রসেসর এ কনভার্ট করলে calculator.i নাম একটি ফাইল তৈরি হবে। এই নতুন ফাইলটা আমাদের ফাইল এর মতোই শুধু "#" দ্বারা শুরু ওই সকল স্টেটমেন্ট গুলোর পরিবর্তে কিছু অন্য স্টেটমেন্ট অ্যাড হয়েছে যেই স্টেটমেন্ট গুল ঐ হেডার ফাইল এর মধ্যে ছিল।
সাধারণত, প্রিপ্রসেসর "#" দিয়ে শুরু সকল স্টেটমেন্ট হ্যান্ডেল করে। আর সবচেয়ে জনপ্রিয় স্টেটমেন্ট হলো #include, যেমন আমরা প্রতিটা প্রোগ্রাম এ #include<stdio.h> এই স্টেটমেন্টটা আমরা লিখি, এইটা একধরণের কম্যান্ড যার মানে হেডার ফাইল stdio.h এর মধ্যে যেই কনটেন্ট গুল আছে তা প্রোগ্রাম এর সাথে যুক্ত হয়ে যাও।
প্রিপ্রসেসর এর মাধ্যমে calculator.i নামে যেই ফাইলটা তৈরি হয়েছে সেইটা এখন কম্পাইলার সফটওয়্যার এর মাধ্যমে ট্রান্সলেট করতে হবে। কম্পাইলার ওই প্রোগ্রাম ফাইলকে ট্রান্সলেট করে একটা ফাইল তৈরি করে যেটাকে বলা হয় অবজেক্ট (calculator.obj/calculator.o) ফাইল।
অবজেক্ট ফাইল কোন একটা নির্দিষ্ট অপারেটিং সিস্টেম এর হিসেবে চুড়ান্ত সফটওয়ার তৈরি হয়। কম্পাইলার, আলাদা আলাদা অপারেটিং সিস্টেম জন্য আলাদা আলাদা ভাবে তৈরি হয়। কিছু কম্পাইলার কোডেকে ডস অপারেটিং সিস্টেম এর হিসেবে ট্রান্সলেট করে আবার কিছু কম্পাইলার লিনাক্স অপারেটিং সিস্টেম এর হিসেবে ট্রান্সলেট করে। কম্পাইলার যেটা তৈরি করেছে সেটাকে অবজেক্ট বলে যেটার এক্সটেনশন .obj /.o।
এর পর আমাদের দরকার হয় লাইব্রেরি ফাইল এর কারণ অবজেক্ট ফাইল এ এমন কিছু লেখা আছে যা অপারেটিং সিস্টেম এর বোঝার ক্ষমতা নাই কিন্তু সেই গুলোর অর্থ লাইব্রেরি ফাইল এর মধ্যে আগে থেকেই থাকে।
বিষয়টা কিছুটা এমন তুমি একটা ইংরেজি বই পড়তে শুরু করেছো সেই বই এর মধ্যে এমন কিছু শব্দ আছে যার অর্থ তুমি জাননা তখন তুমি ডিকশনারীর ব্যবহার করো। ঠিক তেমনি অপেরেটিং সিস্টেম যেই শব্দ গুল বুঝবে না তার জন্য আগে থেকেই লাইব্রেরি ফাইল এর মধ্যে অর্থ গুল দেয়া থাকে।
লাইব্রেরি ফাইল এর কোড এবং অবজেক্ট ফাইল এর কোড লিংক করার জন্য লিংকার সফটওয়্যার ব্যবহার হয়। লিংকার অবজেক্ট ফাইল এন্ড লাইব্রেরি এর কানেক্ট করে একটা নতুন ফাইল তৈরি করে আর সেটাই হলো .exe ফাইল। যেই ফাইল এর অপেক্ষায় আমরা ছিলাম কি তাইতো ? তাহলে সর্বশেষ যে ফাইলটি আমরা পাব তা calculator.exe ফাইল। এই .exe ফাইলটাই আমাদের সফটওয়্যার।
তারমানে আমাদের C ল্যাঙ্গুয়েজ ভাল মতো শিখতে হবে তাহলেই আমরা যা চাইব তাই কম্পিউটারকে দিয়ে করতে পারব। তারপর, ইচ্ছা মতো প্রোগ্রাম লিখে কিছু সফটওয়্যার এর মাধ্যমে আমরা আমাদের প্রোগ্রামকে সফটওয়্যার এ পরিবর্তন করে ফেলব।
এখন বলো তুমি যদি তোমার তৈরি করা একটা সফটওয়্যার তোমার বন্ধুকে দিতে চাও তাহলে তুমি কোন ফাইল দিবা ?
এখন বলো তুমি যদি তোমার তৈরি করা একটা সফটওয়্যার তোমার বন্ধুকে দিতে চাও তাহলে তুমি কোন ফাইল দিবা ?
0 comments:
Post a Comment