본문 바로가기
Kotlin/Release Notes

[Kotlin Release Notes] Kotlin/Native v0.5 released: calling Kotlin from Swift and C, LLVM 5 and more

by 노력남자 2023. 9. 5.
반응형

2017년 12월 19일

 

Kotlin/Native v0.5 크리스마스 에디션의 릴리스를 기쁘게 알려드립니다! 이 릴리스는 C, Objective-C 및 Swift에서 Kotlin/Native 코드를 사용할 수 있도록 지원을 추가하며, iOS 시뮬레이터를 사용한 개발을 지원하며, LLVM 5 지원과 Linux 및 Windows 호스트에서 WebAssembly 생성을 지원합니다.

 

Objective-C 및 Swift에서 역 상호 운용성


이전 Kotlin/Native 릴리스에서는 Objective-C 헤더를 제공한다고 가정하여 Kotlin/Native에서 Apple 프레임워크를 호출하는 것을 소개했습니다. 이제 우리는 그와 반대로 Swift 및 Objective-C에서 Kotlin 코드를 호출하는 지원을 추가하였습니다. 이를 위해 -produce framework라는 새로운 컴파일러 옵션이 구현되었습니다. 이 옵션은 완전한 프레임워크를 생성하여 애플리케이션의 다른 부분에서 사용할 수 있도록 해줍니다. 마치 Swift로 작성된 것처럼 말이죠. 계산기 예제를 살펴보겠습니다. 이 예제는 Swift로 작성된 UI와 Kotlin으로 작성된 계산기 로직을 포함하고 있습니다. Swift 코드가 Kotlin과 투명하게 혼합됩니다. 예를 들어 다음 Swift 코드 라인은:

 

private let parser = KAPPartialParser(composer: KAPCalculator(), partialComposer: PartialRenderer())


이 코드는 PartialParser라는 Kotlin 클래스의 인스턴스를 생성하고, Kotlin 인터페이스 ExpressionComposer를 구현한 Swift 클래스 PartialRenderer의 인스턴스를 제공합니다.

기본적인 숫자 및 문자열과 같은 기본 유형은 Swift와 Kotlin 간에 투명하게 매핑됩니다.

프로젝트를 빌드하려면 XCode에서 열고 실제 기기 또는 시뮬레이터를 위해 컴파일하면 됩니다. 자세한 내용은 README.md를 참조하십시오.


그리고 IntelliJ IDEA에서 코틀린 코드:

 


C에서의 역 상호 운용성


다른 플랫폼에서도 Kotlin/Native 코드를 외부에서 호출할 수 있는 역 상호 운용성을 지원합니다. 현대 언어의 최저 공통 분모는 C이므로 C와의 상호 운용성을 지원합니다. -produce dynamic이라는 컴파일러 옵션은 Kotlin/Native 코드와 함께 작동하는 데 필요한 모든 것을 포함하는 동적 라이브러리 (예: macOS에서는 .dylib, Linux에서는 .so, Windows에서는 .dll)를 생성합니다. 이를 흥미롭게 만들기 위해 Kotlin/Native 객체를 호출하는 Python 확장을 생성하여 이 상호 운용성을 보여주기로 결정했습니다. Python은 C 구현을 호출하고, C는 Kotlin 구현을 다음과 같이 호출합니다:

 

if (PyArg_ParseTuple(args, "Lss", &session_arg, &string_arg1, &string_arg2)) {
       T_(Server) server = getServer();
       T_(Session) session = { (void*)(uintptr_t)session_arg };
       const char* string = __ kotlin.demo.Server.concat(server, session, string_arg1, string_arg2);
       result = Py_BuildValue("s", string);
       __ DisposeString(string);
    } else {
        result = Py_BuildValue("s", NULL);
    }


Kotlin/Native 컴파일러는 동적 라이브러리를 생성하고, 그런 다음 Python distutils 빌드 도구는 그에 따라 다른 동적 라이브러리를 생성합니다. 따라서 Python 런처 코드는 C 브릿지를 통해 Kotlin/Native 객체를 호출하고 객체와 원시 유형을 모두 적절하게 변환합니다.


기타 개선 사항

 

  • Kotlin 1.2에서는 kotlin.math 패키지가 Kotlin 표준 라이브러리에 추가되었습니다. v0.5에서는 kotlin.math 패키지에서 사용 가능한 연산을 지원합니다.
  • 이 릴리스에서 LLVM 5.0.0을 지원합니다. clang 도구 체인 및 비트코드 코드 생성기 및 옵티마이저 모두를 포함합니다.
  • WebAssembly 대상용 코드 (-target wasm32)는 이제 Linux 및 Windows 호스트에서 생성할 수 있습니다. (이전에는 macOS 호스트만 지원되었습니다)
  • Worker API는 워커 실행 결과를 더 쉽게 사용할 수 있도록 개선되었으며, 워커에서 원시 값 전달 및 전달 기능이 추가되었습니다.
  • 버그 수정 및 개선 사항

 

비트 가져오기


아래에서 바이너리를 다운로드할 수 있습니다:

x86-64 macOS 호스트
x86-64 Linux 호스트
x86-64 Windows 호스트


피드백


버그와 이슈는 Kotlin 버그 트래커에 보고해주시기 바랍니다. 질문은 Slack의 #kotlin-native 채널에서 환영합니다. (초대장은 여기에서 받을 수 있습니다).

 

원문

 

https://blog.jetbrains.com/kotlin/2017/12/kotlinnative-v0-5-released-calling-kotlin-from-swift-and-c-llvm-5-and-more/

반응형

댓글