منبع اصلی نوشتار زیر در این لینک قرار دارد

HipHop

– این فقط یه معرفی ساده یه پروژه است نه راهنمای کاملش.
یکی از معروفترین سایتهای فعلی، فیسبوکه و شکی در این نیست (نمیدونم با وجود گوگل پلاس وضع همینطوری میمونه یا نه؟). ولی این سایت همینجوری که تبدیل نشده به اینی که الان هست! یک تیم برنامه نویسی قدرتمند هم پشت این پروژه هست و چیزی که امروز میخوام معرفی کنم، دلیلی بر این مدعاست.

پروژه HipHop for PHP پروژه ای است که بر اساس نیازهای آنها -فیس بوکی ها- ساخته شده. پروژه ای که یه کار – به ظاهر – ساده انجام میده. خیلی ساده، کدهای PHP رو تبدیل میکنه به C++ و بعد اون رو کامپایل میکنه، در نهایت کل پروژه تبدیل میشه به یه فایل اجرایی تکی، که خودش یک وب سرور کامل هم هست.
اینجوری، سرعت اجرای کد به طرز کاملا محسوسی بالاتر میره و فشار اجرای مفسری PHP به شدت کم میشه . البته هنوز فایلهای استاتیک به صورت مجزا از این فایل وجود دارند ولی دیگه PHP وجود نداره، کد باینری واقعی هست. یه چیزی مثل vala که تبدیل میشه به C . مثل پروژه هایی که حتما دیدید و فایل PHP رو توی یک فایل اجرایی میچپونن هم نیست -مثلا این پروژه-.
این پروژه یه بازنویسی از کل کد PHP هستش نه یه پروژه مشتق شده از PHP. یه سری توابع از دست میرن (مثلا تابع eval) ولی در نهایت توابعی هم که از دست میرن جایگزین مناسبی دارن :) مثلا همین eval یه جورایی از دید من یه تابع خیلی خطرناک محسوب میشه و استفاده ازش احتیاط خیلی زیادی رو میطلبه!
این برنامه در کل ممکنه برای ما هم خیلی کاربردی نباشه چون به درد همه جا نمیخوره. کلا بعید میدونم به همین راحتی رو ویندوز کامپایل بشه! ولی گاهی وقتها میتونه کارتون رو راه بندازه،مثلا ما الان نیاز به یه وب سرویس داریم تو یه پروژه که روی سرورهای داخلی یه شرکت قراره نصب بشه و فقط یک ارتباط ساده رو با دیتابیس برقرار کنه و از طرفی نصب آپاچی و PHP هم یه جورایی از طرف مدیر شبکه منع شده -یه جور سرور radius هستش و میخوان سبک بمونه – خوب بهتر از HipHop چی میتونه به ما کمک کنه؟

حالا میرسیم به چگونگی استفاده از این به اصطلاح HipHop!

نصب !
برای آرچ لینوکس توی AUR هستش. و نصبش هم نیاز به خیلی چیزها داره که شاید بد نباشه از اینجا بخونیدش : Building and installing – GitHub
به هر حال سورسش اینجاست :

git clone git://github.com/facebook/hiphop-php.git

نمیرم تو بحث نصب به صورت کامل، توصیه میکنم بگردید دنبال پکیج یا راهنمای مناسب برای دیستروی خودتون، چون دردسر داره و کلی هم طول میکشه. فقط اگه رفتید برای نصب از سورس چند تا نکته رو در نظر داشته باشید :
۱- یه چیزی که برای من عجیبه اینه که دولوپرهاش فراموش کردن فایلهای زاید رو پاک کنن. فایل CMakeCache.txt رو از توی پوشه اصلی پروژه پاک کنید که بودنش دردسر ساز میشه و اصلا اجازه کامپایل به شما نمیده مگه اینکه مستقیما توی opt کامپایل بشه که بازم نمیشه خیلی وقتا!
۲- بعد از اینکه رفتید برای cmake دوباره یه فایل CMakeCahce.txt براتون میسازه. کامپایل رو متوقف کنید، توی اون فایل رو بگردید و هر چی -O3 (منهای O او بزرگ بعدش بلافاصله یه ۳ ) هست رو عوض کنید با -O2 (همون فقط ۲ به جای ۳ ) یه مشکل عجیب وقت لینک کردن دامنگیر من و یه عده دیگه -البته نه همه- شده بود که با این روش حل شد.
۳- توی آرچ لینوکس libmemcached 0.50-1 با این کار نمیکنه (تا تاریخ نوشتن این پست) و مجبورید برگردید به نسخه قبلی، libmemcached-0.49-1 بدون مشکل کار میکنه.

طریقه استفاده
برای استفاده از این برنامه،‌ به لیست فایلهای PHP که قراره تبدیل بشن احتیاج دارید. یادتون باشه هر فایلی که توش PHP هست باید توی این لیست باشه.
برای اجرای هیپ هاپ باید برید توی پوشه خود پروژه و چند تا متغیر رو تنظیم بکنید برای استفاده در شل:

cd .. # into the root of the hphp checkout
export HPHP_HOME=<code>pwd</code>
export HPHP_LIB=<code>pwd</code>/bin
# if you followed the Ubuntu 9.10 instructions, you also need
export CMAKE_PREFIX_PATH=<code>/bin/pwd</code>/../

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

#!/bin/sh
export CMAKE_PREFIX_PATH=/path/to/hiphop/top/folder #Parent folder of hip hop not root folder
export HPHP_HOME=$CMAKE_PREFIX_PATH/hiphop-php
export HPHP_LIB=$HPHP_HOME/bin
$HPHP_HOME/src/hphp/hphp $*

-این اسکریپت توی پکیج AUR آرچ لینوکس هستش و من از اونجا کپیش کردم :) -
من یه کد خیلی ساده PHP نوشتم در این حد ساده :

<?php
echo "Hello world!";

و با این دستور تبدیلش کردم :

/opt/hiphop/hphp.sh test.php --keep-tempdir=1 --log=3

یه فایل اجرایی بهم تحویل داد به نام program تو یه پوشه داخل tmp به حجم ۲۶ مگا بایت! که با strip کردن شد ۲۱.۳ مگابایت :) و بدون نیاز به هیچگونه فایل اضافی و کاملا مستقل، که هم توی ترمینال درست عمل میکرد (فراخوانی مستقیم بدون هیچگونه سوییچ اضافه) و هم به صورت سرور :

/tmp/hphp_p6vSsP/program -m server -p 8080

- نکته نسبتا انحرافی! اینه که روت وب سرور شما میشه جایی که شما هیپ هاپ رو اجرا میکنید. مثلا من اول به جای test.php زدم ~/test.php و بعد برای حالت سرور باید کل مسیر فایل رو هم تو بروزر میزدم.
یه سوییچ -f هم داره که انتظار میره فایل PHP بهش بدی و مستقیم بدون کامپایل – مثل خود PHP – اجراش کنه که هر کاری کردم خطا گرفتم، و در کل خود PHP که هست چه مرضیه آخه!
برای اجرای یه پروژه کامل اول یه لیستی از فایلهای PHP اون پروژه ایجاد کنید :

cd /project/root
find . -name "*.php" > files.list

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

$HPHP_HOME/src/hphp/hphp --input-list=files.list -k 1 --log=3 \
  --force=1 --cluster-count=50

برای کامپایل، البته انتخابهای بیشتری هست خیلی بیشتر. بعد اگه همه چی خوب پیش بره پروژه شما توی tmp ساخته میشه و شما میتونید اونو اجرا کنید :

cd /project/root/
sudo /full/path/to/program -m server -v &quot;Server.SourceRoot=<code>pwd</code>&quot; \
  -v &quot;Server.DefaultDocument=index.php&quot; -c $HPHP_HOME/bin/mime.hdf

این دستور باید از توی جایی اجرا بشه که فایلهای استاتیک مثل عکس و CSS و … قرار دارن.
البته انتخابهای بشتری هم هست، ولی اینجا جای توضیحشون نیست،‌در حقیقت این پروژه در حال پیشرفته و ممکنه همه اینها تغییر کنه، بنابراین ویکی خود پروژه انتخاب مناسبتریه برای راهنما :)

من با هیپ هاپ یه چند تایی برنامه رو به صورت کامل کامپایل کردم بدک نبود، ولی برای من فقط تنها استفاده ای که میتونه داشته باشه همون پروژه ای هستش که بالاتر گفتم ولی این چیزی از ارزش این پروژه کم نمیکنه. به هر حال من اصلا از فیسبوک خوشم نمیاد،‌ولی بابت این پروژه ازشون ممنونم!!



برچسب ها : , , , , , ,