تاریخچه پایتون

بندانگشتی| لوگوی پایتون، در سال‌های ۱۹۹۰–۲۰۰۶

پایتون اواخر دههٔ هشتاد میلادی توسط خودو فان روسوم (CWI) واقع در کشور هلند ایجاد شد. و پیاده‌سازی آن در دسامبر ۱۹۸۹ آغاز شد. خیدو فان روسوم پایتون را به عنوان جانشینی برای زبان ABC ساخت. زبان ABC توانایی مدیریت استثناءها را داشت و همچنین رابط سیستم عامل آمیب نیز بود نقش مداوم فان روسوم (طراح اصلی پایتون) در تصمیم‌گیری پیرامون اهداف پایتون، باعث شد که انجمن پایتون به او لقب دیکتاتور خیرخواه جاویدان را بدهد. (اگرچه فان روسوم در ۱۲ ژوئیه ۲۰۱۸ از سمت خود کناره گرفت.) نام پایتون از نمایش تلویزیونی بی‌بی‌سی یعنی *[[سیرک پرنده مانتی پایتان]]* گرفته شده‌است.

پایتون ۲٫۰ در ۱۶ اکتبر ۲۰۰۰ منتشر شد. این نسخه قابلیت‌های جدید زیادی داشت، از جمله بازیافت حافظه با قابلیت شناسایی دور (علاوه بر مرجع شماری) برای مدیریت حافظه و پشتیبانی از یونی‌کد. اما مهمترین تغییر در خودِ روند توسعه بود که به سمت شفافیت بیشتر و پشتیبان‌گیری بیشتر از جامعه پیش می‌رفت.

پایتون ۳٫۰، در ۳ دسامبر 2008 پس از یک دوره طولانی آزمایشی منتشر شد. این نسخه از پایتون نسخه ای بزرگ و بدون سازگاری عقبرو بود. بسیاری از ویژگی‌های عمده آن نیز پیش‌انتقال شده‌است به نسخه‌های با سازگاری عقبرو، یعنی پایتون ۲٫۶ و ۲٫۷ که در حال حاضر دیگر پشتیبانی نمی‌شوند.

## نسخه‌های آغازین
در فوریه ۱۹۹۱، فان روسوم کد پایتون (تحت نسخهٔ ۰٫۹٫۰) را در alt.source منتشر کرد.در این مرحله از توسعه کلاس‌های با وراثت، مدیریت استثناء، توابع و نوع داده‌های اصلیِ `list` ، `dict` ، `str` و… وجود داشته‌است. در این نسخه یک سیستم پودمان (ماژول) وجود داشت که از ماجولا ۳ به عاریت گرفته شده بود؛ فان روسوم ماژول را به عنوان «یکی از واحدهای مهم برنامه‌نویسی پایتون» توصیف می‌کند. مدل استثناء پایتون نیز، به ماجولا ۳ شباهت دارد. در سال ۱۹۹۴ انجمن اصلی بحث و گفتگوی پایتون،[news://comp.lang.python comp.lang.python] (در یوزنت)، تشکیل شد که نشانه ای از رشد کاربران پایه‌ای پایتون بود.

## نسخه ۱
در ژانویه ۱۹۹۴ نسخهٔ ۱٫۰ پایتون منتشر شد. خصوصیات جدید قابل توجه این نسخه شامل ابزارهای برنامه‌نویسی تابعی `[[lambda]]` ، ` [[نقشه (عملکرد مرتبه بالاتر) |map]]` ، ` [[فیلتر (عملکرد مرتبه بالاتر) |filter]]` و ` [[تاشو (عملکرد مرتبه بالاتر) |reduce]]` بود. فان روسوم در این‌باره توضیح داد: «پایتون lambda , reduce() , filter() و map() را از راه یک هکر لیسپ که آنها را رد کرد و وصله‌های کار را ارائه داد. به دست آورد.»

پایتون ۱٫۲ آخرین نسخهٔ پایتون بود که هنگام حضور فان روسوم در CWI منتشر شد. در سال ۱۹۹۵، فان روسوم کار روی پایتون را در (CNRI) (Corporation for National Research Initiatives) در رستون، ویرجینیا ادامه داد و از آنجا چندین نسخه منتشر کرد.

در نسخه ۱٫۴ چندین ویژگی جدید به پایتون اضافه شد. از ویژگی‌های جالب توجه در میان این اضافات می‌توان به الهام گرفتن از آرگومان‌های کلیدی ماژول-۳ (که خود آن از آرگومان‌های کلیدی لیسپ الهام گرفته شده بود) و پشتیبانی از اعداد مختلط اشاره کرد. همچنین اضافه شدن شکل ابتدایی نهان‌سازی اطلاعات به وسیلهٔ دستکاری نام، اگرچه به راحتی قابل دور زدن بود.

فان روسوم در مدت فعالیت خود در CNRI، پروژهٔ «برنامه‌نویسی کامپیوتر برای هر کس» (CP4E)Computer Programming for Everybody را ایجاد کرد تا برنامه‌نویسی را در دسترس افراد بیشتری قرار دهد افرادی که تنها سواد پایه‌ای در برنامه‌نویسی نویسی دارند. (با سواد پایه ای خواندن و نوشتن زبان انگلیسی و سواد ابتدایی ریاضی مقایسه کنید که از ملزومات استخدام شدن توسط کار فرمایان است) پایتون در این پروژه نقش اصلی را ایفا می‌کرد: به دلیل تمرکز روی نحو تمیز، از قبل مناسب بود، و اهداف CP4E شباهت‌هایی با سلف خود، یعنی ABC داشت. این پروژه توسط دارپا سرمایه‌گذاری شداز سال ۲۰۰۷ پروژه CP4E غیرفعال شد، و با این حال پایتون تلاش می‌کند در نحو و معناشناسی خود به راحتی قابل یادگیری باشد و خیلی رازآلود نباشد، و برقراری ارتباط با غیر برنامه نویسان یک نگرانی فعال نباشد.

### BeOpen
در سال ۲۰۰۰ تیم توسعه دهنده پایتون به BeOpen.com منتقل شد و بدین صورت تیمPythonLabs BeOpen شکل گرفت. CNRI درخواست کرد ورژن ۱٫۶ساخته شود، بدین ترتیب اعضای گروه توسعه دهندهٔ پایتون را به جایی رساند که CNRI را ترک کنند. برنامه‌های انتشار ۱٫۶و ۲٫۰ همپوشانی قابل توجهی داشتند. پایتون ۲٫۰ تنها نسخه ای بود که BeOpen.com آن را طراحی کرده بود. بعد از نوشتن پایتون ۲٫۰، خیدو و دیگر توسعه دهندگان تیم PythonLabs به تولیدات دیجیتالی ای مثل نرم‌افزار زوپ Zope روی آوردند.

نسخهٔ پایتون ۱٫۶ پروانهٔ CNRI جدیدی داشت که بسیار طولانی‌تر از پروانهٔ CWI بود (پروانهٔ CWI برای نسخه‌های قبلی استفاده شده بود). این پروانهٔ جدید دارای بندی بود که بیان می‌کرد پروانه تحت قوانین ایالت ویرجینیا اجرا شود. بنیاد نرم‌افزار آزاد توضیح داد که بند انتخاب قانون با GNU GPL ناسازگار است. BeOpen , CNRI و FSF تغییراتی را در پروانه پایتون ایجاد کردند تا با GPL سازگار شود. پایتون ۱٫۶٫۱ عمدتاً مشابه پایتون ۱٫۶ بود و تفاوت آن فقط در پروانهٔ سازگار با GPL جدید و رفع جند باگ جزئی بود.

## نسخه ۲
پایتون ۲٫۰ در اکتبر سال ۲۰۰۰ منتشر شد، پایتون ۲٫۰ شامل ویژگی ((list comprehensions بود که آن را از زبان‌های برنامه‌نویسی تابعی SETL و هسکل اقتباس کرده بود. نحو این ساختار در پایتون بسیار مشابه نحو آن در هسکل بود. (به جز اینکه هسکل در کاراکترهای نشانه‌گذاری برتری داشت و پایتون در کلمات کلیدی الفبایی برتری داشت) پایتون ۲٫۰ همچنین سیستمی برای بازیافت حافظه با قابلیت جمع‌آوری دورهای مرجع نیز داشت.
پایتون ۲٫۱ به پایتون ۱٫۶٫۱ و ۲٫۰ بسیار شبیه بود. جواز آن به جواز مؤسسهٔ نرم‌افزار پایتون تغییر نام یافت؛ و تمام کدها، اسناد و مشخصاتی که از زمان انتشار نسخهٔ آلفای پایتون ۲٫۱ اضافه شده بودند را مؤسسه نرم‌افزار پایتون (PFS) دارا شد.سازمان غیرانتفاعی‌ای که در سال ۲۰۰۱ تشکیل شد و از بنیاد نرم‌افزار آپاچی الگو برداری کرده بود. تغییرات در این انتشار شامل تغییری در مشخص‌گری زبان(language specification) بود تا مانند دیگر زبان‌های دامنه ایستا، دامنه‌های تو در تو را پشتیبانی کند.(این ویژگی تا پیش از پایتون ۲٫۲ به‌طور پیش فرض خاموش بود و مورد نیاز نبود)

پایتون ۲٫۲ در دسامبر ۲۰۰۱ منتشر شد. تغییر عمده در پایتون ۲٫۲ یکسان‌سازی نوع‌های پایتون که به زبان C نوشته شده بودند و نوع‌هایی که به زبان پایتون نوشته شده بوند (کلاس‌ها) به یک سلسله مراتب بود. این یکسان‌سازی اشیاء پایتون را کاملاً شیء گرا کرد. همچنین مولدها اضافه شدند که از زبان آیکون الهام گرفته شده بودند.

پایتون ۲٫۵ در سپتامبر ۲۰۰۶ منتشر شد و داری حکم (statement)  `with` بود، که کار آن جداکردن بلوک کد همراه با یک مدیر زمینه (context manager) بود (برای مثال، دستیابی به قفلی قبل از اجرای بلوک کد و آزاد سازی آن قفل پس از آن، یا بازکردن فایلی و سپس بستن آن)، اجازه دادن به رفتار شبیه به Resource Acquisition Initialization (RAII) و عوض کردن اصطلاح رایج try/finally است.

پایتون ۲٫۶ همزمان با پایتون ۳٫۰ منتشر شد و برخی از ویژگی‌های آن نسخه را نیز داشت، و از آن نسخه ویژگی اخطارها "warnings" اضافه شد که وظیفهٔ آن نشان دادن یک پیام اخطار هنگام استفاده از ویژگی‌های حذف شده در پایتون ۳ بود. به همین ترتیب، پایتون ۲٫۷ همزمان با پایتون ۳٫۱ در تاریخ ۲۶ ژوئن ۲۰۰۹ منتشر شد، از آن پس انتشار موازی نسخه‌های 2.x و 3.x پایتون متوقف شد و پایتون ۲٫۷ آخرین نسخه در سری 2.x بود. در نوامبر ۲۰۱۴ اعلام شد که پایتون ۲٫۷ فقط تا سال ۲۰۲۰ پشتیبانی می‌شود و کاربران تشویق می‌شوند هرچه سریع تر به پایتون ۳ مهاجرت کنندپشتیبانی از پایتون ۲٫۷ از اول ژانویه سال ۲۰۲۰ به پایان رسید. نسخه نهایی پایتون ۲ یعنی نسخه ۲٫۷٫۱۸ در تاریخ ۲۰ آوریل ۲۰۲۰ منتشر شدکه شامل رفع باگ‌های حساس و release blockers می‌شد. که این نشانگر پایان زندگی end-of-life پایتون ۲ است.
.

## نسخه ۳
پایتون ۳٫۰ (که به آن پایتون ۳۰۰۰ و Py3k نیز گفته می‌شود) در ۳ دسامبر ۲۰۰۸ منتشر شد.این نسخه برای اصلاح نقایص اساسی طراحی شده‌بود - تغییرات مورد نیاز نمی‌توانستند با رعایت کامل سازگاری عقبرو با سری 2.x، انجام شوند همین موجب شد که به نسخه اصلی جدیدی نیاز باشد. اصل راهنمای پایتون ۳ چنین بود: «کاهش ویژگی‌های‌های تکرار شده به وسیلهٔ حذف روش‌های قدیمی انجام کار».

پایتون ۳ با فلسفهٔ نسخه‌های قبلی توسعه داده شد. با این حال از آنجایی که در پایتون روش‌های نو و زائد برای انجام یک کار مشخص انباشته شده بود پایتون ۳ بر حذف ساختارها و ماژول‌های تکراری مبادرت ورزید؛ و این کار را باتوجه به اصل «برای انجام این کار باید یک (ترجیها یک) روش آشکار وجود داشته باشد.» انجام داد.

با این وجود، پایتون ۳٫۰ چند پارادایمی باقی ماند و کد نویسان همچنان می‌توانستند، از پارادایم‌های برنامه‌نویسی مختلفی مثل شیء گرا، ساخت یافته و تابعی پیروی کنند، اما در چنین حالتی که گزینه‌های گوناگونی وجود داشتند، مقرر شد جزئیات در پایتون ۳٫۰ واضح تر از آنچه در پایتون 2.x بود، باشد.

### سازگاری
پایتون ۳ به منظور شکستن سازگاری عقبرو (به انگلیسی: backward compatibility) یا به عبارتی قطع سازگاری با گذشته پایتون ۲ و بهبود خطاها و رخنه‌ها در نسخهٔ ۲ و همچنین حذف روش‌های قدیمی طراحی شد. تایپ پویا پایتون با طرح تغییر نحو متدهای خاص دیکشنری‌ها ترکیب شد، به عنوان مثال، ترجمه مکانیکی کاملی از Python 2.x به Python 3.0 را بسیار دشوار کرد. ابزاری به نام "2to3" بخش‌هایی از ترجمه را که می‌توان به صورت خودکار انجام داد، انجام می‌دهد. در این مرحله، به نظر می‌رسید 2to3 نسبتاً موفق بوده‌است، هرچند که در یک بررسی اولیه، اشاره شد که جنبه‌هایی از ترجمه وجود دارند که چنین ابزاری هرگز قادر به انجام آن نیست. قبل از قدرت گرفتن پایتون ۳، پروژه‌هایی وجود داشتند که نیاز به سازگاری با هر دو سری 2.x و 3.x داشتند توصیه می‌شد که یک منبع (برای سری 2.x) داشته باشند و نسخه‌هایی را برای پلتفرم پایتون 3.x با استفاده از 2to3 ارائه دهند تا مدت‌ها ویرایش‌های مربوط به کد پایتون 3.x نادرست شمرده می‌شد زیرا لازم بود کد در پایتون 2.x اجرا شود. این دیگر توصیه نمی‌شود. از سال ۲۰۱۲، رویکرد ارجح ایجاد کد پایه ای واحد است که بتواند تحت هر دو پایتون ۲ و ۳ با استفاده از ماژول‌های سازگار کننده اجرا شود.

### خصوصیات
فهرست برخی از تغییرات عمده پایتون ۳٫۰:
* تغییر `print`از یک حکم statement به یک تابع ذاتیbuilt-in function. که این باعث مشود تغییر ماژول به منظور استفاده از یک تابع پرینت دیگر آسان‌تر شود و بنابراین نحو را قاعده مند تر می‌کند. در پایتون ۲٫۶ و ۲٫۷ نیز فعال کردن این امکان با تایپ کردن `from __future__` و `import print_function` فراهم می‌شود.
* حذف تابع `input`از نوع پایتون ۲ و تغییر نام تابع `raw_input` به `input`. تابع `input` پایتون ۳ مثل تابع `raw_input` پایتون ۲ رفتار می‌کند. در آن حالت تابع ورودی داده شده به جای این که یک عبارت در نظر گرفته شود یک رشته به عنوان خروجی می‌دهد.
* انتقال `reduce` به خارج از فضای نام ذاتی built-in و به `functools` (کد عقلانی که از  `reduce`  استفاده می‌کرد ناخواناتر از کدیست که از for loop و متغیر انباشتگر استفاده می‌کند)
* پشتیبانی از یادآوری تابع انتخابی که می‌تواند برای معرفی تایپ خصوصی یا اهداف دیگر استفاده شود.
* پشتیبانی از گزارمان‌های اختیاری تابع optional function annotations که برای اعلان غیررسمی نوع informal type declarations و کارهای دیگر استفاده می‌شود.
* یکسان کردن تایپ‌های `str`/`unicode`، به نمایندگی از یک متن، و معرفی یک تایپ `bytes` تغییرناپذیر؛ با یک تایپ مطابق با `bytearray` تغییرپذیر، که هر دو آرایه از بایت‌ها را ارائه می‌کنند.
* از بین بردن خصوصیات سازگاری معکوس، شامل کلاس‌های به فرم قبل، استثناءهای رشته‌ای، و Implicit Relative Import.
* تغییر تابع تقسیم عدد صحیح: در پایتون ۲ ، `5 / 2` برابر `2`  می‌شد ولی در پایتون ۳، `5 / 2`  برابر  `2.5` می‌شود. (در پایتون ۲ (۲٫۲ به بعد) و پایتون ۳، یک عملگر جداگانه برای نمایش نتیجهٔ قدیمی وجود دارد: `5 // 2` برابر `2` می‌شود)

نسخه‌های بعدی سری Python 3.x امکانات بنیادین جدیدی داشتند. تمام نسخه‌های پایتون که هم‌اکنون توسعه داده می‌شوند در سری 3.x هستند.

## جدول نسخه‌ها
نسخه‌های قبل از شماره گذاری:
* پیاده‌سازی آغاز شد - دسامبر ۱۹۸۹
* نسخه‌های داخلی در Centrum Wiskunde & Informatica - 1990

یادداشت‌های جدول: 

### پشتیبانی

ImageSize = width:1000 height:auto barincrement:35
PlotArea  = left:100 right:50 bottom:30 top:10

DateFormat = dd/mm/yyyy
Period   = from:01/01/1991 till:01/01/2027
TimeAxis  = orientation:horizontal
ScaleMajor = unit:year increment:2 start:1991
ScaleMinor = unit:month increment:3 start:01/01/1991

Define $dx = 25 # shift text to right side of bar

Colors =
 id:out_of_support value:gray(0.9) legend:Out_of_support
 id:in_support value:green legend:In_support
 id:pre_release value:blue legend:Pre_release

PlotData=
 mark:(line,black)
 fontsize:S

 bar:3.10 from:05/10/2021 till:01/10/2026 text:3.10 color:pre_release
 bar:3.9 from:05/10/2020 till:01/10/2025 text:3.9 color:pre_release
 bar:3.8 from:14/10/2019 till:01/10/2024 text:3.8 color:in_support
 bar:3.7 from:27/06/2018 till:01/06/2023 text:3.7 color:in_support
 bar:3.6 from:23/12/2016 till:01/12/2021 text:3.6 color:in_support
 bar:3.5 from:13/09/2015 till:13/09/2020 text:3.5 color:out_of_support
 bar:3.4 from:16/03/2014 till:18/03/2019 text:3.4 color:out_of_support
 bar:3.3 from:29/09/2012 till:29/09/2017 text:3.3 color:out_of_support
 bar:3.2 from:20/02/2011 till:20/02/2016 text:3.2 color:out_of_support
 bar:3.1 from:27/06/2009 till:01/06/2012 text:3.1 color:out_of_support
 bar:3.0 from:03/12/2008 till:12/02/2009 text:3.0 color:out_of_support
 bar:2.7 from:03/07/2010 till:01/01/2020 text:2.7 color:out_of_support
 bar:2.6 from:01/10/2008 till:29/10/2013 text:2.6 color:out_of_support
 bar:2.5 from:19/09/2006 till:26/05/2011 text:2.5 color:out_of_support
 bar:2.4 from:30/11/2004 till:19/12/2008 text:2.4 color:out_of_support
 bar:2.3 from:29/06/2003 till:11/03/2008 text:2.3 color:out_of_support
 bar:2.2 from:21/12/2001 till:30/05/2003 text:2.2 color:out_of_support
 bar:2.1 from:15/04/2001 till:09/04/2002 text:2.1 color:out_of_support
 bar:2.0 from:16/10/2000 till:22/06/2001 text:2.0 color:out_of_support
 bar:1.6 from:05/09/2000 till:01/09/2000 text:1.6 color:out_of_support
 bar:1.5 from:03/01/1998 till:13/04/1999 text:1.5 color:out_of_support
 bar:1.4 from:25/10/1996 till:03/01/1998 text:1.4 color:out_of_support
 bar:1.3 from:13/10/1995 till:25/10/1996 text:1.3 color:out_of_support
 bar:1.2 from:13/04/1995 till:13/10/1995 text:1.2 color:out_of_support
 bar:1.1 from:11/10/1994 till:13/04/1995 text:1.1 color:out_of_support
 bar:1.0 from:26/01/1994 till:11/10/1994 text:1.0 color:out_of_support
 bar:0.9 from:20/02/1991 till:26/01/1994 text:0.9 color:out_of_support


## جستارهای وابسته
* تاریخچه مهندسی نرم‌افزار

## منابع

## پیوند به بیرون
* [ وبلاگ Guido Van Rossum در مورد تاریخ پایتون]

رده:پایتون (زبان برنامه‌نویسی)
رده:تاریخچه نرم‌افزار

https://www.aparat.com/Python.Academy/Python_Academy