Haxe

Haxe
Haxe
Haxe logo.svg
패러다임다중 패러다임
개발자Haxe 재단
처음 등장한2005년 11월 14일, 16년 전(2005년 11월 14일)
안정된 릴리스
4.2.5[1] / 2022년 3월 6일; 5개월 (2022년 3월 6일)
타이핑 분야정적, 주석을 통한 동적, 공칭
구현 언어OCaml
플랫폼IA-32, x86-64, AArch64, armel, armhf, mips64el, mipsel, ppc64el, s390x
OSAndroid, iOS, Linux, macOS, Windows
면허증.GPL 2.0, 라이브러리: MIT
파일 이름 확장자.hx, .hxml
웹 사이트haxe.org Edit this at Wikidata
영향을 받다
EcmaScript, OCaml, Java, JavaScript, C++, PHP, C#, Python, Lua, ActionScript, NekoVM

Haxe는 오픈 소스[2] 고급 크로스 플랫폼 프로그래밍 언어 컴파일러로 하나의 코드 베이스에서 다양한 컴퓨팅 플랫폼을 위한 애플리케이션과 소스 코드를 생성할 수 있습니다. 소프트웨어는 MIT 라이선스에 따라 출시된 무료 오픈 소스 소프트웨어입니다.OCaml로 작성된 컴파일러는 GNU General Public License(GPL) 버전 2로 출시됩니다.

Haxe에는 숫자 데이터 유형, 문자열, 어레이, , 바이너리, 리플렉션, 수학, HTTP, 파일 시스템 및 공통 파일 형식 등 모든 플랫폼에서 지원되는 일련의 기능과 표준[3] 라이브러리가 포함되어 있습니다.Haxe는 각 컴파일러 [4]대상에 대한 플랫폼별 API도 포함합니다.Kha, OpenFLHeaps.io은 하나의 코드베이스에서 [5]멀티플랫폼 콘텐츠를 만들 수 있는 일반적인 Haxe 프레임워크입니다.

Haxe는[6] 클라이언트 서버 측 프로그래밍을 하나의 언어로 지원하고 이들 간의 통신 로직을 단순화하는 아이디어에서 비롯되었습니다.Haxe 언어로 작성된 코드는 JavaScript, C++, Java, JVM, PHP, C#, Python, Lua[7] 및 Node.js[8]컴파일할 수 있습니다.Haxe는 SWF, HashLinkNekoVM 바이트 코드를 직접 컴파일할 수 있으며 인터프리터 [9]모드로 실행할 수도 있습니다.

Haxe는 C++ 헤더 파일이 기존 오브젝트 파일의 구조를 기술할 수 있는 것처럼 타겟 고유의 상호작용을 타입 세이프 방식으로 기술하기 위해 기존 라이브러리의 타입 정보를 포함할 수 있는 외부(정의 파일)를 지원합니다.그러면 파일에 정의된 값을 Haxe 엔티티인 것처럼 사용할 수 있습니다.외부 솔루션 외에도 각 플랫폼의 기본 기능에 액세스할 수 있는 다른 솔루션이 있습니다.

널리 사용되는 많은 IDE 소스 코드 편집기는 Haxe [10]개발을 지원합니다.VS Code, IntelliJ IDEA 및 Haxe Develope는 Haxe 개발을 가장 많이 지원하지만 Haxe Foundation에서 공식적으로 권장하는 개발 환경이나 툴 세트는 없습니다.구문 강조, 코드 완성, 리팩터링, 디버깅 등의 핵심 기능을 다양한 수준으로 사용할 수 있습니다.

역사

Haxe의 개발은 2005년 10월에 시작되었다. 번째 알파 버전은 2005년 [11][12]11월 14일에 출시되었습니다.Haxe 1.0은 Adobe Flash, JavaScriptNekoVM 프로그램을 지원하여 2006년 4월에 출시되었습니다.PHP 지원은 2008년에 추가되었고 C++는 2009년에 추가되었습니다.2012년에 컴파일러 오버홀을 통해 C# 및 Java와 같은 플랫폼이 추가되었습니다.

Haxe는 Nicolas Cannasse와 다른 기고자들에 의해 개발되었으며, 원래 haxe라는[13] 이름은 짧고 단순하며 "내부 X"가 있기 때문에 지어졌습니다. 저자는 새로운 기술을 [14]성공시키기 위해서는 유머러스하게 이것이 필요하다고 주장합니다.

Haxe는 오픈 소스 ActionScript 2 컴파일러 MTACSC의 [15]후속 제품으로 니콜라스 칸나스에 의해 구축되었으며 GNU General Public License 버전 2 이후에 출시되었습니다.

컴파일러

Haxe 언어는 대상 가상 시스템에서 직접 실행할 수 있는 바이트 코드로 컴파일할 수 있습니다.C++, JavaScript, PHP, C#, Java, Python 및 Lua소스 코드로 컴파일할 수 있습니다.Haxe는 또한 [16]eval이라고 불리는 통역사를 가지고 있다.이 인터프리터는 AST를 수정할 수 있는 매크로를 실행하기 위해 컴파일 타임에도 사용됩니다.

여러 소스 코드 언어로 컴파일하는 이 전략은 Write Once Run Anywhere 패러다임에서 영감을 얻었습니다.또한 프로그래머가 작업에 가장 적합한 플랫폼을 선택할 수 있습니다.일반적인 Haxe 프로그램은 모든 플랫폼에서 동일하게 실행되지만 개발자는 플랫폼 고유의 코드를 지정하고 조건부 컴파일을 사용하여 다른 플랫폼에서 컴파일되지 않도록 할 수 있습니다.

Haxe 컴파일러는 최적화 컴파일러이며 컴파일된 [17]프로그램의 런타임 성능을 최적화하기 위해 필드함수 인라인화, 테일 재귀 제거, 지속적인 폴딩, 루프 롤링 및 데드 코드 제거(DCE)를 사용합니다.Haxe 컴파일러는 opt-in null-safety를 제공하며 컴파일 시간에 null 가능한 값을 확인합니다.

대상

Haxe에서는 지원되는 플랫폼을 "타깃"이라고 하며 다음 모듈로 구성됩니다.

  • 컴파일러는 각 코드를 생성하는 역할을 합니다.
  • 코어 언어 지원(플랫폼 타깃)을 넘어서는 런타임 고유의 API.

다음 표에서는 Haxe 플랫폼 및 언어 지원에 대해 설명합니다.Haxe 언어를 사용하면 개발자는 많은 플랫폼 기능에 액세스할 수 있지만 Haxe는 완전한 기능을 갖춘 엔진이 아니기 때문에 특정 플랫폼의 콘텐츠를 만들 수 있는 프레임워크가 필요할 수 있습니다.

Haxe 컴파일러[9] 대상
이름. 계층 산출량 플랫폼 사용하다 Haxe 버전 이후
네코 3 바이트 코드 NekoVM 서버, 데스크톱, CLI 2005년(알파)
플래시/SWF 3 바이트 코드 플래시: AVM2, Flash Player 9+, AIR 데스크톱, 브라우저, 서버 2005년(알파)
자바스크립트 1 원천 JavaScript: HTML5, NodeJS, PhoneGap 서버, 데스크톱, 브라우저, 모바일 2006년 (최종)
액션 스크립트 원천 Action Script 3: AIR, Flex, Royale 서버, 데스크톱, 브라우저, 모바일 2007년(1.12), 2019년(4.0) 이후 삭제
PHP 1 원천 Zend 엔진 서버 2008 (2.0) PHP 5, 2019년 이후 PHP 7 (4.0)
C++ 2 원천 C++: Windows, Linux, macOS, Android, iOS, Palm, WebOS 서버, 데스크톱, 모바일, CLI, 게임 콘솔 2009년(2.04); 2014년에 cpia 추가(3.2)
C# 3 원천 C#: .NET Framework ,NET 코어, 모노 서버, 데스크톱, 모바일 2012 (2.10)
자바 3 원천 Java: Java OpenJDK 서버, 데스크톱 2012 (2.10)
파이썬 3 원천 파이썬 CLI, Web, 데스크톱 2014 (3.2)
루아 2 원천 루아 CLI, Web, 데스크톱, 모바일 2016 (3.3)
해시링크 1 바이트 코드 HashLink VM 또는 HL/C(C 파일에 컴파일) 서버, 데스크톱, 모바일, 게임 콘솔(C 내보내기) 2016 (3.4)
JVM 1 바이트 코드 JVM: 핫스팟, OpenJ9 서버, 데스크톱 2019 (4.0)
평가 1 통역사 Haxe 인터프리터 프로토타이핑, 스크립트 작성 2019 (4.0)

Haxe의 장점

  • 같은 언어를 사용하여 여러 플랫폼과 디바이스를 타깃으로 하는 기능
  • 엄밀하게 입력된 코드를 사용할 수 있는 기능
  • Haxe[18] 언어로 실행할 수 있는 매크로 사용(구문 변환) 기능
  • 확장 방법 및 기능 프로그래밍 의 언어 기능 추가
  • Haxe 프로그램의 런타임 성능은 손으로 쓴 [19]소스와 비슷한 속도입니다.

언어

Haxe는 객체 지향 프로그래밍, 일반 프로그래밍 및 다양한 기능 프로그래밍 구조를 지원하는 범용 언어입니다.반복, 예외코드 리플렉션과 같은 기능도 언어와 라이브러리의 내장 기능입니다.Haxe는 프로그래밍 언어 중에서도 이례적으로 강력하고 역동적인 타입 시스템을 포함하고 있습니다.컴파일러는 타입인 컨퍼런싱을 사용하여 암묵적으로 타입을 체크하고 컴파일 시 에러를 발생시키지만 프로그래머는 타입 체크를 바이패스하여 타깃 플랫폼의 동적 타입 처리에 의존할 수도 있습니다.모든 네이티브 타깃 API를 사용할 수 있습니다.

유형계

Haxe는 정교하고 유연한 시스템을 갖추고 있습니다.제공되는 유형 종류에는 클래스, 인터페이스, 함수 메서드 유형, 익명 유형, 대수 데이터 유형(Haxe에서는 열거형이라고 함) 및 추상 유형이 있습니다.파라메트릭 다형성은 클래스, 대수적 유형 및 함수 유형에 따라 가능하며, 유형 삭제에 기초한 범용 프로그래밍에 대한 언어 지원을 제공합니다.여기에는 유형 생성자에는 없지만 다형 함수의 분산에 대한 지원이 포함됩니다.

동적 입력에 대한 주석이 없는 한 유형 시스템은 정적이며, 이를 지원하는 표적에 사용할 수 있습니다.형식 확인은 구조 입력이 대신 사용되는 익명 유형을 제외하고 공칭 입력에 따릅니다.마지막으로 유형 추론이 지원되므로 유형 주석 없이 변수 선언을 허용합니다.

모듈 및 네임스페이스

모든 Haxe 코드는 모듈로 구성되며, 모듈에는 경로를 사용하여 주소가 지정됩니다.기본적으로 각 .hx 파일은 여러 유형을 포함할 수 있는 모듈을 나타냅니다.예를 들어 유형을 생성하려면A표시된 패키지의 my.pack은 폴더 구조가 my\pack이어야 하며 폴더 내의 파일은 A.hx일 수 있습니다.

 // 파일 my/pack/A.hx 패키지 나의.포장하다;  학급 A {} 

다른 모듈에서는 다른 타입을 Import할 수 있습니다.import패키지 정의 아래의 스테이트먼트(예:import my.pack.A;

모듈에는 다음과 같은 여러 유형을 포함할 수 있습니다.를 사용하여 해당 모듈에서 한 번에 한 유형씩 Import할 수 있습니다.import my.pack2.A;타입은 다음과 같습니다.private이 경우 해당 모듈을 포함하는 모듈만 액세스할 수 있습니다.

패키지 나의.팩2;  유형화된 A = {a:스트링} 사적인 유형화된 B = {b:스트링} 

클래스(키워드)classHaxe의 )는 Java 또는 TypeScript의 경우와 유사합니다.이러한 필드는 각각 정적 또는 인스턴스별로 메서드, 변수 또는 속성 중 하나입니다.Haxe는 접근자를 지원합니다.public그리고.private및 주석을 사용하여 표시되는 접근컨트롤의 보다 고도의 방법.메서드 및 정적 상수 변수는 키워드를 사용하여 인라인화할 수 있습니다.inline. 필드는 다음과 같이 표시할 수 있습니다.final즉시 또는 생성자에서 초기화해야 하며 함수의 경우 기록할 수 없는 상수를 선언한다.final는 서브클래스에서 덮어쓸 수 없는 것으로 표시됩니다.

Haxe의 인터페이스는 Java 등의 인터페이스와 매우 유사합니다.

인터페이스 ICreature {public var birth:날짜; 공용 변수 이름:문자열; 퍼블릭 함수 age():Int; } 클래스 FlyICreature {public var birth:날짜; 공용 변수 이름:문자열; 퍼블릭 함수 age():Int는 Date.now().getFullYear() - birth.getFullYear();}를 반환합니다.

범용

Haxe는 일반 프로그래밍을 지원합니다.다음으로 아이덴티티 함수의 예를 나타냅니다.

기능. 신원< >T>(arg:T):T {  돌아가다 arg; } 

열거형

열거형은 언어의 중요한 기능으로 유형 매개 변수를 가지며 [20]재귀적일 수 있습니다.이들은 대수적 데이터형기본적으로 지원하므로 Haskell ML과 유사한 방식으로 제품 유형을 포함할 수 있습니다. Aswitchexpression을 사용하면 패턴 매칭을 열거값에 적용할 수 있으므로 복잡한 프로그래밍 문제에 대한 우아한 솔루션이 가능합니다.

열거 색상 {red; green; blue; rgb(r:Int, g:Int, b:Int); } 클래스 색상 { static function to Int(c:Color):Int { 리턴 스위치 c { 대/소문자 빨간색: 0xFF0000, 대/문자 녹색: 0x00FF00, 대문자 파란색: 0x0000FF; 대소문자 rgb(r, g, b): (r < 16) (g < < 8) b; }} 정적 함수 validCalls() { var redint = toInt(Color.rgb(100, 100, 100); };

매개 변수 열거 유형의 예로는 Haxe 표준 라이브러리 유형[21] 옵션 및 다음 [22]중 하나가 있습니다.

열거하다 선택< >T> {     몇개(v:T);     없음.; }  열거하다 어느 하나< >L, R> {     왼쪽(v:L);     맞다(v:R); } 

Haxe는 GADT([23][24]Generalized Algebraic Data Type)도 지원합니다.

어나니머스 타입

어나니머스 유형은 유형의 수학적 레코드 기반 표현을 따르는 구문을 사용하여 구조를 명시적으로 나타내 정의됩니다.함수 인수에 대한 구조 입력을 구현하기 위해 사용할 수 있으며(아래 참조), 키워드를 사용하여 에일리어스를 지정할 수 있습니다.typedef:

유형화된 Alias For Anon = { a:내부, b:스트링, c:흘러가다->무효 }; 

기능 타입

함수는 Haxe의 퍼스트 클래스 값입니다.이러한 유형은 많은 기능 언어에서 공통으로 인수 유형 간 및 인수 유형과 반환 유형 간에 화살표를 사용하여 나타납니다.그러나 Haskell이나 ML 언어 패밀리와 달리 모든 함수가 단항 함수인 것은 아니며 Haxe에서는 기본값별로 함수를 부분적으로 적용할 수 없습니다.따라서 다음 유형의 시그니처는 전술한 언어와는 다른 의미를 가집니다.종류F1를 필요로 하는 함수입니다.String인수로서 type의 값을 반환합니다.Float.

종류들F1그리고.F2같은 타입을 나타내다.다만,F2는 라벨이 붙은 파라미터를 사용합니다.이 파라미터는 완성 및 문서화에 도움이 됩니다.

종류들F4그리고.F5같은 타입을 나타냅니다.둘 다 유형의 이진 함수를 반환하는 이진 함수입니다.F3.위해서F5함수 유형 내에서 함수 유형을 선언하는 구문이 사용됩니다.

유형화된 F1 = 스트링 -> 흘러가다; 유형화된 F2 = (본문: 문자열) -> 흘러가다;  유형화된 F3 = (스코어: 내부, 텍스트: 문자열) -> 흘러가다; 유형화된 F4 = (스코어: 내부, 텍스트: 문자열) -> F3; 유형화된 F5 = (스코어: 내부, 텍스트: 문자열) -> ((스코어: 내부, 텍스트: 문자열) -> 흘러가다); 

추상형

Haxe 유형 시스템에 최근에 추가된 것은 추상 유형이라는 개념입니다.Haxe에서 사용되는 것과 같이, 이것은 기존의 추상형과는 다른 것을 말합니다.유형 간 변환을 암묵적으로 수행함으로써 측정 단위를 위한 유형 구현과 같은 특정 목적을 위해 기존 유형을 재사용할 수 있습니다.이는 동일한 기본 유형의 값을 혼용하는 위험을 크게 줄여주지만 다른 의미(예: 마일 대 km)를 갖는다.

다음 예제에서는 메트릭 시스템이 기본이고 레거시 데이터에 대해 마일로 변환해야 한다고 가정합니다.Haxe는 자동으로 마일을 킬로미터로 변환할 수 있지만, 그 반대는 할 수 없습니다.

추상 킬로미터(플로트) {공용 함수 new(v:플로트) = v; } 추상 마일(플로트) {공용 함수 new(v:플로트) = v; @: 공용 인라인 함수에서 킬로미터()반환됨( 킬로미터( / 0.62137)), } 클래스 테스트 {static km:km:Km}  함수 1개// 160.935 } }

예시와 같이 "km = one100Miles;" 할당이 올바른 작업을 수행하기 위해 명시적 변환이 필요하지 않습니다.

구조 타이핑

많은 기능적 프로그래밍 언어에서 구조 타이핑은 중요한 역할을 합니다.Haxe는 이름 있는 유형만 관련된 경우 객체 지향 프로그래밍의 주격 유형을 사용하여 익명 유형이 있는 경우 이를 사용합니다.Haxe의 어나니머스 타입은 입력에 관한 Go 언어의 암묵적인 인터페이스와 유사합니다.Go 인터페이스와 달리 익명 유형을 사용하여 값을 구성할 수 있습니다.

클래스 FooBar {public var foo:Int; 공개 변수 표시줄:문자열; 공용 함수 new() {foo = 1; 막대 = "2"; }이() anyFooBar(v:{foo:Int, bar:String} trace(v.foo), 정적 함수 test() { var fb = new FooBar(); fb.any FooBar(fb), fb.anyFooBar({foo: 123, bar: "456"}; }

내부 아키텍처

컴파일러

Haxe 컴파일러는 1개의 프런트엔드와 복수의 백엔드로 나뉩니다.프런트엔드는 소스 코드에서 Abstract Syntax Tree(AST; 추상 구문 트리)를 생성하여 AST에서 유형 검사, 매크로 확장 및 최적화를 수행합니다.다양한 백엔드는 대상에 따라 처리된 AST를 소스 코드로 변환하거나 바이트 코드를 생성합니다.

컴파일러는 OCaml로 기술되어 있다.서버 모드에서 실행하여 통합 개발 환경(IDE)에 대한 코드 완성을 제공하고 캐시를 유지 관리하여 [25]컴파일 속도를 높일 수 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ https://github.com/HaxeFoundation/haxe/releases/tag/4.2.5 를 참조해 주세요.
  2. ^ "Open Source licence Haxe".
  3. ^ Haxe 표준 라이브러리, Haxe Docs 개요
  4. ^ 대상별 API, Haxe 표준 라이브러리 소개, Haxe Docs
  5. ^ Doucet, Lars (2014-06-24). "Dear Adobe: Support Haxe, save your Tools". Gamasutra.
  6. ^ "Haxe Interview". Io Programmo. 2009-04-01: 1–6. {{cite journal}}:Cite 저널 요구 사항 journal=(도움말)
  7. ^ "Hello Lua! - Haxe".
  8. ^ "hxnodejs".
  9. ^ a b "Compiler Targets". Haxe. Retrieved 2021-11-05.
  10. ^ Haxe, Haxe Foundation을 지원하는 IDE 목록
  11. ^ "Release alpha-1". haxe. HaxeFoundation. 2005-11-14. Retrieved 2022-04-02 – via GitHub.
  12. ^ Cannasse, Nicolas (2005-11-17). "Haxe Alpha 1b". haXe (Mailing list). Archived from the original on 2007-10-26.
  13. ^ "Nicolas' announcement of spelling change on Haxe official mail list".
  14. ^ "Haxe mailing list post on naming". Archived from the original on 2007-03-28.
  15. ^ MTSC 컴파일러, MTSC 웹사이트
  16. ^ "Eval - The new Haxe macro interpreter".
  17. ^ "Compiler Features".
  18. ^ "Macros in Haxe".
  19. ^ Dyachenko, Vadim (2013-12-05). "On "You can't make good HTML5 games in Haxe"". Yellow After Life.
  20. ^ "Haxe reference detailing the use of enum". Archived from the original on 2012-05-11.
  21. ^ "haxe/Option.hx at development · HaxeFoundation/haxe". Github. 7 November 2021.
  22. ^ "haxe/Either.hx at development · HaxeFoundation/haxe". Github. 7 November 2021.
  23. ^ "Language Features". Haxe - The Cross-platform Toolkit. Haxe Foundation. Retrieved 30 April 2015.
  24. ^ "haxe/TestGADT.hx at development · HaxeFoundation/haxe". Github. 7 November 2021.
  25. ^ 서버 모드 명령줄:haxe --wait [host:]port

외부 링크