0

W jakim języku programowania jest napisany Facebook, czyli różnice pomiędzy HHVM i PHP.

Jaki to był język programowania...

Jakiś tydzień temu jeden z użytkowników popularnego serwisu internetowego (niejaki Jurigag) zarzucił mi, że podaję fałszywe informacje na swoim blogu i zarówno Facebook jak i Wikipedia nie są oparte o język programowania PHP tylko o HHVM. Sprawdźmy zatem kto ma rację.

Uściślenie

Przede wszystkim warto uściślić, że Facebook i Wikipedia to ogromne serwisy, które w pewnych aspektach mogą używać naprawdę wielu różnych języków programowania (chociażby chat na Facebooku jest podobno w głównej mierze napisany w Erlangu), ale chodzi mi tylko o główne języki programowania użyte do stworzenia back-endów ich serwisów internetowych. Wydaje mi się, że to założenie jest dosyć oczywiste, jednak warto o nim wspomnieć jeśli już spieramy się o takie szczegóły.

Opinie innych osób

Na samym początku całkiem logicznym podejściem jest zrobienie researchu i przejrzenie informacji, które są łatwo dostępne na ten temat. Wynika z nich w zasadzie to samo co było przedmiotem dyskusji pomiędzy mną, a Jurigagiem: Facebook używa HHVM, a jego głównym językiem jest PHP lub ewentualnie Hack (co jednak nie powoduje jeszcze przechylenia szali zwycięstwa na stronę kogokolwiek). Poniżej przedstawiam wybrane wycinki wiadomości, na których się opierałem:

 

Wikipedia o aspektach technicznych Facebooka

Wikipedia o aspektach technicznych Facebooka [1]

Quora o języku używanym do stworzenia Facebooka

Quora o języku używanym do stworzenia Facebooka [2]

Języki używane do tworzenia najpopularniejszych serwisów internetowych wg Wikipedii

Języki używane do tworzenia najpopularniejszych serwisów internetowych wg Wikipedii [3]

Po tych informacjach chyba pora spojrzeć trochę bliżej na HHVM, gdyż zdaje się, że Jurigag uznaje go za język programowania. Czy tak aby na pewno jest? Autorzy definiują HHVM jako „wirtualną maszynę zaprojektowaną do wykonywania programów w języku Hack i PHP” [4], a więc na pewno nie możemy rozumieć go jako języka programowania. Używa on natomiast dwóch języków: Hack i PHP. Przypuszczam, że język PHP większość czytelników zna, ale czym jest Hack?

Porównanie PHP i Hack

Otóż Hack jest bardzo podobny do języka PHP, szczególnie PHP 7.1 (często wręcz identyczny). Przykładowy kod źródłowy pochodzący ze strony autorów wygląda następująco:

<?hh
class MyClass {
  const int MyConst = 0;
  private string $x = '';
  public function increment(int $x): int {
    $y = $x + 1;
    return $y;
  }
}

Jeśli ktoś czytał mój artykuł na temat nowości wprowadzonych w PHP 7.1 to pewnie zdaje sobie sprawę, że analogiczny kod w języku PHP miałby jedynie słabsze typowanie niż język Hack (jeden z autorów wspomina, że właśnie to typowanie było jednym z głównych powodów dla których powstał Hack [5]). Ponadto używa on typów generycznych, kolekcji (np. pary, zbioru), których obecnie nie ma w PHP oraz wyrażenia lambda, które jest trochę inaczej zrealizowane niż w czystym PHPie.  Nie są to jednak ogromne różnice  i mogą one być nawet niezauważone przez niewprawne oko. Jestem pewien, że doświadczeni programiści mogą potwierdzić tę opinię – różnice są, ale nie są kolosalne. Nie da się ukryć, że język Hack powstał w oparciu o PHP wzbogacając go po prostu o nowe elementy i programiści PHP mogliby swobodnie korzystać z Hack praktycznie bez wcześniejszego przygotowania. Język PHP jednak ewoluuje i w swoich nowszych wersjach coraz bardziej wspiera najważniejsze elementy powstałe w języku Hack, więc pewnie w przyszłości te języki zbliżą się do siebie.

Żeby dopełnić wszelkich formalizmów poniżej zamieszczam analogiczny kod, który jest zgodny z językiem PHP 7.1 (ciężko nie zauważyć podobieństwa):

<?php
class MyClass {
  const MyConst = 0;
  private $x = '';
  public function increment(int $x): int {
    $y = $x + 1;
    return $y;
  }
}

 

Podsumowanie

Czy można więc powiedzieć, że Facebook (lub Wikipedia) zostały napisane w języku PHP? Moim zdaniem można. Ich pierwsze wersje powstały zapewne w czystym PHPie, a wraz z rozwojem autorzy zdecydowali się skorzystać z maszyny wirtualnej (która używa języka PHP i Hack). Różnice pomiędzy PHP i Hack są niewielkie, a w dodatku Hack jest wyraźnie oparty na PHP, więc całkiem uzasadnione wydaje się użycie skrótu myślowego, że skoro ww. serwisy internetowe używają HHVM to są oparte na PHPie.

Zdaje się, że jedynym kontrargumentem, który mógłbym usłyszeć, mógłby być zarzut, że języki PHP i Hack są podobne tylko w mojej ocenie. Natomiast jest to nieprawda. Sama Wikipedia podaje, że Hack został stworzony jako dialekt języka PHP. Analogiczną informację podają osoby zaangażowane w rozwój języka Hack [5].

Na podstawie przytoczonych argumentów podtrzymuję swoją opinię, że serwisy internetowe Facebook oraz Wikipedia, mimo że korzystają z HHVM, to jednak są przede wszystkim oparte na języku PHP. Wynika też z tego, że użytkownik Jurigag albo nie ma odpowiedniej wiedzy o tym co pisze albo specjalnie stara się zdyskredytować inne osoby, mimo tego, że nie ma racji.

Aktualizacja: Moje obawy odnośnie Jurigaga były całkiem uzasadnione i jestem teraz w 100% pewien, że nie rozumie o czym pisze. HHVM jest analogicznym produktem jak JVM. Czy ktoś jednak słyszał o tym, żeby programiści pisali programy w JVM? Nie. Piszą oni programy w Javie. Tak samo tutaj: programiści piszą w PHPie.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *