পাইথন (প্রোগ্রামিং ভাষা)

পাইথন () একটি বস্তু-সংশ্লিষ্ট (object-oriented) উচ্চস্তরের প্রোগ্রামিং ভাষা। ১৯৯১ সালে গিডো ভান রসম এটি প্রথম প্রকাশ করেন। পাইথন নির্মাণ করার সময় প্রোগ্রামের পঠনযোগ্যতার উপর বেশি গুরুত্ব দেয়া হয়েছে। এখানে প্রোগ্রামারের পরিশ্রমকে কম্পিউটারের চেয়ে বেশি গুরুত্ব দেয়া হয়েছে। পাইথনের কোর সিনট্যাক্স ও সেমান্টিক্‌স খুবই সংক্ষিপ্ত, তবে ভাষাটির স্ট্যান্ডার্ড লাইব্রেরি অনেক সমৃদ্ধ। পাইথন প্রোগ্রামারদের সমাজ থেকে পাইথন দর্শন এর সূচনা হয়েছে।

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

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

নামকরণ 
পাইথন প্রোগ্রামিং ভাষার নামকরণ করা হয়েছে ব্রিটিশ রম্য অনুষ্ঠান "মন্টি পাইথন ফ্লাইং সারকাসের" নামে।

ইতিহাস 

১৯৮০ দশকের শেষের দিকে পাইথনের জন্ম দেন নেদারল্যান্ডের সিডব্লিউআই'র গবেষক গুইডো ভ্যান রস্যিউম। মূলত এবিসি'র উত্তরসূরী হিসেবে পাইথনের আবির্ভাব হয়েছে যা এক্সেপশন হ্যান্ডলিং করতে এবং অ্যামিবা অপারেটিং সিস্টেমের সাথে কাজ করতে সক্ষম ছিল। ভ্যান রস্যিউম পাইথনের প্রধান লেখক এবং বর্তমানে পাইথনের উন্নয়নে তিনিই প্রধানত নেতৃত্ব দিচ্ছেন। তাকে পাইথনের আজীবন পরিচালক হিসেবে সম্মান দেয়া হয়েছে।

১৯৯১ সালে ভ্যান রস্যিউম পাইথনের কোড প্রকাশ করেন (ভার্শন ০.৯.০)। পাইথন ডিজাইনের এই ধাপেই ক্লাস ইনহেরিটেন্স, এক্সেপশন হ্যান্ডলিং, ফাংশন, ও প্রধান ডাটা টাইপ list, dict, str প্রভৃতি সংযুক্ত ছিল। এই প্রাথমিক প্রকাশে ছিল মডুলা-৩ থেকে ধার করা মডিউল সিস্টেম; ভ্যান রোসাম এই মডিউলকে "পাইথনের মূল প্রোগ্রামিং ইউনিটের একটি" আখ্যায়িত করেছেন। পাইথনের এক্সেপশন মডেলটিও অনেকটা মডুলা-৩'র মত যাতে কেবল অতিরিক্ত else যুক্ত হয়েছে। ১৯৯৪ সালে পাইথনের প্রধান ফোরাম comp.lang.python গঠিত হয়, এবং পাইথনের ব্যবহারকারীদের জন্য তা মাইলফলক হিসেবে চিহ্নিত হয়।

১৯৯৪ সালের জানুয়ারি পাইথন ১.০ সংস্করণে প্রবেশ করে। এই সংস্করণে যে প্রধান বিষয়াদি যুক্ত হয় তা হলো ফাংশনাল প্রোগ্রামিং টুলস lambda, map, filter ও reduce। ভ্যান রস্যিউম বলেন "পাইথন lambda, reduce(), filter() ও map() অধিকার করেছে, (আমি বিশ্বাস করি) একজন লিস্প হ্যাকারের কাছ থেকে যে নিজেকে এগুলো থেকে বঞ্চিত মনে করছিল এবং কর্মক্ষম প্যাচগুলো সরবরাহ করেছে।" এর প্রধান অবদানকারী ছিলেন অমৃত প্রেম; এবং এর প্রকাশ নোটে সে সময় কোন লিস্প প্রোগ্রামের উত্তরসূরী হওয়ার উল্লেখ করা হয়নি।

সিডব্লিউআই থেকে প্রকাশিত সর্বশেষ সংস্করণ হচ্ছে পাইথন ১.২। ১৯৯৫ সালে ভ্যান রস্যিউম ভার্জিনিয়ার কর্পোরেশন ফর ন্যাশনাল রিসার্চ ইনিশিয়েটিভস (সিএনআরআই) প্রতিষ্ঠান থেকে পাইথনের ওপর তার কাজ চালিয়ে যেতে থাকেন এবং এখান থেকে সফটওয়ারটির কয়েকটি সংস্করণ বের করেন।

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

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

২০০০ সালে পাইথনের মূল উন্নয়নকারী দল বিওপেন.কম এর সাথে যুক্ত হয়ে যৌথভাবে বিওপেন পাইথনল্যাবস গঠন করে। সিএনআরআই পাইথনের একটি সংস্করণ ১.৬ প্রকাশের অনুরোধ করেছিল যা মূলত এ পর্যন্ত সিএনআরআইতে পাইথনের যেটুকু উন্নয়ন হয়েছে তার সম্মিলিত প্রকাশ। একারণে পাইথনের ১.৬ ও ২.০ সংস্করণের মধ্যে অনেক বিলম্ব ঘটেছিল। পাইথন ২.০ ছিল বিওপেন.কম থেকে প্রকাশিত প্রথম ও একমাত্র পাইথন ডিস্ট্রিবিউশন। পাইথন ২.০ প্রকাশিত হওয়ার পর গুইডো ভ্যান রোসাম ও অন্যান্য পাইথনল্যাবস কর্মীরা ডিজিটাল ক্রিয়েশন্‌স এ যোগ দেন।

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

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

পাইথন ১.৬.১ আসলে শুধুই পাইথন ১.৬ যাতে কিছুটা ত্রুটি মুক্ত করা হয়েছে এবং নতুন জিপিএল-সঙ্গতিপূর্ণ লাইসেন্স রয়েছে।

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

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

পাইথনের স্ট্যান্ডার্ড লাইব্রেরি ও সিনট্যাক্টিক্যাল ব্যবহার জাভা থেকে অনুপ্রাণিত হয়েছে। কোন কোন ক্ষেত্রে যেমনঃ logging প্যাকেজ, যা যুক্ত হয় ২.৩ ভার্সনে, স্যাক্স পার্সার যা ২.০ সংস্করণে যুক্ত হয় এবং ডেকোরেটর সিনট্যাক্স যা @ ব্যবহার করে এবং ২.৪ সংস্করণে যুক্ত হয় added in version 2.4 ইত্যাদি।

ব্যবহার 

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

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

ইন্‌ডেন্‌টেশন 
পাইথন কোডের একটি ব্লক বোঝাতে ব্রাকেট বা কীওয়ার্ডের পরিবর্তে হোয়াইটস্পেস ইন্‌ডেন্‌টেশন ব্যবহার করে। এই ব্যবস্থাটিকে অফ-সাইড নিয়ম বলা হয়। কোন একটি ব্লক বোঝাতে ইন্‌ডেন্‌টেশন বেশি করা হয়। আবার চলতি ব্লক শেষ বোঝাতে কম ইন্‌ডেন্‌টেশন করা হয়।

স্টেট্‌মেন্ট এবং কন্ট্রোল ফ্লো 
পাইথনে যেসব স্টেট্‌মেন্ট আছে তার মধ্যে অন্যতম হল-
 if স্টেট্‌মেন্ট যা else এবং elif (else if এর সংক্ষিপ্ত রূপ) এর সাথে কোডের একটি ব্লক শর্তের উপর ভিত্তি করে এক্সিকিউট করে।
 while স্টেট্‌মেন্ট যা কোডের একটি ব্লক এক্সিকিউট করে যতক্ষণ পর্যন্ত এর শর্ত পূরণ হতে থাকে।
 def স্টেট্‌মেন্ট যা একটি ফাংশন অথবা মেথড লেখার জন্য ব্যবহৃত হয়।
 yield স্টেট্‌মেন্ট যা একটি জেনারেটর ফাংশন থেকে মান পাঠায়। পাইথন ২.৫ থেকে yield কে অপারেটর এর মধ্যেও অন্তর্ভুক্ত করা হয়েছে। এটি করা হয়েছে মূলত কোরুটিন বাস্তবায়নের জন্য।

পাইথন প্রোগ্রামিং-এর উদাহরণ 
'হ্যালো, বিশ্ব' লেখার প্রোগ্রাম:
print('হ্যালো, বিশ্ব!') 

ইনপুট নিয়ে তা পুনরায় লেখার প্রোগ্রাম নাম= input("আপনার নাম  টি  লেখুন ")
print(নাম)

ধনাত্মক সংখ্যার গৌণিক নির্ণয়ের প্রোগ্রামঃ

n = int(input('একটি সংখ্যা টাইপ করুন, এবং এর গৌণিক মুদ্রণ করা হবে: '))

if n < 0:
 raise ValueError('আপনাকে অবশ্যই একটি ধনাত্মক পূর্ণসংখ্যা লিখতে হবে')

fact = 1
i = 2
while i <= n:
 fact *= i
 i += 1

print(fact)
print(1+1)

অন্যান্য সুবিধাদি 

পাইথনের নিজস্ব বহু মডিউল ও লাইব্রেরি থাকা সত্বেও বিশেষ ধরনের কাজের জন্য বিশেষভাবে তৈরি বিভিন্ন প্যাকেজ পাওয়া যায়। যেমনঃ বায়োইনফর্মেটিক্স বিষয়ক কাজের জন্য রয়েছে BioPython, গ্রাফিকেল ইন্টারফেস প্রোগ্রামিং এর জন্য PyGTK , ইমেজ প্রসেসিং এর জন্য OpenCV ইত্যাদি।

বাস্তবায়ন 

পাইথনের মূলধারার বাস্তবায়ন, যা সিপাইথন নামেও পরিচিত,সেটিকে লেখা হয়েছে সি প্রোগ্রামিং ভাষাতে, এবং এটিকে বণ্টিত করা হয়েছে একটি বৃহৎ স্ট্যান্ডার্ড লাইব্রেরির সাথে যা লেখা হয়েছে সি ও পাইথনে উভয়ের মিশ্রণের মাধ্যমে।

স্ট্যান্ডার্ড লাইব্রেরি 

পাইথনের একটা বড় স্ট্যান্ডার্ড লাইব্রেরি রয়েছে যেটা দিয়ে বিভিন্ন ধরনের কাজ সম্ভব। পাইথনের অনেক দর্শনের মধ্যে একটা হচ্ছে "আলাদা ব্যাটারির দরকার নাই"। পাইথনের স্ট্যান্ডার্ড লাইব্রেরির মডিউলগুলো C বা Python দিয়ে পরিবর্ধিত মডিউল তৈরী করা সম্ভব।

পাইথনের স্ট্য়ান্ডার্ড লাইব্রেরি বিশেষভাবে ইন্টারনেটমুখী এপ্লিকেশন উপযোগী। এখানে রয়েছে বিভিন্ন ফর্মাট এবং প্রটোকল যেমন(মাইম, এইচটিটিপি) এর সাপোর্ট।

প্রোগ্রামিং দর্শন 

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

তথ্যসূত্র

বহিঃসংযোগ 

 Python Official Website
 Official documentation and resources

ক্লাস-ভিত্তিক প্রোগ্রামিং ভাষা
চলমান-টাইপকৃত প্রোগ্রামিং ভাষা
বস্তু-সংশ্লিষ্ট প্রোগ্রামিং ভাষা
স্ক্রিপ্টিং ভাষা
ক্রস-প্ল্যাটফর্ম মুক্ত সফটওয়্যার
ক্রস-প্ল্যাটফর্ম সফটওয়্যার
ওলন্দাজ উদ্ভাবন
উচ্চস্তরের প্রোগ্রামিং ভাষা
প্রোগ্রামিং ভাষা