SlideShare a Scribd company logo
HHVM & Hack
aneb jak to píše
Facebook
Standa Jaša
▷ release cyklus každé dva týdny / resp. 2x denně
▷ kód se mění tak rychle, že se nedá použít find, grep, atd.
- soubory tam (už zas) nejsou, než skončíte search
▷ velmi plochá project-based architektura
▷ většina lidí používá vim / emacs => IDE to nenačtou
▷ např. jedna base class má 25 000 podtříd
▷ každou změnu musí schválit další programátor
Jakub Vrána byl ve Facebooku
▷ většina kódu neřeší view layer, ale používá rovnou XHP, eg.
$body = <body/>;
$html = <html/>->appendChild($body);
$body->appendChild(<h1>Hello {$name.$surname}</h1>);
▷ echo $html;
Facebook View Layer
▷ Původně PHP => C++ => gcc
▷ Teď virtuální stroj s databází, kde si drží bytecode
▷ Implementace PHP 5.6.99
▷ Dva týdny nightly a každý měsíc release (sudé a liché verze)
▷ wikipedia.org nebo wordpress
▷ Důvody:
o rychlost
o lepší chybové hlášky
o hack
HHVM
HHVM at Etsy
https://kinsta.com/blog/hhvm-vs-php-7/
HHVM at Etsy
https://kinsta.com/blog/hhvm-vs-php-7/
▷ Facebook už nebavilo hackovat PHP, tak si ho napsali znova
▷ php 5.3 je pořád standard pro syntaxi, i když už je chvíli EOL
▷ hack “nutí” typové anotace pro všechny typy
▷ hh_client v reálném čase analyzuje code-base v
▷ hackify - .php => .hh
▷ h2tp - .hh => .php54+
Hack Language
Facebook View Layer (2)
Vsuvka - Facebook React JSX syntax
Hack v praxi http://hacklang.org/
▷ <?hh // strict
o only typed-arrays, only hack code, no global state
▷ <?hh // partial
o default, allows // UNSAFE,
▷ <?hh // decl = unsafe whole file
▷ function foo() { // UNSAFE … }
Hack Modes
Díky za pozornost!
Otázky?
Standa Jaša
standa.jasa@keyup.eu

More Related Content

Similar to HHVM & Hack

WordCamp Brno 2017 - rychlý a bezpečný web
WordCamp Brno 2017  - rychlý a bezpečný webWordCamp Brno 2017  - rychlý a bezpečný web
WordCamp Brno 2017 - rychlý a bezpečný web
Vladimír Smitka
 
Tipy a triky, best practices, deployment, testování
Tipy a triky, best practices, deployment, testováníTipy a triky, best practices, deployment, testování
Tipy a triky, best practices, deployment, testování
Radim Klaška
 
TNPW2-2014-03
TNPW2-2014-03TNPW2-2014-03
TNPW2-2014-03
Lukáš Vacek
 
Smalltalk prakticky [CZ]
Smalltalk prakticky [CZ]Smalltalk prakticky [CZ]
Smalltalk prakticky [CZ]
Tomáš Kukol
 
TNPW2-2016-03
TNPW2-2016-03TNPW2-2016-03
TNPW2-2016-03
Lukáš Vacek
 
PHP Vysočina - WordPress - 25.10.2018
PHP Vysočina - WordPress - 25.10.2018PHP Vysočina - WordPress - 25.10.2018
PHP Vysočina - WordPress - 25.10.2018
Brilo Team
 
Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze)
Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze)Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze)
Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze)
Péhápkaři
 
Optimalizace Symfony na devu
 Optimalizace Symfony na devu Optimalizace Symfony na devu
Optimalizace Symfony na devu
Vašek Purchart
 
VersionPress - jak dělat WP weby lépe
VersionPress - jak dělat WP weby lépeVersionPress - jak dělat WP weby lépe
VersionPress - jak dělat WP weby lépe
Borek Bernard
 
Základní práce s příkazovým řádkem
Základní práce s příkazovým řádkemZákladní práce s příkazovým řádkem
Základní práce s příkazovým řádkem
PeckaDesign.cz
 
Čtvrtkon #71 - Marian Benčat - Angular a NativeScript
Čtvrtkon #71 - Marian Benčat - Angular a NativeScriptČtvrtkon #71 - Marian Benčat - Angular a NativeScript
Čtvrtkon #71 - Marian Benčat - Angular a NativeScript
Ctvrtkoncz
 
Borek Bernard: TypeScript - příčetný jazyk pro web
Borek Bernard: TypeScript - příčetný jazyk pro webBorek Bernard: TypeScript - příčetný jazyk pro web
Borek Bernard: TypeScript - příčetný jazyk pro webDevelcz
 
Sysops tipy pro lepší WP
Sysops tipy pro lepší WPSysops tipy pro lepší WP
Sysops tipy pro lepší WP
Vladimír Smitka
 
Výkon WordPress
Výkon WordPressVýkon WordPress
Výkon WordPress
Vladimír Smitka
 
Bezpečnost Wordpressu - 4. WP konference
Bezpečnost Wordpressu - 4. WP konferenceBezpečnost Wordpressu - 4. WP konference
Bezpečnost Wordpressu - 4. WP konference
Vladimír Smitka
 
Technologie užívané při vývoji velkých e-shopů
Technologie užívané při vývoji velkých e-shopůTechnologie užívané při vývoji velkých e-shopů
Technologie užívané při vývoji velkých e-shopů
PeckaDesign.cz
 
Představení Ruby on Rails
Představení Ruby on RailsPředstavení Ruby on Rails
Představení Ruby on Rails
igloonet
 

Similar to HHVM & Hack (20)

WordCamp Brno 2017 - rychlý a bezpečný web
WordCamp Brno 2017  - rychlý a bezpečný webWordCamp Brno 2017  - rychlý a bezpečný web
WordCamp Brno 2017 - rychlý a bezpečný web
 
Tipy a triky, best practices, deployment, testování
Tipy a triky, best practices, deployment, testováníTipy a triky, best practices, deployment, testování
Tipy a triky, best practices, deployment, testování
 
TNPW2-2014-03
TNPW2-2014-03TNPW2-2014-03
TNPW2-2014-03
 
Smalltalk prakticky [CZ]
Smalltalk prakticky [CZ]Smalltalk prakticky [CZ]
Smalltalk prakticky [CZ]
 
TNPW2-2016-03
TNPW2-2016-03TNPW2-2016-03
TNPW2-2016-03
 
PHP Vysočina - WordPress - 25.10.2018
PHP Vysočina - WordPress - 25.10.2018PHP Vysočina - WordPress - 25.10.2018
PHP Vysočina - WordPress - 25.10.2018
 
Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze)
Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze)Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze)
Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze)
 
Optimalizace Symfony na devu
 Optimalizace Symfony na devu Optimalizace Symfony na devu
Optimalizace Symfony na devu
 
VersionPress - jak dělat WP weby lépe
VersionPress - jak dělat WP weby lépeVersionPress - jak dělat WP weby lépe
VersionPress - jak dělat WP weby lépe
 
Základní práce s příkazovým řádkem
Základní práce s příkazovým řádkemZákladní práce s příkazovým řádkem
Základní práce s příkazovým řádkem
 
Čtvrtkon #71 - Marian Benčat - Angular a NativeScript
Čtvrtkon #71 - Marian Benčat - Angular a NativeScriptČtvrtkon #71 - Marian Benčat - Angular a NativeScript
Čtvrtkon #71 - Marian Benčat - Angular a NativeScript
 
Borek Bernard: TypeScript - příčetný jazyk pro web
Borek Bernard: TypeScript - příčetný jazyk pro webBorek Bernard: TypeScript - příčetný jazyk pro web
Borek Bernard: TypeScript - příčetný jazyk pro web
 
TNPW2-2013-03
TNPW2-2013-03TNPW2-2013-03
TNPW2-2013-03
 
Sysops tipy pro lepší WP
Sysops tipy pro lepší WPSysops tipy pro lepší WP
Sysops tipy pro lepší WP
 
Výkon WordPress
Výkon WordPressVýkon WordPress
Výkon WordPress
 
Bezpečnost Wordpressu - 4. WP konference
Bezpečnost Wordpressu - 4. WP konferenceBezpečnost Wordpressu - 4. WP konference
Bezpečnost Wordpressu - 4. WP konference
 
Technologie užívané při vývoji velkých e-shopů
Technologie užívané při vývoji velkých e-shopůTechnologie užívané při vývoji velkých e-shopů
Technologie užívané při vývoji velkých e-shopů
 
TNPW2-2012-04
TNPW2-2012-04TNPW2-2012-04
TNPW2-2012-04
 
Představení Ruby on Rails
Představení Ruby on RailsPředstavení Ruby on Rails
Představení Ruby on Rails
 
TNPW2-2012-03
TNPW2-2012-03TNPW2-2012-03
TNPW2-2012-03
 

More from Keyup

Unity
UnityUnity
Unity
Keyup
 
Google AdWords a Google AdSense vs. AdBlock.
Google AdWords a Google AdSense vs. AdBlock.Google AdWords a Google AdSense vs. AdBlock.
Google AdWords a Google AdSense vs. AdBlock.
Keyup
 
WinJS
WinJSWinJS
WinJS
Keyup
 
Redux+React
Redux+ReactRedux+React
Redux+React
Keyup
 
Garbage Collection in Java
Garbage Collection in JavaGarbage Collection in Java
Garbage Collection in Java
Keyup
 
CSS flexbox
CSS flexboxCSS flexbox
CSS flexbox
Keyup
 
Magento 2
Magento 2Magento 2
Magento 2
Keyup
 
Silex
SilexSilex
Silex
Keyup
 
Ruby on rails
Ruby on railsRuby on rails
Ruby on rails
Keyup
 
Icinga2
Icinga2Icinga2
Icinga2
Keyup
 
O auth2
O auth2O auth2
O auth2
Keyup
 
Úvod do bezpečnosti na webu
Úvod do bezpečnosti na webuÚvod do bezpečnosti na webu
Úvod do bezpečnosti na webu
Keyup
 
CoffeeScript
CoffeeScriptCoffeeScript
CoffeeScript
Keyup
 
CSS 3
CSS 3CSS 3
CSS 3
Keyup
 
Contract in Java
Contract in JavaContract in Java
Contract in Java
Keyup
 
Jenkins
JenkinsJenkins
Jenkins
Keyup
 
JLint
JLintJLint
JLint
Keyup
 
Angular js vs. Facebook react
Angular js vs. Facebook reactAngular js vs. Facebook react
Angular js vs. Facebook react
Keyup
 
Optimalizace rychlosti stránek
Optimalizace rychlosti stránekOptimalizace rychlosti stránek
Optimalizace rychlosti stránek
Keyup
 
Integrační testy - Selenium
Integrační testy - SeleniumIntegrační testy - Selenium
Integrační testy - Selenium
Keyup
 

More from Keyup (20)

Unity
UnityUnity
Unity
 
Google AdWords a Google AdSense vs. AdBlock.
Google AdWords a Google AdSense vs. AdBlock.Google AdWords a Google AdSense vs. AdBlock.
Google AdWords a Google AdSense vs. AdBlock.
 
WinJS
WinJSWinJS
WinJS
 
Redux+React
Redux+ReactRedux+React
Redux+React
 
Garbage Collection in Java
Garbage Collection in JavaGarbage Collection in Java
Garbage Collection in Java
 
CSS flexbox
CSS flexboxCSS flexbox
CSS flexbox
 
Magento 2
Magento 2Magento 2
Magento 2
 
Silex
SilexSilex
Silex
 
Ruby on rails
Ruby on railsRuby on rails
Ruby on rails
 
Icinga2
Icinga2Icinga2
Icinga2
 
O auth2
O auth2O auth2
O auth2
 
Úvod do bezpečnosti na webu
Úvod do bezpečnosti na webuÚvod do bezpečnosti na webu
Úvod do bezpečnosti na webu
 
CoffeeScript
CoffeeScriptCoffeeScript
CoffeeScript
 
CSS 3
CSS 3CSS 3
CSS 3
 
Contract in Java
Contract in JavaContract in Java
Contract in Java
 
Jenkins
JenkinsJenkins
Jenkins
 
JLint
JLintJLint
JLint
 
Angular js vs. Facebook react
Angular js vs. Facebook reactAngular js vs. Facebook react
Angular js vs. Facebook react
 
Optimalizace rychlosti stránek
Optimalizace rychlosti stránekOptimalizace rychlosti stránek
Optimalizace rychlosti stránek
 
Integrační testy - Selenium
Integrační testy - SeleniumIntegrační testy - Selenium
Integrační testy - Selenium
 

HHVM & Hack

  • 1. HHVM & Hack aneb jak to píše Facebook Standa Jaša
  • 2. ▷ release cyklus každé dva týdny / resp. 2x denně ▷ kód se mění tak rychle, že se nedá použít find, grep, atd. - soubory tam (už zas) nejsou, než skončíte search ▷ velmi plochá project-based architektura ▷ většina lidí používá vim / emacs => IDE to nenačtou ▷ např. jedna base class má 25 000 podtříd ▷ každou změnu musí schválit další programátor Jakub Vrána byl ve Facebooku
  • 3. ▷ většina kódu neřeší view layer, ale používá rovnou XHP, eg. $body = <body/>; $html = <html/>->appendChild($body); $body->appendChild(<h1>Hello {$name.$surname}</h1>); ▷ echo $html; Facebook View Layer
  • 4. ▷ Původně PHP => C++ => gcc ▷ Teď virtuální stroj s databází, kde si drží bytecode ▷ Implementace PHP 5.6.99 ▷ Dva týdny nightly a každý měsíc release (sudé a liché verze) ▷ wikipedia.org nebo wordpress ▷ Důvody: o rychlost o lepší chybové hlášky o hack HHVM
  • 7. ▷ Facebook už nebavilo hackovat PHP, tak si ho napsali znova ▷ php 5.3 je pořád standard pro syntaxi, i když už je chvíli EOL ▷ hack “nutí” typové anotace pro všechny typy ▷ hh_client v reálném čase analyzuje code-base v ▷ hackify - .php => .hh ▷ h2tp - .hh => .php54+ Hack Language
  • 9. Vsuvka - Facebook React JSX syntax
  • 10. Hack v praxi http://hacklang.org/
  • 11. ▷ <?hh // strict o only typed-arrays, only hack code, no global state ▷ <?hh // partial o default, allows // UNSAFE, ▷ <?hh // decl = unsafe whole file ▷ function foo() { // UNSAFE … } Hack Modes
  • 12. Díky za pozornost! Otázky? Standa Jaša standa.jasa@keyup.eu