본문 바로가기
프로그래밍/자바스크립트

프로그래밍 「 자바스크립트 편」GraalVM 언어의 새로운 기능

by grapedoukan 2023. 6. 17.
728x90

이 릴리스에는 많은 업데이트가 있으므로 두 개의 릴리스 블로그 게시물이 있습니다.이 게시물은 GraalVM 언어 및 Truffle 업데이트에 중점을 둡니다. GraalVM JDK 및 Native Image의 새로운 기능은 관련 블로그 게시물로 이동하십시오.

오라클 GraalVM

새로운 배포판인 Oracle GraalVM을 소개합니다! GraalVM 무료 이용 약관(GFTC) 라이선스에 따라 사용할 수 있습니다(FAQ 참조). 사용자의 경우 이는 다음을 의미합니다.

  • 개발 및 프로덕션 용도로 무료입니다.
  • CI/CD 파이프라인에 통합하기 위해 명령줄 또는 스크립트를 통해 쉽게 다운로드할 수 있습니다.
  • Oracle JDK에 부합하는 장기 지원 릴리스

Oracle GraalVM 및 관련 블로그 게시물에서 제공하는 기능에 대해 자세히 읽어보십시오.

GraalPy🐍의 새로운 기능

Windows의 GraalPy

GraalPy는 이제 Windows에서 작동합니다! 🎉 Windows에서 독립 실행형으로 또는 Java에 포함된 기본 워크로드를 빌드하고 실행할 수 있습니다. 시작하려면 가이드를 따르세요.

독립 실행형 Python 응용 프로그램

GraalPy를 사용하면 이제 Python 애플리케이션 또는 라이브러리를 외부 종속성 없이 독립형 바이너리 또는 JAR 파일로 배포할 수 있습니다. GraalPy가 구축된 Truffle 프레임워크와 GraalPy가 Python의 기본 확장을 관리하는 데 활용하는 Sulong LLVM 런타임을 사용하면 표준 라이브러리 및 설치된 패키지에 대한 액세스를 포함하여 Python 애플리케이션의 모든 파일 시스템 액세스를 가상화할 수 있습니다.

이제 다음과 같이 독립 실행 형 실행 파일을 빌드 할 수 있습니다.

graalpy -m standalone binary - module my_script.py - output my_binary

또는 GraalVM에서 실행되고 다음과 같이 GraalPy를 포함하는 JAR 파일을 포함할 수 있습니다.

graalpy -m standalone java - output-directory MyJavaApplication - module my_script.py

호환성 및 성능

  • 기본적으로 완전한 네이티브 실행을 사용하는 Python C API 인터페이스의 새로운 구현을 추가했습니다. 이렇게 하면 네이티브 코드에서 많은 시간을 소비하는 일부 확장과의 성능 및 호환성이 향상되지만 Python과 네이티브 코드 간에 자주 교차하는 워크로드에 부정적인 영향을 미칠 수 있습니다. 확장을 빌드하고 실행하는 방법을 제어하는 새로운 옵션이 있습니다. 새로운 기본값은 GraalVM과 함께 제공되는 LLVM 툴체인 대신 호스트 시스템의 툴체인을 사용하여 확장을 빌드하고 모든 모듈을 기본적으로 실행하는 것입니다.python.NativeModulespython.UseSystemToolchain
  • GraalPy 성능에 대한 아이디어를 얻으려면 GraalPy 페이지에서 업데이트된 수치를 살펴보십시오. 커뮤니티의 벤치마크 제품군을 기반으로 하므로 구현 간에 이러한 수치를 쉽게 비교할 수 있습니다.pyperformance

Python Performance 제품군에서 CPython에 대한 GraalPy의 기하 평균 속도 향상

  • 우리는 업데이트 및 버전을 추가하고 .numpypandas scipyscikit_learnginstall
  • 언어 버전과 표준 라이브러리를 3.10.8로 업데이트하여 최신 모듈 및 패키지와 호환되도록 했습니다.
  • 에 대한 초기 지원을 추가했습니다. 완료되지는 않았지만 이미 다음과 같은 일부 비동기 라이브러리가 작동할 수 있습니다.asyncioaiofiles
  • virtualenv용 GraalPy 플러그인을 내장 모듈로 추가했으므로 GraalPy에서 virtualenv를 사용하여 가상 환경을 만드는 것이 즉시 작동합니다.

트러플루비

TruffleRuby가 루비 3.1.3으로 업데이트되었습니다. 또한 외래 큰 정수가 지원되며 모든 연산자에서 작동합니다.Numeric

또한 성능 향상을 위해 몇 가지 사항을 변경했습니다.

  • YAML을 구문 분석 할 때 워밍업을 향상시키는 psych에 시스템 libyaml을 사용하십시오.
  • 오브젝트에 래핑된 네이티브 구조의 표시는 이제 메모리 오버헤드를 줄이기 위해 C 호출 엑시트에서 수행됩니다.
  • 를 구현하여 호출 대상의 분할(복사)을 최적화했습니다.cloneUninitialized()
  • Process.pid 이제 와 같은 프로세스별로 캐시됩니다.$$

프로젝트 변경 로그에서 이 릴리스의 TruffleRuby 업데이트에 대한 더 많은 내용을 확인하세요. 또한 이 릴리스에 많은 기여를 해주신 Shopify에도 감사드립니다.

GraalJS 및 Node.js

Node.js를 버전 18.14.1로 업데이트했습니다. 상호 운용성 지원도 추가했습니다. foreign은 JS 의미 체계를 옵트인하기 위해 함수를 사용하여 명시적 유형 캐스트가 필요합니다. 기본 의미 체계는 원래 값이나 형식에 관계없이 모든 외래 숫자를 JavaScript 값과 같이 처리하는 것입니다. 우리는 또한 몇 가지 새로운 ECMAScript 제안을 구현했습니다 — 프로젝트 변경 로그의 모든 변경 사항을 참조하세요.BigIntegerBigIntegersBigIntBigIntNumber

다국어(Polyglot) 샌드박싱

GraalVM을 사용하면 Java 애플리케이션이 Polyglot Embedding API를 통해 다른 언어로 작성된 코드(게스트 코드)를 실행할 수 있습니다. 이 새 릴리스에서는 이제 게스트 코드에 대한 권한을 제한하는 샌드박스 정책을 설정할 수 있습니다. 다국어를 구사하는 샌드박싱의 이점을 누릴 수 있는 몇 가지 사용 사례가 있습니다.

  • 제3자 종속성 실행;
  • 사용자 플러그인;
  • 서버 스크립팅.

다음 정책 중에서 선택할 수 있습니다.

  • trusted: 전적으로 신뢰할 수 있는 게스트 코드를 위한 것입니다. 기본 모드이기도 합니다.
  • constrained: 호스트 리소스에 대한 규제된 액세스를 적용합니다. 예를 들어 호스트 파일 및 소켓 액세스를 허용하지 않습니다.
  • isolated: 복원력 향상을 위해 호스트와 게스트 코드 간의 심층 격리 제공 — 게스트 코드는 자체 가비지 수집기 및 JIT 컴파일러를 사용하여 별도의 힙에서 실행됩니다.
  • untrusted: 신뢰할 수 없는 게스트 코드를 위한 것입니다. 샌드박스는 컴파일러 및 런타임 수준에서 추가 강화 메커니즘을 사용하여 투기적 실행 공격(예: 예측 실행 공격)을 완화합니다.

현재 JavaScript에서 다국어 샌드박싱을 사용할 수 있으며 향후 릴리스에서 더 많은 언어를 추가할 계획입니다. 가이드에서 자세히 알아보세요.

Truffle 언어 및 도구 구현

성능 향상을 위해 Truffle DSL에 대한 몇 가지 새로운 기능을 구현했습니다. 특히 새로운 주석을 통해 Truffle 노드를 자동으로 객체 인라인할 수 있어 메모리 사용량을 줄이고 인터프리터 실행 속도를 개선할 수 있습니다. 자세한 내용은 설명서를 참조하고 자세한 내용은 프로젝트 변경 로그를 참조하세요.@GenerateInline

Polyglot 임베딩

Polyglot Value API에 추가했습니다. 기본적으로 java.lang.BigInteger 유형의 모든 호스트 값은 이제 숫자 값으로 해석됩니다. 긴 값에 맞지 않는 숫자를 해석하기 위한 언어 지원은 다를 수 있습니다. JavaScript와 같은 일부 언어에서는 호스트 큰 정수의 명시적 변환이 필요할 수 있습니다. Ruby 또는 Python과 같은 다른 언어는 명시적 변환 없이 큰 정수를 사용할 수 있습니다. 게스트 언어를 통해 전달되는 값에도 동일하게 적용됩니다.java.lang.BigInteger(Value.isNumber())

결론

이 기회를 빌어 이 릴리스에 포함된 모든 피드백, 제안 및 기여에 대해 커뮤니티에 감사를 표하고 싶습니다. 이 릴리스에 대한 추가 피드백이나 향후 릴리스에서 보고 싶은 기능에 대한 제안이 있는 경우 Slack, GitHub 또는 Twitter에서 공유해 주세요.

728x90