مروری بر پیاده سازی های پایتون

همانطور که قبلا نیز توضیح دادم پیاده سازی های متفاوتی با اهداف مختلف از پایتون وجود دارد.CPython, Jython, IronPython, Stacklessو PyPy نمونه هایی از آن هستند.

CPython پیاده سازی پیشفرض از پایتون است که بوسیله ANSI C نوشته شده است.این پیاده سازی همان نسخه ای است که به صورت پیش فرض روی تمامی لینوکس ها و مک ها وجود دارد.

Jython پیاده سازی پایتون برای استفاده و یکپارچگی به زبان جاوا است.در واقع این پیاده سازی کد پایتون را به بایت کدهای جاوا تبدیل می کند.بایت کد تولید شده توسط JVM اجرا می شود.بایت کد تولید شده به این خاطر که به زبان جاوا است،می تواند در تمام مکان هایی که کدهای جاوا قادر به اجرا شدن هستند اجرا شوند.به طور مثال در اپلت ها.

IronPython پیاده سازی پایتون برای یکپارچگی با کدهای دات نت است.به وسیله کسی نوشته شده است که Jython را نوشته و مثل Jython قادر است در تکنولوژی های سمت سرور و کلاینت مایکروسافت استفاده شود.

Stackless برای همزمانی بالا کاربرد دارد و از microthread  برای اجرای برنامه استفاده می کند.microthreadها به وسیله خود مفسر مدیریت می شوند و از سربار ناشی از مدیریت آنها توسط سیستم عامل می کاهد.این پیاده سازی از روی  CPython انجام شده است.

PyPy برای دستیابی به سرعت بالا توسعه داده شده است و دارای Jit هست.علاوه بر آن دارای مدل sand box برای اجرای کدها در محیطی ایزوله است.Jit یک extrnsion برای PVM است که بایت کد را به کد اجرایی ماشین برای رسیدن به سرعت بیشتر تبدیل می کند.

extension های پایتون:

یک سری افزونه برای پایتون وجود دارد که به جهت بهره گیری از سرعت بالاتر نوشته شده اند.لیستی از آنها را در لیست زیر مشاهده می کنید:

Cython:به وسیله این افزونه می توان از توابع و تایپ های سی استفاده کرد و حتی کدمان را با سی کامپایل کنیم.

Shed Skin:کد پایتون را به -سی پلاس پلاس ترجمه می کند که دارای محدودیت هایی نیز هست.

Psyco:یک JIT Compiler است.در حال حاضر توسعه داده نمی شود و می توان گفت که PyPy  جایگزین آن هست.

اجرای کد توسط پایتون

پایتون دارای یک Interpreter پیش فرض هست که به زبان سی نوشته شده است.البته پیاده سازی های دیگری نیز  از آن وجود دارد.

زمانیکه صحبت از اجرای یک کد می شود می توان آن را از دو دید مختلف مورد بررسی قرار داد.

از دید یک برنامه نویس:شما به عنوان برنامه نویس یک کد را می نویسید و سپس آن را اجرا می کنید.برای نوشتن کد پایتون می توانید از یک فایل متنی ساده نیز استفاده کنید.

print(‘hello world’)

print(2 ** 100)

مثلا کد فوق از بالا به پایین اجرا می شود.

از دید پایتون:

از این جنبه موضوع کمی فرق دارد و زمانی که پایتون می خواهد کد فوق را اجرا کند،باید آن را به یک چیز میانی به نام “byte code” تبدیل کند و سپس بوسیله “virtual machine” آن را اجرا کند.

پایتون در یک مرحله که از دید کاربر مخفی است کد را به byte code تبدیل می کند.بایت کد در یک فایل با پسوند .pyc ذخیره می شود.این فایل ها در همان مسیری که برنامه اصلی وجود دارند نگهداری می شوند.البته از ورژن ۳٫۲ به بعد فایل های .pyc در یک زیر شاخه به نام __pycache__ ذخیره می شوند.این مسیر نیز در همان مسیری است که سورس کد ما در آنجا قرار دارد.فرض کنید ما یک فایل به اسم script.py داریم ،از پایتون  ۳٫۲ به بعد این فایل با اسم script.cpython-33.pyc ذخیره می شود.این کار باعث می شود که در ورژن های مختلف به مشکل بر نخوریم.

این کار برای بهینه سازی سرعت اجرای برنامه صورت می گیرد.بار اول که برنامه اجرا شد و بایت کد ساخته شد دیگر نیازی به ساخت مجدد آن نیست.مگر در شرایط زیر:

تغییر سورس کد:در این حالت پایتون آخرین زمان تغییر سورس را با بایت کد مقایسه می کند و در صورتی که تغییری در آن صورت گرفته باشد آن را دوباره کامپایل می کند.

تفاوت در ورژن:در صورتیکه بایت کد با یک ورژن متفاوت کامپایل شده باشد.

توجه کنید که در صورتی که پایتون نتواند بایت کد را نیز ذخیره کند آن را در رم ایجاد و بعد از خارج شدن از برنامه از بین می برد.

بعد از اینکه کدها توسط مفسر به بایت کد تبدیل شده آن ها برای اجرا شدن باید تحویل Virtual Machine شود.Python Virtual Machine آنقدر ها هم که اسمش نشان می دهد چیز عجیبی نیست و درواقع مرحله آخر از فرایند مفسر است.PVM برنامه مستقل از پایتون نیست و با خود پایتون بر روی سیستم نصب می شود.

مراحل اجرای کد پایتون

افرادی مثل خود من که قبلا با زبان های کامپایلی کار کرده اند ممکن است با خود سوال کنند که چون در زبانی مثل پایتون ما مرحله کامپایل نداریم به این خاطر سرعت آن از زبان هایی مثل سی پایین تراست .این موضوع تا حدودی درست است.ولی Python هوشمند طراحی شده است و نیازی ندارد تا یک متن را چند مرتبه آنالیز و پارس کند.

علاوه بر این موضوعی که باید به آن توجه کرد این است که محیط توسعه و محیط اجرا در پایتون دقیقا یکسان هستند و اگر Python در سمت توسعه وجود دارد در محیط اجرا نیز باید باشد.از این رو دستمان باز است و اگر نیاز بود که در محیط اجرا تغییراتی در کد بدهیم بدون نیاز به کامپایل مجدد می توان آن تغییرات را اعمال کرد.

اگر سابقه کار با دات نت را داشته باشید به احتمال زیاد خواهید پرسید که آیا این .pycمثل همان IL است ؟یا اینکه سوال می کنید اگر پایتون یک زبان مفسر است پس .pyc چیست؟

موضوعی که باید به آن توجه کرد زبان برنامه نویسی از یک سری قوائد و اصول نحوی ، ساختاری و ریاضیات تشکیل شده.علاوه بر آن ما یک زبان را نمی توانیم بگوییم که آیا فلان زبان کامپایلی هست یا مفسر.بلکه به پیاده آن می گوییم مفسر یا کامپایلی.به این موضوع توجه کنید که ما زمانیکه از پایتون سخن می گوییم از پیاده سازی پیشفرض آن یعنی CPython حرف می زنیم.

CPython کد را به بایت کد تبدیل می کند.در داکیومنت های پایتون نیز گفته شده است که پایتون(CPython)یک زبان (پیاده سازی) مفسراست یعنی برای اجرای کد آن نیازی نیست که یک برنامه اجرایی (exe)ایجاد کند.CPython نیز طوری طراحی شده است که بتواند با نهایت سرعت کد ما را اجرا کند.

چه کارهایی را می توان با پایتون انجام داد؟

 

یکی از موضوعاتی که اکثر افراد برای انتخاب یک زبان برنامه نویسی با آن روبرو هستند این است که ،چه کارهایی را می توان با یک زبان انجام داد؟بد نیست به این سوال در زمینه پایتون جواب دهیم.

introduction-to-python-for-beginn

برنامه نویسی سیستم:

به وسیله پایتون به راحتی می توان برنامه های قابل حمل سیستمی نوشت.برنامه هایی از کار با دایرکتوری گرفته تا برنامه ها ی موازی.علاوه بر آن پایتون با POSIX منطبق است که نتیجه این موضوع پشتیبانی از امکانات معمول سیستم عامل ها مثل:environment variables, files, sockets, pipes, processes, multiple threads, regular expression pattern matching, command-line arguments, standard stream interfaces,shell-command است.

برنامه نویسی GUI:

با پایتون می توان برنامه های گرافیکی قابل حمل نوشنت. به این معنی که برای اجرا در سایر پلتفورم ها نیازی به تغییر آن وجود نداشته باشد.به طور مثال tkinter یک API است که امکان نوشتن GUIقابل حمل را برای ما فراهم می کند.

Internet Scripting:

پایتون با بسیاری کتابخانه های درونی شده عرضه می شود که می توان به راحتی برنامه نویسی شبکه انجام داد.مثلا از برنامه نویسی سوکت گرفته تا انتقال فایل به وسیله اف تی پی.

همچنین در صورتی که نیاز باشد که یک برنامه تحت وب قوی نیز بنویسید به راحتی می توانید از پکیج هایی مثل Django, TurboGears, web2py, Pylons, Zope استفاده کنید.این پکیج ها دارای امکاناتی مثل ORM و یا معماری MVC هستند.

Component Integration:

قبلا هم درباره این موضوع صحبت کردم که می توان به راحتی از برنامه های نوشته شده در پایتون در زبان های دیگر و بلعکس استفاده کرد.

Database Programming:

به وسیله پایتون به راحتی می توان به دیتابیس های مختلف از قیبل sql وnosql وصل شد و در پلتفورم های مختلف جابجا کرد.علاوه بر آن دیتابیس درونی موجود در پایتون SQLite است که می توان از آن نیز استفاده کرد.

Numeric and Scientific Programming:

یکی از موارد استفاده پایتون که به شدت هم مورد پسند متخصصان در آن حوزه هست،برنامه نویسی علمی است.

به خاطر این که این قبیل برنامه نویسی ها نیاز به سرعت خیلی بالا دارند در مواردی که پایتون جوابگو نبود می توان از کامپننت هایی مثل NumPyبرای انجام آن کارها استفاده کرد.

Gaming, Images, Data Mining, Robots, Excel:

کتابخانه های قدرتمندی نیز در زمینه های بالا وجود دارد.به لیست کتابخانه های زیر توجه کنید:

Game programming and multimedia with pygame, cgkit, pyglet, PySoy,
Panda3D, and others
• Serial port communication on Windows, Linux, and more with the PySerial extension
• Image processing with PIL and its newer Pillow fork, PyOpenGL, Blender, Maya,
and more
• Robot control programming with the PyRo toolkit
• Natural language analysis with the NLTK package
• Instrumentation on the Raspberry Pi and Arduino boards
• Mobile computing with ports of Python to the Google Android and Apple iOS
platforms
• Excel spreadsheet function and macro programming with the PyXLL or DataNitro
add-ins
• Media file content and metadata tag processing with PyMedia, ID3, PIL/Pillow,
and more
• Artificial intelligence with the PyBrain neural net library and the Milk machine
learning toolkit
• Expert system programming with PyCLIPS, Pyke, Pyrolog, and pyDatalog
• Network monitoring with zenoss, written in and customized with Python
• Python-scripted design and modeling with PythonCAD, PythonOCC, FreeCAD,
and others
• Document processing and generation with ReportLab, Sphinx, Cheetah, PyPDF,
and so on
• Data visualization with Mayavi, matplotlib, VTK, VPython, and more
• XML parsing with the xml library package, the xmlrpclib module, and third-party
extensions
• JSON and CSV file processing with the json and csv modules

سوالات عمومی درباره پایتون

مدتی بود که درگیر پیاده سازی یک برنامه به زبان پایتون بودم.تجاربی در این زمینه بدست اوردم که در قالب یک سری پست با شما به اشتراک خواهم گذاشت.

در این پست با سوالات اولیه و عمومی که هر برنامه نویس ممکن است درباره پایتون بپرسد آشنا خواهیم شد.

چرا از پایتون استفاده می کنیم؟

کیفیت نرم افزار

فوکوس پایتون بر خوانایی بالا با ثبات بیشتر وقابلیت استفاده مجدد است.کدهای پایتون را به راحتی می توان درک کرد.علاوه بر آن پایتون از مدل های مختلف برنامه نویسی مثل شی گرایی و تابعی پشتیبانی میکند.در پایتون برای انجام یک کار راههای فراوانی وجود دارد ولی یک راه واضح برای انجام یک تسک وجود دارد.این کار باعث می شودکه برنامه نویس در هنگام کد نویسی کمتر سردرگم شود و راه مناسب را انتخاب کند.باید دقت داشت که پایتون برای ما تصمیم نمی گیرد که چطور کد بنویسیم بلکه یک راه خیلی واضح را جلوی پای ما قرار می دهد.

بهره وری بالاتر برای برنامه نویس

حجم کد تولیدی بسیار کمتر سی و یا جاوا است و به طور معمول بین یک سوم تا یک پنجم کد کمتری نسبت به آنها تولید می کنیم.این کد کم باعث میشود که کمتر دیباگ کنیم ونیاز به نگهداری خطوط کد نیز کمتر شود.علاوه بر آن به دلیل آن که کد پایتون کامپایل نمی شود در اجرا (دیباگ)در زمان توسعه سریعتر اجرا شده و وقت کمتری از برنامه نویس می گیرد.

چند پلتفرمی بودن

بیشتر کدهای پایتون را بدون تغییر می توان بین سیستم های لینوکسی و سیستم های ویندوزی جابجا کرد.

کتابخانه های فراوان

کتابخانه های فروانی در کنار پایتون وجود دارند (standard library)علاوه بر آن به راحتی می توانید کتابخانه های مورد نیاز خود رااز اینترنت دانلود کنید و استفاده کنید.

قابلیت یکپارچگی

از کدهای پایتون می توان در جاهای مختلفی استفاده کرد به طور مثال کدهای پایتون قابلیت اجرا شدن در سی پلاس پلاس و یا قابلیت اجرا در سی را دارند.علاوه بر آن می توان کدهای سی و یا اکثر زبان های برنامه نویسی را در پایتون استفاده کرد.

آیا پایتون یک زبان اسکریپتی است؟

پایتون را با توجه به جنبه های زیر می توان یک زبان اسکریپتی دانست:

یک ابزار shell است:به راحتی می توان از آن برای برنامه نویسی شل استفاده کرد.

یک زبان کنترلی است:می توان به وسیله پایتون برنامه های دیگر را کنترل کرد و یا حتی به طور مثال می توان به وسیله کدهای آن یک سخت افزار را تست کرد.

یک زبان برنامه نویسی خوش دست است:به وسیله ی آن می توان کارها را به مراتب ساده تر کرد.

بنابراین زمانی که ما از زبان اسکریپتی حرف می زنیم اکثر مواقع سرعت پیاده سازی کد و منعطف بودن زبان نیز مد نظر ما هست که با این تفاسیر پایتون را می توان یک زبان اسکریپتی دانست.

نکته منفی استفاده از پایتون چیست؟

یکی از نکات منفی استفاده از پایتون ،سرعت آن در قیاس با سی است.زیرا هر چه سریع باشد باز به اندازه سی و یا زبان های مثل(کامپایلی) آن سریع نیست.هر چند که می توان با استفاده از کتابخانه های مثل NumPy در بعضی از این زمینه ها به سرعت بالا دست پیدا کرد،ولی باز هم در صورتی که نیاز به سرعت بالا در قسمتی از برنامه داشتیم می توانیم به راحتی آن قسمت را به وسیله کد سی پیاده کنیم و در پایتون استفاده کنیم.

البته از دو جنبه دیگر می توان به نکات منفی پایتون توجه کرد

از نظر یک مربی:تغییرات این زبان بالا هستش و نیاز دارند که هروز مفاهیم جدید و باتوجه به مفاهیم روز تدریس کنند.

از نظر یک برنامه نویس:استفاده از ابزارهای درونی پایتون مثل استفاده از یک دستگاه با باطری درونی(غیر قابل تعویض) است .فرض کنید چه بلایی به سر ما می آید اگر یک باطری ثابت خراب شود یا تاریخ مصرفش بگذرد؟

چه کسانی از پایتون استفاده می کنند؟

در حال حاضر پایتون یکی از ده زبان برتر دنیا است.به واسطه سورس باز بودن این محصول شرکت های زیادی چه به صورت بلند مدت و چه به صورت کوتاه مدت از پایتون استفاده می کنند.به لیست شرکتهای زیر توجه کنید:

Google از پایتون در موتور جستجوی خود به طور گسترده ای استفاده می کند.

YouTube به وسیله پایتون نوشته شده است.

Dropbox به وسله پایتون نوشته شده است.

BitTorrent از یک برنامه پایتون شروع شد.

Maya یک سری Api برای اسکریپت نویسی به زبان پایتون در اختیار ما قرار می دهد

Intel, Cisco, Hewlett-Packard, Seagate, Qualcomm, IBM برای تست های سخت افزاری خود از پایتون استفاده می کنند.

NASA نیز در زمینه های علمی استفاده گسترده ای از این زبان دارد.

برای اطلاعات بیشتر به این سایت مراجعه کیند.

برداشتی آزاد از Learning Python, 5th Edition + تجارب شخصی