แนวคิดหลัก
C++ 객체의 대부분의 공개 속성과 메서드를 소비 환경(스크립팅 언어, 웹 클라이언트 등)에 노출하는 "풍부한 API"를 구현하는 방법을 제시한다.
บทคัดย่อ
이 논문은 C++ 객체를 소비 환경에 노출하기 위해 Classdesc 시스템을 사용하여 REST 서비스와 Node.js API 모듈을 통해 JavaScript/TypeScript 환경으로 반사(reflection)하는 방법을 탐구한다.
C++ 공개 속성은 암시적인 setter/getter 메서드 쌍으로 매핑된다. C++ 메서드 오버로딩은 JavaScript의 동적 타입 특성을 활용하여 구현된다. TypeScript는 정적 타입 검사를 제공하여 더 안전한 스크립팅 코드를 작성할 수 있게 한다.
Python 바인딩도 구현되었지만, 기존 boost-python 라이브러리의 한계로 인해 저수준 Python C API를 사용하여 구현되었다.
빌드 시간 최적화를 위해 다양한 기술이 적용되었는데, 명시적 템플릿 인스턴스화, 템플릿 펼치기, 인자 수 감소 등의 기법이 사용되었다. 또한 Clang 컴파일러와 Mold 링커의 사용으로 빌드 속도가 크게 향상되었다.
สถิติ
C++ 객체의 공개 속성과 메서드를 소비 환경에 노출하는 "풍부한 API"를 구현하는 방법을 제시한다.
Classdesc 시스템을 사용하여 REST 서비스와 Node.js API 모듈을 통해 JavaScript/TypeScript 환경으로 C++ 객체를 반사(reflection)한다.
C++ 공개 속성은 암시적인 setter/getter 메서드 쌍으로 매핑된다.
C++ 메서드 오버로딩은 JavaScript의 동적 타입 특성을 활용하여 구현된다.
TypeScript는 정적 타입 검사를 제공하여 더 안전한 스크립팅 코드를 작성할 수 있게 한다.
Python 바인딩은 저수준 Python C API를 사용하여 구현되었다.
빌드 시간 최적화를 위해 명시적 템플릿 인스턴스화, 템플릿 펼치기, 인자 수 감소 등의 기법이 사용되었다.
Clang 컴파일러와 Mold 링커의 사용으로 빌드 속도가 크게 향상되었다.
คำพูด
"A fat API exposes nearly all of a C++ object's public attributes and methods to a consuming environment, such as a scripting language, or web client."
"Obviously, reflection is required to expose C++ objects to a consuming layer like this — this paper explores using the Classdesc system to implement reflection of C++ objects into a JavaScript/TypeScript environment via a REST service, and also via a Node.js API module."
"The approach is quite general, and could be readily adapted to other language binding APIs, or even without an explicit binding API by means of a REST service that can be accessed with an HTTP client implementation."