خوشم میاد از کسایی که جای شعار دادن می شینن یه گوشه واسه خودشون حرف هاشون رو به عمل تبدیل میکنن بدون اینکه براشون مهم باشه بقیه بابت کارشون بهشون توجه می کنن یا نه. گوگل یکی از همین هاست.
همونطور که همتون میدونید ( یا شاید هم نمی دونید ) یکی از سه زبان اصلی برنامه نویسی مورد استفاده در گوگل, پایتون هستش. دو تای دیگه, یکی ++C هست که قسمت زیادی از کدهاش به عنوان توسعه دهنده های پایتون نوشته شدن و اون یکی که نیاز به گفتن نداره. جاوا.
و باز هم همونطور که همتون میدونید (یا شاید اینبار هم نمیدونید) سایت محبوب یوتیوب با پایتون خالص نوشته شده! البته جو گیر نشید یوتیوب هم از ++C استفاده میکنه ولی بر عکس گوگل, یوتیوب تقریبا 99.99% درصد از کدهای ++C رو برای ساخت توسعه دهنده های پایتون نوشته. و احتمالا این رو هم میدونید که گوگل یوتیوب رو خیلی وقت پیش خریده پس با این توضیحات میشه به صورت تئوری اینطور بیان کرد که گوگل بزرگترین منبع سورس های نوشته شده با پایتون رو در اختیار خودش داره و از طرفی هم خیلی از افراد کلیدی پایتون توی گوگل مشغول به کارن که خوب دلیلش هم کاملا واضحه.
یکی از چیزهای دیگه ایی که باید بدونید اینکه من دو تا پاراگراف بالا رو از یه جام در نیاوردم! یه سرچ تو گوگل بزنید یا مطلب رو تا پایین ادامه بدید و فایل PDF ای که براتون می ذارم رو بخونید تا درستی این گفته ها بهتون ثابت بشه.
به هر حال؛ اینطور که پیداست (یا بهتره بگم پیدا بود) گوگل به عنوان شرکتی که ستون های اصلیش روی پایتون ساخته شده, تصمیم گرفت که سرعت این زبان برنامه نویسی رو با توجه به چیزی که خودش از مفهوم “سرعت” انتظار داره, بالاتر ببره. حداقل 5 برابر بالاتر از سرعت فعلی پایتون!
می دونید پایتون یه زبان تفسیری و دینامیک هستش. تو این مدل از زبان های برنامه نویسی سرعت عمل برنامه نویس خیلی بالاست اما لزوما قرار نیست سرعت برنامه هم به همون اندازه بالا باشه! رو همین حساب گوگل چند تا از برنامه نویس های با تجربه در زمینه ی کامپایلرها و مفسر ها رو به صورت تمام وقت یه جا جمع میکنه تا تحت پروژه ایی به اسم “Unladen Swallow” سرعت این زبان برنامه نویسی محبوب رو بهبود ببخشن.
کاری که بروبکس Unladen Swallow (یکی یه ترجمه ی مناسب ارائه بده خواهشا) انجام دادن این بوده که سورس کدهای اصلی منبع پایتون رو گرفتن (با تشکر فراوان از از آزادی و متن باز بودن این زبان برنامه نویسی) و به صورت جداگونه دارن با بر مبنای LLVM روش دستکاری انجام میدن تا بتونن علاوه بر بهبود در ترجمه و تفسیر بهتر پایتون, یه کامپایلر زمان اجرا (JIT Compiler) براش بسازن و از طرفی هم میزان منابع سخت افزاری مورد نیاز مثل حافظه یا پردازنده رو کاهش بدن.
اینجا فکر کنم لازم باشه توضیح بدم این LLVM چی هست کلا:
LLVM عزیزم یه سازه…. اوخ باز من جوگیر شدم…. برو بچه های یکی از دانشگاه های معروف امریکایی (University of Illinois) از مدت های پیش یک سری استراتژی ها و ابزارهایی روتحت اسم LLVM طراحی کردن که منحصرا برای استفاده در لایه های زیرین یک کامپایلر کاربرد داره و می تونه باعث بهبود در قسمت های مختلف یه کامپایلر بشه. این بهینه سازی بر جنبه های مختلف کار یه کامپایلر مثل عملیات زمان کامپایل, عملیات پیوند دهی!!!!, و عملیات زمان اجرا تاثیر گذاره.
مجموعه ابزارها و کدهای LLVM با ++C نوشته شده و اولش قرار بود برای بهینه سازی کامپایلر ++C/C مجموعه ی GCC استفاده بشه اما از اونجایی که ساختارش مستقل از یه زبان برنامه نویسی خاص طراحی شده, می تونه برای بهبود کار کامپایلر ها و یا مفسرهای بقیه زبان های برنامه نویسی هم استفاده بشه. برای مثال مجتمع سازی LLVM با جاوا در حال توسعه هستش یا برو بچه های Unladen Swallow قراره کاری کنن که پایتون هم بتونه از LLVM استفاده کنه.
پروژه Unladen Swallow قرار نیست کارها رو با عجله و هول هولکی انجام بده و در عوض با تقسیم بندی پروژه در چند فاز مختلف سعی کرده آروم آروم به پیشرفت کار اضافه کنه.
- فاز یک پروژه به پایان رسیده و سرعت پایتون 35-25 در صد افزایش پیدا کرده.
- فاز دوم پروژه به پایان رسیده و کامپایلر زمان اجرا بر پایه LLVM به پایتون اضافه شده و علاوه بر اون تا 25 درصد نسبت به فاز یک بهبود در سرعت حاصل شده !
- فاز سوم هم جدیدا به پایان رسیده. بهبود سرعت نسبت به فاز دوم پروژه از 70-15 درصد دیده میشه و در ضمن میزان استفاده از حافظه نسبت به فاز دوم پروژه 930 در صد کاهش پیدا کرد. (درست خوندید 930 درصد!)
- پروژه هنوز به اتمام نرسیده و باید منتطر کامل شدن فاز های بعدی باشیم. چرا؟ چون:
- سرعت پایتون میتونه از این هم زیادتر بشه. تیم متوجه شده که کار سخت تر از اونیه که فکر میکردن. در واقع سختی بیشتر کار بابت اینه که تیم نمی خواد خیلی زیاد هسته ی پایتون رو دستکاری کنه. به خاطر همین ممکنه سرعت به حدی که انتظار میرفت نرسه.
- میزان استفاده از منابع سخت افزاری هم باید کاهش بیشتری پیدا کنه چون در حال حاظر این ویرایش پایتون از 2 تا 3 برابر نسبت به ویرایش معمولی CPython بیشتر حافظه مصرف میکنه.
- در ضمن باید این کدها به پلتفرم های مختلف پورت بشن چون در حال حاظر فکر میکنم بیشتر با سیستم های یونیکس و لینوکس و بقیه رفقاشون سازگاره.
- با تغییرات انجام شده عملیات debug کردن برنامه ها مشکل پیدا کرده و باید فکری براش بشه.
- از همین الآن تعدادی از برنامه نویس های برتر مفسر پایتون خالفت خودشون رو با ترکیب شدن کدهای این پروژه با کدهای اصلی CPython اعلام کردن.
به روزرسانی: چند خط از این نوشته (مواردی که با دایره های سیاه رنگ نوشته شدن) در تاریخ 13 آبان 88 اضافه شده ان.
خوبیه این پروژه اینکه قراره با کدهای معمولی پایتون کاملا سازگار باشه و توسعه دهنده هایی که تا امروز برای پایتون نوشته شدن بدون هیچ تغییری به راحتی اجرا بشن. در آخر هم هدف اصلی پروژه اینکه نمه نمه تغیرات صورت گرفته رو به سورس اصلی پایتون (CPython) اضافه کنه.
این فایل PDF رو هم دانلود کنید بد نیست. فایل یکی از کنفرانس های معرفی پروژه ی Unladen Swallow هستش. البته یکم قدیمی شده چون پروژه خیلی سریع داره پیشرفت میکنه. من نظرم اینه که اگه به سایت پروژه برید و اطلاعات اونجا رو بخونید بهتر کمکتون میکنه.






10 comments
Comments feed for this article
نوامبر 1, 2009 روی 1:38 ب.ظ
کامیار
ترجمه Unladen Swallow : پرستوی سبک بال
در ضمن یه سوال: برای دسترسی به google code از فیلترشکن استفاده می کنی؟
نوامبر 1, 2009 روی 3:51 ب.ظ
صالح
ممنون مطلب بسیار عالی بود
نوامبر 1, 2009 روی 4:19 ب.ظ
امیررضا
@کامیار
مرسی واسه ترجمه. آره از فیل-تر شکن استفاده میکنم.
@صالح
مرسی که وقت گذاشتی و خوندی
نوامبر 1, 2009 روی 8:52 ب.ظ
بهرام
چه جالب !
من واقعا نمیدونستم گوگل از pyhton برای برنامهنویسی استفاده میکنه !
واقعا دارم خودم رو سرزنش میکنم که برای چی وقت ندارم python بخونم ؟! ( بعضی وقتها هم میگم همین Java هم از سرم زیاده !! )
خیلی مطلب شورانگیزی بود.
راستی یه سوالی برام پیش اومده :
python مثل java میتونه کدهاش رو به صورت یه چیزی شبیه class دربیاره ؟! یا مثل PHP هربار از روس سورس کامپایل و اجرا میکنه ؟!
ممنون و موفق باشی
نوامبر 2, 2009 روی 9:56 ق.ظ
امیررضا
@بهرام
آره بابا زبان برنامه نویسی اصلی گوگله دیگه. البته ++C هم جزو زبان های اصلیه که همونطور که گفتم قسمت زیادی از کدهای ++C رو برای ساخت extention های پایتون نوشتن. تو بعضی پروژه ها مثل gmail هم از جاوا استفاده میکنن.
از کی تا حالا واسه یاد گرفتن پایتون باید وقت کنار گذاشت؟ سرو تهشو تو یه ساعت یاد میگیری دیگه. مخصوصا تو که برنامه نویسی با یه زبان دیگه رو بلدی احتمالا میتونی توی نیم ساعت پیاتون رو یاد بگیری. این یکی از اصلی ترین خصوصیات پایتونه که طرفداراش خیلی می نازن بهش. یاد گرفتن کتابخونه ها و فریم ورک ها هم خوب چیزیه که باید در طول زمان و با کسب تجربه حاصل بشه.
پایتون تفسیریه یعنی مثل PHP یا روبی نیاز به کامپایل نداره. فقط بنویس و اجرا کن. اما از طرفی هم مثل جاوا کدهاش رو به بایت کدهای خاص خودش تبدیل میکنه که اتوماتیک تو فایل های pyc. ذخیره میشن و دفعه ی دوم که خواستی برنامه رو اجرا کنی دیگه خود به خود پایتون از رو فایل های pyc. اجرا میشه نه از روی فایل های py.
اگه منظورت از این سوال این بود که سورس کد ها رو کسی نبینه باید بگم آره میتونی جای فایل های py. فایل های pyc. رو بدی به مشتری ولی باید حواست باشه که فقط با همون ورژنی از پایتون که بایت کدها باهاشون تبدیل شدن اجرا میشن. در ضمن میشه مثل جاوا یا دات نت کدها رو برگردوند تا قابل فهم بشن. در کل دید این زبان برنامه نویسی با فلسفه ی برنامه های اوپن سورس جلو میره یعنی وقتی برنامه ایی رو واسه مشتری مینویسی سوروس های برنامه هم باید برای مشتری باشه دیگه.
حالا دارم یه سری مقاله مینویسم راجع به معرفی پایتون و اینکه اصلا برای کیا خوبه, برای کیا خوب نیست, یا تو چه مدل برنامه هایی به درد میخوره و تو کدوم مدل ها ضعیفه.
نوامبر 4, 2009 روی 6:00 ب.ظ
bamdad dashtban
خیلی وقت بود با مقاله فارسی راجع به کامپیوتر حال نکرده بودم.
واقعا لذت بردم خوشحال میشم باهم در تماس باشیم
نوامبر 4, 2009 روی 6:34 ب.ظ
امیررضا
@bamdad
لطفت رو میرسونه که وقت گذاشتی و خوندی.
در مورد صحبت دومت هم من همیشه آماده ی یاد گرفتن چیزهای جدید از آدم های جدیدم. بسم الله
نوامبر 11, 2009 روی 5:31 ب.ظ
Ins
از کجا میشه فهمید که گوگل از پیتون اشتفاده میکنه؟
مرجع مثلا کجای gmail از پیتون اشتفاده شده؟
البته می دونم که گوگل… ولی در کدام پروژه ها و چی و کجا نمیدونم! لطف می کنید چند تا مرجع معرفی کنید.
نوامبر 11, 2009 روی 7:21 ب.ظ
Ins
سلام
)؟
میشه یه منبعی بدی که گوگل در کجاها از پیتون استفاده میکنه؟ در چه پروؤه هایی و کجاها؟ و به چه نحوی؟
و چطوری میشه فهمید که از پیتون استفاده کرده یا نه(با مثال
چون برام مبهمه…
نوامبر 11, 2009 روی 11:34 ب.ظ
امیررضا
بهتره بگی گوگل کجاها از پایتون استفاده نمیکنه! پایتون و ++c جزو زبان های اصلی گوگل هستن. منبع خاصی برای این حرف لازم نیست خود برنامه نویس هاش همیشه تو مصاحبه ها یا کنفرانس های مختلف خیلی راحت میگن که از چه ابزارهایی استفاده میکنن یه سرچ کوچیک تو گوگل بزن خودت میفهمی. نمونش میتونه همین فایل pdf که واسه دانلود گذاشتم باشه که توسط برنامه نویس های گوگل برای یه کنفرانس در مورد Unladen Swallow نوشته شده. یا مثلا میتونی صفحه ی زیر رو ببینی:
http://www.python.org/about/quotes
و خیلی جاهای دیگه تو اینترنت. در ضمن Gmail تا اونجا که من میدون از جاوا و GWT استفاده میکنه نه پایتون. اصولا تو شرکت های بزرگ ابزارهای مورد استفاده خیلی مهم نیستن, مهم اینکه حاصل کار خوب در بیاد واسه همین هم توی گوگل ممکنه از خیلی زبان ها و ابزارهای گوناگون استفاده بشه.
از نظر من استفاده از این ابزارها دلایل روشنی داره. بهرحال انتظار بیشتری هم نمیشه داشت. اغلب برنامه نویس ها و کارکنان گوگل اصلا از ویندوز استفاده نمی کنن و تو خیلی از جاها می خونیم که برنامه نویس هاش اعتراف میکنن که خیلی در مورد برنامه نویسی روی ویندوز تجربه ندارن! (نمونش همین برنامه نویس های Unladen Swallow همونطور که میبینی نیاز به منبع خاصی نیست خودشون خیلی راحت خیلی چیزا رو میگن) از طرفی هم یه شرکتی در حد گوگل این ریسک رو نمیکنه که مثلا بخواد از چیزی مثل دات نت در سطح وسیع استفاده کنه چون نه اوپن سورسه و نه آزاد و گوگل نمی تونه هیچ نظارتی روی اون ها داشته باشه. پس اگه ویندوز و ابزارهای برنامه نویسی ماکروسافتی و غیره و رو حذف کنیم, چیزی که باقی می مونه ++C/C و جاوا و پایتون و پرل و خیلی از زبان های با کیفیت و آزاد دیگه هست.