핵 (프로그래밍 언어)

(Hack)은 힙합 가상 머신(HHVM)을 위한 프로그래밍 언어로서, 페이스북PHP의 방언 개념으로 개발한 것이다. 언어 구현체는 오픈 소스이며 BSD 허가서를 통해 배포된다.[1][2][3]

핵 프로그래밍 언어의 로고

핵은 프로그래머들이 동적 타이핑정적 타이핑을 둘 다 사용할 수 있게 한다. 이러한 종류의 자료형 체계그래듀얼 타이핑이라고 부르며, 액션스크립트와 같은 다른 프로그래밍 언어에도 구현되어 있다.[4] 핵의 자료형 체계는 함수의 인수, 함수의 반환값, 클래스 속성에 대해 타입을 지정할 수 있게 한다. 그러나 지역 변수의 자료형은 언제나 추론적이므로 지정할 수 없다.[2][5]

역사편집

핵은 2014년 3월 20일 선보였다.[6] 새로운 프로그래밍 언어의 발표 이전에 페이스북은 이미 해당 코드를 구현해 놓았고 자사의 웹사이트 중 상당 부분에 배틀 테스트(battle test)를 진행했다.

문법 및 시맨틱편집

핵 스크립트의 기본 파일 구조는 몇 가지 변경사항이 포함된 PHP 스크립트와 비슷하다. 핵 파일은 PHP 스크립트에 대해 <?php에 반대되는 <?hh로 시작한다:

<?hh
echo 'Hello World';

PHP와 비슷한 상기의 스크립트는 실행된 이후 다음의 출력을 브라우저로 보낸다:

Hello World

여기서 중요한 점은 PHP와 달리 핵과 HTML 코드는 서로 섞이지 않는다. 일반적으로 PHP와 HTML 코드를 같은 파일에 다음과 같이 혼재된다:

<html>
    <head>
        <title>PHP Test</title>
    </head>
    <body>
        <!-- hh and html do not mix -->
        <?php echo '<p>Hello World</p>'; ?>
    </body>
</html>

이러한 유형의 코드는 핵에 의해 지원되지 않는다. 이 경우 XHP나 다른 탬플릿 엔진의 사용이 필요하다.[7]

함수편집

핵 언어에서는 함수의 인수, 함수의 반환값에 대해 자료형을 지정할 수 있다. 핵의 함수는 그러므로 다음과 같은 자료형으로 어노테이션(annotation) 처리를 할 수 있다:

<?hh
// Hack functions are annotated with types.
function negate(bool $x): bool {
    return !$x;
}

같이 보기편집

각주편집

  1. “facebook/hhvm: hhvm / hphp / hack / LICENSE”. 《github.com》. Facebook. 2014년 3월 20일. 2014년 8월 11일에 확인함. 
  2. Josh Lockhart (2014년 4월 3일). “Facebook’s Hack, HHVM, and the future of PHP”. 오라일리 미디어. 2019년 1월 7일에 원본 문서에서 보존된 문서. 2014년 8월 2일에 확인함. 
  3. Cade Metz (2014년 3월 20일). “Facebook Introduces 'Hack,' the Programming Language of the Future”. Wired. 2014년 4월 15일에 확인함. 
  4. Aseem Rastogi; Avik Chaudhuri; Basil Hosmer (January 2012). “The Ins and Outs of Gradual Type Inference” (PDF). ACM (ACM). 2014년 9월 23일에 확인함. 
  5. “Hack Manual: Hack and HHVM – Type Annotations”. 《docs.hhvm.com》. 2015년 12월 29일에 확인함. 
  6. “Hack: a new programming language for HHVM”. 《code.facebook.com》. 페이스북. 2014년 3월 23일에 확인함. 
  7. “Hack Manual: Hack and HHVM – Unsupported PHP Features in Hack”. 《docs.hhvm.com》. 2015년 12월 9일에 원본 문서에서 보존된 문서. 2014년 4월 2일에 확인함. 

외부 링크편집