{{위키데이터 속성 추적}}
[[파일:Hack (programming language) logo.svg|200px|핵 프로그래밍 언어의 로고|섬네일]]

'''핵'''(Hack)은 [[힙합 가상 머신]](HHVM)을 위한 [[프로그래밍 언어]]로서, [[페이스북]]이 [[PHP]]의 방언 개념으로 개발한 것이다. 언어 구현체는 [[오픈 소스 소프트웨어|오픈 소스]]이며 [[BSD 허가서]]를 통해 배포된다.<ref name="license">{{웹 인용| url = https://github.com/facebook/hhvm/blob/master/hphp/hack/LICENSE | title = facebook/hhvm: hhvm / hphp / hack / LICENSE | date = 2014-03-20 | accessdate = 2014-08-11 | website = github.com | publisher = [[Facebook]]}}</ref><ref name="oreilly">{{웹 인용
 | url = http://radar.oreilly.com/2014/04/facebooks-hack-hhvm-and-the-future-of-php.html
 | title = Facebook’s Hack, HHVM, and the future of PHP
 | date = 2014-04-03
 | accessdate = 2014-08-02
 | author = Josh Lockhart
 | publisher = [[오라일리 미디어]]
 | archive-date = 2019-01-07
 | archive-url = https://web.archive.org/web/20190107074312/http://radar.oreilly.com/2014/04/facebooks-hack-hhvm-and-the-future-of-php.html
 }}</ref><ref>{{웹 인용
 | url = https://www.wired.com/wiredenterprise/2014/03/facebook-hack/
 | title = Facebook Introduces 'Hack,' the Programming Language of the Future
 | date = 2014-03-20 | accessdate = 2014-04-15
 | author = Cade Metz | publisher = [[와이어드 (잡지)|Wired]]
}}</ref>

핵은 프로그래머들이 [[자료형 체계|동적 타이핑]]과 [[자료형 체계|정적 타이핑]]을 둘 다 사용할 수 있게 한다. 이러한 종류의 [[자료형 체계]]는 [[그래듀얼 타이핑]]이라고 부르며, [[액션스크립트]]와 같은 다른 프로그래밍 언어에도 구현되어 있다.<ref>{{웹 인용
 | url = https://www.cs.umd.edu/~avik/papers/iogti.pdf
 | title = The Ins and Outs of Gradual Type Inference
 | date = January 2012 | accessdate = 2014-09-23
 | author1 = Aseem Rastogi | author2 = Avik Chaudhuri | author3 = Basil Hosmer
 | publisher = [[ACM]] (ACM) | format = PDF
}}</ref> 핵의 자료형 체계는 [[함수]]의 인수, 함수의 [[Return 문|반환값]], [[클래스 (컴퓨터 과학)|클래스 속성]]에 대해 타입을 지정할 수 있게 한다. 그러나 [[지역 변수]]의 자료형은 언제나 추론적이므로 지정할 수 없다.<ref name="oreilly" /><ref name="hack.annotations">{{웹 인용
 | url = https://docs.hhvm.com/hack/types/annotations
 | title = Hack Manual: Hack and HHVM –  Type Annotations
 | accessdate = 2015-12-29
 | website = docs.hhvm.com
}}</ref>

== 역사 ==
핵은 2014년 3월 20일 선보였다.<ref>{{웹 인용|url=https://code.facebook.com/posts/264544830379293/hack-a-new-programming-language-for-hhvm/ |title=Hack: a new programming language for HHVM |website=code.facebook.com |publisher=[[페이스북]] |date= |accessdate=2014-03-23}}</ref> 새로운 프로그래밍 언어의 발표 이전에 페이스북은 이미 해당 코드를 구현해 놓았고 자사의 웹사이트 중 상당 부분에 배틀 테스트(battle test)를 진행했다.

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

<syntaxhighlight lang="php">
<?hh
echo 'Hello World';
</syntaxhighlight>

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

<syntaxhighlight lang="text">
Hello World
</syntaxhighlight>

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

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

이러한 유형의 코드는 핵에 의해 지원되지 않는다. 이 경우 [[XHP]]나 다른 [[웹 탬플릿 시스템|탬플릿 엔진]]의 사용이 필요하다.<ref name="unsupported">{{웹 인용 | url = https://docs.hhvm.com/hack/unsupported/introduction | title = Hack Manual: Hack and HHVM –  Unsupported PHP Features in Hack | accessdate = 2014-04-02 | website = docs.hhvm.com | 보존url = https://web.archive.org/web/20151209232852/http://docs.hhvm.com/hack/unsupported/introduction | 보존날짜 = 2015-12-09 | url-status = dead }}</ref>

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

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

== 같이 보기 ==
* [[KPHP]]
* [[패럿 가상 머신]]

== 각주 ==
{{각주}}

== 외부 링크 ==
* Official {{공식 웹사이트}}, {{공식 웹사이트|https://hacklang.org/tutorial.html|tutorial}} and {{공식 웹사이트|https://docs.hhvm.com/hack/|language reference}}
* [https://www.infoworld.com/article/2610885/facebook-q-a--hack-brings-static-typing-to-php-world.html?page=2 Facebook Q&A: Hack brings static typing to PHP world]
* [https://docs.hhvm.com/hack/tools/hackificator A tutorial on converting an existing PHP project to Hack]

{{프로그래밍 언어}}
{{PHP}}
{{메타 둘러보기}}

[[분류:2014년 소프트웨어]]
[[분류:페이스북]]
[[분류:PHP 소프트웨어]]
[[분류:2014년 개발된 프로그래밍 언어]]
[[분류:스크립트 언어]]
[[분류:정적 타입 프로그래밍 언어]]
[[분류:동적 타입 프로그래밍 언어]]