What the Hack?!

44
What the Hack?!

Transcript of What the Hack?!

What the Hack?!

Uszanowanko!

Maciej Mączko, programista PHP.

Facebook- 2004 - ???- Drugi największy serwis świata (według Alexa) (Ten spamowy toolbar z IE)

Facebook- 2004 - ???- Drugi największy serwis świata (według Alexa) (Ten spamowy toolbar z IE)- 1.49 mld unikalnych użytkowników w ciągu miesiąca (578 unikalnych w ciągu sekundy)- +500 TB dziennie

(http://newsroom.fb.com/company-info/)

Facebook- Własna implementacja stosu TCP/IP- Deployment oparty na Bittorrent- 10 955 pracowników (czerwiec 2015)- Centra danych: Altoona, Forest City, Lulea, Prineville, Ashburn- Centrala: 1 Hacker Way, Menlo Park, California 94025

HPHPc- (Hip Hop for PHP)- 2010 - 2012- Konieczność rekompilacji całego środowiska- Brak maszyn testowych- PHP 5.2 (64 bit)- Brak eval() i innych.

HPHPi- Interpreter- 2010 - 2012- Niezgodność z HPHPc- Niska wydajność

HipHop VM (HHVM)- 2013 - ???- (HPHPc + HPHPi)- JIT! JIT! JIT!- 2x-6x szybsze od PHP 5.2- Kompatybilność z PHP 5.6- 25 największych projektów z Github odpala się bez problemów

HipHop VM (HHVM)- Baidu, Wikipedia, Facebook, Etsy, The Software House - 3 z 10 największych witryn korzysta z HHVM- Facebook ma 1 GB kodu źródłowego.

Hack- Funkcje asynchroniczne- Kolekcje- Awans parametrów formalnych konstruktora (Constructor Argument Promotion)- Typy generyczne

Hack- Tryby: Strict, Partial, Decl- Nullable- Krotki (tuples)- Typowanie- Generatory (przed PHP :P)

Hack (niewspierane)- Top level code- Kolizje nazw (metoda nazwana jak klasa)- Goto (nikt nie zauważył ;-) )- And, Or, Xor (wymagane: &&, ||, ^) - Break n, continue n- Globale

Hack (niewspierane)- Podwójna dereferencja zmiennych ($$a)- Eval- Case-insensitive function calls- Mieszanie HTML i Hacka

Funkcje asynchroniczne

Kolekcje (Vector)

Kolekcje (Map)

Kolekcje (Set)

Kolekcje (Pair)

Zmiany w tablicach

Kolekcje niezmienne- ImmVector- ImmMap- ImmSet

Przeniesione z PHP:- array_combine- array_diff- array_keys- count- implode- explode- serialize- var_dump <3

- sortowania…- i wiele innych

Ograniczenia kolekcji- Nie można pobrać referencji do elementu kolekcji- <, >, <=, >= nie zostały jeszcze zaimplementowane.

Awans parametrów formalnych konstruktora

Awans parametrów formalnych konstruktora

Nullable

Krotki (tuple)- aka tablice o stałym rozmiarze.

Typy generyczne

Typowanie

Hack mode (strict)- Każdy bład typowania jest błedem- Cały kod musi być typowany- Nie można odpalać nieHackowego kodu- Brak top-level code

Hack mode (partial)- Tryb domyślny- Może być otypowany- Może nie być otypowany- Każdy bład typowania jest błedem

Hack mode (decl)- Może być otypowany- Może nie być otypowany- Każdy bład typowania NIE jest błedem- Może być odpalany przez strict code

Pozostałe informacje- Moduły do Hacka mogą być pisane w PHP.- ^-- A więc da się zrobić framework jako moduł Hacka.- Gradual typing- HHVM - threaded

Jak zacząć?

Jak odpalić type checkera?

I co dalej…?

Hackificator

hh_server

Wordpress?

Slim?

Phpmyadmin? :(

Phpmyadmin? :(