Czytałem, że Facebook zaczynał w PHP, a następnie, aby przyspieszyć, teraz kompilują PHP jako kod C ++. Jeśli tak jest, dlaczego nie:
Po prostu program w c ++? Z pewnością musi być NIEKTÓRE błędy / błędy po naciśnięciu przycisku magicznego kompilatora, który przenosi PHP na kod c ++, prawda?
Jeśli ten imponujący konwerter działa tak ładnie, po co w ogóle trzymać się PHP? Dlaczego nie użyć czegoś takiego jak Ruby lub Python? Uwaga - wybrałem te dwa losowo, ale głównie dlatego, że prawie wszyscy mówią, że kodowanie w tych językach to „radość”. Dlaczego więc nie rozwinąć się w super doskonałym języku, a następnie nacisnąć magiczny przycisk kompilacji c ++?
<snark>
(O ile JS można kiedykolwiek nazwie „czytelny”, że jest.)</snark>
Odpowiedzi:
Oni nie. Przynajmniej już nie. Okazuje się, że zrobienie tego w ten sposób powoduje zbyt wiele problemów, w tym bóle głowy związane z wdrażaniem i niwelowanie jednej z głównych zalet używania języka skryptowego w pierwszej kolejności - możliwości zmiany skryptów bez konieczności ponownej kompilacji - więc przerobili system HipHop na architektura VM z przezroczystą fazą JIT i przestarzała kompilator C ++.
Co ciekawe, najwyraźniej robienie tego w ten sposób jest około dwa razy szybsze (jak w performerze) niż oryginalne podejście do kompilacji C ++.
źródło
Starszy inżynier Facebooka Haiping Zhao prawdopodobnie najlepiej odpowiada na twoje pytania .
Reszta posta na blogu to dobra lektura i polecam ją. Daje wgląd w wyzwania programowe, z którymi boryka się Facebook, oraz w jaki sposób próbują rozwiązać te problemy.
źródło
Zgadza się, ale programowanie w C ++ wymagałoby zastąpienia całej istniejącej bazy kodu - idei znanej na całym świecie z tego, że jest całkowicie głupi i niszczycielski.
Ponownie oznaczałoby to zastąpienie istniejącej bazy kodu PHP.
W idealnym świecie po prostu kodują w C ++ od zera. Niestety, ponieważ mają one sporo istniejącego kodu w PHP, nie jest to możliwe. Zamiast tego włamują się do problemu. Jest o wiele tańszy.
źródło
they hack around the problem
? Optymalizacja kodu za pomocą C ++, a nawet asemblera wcale nie jest nowa, robiąc to od czasów, gdy był komputer.„Rzeczywiście, dlaczego nie pracować bezpośrednio w asemblerze, ponieważ kod C ++ jest ostatecznie tłumaczony na instrukcje kodu maszynowego?”
- Do tego w istocie sprowadza się ten argument. Mam nadzieję, że to wyjaśnia, dlaczego tak się nie dzieje:
źródło
Nie jestem na Facebooku, ale najlepiej zgaduję, że motywami byłoby „unikanie znacznego ryzyka”. W tym momencie przejście na inny język nie jest już decyzją technologiczną: przede wszystkim jest decyzją biznesową.
Kiedy jesteś dużą firmą, która wyrosła organicznie do wielkości FB, powoli przyciągasz ludzi, którzy następnie zdobywają wiedzę na swojej platformie programistycznej (w przypadku FB jest to PHP). Jeden po drugim dostajesz kilka tysięcy pracowników z ogromną wiedzą fachową w PHP. W tym momencie przejście na jakikolwiek inny język staje się bardzo niebezpieczne: Twoi inżynierowie nie będą na bieżąco z nowym ekosystemem i mogą potrzebować dużo czasu, aby osiągnąć poziom wiedzy wymaganej przez ich bieżącą pracę, nie mówiąc już o doskonaleniu umiejętności.
Pomijając względne zalety PHP i języków alternatywnych, przy nakładach FB na technologię PHP byłoby zbyt aroganckie myśleć, że zmiana byłaby bezbolesna i zbyt głupia, aby spróbować. W biznesie technologia jest środkiem do celu, więc „radość” programowania nawet nie wchodzi w dyskusje.
źródło
Mogę wymyślić tylko jedną dużą stronę internetową, która została zaimplementowana w C ++. H2G2
Nawet wtedy obecny implementator jest w rzeczywistości tłumaczem z dużą liczbą wbudowanych funkcji manipulacji tekstem i bazą danych (czy to nie brzmi trochę jak wczesne PHP :-)).
Facebook jest bardzo zadowolony z funkcjonalności swojej strony internetowej. Właśnie urosły do tego stopnia, że waniliowe PHP nie może obsługiwać przetwarzanych woluminów. Stąd kompilacja tam PHP do kodu maszynowego C ++. Mogliby napisać pełny kompilator dla PHP, ale przegapiliby 20 lat subtelnej optymalizacji, która trafiła na stos kompilatora gcc. Chodzi o to, że kod „C ++” nie ma być czytelny dla człowieka ani utrzymywalny, to tylko pośredni krok na drodze do kodu maszynowego.
Podobnie jak wielu programistów na tej stronie, uważam, że nie doceniasz ilości pracy zainwestowanej w logikę biznesową i funkcjonalność wbudowaną w istniejące aplikacje, a także sam kod wartości.
źródło