تريد أن تعرف كل شيء. هاك اللغة

أمضى مهندسو فيسبوك، بريان أوسوليفان، وجيليان فيرلاج، وألوك مينغرازاني عدة سنوات في تطوير لغة برمجة لا تشبه أي لغة أخرى.

وبمساعدة متخصصين آخرين في الشبكات الاجتماعية، تمكنوا من تطوير أداة جديدة لـ الخلق السريعالمواقع المعقدة والبرامج الأخرى، مع الحفاظ على تنظيم واضح للموقع كود البرنامج- لا يمكن للعديد من لغات البرمجة أن تتباهى بهذا. وكانت اللغة الناتجة تسمى Hack، والآن تعمل جميع مواقع فيسبوك تقريبًا عليها، وتخدم أكثر من 1.2 مليار شخص حول العالم.

يقول أوسوليفان، وهو خبير مخضرم في الصناعة عمل في شركات شهيرة مثل Sun Microsystems وLined Lab: "يمكننا أن نقول بثقة تامة أن Hack قد مر بأكثر الاختبارات صرامة التي يمكن تخيلها". لفترة طويلةلعب دورًا مهمًا في تطوير لغة البرمجة هاسكل.

تم إطلاق Hack للعامة هذا الأسبوع وأصبح مجانيًا على الفور حتى لا يتمكن أي شخص في العالم من استخدامه فحسب، بل يساعد أيضًا في تحسين الأداة.

هناك مجموعة كاملة من لغات البرمجة في العالم، وتظهر لغات جديدة باستمرار - وهذا لن يفاجئ أحدا، وعادة ما تسبب مثل هذه الإصدارات القليل من الحماس. ولكن في حالة Hack، فإن الوضع مختلف إلى حد ما، ويتحدث الخبراء بشكل إيجابي عن هذا المشروع. على سبيل المثال، يقول خبير البرمجة ديفيد بولاك هذا عنه:

إذا كان من صنع بريان أوسوليفان، لكي أتمكن من استخدام هذه اللغة، كنت سأمشي على الجمر الساخن.

يبدأ

عندما بدأ مارك زوكربيرج العمل على فيسبوك في أواخر عام 2003 - وهو الوقت الذي تم تصويره بشكل مشهور في فيلم The Social Network - كان يستخدم لغة PHP، التي كانت، ولا تزال، أداة شائعة لتطوير تطبيقات الويب لإنشاء منتجات البرامج وإعادة بنائها بسرعة.

  • ميلر هاك VM (بيثون)
    • ميلر هاك VM (بيثون)
  • لغة برمجة

    Hack VM هي لغة برمجة مصغرة (على الرغم من أن المؤلف يسميها "آلة افتراضية للمتسللين"، إلا أنها تستحق أن تسمى لغة).

    الغرض الرئيسي والوحيد لهذه اللغة هو استخدامها لحل مهام hacker.org، مما يجعلها واحدة من لغات البرمجة الباطنية القليلة المشهورة.

    برنامج Hack VM عبارة عن سلسلة من الأوامر المكونة من حرف واحد. يبدأ الجهاز الظاهري بالأمر الأول، ثم ينفذه، ثم ينتقل إلى الأمر التالي، وهكذا. يسمى فهرس التعليمات الحالية عداد البرنامج. يتوقف التنفيذ إما عند الوصول إلى نهاية البرنامج، أو بناء على أمر! أو بعد حدوث خطأ ما. عداد البرنامج هو مؤشر للتعليمات الحالية.

    Hack VM - لغة المكدس؛ يتكون الجهاز الظاهري من مكدس المعاملات، ومخزن مؤقت للذاكرة، ومكدس الاستدعاءات. كل عنصر من عناصر مكدس المعامل عبارة عن عدد صحيح بعلامة 32 بت. يتم استخدام مكدس الاستدعاءات لتذكر قيمة عداد البرنامج عند الانتقال إلى روتين فرعي يمكن العودة منه. يحتوي المخزن المؤقت للذاكرة على 16384 خلية، تبدأ أرقامها بالرقم 0. افتراضيًا، يبدأ تنفيذ البرنامج بمكدس استدعاءات فارغ، ومكدس معاملات فارغ، وذاكرة مملوءة بالأصفار. يمكن ملء المخزن المؤقت للذاكرة بالقيم تعريف المستخدمواستخدامها لمحاكاة الإدخال اليدوي.

    قائمة أوامر اللغة (S يعني العنصر n من أعلى المكدس؛ لذلك، S0 هو العنصر العلوي).

    • " " : عدم القيام بأي شيء (يستخدم لتحسين إمكانية القراءة)
    • "p": اطبع S0 كعدد صحيح
    • "P" : طباعة S0 كحرف ASCII (يتم استخدام 7 بتات منخفضة فقط)
    • "0".."9" : أضف القيمة 0..9 إلى المكدس
    • "+"، "-"، "*"، "/" : إضافة S1+S0، S1-S0، S1*S0، S1/S0 إلى المكدس، على التوالي
    • ": ": أضف -1 إلى المكدس إذا كان S1 س0
    • "g" : أضف S0 إلى عداد البرنامج
    • "؟" : أضف S0 إلى عداد البرنامج إذا كان S1 = 0
    • "c" : أضف عداد برنامج إلى مكدس الاستدعاءات واضبطه على S0
    • "$" : اضبط عداد البرنامج على العنصر العلوي في مكدس الاستدعاءات
    • "<" : Добавить в стек значение из ячейки памяти номер S0
    • ">" : اكتب S1 إلى رقم خلية الذاكرة S0
    • "^" : أضف نسخة من S إلى المكدس (على سبيل المثال: 0^ نسخ S0)
    • "v" : قم بإزالة S من المكدس وأضف هذه القيمة إلى المكدس (على سبيل المثال: مبادلة 1v S0 وS1)
    • "d": إزالة S0 من المكدس
    • "!" : إيقاف تنفيذ البرنامج

    تجدر الإشارة إلى أن معظم الأوامر تزيل وسيطاتها من المكدس أثناء التنفيذ.

    عناصر بناء الجملة:

    حساسية القضية نعم
    مقارنة :

    أمثلة:

    مرحبا بالعالم!:

    مثال لإصدارات Miller's Hack VM (JavaScript)، وMiller's Hack VM (Python)

    يعمل البرنامج بطريقة واضحة إلى حد ما - يتم حساب رموز ASCII لأحرف الرسالة وإخراجها واحدًا تلو الآخر. يجب أن يتم حسابها لأنه يمكن فقط دفع الأرقام من 0 إلى 9 إلى المكدس مرة واحدة، أعداد كبيرةعليك أن تجمع بين الأصغر. الحيلة الوحيدة غير التافهة هي التعامل مع الحرف l - عندما يتم تقييم رمز ASCII الخاص به، تتم مضاعفته ثلاث مرات على المكدس باستخدام الأمر 0^ وطباعته مرتين على الفور ومرة ​​لاحقًا.

    89* ف 45* 99*+ ف 39* 99*+ 0^0^PP 56* 99*+ ف 29+ 4* ف 48* ف 92+ 8* 1- ف 56* 99*+ 0^ ف 3+ ف ف 25* 0^* ف 56* 3+ ص

    أرقام فيبوناتشي:

    مثال لإصدارات Miller's Hack VM (JavaScript)، وMiller's Hack VM (Python)

    يستخدم هذا المثال التكرار ويعمل بنفس الطريقة كما هو الحال في اللغات الباطنية الأخرى: يخزن موقع الذاكرة 0 العدد المتبقي من الأرقام المطلوب حسابها، وتخزن الخليتان 1 و2 رموز ASCII للفاصلة والمسافة، وتخزن الخليتان 3 و4 آخر رقمين فيبوناتشي محسوب. في الحلقة يتم استرجاع قيم الخلايا 3 و 4 وجمعها وطباعة القيمة الجديدة وتحديث خلايا الذاكرة. بعد ذلك يتم تقليل عدد الأرقام المتبقية بمقدار 1، وإذا أصبح 0 فإن عداد البرنامج (المعادل لمؤشر التعليمات في Brainfuck) يتحرك للأمام 6 أحرف ويخرج من الحلقة، وإلا فإنه يعود إلى بداية الحلقة. حلقة. وأخيرا، يتم عرض ثلاث نقاط.

    27* 0> 92+ 4* 1> 84* 2> 10^p3 > 1< P 2< P 10^p4 > 1< P 2< P 3< 4< + 0^p 4< 3> 4> 0< 1- 0> 0< 6? 67* c 58* 6+ 0^0^PPP

    كلما زاد الجمهور شبكة اجتماعيةالفيسبوك وخدماته، بدأت الشركة في حاجة ماسة إلى لغة أكثر إنتاجية من PHP. لم تقدم البدائل الحالية أي فائدة، لذلك قرر مطورو الشركة الجلوس لتطوير لهجة جديدة. وكانت نتيجة العمل Hack، والتي تم نشرها في عام 2014.

    معلومات مختصرة

    لغة الاختراق مكتوبة بلغة OCaml وتعمل على الجهاز الظاهري HHVM (HipHop Virtual Machine)، والذي تم تطويره "بالصدفة" أيضًا بواسطة Facebook. وبمساعدتها، تتم ترجمتها مباشرة إلى كود الآلة، بينما تتم ترجمة PHP أولاً إلى كود ثانوي. إن إلغاء عملية واحدة له تأثير كبير على الأداء، وهو ما كان أحد الأسباب الرئيسية لإنشائها.

    السبب الثاني هو السلامة. عندما يعمل العشرات أو المئات أو حتى الآلاف من المطورين على التعليمات البرمجية في نفس الوقت، فإن استخدام لغة مكتوبة ديناميكيًا ليس فكرة جيدة. القرار الأفضل- أنت تخاطر بفقدان أخطاء "الطبقات". لذلك، يوفر Hack أيضًا الكتابة الديناميكية، وثابتة. يتم تنفيذ ذلك باستخدام وحدة تحكم خاصة من نوع مدقق الكتابة، وبطريقة يمكن أن يكون كلا الخيارين موجودين في ملف تعليمات برمجية واحد. لذا، لديك دائمًا الاختيار بين الراحة والأداء والأمان.

    هاك هضم التعليمات البرمجية المكتوبة بلغة PHP. هذه خطوة طبيعية إذا تخيلت عدد المصادر التي يجب إعادة كتابتها دون وراثة. الاستثناء الوحيد هو الوظائف التي لا يمكنها العمل مع الكتابة الثابتة (المتغيرات المتغيرة، والخصائص الديناميكية، وما إلى ذلك). يمكن تقييم الملاءمة من خلال مثال Facebook نفسه - فقد استغرق العمل على إدخال اللغة الجديدة عامًا واحدًا فقط.

    علاوة على ذلك، فإن Hack مفتوح المصدر. تأكد من التوجه إلى Github والتعرف على بطل اليوم.

    بناء الجملة

    لقد خضع بناء جملة Hack لتحسينات تجميلية فقط مقارنة بـ PHP. فاذهب الى لغة جديدةحتى المبتدئين يمكنهم القيام بذلك. كود إنشاء الملف الأول على Hack:

    Namespace Hack\UserDocumentation\Quickstart\Examples\First;

    صندوق الصف {
    الوظيفة العامة __construct(خاص T $elem) (
    }

    الحصول على الوظيفة العامة (): T (
    إرجاع $this->elem;
    }
    }

    الدالة get_int(): int (
    العودة 42؛
    }

    الدالة use_box(): باطلة (
    $box = new Box(get_int());
    $i = $box->get();
    var_dump($i);
    }

    كما ترون، لا يتم استخدام أي شيء جديد أو غير عادي بشكل أساسي هنا. ولكن هناك شيء واحد ملاحظة مهمة: بينما يمتزج كود PHP مع HTML، فإن Hack يحب أن يكون بمفرده.

    تعليم

    إذا كنت تواجه مهمة زيادة الإنتاجية والأمان، أو كنت مهتمًا ببساطة بلغة الاختراق، فنوصيك بالرجوع إلى الموارد التالية:

    http://hacklang.org - كما هو الحال دائمًا، يجب أن تبدأ الغوص بزيارة الموقع الرسمي. ستجد هنا المنشورات والتمارين والمصادر والأشياء الأكثر إثارة للاهتمام والضرورية للتعلم.

    Hack and HHVM هو كتاب من دار النشر الشهيرة O’Reilly، يغطي جميع المواضيع بدءًا من العمل مع الأنواع وحتى المجموعات، البرمجة غير المتزامنةوتصحيح الأخطاء.

    هذا كل شيء في الأساس. على الرغم من الحجم اسم الفيسبوكوالمزايا التي لا شك فيها لـ Hack، لا توجد عمليًا كتب أو مواقع ويب منفصلة حول اللغة.

    الآفاق

    هل يشير العدد القليل من الموارد إلى انخفاض شعبية اللغة؟ إذا كنت تعتمد على تصنيف TIOBE - لا. حتى لو أخذنا نطاق المراقبة العام الماضي- زادت Hack من أدائها بما لا يقل عن 2.5 مرة، واليوم هي اللغة رقم 43 الأكثر شعبية.

    مطورو PHP، بناءً على المنتديات، متفقون أيضًا على Hack. وهم يعتقدون أن الكتابة المتزايدة تحل العديد من المشاكل، ولكنها ليست ضرورية. أي أن المطور العادي لا يرى أي فائدة في التخلي عن PHP حتى القيود التي تم إنشاؤهاليست حرجة للمستخدمين.

    وبالتالي فإن الطلب على Hack سيزداد مع مرور الوقت. يتم تسهيل ذلك من خلال بناء الجملة المألوف وانفتاح الكود. ومع ذلك، فمن غير المرجح أن تحل محل PHP أو تزيحها من مكانتها الرائدة. ببساطة لأنه بالنسبة لمعظم المطورين المتخصصين، فإن كلمة "أسهل" هي مرادف لكلمة "أفضل".

    هاك
    دلالات:
    درس لغة:

    خطأ Lua في الوحدة: ويكي بيانات في السطر 170: محاولة فهرسة حقل "قاعدة الويكي" (قيمة صفر).

    نوع التنفيذ:
    ظهرت في:

    بريان أوسوليفان، جوليان فيرلاج وألوك ميندراجاني

    امتداد الملف:

    خطأ Lua في الوحدة: ويكي بيانات في السطر 170: محاولة فهرسة حقل "قاعدة الويكي" (قيمة صفر).

    يطلق :

    خطأ Lua في الوحدة: ويكي بيانات في السطر 170: محاولة فهرسة حقل "قاعدة الويكي" (قيمة صفر).

    نسخة تجريبية:

    خطأ Lua في الوحدة: ويكي بيانات في السطر 170: محاولة فهرسة حقل "قاعدة الويكي" (قيمة صفر).

    نوع النظام:
    التطبيقات الرئيسية:

    خطأ Lua في الوحدة: ويكي بيانات في السطر 170: محاولة فهرسة حقل "قاعدة الويكي" (قيمة صفر).

    اللهجات:

    خطأ Lua في الوحدة: ويكي بيانات في السطر 170: محاولة فهرسة حقل "قاعدة الويكي" (قيمة صفر).

    تأثر ب:
    تأثر:

    خطأ Lua في الوحدة: ويكي بيانات في السطر 170: محاولة فهرسة حقل "قاعدة الويكي" (قيمة صفر).

    رخصة:

    خطأ Lua في الوحدة: ويكي بيانات في السطر 170: محاولة فهرسة حقل "قاعدة الويكي" (قيمة صفر).

    موقع إلكتروني:
    منصة:

    خطأ Lua في الوحدة: ويكي بيانات في السطر 170: محاولة فهرسة حقل "قاعدة الويكي" (قيمة صفر).

    نظام التشغيل:

    خطأ Lua في الوحدة: ويكي بيانات في السطر 170: محاولة فهرسة حقل "قاعدة الويكي" (قيمة صفر).

    كان الغرض من إنشاء اللغة هو الجمع بين دورة سريعة تطوير PHPمع الموثوقية والأداء الذي توفره الكتابة الثابتة.

    في وقت الإصدار، كان المشروع مدعومًا من قبل المبدعين - بريان أوسوليفان، وجوليان فيرلاج، وألوك ميندراجاني.

    في وقت الإصدار، تم تجميع Hack وHHVM لـ Ubuntu 12.04 LTS أو Ubuntu 13.10 أو Debian 7.

    اكتب مراجعة عن مقالة "الاختراق (لغة البرمجة)"

    روابط

    • .

    ملحوظات

    مقتطف من وصف الهاك (لغة برمجة)

    كانت "المخلوقات الرائعة" مرتبكة بعض الشيء، ولم تكن تعرف بالضبط كيف ترد على مثل هذه التحية...
    قالت ستيلا مبتسمة: "نحن نسير فقط". - لن نزعجك.
    -على من تبحث؟ - سأل أثينايس.
    "لا أحد"، تفاجأت الفتاة الصغيرة. - لماذا تعتقد أننا يجب أن نبحث عن شخص ما؟
    - و إلا كيف؟ أنت الآن حيث يبحث الجميع عن أنفسهم. كنت أبحث أيضًا..." ابتسمت بحزن. - ولكن ذلك كان منذ وقت طويل!..
    - منذ متى؟ - لم أستطع تحمل ذلك.
    - اه من زمان جداً!... مفيش وقت هنا، كيف أعرف؟ كل ما أتذكره هو أنه كان منذ وقت طويل.
    كانت أثينايس جميلة جدًا وحزينة إلى حد ما على نحو غير عادي... كانت تذكرنا إلى حد ما بجعة بيضاء فخورة عندما سقط من ارتفاع، وأسلم روحه، وغنى أغنيته الأخيرة - كانت مهيبة ومأساوية أيضًا...
    عندما نظرت إلينا بتألقها عيون خضراءيبدو أنها كانت أكبر من الخلود نفسه. كان فيها الكثير من الحكمة، والكثير من الحزن غير المعلن مما جعلني أشعر بالقشعريرة...
    - هل هناك أي شيء يمكننا مساعدتك به؟ - سألتها: أشعر بالحرج قليلاً لطرح مثل هذه الأسئلة.
    - لا يا صغيرتي، هذا عملي... قسمي... لكني أؤمن أنه في يوم من الأيام سينتهي... ويمكنني الرحيل. والآن أخبروني أيها السعداء، إلى أين تريدون الذهاب؟
    هززت كتفي:
    - نحن لم نختر، بل مشينا فقط. لكننا سنكون سعداء إذا كنت تريد أن تقدم لنا شيئًا ما.
    أومأت أثينايس برأسها:
    أضافت: "أنا أحرس هذا العالم الداخلي، ويمكنني أن أسمح لك بالمرور من هناك". ونظرت إلى ستيلا بمودة. - وأنت أيها الطفل، سأساعدك في العثور على نفسك...
    ابتسمت المرأة بهدوء ولوحت بيدها. رفرف فستانها الغريب، وبدأت يدها تشبه جناحًا ناعمًا أبيض فضيًا... امتد منه، متناثرًا بانعكاسات ذهبية، وأخرى، معتمة بالذهب وطريق مشمس كثيف تقريبًا، يؤدي مباشرة إلى واحد "ملتهب" من بعيد، باب ذهبي مفتوح...
    - حسنا هل نذهب؟ - سألت ستيلا، وأنا أعرف الإجابة مسبقًا.
    "أوه، انظر، هناك شخص ما هناك..." أشارت الفتاة الصغيرة بإصبعها داخل نفس الباب.
    انزلقنا بسهولة إلى الداخل و... كما لو كنا في مرآة، رأينا ستيلا ثانية!.. نعم، نعم، بالضبط ستيلا!.. بالضبط نفس تلك التي كانت تقف بجواري في تلك اللحظة، وهي في حيرة تامة. ...

    النسخة الأصلية: قم بتثبيت Hacklang وإنشاء تطبيق Hack
    المؤلف: روب زويتسلوت
    تاريخ النشر: 5 يوليو 2014
    ترجمة: ن. رومادانوف
    تاريخ الترجمة: يوليو 2014

    مقدمة المترجم:

    هاك اللغة- لغة برمجة تشبه لغة PHP هدف عاممكتوب بشكل ثابت، تم تطويره بواسطة عن طريق الفيس بوكوعرض في 21 مارس 2014. يتم تنفيذ التعليمات البرمجية المكتوبة بلغة Hack على الجهاز الظاهري HHVM (HipHop Virtual Machine)، الذي تم إنشاؤه على أساس مترجم HipHop، والذي يدعم في نفس الوقت كلاً من Hack وPHP.

    مفتوح برمجة- أكواد المصدر للمشروع مفتوحة لأفراد المجتمع.

    دعونا نتعلم كيفية تثبيت حزمة Hacklang وتكوينها خادم أباتشيحتى يتمكن من التفاعل مع مثيل تطبيق Hack، ومن ثم سنقوم ببناء تطبيق Hack.

    منذ بعض الوقت، قدم الفيسبوك لغة برمجة جديدة للعالم. تسمى هذه اللغة Hack وهذا بالضبط ما سننظر إليه اليوم. Hack فريد من نوعه لأنه، على عكس العديد من اللغات الجديدة، كان إصداره الأول هو v1. على مدار العامين الماضيين، كان فيسبوك يعمل على كتابة لغة الاختراق ونقل نسخة سطح المكتب من خدمته إليها، مما يعني أنه قد ثبت بالفعل أن لغة الاختراق ستكون النظام القادر تمامًا على دعم الاختراق. تشغيل مواقع ضخمة - حاليا لا يوجد شيء أكثر من خدمة الفيسبوك.

    تم إنشاء الفيسبوك في الأصل باستخدام باستخدام PHPوMySQL، ولكن مع مرور الوقت، نمت الخدمة ولم تعد هذه التقنيات قادرة على معالجة البيانات وحركة المرور التي يحتاجها فيسبوك بشكل خارج الصندوق. بدلاً من نقل خدمتك إلى المزيد مستوى منخفضأو لغة أكثر تحسينًا، قرر Facebook استثمار الوقت والمال في إنشاء تقنيات تعتبر الأفضل على الفور. إحدى نتائج هذا الجهد هي لغة الاختراق، التي يقول فيسبوك إنها تضاعف سرعة تنفيذ إصدار سطح المكتب الخاص به دون التأثير سلبًا على وقت تطوير البرامج. تعد لغة Hack هي الخطوة التالية في مشروع HipHop الخاص بفيسبوك، والذي كان في الأصل أداة مفتوحة المصدر مصممة للتحويل لغة PHPإلى لغة C++. بدلاً من تنفيذ النص المترجم بلغة C++، يتم تجميع Hack إلى رمز بايت بواسطة مترجم JIT على HHVM (HipHop Virtual Machine). هذه المرة، سننظر في تثبيت الجهاز الظاهري HHVM وإنشاء واجهة قاعدة بيانات للمدونة. رسائل البريدوالتي تمت كتابتها باستخدام Hack وPHP5 وMySQL.

    لقد تم بالفعل اختبار لغة Hack كنظام يمكن تشغيل مواقع الويب الضخمة عليه

    يبدأ

    أول شيء يتعين علينا القيام به هو الحصول على آلة افتراضيةهمفم. ولحسن الحظ، يعد هذا أمرًا سهلاً للغاية إذا كنت تستخدم نظام الحزمة Apt. لنقم بإضافة مستودع لـ Hack ومن ثم ستقوم Apt بتثبيته.

    $ echo deb http://dl.hhvm.com/ubuntu بذيء رئيسي | Sudo Tee /etc/apt/sources.list.d/ hhvm.list $ sudo apt-get update $ sudo apt-get install hhvm

    بعد بضع دقائق، يجب تثبيت لغة Hack. دعونا التحقق من ذلك بسرعة. يخلق ملف جديداسمه test.php والصق النص التالي فيه

    الآن، دعونا نستخدم الأمر hhvm test.php لتشغيل هذا الكود في الوحدة الطرفية. في المحطة يجب أن ترى رقم الإصدار، على سبيل المثال يجب أن يظهر 3.x.x. إذا كان الأمر كذلك، فأنت جاهز لتكوين لغة Hack للعمل مع خادم Apache.

    قبل الإصدار 3، كانت حزمة Hack/HHVM تتضمن خادمًا خاصًا بها يمكن تشغيله كخدمة. تمت إزالة هذا من الإصدار 3 إلى حد كبير لأن الفريق العامل في Facebook شعر أن مهمتهم كانت تتمثل في كتابة اللغة بدلاً من الخادم. وبالتالي، يعمل Hack الآن جنبًا إلى جنب مع خادم Apache أو خادم Nginx، ليحل محل مترجم لغة PHP المعتاد. تتواصل لغة Hack مع هذه الخوادم من خلال وكيل FCGI، لذا فلنغير الآن ملفات التكوين الخاصة بنا حتى نتمكن من القيام بذلك. سيتم توجيه التعليمات التالية مباشرة إلى خادم Apache وليس إلى Nginx، على الرغم من أن إعداد الأخير هو نفسه إلى حد كبير.

    في نهاية تثبيتنا لمترجم Hack، سُئلنا عما يجب فعله بعد ذلك. كان أحد هذه الاقتراحات هو تشغيل الأمر التالي

    $ sudo /usr/share/hhvm/install_fastcgi.sh

    الآن قم بتشغيل هذا البرنامج النصي؛ سيقوم بتكوين خادم Hack ومترجمه لاستخدام FCGI، ولكن بالإضافة إلى ذلك، لا يزال يتعين عليه تمرير حركة المرور الخاصة بك من خادم Apache الخاص بك إلى مثيل Hack الخاص بنا. ابحث عن ملف httpd.conf أو ملف apache.conf - حيث يجب العثور عليه في مكان ما في الدليل /etc/Apache2 - وافتحه للتحرير. أضف السطر التالي إلى نهاية الملف:

    ProxyPass/fcgi://127.0.0.1:9000/var/www/hack

    احفظ التغييرات واخرج من المحرر. ونتيجة لذلك، سيتم إعادة توجيه كل حركة المرور التي يتلقاها خادمك إلى الدليل /var/www/hack. إذا كنت تريد فقط إعادة توجيه أنواع معينة من حركة المرور إلى مثيل Hack، فيمكنك استخدام regex لتعديل بيان ProxyPass، ولكن هذا وفقًا لتقديرك ولن نغطي أي شيء متعلق بذلك هنا. يفترض هذا أن لديك دليلاً في /var/www/hack، إذا لم يكن لديك، فيمكنك إما إنشاء دليل الآن أو تغيير السطر في ملف .conf الخاص بك لتحديد المكان الذي تريد أن يوجد فيه دليل مشروعك.

    لدينا كل شيء جاهز تقريبا. انسخ اختبار الملف. php الذي كتبناه منذ بعض الوقت في دليل المشروع الذي تم إنشاؤه حديثًا. إذا حاولت الوصول إلى الملف من خلال متصفح، سترى أنه لا يمكنك الحصول على رقم الإصدار كما هو مقصود. وذلك لأن HHVM VM لا يعمل بعد ومن أجل معالجة الملفات بلغة Hack/PHP، يتعين علينا تشغيل HHVM VM وإطعامه بتلك الملفات. عندما نقوم بتشغيل الجهاز الظاهري HHVM، فإنه يتولى دور معالجة PHP عند عرض الصفحات بوظائف معينة - ضع في اعتبارك أن لغة Hack ليست متوافقة تمامًا مع لغة PHP، ولكن التوافق يتحسن مع كل إصدار يتم إصداره. في وقت كتابة هذا التقرير، كان الجهاز الظاهري HHVM في مثل هذه الحالة حيث بدأ في دعم بعض الأطر الأكثر شعبية، على سبيل المثال، WordPress أو Magento، دون تكوين معقد خاص. لبدء خادم Hack، أدخل ما يلي في المحطة:

    Hhvm --mode server -vServer.Type=fastcgi -vServer.Port=9000

    الآن إذا قمت بكتابة http://YOUR_IP_ADDRESS/test.php، فيجب أن ترى رقم إصدار لغة Hack 3.x.x مرة أخرى. عظيم! نحن الآن على استعداد للبدء في إنشاء مدونتنا.

    العمل مع قاعدة البيانات

    بصرف النظر عن الاختلافات في تنفيذ التعليمات البرمجية، ربما يكون الاختلاف الأكبر بين Hack وPHP هو كيفية تفاعلهما مع لغة HTML - لا يتفاعل Hack مع HTML على الإطلاق. حتى إذا قمت بشحن PHP عادي باستخدام خادم Hack، فستكون محظوظًا إذا تم تنفيذ أي جزء من كود PHP في المستند قبل أن يتعطل، وإذا حاولت تحسين كود Hack الخاص بك بإدراج HTML، فمن المحتمل أن تتعطل سيتم مكافأتك برسالة خطأ. حيث تتألق لغة Hack في تحسين البيانات ومعالجتها، لذلك سنستخدم لغة Hack لتلقي رسائل JSON وتنظيمها ثم تشفيرها باستخدام قاعدة بيانات SQL.

    في دليل المشروع، قم بإنشاء ملف يسمى Connect.php وسنقوم بإنشاء اتصال بقاعدة البيانات عن طريق إدراج النص التالي فيه:

    ثم ارجع إلى ملف Index.php والصق الكود الموضح أدناه فيه:

    استعلام($query); while($row = mysqli_fetch_array($result)) ( echo $row["name"] . "
    "; }

    إذا قمت بتشغيل هذا الكود الآن، فلن يحدث شيء لأننا لم نقم بإنشاء قاعدة بيانات SQL بعد. تحتاج إلى تفريغ قاعدة بيانات SQL مع بعض المحتوى التجريبي، واستيرادها إلى قاعدة البيانات، ثم تشغيل ملف Index.php. يجب أن تشاهد الآن قائمة بجميع الأعمدة المسماة تظهر في متصفحك. كل هذا جيد وجيد، ولكنه مجرد PHP عادي (على الرغم من تحسينه قليلاً، وذلك بفضل الجهاز الظاهري HHVM). دعونا نحلل كل شيء وننشئ جزءًا صغيرًا من نص جيد بلغة Hack.

    قم بتحرير ملف Index.php مرة أخرى وقم بإزالة كل شيء بعد عبارة require_once، نظرًا لأننا لن نحتاج إلى كل شيء هنا. ثم ارجع إلى ملف Connect.php وقم بإزالة كل شيء بعد الأحرف

    قاعدة بيانات الفئة (منطقية خاصة $connected = False؛ كائن خاص $connection؛ وظيفة عامة Connect(string $addr, string $user, ?string $pw, ?string $db): ?int ( if($db == null)( return 0 ) $this->connection = mysqli_connect($addr, $user, $pw, $db) أو die("خطأ في قاعدة البيانات: " . mysqli_error($connection) )( $this->connected = True; return 1; ) else ( $this->connected = False; return 0; ) ) )

    دعونا نلقي نظرة على ما لدينا هنا. هذا هو إعلان فئة Hacklang، وله أعضاء ووظائف خاصة وعامة يمكننا الوصول إليها وتنفيذها إذا أردنا ذلك. دعونا أولاً نلقي نظرة على السطر الذي نعلن فيه عن وظيفة الاتصال () الخاصة بنا؛ هناك بعض الميزات هنا التي يتم استخدامها بشكل مختلف، لذلك سنقوم بالتطرق إليها. إذا كنت معتادًا على لغة C++، فسيبدو كل شيء طبيعيًا بالنسبة لك؛ إذا كنت من محبي PHP، فربما لا.

    أولاً، لاحظ المعلمات التي مررناها؛ لقد أعلنا عن أنواع البيانات التي نتوقع أن تكون كمعلمات (string/int/float/object/etc). إذا حاولنا الوصول إلى وظيفة تحتوي على أنواع بيانات خاطئة، فاعتمادًا على مستوى التحذير الذي قمت بتعيينه في لغة الاختراق، فسوف يتوقف ببساطة عن تنفيذ ملفنا أو يلقي خطأ. لماذا هذه الفرصة؟ جزء لغة Hack الذي يسمح لك بتنفيذ التعليمات البرمجية بسرعة كبيرة هو مترجمها. PHP هي لغة مكتوبة بشكل ضعيف، مما يعني أنه يمكننا إنشاء متغيرات بسرعة دون الحاجة إلى القلق كثيرًا بشأن ما سيتم تخزينه في المتغير. يمكن أن يحتوي المتغير $x أولاً على السلسلة "Hello, World" ثم القيمة 5. لا يزال Hack يسمح بهذه المرونة، ولكن إذا أعلنا عن نوع البيانات الذي نتوقعه، فيمكن للجهاز الظاهري HHVM البدء في تحسين هذا الرمز وتشغيله بشكل أسرع من المعتاد (أسرع بما يصل إلى ست مرات).

    يُسبق المتغيرين $pw و$db بعلامة "؟"، والتي تخبر لغة Hack أنه بينما نتوقع قيمة سلسلة/int/float/etc، فمن المحتمل أيضًا أن ينتهي بنا الأمر بقيمة فارغة. يمكننا استخدام هذا في أي مكان قد نرغب فيه أن نكون أقل صرامة فيما يتعلق بتمرير البيانات، وكما ترون، قمنا بتطبيقه في نهاية السطر على المتغير الخاص بنا: int. هذا هو نوع البيانات الذي نتوقع أن يُرجع عددًا صحيحًا أو خاليًا في هذه الحالة.

    آخر شيء جدير بالملاحظة هنا قبل أن نذهب أبعد من ذلك هو الدالة $this. إذا كنا نحاول الوصول إلى أعضاء الفصل، فيجب علينا تهيئتهم، ولكن إذا لم نقم بتعيين قيمة عندما أعلنا عن هذه المتغيرات، فسيقوم المتغير $this بذلك نيابةً عنا. إذا كتبنا $connection بدلاً من $this->connection، فيجب أن يكون المتغير موجودًا في النطاق الذي تم استدعاؤه فيه، وبالتالي فهو غير متاح للوظائف الأخرى التي قد تحتاج إلى الوصول إلى الكائن.

    أضف الوظيفة من الكود أدناه إلى فئة قاعدة البيانات الخاصة بنا في ملف Connect.php؛ ستستخدم هذه القطعة الصغيرة الرائعة من التعليمات البرمجية وظيفة الاتصال التي أنشأناها عندما قمنا بتهيئة الفصل لأول مرة للتعامل مع أي استعلامات SQL في قاعدة البيانات الخاصة بنا.

    الوظيفة العامة makeQuery(string $q): void( if($this->connected == True)( $result = $this->connection->query($q); return $result; ) )

    تقديم الطلب الأول

    لذلك دعونا نرى ما سيحدث الآن. ارجع إلى ملف Index.php الخاص بك وبعد عبارة require_once أضف الكود التالي:

    $db = قاعدة بيانات جديدة () ؛ $db->connect("127.0.0.1"، "USER"، "PASSWORD"، "اسم قاعدة البيانات"); //var_dump($db); $q = $db-> makeQuery("SELECT * FROM المشاركات"); $data = array(); while($row = mysqli_fetch_array($q)) ( $object = array("name" => $row["name"], "tag" => $row["tagline"], "content" => $row ["content"], "date" => $row["date"]); array_push($data, $object ) echo json_encode($data);

    إذا قمت باستدعاء ملف Index.php على الخادم الخاص بك، فيجب أن ترى مرة أخرى محتويات منشورات المنتدى في قاعدة البيانات الخاصة بنا. مرحا! لكنها مجرد ثابتة. دعونا نجري بعض التغييرات الصغيرة باستخدام بعض معلمات GET وPOST.

    التعامل مع طلبات GET وPOST

    كل ما هو موضح أعلاه غير متوافق مع بعض ميزات لغة PHP. تندرج طلبات $_GET و$_POST ضمن هذه الفئة. لا يعرف كود الاختراق أي شيء عن $_GET أو $_POST (على الرغم من أنه إذا كنت لا تقوم بتشغيل مترجم Hack في الوضع الصارم، فلا يزال بإمكانك استخدام هذه الميزة). سنفترض هنا أننا نعمل في الوضع الصارم وسنقدم طلبات GET وPOST حتى تتمكن لغة Hack من استخدامها.

    حان الوقت لإضافة ملف جديد آخر. مرة أخرى، في دليل المشروع الخاص بك، قم بإنشاء ملف جديد يسمى request.php ثم قم بلصق وحفظ الكود الموضح أدناه فيه:

    وظيفة fetchGET (): الخريطة ( إرجاع Map::fromArray($_GET); ) وظيفة fetchPOST(): الخريطة ( إرجاع Map::fromArray($_POST);) وظيفة postType(): سلسلة ( if($_SERVER["REQUEST_METHOD" "] === "GET")( إرجاع "GET"; ) آخر ( إرجاع "POST"; ) )

    تحدد هذه الوظائف المتغيرات العامة $_SERVER، و$_GET، و$_POST لرمز الاختراق الخاص بنا، لذلك إذا أردنا استدعاء وظيفة fetchGET()، فسنستخدم مخطط $_GET الجديد. الآن يمكننا أن ننتقل إلى معالجة الطلبات، على الرغم من وجود تحذير صغير واحد.

    التحقق من أنواع المعلمات

    في لغة Hack، من المستحسن معرفة نوع البيانات المستخدمة (هذه ميزة معروفة بالفعل)، لأنها تصل ببساطة إلى متغير GET، الأمر الذي لن يساعدنا كثيرًا. كل ما سنتمكن من الحصول عليه هو سلاسل تحليلية، وطالما أننا نواصل العمل مع السلاسل فقط، فإننا نفقد جميع المزايا المرتبطة بفحص نوع البيانات في الجهاز الظاهري HHVM. لذلك، دعونا نكتب محللًا سريعًا لمعالجة القيم الصحيحة. أضف الكود التالي إلى ملف request.php:

    فئة مجردة ServerRequest ( وظيفة عامة مجردة getParams(): Map; وظيفة عامة intParam(string $name): ?int ( $params = $this->getParams();if (!$params->contains($name)) ( return null;) $param = $params[$name]; if (!is_numeric($param)) (return null;) return (int)$param )) يمتد getRequest للفئة النهائية ServerRequest (وظيفة عامة getParams(): Map (return fetchGET();) ) وظيفة int_check_for_parameter(string $parameter): int (if (postType() == "GET") (return (new getRequest())->intParam($parameter);))

    ثم ارجع إلى ملف Index.php وقم بتغييره ليبدو كما يلي:

    $db->connect("127.0.0.1"، "اسم المستخدم"، "كلمة المرور"، "اسم قاعدة البيانات"); $limit = int_check_for_parameter("الحد"); $س؛ if($limit > 0)($q = $db->makeQuery("SELECT * FROM messages LIMIT " . $limit);) else ($q = $db->makeQuery("SELECT * FROM messages");) Worxwhile($row = mysqli_fetch_array($q)) (echo $row["name"] . "";)

    دعونا نلقي نظرة على فئة ServerRequest، فهي تختلف عن فئة Database التي كتبناها في ملف Connections.php حيث أعلناها على أنها مجردة. وهذه إحدى الميزات المضافة إلى لغة PHP5؛ الفئة المجردة هي فئة لا يمكن إنشاؤها، ويمكن استخدامها فقط كنوع من القالب للفئات الأخرى التي تعمل على توسيعها. إنه يتناسب بشكل جيد مع فئة GetRequest الخاصة بنا. لاحظ أن التعريف يسبقه الكلمة الأساسية Final. الفئة النهائية هي فئة توسع فئة مجردة، ولكن لا يمكن توسيعها في حد ذاتها؛ إذا حاولنا القيام بذلك، فإن لغة الاختراق ستلقي خطأً فادحًا.

    الآن، إذا أضفت ?limit=5 إلى نهاية سطر الاستعلام الخاص بك، فيجب أن ترى النتائج الخمس الأولى فقط - وهذا في حد ذاته ليس شيئًا مميزًا، ولكن ما نراه هنا هو استدعاء intParam() وظيفة. أولاً، نحتاج إلى معرفة ما إذا كان طلب GET الخاص بنا يحتوي على المعلمة التي نبحث عنها. بمجرد أن نحدد وجوده، نحتاج بعد ذلك إلى التحقق مما إذا كان رقمًا، وإذا نجح في اختبارنا، نقوم بتحويله إلى عدد صحيح. إذا لم يكن الأمر كذلك، فيجب إرجاع القيمة null. في حالة التعامل مع معلمة GET، قد يبدو هذا متحذلقًا للغاية، ولكن بخلاف ذلك سنحتاج إلى نسيان قوة مترجم Hack JIT.

    عند حدوث الاستدعاء الأول، قد لا يفعل HHVM/Hack VM الكثير لتحسين السرعة على الفور، ولكن مع مرور الوقت وزيادة التحميل، سيقوم HHVM VM بتحسين العمليات التي يتم استدعاؤها في أغلب الأحيان وكذلك تخزين الرمز الثانوي مؤقتًا، والذي سينشئه . هذا مجرد جزء من جمال لغة Hack: فهي أكثر تنوعًا من لغة PHP، والتي، دعونا نواجه الأمر، لا تتمتع بسمعة كونها لغة موجزة، ولكن مع بذل جهد إضافي، يمكننا الضغط على كل أوقية من قوة خارج لغة PHP التي هي قادرة عليها.

    لخص

    وهذه مجرد أساسيات لغة الهاك. قد يبدو إعداد لغة Hack أمرًا صعبًا بعض الشيء، وإذا كنت من النوع الذي يحب المطورين التعلم من أمثلة التعليمات البرمجية، فهذه مشكلة في الوقت الحالي - ولكن لا تدع ذلك يوقفك! لغة الهاك لا تزال في مهدها؛ كان يبلغ من العمر عامًا واحدًا فقط، وقد أصبح تقدمه في السرعة مذهلاً بالفعل. صحيح أن هناك عيوبًا في تعزيز الأداء هذا، ولكن من المهم أن تتذكر أن Hack ليس مصممًا لتقديم HTML (على الرغم من أنه يمكنه إنشاء تعليمات برمجية بتنسيق HTML أو بنيات أخرى تشبه العقدة باستخدام محرك عرض XHP الخاص بـ eHack). وبدلاً من ذلك، فهو مصمم لمعالجة البيانات بسرعة فائقة بحيث يمكن تشغيل بقية خدمات الويب الخاصة بك بأسرع ما يمكن. وهذا يجعل Hack خيارًا جيدًا عندما يتعلق الأمر بتحسين الأداء أو حتى استبدال الخدمات الحالية التي تتعامل مع مجموعات كبيرة من البيانات، والتي تعد واجهات برمجة التطبيقات القابلة للتطوير هي المرشح الأكثر وضوحًا لها.