SlideShare a Scribd company logo
1 of 12
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ý webVladimí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
 
Smalltalk prakticky [CZ]
Smalltalk prakticky [CZ]Smalltalk prakticky [CZ]
Smalltalk prakticky [CZ]Tomáš Kukol
 
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.2018Brilo Team
 
Optimalizace Symfony na devu
 Optimalizace Symfony na devu Optimalizace Symfony na devu
Optimalizace Symfony na devuVašek Purchart
 
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
 
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épeBorek 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 řádkemPeckaDesign.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 NativeScriptCtvrtkoncz
 
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ší WPVladimír Smitka
 
Bezpečnost Wordpressu - 4. WP konference
Bezpečnost Wordpressu - 4. WP konferenceBezpečnost Wordpressu - 4. WP konference
Bezpečnost Wordpressu - 4. WP konferenceVladimí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 Railsigloonet
 

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
 
Optimalizace Symfony na devu
 Optimalizace Symfony na devu Optimalizace Symfony na devu
Optimalizace Symfony na devu
 
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)
 
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
UnityKeyup
 
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
WinJSKeyup
 
Redux+React
Redux+ReactRedux+React
Redux+ReactKeyup
 
Garbage Collection in Java
Garbage Collection in JavaGarbage Collection in Java
Garbage Collection in JavaKeyup
 
CSS flexbox
CSS flexboxCSS flexbox
CSS flexboxKeyup
 
Magento 2
Magento 2Magento 2
Magento 2Keyup
 
Silex
SilexSilex
SilexKeyup
 
Ruby on rails
Ruby on railsRuby on rails
Ruby on railsKeyup
 
Icinga2
Icinga2Icinga2
Icinga2Keyup
 
O auth2
O auth2O auth2
O auth2Keyup
 
Úvod do bezpečnosti na webu
Úvod do bezpečnosti na webuÚvod do bezpečnosti na webu
Úvod do bezpečnosti na webuKeyup
 
CoffeeScript
CoffeeScriptCoffeeScript
CoffeeScriptKeyup
 
CSS 3
CSS 3CSS 3
CSS 3Keyup
 
Contract in Java
Contract in JavaContract in Java
Contract in JavaKeyup
 
Jenkins
JenkinsJenkins
JenkinsKeyup
 
JLint
JLintJLint
JLintKeyup
 
Angular js vs. Facebook react
Angular js vs. Facebook reactAngular js vs. Facebook react
Angular js vs. Facebook reactKeyup
 
Optimalizace rychlosti stránek
Optimalizace rychlosti stránekOptimalizace rychlosti stránek
Optimalizace rychlosti stránekKeyup
 
Integrační testy - Selenium
Integrační testy - SeleniumIntegrační testy - Selenium
Integrační testy - SeleniumKeyup
 

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