KR101896138B1 - 운영 체제의 네이티브 애플리케이션 프로그래밍 인터페이스를 다른 프로그래밍 언어로 프로젝션하는 기법 - Google Patents

운영 체제의 네이티브 애플리케이션 프로그래밍 인터페이스를 다른 프로그래밍 언어로 프로젝션하는 기법 Download PDF

Info

Publication number
KR101896138B1
KR101896138B1 KR1020147005283A KR20147005283A KR101896138B1 KR 101896138 B1 KR101896138 B1 KR 101896138B1 KR 1020147005283 A KR1020147005283 A KR 1020147005283A KR 20147005283 A KR20147005283 A KR 20147005283A KR 101896138 B1 KR101896138 B1 KR 101896138B1
Authority
KR
South Korea
Prior art keywords
operating system
projection
program
metadata
application programming
Prior art date
Application number
KR1020147005283A
Other languages
English (en)
Other versions
KR20140067017A (ko
Inventor
해롤드 피어슨
브렌트 렉터
마틴 로벨
마헤쉬 프라크리야
스티븐 로웨
타사도크 바수
로버트 에이 울로다크지크
엘리엇 에이치 오미야
제리 더니에츠
알레스 홀세크
로렌스 더블유 오스터맨
웨이 젱
니라즈 와드와
샤킬 솔카르
마이클 악시온킨
Original Assignee
마이크로소프트 테크놀로지 라이센싱, 엘엘씨
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 filed Critical 마이크로소프트 테크놀로지 라이센싱, 엘엘씨
Publication of KR20140067017A publication Critical patent/KR20140067017A/ko
Application granted granted Critical
Publication of KR101896138B1 publication Critical patent/KR101896138B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/541Interprogram communication via adapters, e.g. between incompatible applications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/36Software reuse

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

운영 체제의 애플리케이션 프로그래밍 인터페이스에 관한 정보가 알려진 위치에 알려진 포맷으로 저장된다. 이러한 정보는 운영 체제에 의해 노출된 모든 API를 완전하게 기술하고 API 메티데이터 파일에 저장된다. 언어 컴파일러 또는 인터프리터는 이러한 API 정보를 사용하여 타깃 언어로 된 네이티브 시스템 API에 대한 자연적이고 친숙한 표현을 생성한다. 언어 컴파일러 또는 인터프리터는 컴파일 시 및/또는 런타임 시에 API 정보를 판독할 수 있다. 메타데이터가 사용되어 애플리케이션으로 하여금 API의 네임드 엘리먼트를 나타내는 것을 가능하게 한다. 메타 데이터를 사용하여 API의 네임드 엘리컨트를 타깃 언어의 네임드 엘리먼트로 매핑하고, 이러한 엘리먼트의 데이터를 타깃 표현과 네이티브 운영 체제 표현 간에 래핑하는 래퍼를 정의하는 프로젝션이 구축된다.

Description

운영 체제의 네이티브 애플리케이션 프로그래밍 인터페이스를 다른 프로그래밍 언어로 프로젝션하는 기법{PROJECTING NATIVE APPLICATION PROGRAMMING INTERFACES OF AN OPERATING SYSTEM INTO OTHER PROGRAMMING LANGUAGES}
운영 체제는 일반적으로 애플리케이션으로 하여금 운영 체제에 의해 지원되는 기능에 액세스하는 것을 가능하게 하는 수 개의 애플리케이션 프로그래밍 인터페이스를 가진다. 이러한 API는 일반적으로 컴퓨터 프로그램 언어로 된 네임드(named) 파일 또는 객체를 사용하여 운영 체제에 의해 특정된다. 예를 들어, C 프로그래밍 언어는 "interface.h"와 같은 이름을 사용할 수 있는 헤더 파일을 이용한다. 유사하게, C# 메커니즘("P/Invoke"라 함)에서는, 서명(signatures)이 운영 체제 API를 액세스하는 데 사용된다. 운영 체제 API를 이용할 컴퓨터 프로그램을 작성하는 개인은 일반적으로 프로그램 내에 네임드 API 파일 또는 객체에 레퍼런스를 포함시키거나, 프로그래밍 언어에 의해 제공되는 다른 메커니즘을 사용한다. 예를 들어, 그 프로그램은 이후에 그 API에 의해 사용되는 구문(syntax)에서 그 API에 의해 정의된 기능에 대한 호출을 포함한다.
API는 이들이 작성된 언어와 다른 언어에 의해 직접적으로 액세스될 수 없는 방식으로 정의되었다. 다른 언어로 작성된 프로그램에 액세스 가능하게 할 수 있도록, API가 "래핑"된다. 이러한 래핑은 일반적으로 API마다 그리고 언어마다 수동으로 이루어져야 하고, 타깃 언어, API 및 운영 체제 모두에 대한 깊은 이해를 요구한다. 결과적으로, 많은 운영 체제 API가 이용가능하지 않다.
본 요약은 이하의 상세한 설명에서 더욱 자세히 설명될 개념들 중 선택된 것들을 단순화된 형태로 소개하고자 제공된다. 본 요약은 청구 대상의 필수 특징 또는 핵심 특징을 나타내고자 하는 것이 아니며, 청구 대상의 범위를 한정하기 위해 사용되는 것도 아니다.
운영 체제가 구축되는 경우에 API에 관한 정보가 생성되고 운영 체제 내의 알려진 위치에 알려진 포맷으로 저장된다. 이러한 정보는 운영 체제에 의해 노출된 모든 API를 완전하게 기술한다. 이는 다양한 타입(예, 베이직 타입, 열거 타입, 구조, 델리게이트, 인터페이스, 클래스, 메소드, 속성 및 이벤트)의 API의 네임드 엘리먼트에 관한 정보를 포함하나 이에 한정되는 것은 아니다. 이러한 정보는 API 메타데이터 파일에 저장된다.
언어 컴파일러 또는 인터프리터는 이러한 API 정보를 사용하여 네이티브 시스템 API에 대한 자연적이고 친숙한 표현(representation)을 타깃 언어로 생성한다. 이러한 표현은 언어에서 언어로 변경된다(자연적이고 친숙한 것이 언어에서 언어로 변경되기 때문). 당해 언어(language in question)에 가장 적합한 것이 무엇이든, 언어 컴파일러 또는 인터프리터는 컴파일 타임 및/또는 런타임 시에 API 정보를 판독할 수 있다. 예를 들어, C++과 같이 정적으로 컴파일되는 언어는 컴파일 타임 시에 전적으로 메타데이터를 소비하는 한편, 파이썬(Python) 또는 자바스크립트(JavaScript)와 같은 동적 언어는 런타임 시에 전적으로 메타데이터를 소비한다. .NET 또는 Java와 같은 환경은 컴파일 및 런타임 모두에서 메타데이터를 소비할 가능성이 있다. 메타데이터는 애플리케이션으로 하여금 API의 네임드 엘리먼트를 참조하게 하는데 사용된다. 메타데이터를 사용하여 API의 네임드 엘리먼트를 타깃 언어의 네임드 엘리먼트에 매핑하고, 이러한 엘리먼트의 데이터를 타깃 표현 및 네이티브 운영 체제 표현 간에 마샬링하는(marshal) 래퍼(wrapper)를 정의하는 프로젝션(projection)이 구축된다.
따라서, 일 측면에서, 운영 체제의 애플리케이션 프로그래밍 인터페이스를 기술하는 메타데이터가 메모리에 저장된다. 프로그램의 프로그래밍 언어로 된 네임드 엘리먼트의 표시(indication)(애플리케이션 프로그래밍 인터페이스 중 하나의 엘리먼트를 나타냄)가 주어지면, 메타데이터를 사용하여 네임드 엘리먼트가 프로그래밍 언어로 프로젝션된다. 프로젝션은 프로그램의 컴파일 또는 해석(interpret) 중에 이루어질 수 있다. 프로젝션은 프로그래밍 언어의 하나 이상의 요소를 생성하는 코드를 생성하는 것과, 생성된 엘리먼트에 대한 데이터를 타입에 따라 마샬링(marshaling)하는 것을 포함한다. 인터페이스(이들의 메소드, 속성 및 이벤트를 포함함)도 그렇게 프로젝션될 수 있다. 또한, 프로젝션은 예외(exceptions)를 운영 체제에서 애플리케이션으로 전파하는 것을 포함할 수 있다.
운영 체제 API의 다른 언어로의 이러한 프로젝션은 컴퓨터로 구현되는 프로세스에 실현될 수 있고, 제조 물품은 하나 이상의 저장 매체 또는 컴퓨팅 머신을 포함한다.
다음의 설명에서, 본 명세서의 일부를 형성하는 첨부되는 도면이 참조되고, 도면에는 예시로서, 본 기술의 특정한 예시적인 구현예가 도시된다. 다른 실시예가 사용될 수 있고 본 명세서의 범주에서 벗어나지 않는 범위에서 구조적인 변경이 이루어질 수 있다는 것을 이해해야 한다.
도 1은 API의 다른 프로그래밍 언어로의 프로젝션을 포함하는 시스템에 대한 블록도이다.
도 2는 개발 도구의 예시적인 동작을 나타내는 흐름도이다.
도 3은 컴파일러 또는 인터프리터의 예시적인 동작을 나타내는 흐름도이다.
도 4는 이러한 시스템이 구현될 수 있는 예시적인 컴퓨팅 장치의 블록도이다.
다음의 섹션은 이러한 네이티브 시스템 API을 다른 언어로 프로젝션하는 기법이 구현될 수 있는 예시적인 운영 환경을 제공한다.
도 1을 참조하면, 실행 애플리케이션(100)이 런타임 중에 운영 체제(104)의 네이티브 시스템 API(102)를 액세스한다. 이러한 애플리케이션이 그러한 기능성을 가지도록 하기 위해, 프로그램(106)은 일반적으로 개발 도구(112)(예, 편집기)를 사용하여 작성된다. 이러한 프로그램은 런타임 애플리케이션(100)을 제공하도록 언어의 컴파일러 또는 인터프리터(108)에 의해 컴파일되거나 해석된다. 개발 도구(112) 및 컴파일러나 인터프리터(108)는 운영 체제의 API(102)를 완전하게 기술하는 메타데이터(110)를 액세스한다. 개발 도구(112)는 프로그램의 작성 시에 개발자를 보조하지만, 메타데이터를 통해 개발자에게 이용가능한 네이티브 시스템 API에 대해 정보를 주고 이러한 API가 개발자의 프로그래밍 언어를 사용하여 액세스되도록 한다. 컴파일러 또는 인터프리터는 메타데이터를 사용하여 네이티브 시스템 API를 개발자의 프로그래밍 언어로 프로젝션하는 것을 구현한다. 구체적으로, API의 네임드 엘리먼트가 타깃 언어의 네임드 엘리먼트에 매핑되고, 이러한 엘리먼트의 값은 타깃 언어 및 운영 체제에 의해 사용되는 포맷 사이에 마샬링된다.
이러한 시스템을 구축하는 것(building)은 메타데이터로 기술된 API를 포함하는 운영 체제를 구축하는 것으로 시작된다. 메타데이터는 프로그래밍 언어 독립적 형식으로 API 기술문(description)의 각각의 네임드 엘리먼트를 나타낸다. 이러한 메타데이터는 인터페이스의 완전한 기술서를 제공한다. 결합된 시스템 메타데이터가 ECMA-335 CLI 포맷의 일련의 메타데이터 파일로 저장될 수 있고, 구체적인 형식은 본 발명에서 중요하지 않다.
이러한 맥락에서, 그러한 시스템의 예시적인 구현예가 도 2 내지 도 4와 함께 보다 상세히 설명될 것이다.
도 2에서, 개발 도구의 예시적인 동작이 지금부터 설명될 것이다. 일반적으로 컴퓨터 프로그램을 작성하는 경우에 개발자는 편집기와 같은 형태의 개발 도구를 사용한다. 이러한 편집기는 다양한 작업(예, 구문 확인 및 개발자에 의해 입력된 스트링에 대한 완성형(completions) 제안)을 수행할 수 있다. 이러한 환경에서, 운영 체제 애플리케이션 프로그래밍 인터페이스를 기술하는 메타데이터가 다양한 방식으로 사용될 수 있다. 구체적으로, 이는 개발자로 하여금 이용가능한 API를 발견하게 하는데 사용될 수 있다. 개발 도구는 스트링 입력(예를 들면, 식별자(예, "Mouse") 또는 네임 스페이스(예, 운영 체제의 이름)로서 사용될 수 있는 키워드)을 수신한다(200). 메타데이터가 검색되어(202) 식별자 또는 네임 스페이스의 일부로서 수신된 입력을 가지는 엘리먼트를 식별할 수 있다. 한 세트의 매칭 엘리먼트에 대한 식별자가 수집될 수 있고, 개발 도구에 반환될 수 있다(204). 개발 도구는 선택을 위해 엘리먼트를 개발자에게 제시하고(206), 메타데이터로부터의 정보를 사용하여 개발자가 사용하고 있는 컴퓨터 언어에 적합한 포맷으로 그러한 엘리먼트를 제시한다.
이제 도 3을 참조하여, 언어 컴파일러 또는 인터프리터(interpreter)의 동작의 예가 지금부터 설명될 것이다. 컴퓨터 프로그램의 처리 시에, 이를 컴파일하든 해석하든, 컴퓨터 프로그램의 엘리먼트의 시퀀스가 검출된다(300). 컴퓨터 프로그램의 엘리먼트가 운영 체제의 API에 대한 레퍼런스인지 여부가 판정된다(302). 예를 들어, 메타데이터 내의 엘리먼트를 검색함으로써 이러한 판정이 이루어질 수 있다. 메타데이터를 사용하여 프로젝션 엘리먼트가 생성되고(304), 이는 데이터가 컴퓨터 프로그램 및 운영 체제 사이에서 교환되도록 한다. 구체적으로, 컴파일러 또는 인터프리터가 운영 체제 API의 네임드 엘리먼트를 타깃 언어의 네임드 엘리먼트로 프로젝션하는 것을 구현한다. 메타데이터는 객체가 생성되도록 하고, 값이 프로그램에 의해 사용되는 데이터 포맷과 운영 체제에 의해 사용되는 포맷 사이에 마샬링되게 한다. 런타임 시에, 이러한 엘리먼트는 프로그램으로 하여금 운영 체제의 API 및 애플리케이션과 운영 체제 간의 마샬링 데이터에 액세스하게 한다(306).
이제 그러한 시스템의 일반적인 동작을 설명하기 위해, 특정한 예가 지금부터 설명될 것이다. 구체적으로, API를 기술하는 메타데이터와 API의 엘리먼트에 대한 컴퓨터 언어 특정 표현(computer language specific representation) 간의 예시적인 프로젝션에 대한 보다 세부적인 내용이 지금부터 설명될 것이다.
다음의 설명은 단지 하나의 가능한 구현예이며, 본 발명을 제한하는 것으로 이해되어서는 안 된다. 구체적으로, 다음은 구현될 수 있는 언어 프로젝션에 대한 단지 일 예이고, 이러한 언어에 대한 다른 구현예가 가능하며, 다른 언어로의 다른 프로젝션이 가능하다는 것을 이해해야 한다.
이러한 예에서, 자바스크립트는 네이티브 시스템 API가 메타데이터를 사용하여 프로젝션될 프로그래밍 언어이다. 이하의 예에서, 일부 유형의 엘리먼트가 어떻게 자바스크립트 프로그래밍 언어로 프로젝션 되는지에 대한 설명이 주어진다.
스크립트가 운영 체제 API에 의해 정의된 특정한 객체의 인스턴스를 생성하려고 시도하면, 프로젝터 객체(Projector object)는 상이한 타입 간에 데이터를 변환하는 마샬링 스터브(marshaling stubs)를 생성(프록시 객체를 생성하는 것을 포함함)하기 위해 메타데이터에 액세스하고, 메소드 콜(method call)을 디스패칭(dispatching)하며, 이벤트를 관리하고, 콜백 함수(callback function)를 관리할 책임이 있다.
베이직 타입의 네임드 엘리먼트(예, 정수, 스트링 등)에 대해, 다음은 이러한 API 엘리먼트를 자바스크립트로 프로젝션하는 방법이다.
운영 체제는 수 개의 사인드(signed) 및 언사인드(unsigned) 정수 타입(예, 1 바이트의 언사이인드 정수(UInt8), 4 바이트의 언사인드 정수(UInt32), 4 바이트의 사인드 정수(Int8) 및 8 바이트의 사인드 및 언사이인드 정수(UInt64 및 Int64))을 가진다. 이러한 타입의 네임드 엘리먼트는 자바스크립트 넘버 값(JavaScript Number value)으로서 프로젝션된다. 자바스크립트 넘버가 운영 체제 값으로 마샬링되는 경우에, 값은 자바스크립트 넘버로 타입 강제 변환(type coerced)되고, 이어서 ES5 ToInt32 사양서(specification)에 의해 정의되는 프로세스가 뒤따른다. UInt8에 대해, 결과는 모듈로(modulo) 2^8이 적용된 것이다. Int32에 대해 모듈로 2^16이 적용된다. UInt32에 대해, 모듈로 2^32가 적용된다.
자바스크립트 값으로 마샬링된 64 비트 정수는 그 정수가 [-2^53, 2^53] 범위에 속하고 사인드인 경우 또는 [0, 2^53] 범위에 속하고 언사인드인 경우에 표준 넘버 값으로 표현된다. 이러한 범위 밖인 경우에, 이는 전체 64 비트의 정수 데이터를 유지하는 맞춤형 백킹 스토어(custom backing store)를 이용하여 넘버 값으로 표현된다. 이러한 커스텀 넘버 값에 대한 수학적 연산은 그 값이 언사인드인 경우에 [-2^53, 2^53] 또는 [0, 2^53] 범위 내의 표준 넘버 표현(standard Number representation)으로 강제 변환된다(coerce). 값이 이러한 범위 밖이면, 타입 에러(Type Error)가 일어날 수 있다. 64비트 정수로 마샬링된 자바스크립트 값은 프로젝션된 값 자체인 경우에 직접적으로 할당되고, 그렇지 않으면, EC5 "ToInteger" 변환이 그 값에 적용된 결과가 패스된다.
캐릭터(16 비트 유니코드에 의해 표현됨), 스트링 또는 GUID(global unique identifier)인 운영 체제 API의 네임드 엘리먼트가 자바스크립트 스트링으로 표현될 수 있고 자바스크립트의 네임드 스트링으로 프로젝션된다.
자바스크립트로 마샬링된 캐릭터가 유니코드 값에 의해 표현되는 단일 캐릭터를 포함하는 자바스크립트 스트링 값으로 변환된다. 캐릭터로 마샬링된 자바스크립트 값은 ES5 ToString 연산을 통해 자바스크립트 스트링으로 타입 강제 변환되고, 제1 캐릭터가 유지된다. 단일 캐릭터는 이어서 Char16 값으로 패스된다.
자바스크립트로 마샬링된 스트링은 자바스크립트 스트링으로 변환된다. 스트링으로 마샬링된 자바스크립트 값은 자바스크립트 스트링으로 타입 강제 변환된다.
자바스크립트 값으로 마샬링된 GUID은 스트링 포맷으로 변환된다. GUID로 마샬링된 자바스크립트 값은 스트링으로 타입 강제 변환되고, 이어서 운영 체제에 의해 사용되는 포맷으로 파싱된다.
운영 체제는 시간의 양을 나타내는 시점(point in time) 또는 TimeSpan 구조체(struc)를 나타내는 DateTime 구조체인 네임드 엘리먼트를 포함하는 API를 가질 수 있다. DateTime 구조체는 자바스크립트를 DateTime 구조체 데이터(이는 Date 인스턴스와 다른 범위 및 정확성(precision)을 가짐)와 매칭되는 백킹 스토어를 가지는 Date 인스턴스로서 자바스크립트로 프로젝션될 수 있다. TimeSpan 구조체는 수 밀리초로 변환되고 자바스크립트 넘버로서 반환된다. 유사하게, 자바스크립트 넘버는 수 밀리초에서 100 나노초 단위로 변환되어 TimeSpan 구조체로서 패스될 수 있다.
메타데이터를 해석함으로써, 또한 프로젝션은 일부의 경우에 네이티브 환경으로부터의 타입을 언어 프로젝션에 존재하는 타입으로 재매핑할 수 있다는 것에 주의해야 한다. 예를 들어, 이는 네이티브 API의 타입 및 언어 프로젝션이 호환되는 데이터 레이아웃을 가지는 경우에 가능하고 바람직하며, 이는 기초 데이터 타입을 이용하여 이미 쉽게 이루어질 수 있다. 메타데이터의 매핑시에, 프로젝션은 모든 연산(예, 언어 타입에 대한 메소드 또는 속성)을 네이티브 타입으로 직접적으로 간단히 리디렉션할(redirct) 수 있다. 이는 언어 개발자에게 더 자연스럽고 친숙한 타입을 이용한다. 예를 들어, DateTime 구조체 리맵핑이 이러한 방식으로 구현될 수 있다. 네이티브 API에서, DateTime 구조체가 임의의 추가 연산 없이도 메타데이터의 Windows.Foundation.DateTime으로서 노출된다. C# 프로젝션에서, 이러한 타입은 풍부한 지원을 갖는 C#의 System.DateTimeOffset으로 리디렉션될 수 있다.
다른 예로서, API의 네임드 엘리먼트가 메소드인 경우에, 이는 HRESULT 값을 자신의 반환 타입으로서 가지며, 이는 자바스크립트에서 예외(exception)로 전환된다. 반환된 HRESULT는 자바스크립트 엔진에 의해 성공여부가 확인된다. HRESULT가 실패를 나타내면, 자바스크립트 엔진은 예외를 자바스크립트 측으로 보낸다. 따라서, 운영 체제 API의 메소드를 호출하는 자바스크립트에 대해, HRESULT 실패가 자바스크립트 예외로서 표면화된다(surfaced). 자바스크립트 메소드(예를 들면, 이하에 설명되는 콜 백(call back) 또는 델리게이트(delegate)를 위한 것)를 소비하는 API 메소드에 대해, 자바스크립트 메소드 호출(call)이 예외 블록(또는 API를 호스팅하는 자바스크립트에 의해 제공된 것과 동등한 것)에 래핑되어 캐치된 예외가 HRESULT로서 전파될 수 있다. 그러나, 운영 체제는 또한 HRESULT가 메소드 및 속성의 내부 또는 외부 파라미터 위치에 존재하게 한다. 이러한 경우에, HRESULT는 언사인드 32 비트 값으로 마샬링된다(이하에 설명됨).
열거되는 타입(enumerated types)인 API의 네임드 엘리먼트에 대해(이는 네임드 상수의 세트임), 이는 각각의 네임드 값에 대한 리드 온리 필드를 포함하는 객체로서 자바스크립트에서 표현된다.
"구조체(structs)"(네임드 데이터 필드의 컬렉션임)인 API의 네임드 엘리먼트에 대해, 이는 자바스크립트 객체로서 자바스크립트에서 표현된다. 자바스크립트로 마샬링된 구조체가 객체로 변환된다. 구조체의 각각의 네임드 필드가 자바스크립트 객체 내의 네임드 속성이 된다. 구조체의 각각의 네임드 필드는 필드의 기본 타입(underlying type) 별로 마샬링된다. 객체 타입인 자바스크립트 값이 구조체로 마샬링될 수 있다. 자바스크립트 객체 또는 이의 프로토타입(prototype)은 구조체의 각각의 네임드 필드에 대한 네임드 필드를 포함하고, 각각의 네임드 필드의 값은 기본 타입에 따라 마샬링된다. 운영 체제 API 구조체에 등가물을 갖지 않는 자바스크립트 객체의 엑스트라 필드는 무시된다. 임의의 구조체 값의 마샬링이 실패하면, 마샬링 에러가 반환된다.
이러한 예에서, 운영 체제는 어레이에 대한 타입을 갖지 않으나, 대신에 메소드에 대한 아규먼트(argument)로 하여금 어레이의 엘리먼트의 수(바이트가 아님)를 나타내는 한 쌍의 언사인드 정수 길이(a pair of an unsigned integer length)(어레이의 제1 엘리먼트에 대한 포인터가 뒤따름)가 되는 것을 허용한다.
어레이를 자바스크립트로 마샬링하는 경우에, 객체는 다음의 캐릭터로 생성된다. 객체는 0과 어레이의 길이(마이너스 1) 사이의 각각의 정수 값(이는 열거가능하고, 기입가능하나, 구성가능하지 않음(not configurabble))에 대한 속성 및 벡터의 길이에 대해 초기에 설정된 '길이(length)' 속성(이는 기입가능하지 않고, 열거가능하지 않으며, 구성가능하지 않음)을 갖는다. 객체의 프로토타입은 Array 프로토타입 객체이다. 객체의 인덱스 속성에 대한 [[Put]] 연산은 기본 네이티브 어레이에 특정된 인덱스를 설정한다. 객체의 인덱스 속성에 대한 [[GetOwnProperty]] 연산은 기본 네이티브 어레이로 인덱싱한다. 객체는 "Array"로서 [[Class]]를 가지지 않는다. 자바스크립트 객체를 마샬링하는 경우에, 객체가 [[Class]] "Array"를 가지면, 어레이는 네이티브 어레이로 복사되고, 이러한 어레이에 대한 레퍼런스가 전달된다(pass on). 객체가 프로젝션된 어레이이면, 기본 네이티브 어레이가 전달된다.
또한, API가 델리게이트 또는 콜백 함수인 네임드 엘리먼트를 가질 수 있고, 이는 호출가능한 단일 메소드에 대한 참조이다. 이는 자바스크립트로 호출가능한 객체로서 프로젝션될 수 있다. 프로젝터(Projector)는 커스텀 마샬링 객체의 콜백 델리게이트를 래핑한다.
자바스크립트로 마샬링된 델리게이트가 자바스크립트 함수 객체에서 래핑된다. 함수 객체가 호출되는 경우에, 아큐먼트가 델리게이트에 의해 특정되는 등가의 파라미터 타입으로 마샬링되고, 이어서 래핑된 델리게이트 객체가 호출된다. 임의의 아규먼트가 마샬링에 실패하면, 델리게이트가 실패(fail)를 호출한다. 파라미터의 델리게이트보다 적은 자바스크립트 아규먼트가 존재하면, 델리게이트가 실패를 호출한다. 파라미터의 델리게이트를 넘는 엑스트라 자바스크립트 아규먼트는 무시된다. 델리게이트가 호출된 후에, 출력 파라미터(out parameter)가 자바스크립트 타입으로 마샬링된다. 임의의 출력 파라미터가 마샬링에 실패하면, 델리게이트가 실패를 호출한다. 이어서, 출력 파라미터가 자바스크립트 값으로 마샬링되고, 반환된다.
네이티브 자바스크립트 함수 객체가 델리게이트로 마샬링되고 있는 경우에, 그러한 호출가능한 객체는 대응하는 델리게이트 타입의 델리게이트에 래핑된다. 델리게이트가 호출되는 경우에, 입력 파라미터(in parameter)가 자바스크립트 타입으로 마샬링되고 이어서 자바스크립트 함수 객체가 호출된다. 임의의 아규먼트가 마샬링에 실패하면, 델리게이트가 실패(fails)를 호출한다. 델리게이트가 호출된 후에, 다음의 규칙에 기초하여 리턴 값이 델리게이트의 출력 파라미터로 매핑된다. 첫째, 출력 파라미터가 존재하지 않으면, 자바스크립트 함수 객체로부터의 반환 값이 무시된다. 둘째, 델리게이트가 단일한 출력 파라미터를 지정하면, 자바스크립트 함수 객체로부터의 반환 값이 그 타입으로 매핑된다. 셋째, 델리게이트가 복수의 출력 파라미터를 지정하면, 자바스크립트 함수 객체로부터의 반환 값은 각각의 출력 파라미터에 대한 네임드 속성을 가진 객체이다. 각각의 네임드 속성 값은 대응하는 출력 파라미터의 타입으로 마샬링된다. 반환 값이 객체가 아니면, 델리게이트가 실패를 호출한다. 반환된 객체가 각각의 출력 파라미터에 대한 네임드 속성을 포함하지 않으면, 델리게이트가 실패를 호출한다. 반환된 객체가 출력 파라미터에 대응하지 않는 네임드 엑스트라 속성을 포함하면, 이들이 무시된다. 임의의 네임드 속성이 대응하는 출력 파라미터 타입으로의 마샬링에 실패하면, 델리게이트가 실패를 호출한다.
다음의 예는 IString Collection을 호출한 델리게이트에 대한 메타데이터 및 이러한 델리게이트의 인스턴스를 생성하는 의사-자바스크립트 코드를 나타낸다.
예시적인 메타데이터:
Figure 112014019520411-pct00001
의사-자바스크립트:
Figure 112014019520411-pct00002
Figure 112014019520411-pct00003
인터페이스는 객체로서 자바스크립트에 직접적으로 프로젝션되지 않는다. 그러나, 인터페이스는 파라미터일 수 있고, 운영 체제 API 메소드의 타입을 반환할 수 있다.
타깃 프로그래밍 언어에서 자연스런 프로젝션을 제공하기 위해, 전술한 예에서 멤버에 대한 camelCase 네임을 사용하기 위한 자바스크립트에서의 스트롱 컨벤션(strong convention)에 뒤이어, camelCase로 변경되는 자신의 네임을 가진 멤버(member)가 자바스크립트로 프로젝션된다. 자바스크립트 생성자 함수(constructor function)와 유사한 타입은 통상적으로 PascalCase이고 그 형식으로 프로젝션된다. 유사하게, addEventListener 패턴에 대한 열거 속성(enum properties), 구조체 필드(struct fields), 이벤트 네임이 camelCase의 네임을 갖는다.
정적 타입 정보에 기초하여 런타임 클래스의 표현인 것으로 알려지지 않은 인터페이스 인스턴스(자바스크립트로 마샬링됨)가 다음의 단계를 진행한다. 첫째, 인터페이스에 대한 런타임 클래스 네임을 획득하기 위한 인터페이스에 대한 호출이 이루어진다. 성공하면, 객체가 런타임 클래스 인스턴트 객체(이하에 설명됨)로서 프로젝션된다. 성공하지 않으면, 객체가 구현될 것으로 알려진 인터페이스를 정확히 구현하는 언네임드(unnamed) 런타임 클래스의 인스턴스였고 일시적으로 요청되는 인터페이스인 경우에, 객체가 프로젝션된다.
프로젝션된 런타임 클래스 인스턴스 객체인지 또는 프로젝션된 인터페이스 인스턴스 객체인지 알아보기 위해 인터페이스 타입으로 마샬링되는 자바스크립트 값이 확인된다. 런타임 클래스 객체이고 그 객체가 대리하는(proxies) 원래 값이 인터페이스 타입을 구현하는 경우에, 그 인터페이스 타입의 객체 구현이 운영 체제에 전달된다. 그렇지 않으면, 타입 에러 예외(type error exception)가 일어날 수 있다.
운영 체제 API의 객체는 런타임 클래스의 인스턴스일 수 있다. 런타임 클래스는 하나 이상의 인터페이스의 세트(이하에 정의됨)를 구현한다. 실행 객체(running object)의 구현된 인터페이스의 목록이 그 실행 객체를 반환한 메소드의 메타데이터에 기초하여 또는 런타임 클래스 네임을 액세스하여 메타데이터를 검색함으로써 판정될 수 있다. 자바스크립트가 프로토타입 기반의 동적 언어이기 때문에, 이는 클래스의 구성(construct of class)을 갖지 않는다. 클래스 구성은 자바스크립에서 객체로서 프로젝션된다.
따라서, 운영 체제 API가 자바스크립트에서 객체로서 프로젝션된다. 클래스의 구현된 모든 인터페이스에 정의되는 메소드, 속성 및 이벤트의 집합체(union)가, 프로젝션된 자바스크립트 객체에서 이용가능한 네임드 속성으로서 자신의 프로토타입을 통해 노출되는 타입 멤버를 나타낸다. 자바스크립트 언어 프로젝션의 소비자(consumers)는 멤버가 실제로 정의되는 인터페이스가 어느 것이냐에 대해 걱정하지 않고, 직접적으로 클래스의 임의의 멤버에 액세스할 수 있다.
자바스크립트는 동적이고, 이는 새로운 속성이 임의의 시점에 객체에 추가되거나 제거될 수 있다는 것을 의미한다. 프로젝션된 객체는 사전 정의된 인터페이스 멤버가 무효가 되거나 삭제되지 않는 한, 새로운 속성 및 메소드를 추가하는 것을 지원할 수 있다. 자바스크립트에서, 프로젝션된 객체는 확장가능하나, 네임드 타입 멤버의 컬렉션은 구성가능하지 않다. 프로젝션된 객체는 런타임 클래스 구현 인터페스(runtime class-implemented interface)로부터의 멤버의 컬렉션에 정의된 인스턴스 멤버를 가진 프로토타입을 가진다.
전술한 바와 같이, 이러한 인터페이스는 메소드, 파라미터 및 이벤트를 가진다.
언어 프로젝션 레이어의 메소드가 메소드 당 슬롯을 가지는 브이테이블(vtable)로서 구현된다. 정보에 관한 메타데이터는 파라미터의 네임, 타입 및 방향(입력/출력)과 함께 메소드 네임을 제공한다. 메소드는 프로젝션된 런타임 클래스 또는 인터페이스 객체에 대한 호출가능한 속성으로서 자바스크립트에 프로젝션된다. 이러한 속성은
Figure 112014019520411-pct00004
이다. 호출되는 경우에, 아규먼트가 이들의 대응하는 파라미터 타입에 따라 마샬링되고, 메소드가 이러한 값을 이용하여 호출된다. 반환 값(들)이 자바스크립트 값으로 마샬링되고, 여기서 자바스크립트 객체는 값으로서 반환한다.
언어 프로젝션 레이어에서의 속성이 겟 메소드(get method) 및/또는 셋 메소드(set method)로서 구현된다. 속성 값을 액세스하는 것은 겟 메소드를 호출하나 속성 값을 업데이트하는 것은 셋 메소드를 호출한다. 속성은 판독 또는 기입(즉, 겟 및 셋 메소드 이용가능)이거나 리드 온리(즉, 겟 메소드만 이용가능)일 수 있다. 속성은 자바스크립에서의 속성으로서 프로젝션된다. 속성 값의 마샬링은 기본 속성 유형에 따라 전술한 바와 같이 이루어진다.
언어 프로젝션 레이어에서의 이벤트가 추가 및 삭제 이벤트 리스너 메소드(add and remove event listener method)로서 구현된다. 추가 메소드는 델리게이트 인스턴스를 얻고(take) 리스너를 기술하는 데이터를 반환하나, 제거 메소드는 리스너를 기술하는 데이터를 얻고 아무것도 반환하지 않는다.
자바스크립트에서, 임의의 프로젝션된 런타임 클래스 또는 인터페이스 객체(이는 적어도 하나의 프로젝션된 이벤트를 포함함)는 자신의 프로토타입에 추가된 두 개의 추가 속성, 즉 addEventListener 및 removeEventListener를 획득한다. 이러한 속성은 {Writable:false, Enumerable:true, Configurable:false}이고, 호출가능한 객체가 되도록 할당된다.
addEventListener 함수는 주의를 기울일 이벤트의 네임을 나타내는 스트링 아규먼트, 리스너로서 할당하는 콜백 함수 및 무시되는 선택적 제3 파라미터를 획득한다. 이러한 함수는 기본 add_Event 메소드를 호출하여 마샬링된 콜백 함수를 델리게이트로서 패스하고, 콜백 함수 객체의 레퍼런스 ID에 의해 확인되는 맵에 결과 토큰을 저장한다.
removeEventListener는 리스너가 제거된 이벤트의 네임을 나타내는 스트링 아규먼트, 제거되어야 하는 콜백 함수 및 무시되는 선택적 제3 파라미터를 획득한다. 이러한 함수는 저장된 토큰에 대한 맵의 레퍼런스 ID를 이용하여 콜백 함수를 검색하고, 토큰이 발견되면 기본 remove_Event 메소드를 호출하고, 검색된 토큰을 반환한다.
이벤트가 시작되면, 콜백으로서 전달되는 임의의 자바스크립트 함수 객체가 호출될 것이다. 함수 객체에 전달된 아규먼트는 EventHandler 델리게이트에 제공된 아규먼트의 마샬링된 값일 것이다.
전술한 내용에서 알 수 있듯이, 언어를 위한 API 프로젝션 레이어를 가짐으로써, 운영 체제 API의 네임드 엘리먼트(운영 체제에 저장된 메타데이터에 의해 특정됨)가 객체 및, 운영 체제 API 포맷과 애플리케이션 프로그래밍 언어 포맷 간의 마샬 데이터를 자동으로 생성하는 데 사용될 수 있다. 전술한 내용은 단지 예시적인 운영 체제 및 예시적인 프로그래밍 언어 사이의 프로젝션의 예일 뿐이며 본 발명은 이러한 예에 제한되지 않는다는 것을 이해해야 한다.
이제부터 예시적인 구현예를 설명하기 위해, 그러한 시스템이 동작하도록 디자인된 컴퓨팅 환경이 설명될 것이다. 다음의 설명은 이러한 시스템이 구현될 수 있는 적합한 컴퓨팅 환경에 대한 간략하고 일반적인 설명을 제공하기 위한 것이다. 시스템은 수많은 범용 또는 전용 컴퓨팅 하드웨어 구성으로 구현될 수 있다. 적합할 수 있는 알려진 컴퓨팅 장치의 예(제한이 아님)로서, 퍼스널 컴퓨터, 서버 컴퓨터, 핸드헬드 또는 랩탑 장치(예, 미디어 플레이어, 노트북 컴퓨터, 셀룰러 폰, PDA, 음성 레코더), 멀티프로세서 시스템, 마이크로프로세서 기반 시스템, 셋톱 박스, 게임 콘솔, 프로그램가능한 가전기기, 네트워크 PC, 미니컴퓨터, 메인프레임 컴퓨터, 전술한 시스템 또는 장치 중 임의의 것을 포함하는 분산형 컴퓨팅 환경 등이 포함된다.
도 4는 적합한 컴퓨팅 시스템 환경의 예를 도시한다. 컴퓨팅 시스템 환경은 단지 적합한 컴퓨팅 환경의 일 예이며, 그러한 컴퓨팅 환경의 용도 또는 기능의 범주에 관한 임의의 제한을 하려는 것이 아니다. 또한, 컴퓨팅 환경은 예시적인 운영 환경에 도시된 컴포넌트 중 하나 또는 이들의 조합에 관해 임의의 종속성이나 필요조건을 가지는 것으로 해석되어서는 안 된다.
도 4를 참조하면, 예시적인 컴퓨팅 환경은 컴퓨팅 머신(예, 컴퓨팅 머신(400))을 포함한다. 이의 가장 기본적인 구성에서, 컴퓨팅 머신(400)은 일반적으로 적어도 하나의 프로세싱 유닛(402) 및 메모리(404)를 포함한다. 컴퓨팅 장치는 복수의 프로세싱 유닛 및/또는 추가적인 코프로세싱 유닛(예, 그래픽 프로세싱 유닛(420))을 포함할 수 있다. 컴퓨팅 장치에 대한 정확한 구성 및 유형에 따라, 메모리(404)가 휘발성(예, RAM), 비휘발성(예, ROM, 플래시 메모리 등) 또는 이 둘의 조합일 수 있다. 이러한 가장 기본적인 구성이 도 4에 파선(406)으로 도시된다. 추가로, 컴퓨팅 머신(400)은 또한 추가적 특징/기능을 가질 수 있다. 또한, 예를 들어 컴퓨팅 머신(400)은 자기 또는 광학 디스크나 테이프를 포함하는 추가 저장소(이동식 및/또는 비이동식)를 포함할 수 있다. 이러한 추가 저장소는 이동식 저장소(408) 및 비이동식 저장소(410)로 도 4에 도시된다. 컴퓨터 저장 매체는 정보(예를 들면, 컴퓨터 프로그램 명령어, 데이터 구조, 프로그램 모듈 또는 다른 데이터)의 저장을 위한 임의의 방법 또는 기법으로 구현되는 휘발성 및 비휘발성, 이동식 및 비이동식 매체를 포함할 수 있다. 메모리(404), 이동식 저장소(408) 및 비이동식 저장소(410)가 컴퓨터 저장 매체에 대한 모든 예이다. 컴퓨터 저장 매체는 RAM, ROM, EEPROM, 플래시 메모리 또는 다른 메모리 기법, CD-ROM, DVD 또는 다른 광학 저장소, 자기 카세트, 자기 테이프, 자기 디스크 저장소나 기타 자기 저장 장치 또는 원하는 정보를 저장하는 데 사용될 수 있고 컴퓨팅 머신(400)에 의해 액세스될 수 있는 임의의 다른 매체를 포함하나 이에 한정되는 것은 아니다. 임의의 이러한 컴퓨터 판독가능 저장 매체는 컴퓨팅 머신(400)의 일부일 수 있다.
또한, 컴퓨팅 머신(400)은 장치로 하여금 다른 장치와 통신하게 하는 소정의 통신 연결부(412)를 포함할 수 있다. 통신 연결부(들)(412)는 통신 매체의 일 예이다. 통신 매체는 컴퓨터 프로그램 명령어, 데이터 구조, 프로그램 모듈 또는 변조된 데이터 신호(예, 반송파 또는 다른 전송 메커니즘)의 다른 데이터를 내부에 포함할 수 있고, 임의의 정보 전달 매체를 포함한다. "변조된 데이터 신호"라는 용어는 자신의 특성 세트 중 하나 이상을 가지거나 신호에 정보를 인코딩하여 신호의 수신 장치의 구성이나 상태를 변경하는 방식으로 변경된 신호를 의미한다. 예로서(제한이 아님), 통신 매체는 유선 네트워크 또는 직접-유선 연결과 같은 유선 매체 및 무선 매체(예를 들면, 음향, RF, 적외선 및 기타 무선 매체)를 포함한다.
컴퓨팅 머신(400)은 다양한 입력 장치(들)(414)(예를 들면, 디스플레이, 키보드, 마우스, 펜, 카메라, 터치 입력 장치 등)를 가진다. 출력 장치(들)(416)(예를 들면, 스피커, 프린터 등)가 포함될 수도 있다. 이러한 장치는 본 발명이 속하는 기술 분야에 잘 알려져 있으며 본 명세서에서 길게 설명할 필요가 없다.
컴퓨팅 장치상의 운영 체제에서 실행하는 애플리케이션 프로그램과 함께 실행되는 프로그램 모듈에 대한 일반적인 맥락에서 설명될 것이나, 본 발명이 속하는 분야의 기술자는 본 발명의 특징들이 다른 프로그램 모듈과 함께 구현될 수도 있다는 것을 이해할 것이다. 일반적으로, 프로그램 모듈은 프로세싱 유닛에 의해 처리되는 경우에, 프로세싱 유닛으로 하여금 특정한 태스크를 수행하게 하고 특정한 추상 데이터 유형을 구현하게 하는 루틴, 프로그램, 컴포넌트, 데이터 구조 등을 포함한다. 이러한 시스템은 통신 네트워크를 통해 연결된 원격 프로세싱 장치에 의해 태스크가 수행되는 분산형 컴퓨팅 환경에서 실현될 수 있다. 분산형 컴퓨팅 환경에서, 프로그램 모듈은 메모리 저장 장치를 포함하는 로컬 및 원격 메모리 저장 매체 모두에 배치될 수 있다.
첨부된 청구항의 전문(preamble)에서 "제조 물품", "프로세스", "머신" 및 "물질의 조합"이라는 용어는 관련 특허법에서 이러한 용어의 사용에 의해 정의되는 특허가능한 발명의 대상의 범주에 속하는 것으로 여겨지는 발명의 대상으로 청구범위를 한정하려는 것이 아니다.
본 명세서에 설명된 전술한 선택적 실시예의 일부 또는 전부가 추가적인 이종 실시예를 형성하도록 임의의 조합으로 사용될 수 있다. 첨부된 청구항에 정의된 발명의 대상이 전술한 특정한 구현예에 반드시 한정될 필요는 없다는 것을 이해해야할 것이다. 전술한 특정한 구현예는 단지 예시로서 개시된다.

Claims (15)

  1. 운영 체제의 애플리케이션 프로그래밍 인터페이스를 기술하는 메타데이터를 메모리로 수신하는 단계와,
    상기 운영 체제의 상기 애플리케이션 프로그래밍 인터페이스 중 하나의 엘리먼트를 나타내는, 타깃 프로그래밍 언어로 된 프로그램의 네임드 엘리먼트(named element)에 대한 표시(indication)를 수신하는 단계와,
    상기 메타데이터를 사용하여, 상기 타깃 프로그래밍 언어로 된 상기 프로그램의 프로젝션(projection) 엘리먼트를 생성하는 단계 - 상기 프로젝션 엘리먼트는, 상기 운영 체제의 상기 애플리케이션 프로그래밍 인터페이스의 엘리먼트의 상기 프로그램의 상기 네임드 엘리먼트로의 프로젝션이고, 그 결과, 런타임 시에 상기 프로그램의 프로젝션 엘리먼트는 상기 프로그램이 상기 운영 체제의 상기 애플리케이션 프로그래밍 인터페이스에 액세스하는 것을 가능하게 함 -
    를 포함하고,
    상기 프로젝션 엘리먼트는, 타입에 따라, 운영 체제 표현과 애플리케이션 표현 사이에서 데이터를 마샬링하고(marshal),
    상기 메타데이터는 메타데이터 파일에 저장되며,
    상기 메타데이터 파일은, 상기 애플리케이션 프로그래밍 인터페이스의 엘리먼트를 머신 판독 가능한 프로그래밍 언어의 독립적 형식으로 기술하고,
    상기 메타데이터 파일은, 알고 있는 위치(a known location)에 상기 운영 체제의 일부로서 표준 파일 형식으로 저장되는
    컴퓨터로 구현되는 프로세스.
  2. 제1항에 있어서,
    상기 프로젝션 엘리먼트를 생성하는 단계는, 상기 프로그램이 컴파일될 때, 하나 이상의 프로젝션 엘리먼트를 정의하는 코드를 생성하는 단계를 포함하는
    컴퓨터로 구현되는 프로세스.
  3. 제1항에 있어서,
    상기 프로젝션 엘리먼트를 생성하는 단계는, 상기 프로그램이 해석될 때(interpreted), 하나 이상의 프로젝션 엘리먼트를 정의하는 코드를 생성하는 단계를 포함하는
    컴퓨터로 구현되는 프로세스.
  4. 제1항에 있어서,
    상기 프로젝션 엘리먼트는 메소드, 속성 및 이벤트를 포함하는 인터페이스를 포함하는
    컴퓨터로 구현되는 프로세스.
  5. 제1항에 있어서,
    상기 프로젝션 엘리먼트는 예외(exceptions)를 상기 운영 체제로부터 상기 애플리케이션으로 전파하는
    컴퓨터로 구현되는 프로세스.
  6. 컴퓨터 프로그램 명령어가 저장된 컴퓨터 저장 매체로서,
    상기 명령어는, 프로세싱 장치에 의해 처리될 때, 상기 프로세싱 장치로 하여금,
    운영 체제의 애플리케이션 프로그래밍 인터페이스를 기술하는 메타데이터를 메모리로 수신하는 처리와,
    상기 애플리케이션 프로그래밍 인터페이스 중 하나의 엘리먼트를 나타내는, 타깃 프로그래밍 언어로 된 프로그램의 네임드 엘리먼트에 대한 표시를 수신하는 처리와,
    상기 메타데이터를 사용하여, 상기 타깃 프로그래밍 언어로 된 상기 프로그램의 프로젝션 엘리먼트를 생성하는 처리 - 상기 프로젝션 엘리먼트는, 상기 운영 체제의 상기 애플리케이션 프로그래밍 인터페이스의 엘리먼트의 상기 프로그램의 상기 네임드 엘리먼트로의 프로젝션이고, 그 결과, 런타임 시에 상기 프로그램의 프로젝션 엘리먼트는 상기 프로그램이 상기 운영 체제의 상기 애플리케이션 프로그래밍 인터페이스에 액세스하는 것을 가능하게 함 -
    를 포함하는 처리를 수행하게 하고,
    상기 프로젝션 엘리먼트는, 타입에 따라, 운영 체제 표현과 애플리케이션 표현 사이에서 데이터를 마샬링하며,
    상기 메타데이터는 메타데이터 파일에 저장되고,
    상기 메타데이터 파일은, 상기 애플리케이션 프로그래밍 인터페이스의 엘리먼트를 머신 판독 가능한 프로그래밍 언어의 독립적 형식으로 기술하며,
    상기 메타데이터 파일은, 알고 있는 위치에 상기 운영 체제의 일부로서 표준 파일 형식으로 저장되는
    컴퓨터 저장 매체.
  7. 제6항에 있어서,
    상기 프로젝션 엘리먼트를 생성하는 처리는, 컴파일 시에, 하나 이상의 프로젝션 엘리먼트를 정의하는 코드를 생성하는 처리를 포함하는
    컴퓨터 저장 매체.
  8. 제6항에 있어서,
    상기 프로젝션 엘리먼트를 생성하는 처리는, 상기 프로그램이 해석될 때, 하나 이상의 프로젝션 엘리먼트를 정의하는 코드를 생성하는 처리를 포함하는
    컴퓨터 저장 매체.
  9. 제6항에 있어서,
    상기 프로젝션 엘리먼트는, 메소드, 속성 및 이벤트를 포함하는 인터페이스를 포함하는
    컴퓨터 저장 매체.
  10. 제6항에 있어서,
    상기 프로젝션 엘리먼트는 예외를 상기 운영 체제로부터 상기 애플리케이션으로 전파하는
    컴퓨터 저장 매체.
  11. 하나 이상의 프로세서와,
    하나 이상의 컴퓨터 저장 매체
    를 포함하고,
    상기 컴퓨터 저장 매체에는 컴퓨터 프로그램 명령어가 저장되고,
    상기 명령어는, 프로세싱 장치에 의해 처리될 때, 운영 체제의 애플리케이션 프로그래밍 인터페이스와 타깃 프로그래밍 언어로 된 애플리케이션 사이의 언어 프로젝션을 구현하며,
    상기 운영 체제의 상기 애플리케이션 프로그래밍 인터페이스는 메모리에 저장된 메타데이터에 의해 기술되고,
    상기 언어 프로젝션은 상기 운영 체제의 상기 애플리케이션 프로그래밍 인터페이스 중 하나의 엘리먼트를 나타내는, 타깃 프로그래밍 언어로 된 프로그램의 네임드 엘리먼트의 표시를 수신하고, 상기 메타데이터를 사용하여 상기 타깃 프로그래밍 언어로 된 상기 프로그램의 프로젝션 엘리먼트를 생성하며 - 상기 프로젝션 엘리먼트는, 상기 운영 체제의 상기 애플리케이션 프로그래밍 인터페이스의 엘리먼트의 상기 프로그램의 상기 네임드 엘리먼트로의 프로젝션이고, 그 결과, 런타임 시에 상기 프로그램의 프로젝션 엘리먼트는 상기 프로그램이 상기 운영 체제의 상기 애플리케이션 프로그래밍 인터페이스에 액세스하는 것을 가능하게 함 - ,
    상기 프로젝션 엘리먼트는, 타입에 따라, 운영 체제 표현과 애플리케이션 표현 사이에서 데이터를 마샬링하고,
    상기 메타데이터는 메타데이터 파일에 저장되며,
    상기 메타데이터 파일은, 상기 애플리케이션 프로그래밍 인터페이스의 엘리먼트를 머신 판독 가능한 프로그래밍 언어의 독립적 형식으로 기술하며,
    상기 메타데이터 파일은, 상기 운영 체제의 일부로서 알고 있는 위치에 표준 파일 형식으로 저장되는
    컴퓨팅 머신.
  12. 제11항에 있어서,
    상기 프로젝션 엘리먼트를 생성하는 것은, 컴파일 시에, 하나 이상의 프로젝션 엘리먼트를 정의하는 코드를 생성하는 것을 포함하는
    컴퓨팅 머신.
  13. 제11항에 있어서,
    상기 프로젝션 엘리먼트를 생성하는 것은, 상기 프로그램이 해석될 때, 하나 이상의 프로젝션 엘리먼트를 정의하는 코드를 생성하는 것을 포함하는
    컴퓨팅 머신.
  14. 제11항에 있어서,
    상기 프로젝션 엘리먼트는, 메소드, 속성 및 이벤트를 포함하는 인터페이스를 포함하는
    컴퓨팅 머신.
  15. 제11항에 있어서,
    상기 프로젝션 엘리먼트는 예외를 상기 운영 체제로부터 상기 애플리케이션으로 전파하는
    컴퓨팅 머신.
KR1020147005283A 2011-08-31 2011-10-11 운영 체제의 네이티브 애플리케이션 프로그래밍 인터페이스를 다른 프로그래밍 언어로 프로젝션하는 기법 KR101896138B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/223,296 US8695021B2 (en) 2011-08-31 2011-08-31 Projecting native application programming interfaces of an operating system into other programming languages
US13/223,296 2011-08-31
PCT/US2011/055704 WO2013032506A1 (en) 2011-08-31 2011-10-11 Projecting native application programming interfaces of an operating system into other programming languages

Publications (2)

Publication Number Publication Date
KR20140067017A KR20140067017A (ko) 2014-06-03
KR101896138B1 true KR101896138B1 (ko) 2018-09-07

Family

ID=47445766

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020147005283A KR101896138B1 (ko) 2011-08-31 2011-10-11 운영 체제의 네이티브 애플리케이션 프로그래밍 인터페이스를 다른 프로그래밍 언어로 프로젝션하는 기법

Country Status (12)

Country Link
US (2) US8695021B2 (ko)
EP (1) EP2751673A4 (ko)
JP (1) JP5905577B2 (ko)
KR (1) KR101896138B1 (ko)
CN (1) CN102866884B (ko)
AU (1) AU2011375748B2 (ko)
BR (1) BR112014004469A2 (ko)
CA (1) CA2845480C (ko)
MX (2) MX339807B (ko)
RU (1) RU2598600C2 (ko)
TW (2) TWI556170B (ko)
WO (1) WO2013032506A1 (ko)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9798524B1 (en) * 2007-12-04 2017-10-24 Axway, Inc. System and method for exposing the dynamic web server-side
US9116780B2 (en) * 2013-02-06 2015-08-25 Google Inc. Method for modeling source code having code segments that lack source location
US9864861B2 (en) 2014-03-27 2018-01-09 Intel Corporation Object oriented marshaling scheme for calls to a secure region
US10635504B2 (en) 2014-10-16 2020-04-28 Microsoft Technology Licensing, Llc API versioning independent of product releases
US10394552B2 (en) 2016-05-17 2019-08-27 Dropbox, Inc. Interface description language for application programming interfaces
US10146519B2 (en) 2016-09-20 2018-12-04 Bluedata Software, Inc. Generation and deployment of scripts for large scale processing framework services
CN107957911B (zh) * 2016-10-18 2019-07-05 腾讯科技(深圳)有限公司 组件调用的方法和装置、组件数据处理的方法和装置
CN110663068B (zh) * 2017-05-23 2024-02-02 皇家Kpn公司 用于渲染全景场景的坐标映射
US10620980B2 (en) 2018-03-28 2020-04-14 Microsoft Technology Licensing, Llc Techniques for native runtime of hypertext markup language graphics content
US10866845B2 (en) * 2018-05-16 2020-12-15 Microsoft Technology Licensing, Llc Exposing native OS APIS in a web browser
CN108920218B (zh) * 2018-05-23 2023-03-03 北京五八信息技术有限公司 一种反射调用方法、装置、终端及计算机可读存储介质
US10725745B2 (en) * 2018-05-24 2020-07-28 Walmart Apollo, Llc Systems and methods for polyglot analysis
JP7067286B2 (ja) * 2018-06-06 2022-05-16 オムロン株式会社 制御システム、制御システムの制御方法、および制御システムのプログラム
CN108920133B (zh) * 2018-06-14 2021-06-18 北京三快在线科技有限公司 跨语言编程方法、装置、电子设备及存储介质
CA3111831A1 (en) * 2018-09-11 2020-03-19 Mastercard Technologies Canada ULC Transpilation of fraud detection rules to native language source code
US10838780B2 (en) * 2018-12-10 2020-11-17 Mcafee, Llc Portable hosted content
CN113835755B (zh) * 2021-09-24 2023-08-22 天津津航计算技术研究所 一种无操作系统环境下串口控制台实现方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5339422A (en) 1991-03-07 1994-08-16 Digital Equipment Corporation System and method for jacketing cross-domain calls in a multi-code execution and debugging system within a multi-architecture environment
EP1845444A1 (en) 2006-04-13 2007-10-17 Microsoft Corporation Virtual execution system for ressource-constrained devices
US20090199220A1 (en) 2008-02-06 2009-08-06 Rolf Bahlke Calling Services from a Remote Client

Family Cites Families (96)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5097533A (en) * 1988-11-29 1992-03-17 International Business Machines Corporation System and method for interfacing computer application programs written in different languages to a software system
US5910180A (en) 1995-11-21 1999-06-08 Diamond Multimedia Systems, Inc. Context virtualizing device driver architecture
US5887172A (en) * 1996-01-10 1999-03-23 Sun Microsystems, Inc. Remote procedure call system and method for RPC mechanism independent client and server interfaces interoperable with any of a plurality of remote procedure call backends
US6035342A (en) 1997-03-19 2000-03-07 Microsoft Corporation Method and computer program product for implementing object relationships
US6026238A (en) * 1997-08-18 2000-02-15 Microsoft Corporatrion Interface conversion modules based upon generalized templates for multiple platform computer systems
US20050182828A1 (en) 1999-04-21 2005-08-18 Interactual Technologies, Inc. Platform specific execution
US6745385B1 (en) * 1999-09-01 2004-06-01 Microsoft Corporation Fixing incompatible applications by providing stubs for APIs
EP1117033A1 (en) 2000-01-14 2001-07-18 Sun Microsystems, Inc. Dynamic dispatch function
US7783720B1 (en) 2000-04-21 2010-08-24 Oracle America, Inc. CORBA metadata gateway to telecommunications management network
US6813770B1 (en) 2000-04-21 2004-11-02 Sun Microsystems, Inc. Abstract syntax notation to interface definition language converter framework for network management
US7577834B1 (en) 2000-05-09 2009-08-18 Sun Microsystems, Inc. Message authentication using message gates in a distributed computing environment
US6691302B1 (en) 2000-05-31 2004-02-10 Siemens Information & Communications Networks, Inc. Interfacing a service component to a native API
US7574346B2 (en) * 2000-10-30 2009-08-11 Microsoft Corporation Kernel emulator for non-native program modules
US7065742B1 (en) 2000-10-30 2006-06-20 Microsoft Corporation System and method for dynamically processing declarative language instance data
US6993744B2 (en) 2000-12-19 2006-01-31 Tajen Corporation Method for enabling a compiler or interpreter to use identifiers found at run time in a map container object in a manner similar or identical to identifiers declared at compile time
US20020161596A1 (en) 2001-04-30 2002-10-31 Johnson Robert E. System and method for validation of storage device addresses
US6996832B2 (en) 2001-05-30 2006-02-07 Bea Systems, Inc. System and method for software component plug-in framework
CA2349905A1 (en) * 2001-06-07 2002-12-07 Ibm Canada Limited-Ibm Canada Limitee System and method of mapping between software objects and structured language element based documents
US7165239B2 (en) 2001-07-10 2007-01-16 Microsoft Corporation Application program interface for network software platform
US7581231B2 (en) 2001-07-10 2009-08-25 Microsoft Corporation Computing system and method for allowing plurality of applications written in different programming languages to communicate and request resources or services via a common language runtime layer
US7631084B2 (en) 2001-11-02 2009-12-08 Juniper Networks, Inc. Method and system for providing secure access to private networks with client redirection
US20040201600A1 (en) 2001-12-14 2004-10-14 Microsoft Corporation Methods and system for providing an XML-based interface description language
US7330971B1 (en) 2002-01-11 2008-02-12 Microsoft Corporation Delegated administration of namespace management
US20030188043A1 (en) 2002-03-27 2003-10-02 Woodall Thomas R. Two layer middleware architecture with an intermediate target independent interface
US7320123B2 (en) 2002-04-01 2008-01-15 Sun Microsystems, Inc. Method and system for detecting deprecated elements during runtime
US7424717B2 (en) 2002-05-01 2008-09-09 Bea Systems, Inc. Systems and methods for business process plug-in development
US7219339B1 (en) 2002-10-29 2007-05-15 Cisco Technology, Inc. Method and apparatus for parsing and generating configuration commands for network devices using a grammar-based framework
US7412658B2 (en) 2002-11-14 2008-08-12 Sap Ag Modeling system for graphic user interface
US7171539B2 (en) * 2002-11-18 2007-01-30 Arm Limited Apparatus and method for controlling access to a memory
US7546607B2 (en) 2002-11-19 2009-06-09 Microsoft Corporation Native code exposing virtual machine managed object
US7784044B2 (en) 2002-12-02 2010-08-24 Microsoft Corporation Patching of in-use functions on a running computer system
US6993603B2 (en) * 2002-12-09 2006-01-31 Microsoft Corporation Managed file system filter model and architecture
US7197417B2 (en) 2003-02-14 2007-03-27 Advantest America R&D Center, Inc. Method and structure to develop a test program for semiconductor integrated circuits
US7846023B2 (en) 2003-03-27 2010-12-07 Microsoft Corporation Application-centric user interface techniques
US7383255B2 (en) 2003-06-23 2008-06-03 Microsoft Corporation Common query runtime system and application programming interface
US7380235B1 (en) 2003-06-27 2008-05-27 Microsoft Corporation Application program interface call replay tool
US7519951B2 (en) 2003-09-30 2009-04-14 International Business Machines Corporation Multi-attribute dynamic link library packaging
US20050091271A1 (en) * 2003-10-23 2005-04-28 Kasy Srinivas Systems and methods that schematize audio/video data
US7493592B2 (en) 2003-10-24 2009-02-17 Microsoft Corporation Programming interface for a computer platform
US7721254B2 (en) 2003-10-24 2010-05-18 Microsoft Corporation Programming interface for a computer platform
US8055907B2 (en) 2003-10-24 2011-11-08 Microsoft Corporation Programming interface for a computer platform
US20050114832A1 (en) 2003-11-24 2005-05-26 Microsoft Corporation Automatically generating program code from a functional model of software
US7392527B2 (en) * 2003-12-10 2008-06-24 Microsoft Corporation Driver-specific context for kernel-mode shimming
GB2409735A (en) 2003-12-30 2005-07-06 Ibm Method and system for change management of interfaces in distributed computer systems
US7694315B2 (en) * 2004-02-13 2010-04-06 Microsoft Corporation Schema-based machine generated programming models
US7444621B2 (en) 2004-02-20 2008-10-28 Microsoft Corporation Method and system for providing a common operating system
US20050216552A1 (en) * 2004-03-24 2005-09-29 Samuel Fineberg Communication-link-attached persistent memory system
US7707583B2 (en) 2004-05-20 2010-04-27 Sap Ag Robust sharing of runtime systems
US20050268308A1 (en) * 2004-05-28 2005-12-01 Nokia Corporation System and method for implementing a general application program interface
US8306991B2 (en) 2004-06-07 2012-11-06 Symantec Operating Corporation System and method for providing a programming-language-independent interface for querying file system content
US7941402B2 (en) 2004-09-24 2011-05-10 Sap Ag Storing and using classes in databases
US8898123B2 (en) 2005-06-07 2014-11-25 Rockwell Automation Technologies, Inc. Method and system for interface configuration via device-side scripting
WO2006055838A2 (en) 2004-11-18 2006-05-26 America Online, Inc. Runtime environment
US20060161910A1 (en) 2005-01-14 2006-07-20 International Business Machines Corporation Method, system and program product for automatically ensuring compatability of a code module loaded into a program-code environment
US7519713B2 (en) 2005-02-04 2009-04-14 Microsoft Corporation Mapping between object oriented and service oriented representations of a distributed application
US7950023B2 (en) 2005-02-04 2011-05-24 Microsoft Corporation Utilizing abstract descriptions to generate, exchange, and configure service and client runtimes
US7325007B2 (en) 2005-03-07 2008-01-29 Microsoft Corporation System and method for supporting non-native data types in a database API
US7685635B2 (en) 2005-03-11 2010-03-23 Microsoft Corporation Systems and methods for multi-level intercept processing in a virtual machine environment
US7716661B2 (en) 2005-03-16 2010-05-11 Microsoft Corporation Embedded device update service
US20060287890A1 (en) 2005-06-15 2006-12-21 Vanderbilt University Method and apparatus for organizing and integrating structured and non-structured data across heterogeneous systems
US7992140B2 (en) * 2005-07-29 2011-08-02 Microsoft Corporation Compiler supporting programs as data objects
US20070039010A1 (en) 2005-08-15 2007-02-15 Microsoft Corporation Automatic generation of software code to facilitate interoperability
KR101198583B1 (ko) 2005-10-12 2012-11-06 한국과학기술원 메타데이터를 이용한 멀티미디어 미들웨어 장치와 그 관리방법 및 기록 매체
US7624257B2 (en) 2005-11-30 2009-11-24 International Business Machines Corporation Digital data processing apparatus having hardware multithreading support including a register set reserved for special class threads
US7716246B2 (en) 2005-11-30 2010-05-11 Microsoft Corporation Dynamic mechanism for providing metadata
US20070156913A1 (en) 2005-12-30 2007-07-05 Hiroyuki Miyamoto Method for enabling extension points through plug-ins
US9081585B1 (en) 2006-03-31 2015-07-14 The Mathworks, Inc. Interfacing a device driver with an application using a virtual driver interface and a strategy
US8104048B2 (en) 2006-08-04 2012-01-24 Apple Inc. Browsing or searching user interfaces and other aspects
EP2293230B1 (en) 2006-09-11 2014-05-07 Software AG System for managing the lifecycle of a service oriented architecture
GB0619147D0 (en) 2006-09-28 2006-11-08 Ibm A method, apparatus or software for managing software component version identifications in a componentised software system
US7971208B2 (en) 2006-12-01 2011-06-28 Microsoft Corporation Developing layered platform components
US8370818B2 (en) 2006-12-02 2013-02-05 Time Warner Cable Inc. Methods and apparatus for analyzing software interface usage
JP2009020705A (ja) 2007-07-12 2009-01-29 Hitachi Ltd Guiアプリケーション開発支援装置及び開発支援方法
US20090024986A1 (en) * 2007-07-19 2009-01-22 Microsoft Corporation Runtime code modification
US8667482B2 (en) 2007-08-10 2014-03-04 Microsoft Corporation Automated application modeling for application virtualization
KR100927442B1 (ko) 2007-08-16 2009-11-19 주식회사 마크애니 가상 응용프로그램 생성 시스템, 가상 응용프로그램 설치방법, 네이티브 api 호출 처리 방법 및 가상응용프로그램 수행 방법
US8364683B2 (en) 2007-08-30 2013-01-29 International Business Machines Corporation Importing and reconciling resources from disjoint name spaces to a common namespace
US20090132285A1 (en) * 2007-10-31 2009-05-21 Mckesson Information Solutions Llc Methods, computer program products, apparatuses, and systems for interacting with medical data objects
KR101528853B1 (ko) 2007-12-14 2015-07-01 삼성전자주식회사 Api 서비스 방법과 api 매쉬업 생성 방법, 장치 및기록매체
US8250524B2 (en) 2007-12-21 2012-08-21 Microsoft Corporation Contract programming for code error reduction
US8484204B2 (en) 2008-08-28 2013-07-09 Microsoft Corporation Dynamic metadata
US9639375B2 (en) 2008-08-28 2017-05-02 Red Hat, Inc. Generation of language bindings for libraries using data from compiler generated debug information
US8595714B1 (en) 2009-03-04 2013-11-26 Amazon Technologies, Inc. User controlled environment updates in server cluster
GB0907171D0 (en) 2009-04-27 2009-06-10 Springsource Ltd Method and apparatus for automatically generating source code files in a storage unit
US9075667B2 (en) 2009-05-21 2015-07-07 Microsoft Technology Licensing, Llc Dynamic binding directed by static types
US8510729B2 (en) 2009-05-21 2013-08-13 Salesforce.Com, Inc. System, method and computer program product for versioning and deprecation of components of an application
US8495621B2 (en) 2009-06-15 2013-07-23 Microsoft Corporation Catalog-based software component management
US8983982B2 (en) 2009-12-22 2015-03-17 Bmc Software, Inc. Mechanism for deprecating object oriented data
US9483284B2 (en) 2011-02-25 2016-11-01 Red Hat, Inc. Version compatibility determination
US8776094B2 (en) 2011-08-11 2014-07-08 Microsoft Corporation Runtime system
US9619779B2 (en) 2011-08-26 2017-04-11 Apple Inc. Client-side policy enforcement of developer API use
US20130055291A1 (en) 2011-08-31 2013-02-28 Microsoft Corporation Describing native application programming interfaces of an operating system with metadata
US9262183B2 (en) 2012-04-23 2016-02-16 Microsoft Technology Licensing, Llc Self-service composed web APIs
US8954479B2 (en) 2012-06-13 2015-02-10 International Business Machines Corporation End-to-end interoperability and workflows from building architecture design to one or more simulations
US9444899B2 (en) 2012-12-26 2016-09-13 Microsoft Technology Licensing, Llc Use of internet information services logging to collect user information in an asynchronous manner
US8793359B1 (en) 2013-11-25 2014-07-29 Software Ag Systems and/or methods for intelligently detecting API key domains

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5339422A (en) 1991-03-07 1994-08-16 Digital Equipment Corporation System and method for jacketing cross-domain calls in a multi-code execution and debugging system within a multi-architecture environment
EP1845444A1 (en) 2006-04-13 2007-10-17 Microsoft Corporation Virtual execution system for ressource-constrained devices
US20090199220A1 (en) 2008-02-06 2009-08-06 Rolf Bahlke Calling Services from a Remote Client

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
PIETREK MATT. Avoiding DLL Hell: Introducing Application Metadata in the Microsoft .NET Framework. MSDN MAGAZINE. 2000년 10월.

Also Published As

Publication number Publication date
CN102866884A (zh) 2013-01-09
RU2014107726A (ru) 2015-09-10
EP2751673A4 (en) 2015-03-04
AU2011375748A1 (en) 2014-03-06
WO2013032506A1 (en) 2013-03-07
US20150020084A1 (en) 2015-01-15
MX339807B (es) 2016-06-10
TW201310341A (zh) 2013-03-01
BR112014004469A2 (pt) 2017-03-28
CA2845480A1 (en) 2013-03-07
CN102866884B (zh) 2016-09-28
MX2014002474A (es) 2014-03-27
CA2845480C (en) 2018-03-13
EP2751673A1 (en) 2014-07-09
TW201619820A (zh) 2016-06-01
JP5905577B2 (ja) 2016-04-20
TWI556170B (zh) 2016-11-01
JP2014525623A (ja) 2014-09-29
US9229790B2 (en) 2016-01-05
US20130055292A1 (en) 2013-02-28
RU2598600C2 (ru) 2016-09-27
TWI536263B (zh) 2016-06-01
KR20140067017A (ko) 2014-06-03
US8695021B2 (en) 2014-04-08
MX366619B (es) 2019-07-16
AU2011375748B2 (en) 2016-11-24

Similar Documents

Publication Publication Date Title
KR101896138B1 (ko) 운영 체제의 네이티브 애플리케이션 프로그래밍 인터페이스를 다른 프로그래밍 언어로 프로젝션하는 기법
KR101944570B1 (ko) 변형 컨텍스트-인식 데이터 소스 관리
US7543268B2 (en) Development environment for developing applications using a metamodel and a metadata API
US20130055291A1 (en) Describing native application programming interfaces of an operating system with metadata
KR101795844B1 (ko) 런타임 시스템
US10140119B2 (en) Modular serialization
Troelsen et al. C# 6.0 and the. NET 4.6 Framework
WO2024045382A1 (zh) 区块链中实现反射机制
Van der Linden Just Java 2
US9038033B1 (en) Techniques and mechanisms for web application minification
US10387142B2 (en) Using annotation processors defined by modules with annotation processors defined by non-module code
US11048489B2 (en) Metadata application constraints within a module system based on modular encapsulation
US20090249249A1 (en) User interface framework and techniques
Yoo et al. Snapshot-based migration of es6 javascript
Turtschi et al. C#. Net Developer's Guide
Bell et al. Learn to Tango with D
Hollister et al. Blender “DNA” and Serialization
Hollister Core Blender Development

Legal Events

Date Code Title Description
N231 Notification of change of applicant
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right