> 백엔드 개발 > PHP 튜토리얼 > 해킹, HHVM의 PHP 교체를 살펴 봅니다

해킹, HHVM의 PHP 교체를 살펴 봅니다

Christopher Nolan
풀어 주다: 2025-02-22 08:29:10
원래의
307명이 탐색했습니다.

A Look at Hack, the PHP Replacement in HHVM

해킹, HHVM의 PHP 교체를 살펴 봅니다 이전에 만든 Vagrant 상자를 사용 하여이 기사에서 코드 스 니펫을 실행할 수 있습니다. 키 테이크 아웃

HHVM의 PHP 대체품 인 hack은 정적으로 입력 한 언어이므로 응용 프로그램의 모든 변수에 대한 유형을 제공해야합니다. 그러나 Hack은 "Strict"모드에서만 유형이 예상되는 "점진적 타이핑"시스템을 사용하며, 심지어 Hack은 로컬 변수 유형을 추론 할 수있을만큼 똑똑합니다.

. hack은 Facebook의 주석 구현 인 사용자 속성을 포함하여 PHP를 개선하는 몇 가지 기능과 XML 문서 조각이 유효한 PHP 표현식이되도록 언어의 구문을 증대하는 PHP 확장 인 XHP입니다.

. HAK 및 HHVM의 장점에도 불구하고, PECL 확장에 대한 지원 부족과 HHVM이 Facebook에 의해 전적으로 지원된다는 사실을 포함하여 여전히 채택에 장애물이 있습니다. 그러나 Facebook은 HHVM 대상의 PHP 확장을 자동으로 컴파일 할 수있는 도구가 있으며 HHVM의 확장을 개발하는 것이 PHP를 개발하는 것보다 쉽습니다.

왜 유형?

기사의 첫 번째 부분에서 우리는 해킹이 실제로 정적으로 입력 된 것을 보았습니다. 즉, 응용 프로그램의 모든 변수에 대한 유형을 제공해야합니다. 알림으로, PHP는 동적으로 입력되므로 기능 인수에 유형 힌트를 사용할 수는 있지만 변수를 입력 할 필요가 없습니다.
    . 그러나 기다려, 그것은 응용 프로그램의 모든 단일 변수에 유형을 제공해야한다는 것을 의미합니까? 정확하게는 아니고 우리는 세부 사항을 볼 것입니다.
  • Facebook의 코드베이스는 수억 개의 코드 라인으로 구성되어 있으며 해킹으로 전환하기 전에 모든 곳에서 유형을 추가하는 것은 실질적인 부담 일 것입니다. 따라서 "점진적 타이핑"과 함께 제공됩니다. Hack은 "엄격한"모드에서만 유형을 기대합니다. 비 스트릭 모드에서 유형은 존재하는 곳에서만 고려됩니다.
  • 엄격한 모드에 들어가는 것은 해킹 시작 태그를 hh에서 hh // strict. 로 전환하는 것만 큼 쉽습니다. 엄격한 모드에서도 모든 변수에 주석을 달 필요는 없습니다. 해킹은 로컬 변수 유형을 추론 할만 큼 똑똑하기 때문입니다. 유형 주석은 클래스 속성, 기능 인수 및 반환 값에만 필요한 것입니다. 그렇지 않으면 코드 이해에 도움이 될 때 로컬 변수를 주석을달라고 권장합니다.
  • . 예를 들여다 봅시다 :
  • 이 섹션의 샘플 코드는 www/type-checker/index.php에 있으며 브라우저를 http : // localhost : 8080/type-Checker/. 첫 번째 오류 메시지는 놀라운 일이 아닙니다. 호출 add (1, "a")는 add ()가 두 번째 인수가 정수가 될 것으로 기대하기 때문에 오류를 생성합니다. 두 번째 오류 메시지는 예상치 못한 것입니다. add_array ([1, "a"]를 호출하여 오류가 발생하지 않습니다. 실제로 add_array () 내부에 (1, "a")를 호출하는 것은 오류가 발생합니다! [1, "a"]를 통과하는 것은 배열 가 아니기 때문에 오류가 발생할 것으로 예상했을 수 있습니다. 문제는 성능에 영향을 미치지 않기 위해 HHVM 런타임 확인이 드물다는 것입니다. 객체를 반복하지 않습니다. 이 시점에서 아마도 해킹 유형 시스템의 유용성에 의문을 제기 할 것입니다! 그러나 걱정하지 마십시오. 쉬운 답변이 있습니다. "유형 검사기"는 이전 예제의 것과 같은 유형의 불일치를 포착 할 것입니다. HHVM 저장소에서 찾지 마십시오. 아직 Facebook에서 출시되지 않았습니다. 유형 검사기는 변경을 위해 파일을 시청하는 서버로 구현됩니다. 변경 사항을 감지 할 때마다 수정 된 파일을 오류에 대한 종속성과 함께 스캔합니다. 오류는 실시간으로보고되어 코드를 실행할 필요조차 없습니다. FB 규모에서도 실제로 빠르게 작동하도록 설계되었습니다.

    이제 유형 시스템이 훌륭하게 작동한다고 확신하지만 이점은 무엇입니까? 개발자 오류를 실시간으로 잡을 수있어보다 효율적인 코드를 생성 할 수 있습니다. php add () 함수는 먼저 $ a와 $ b의 유형을 확인해야합니다 (예 : String, null,…). 추가를 수행하십시오. Hack을 사용하면 위의 add () 함수는 어셈블리 언어에서 매우 빠른 작업 인 두 개의 비 널 정수를 추가합니다 (HHVM JIT에 의해 생성). 개발자로서 이미 PHP 유형 HINTING 및 PHPDOC 주석을 사용하고있는 경우 엄격한 모드로 전환하는 것은 쉬운 일이 아닙니다. 코드는 더 안전하고 빠르게됩니다. Scrutinizer와 같은 일부 기존 QA 도구는 이미 유형 추론을 사용하여 코드가 실시간이 아니지만 코드를 확인합니다.

    주로 동적으로 입력 된 특성으로 인해 PHP를 사용하면 비 스트릭 모드를 고수하고 싶을 것입니다. . 사용자 속성 지난 몇 년 동안 PHP 세계에서 주석의 사용이 급격히 증가했습니다. 주석에 익숙하지 않은 사람들의 경우 클래스, 인터페이스, 특성, 변수 및 기능/방법에 추가 할 수있는 메타 데이터입니다. 교리 ORM은 아마도 주석을 광범위하게 사용하는 최초의 PHP 프로젝트 중 하나 일 것입니다. 아래는 교리 문서의 모델 구성의 예입니다.

    PHP는 다른 많은 언어와 달리 주석에 대한 내장 지원이 없습니다. 그러나 교리 주석 라이브러리는 docblocks에서 메타 데이터를 추출하는 데 널리 사용됩니다. PHP의 주석에 대한 내장 지원을 제안하는 RFC는 2011 년에 거슬러 올라갔습니다. 사용자 속성은 주석의 Facebook 구현입니다. 그것들은 >에 동봉되어 있으며 그들의 구문은 교리 주석과 약간 다릅니다.

    <span><span><?hh // strict
    </span></span><span>
    </span><span><span>require "/vagrant/www/xhp/php-lib/init.php";
    </span></span><span>
    </span><span><span>// ...
    </span></span><span>
    </span><span><span>function add(int $a, int $b): int {
    </span></span><span>    <span>return $a + $b;
    </span></span><span><span>}
    </span></span><span>
    </span><span><span>// ERROR(calling "add()" on l.17) : Argument 2 passed to add() must be an
    </span></span><span><span>// instance of int, string given
    </span></span><span><span>echo <p>add(1, "a") = {add(1, "a")}</p>;
    </span></span><span>
    </span><span><span>// ERROR(calling "add()" on l.22) : Argument 2 passed to add() must be an
    </span></span><span><span>// instance of int, string given
    </span></span><span><span>function add_array(array<int> $a): int {
    </span></span><span>    <span>return array_reduce($a, "add", 0);
    </span></span><span><span>}
    </span></span><span>
    </span><span><span>echo <p>add_array([1, "a"]) = {add_array([1, "a"])}</p>;</span></span>
    로그인 후 복사
    사용자 속성은 당연히 반사 API에서 액세스 할 수 있습니다. 또한 클래스 속성에 대한 주석에 대한 지원은 여전히 ​​구현되어야합니다.

    이 섹션의 샘플 코드는 www/attributes/index.php에 있으며 브라우저를 http : // localhost : 8080/attributes/. xhp

    지금 까지이 기사의 첫 번째 코드 예제에서 사용했던 것과 같이 XHP가 무엇인지 예언해야합니다. 보다 완전한 정의에 대해 Facebook을 인용하겠습니다.“XHP는 XML 문서 조각이 유효한 PHP 표현식이되도록 언어의 구문을 강화하는 PHP 확장자입니다.” XHP는 PHP 확장으로 제공되며 HHVM은 기본 지원을 가지고 있습니다.

    xhp에서는

    {$ hello}

    를 사용할 수 있습니다. 이전 예제는 사소한 것이지만 XHP는 더 많은 것을 제공합니다 :

    는 유효하지 않은 HTML을 쓸 수 없도록 마크 업을 검증 할 것입니다 - 닫는 태그, 매개 변수 이름의 오타를 누락했다고 생각하십시오. 는 어떤 수준의 상황에 맞는 탈출을 제공합니다 - 엔진이 렌더링하는 것을 알고 있기 때문에 XSS 공격을 방지하기 위해 HTML과 값을 적절하게 속일 수 있습니다. 기존 태그를 확장하거나 포장하여 자신의 태그를 쓸 수 있습니다.

    예를 들여다 봅시다 :

    이 섹션의 전체 샘플 코드는 www/hhxhp/index.php에 있으며 브라우저를 http : // localhost : 8080/hhxhp/. <we>이 예에서 우리는 <select> 태그를 렌더링하는 사용자 정의 <tuto : examples> 태그를 정의하여 시작합니다. 이것은 클래스 : tuto : examples를 선언하여 수행됩니다. 우리의 사용자 정의 태그는 두 가지 속성, 예제와 현재가 필요하지만 자녀를 가질 수는 없습니다 (어린이는 비어;). <ext> 기본을 확장 할 때 X : 요소는 render () 메소드를 무시하여 사용자 정의 마크 업을 xhp로 반환해야합니다. <x> Facebook은 XHP 언어를 UI 라이브러리의 기초로 사용하여 결국 공개 공급을받을 수 있습니다. <ron> 비동기 코드 실행 <to> HHVM Repo에서 일부 테스트를 본 후 비동기 코드 실행에 관한 섹션을 작성할 계획이있었습니다. 그러나 나는 일하는 예를들 수 없었습니다. 주제에 대한 나의 이해가 거의 없거나 Facebook이 아직 관련된 모든 관련 코드를 공개하지 않았다는 사실 때문일 수 있습니다. Facebook이 문서를 발표하면 이것에 대해 쓸 수 있습니다. <p> </p> 기타 기능 <lot> HHVM 생태계에는이 기사에서 다루지 않은 많은 것들이 있습니다. 둘 다 포함 할 내용을 선택해야했고 Facebook은 아직 모든 코드와 문서를 공개하지 않았기 때문에. <that> 언급 할 가치가있는 몇 가지는 FastCGI와 통합 디버거에 대한 최근 지원입니다.Facebook은 자동 완성, 구문 강조 표시, 협업 편집 등을 특징으로하는 웹 기반 IDE 인 "FBIDE"도 선보였습니다. 우리는 그것이 나중에 사용할 수있을 것으로 기대할 수 있습니다. <p> <ess> 외부 ressources <more>이 기사를 준비하는 데 사용한 일부 대화와 슬라이드에서 더 많은 정보를 찾을 수 있습니다. 나는 Keith Adams의“PHP를 진지하게 받아들이는”대화와 Julien Verlaguet의 또 다른 위대한 대화를 들음으로써 Hack에 대해 처음 들었습니다. Sara Golemon의 멋진 슬라이드도 정말 도움이되었습니다. </more></ess></p> <h3> 결론 Facebook은 HHVM의 PHP와 함께 기능 패리티를 제공하기 위해 최선을 다하고 있습니다. 작년 말까지 HHVM은 이미 가장 인기있는 PHP 프레임 워크 20 개에 대해 단위 테스트의 98.5%를 이미 통과 할 수있었습니다. 그 이후로 상황이 약간 개선되었습니다. </h3> <the> 오늘 현재 HHVM은 PHP 코드를 PHP보다 빠르게 실행하면서 메모리를 덜 소비합니다. 그것은 패리티가 결국 달성 될 때 HHVM에 유리한 상당한 이점이 될 것입니다. 또한 유형 확인기의 도움으로 더 많은 성능을 얻고 코드 안전을 향상시키기 위해 해킹을 도입하기 시작할 수 있습니다. 점진적인 타이핑과 해킹 덕분에 전체 코드베이스를 한 번에 변환 할 필요가 없음을 기억하십시오. 그리고 PHP는 상호 운영 가능합니다. <p> <months> 지금부터 몇 달 후에 Facebook에서 더 많은 문서화 및 툴링을 기대할 수 있습니다. Github의 프로젝트에 기여하여 도와 줄 수도 있고 현상금 프로그램도 있습니다. </months></p>. <problems> 채택의 주요 장애물 인 PHP 커뮤니티 가보고 한 문제 중 하나는 PECL 확장에 대한 지원이 부족하다는 것입니다. 이를 완화하기 위해 Facebook에는 HHVM 대상의 PHP 확장을 자동으로 컴파일 할 수있는 도구가 있습니다. 성공률은 100%가 아닙니다. 여기서 도움이 될 수있는 또 다른 것은 HHVM의 확장을 개발하는 것이 PHP를 개발하는 것보다 훨씬 쉽다는 것입니다. <h> HHVM이 Facebook에 의해 뒷받침된다는 사실과 HHVM에 기여하기 전에 CLA에 서명해야 할 필요성은 다른 사람들에게 번거롭게 보입니다. <h3> <ally> 나는 개인적으로 상당한 양의 경쟁이 PHP의 미래에 큰 일이라고 생각합니다. 결론을 내리기 위해, 나는 그들이 한 놀라운 일에 대해 Facebook 팀에게 감사하고 열린 소스를 공급해주고 싶습니다. HHVM에 대한 itepoint 기사와 미래에 해킹에 대한 더 많은 itepoint 기사를보고 싶다면 아래에 의견을 추가하여 주제를 제안하는 것을 망설이지 마십시오. <questions> 해킹 PHP 교체 hhvm </questions></ally> </h3>에 대한 자주 묻는 질문 (FAQ) <ph> HACK PHP 교체 HHVM hhvm? <p> </p> HACK PHP 교체 HHVM은 HIPHOP Virtual Machine으로도 알려진 HAK 및 PHP로 작성된 프로그램을 실행하도록 설계된 오픈 소스 가상 머신입니다. HHVM은 PHP가 제공하는 개발 유연성을 유지하면서 우수한 성능을 달성하기 위해 JIT (Just-In) 컴파일 방식을 사용하여.<h> HHVM은 기존의 PHP와 어떻게 다릅니 까? <h3> HHVM은 실행의 전통적인 PHP와 다릅니다. PHP는 런타임시 코드를 해석하는 동안 HHVM은 PHP 또는 해킹 코드를 높은 수준의 바이트 코드로 컴파일 한 다음 기계 코드로 변환됩니다. 이 프로세스는 성능과 효율성을 향상시킬 수 있습니다. </h3> <p> 핵 프로그래밍 언어는 무엇입니까? </p> Hack은 Facebook에서 발명 한 HHIPHOP Virtual Machine (HHVM)의 프로그래밍 언어입니다. 그것은 PHP의 방언이며 정적 타이핑, 유형 주석 및 제네릭과 같은 새로운 기능이 포함되어 있으며 전통적인 PHP에서 사용할 수없는 <h3> PHP에서 해킹이 어떻게 개선됩니까? </h3> <p> hack 도입 PHP를 개선하는 몇 가지 기능. 정적 타이핑이 포함되어있어 잠재적 인 런타임 오류를 방지 할 수 있습니다. 또한 비동기 프로그래밍을 지원하여 I/O 운영을보다 효율적으로 처리 할 수 ​​있습니다. 또한 해킹에는 고성능의 강력한 데이터 구조 인 컬렉션이 포함되어 있습니다. </p> HHVM은 모든 PHP 코드와 호환됩니까? <h3> </h3> HHVM은 대부분의 PHP 코드와 호환되는 것을 목표로합니다. JIT 컴파일 프로세스의 특성으로 인해 약간의 차이가있을 수 있습니다. 그러나 HHVM은 기존 PHP 코드를 HHVM으로 마이그레이션하는 데 도움이 될 수있는 'HHVM-AUTOLOAD'라는 도구를 제공합니다. hhvm은 성능을 어떻게 향상 시키는가? <p> </p> HHVM은 JUST-In을 사용하여 성능을 향상시킵니다. -시간 (JIT) 컴파일 접근. 즉, 런타임에 PHP 코드를 해석하는 대신 HHVM은 코드를 높은 수준의 바이트 코드로 컴파일 한 다음 기계 코드로 변환됩니다. 이 프로세스를 사용하면 더 빠른 실행과 효율성을 향상시킬 수 있습니다. <h3> </h3> hhvm없이 해킹을 사용할 수 있습니까? <p> </p> 아니요, 해킹은 hhiphop 가상 머신 (HHVM)을 위해 특별히 설계된 프로그래밍 언어입니다. 따라서 해킹을 사용하려면 hhvm을 설치해야합니다. <h3> 해킹은 정적으로 입력 한 언어를 해킹합니까? </h3> <p> 예, 해킹은 정적으로 입력 한 언어입니다. 이것은 변수의 유형이 컴파일 시간에 점검되어 잠재적 인 런타임 오류를 방지 할 수있는 데 도움이 될 수 있음을 의미합니다. </p> Hack over PHP를 사용하는 것의 이점은 무엇입니까? <h3> </h3> Hack은 PHP보다 몇 가지 이점을 제공합니다. 정적 타이핑, 비동기 프로그래밍 및 컬렉션을 포함한. 이러한 기능은 코드 안전, 효율성 및 성능을 향상시키는 데 도움이 될 수 있습니다. <p> </p> HHVM 및 해킹 사용을 시작하는 방법은 무엇입니까? <h3> HHVM 사용을 시작하고 해킹을 시작하려면 시스템에 HHVM을 설치해야합니다. 설치되면 해킹에 코드를 작성하고 HHVM 런타임을 사용하여 실행할 수 있습니다. 시작하는 데 도움이되는 몇 가지 리소스와 튜토리얼도 있습니다. </h3></h></ph></h></problems></the></that></lot></to></ron></x></ext></tuto></select></we>

위 내용은 해킹, HHVM의 PHP 교체를 살펴 봅니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿