KR20140067017A - 운영 체제의 네이티브 애플리케이션 프로그래밍 인터페이스를 다른 프로그래밍 언어로 프로젝션하는 기법 - Google Patents
운영 체제의 네이티브 애플리케이션 프로그래밍 인터페이스를 다른 프로그래밍 언어로 프로젝션하는 기법 Download PDFInfo
- Publication number
- KR20140067017A KR20140067017A KR1020147005283A KR20147005283A KR20140067017A KR 20140067017 A KR20140067017 A KR 20140067017A KR 1020147005283 A KR1020147005283 A KR 1020147005283A KR 20147005283 A KR20147005283 A KR 20147005283A KR 20140067017 A KR20140067017 A KR 20140067017A
- Authority
- KR
- South Korea
- Prior art keywords
- operating system
- api
- javascript
- language
- metadata
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
- G06F9/4484—Executing subprograms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/542—Event management; Broadcasting; Multicasting; Notifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/541—Interprogram communication via adapters, e.g. between incompatible applications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/36—Software 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
운영 체제는 일반적으로 애플리케이션으로 하여금 운영 체제에 의해 지원되는 기능에 액세스하는 것을 가능하게 하는 수 개의 애플리케이션 프로그래밍 인터페이스를 가진다. 이러한 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는 이러한 시스템이 구현될 수 있는 예시적인 컴퓨팅 장치의 블록도이다.
도 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을 호출한 델리게이트에 대한 메타데이터 및 이러한 델리게이트의 인스턴스를 생성하는 의사-자바스크립트 코드를 나타낸다.
예시적인 메타데이터:
의사-자바스크립트:
인터페이스는 객체로서 자바스크립트에 직접적으로 프로젝션되지 않는다. 그러나, 인터페이스는 파라미터일 수 있고, 운영 체제 API 메소드의 타입을 반환할 수 있다.
타깃 프로그래밍 언어에서 자연스런 프로젝션을 제공하기 위해, 전술한 예에서 멤버에 대한 camelCase 네임을 사용하기 위한 자바스크립트에서의 스트롱 컨벤션(strong convention)에 뒤이어, camelCase로 변경되는 자신의 네임을 가진 멤버(member)가 자바스크립트로 프로젝션된다. 자바스크립트 생성자 함수(constructor function)와 유사한 타입은 통상적으로 PascalCase이고 그 형식으로 프로젝션된다. 유사하게, addEventListener 패턴에 대한 열거 속성(enum properties), 구조체 필드(struct fields), 이벤트 네임이 camelCase의 네임을 갖는다.
정적 타입 정보에 기초하여 런타임 클래스의 표현인 것으로 알려지지 않은 인터페이스 인스턴스(자바스크립트로 마샬링됨)가 다음의 단계를 진행한다. 첫째, 인터페이스에 대한 런타임 클래스 네임을 획득하기 위한 인터페이스에 대한 호출이 이루어진다. 성공하면, 객체가 런타임 클래스 인스턴트 객체(이하에 설명됨)로서 프로젝션된다. 성공하지 않으면, 객체가 구현될 것으로 알려진 인터페이스를 정확히 구현하는 언네임드(unnamed) 런타임 클래스의 인스턴스였고 일시적으로 요청되는 인터페이스인 경우에, 객체가 프로젝션된다.
프로젝션된 런타임 클래스 인스턴스 객체인지 또는 프로젝션된 인터페이스 인스턴스 객체인지 알아보기 위해 인터페이스 타입으로 마샬링되는 자바스크립트 값이 확인된다. 런타임 클래스 객체이고 그 객체가 대리하는(proxies) 원래 값이 인터페이스 타입을 구현하는 경우에, 그 인터페이스 타입의 객체 구현이 운영 체제에 전달된다. 그렇지 않으면, 타입 에러 예외(type error exception)가 일어날 수 있다.
운영 체제 API의 객체는 런타임 클래스의 인스턴스일 수 있다. 런타임 클래스는 하나 이상의 인터페이스의 세트(이하에 정의됨)를 구현한다. 실행 객체(running object)의 구현된 인터페이스의 목록이 그 실행 객체를 반환한 메소드의 메타데이터에 기초하여 또는 런타임 클래스 네임을 액세스하여 메타데이터를 검색함으로써 판정될 수 있다. 자바스크립트가 프로토타입 기반의 동적 언어이기 때문에, 이는 클래스의 구성(contruct of class)을 갖지 않는다. 클래스 구성은 자바스크립에서 객체로서 프로젝션된다.
따라서, 운영 체제 API가 자바스크립트에서 객체로서 프로젝션된다. 클래스의 구현된 모든 인터페이스에 정의되는 메소드, 속성 및 이벤트의 집합체(union)가, 프로젝션된 자바스크립트 객체에서 이용가능한 네임드 속성으로서 자신의 프로토타입을 통해 노출되는 타입 멤버를 나타낸다. 자바스크립트 언어 프로젝션의 소비자(consumers)는 멤버가 실제로 정의되는 인터페이스가 어느 것이냐에 대해 걱정하지 않고, 직접적으로 클래스의 임의의 멤버에 액세스할 수 있다.
자바스크립트는 동적이고, 이는 새로운 속성이 임의의 시점에 객체에 추가되거나 제거될 수 있다는 것을 의미한다. 프로젝션된 객체는 사전 정의된 인터페이스 멤버가 무효가 되거나 삭제되지 않는 한, 새로운 속성 및 메소드를 추가하는 것을 지원할 수 있다. 자바스크립트에서, 프로젝션된 객체는 확장가능하나, 네임드 타입 멤버의 컬렉션은 구성가능하지 않다. 프로젝션된 객체는 런타임 클래스 구현 인터페스(runtime class-implemented interface)로부터의 멤버의 컬렉션에 정의된 인스턴스 멤버를 가진 프로토타입을 가진다.
전술한 바와 같이, 이러한 인터페이스는 메소드, 파라미터 및 이벤트를 가진다.
언어 프로젝션 레이어의 메소드가 메소드 당 슬롯을 가지는 브이테이블(vtable)로서 구현된다. 정보에 관한 메타데이터는 파라미터의 네임, 타입 및 방향(입력/출력)과 함께 메소드 네임을 제공한다. 메소드는 프로젝션된 런타임 클래스 또는 인터페이스 객체에 대한 호출가능한 속성으로서 자바스크립트에 프로젝션된다. 이러한 속성은 이다. 호출되는 경우에, 아규먼트가 이들의 대응하는 파라미터 타입에 따라 마샬링되고, 메소드가 이러한 값을 이용하여 호출된다. 반환 값(들)이 자바스크립트 값으로 마샬링되고, 여기서 자바스크립트 객체는 값으로서 반환한다.
언어 프로젝션 레이어에서의 속성이 겟 메소드(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 (10)
- 운영 체제의 애플리케이션 프로그래밍 인터페이스들을 기술하는 메타데이터를 메모리로 수신하는 단계와,
상기 애플리케이션 프로그래밍 인터페이스들 중 하나의 엘리먼트를 나타내는, 프로그래밍 언어로 된 프로그램의 네임드 엘리먼트(named element)에 대한 표시(indication)를 수신하는 단계와,
상기 메타데이터를 사용하여, 상기 애플리케이션 프로그래밍 인터페이스의 상기 네임드 엘리먼트를 프로젝션하는(projecting) 단계
를 포함하는
컴퓨터로 구현되는 프로세스.
- 제1항에 있어서,
상기 프로젝션하는 단계는, 상기 프로그램이 컴파일되는 경우에, 하나 이상의 엘리먼트를 생성하는 코드를 생성하고 상기 생성된 엘리먼트에 대한 데이터를 타입에 따라 마샬링하는(marshaling) 단계를 포함하는
컴퓨터로 구현되는 프로세스.
- 제1항에 있어서,
상기 프로젝션하는 단계는, 상기 프로그램이 해석되는(interpreting) 경우에, 하나 이상의 엘리먼트를 생성하는 코드를 생성하고 상기 생성된 엘리먼트에 대한 데이터를 타입에 따라 마샬링 하는 단계를 포함하는
컴퓨터로 구현되는 프로세스.
- 제1항에 있어서,
상기 프로젝션하는 단계는, 타입에 따라 데이터를 운영 체제 표현과 애플리케이션 표현 간에 마샬링하는 단계를 포함하는
컴퓨터로 구현되는 프로세스.
- 제1항에 있어서,
상기 프로젝션하는 단계는 메소드, 속성 및 이벤트를 포함하는 인터페이스를 프로젝션하는 단계를 포함하는
컴퓨터로 구현되는 프로세스.
- 하나 이상의 프로세서와,
하나 이상의 컴퓨터 저장 매체
를 포함하고,
상기 컴퓨터 저장 매체에는 컴퓨터 프로그램 명령어들이 저장되고,
상기 명령어들은, 프로세싱 장치에 의해 처리되는 경우에 운영 체제의 애플리케이션 프로그래밍 인터페이스와 프로그래밍 언어로 된 애플리케이션 사이의 언어 프로젝션을 구현하며,
상기 애플리케이션 프로그래밍 인터페이스는 메모리에 저장된 메타데이터에 의해 기술되고,
상기 언어 프로젝션은 상기 애플리케이션 프로그래밍 인터페이스 중 하나의 엘리먼트를 나타내는 프로그래밍 언어로 된 네임드 엘리먼트의 표시를 수신하고, 상기 메타데이터를 사용하여 상기 애플리케이션 프로그래밍 인터페이스의 네임드 엘리먼트를 상기 프로그래밍 언어로 된 애플리케이션으로 프로젝션하는
컴퓨팅 머신.
- 제6항에 있어서,
상기 프로젝션은, 컴파일 시에(at compile time), 하나 이상의 엘리먼트를 생성하는 코드를 생성하고, 상기 생성된 엘리먼트에 대한 데이터를 타입에 따라 마샬링하는 것을 포함하는
컴퓨팅 머신.
- 제6항에 있어서,
상기 프로젝션은, 프로그램이 해석되는 경우에, 하나 이상의 엘리먼트를 생성하는 코드를 생성하고, 상기 생성된 엘리먼트에 대한 데이터를 타입에 따라 마샬링하는 것을 포함하는
컴퓨팅 머신.
- 제7항에 있어서,
상기 프로젝션은, 타입에 따라 데이터를 운영 체제 표현과 애플리케이션 표현 간에 마샬링하는 것을 포함하는
컴퓨팅 머신.
- 제7항에 있어서,
상기 프로젝션은, 메소드, 속성 및 이벤트를 포함하는 인터페이스를 프로젝션하는 것을 포함하는
컴퓨팅 머신.
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 true KR20140067017A (ko) | 2014-06-03 |
KR101896138B1 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)
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 | 北京三快在线科技有限公司 | 跨语言编程方法、装置、电子设备及存储介质 |
AU2019337773B2 (en) * | 2018-09-11 | 2024-02-15 | 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)
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)
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 |
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 |
US7165239B2 (en) | 2001-07-10 | 2007-01-16 | Microsoft Corporation | Application program interface for network software platform |
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 |
US7519976B2 (en) | 2002-05-01 | 2009-04-14 | Bea Systems, Inc. | Collaborative business plug-in framework |
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 |
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 |
US7493592B2 (en) | 2003-10-24 | 2009-02-17 | 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 | 한국과학기술원 | 메타데이터를 이용한 멀티미디어 미들웨어 장치와 그 관리방법 및 기록 매체 |
US7716246B2 (en) | 2005-11-30 | 2010-05-11 | Microsoft Corporation | Dynamic mechanism for providing metadata |
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 |
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 |
US9639375B2 (en) | 2008-08-28 | 2017-05-02 | Red Hat, Inc. | Generation of language bindings for libraries using data from compiler generated debug information |
US8484204B2 (en) | 2008-08-28 | 2013-07-09 | Microsoft Corporation | Dynamic metadata |
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 |
EP2433200B1 (en) | 2009-05-21 | 2020-02-26 | Salesforce.Com, Inc. | System, method and computer program product for versioning 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 |
US8949292B2 (en) | 2012-06-13 | 2015-02-03 | International Business Machines Corporation | Interoperability format translation and transformation between IFC architectural design file and simulation file formats |
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 |
-
2011
- 2011-08-31 US US13/223,296 patent/US8695021B2/en not_active Expired - Fee Related
- 2011-10-07 TW TW105101130A patent/TWI556170B/zh not_active IP Right Cessation
- 2011-10-07 TW TW100136566A patent/TWI536263B/zh not_active IP Right Cessation
- 2011-10-11 MX MX2014002474A patent/MX339807B/es active IP Right Grant
- 2011-10-11 KR KR1020147005283A patent/KR101896138B1/ko active IP Right Grant
- 2011-10-11 BR BR112014004469A patent/BR112014004469A2/pt not_active Application Discontinuation
- 2011-10-11 WO PCT/US2011/055704 patent/WO2013032506A1/en active Application Filing
- 2011-10-11 CA CA2845480A patent/CA2845480C/en not_active Expired - Fee Related
- 2011-10-11 JP JP2014528374A patent/JP5905577B2/ja not_active Expired - Fee Related
- 2011-10-11 AU AU2011375748A patent/AU2011375748B2/en not_active Ceased
- 2011-10-11 MX MX2016007569A patent/MX366619B/es unknown
- 2011-10-11 RU RU2014107726/08A patent/RU2598600C2/ru active
- 2011-10-11 EP EP11871395.7A patent/EP2751673A4/en not_active Ceased
-
2012
- 2012-08-31 CN CN201210317710.8A patent/CN102866884B/zh not_active Expired - Fee Related
-
2014
- 2014-04-04 US US14/244,951 patent/US9229790B2/en not_active Expired - Fee Related
Patent Citations (3)
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)
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 |
---|---|
CA2845480A1 (en) | 2013-03-07 |
CA2845480C (en) | 2018-03-13 |
KR101896138B1 (ko) | 2018-09-07 |
US20130055292A1 (en) | 2013-02-28 |
TWI556170B (zh) | 2016-11-01 |
RU2598600C2 (ru) | 2016-09-27 |
EP2751673A1 (en) | 2014-07-09 |
TWI536263B (zh) | 2016-06-01 |
JP2014525623A (ja) | 2014-09-29 |
US8695021B2 (en) | 2014-04-08 |
CN102866884A (zh) | 2013-01-09 |
JP5905577B2 (ja) | 2016-04-20 |
MX2014002474A (es) | 2014-03-27 |
EP2751673A4 (en) | 2015-03-04 |
AU2011375748A1 (en) | 2014-03-06 |
RU2014107726A (ru) | 2015-09-10 |
US9229790B2 (en) | 2016-01-05 |
WO2013032506A1 (en) | 2013-03-07 |
BR112014004469A2 (pt) | 2017-03-28 |
US20150020084A1 (en) | 2015-01-15 |
TW201619820A (zh) | 2016-06-01 |
CN102866884B (zh) | 2016-09-28 |
AU2011375748B2 (en) | 2016-11-24 |
MX366619B (es) | 2019-07-16 |
TW201310341A (zh) | 2013-03-01 |
MX339807B (es) | 2016-06-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101896138B1 (ko) | 운영 체제의 네이티브 애플리케이션 프로그래밍 인터페이스를 다른 프로그래밍 언어로 프로젝션하는 기법 | |
KR101944570B1 (ko) | 변형 컨텍스트-인식 데이터 소스 관리 | |
US20130055291A1 (en) | Describing native application programming interfaces of an operating system with metadata | |
US7543268B2 (en) | Development environment for developing applications using a metamodel and a metadata API | |
KR101795844B1 (ko) | 런타임 시스템 | |
Troelsen et al. | C# 6.0 and the. NET 4.6 Framework | |
US20170269929A1 (en) | Modular serialization | |
WO2024045382A1 (zh) | 区块链中实现反射机制 | |
Van der Linden | Just Java 2 | |
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 | |
US8234586B2 (en) | User interface framework and techniques | |
Nagel et al. | Professional C# 5.0 and. NET 4.5. 1 | |
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 | |
Ali | iPhone SDK 3 programming: advanced mobile development for Apple iPhone and iPod touch |
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 |