معرفی PHP 8.0
۵ مرداد ۱۳۹۹
PHP 7 برای توسعهدهندگان بسیار جذاب بوده است، پیشرفتهای بسیار زیادی نسبت به PHP 5 داشته و در مورد سرعت و عملکرد آن صحبت شدهاست. همچنین بسیاری از نیازهای مورد انتظار توسعهدهندگان در بخش تجربه کاربری را برآورده کرده است.
بااینحال، اگر بگوییم که هیچ زبانی عالی و کامل نیست، اشتباه نگفتهایم و هر زبانی نیاز به بهروزرسانیهای مختلف دارد. بنابراین وقتی صحبت از PHP نسخه 8 شود، انتظار کاربران بسیار زیاد است. یکی از چیزهایی که توسعهدهندگان دوست دارند در PHP8 ببینند، حرکت به سمت ویژگیهای real-time است. به این دلیل که این ویژگی به شما کمک میکند تا نیازی به استفاده از زبانهای دیگر در پروژه خود، بخاطر ویژگی real-time نداشته باشید.
با توجه به فواید قابلیت real-time، اینترنت به سمت این قابلیت در حال حرکت است و کاربران میخواهند محتوا را سریعتر دریافت کنند. تعداد کمی از زبانهای برنامهنویسی مانند JavaScript به کمک Node.js یا Python با Tornado، دارای ویژگی real-time هستند، اما PHP هنوز حرفی برای گفتن ندارد. خب با توجه به اطلاعیهها میتوان گفت که PHP در نسخه 8 خود با افزودن قابلیت JIT (Jist-in-Time)، با این موضوع درگیر شده است.
بیایید ابتدا با معرفی مختصری از PHP و نسخههای قبلی این زبان، آن را بهتر درک کنیم.
زبان برنامهنویسی PHP
PHP مخفف عبارت Hypertext Preprocessor، به عنوان یک پروژه متنباز کوچک شروع به کار کرد، سرانجام تکامل یافت و افراد بیشتری از فواید این زبان آگاه شدند. در سال ۱۹۹۴، Rasmus Lerdorf، برنامهنویسی کانادایی-دانمارکی اولین نسخه PHP را رونمایی کرد. PHP، یک زبان برنامهنویسی تعبیه شده (embedded) در HTML و سمت سرور است که امروزه بسیار محبوب شده.
از این زبان برای مدیریت محتوای پویا، session tracking، دیتابیس و حتی ساخت سایتهای تجارت الکترونیک، استفاده میکنند همچنین با دیتابیسهای محبوبی مانند MySQL, Oracle, PostgreSQL, Sybase, Microsoft SQL Server و Informix هماهنگ شده است.
PHP به خصوص زمانی که به عنوان ماژول Apache در سمت یونیکس کامپایل شد، اجرای موفقی از خود به نمایش گذاشت. در شروع کار با MySQL server هم کوئریهای پیچیدهای را در حجم زیادی از دادهها در مدت زمان کوتاهی اجرا کرد.
علاوه بر اینها از پروتکلهای IMAP, POP3 و LDAP پشتیبانی میکند. برای اولین بار، توسعه N-Tier در PHP قابل انجام شدن بود و در PHP4 پشتیبانی از Java و معماری توزیع شده آبجکت (COM و CORBA) را فراهم کرد. همچنین سینتکس برنامهنویسی شبیه زبان C را داراست.
چیز دیگری که در رابطه با این زبان وجود دارد، راحتی استفاده از آن است زیرا نه تنها توسعهدهندگان پیشرفته بلکه تازهکارها هم میتوانند از آن استفاده کنند. باید بگوییم این زبان برای توسعهدهندگان حرفهای هم ویژگیهای جالبی را با خودش به همراه داشته است.
نسخههای قبلی PHP تا به امروز
از گذشته تا به امروز، نسخههای مختلفی عرضه شدهاند، در این قسمت نسخههای پیشین این زبان را که در حال حاضر در دسترس هستند و اینکه تا چه زمانی در توسعه استفاده میشدهاند را بررسی میکنیم.
1.0 هشتم ژوئن سال ۱۹۹۵
2.0 یکم نوامبر ۱۹۹۷
3.0 ششم ژوئن ۱۹۹۸ تا بیست اکتبر ۲۰۰۰
4.0 بیستودوم می ۲۰۰۰ تا بیستوسوم ژوئن ۲۰۰۱
4.1 ده دسامبر ۲۰۰۱ تا دوازدهم مارس ۲۰۰۲
4.2 بیستودوم آوریل ۲۰۰۲ تا ششم سپتامبر ۲۰۰۲
4.3 بیستوهفتم دسامبر ۲۰۰۲ تا سیویکم مارس ۲۰۰۵
4.4 یازدهم ژوئیه ۲۰۰۵ تا هفتم آگوست ۲۰۰۸
5.0 سیزدهم ژوئیه ۲۰۰۴ تا پنج سپتامبر ۲۰۰۵
5.1 ۲۴ نوامبر ۲۰۰۵ تا ۲۴ آگوست ۲۰۰۶
5.2 ۲ نوامبر ۲۰۰۶ تا ششم ژانویه ۲۰۱۱
5.3 ۳۰ ژوئن ۲۰۰۹ تا ۱۴ آگوست ۲۰۱۴
5.4 ۱ مارس ۲۰۱۲ تا ۳ سپتامبر ۲۰۱۵
5.5 ۲۰ ژوئن ۲۰۱۳ تا ۲۱ ژوئیه ۲۰۱۶
5.6 ۲۸ آگوست ۲۰۱۴ تا ۳۱ دسامبر ۲۰۱۸
7.0 ۳ دسامبر ۲۰۱۵ تا 3 دسامبر ۲۰۱۸
7.1 ۱ دسامبر ۲۰۱۶ تا اول دسامبر ۲۰۱۹
7.2 ۳۰ نوامبر ۲۰۱۷ تا ۳۰ نوامبر ۲۰۲۰
7.3 ششم دسامبر ۲۰۱۸ تا دسامبر ۲۰۲۱
قابلیت Just In Time (JIT) در PHP 8.0
هنوز هیچ اطلاعاتی کاملی در مورد ویژگیهای آتی PHP 8.0 در دست نیست. با این وجود، احتمال اضافه شدن JIT در نسخه 8.0 PHP وجود دارد. برای درک بهتر JIT در PHP باید خلاصهای از آن بگوییم. just in time قابلیتی برای بهینهسازی کد اجرایی به هنگام کامپایل است.
این روش محبوب در جاوا با JVM یا همان ماشین مجازی جاوا و در V8 JavaScript VM هم که توسط گوگل ارائه شده و همچنین HHVM وجود دارد. پس اصطلاحا میتوان گفت، JIT گلوله نقرهای نیست (اشاره به خاص نبودن افزوده شدن این قابلیت)، زیرا هر دوی این زبانها از قبل از آن استفاده میکردهاند.
قبل از تکمیل شدن نسخه فعلی PHP 7.x، توسعه PHP بر روی بهبود عملکرد این زبان با استفاده از JIT متمرکز شده بود. این تلاش باعث بهبود چشمگیر رتبه در benchmarkها شد، با این حال ثابت شده است که پیشرفتهای جزئی باعث ارتقا برنامههای واقعی مانند Joomla و WordPress شده است. با توجه به پیشرفتهایی که در PHP نسخه 7.0 ارائه شد، عملکرد در PHP نسخههای 7.1 و 7.2 نسبتا متوسط شده و به همین دلیل تیم توسعه PHP دوباره شروع به کار بر روی پیادهسازی JIT کردند. هیچ تحلیل عمیقی از JIT در پروژههای PHP وجود ندارد، اما نتایج دلگرم کنندهای با خود به همراه دارد.
مقدمه مختصری از JIT (Just-in-Time Compilation)
در محاسبات، اجرای کدهای کامپیوتر که شامل کامپایل در طول اجرا (به هنگام اجرا یا run time) و نه قبل از اجرا، just-in-time میگویند (همچنین ترجمه پویا یا کامپایل run-time نامیده میشود).
به کمک این قابلیت سورسکد برنامه ما یا به عبارت دیگر bytecodeها به کدهای ماشین ترجمه میشوند و اجرای آنها به صورت مستقیم انجام میشود. سیستم پیاده سازی شده کامپایلر JIT به طور مداوم کدهای در حال اجرا را آنالیز میکند.
چرا JIT در PHP معرفی شده است؟
همانطور که قبلا اشاره کردیم، HHVM (رانتایم جایگزینی که توسط فیسبوک توسعه داده شده و از آن استفاده میکند) از JIT استفاده میکند و در مقایسه با موتور رسمی PHP، سریعتر و بهتر است.
بنابراین، به دلیل محبوبیت شدید HHVM یا تقاضای زیاد جامعه PHP در سراسر جهان، مجدداً نظرها به JIT Engine، جلب شد و گروههای توسعه Zend و PHP تصمیم گرفتند که این قابلیت را در نسخه 8.0 PHP معرفی کنند.
اگر کدهایی که در PHP 5 نوشته شدهاند را بدون هیچ تغییری با PHP 7 اجرا کنید، عملکرد دو برابر میشود. این تغییر عملکرد به دلیل تغییر در موتور PHP نبوده بلکه بهینه سازیهای دیگری در PHP 7 انجام شده. از این رو میتوانیم باور داشته باشیم، که مطمئنا بهروزرسانی در موتور PHP، باعث بهبود عملکرد در قسمتهای مختلفی شود. همانطور که از استانداردهای HHVM میدانیم، سطح عملکرد میتواند دو برابر شود یا به عبارت دیگر زمان اجرای برنامههایی که با PHP 7 نوشته شدهاند، نصف میشوند.
به عبارت دیگر برای کامپایل در زمان اجرای برنامه یا رانتایم، Jit یا Just-in-Time یکی از بهترین راهحلهای این کار است زیرا قبل از اجرا نیازی به پرداختن به بحث کامپایل نیست و در مواردی که زمان بسیاری مصرف میشود، این گزینه اهمیت بیشتری پیدا میکند. که میتوان آن را یک عملیات کامپایل پویا دانست که نتیجههای سریعتری را در مقابل کامپایل کدها قبل از اجرا، ارائه میدهد.
از آنجایی که بسیاری از فریمورکهای Java و .NET با JIT پیاده سازی شدهاند، خوب است که PHP هم در قدمهای بعد خود از مزیتهای کامپایل پویا و عملکرد بهتر آن استفاده کند.
برای درک بهتر این موضوع، به بررسی جزئی دلایل میپردازیم.
۱) PHP در تکامل خود با مانع روبرو شده است
از آنجایی که در PHP 7.0 بسیاری از پیشرفتهای مورد نیاز انجام شدهاند، مانند بهینهسازی HashTable، تخصصیتر شدن کامپایلر برای بعضی توالیها، خاصتر شدن Zend VM برای کدهای خاص (OpCodes) و …
با این پیشرفتها، PHP توانایی بیشتری برای ایجاد تغییرهای بزرگتر بوجود آورده است.
۲) PHP برای سناریوهای غیر از وب
پس از افزوده شدن JIT به PHP، امکان استفاده از آن در سناریوهایی که حتی امروزه درنظر گرفته نمیشوند، فراهم میشود. در سناریوهای غیر از وب یا سناریو CPU-intensive یا به خصوص در مواردی که عملکرد بسیار ضروری باشد.
۳) پیادهسازی ایمنتر، نوآوریهای سریعتر
به دلیل پشتیبانی از JIT، تیم توسعه میتوانند توابع داخلی را به زبان PHP، بهجای زبان C بدون از دست رفتن عملکرد، ایجاد کنند. PHP با استفاده از مزیتهای JIT، میتواند با مشکلهای کمتری در overflow، مدیریت حافظه و سایر موارد مشابهی که در زبان C اتفاق میافتد، روبرو شود.
برنامههای PHP، چگونه کامپایل میشوند؟
برای این کار یک ماشین مجازی بهنام Zend VM وجود دارد. اسکریپتهای قابل خواندن توسط انسان را به دستورهایی که آن را OpCodes میشناسند، تبدیل میشود که این کدها برای ماشین مجازی قابل درک است.
دستورهای کامپایل شده یا همان OpCodeها، در مقایسه با کدهای اصلی PHP برای ترجمه شدن به کدهای ماشین، سریعتر هستند زیرا این دستورهای سطح پایین (low-level) به شمار میآیند. این مرحله در زمان کاپایل، execution stage خوانده میشود. اجرای این دستورهای کامپایل شده که گفتیم OpCodes نام دارند، توسط Zend Vm در runtime stage انجام میپذیرد.
تاریخ انتشار PHP 8.0
با توجه به روند بهروزرسانیهای قبلی PHP، چند سال زمان میبرد تا تیم توسعه PHP یک نسخه جدید را ارائه دهند. آخرین نسخه Major زبان PHP درDecember سال ۲۰۱۵ ارائه شده است اگرچه هر سال چند آپدیت جزئی (minor) مانند 7.0، 7.1، 7.2 ارائه میشود میتوانیم بگوییم که بهروزرسانی Major بعدی همان PHP 8.0 خواهد بود.
اگر درمورد نسخههای minor و Major چیزی نمیدانید، مقاله: نسخهگذاری معنادار (Semantic Versioning) چیست و چرا باید از آن استفاده کنیم؟ به شما کمک میکند.
PHP نسخه 8 در تاریخ 26 November سال 2020 یا به تاریخ شمسی خودمان، ششم آذرماه سال 1399 انتشار پیدا میکند.
نتیجهگیری
یکی از مهمترین مزیتهای PHP این است که هم در سیستمهای لینوکسی و هم در وبسرورهای ویندوزی اجرا میشود. احتمال دارد که این زبان مدت زمان زیادی در اکوسیستم ساخت وب بماند. این زبان در فهرست TIOBE در رتبه هشتم قرار گرفته است و این نشانگر علاقه توسعهدهندگان به این زبان است.
براساس گزارشهای ماهانه Netcraft، حضور این زبان بیشتر در میان وب سرورهای Nginx (29 درصد)، Microsoft (19 درصد) و Apache (29 درصد) بوده است.
منبع: https://www.covetus.com/blog/php-80-the-upcoming-version-of-php-and-the-inclusion-of-jit