KR20140057547A - 런타임 시스템 - Google Patents
런타임 시스템 Download PDFInfo
- Publication number
- KR20140057547A KR20140057547A KR1020147003539A KR20147003539A KR20140057547A KR 20140057547 A KR20140057547 A KR 20140057547A KR 1020147003539 A KR1020147003539 A KR 1020147003539A KR 20147003539 A KR20147003539 A KR 20147003539A KR 20140057547 A KR20140057547 A KR 20140057547A
- Authority
- KR
- South Korea
- Prior art keywords
- interface
- operating system
- type
- abstract
- language
- 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
-
- 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/40—Transformation of program code
- G06F8/51—Source to source
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/76—Adapting program code to run in a different environment; Porting
-
- 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/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/73—Program documentation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
다양한 실시예는 프로그래밍 언어와는 무관하게, 운영 체제와 연관된 하나 이상의 인터페이스를 기술하는 능력을 제공한다. 이와 달리 또는 그에 더해, 특정 프로그래밍 언어와 연관된 컴파일러가 독립적인 인터페이스 기술(들)을 특정 프로그래밍 언어에 매핑하도록 구성될 수 있다. 몇몇 실시예에서, 애플리케이션은 운영 체제의 하나 이상의 인터페이스를 프로그램에 따라 결정하도록 구성될 수 있다.
Description
오늘날 컴퓨터들은 하드웨어 및 소프트웨어 리소스들에 대한 액세스를 관리하는 운영 체제를 포함한다. 결과적으로, 운영 체제는 프로그래머 및/또는 애플리케이션이 이들 리소스를 액세스할 수 있도록 해주는 애플리케이션 프로그래밍 인터페이스(API)와 같은 다양한 타입의 인터페이스를 포함할 수 있다. 몇몇 경우, 인터페이스들은 염두에 둔 특정 프로그래밍 언어로 프로그래밍된다. 클라이언트 애플리케이션이 특정 프로그래밍 언어로 작성된 경우, 이 클라이언트 애플리케이션은 특정 프로그래밍 언어에 고유한 방식으로 인터페이스를 액세스할 수 있다. 그러나, 인터페이스의 언어와 다른 언어로 작성된 클라이언트 애플리케이션은 때때로 인터페이스를 호출하기 위해 결국에는 추가의 코드 및/또는 래퍼 함수(wrapper functions)를 이용하게 될 수 있다.
일반적으로, 인터페이스들은 운영 체제 외부에 문서화된다. 성공적으로 인터페이스를 호출하고 래퍼 함수를 작성하기 위해, 프로그래머는 어떤 인터페이스들이 이용가능한지, 연관된 호출 파라미터가 무엇인지 등을 결정하기 위해 외부 문서를 참고한다. 새로운 버전의 운영 체제는 새로운 인터페이스, 구 인터페이스에 대한 수정, 및 더 이상 쓸모없는 인터페이스들의 제거를 포함할 수 있다. 따라서, API의 현재 세트를 유지하기 위해, 프로그래머는 운영 체제의 각각의 새로운 버전에 대해 외부 문서를 참고해야 한다. 이것은 때때로 인터페이스가 운영 체제에 출시되는 시점과 그 인터페이스가 프로그램에 포함될 수 있는 시점 간에 지연을 야기할 수 있다.
본 요약부는 이하 발명의 상세한 설명에서 보다 자세히 기술될 개념들 중 선택된 것들을 단순화된 형식으로 소개하기 위해 제공되는 것이다. 본 요약부는 청구항에 기재된 청구대상의 주된 사항 또는 핵심 사항을 밝히기 위한 것이 아니며, 청구항에 기재된 청구대상의 범위를 한정하기 위한 것은 더더욱 아니다.
다양한 실시예는 프로그래밍 언어와 무관하게, 운영 체제와 연관된 하나 이상의 인터페이스(들)를 기술하는 능력을 제공한다. 이와 달리 또는 그에 더해, 특정 프로그래밍 언어와 연관된 컴파일러가 독립적인 인터페이스 기술(들)을 특정 프로그래밍 언어에 매핑하도록 구성될 수 있다. 몇몇 실시예에서, 애플리케이션은 운영 체제의 하나 이상의 인터페이스(들)를 프로그램에 따라 결정하도록 구성될 수 있다.
몇몇 실시예는 추상 타입 시스템(abstract type system)을 이용하여 객체 지향 방식으로 운영 체제의 하나 이상의 인터페이스(들)를 모델링하는 능력을 제공한다. 몇몇 실시예에서, 확장형 인터페이스 정의 언어(IDL)는 하나 이상의 인터페이스(들) 간의 관계를 기술하기 위한 신택스(syntax)를 포함할 수 있다. 몇몇 실시예에서, 바이너리 계약(binary contract)은 추상 타입 시스템과 연관된 행위(behavior)를 노출시키도록 구성될 수 있다.
도면 전반에 걸쳐 유사한 특징부들을 참조하는데 동일한 참조번호가 사용된다.
도 1은 본 명세서에서 기술된 다양한 원리들이 하나 이상의 실시예에 따라 채용될 수 있는 동작 환경을 나타내는 도면.
도 2는 하나 이상의 실시예에 따른 아키텍처를 나타내는 도면.
도 3은 하나 이상의 실시예에 따른 방법의 단계들을 나타내는 흐름도.
도 4는 하나 이상의 실시예에 따른 관계도를 나타내는 도면.
도 5는 하나 이상의 실시예를 구현하는데 사용될 수 있는 예시적인 시스템을 나타내는 도면.
도 1은 본 명세서에서 기술된 다양한 원리들이 하나 이상의 실시예에 따라 채용될 수 있는 동작 환경을 나타내는 도면.
도 2는 하나 이상의 실시예에 따른 아키텍처를 나타내는 도면.
도 3은 하나 이상의 실시예에 따른 방법의 단계들을 나타내는 흐름도.
도 4는 하나 이상의 실시예에 따른 관계도를 나타내는 도면.
도 5는 하나 이상의 실시예를 구현하는데 사용될 수 있는 예시적인 시스템을 나타내는 도면.
개요
다양한 실시예는 프로그래밍 언어와 무관하게, 운영 체제와 연관된 하나 이상의 인터페이스(들)를 기술하는 능력을 제공한다. 추상 타입 시스템이 인터페이스 정의 언어(IDL)와 연계하여 인터페이스를 기술 및/또는 정의하도록 구성될 수 있다. 몇몇 실시예에서, 인터페이스는 객체 지향 방식으로 기술될 수 있다. 이와 달리 또는 그에 더해, 특정 프로그래밍 언어와 연관된 컴파일러가 언어 독립적인 인터페이스 기술(들)을 특정 프로그래밍 언어의 적절한 구성(appropriate constructs)에 매핑하도록 구성될 수 있다. 이와 달리 또는 그에 더해, 프로그래밍 언어 애플리케이션 런타임 환경은 언어 독립적인 인터페이스 기술(들)을 특정 런타임 환경에서의 적절한 구성에 동적으로 (예를 들어, 런타임 실행 동안) 매핑하도록 구성될 수 있다. 몇몇 실시예에서, 애플리케이션은 독립적인 인터페이스 기술(들)을 프로그램에 따라 결정하도록 구성될 수 있다. 몇몇 경우, 독립적인 인터페이스 기술(들)은 머신 판독가능 포맷으로 저장될 수 있다.
이하의 설명에서, "동작 환경"이라는 제목의 단락이 제공되어 하나 이상의 실시예가 채용될 수 있는 하나의 환경을 설명한다. 이에 이어, "운영 체제 컴포넌트 액세스"라는 제목의 단락이, 다수의 프로그래밍 언어들이 시스템 컴포넌트들을 프로그램에 따라 액세스할 수 있게 해주는 아키텍처를 설명한다. 다음으로, "추상 타입 시스템을 이용한 객체 지향 언어의 모델링"이라는 제목의 단락이, 추상 타입 시스템이 확장형 IDL과 연계하여 운영 체제 인터페이스들을 객체 지향 방식으로 기술하는 방식을 설명한다. 마지막으로, "예시적인 시스템"이라는 단락이, 하나 이상의 실시예를 구현하는데 이용될 수 있는 예시적인 시스템을 설명한다.
이하에서 설명될 다양한 실시예들에 대한 개요가 제공되었으며, 이제 하나 이상의 실시예가 구현될 수 있는 예시적인 동작 환경을 설명한다.
동작 환경
도 1은 하나 이상의 실시예에 따른 동작 환경을 참조 번호(100)로 나타낸다. 환경(100)은 하나 이상의 프로세스(들)(104) 및 하나 이상의 컴퓨터 판독가능 저장 매체(106)를 구비한 컴퓨팅 장치(102) 포함한다. 컴퓨터 판독가능 저장 매체는 예를 들어 일반적으로 컴퓨팅 장치와 연관된 휘발성 및 비휘발성 메모리 및/또는 저장 매체의 모든 형태를 포함할 수 있으나 여기에 국한되지는 않는다. 이러한 매체는 ROM, RAM, 플래시 메모리, 하드 디스크, 착탈가능 매체 등을 포함할 수 있다. 컴퓨팅 장치의 하나의 특정 예는 이하의 도 5에서 도시 및 설명된다.
또한, 컴퓨팅 장치(102)는 운영 체제(OS)(108) 및 연관된 운영 체제 인터페이스(들)(110)를 포함한다. 별개의 모듈로서 도시되어 있지만, 운영 체제(108) 및 운영 체제 인터페이스(들)(110)는 청구된 발명의 범주를 벗어나지 않으면서 별개의 모듈, 통합된 모듈 또는 이들의 임의의 조합으로 구현될 수 있음을 이해할 것이다. 운영 체제(108)는 컴퓨팅 장치(102)의 소프트웨어 및/또는 하드웨어 리소스(들)를 관리하도록 구성된 기능을 나타낸다. 운영 체제 인터페이스(들)(110)는 예를 들어 메모리 관리, 파일 관리, 서비스, 기능들, 리소스 관리, 주변 장치 관리 등과 같은, 운영 체제(108)에 의해 제공되는 서비스 및/또는 기능에 대한 프로그램적 액세스를 나타낸다.
컴퓨팅 장치(102)는 하나 이상의 인터페이스(들)를 기술하도록 구성된 하나 이상의 파일(들)을 나타내는 하나 이상의 기술 언어 파일(들)(112)을 포함한다. 몇몇 실시예에서, 운영 체제 인터페이스(들)(110)와 같은 인터페이스는 운영 체제와 연관될 수 있다. 기술 언어 파일들은 예를 들어 인터페이스 정의 언어(IDL), 확장가능 마크업 언어(XML) 등과 같은 임의의 적절한 기술, 마크업 언어 및/또는 신택스를 이용하여 인터페이스를 기술할 수 있다.
또한, 컴퓨팅 장치(102)는 하나 이상의 편집기/컴파일러 모듈(들)(114)도 포함한다. 몇몇 실시예에서, 편집기/컴파일러 모듈(114)은 기술 언어 파일(들)(112)을 판독 및/또는 해석하고 파일(들)(112)에 기초하여 하나 이상의 바이너리 메타데이터 파일(들)(116)과 같은 출력을 생성하는 기능을 나타낸다. 바이너리 메타데이터 파일(들)(116)은 운영 체제 인터페이스(들)(110) 및/또는 운영 체제(108)와 연관된 정보, 예를 들어, 입력 파라미터 타입, 파라미터 호출 순서, 인터페이스들 간의 관계 등을 포함하는 하나 이상의 머신 판독가능 파일(들)을 나타낸다.
이와 달리 또는 그에 더해, 편집기/컴파일러 모듈(들)(114)은 하나 이상의 소스 코드 파일(들)(118)을 판독 및/또는 해독하는 기능을 나타낸다. 소스 코드 파일(들)(118)은 적어도 하나의 프로그래밍 언어와 연관된 프로그래밍 문들(programming statements)을 포함하는 하나 이상의 파일(들)에 대응한다. 몇몇 경우, 소스 코드 파일(들)(118)은 하나 이상의 운영 체제 인터페이스(들)를 호출하는 문들(statements)을 포함할 수 있다. 편집기/컴파일러 모듈(들)(114)은 소스 코드 파일(들)(118)을 해석하고, 그 소스 파일(들)에 기초하여 머신 실행가능 코드를 생성한다.
컴퓨팅 장치(102)는 예를 들어 데스크탑 컴퓨터, 휴대용 컴퓨터, 노트북 컴퓨터, PDA와 같은 핸드헬드 컴퓨터, 셀룰러 폰 등과 같은 임의의 적절한 컴퓨팅 장치로서 구현될 수 있다.
예시적인 동작 환경에 대해 설명하였으며, 이제 운영 체제를 프로그램에 따라 하나 이상의 프로그래밍 언어(들)에 노출시키는 것에 대해 논의한다.
운영 체제 컴포넌트 액세스
컴퓨팅 장치 상에서 구동되는 애플리케이션들은 때때로 컴퓨팅 장치 상에서 구동되는 운영 체제에 의해 제공되는 특징들을 이용한다. 운영 체제는 컴퓨팅 장치 상에서 구동되는 연관된 리소스들에 대한 간단한 액세스를 가능하게 하고, 또한 서비스를 제공할 수 있다. 때때로, 이들 특징, 서비스 및/또는 리소스는 프로그램에 따라 액세스될 수 있다. 그러나, 운영 체제가 이들 기능을 애플리케이션이 작성된 프로그래밍 언어와 다른 프로그래밍 언어 포맷으로 노출시키는 경우, 프로그래머는 일반적으로 상이한 프로그래밍 언어들 간의 변환을 돕기 위해 래퍼 함수를 작성할 것이다. 예를 들어, 플랫 익스포트 "C" 함수(flat, exported, "C" function)로서 작성 및/또는 노출된 인터페이스를 고려한다. "C"-스타일 함수를 사용하기를 원하는 C# 또는 비주얼 베이직 프로그래머는 그들의 프로그래밍 언어가 "C"-스타일 함수를 성공적으로 호출할 수 있도록 하기 위해 특별한 문들(statements) 및/또는 추가의 코드를 포함할 수 있다. 결과적으로, 노출된 인터페이스와 다른 프로그래밍 언어로 작성된 애플리케이션들은 추가의 문들 및/또는 래퍼 함수가 작성될 때까지 인터페이스에 대한 액세스를 가지지 않는다.
다양한 실시예는 프로그래밍 언어와 무관하게, 운영 체제와 연관된 하나 이상의 인터페이스(들)를 기술하는 능력을 제공한다. 프로그래밍 언어와 무관하게 인터페이스를 기술하게 되면 다수의 프로그래밍 언어들이 인터페이스를 용이하게 액세스할 수 있게 된다. 프로그래밍 언어가 인터페이스의 언어 독립적인 기술을 해석하는 방식을 알게 되면, 이 지식은 언어 독립적인 기술을 사용하는 기존 및 향후 인터페이스에 적용될 수 있다. 몇몇 실시예에서, 인터페이스는 추상 타입 시스템을 사용하여 기술될 수 있다. 이후, 특정 프로그래밍 언어, 또는 연관된 프로그래밍 언어 컴파일러는 인터페이스를 해석 및/또는 액세스하기 위해 추상 타입 시스템을 그의 연관된 타입 시스템에 맵핑할 수 있다.
하나 이상의 실시예에 따른 아키텍처(200)를 나타내는 도 2를 참조한다. 아키텍처(200)는 컴퓨팅 장치상에서 실행되도록 구성될 수 있는 운영 체제(202)를 포함한다. 명료성을 위해, 운영 체제(202) 전부가 도시되어 있지는 않음을 이해해야한다. 운영 체제(202)는 컴퓨팅 장치와 연관된 리소스들을 관리하도록 구성된 하나 이상의 운영 체제 컴포넌트(들)(204)를 포함한다. 몇몇 실시예에서, 운영 체제 컴포넌트(들)(204)는 리소스들에 대한 프로그램적 액세스, 및 리소스들을 관리하는 것과 연관된 하나 이상의 서비스(들) 및/또는 특징들을 제공할 수 있다. 운영 체제 컴포넌트(들)(204)는 또한 운영 체제(202)와 연관된 기본 요소들, 및 그 기본 요소들로부터 구성된 복합 요소들을 포함할 수 있다.
몇몇 실시예에서, 운영 체제 컴포넌트(들)(204)는 API와 같은 하나 이상의 인터페이스(들)를 통해 노출될 수 있다. 이 예에서, 운영 체제(202)는 새로운 API 계열(206), COM 기반 API 계열(208) 및 플랫 익스포트 기반 API 계열(210)을 포함한다. 새로운 API 계열(206)은 함수(즉, 클래스, 인터페이스, 메소드, 속성, 이벤트 등)가 이하에서 더 설명되는 바와 같이 추상 타입 시스템을 사용하여 직접 기술되는 하나 이상의 관련 API를 나타낸다. COM 기반 API 계열(208)은 함수가 컴포넌트 객체 모델(COM) 타입 시스템을 사용하여 기술되는 하나 이상의 API를 나타낸다. 플랫 익스포트 기반 API 계열(210)은 함수가 메소드 시그너처(즉, 메소드 이름, 호출 조약, 메소드 인자들(arguments)의 수 및 타입을 포함하는 메소드 시그너처)를 사용하여 기술되는 하나 이상의 API를 나타낸다. 플랫 익스포트 기반 API는 또한 그들의 이름에 의해서만 식별되고, 클래스 및/또는 객체 지향 방식으로 정렬되지 않는 API를 나타낸다. 어떤 API가 이용가능한지를 결정하기를 희망하는 프로그래머는 각 API의 기술을 수동으로 및/또는 프로그램에 따라 액세스할 수 있다. 예를 들어, 새로운 API 계열(206)에 대해 어떤 인터페이스가 존재하는지와 그들을 어떻게 호출할 것인지를 결정하기 위해, 프로그래머는 연관된 메타데이터(212)를 액세스할 수 있다. COM 기반 API 계열(208) 및 플랫 익스포트 기반 API 계열(210)은 연관된 언어 독립적인 타입 시스템 기술을 제각기의 메타데이터(214,216)에 가지고 있지만, 프로그래머는 먼저 언어 독립적인 타입 시스템 기술을 COM 기반 및/또는 플랫 익스포트 기반 API에 맵핑하기 위한 래퍼 코드를 작성한다.
메타데이터(212,214,216)는 연관된 인터페이스(들)의 다양한 측면을 기술하는 정보, 예를 들어 버전 정보, 어떤 메소드가 이용가능한지, 인터페이스(들)가 어떤 파라미터를 취하는지, 파라미터의 데이터 타입, 파라미터를 전달하는 순서 등을 포함하도록 구성될 수 있다. 몇몇 실시예에서, 메타데이터는 객체 지향 방식으로 인터페이스(들)를 기술하고 및/또는 인터페이스(들) 간의 관계를 기술하는 정보와 같은, 인터페이스와 연관된 계층적 정보를 포함할 수 있다. 메타데이터는 클래스 기술, 클래스의 연관된 메소드 및 파라미터 등을 포함하도록 구성될 수 있다. 몇몇 경우, 하나 이상의 IDL 파일(들)이 이들 기술의 일부를 포함하도록 확장될 수 있고 하나 이상의 메타데이터 파일(들)의 생성에 사용될 수 있다. 몇몇 경우, 메타데이터는 이하에서 더 설명되는 바와 같이 적어도 부분적으로 하나 이상의 IDL 파일(들)에 기초할 수 있다.
운영 체제(202)는 또한 애플리케이션 바이너리 인터페이스(들)(ABI)(218)를 포함한다. ABI는 머신 레벨에서, 함수, 메소드, API 등을 호출하는 바이너리 계약을 기술한다. 바이너리 계약은 함수와 연관된 식별자 또는 이름, 함수를 호출하는데 사용될 수 있는 시그너처, 함수에 전달되는 파라미터들의 순서 및/또는 파라미터들과 연관된 데이터 타입 등을 포함할 수 있다. 이와 달리 또는 그에 더해, 바이너리 계약은 타입 시스템의 적어도 하나의 타입과 연관된 행위를 노출시키는 정의 및/또는 룰(rules)을 포함할 수 있다. 전형적으로, 바이너리 계약과 연관되고 및/또는 그에 의해 정의된 행위는 변하지 않는다. 예를 들어, 바이너리 계약의 시그너처 및/또는 식별자가 일정하게 유지되는 경우, 그 계약의 연관된 행위 또한 일정하게 유지된다.
애플리케이션 바이너리 인터페이스(218)는 다른 애플리케이션들에 의해 신뢰성있게 호출될 수 있는 바이너리를 통해 노출되는 함수를 나타낸다. 이 예에서, 애플리케이션 바이너리 인터페이스(들)(218)는 운영 체제 컴포넌트(들)(204)와 연관된 인터페이스, 기본 타입 및 기본 패턴을 포함한다. 애플리케이션(들)(220)과 같은, 운영 체제(202) 외부의 하나 이상의 애플리케이션(들)은 하나 이상의 애플리케이션 바이너리 인터페이스(들)(218)를 통해 운영 체제 컴포넌트(들)(204)를 액세스할 수 있다.
애플리케이션(220)은 HTML, 자바스크립트, 비주얼 베이직, C#, C++ 등과 같은 하나 이상의 프로그래밍 언어(들)로부터 생성된 하나 이상의 애플리케이션(들)을 포함할 수 있다. 몇몇 실시예에서, 애플리케이션(220)은 운영 체제 컴포넌트로의 하나 이상의 호출(들)을 포함한다. 몇몇 경우, 애플리케이션(들)(220)은 먼저 어떤 인터페이스(들)가 이용가능한지를 프로그램에 따라 판정하고, 그런 다음 판정된 하나 이상의 인터페이스(들)로의 호출을 행하도록 구성될 수 있다. 몇몇 경우, 애플리케이션(들)(220)은 이하에서 더 설명되는 바와 같이 하나 이상의 생성된 언어 투영 모듈(one or more generated language projection module)(들)(222)의 도움을 받아, 애플리케이션 바이너리 인터페이스(들)(218)를 통해 인터페이스(들)에 액세스한다.
하나 이상의 실시예에서, 생성된 언어 투영 모듈(들)(222)은 추상 타입 시스템 정의를 특정 프로그래밍 언어에 맵핑한다. 임의의 적절한 프로그래밍 언어가 맵핑될 수 있으며, 그에 대한 예는 앞서 제공되었다. 몇몇 실시예에서, 생성된 언어 투영 모듈은 각 프로그래밍 언어에 대해 고유할 수 있다. 다른 실시예에서, 생성된 언어 투영 모듈은 다목적일 수 있고 다수의 프로그래밍 언어에 의해 사용될 수 있다. 맵핑은 추상 타입 시스템을 사용하여 기술되는 현재 및 향후 인터페이스들이 추가의 프로그래밍 문들(즉, 래퍼 함수)없이도 특정 프로그래밍 언어에 액세스될 수 있도록 해준다. 맵핑은 특정 프로그래밍 언어가 그 특정 프로그래밍 언어에 고유한 방식으로 인터페이스를 호출할 수 있도록 해준다. 임의의 적절한 타입의 정보, 예를 들어, 클래스, 데이터 타입, 함수 포인터, 구조 등이 맵핑될 수 있다.
프로그래머가 운영 체제 컴포넌트를 액세스하기를 희망하는 예를 고려한다. 애플리케이션(들)(220)과 같은 애플리케이션을 작성하는 경우, 프로그래머는 적어도 하나의 특정 프로그래밍 언어와 연관된 편집기/컴파일러에서 소스 코드를 생성한다. 편집기/컴파일러는 운영 체제와 연관된 어떤 인터페이스들 및/또는 API들이 이용가능한지와 연관된 정보를 얻기 위해 메타데이터 파일(들)에 액세스하도록 구성될 수 있다. 예를 들어, 몇몇 실시예에서, 프로그래머가 운영 체제 컴포넌트의 일부로서 구현되는 클래스로의 호출을 포함하는 코드 라인을 작성하는 경우, 컴파일러/편집기는 클래스와 연관된 메타데이터에 질의하고 어떤 메소드, 속성 등의 리스트가 클래스와 연관되어 있는지를 프로그래머에 반환한다. 이 리스트는 클래스의 임의의 부류의 정보, 연관된 메소드 및/또는 속성 등을 포함할 수 있다. 이와 달리 또는 그에 더해, 리스트는 이용가능한 클래스들의 리스트를 포함할 수 있다. 몇몇 실시예에서, 정보는 선택을 위해 인터페이스의 관련 메소드, 속성 등을 사용자에게 시각적으로 제시하도록 구성된 자동 완성 기능의 일부로서 제공될 수 있다. 메소드 및/또는 속성이 선택되면, 컴파일러/편집기는 보다 효율적이고 정확한 소스 코드 생성을 위해 대응하는 신택스를 소스 코드에 삽입할 수 있다.
몇몇 실시예에서, 프로그래머는 운영 체제 컴포넌트들의 클래스 객체를 인스턴스화하도록 구성된 소스 코드를 작성할 수 있다. 런타임시 호출되는 경우, 운영 체제는 호출 코드에 돌려줄 클래스의 인스턴스를 동적으로 생성한다. 그러나, 호출 코드에 돌려준 인스턴스는 이하에서 더 설명되는 바와 같이 "추상 객체" 또는 운영 체제 컴포넌트와 연관된 추상 타입 시스템에서 기술되는 객체일 수 있다. 추상 객체 타입과 호출 코드와 연관된 프로그래밍 언어의 구체적인 데이터 타입 간을 연결하기 위해, 컴파일러는 예를 들어 생성된 언어 투영 모듈(들)(222)을 통해 추상 객체를 그의 연관된 프로그래밍 언어의 필적하는 타입으로 변환 및/또는 맵핑하도록 구성될 수 있다. 몇몇 경우, 프록시는 운영 체제 컴포넌트의 추상 객체와 프로그래밍 언어와 연관된 구체적인 객체 간에 호출들을 연결하는데 사용될 수 있다.
운영 체제 컴포넌트 클래스의 행위를 에뮬레이팅하도록 구성된 프록시를 고려한다. 몇몇 경우, 클래스의 연관된 타입, 메소드, 속성, 이벤트, 인터페이스 등의 스터브(stubs)를 포함하는 프록시가 생성될 수 있다. 프록시는 호출 코드의 프로그래밍 언어로 구성되어, 코드 호출이 호출 코드에 고유한 방식으로 프록시를 액세스하는 것이 가능해진다. 스터브는 이들 호출을 운영 체제로 (및 그로부터) 변환 및/또는 맵핑하기 위한 적절한 지식 및/또는 코드를 포함할 수 있다. 예를 들어, 몇몇 실시예에서, 프록시는 애플리케이션 바이너리 인터페이스(들)(218)와 통신할 수 있다.
몇몇 실시예에서, 프로그래밍 언어는 전술한 바와 같은 래퍼 함수 및/또는 프록시를 개입시켜(interject) 추상 타입을 프로그래밍 언어에 고유한 타입에 맵핑할 수 있다. 프로그래밍 언어 편집기/컴파일러는 메타데이터 파일(212,214,216)과 같은 메타데이터를 판독하고, 어떤 추상 타입이 사용되고 있는지를 판정하며, 추상 타입(들)을 연관된 프로그램 언어의 하나 이상의 필적하는 타입(들)에 맵핑하고, 연관된 래퍼 함수 및/또는 프록시를 운영 체제 컴포넌트와 연관된 추상 타입에 연결한다. 프로그래밍 언어와 추상 타입 시스템 간에 각 타입에 대한 맵핑이 존재하면, 추상 타입 시스템에 의해 정의된 임의의 현재 또는 향후 인터페이스는 프로그래머로부터의 추가의 코딩없이도 프로그래밍 언어에 의해 자동적으로 액세스될 수 있다.
예를 들어, 하나 이상의 실시예에 따른 방법의 단계들을 나타내는 흐름도를 나타내는 도 3을 고려한다. 이 방법은 임의의 적절한 하드웨어, 소프트웨어, 펌웨어 또는 이들의 조합에 의해 수행될 수 있다. 적어도 몇몇 실시예에서, 방법의 측면들은 컴퓨팅 장치(102) 상에서 실행되는 편집기/컴파일러 모듈(114)과 같은 소프트웨어에 의해 수행된다.
단계(302)는 이용가능한 운영 체제 인터페이스들과 연관된 정보에 대한 요청을 수신한다. 예를 들어, 이 요청은 어떤 인터페이스들이 이용가능한지 및/또는 이용가능한 인터페이스들과 연관된 다른 정보를 요청하도록 구성될 수 있다. 이것은 임의의 적절한 방식으로 달성될 수 있다. 몇몇 실시예에서, 요청은 소스 코드가 개발되고 있는 소스 코드 편집기에 의해 자동적으로 생성될 수 있다. 코드 편집기는 운영 체제 인터페이스 및/또는 컴포넌트로의 호출을 식별할 수 있고, 식별시, 운영 체제 인터페이스와 연관된 이용가능한 메소드, 속성 등에 대한 요청을 전송할 수 있다. 몇몇 실시예에서, 요청은 드롭-다운 메뉴, 라디오 버튼 등의 선택을 통해 수동으로 생성될 수 있다. 요청은 모든 이용가능한 운영 체제 인터페이스, 몇몇 이용가능한 운영 체제 인터페이스, 개개의 운영 체제 인터페이스, 또는 이의 임의의 조합과 연관된 정보를 요청하도록 구성될 수 있다. 몇몇 실시예에서, 요청은 도 2의 애플리케이션(들)(220)과 같은 실행 애플리케이션을 통해 생성될 수 있다.
단계(304)는 하나 이상의 운영 체제 인터페이스(들)와 연관된 정보를 획득한다. 예를 들어, 몇몇 실시예에서, 운영 체제는 정보에 대해 질의를 받을 수 있다. 이와 달리 또는 그에 더해, 정보는 하나 이상의 메타데이터 파일(들)에 포함될 수 있고 메타데이터 파일에 질의 및/또는 판독함으로써 획득될 수 있다. 앞서 및 이하에서 설명되는 바와 같이, 메타데이터 파일은 머신 판독가능 포맷일 수 있고, 인터페이스와 연관된 객체 관계 대형(object relationship formation)과 같은 계층적 정보를 포함할 수 있다.
정보 획득에 응답하여, 단계(306)는 하나 이상의 운영 체제 인터페이스(들)와 연관된 하나 이상의 추상 타입(들)을 결정한다. 앞서 설명한 바와 같이, 몇몇 실시예에서, 운영 체제 인터페이스는 추상 타입 시스템의 사용을 통해 특정 프로그래밍 언어와 무관하게 기술될 수 있다. 하나 이상의 운영 체제 인터페이스(들)와 연관된 하나 이상의 추상 타입(들)을 결정한 것에 응답하여, 단계(308)는 하나 이상의 추상 타입(들) 각각을 특정 프로그래밍 언어와 연관된 타입에 맵핑한다.
OpenPicker 런타임 클래스에 대해 ABI를 기술하는 인터페이스 기술 언어의 예를 고려한다. FileItem 객체의 수집물을 반환하도록 구성된 PickMultipleItems 메소드가 OpenPicker 런타임 클래스에 포함된다. 이 특정 예에서, FileItem 클래스는 이름 값을 포함하는 FileItemProperties 객체를 반환하도록 구성된 GetProperties 메소드를 포함한다.
몇몇 실시예에서, C# 언어 컴파일러는 기술(description)을 C# 언어 구성에 맵핑할 수 있다. 기술을 언어 특정 구성에 맵핑함으로써, 운영 체제 인터페이스는 아래에 도시되어 있는 바와 같이 C# 프로그래밍 언어에 고유한 방식으로 액세스될 수 있다.
또 다른 예에서, 언어 독립적인 방식으로 정의된 구조는 자바스크립트 객체에 맵핑될 수 있다.
을 사용하여 정의된 FrameRate 구조의 예를 고려한다.
FrameRate 구조는 두 개의 UNIT32 필드, 즉 Numerator 및 Denominator를 포함한다. FrameRate 구조는 언어 독립적인 항들을 사용하여 정의되기 때문에, 구조는 적절한 매핑을 사용할 때 다양한 언어 특정 프로그래밍에 의해, 예를 들어 자바스크립트를 통해 액세스될 수 있다. 그러나, 자바스크립트는 필드를 포함하는 구조의 개념, 또는 부호없는 32비트 정수의 개념을 포함하지 않는다. 대신, 자바스크립트는 속성들을 갖는 객체의 개념 및 수(Number)의 개념을 포함한다. 이 예에서, 전술한 구조 정의는 Numerator 및 Denominator로 명명된 두 개의 속성을 갖는 객체일 수 있으며, 그들 모두의 타입 수(type Number)는 아래와 같다.
운영 체제 컴포넌트들을 프로그램에 따라 하나 이상의 프로그래밍 언어(들)에 노출시키는 것을 설명하였으며, 이제 하나 이상의 실시예에 따라 추상 타입 시스템을 이용해 객체 지향 언어를 모델링하는 것에 대해 설명한다.
추상 타입 시스템을 이용한 객체 지향 언어의
모델링
운영 체제 인터페이스가 특정 프로그래밍 언어를 사용하여 정의된 경우, 인터페이스와 연관된 파라미터들은 그 특정 프로그래밍 언어의 데이터 타입에 의해 특징지워진다. 그에 따라, 인터페이스의 호출자는 특정 프로그래밍 언어가 데이터 타입을 정의하는 방식에 부합한다. 인터페이스로서 특정 프로그래밍 언어로 작성된 프로그램의 경우, 데이터 타입에 부합하는 것은 프로그램들이 동일한 데이터 타입 정의를 가지기 때문에 사소한 것이 된다. 인터페이스를 호출하는 특정 프로그래밍 언어로 작성되지 않은 프로그램들은 때때로 데이터 타입에 부합하기 위해 그들의 능력을 감소시킬 수 있다. 예를 들어, 다른 프로그래밍 언어로부터 인터페이스를 호출하는 프로그래머는 다른 프로그래밍 언어 및/또는 데이터 타입 간을 변환 및/또는 연결(bridge)하기 위한 코드를 추가할 수 있다. 그에 따라, 데이터 타입 간의 연결 프로세스는 때때로 호출 프로그래밍 언어의 데이터 타입에 고유한 기능을 감소시킬 수 있다. 또한, 이 변환은 때때로 복잡할 수 있고, 몇몇 경우 다른 프로그래밍 언어가 객체가 무엇인지에 대한 상이한 개념을 갖는 경우 변환은 존재하지 않을 수 있다.
다양한 실시예는 운영 체제의 하나 이상의 인터페이스(들)를 추상 타입 시스템을 사용하여 객체 지향 방식으로 모델링하는 능력을 제공한다. 몇몇 실시예에서, 확장형 IDL은 하나 이상의 인터페이스(들) 간의 관계를 기술하기 위한 신택스를 포함할 수 있다. 이와 달리 또는 그에 더해, 확장형 IDL은 인터페이스가 기술 및/또는 정의되는 방식을 관리하는 룰을 포함할 수 있다. 몇몇 실시예에서, 바이너리 계약은 추상 타입 시스템과 연관된 행위를 노출하도록 구성되고, 또한 통합된 데이터 타입들과 연관된 정보를 포함하도록 구성될 수 있다.
객체 지향 모델은 클래스 계층을 사용하여 객체들을 기술하는데, 클래스는 메소드, 속성, 상속 등을 포함할 수 있다. 전형적으로, 반드시 그럴 필요는 없지만, 객체 지향 클래스는 하나 이상의 생성자(constructor)(들)를 포함할 수 있다. 생성자는 호출되는 경우 사용하기 위해 메모리에 클래스의 인스턴스/객체를 생성하는 클래스 함수이다. 클래스의 몇몇 생성자는 사용하기 위해 생성된 인스턴스/객체를 준비하는 추가의 코드를 포함한다. 예를 들어, 추가 코드는 클래스의 멤버 변수를 초기화하고, 그 클래스의 연관된 시작 루틴을 구동하는 것 등을 할 수 있다. 디폴트 생성자는 입력 파라미터를 가지지 않지만, 비-디폴트 생성자는 하나 이상의 입력 파라미터(들)를 갖는다.
몇몇 실시예에서, 운영 체제 컴포넌트의 하나 이상의 생성자(들)는 특정 구현 및/또는 설계를 따르도록 강제될 수 있다. 특정 구현을 따름으로써, 생성자의 호출자는 생성자 및/또는 결과적인 객체가 동작하는 방식에 의존할 수 있다. 예를 들어, 운영 체제 컴포넌트의 디폴트 생성자는 클래스 팩토리 객체의 IActivationFactory 인터페이스의 ActivateInstance 메소드의 디폴트 생성자로 제한 및/또는 그에 맵핑될 수 있다. 클래스 팩토리 객체는 생성된 객체의 정확한 클래스를 지정하지 않고도 객체를 생성하도록 모델링된 설계 패턴이다. 클래스 팩토리 모델을 사용함으로써, 디폴트 생성자는 충분한 레벨의 추상화를 유지할 수 있다. 운영 체제 컴포넌트의 비-디폴트 생성자는 클래스 팩토리의 교번적인 인터페이스와 같은 하나 이상의 특별히 지정된 인터페이스(들)에 배치되도록 제한될 수 있다.
인터페이스의 기술을 명시하는 한가지 방법은 IDL 및/또는 XML과 같은 확장형 기술 언어와 같은 기술 언어 파일의 사용을 통해 이루어진다. 몇몇 실시예에서, 확장형 기술 언어는 운영 체제 컴포넌트의 하나 이상의 생성자 인터페이스(들)를 기술 및/또는 지정하는 능력을 가능하게 하도록 구성될 수 있다. 예를 들어, 이하에서 설명되는 Compressor 클래스를 고려한다. 이 예에서, Compressor 클래스는 클래스와 연관된 비-디폴트 생성자 메소드(들)의 적어도 하나의 정의를 포함하는 그의 ICompressorFactory 인터페이스를 선언한다.
이들 기술은 하나 이상의 파일(들)에 포함될 수 있고 이하에서 설명되는 바와 같이 머신 판독 가능 포맷으로 하나 이상의 인터페이스 기술(들)을 생성하기 위해 적어도 하나의 컴파일러와 연계하여 사용될 수 있다.
객체 지향 클래스는 적어도 하나의 정적 메소드, 적어도 하나의 정적 속성, 적어도 하나의 정적 이벤트, 또는 이들의 임의의 조합을 포함하도록 구성될 수 있다. 생성자의 정의를 제한하는 것과 유사하게, 정적 메소드, 정적 속성, 및/또는 정적 이벤트는 하나 이상의 특별히 지정된 인터페이스(들)에 부합하도록 설계될 수 있다. 정적 메소드, 속성 및 이벤트를 선언하는 CallControl 클래스의 예를 고려한다. 이 예에서, 정적 메소드, 속성 및 이벤트는 ICallControlStatics 인터페이스에 정의된다.
객체 지향 클래스는 적어도 하나의 인스턴스 메소드, 적어도 하나의 인스턴스 속성, 적어도 하나의 인스턴스 이벤트 또는 이들의 임의의 조합을 포함하도록 구성될 수 있다. 인스턴스 멤버들(메소드, 속성 및 이벤트)은 클래스의 특정 인스턴스에 대해 동작하지만 정적 멤버들은 클래스의 모든 멤버들에 의해 공유된다. 클래스는 CallControl 클래스가 그의 연관된 인스턴스 메소드, 속성 및 이벤트가 ICallControl 인터페이스 내에 정의되어 있음을 선언하는 전술한 예와 같이, 하나 이상의 특별히 지정된 인터페이스(들)에 부합하도록 설계될 수 있다. 몇몇 실시예에서, 하나 이상의 운영 체제 컴포넌트(들)는 클래스 팩토리 설계 패턴에 따라/상에서 이들 인터페이스를 모델링/구현할 수 있다.
특정 프로그래밍 언어가 언어 특정 생성자, 정적 또는 인스턴스 멤버를 호출하는 경우, 도 2의 생성된 언어 투영 모듈(222)과 같은 언어 투영 모듈은 프로그래밍 언어 특정 호출을 적절한 클래스 팩토리 객체 또는 인스턴스와 연관된 적절한 메소드 및/또는 인터페이스에 맵핑할 수 있다. 몇몇 실시예에서, 클래스 팩토리 객체는 운영 체제 컴포넌트 및/또는 런타임 클래스와 연관된다. 예를 들어, 런타임 클래스의 인스턴스를 생성할 것을 컴파일러에게 지시하는 코드의 메소드 시그너처는 클래스 팩토리 객체의 적절한 생성자 인터페이스 메소드에 일치할 수 있다. 또 다른 예에서, 언어 투영 모듈은 정적 메소드를 호출할 것을 컴파일러에게 지시하는 언어 특정 메소드 시그너처를 운영 체제 컴포넌트와 연관된 정적 인터페이스 상의 적절한 매칭 인터페이스 메소드에 일치시키도록 구성될 수 있다. 또 다른 예에서, 언어 투영 모듈은 인스턴스 메소드를 호출할 것을 컴파일러에게 지시하는 언어 특정 메소드 시그너처를 운영 체제 컴포넌트의 특정 인스턴스와 연관된 인터페이스 상의 적절한 매칭 인터페이스 메소드에 일치시키도록 구성될 수 있다.
몇몇 실시예에서, IDL 컴파일러는 적어도 하나의 운영 체제 컴포넌트 인터페이스 기술과 연관된 하나 이상의 확장형 IDL 파일(들)을 판독하고, 연관된 머신 판독가능 파일을 생성하도록 구성될 수 있다. 타입, 메소드, 속성, 이벤트, 및 연관된 운영 체제 컴포넌트의 인터페이스를 기술하는 정보와 같은 임의의 적절한 타입의 정보가 확장형 IDL 파일에 포함될 수 있다. 몇몇 경우, 컴파일러는 머신 판독가능 메타데이터 파일을 생성할 수 있다. 하나 이상의 애플리케이션(들)은 어떤 인터페이스가 이용가능한지, 인터페이스의 연관된 기술 및/또는 선언, 인터페이스의 파라미터들의 데이터 타입 등을 프로그램에 따라 결정하기 위해 연관된 머신 판독가능 파일을 판독하도록 구성될 수 있다. 하나 이상의 애플리케이션(들)은 임의의 적절한 프로그래밍 언어로 작성될 수 있으며, 그에 대한 예는 앞서 제공되었다.
몇몇 실시예에서, IDL 컴파일러는 타입, 메소드, 속성, 이벤트 및/또는 인터페이스와 연관된 하나 이상의 통신 프록시 및/또는 코드 스터브(들)를 생성할 수 있다. 통신 프록시 및/또는 코드 스터브는 추가적으로 운영 체제 컴포넌트에 의해 액세스될 수 있도록 구성될 수 있다.
하나 이상의 실시예에 따라 확장형 IDL 파일(들)(402), 컴파일러(404), 및 메타데이터 파일(들)(406) 간의 관계를 나타내는 도 4를 고려한다. 여기서, 확장형 IDL 파일(들)(402)은 컴파일러(404)에 의해 수신 및 처리되어 메타데이터 파일(들)(406)을 생성한다. 적어도 몇몇 실시예에서, 관계도에 도시되어 있는 모듈들은 소프트웨어, 하드웨어, 또는 이들의 임의의 조합, 예를 들어 컴퓨팅 장치(102) 상에서 실행되는 편집기/컴파일러 모듈(114)로서 구현될 수 있다.
도시되고 기술되어 있는 실시예에서, 확장형 IDL 파일(들)(402)은 운영 체제 API와 같은 하나 이상의 운영 체제 컴포넌트 인터페이스(들)를 정의하는 하나 이상의 파일을 포함할 수 있다. 파일 객체/클래스, 스트링 객체/클래스, 그래픽 객체/클래스, 컬처 객체/클래스 등과 같은 임의의 적절한 타입의 운영 체제 컴포넌트가 기술될 수 있다. 각 객체는 객체 지향 클래스와 연관될 수 있는 메소드, 속성, 상속 정보 등을 포함할 수 있다. 확장형 IDL은 기술된 하나 이상의 인터페이스(들) 간의 관계의 이들 타입을 인에이블링하기 위한 신택스를 포함할 수 있다. 이와 달리 또는 그에 더해, 확장형 IDL은 추상 타입 시스템을 기술할 수 있다.
몇몇 실시예에서, 추상 타입 시스템은 다양한 데이터 타입을 지원 및/또는 기술하도록 구성될 수 있다. 예를 들어, 메소드 인터페이스는 모든 인터페이스가 객체의 인스턴스에 대해 동작하는 물리적 요건을 맵핑하도록 구성될 수 있다. 또 다른 예에서, 추상 타입 시스템은 프로그래밍 언어 및 컴포넌트 경계에 걸쳐 호출될 수 있는 함수 포인터를 정의하는데 사용될 수 있다. 제1 컴포넌트는 메소드에 구속된 함수 포인터 또는 대표자(delegate)를 생성할 수 있다. 대표자는 바이너리 컴파일 경계를 가로질러 임의적인 프로그래밍 언어로 작성된 제2 컴포넌트로 전달되고, 호출될 수 있다. 다양한 실시예는 기본 데이터 타입(fundamental data type)을 구성하고, 또한 데이터 타입을 통합 타입(aggregate type)에 혼합하는 룰을 정의하기 위해, 확장형 IDL이 이들 데이터 타입을 정의 및/또는 기술할 수 있도록 한다.
도시되고 설명되어 있는 실시예에서, 컴파일러(404)는 확장형 IDL 파일(들)(402)과 같은 하나 이상의 입력 파일(들)을 수용하고, 하나 이상의 메타데이터 파일(들)(406)을 생성한다. 메타데이터 파일(들)(406)은 자동화된 액세스를 위해 구성될 수 있다. 예를 들어, 메타데이터 파일(들)은 머신 판독가능 포맷으로 저장될 수 있다. 몇몇 실시예에서, 메타데이터 파일(들)(406)은 하나 이상의 운영 체제 컴포넌트(들)와 연관된다. 이와 달리 또는 그에 더해, 컴파일러(404)는 앞서 설명한 바와 같이 스터브 아웃 통신 프록시(stubbed out communication proxies)를 생성할 수 있다.
애플리케이션(들)(408)은 예를 들어 메타데이터 파일(들)(406)의 판독을 통해 어떤 API들이 이용가능한지를 동적으로 판정할 수 있다. 몇몇 실시예에서, 애플리케이션(들)(408)은 도 1의 편집기/컴파일러(114)로서 구성될 수 있다. 메타데이터 파일(들)(406)을 통해, 애플리케이션은 기능의 보다 나중의 버전이 존재하는지, 어떤 파라미터들을 API가 취하는지를 판정할 수 있고, 또한 런타임시 API를 위해 어떤 기능이 존재한지에 대해 사용자에게 알려줄 수 있다. 따라서, 머신 판독가능 포맷의 API 기술을 포함하고, 또한 추상 타입 시스템으로 API를 기술함으로써, 추상 타입 시스템과 특정 프로그래밍 언어 간의 매핑을 지원하는 애플리케이션 및/또는 언어는 프로그래머로부터의 노력을 거의 필요로 하지 않고 API를 쉽게 액세스할 수 있다.
추상 타입 시스템을 이용하여 객체 지향 언어를 모델링하는 것을 설명하였으며, 이제 하나 이상의 실시예에 따른 예시적인 시스템을 설명한다.
예시적인 시스템
도 5는 전술한 다양한 실시예를 구현하는데 사용될 수 있는 예시적인 컴퓨팅 장치(500)를 나타낸다. 컴퓨팅 장치(500)는 예를 들어 도 1의 컴퓨팅 장치(102) 또는 임의의 다른 적절한 컴퓨팅 장치일 수 있다.
컴퓨팅 장치(500)는 하나 이상의 프로세서(들) 또는 처리 장치(들)(502), 하나 이상의 메모리 및/또는 저장 컴포넌트(504), 하나 이상의 입/출력(I/O) 장치(들)(506), 및 다양한 컴포넌트 및 장치들이 서로 통신할 수 있도록 해주는 버스(506)를 포함한다. 버스(508)는 메모리 버스 또는 메모리 제어기, 주변 버스, 가속 그래픽 포트, 및 임의의 다양한 버스 아키텍처를 사용하는 프로세서 또는 로컬 버스를 비롯하여, 하나 이상의 임의의 몇몇 타입의 버스 구조를 나타낸다. 버스(508)는 유선 및/또는 무선 버스를 포함할 수 있다.
메모리/저장 컴포넌트(504)는 하나 이상의 컴퓨터 저장 매체를 나타낸다. 컴포넌트(504)는 휘발성 매체(예를 들어, 랜덤 액세스 메모리(RAM)) 및/또는 비휘발성 매체(예를 들어, 판독 전용 메모리(ROM), 플래시 메모리, 광학 디스크, 자기 디스크 등)를 포함할 수 있다. 컴포넌트(504)는 고정된 매체(예를 들어, RAM, ROM, 고정된 하드 드라이브 등) 및 착탈가능 매체(예를 들어, 플래시 메모리 드라이브, 착탈가능 하드 드라이브, 광학 디스크 등)를 포함할 수 있다.
하나 이상의 입/출력 장치(들)(506)는 사용자가 명령 및 정보를 컴퓨팅 장치(500)에 입력할 수 있도록 해주고, 또한 정보가 사용자 및/또는 다른 컴포넌트 또는 장치에 제시될 수 있도록 해준다. 입력 장치의 예는 키보드, 커서 제어 장치(예를 들어, 마우스), 마이크로폰, 스캐너 등을 포함한다. 출력 장치의 예는 디스플레이 장치(예를 들어, 모니터 또는 프로젝터), 스피커, 프린터, 네트워크 카드 등을 포함한다.
본 명세서에서 다양한 실시예는 소프트웨어 또는 프로그램 모듈의 일반적인 문맥에서 설명될 수 있다. 일반적으로, 소프트웨어는 특정 작업을 수행하거나 특정 추상 데이터 타입을 구현하는 루틴, 프로그램, 객체, 컴포넌트, 데이터 구조 등을 포함한다. 이들 모듈 및 기법의 구현은 몇몇 형태의 컴퓨터 판독가능 매체 상에 저장될 수 있거나 또는 그를 통해 전달될 수 있다. 컴퓨터 판독가능 매체는 컴퓨팅 장치에 의해 액세스될 수 있는 임의의 이용가능한 매체 또는 매체들일 수 있다. 예를 들어, 컴퓨터 판독가능 매체는 "컴퓨터 판독가능 저장 매체"를 포함할 수 있다.
"컴퓨터 판독가능 저장 매체"는 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈, 또는 다른 데이터와 같은 정보의 저장 위해 임의의 방법 또는 기술로 구현되는 휘발성 및 비휘발성, 착탈가능 및 고정된 매체를 포함한다. 컴퓨터 판독가능 저장 매체는 RAM, ROM, EEPROM, 플래시 메모리 또는 다른 메모리 기술, CD-ROM, DVD 또는 다른 광학 저장소, 자기 카세트, 자기 테이프, 자기 디스크 저장소 또는 다른 자기 저장 장치, 또는 원하는 정보를 저장하는데 사용될 수 있고 컴퓨터에 의해 액세스될 수 있는 임의의 다른 매체를 포함하나, 여기에 국한되지 않는다.
결론
다양한 실시예는 운영 체제와 연관된 하나 이상의 인터페이스(들)를 프로그래밍 언어와 무관하게 기술할 수 있는 능력을 제공한다. 이와 달리 또는 그에 더해, 특정 프로그래밍 언어와 연관된 컴파일러가 독립적인 인터페이스 기술(들)을 프로그래밍 언어에 특정한 적절한 구성에 맵핑하도록 구성될 수 있다. 몇몇 실시예에서, 애플리케이션은 운영 체제의 하나 이상의 인터페이스(들)를 프로그램에 따라 결정하도록 구성될 수 있다.
본 발명은 구조적 특징 및/또는 방법론적 동작에 특정한 언어로 설명되었지만, 첨부한 청구항에 정의된 본 발명은 전술한 특정 특징 또는 동작에 국한될 필요는 없다. 그보다, 전술한 특정 특징 및 동작은 청구항을 구현하는 예시적인 형식으로서 개시된다.
Claims (10)
- 하나 이상의 이용가능한 운영 체제 인터페이스와 연관된 정보에 대한 요청을 수신하는 단계와,
상기 하나 이상의 이용가능한 운영 체제 인터페이스와 연관된 상기 정보를 획득하는 단계- 상기 운영 체제 인터페이스는 추상 타입 시스템을 사용하여 기술됨 -와,
상기 하나 이상의 이용가능한 운영 체제 인터페이스와 연관된 하나 이상의 추상 타입을 결정하는 단계와,
개개의 결정된 추상 타입을 적어도 하나의 특정 프로그래밍 언어와 연관된 개개의 각 타입에 맵핑하는 단계
를 포함하는 컴퓨터 구현 방법.
- 제1항에 있어서,
상기 하나 이상의 추상 타입을 결정하는 단계는 상기 하나 이상의 추상 타입과 연관된 행위(behavior)를 결정하는 단계를 더 포함하는 컴퓨터 구현 방법.
- 제2항에 있어서,
상기 하나 이상의 추상 타입과 연관된 행위를 결정하는 단계는 적어도 하나의 바이너리 계약(binary contract)을 통해 행위를 프로그램에 따라 결정하는 단계를 더 포함하는 컴퓨터 구현 방법.
- 제1항에 있어서,
상기 하나 이상의 이용가능 운영 체제 인터페이스와 연관된 정보는 계층적 정보(hierarchical information)를 더 포함하는 컴퓨터 구현 방법.
- 제1항에 있어서,
상기 정보는 적어도 하나의 인터페이스와 연관된 버전 정보, 상기 적어도 하나의 인터페이스와 연관된 개개의 파라미터의 데이터 타입, 상기 적어도 하나의 인터페이스와 연관된 상기 개개의 파라미터의 호출 순서를 포함하는, 컴퓨터 구현 방법.
- 제1항에 있어서,
상기 하나 이상의 이용가능한 운영 체제 인터페이스와 연관된 정보를 획득하는 단계는 적어도 하나의 메타데이터 파일로부터 프로그램에 따라 정보를 획득하는 단계를 포함하는, 컴퓨터 구현 방법. - 컴퓨터 판독가능 명령어들을 포함하는 하나 이상의 컴퓨터 판독가능 저장 매체로서,
상기 컴퓨터 판독가능 명령어들은 실행되는 경우,
운영 체제와 연관된 기능에 대한 프로그램적 액세스를 가능하게 하도록 구성된 하나 이상의 애플리케이션 프로그래밍 인터페이스(API) 모듈과,
상기 하나 이상의 API 모듈과 연관된 하나 이상의 메타데이터 파일- 상기 하나 이상의 메타데이터 파일은 상기 하나 이상의 API의 적어도 하나의 기술을 포함하도록 구성되고, 상기 적어도 하나의 기술은 추상 타입 시스템을 이용함 -과,
상기 하나 이상의 API를 호출하는 하나 이상의 머신 레벨 바이너리 계약을 포함하도록 구성된 하나 이상의 애플리케이션 바이너리 인터페이스(ABI) 모듈과,
상기 추상 타입 시스템의 적어도 하나의 타입을 하나 이상의 특정 프로그래밍 언어의 적어도 하나의 타입에 맵핑하도록 구성된 하나 이상의 생성된 언어 투영 모듈(generated language projection module)
을 구현하는, 컴퓨터 판독가능 저장 매체.
- 제7항에 있어서,
실행되는 경우, 상기 적어도 하나의 메타데이터 파일을 통해, 상기 적어도 하나의 API 모듈에 포함된 적어도 하나의 인터페이스를 프로그램에 따라 결정하도록 구성된 적어도 하나의 애플리케이션을 구현하는 명령어들을 더 포함하는 컴퓨터 판독가능 저장 매체.
- 제7항에 있어서,
상기 생성된 언어 투영 모듈은 상기 하나 이상의 특정 프로그래밍 언어에 고유한 방식으로 상기 추상 타입 시스템의 적어도 하나의 타입을 에뮬레이팅하도록 구성된 적어도 하나의 프록시를 포함하는, 컴퓨터 판독가능 저장 매체.
- 제7항에 있어서,
상기 하나 이상의 API를 호출하는 상기 바이너리 계약은 상기 추상 타입 시스템의 적어도 하나의 타입과 연관된 적어도 하나의 행위 정의를 포함하는, 컴퓨터 판독가능 저장 매체.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/207,806 | 2011-08-11 | ||
US13/207,806 US8776094B2 (en) | 2011-08-11 | 2011-08-11 | Runtime system |
PCT/US2011/055492 WO2013022465A1 (en) | 2011-08-11 | 2011-10-08 | Runtime system |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20140057547A true KR20140057547A (ko) | 2014-05-13 |
KR101795844B1 KR101795844B1 (ko) | 2017-11-08 |
Family
ID=47668756
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020147003539A KR101795844B1 (ko) | 2011-08-11 | 2011-10-08 | 런타임 시스템 |
Country Status (13)
Country | Link |
---|---|
US (2) | US8776094B2 (ko) |
EP (1) | EP2742420B1 (ko) |
JP (1) | JP5933002B2 (ko) |
KR (1) | KR101795844B1 (ko) |
CN (1) | CN103718155B (ko) |
AU (2) | AU2011374897B2 (ko) |
BR (1) | BR112014003123B1 (ko) |
CA (1) | CA2844492C (ko) |
IN (1) | IN2014CN00797A (ko) |
MX (1) | MX336195B (ko) |
RU (1) | RU2601198C2 (ko) |
TW (2) | TWI577539B (ko) |
WO (1) | WO2013022465A1 (ko) |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10089119B2 (en) | 2009-12-18 | 2018-10-02 | Microsoft Technology Licensing, Llc | API namespace virtualization |
US8776094B2 (en) | 2011-08-11 | 2014-07-08 | Microsoft Corporation | Runtime system |
US8695021B2 (en) | 2011-08-31 | 2014-04-08 | Microsoft Corporation | Projecting native application programming interfaces of an operating system into other programming languages |
US20140237368A1 (en) * | 2013-02-19 | 2014-08-21 | Microsoft Corporation | Proxying non-interactive controls to enable narration |
US9442700B2 (en) * | 2013-09-30 | 2016-09-13 | MuleSoft, Inc. | API notebook tool |
US10228920B2 (en) * | 2014-05-13 | 2019-03-12 | Oracle International Corporation | Automatic selection of an abstract data type |
US10635504B2 (en) * | 2014-10-16 | 2020-04-28 | Microsoft Technology Licensing, Llc | API versioning independent of product releases |
US10452409B2 (en) * | 2015-10-23 | 2019-10-22 | Oracle International Corporation | Universal adapter for native calling |
US10120655B2 (en) * | 2016-06-03 | 2018-11-06 | Microsoft Technology Licensing, Llc. | Seamless high performance interoperability between different type graphs that share a garbage collector |
US11343352B1 (en) * | 2017-06-21 | 2022-05-24 | Amazon Technologies, Inc. | Customer-facing service for service coordination |
US11050607B2 (en) * | 2017-06-21 | 2021-06-29 | Red Hat, Inc. | Proxy with a function as a service (FAAS) support |
CN109814861A (zh) * | 2017-11-21 | 2019-05-28 | 海云数据 | 为终端用户提供能力的开放平台 |
US10635416B2 (en) * | 2018-07-31 | 2020-04-28 | Microsoft Technology Licensing, Llc | Property filtering |
CN111400162B (zh) * | 2019-01-02 | 2023-04-25 | 阿里巴巴集团控股有限公司 | 一种测试方法及测试系统 |
DE112019006805A5 (de) * | 2019-01-31 | 2021-11-04 | Bayerische Motoren Werke Aktiengesellschaft | Verfahren zum Ausführen von Programmkomponenten auf einem Steuergerät, ein computerlesbares-Speichermedium, ein Steuergerät und ein System |
CN111857662B (zh) * | 2020-07-15 | 2023-06-30 | 曹蕤 | 基于map和接口来描述对象特定构成的程序设计方法 |
CN111949253B (zh) * | 2020-08-07 | 2023-12-01 | 抖音视界有限公司 | 组合idl文件的方法、装置、计算机设备和存储介质 |
US11036482B1 (en) | 2020-12-22 | 2021-06-15 | Temper Systems, Inc. | Deriving many idiomatic programming language interfaces |
US10963228B1 (en) | 2020-12-22 | 2021-03-30 | Temper Systems, Inc. | Preventing garbage object accumulation on minimal runtimes |
US11163559B1 (en) * | 2020-12-28 | 2021-11-02 | Temper Systems, Inc. | Cross-publishing software libraries to module repositories |
CN117453708A (zh) * | 2023-12-25 | 2024-01-26 | 成都深瑞同华科技有限公司 | 一种gis图形与cad图形的双向联动互转方法 |
Family Cites Families (156)
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 |
US5371885A (en) | 1989-08-29 | 1994-12-06 | Microsoft Corporation | High performance file system |
JPH0540682A (ja) | 1990-06-08 | 1993-02-19 | Internatl Business Mach Corp <Ibm> | アトミシテイを有する記憶装置の高可用性耐故障再配置 |
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 |
US5964835A (en) | 1992-12-17 | 1999-10-12 | Tandem Computers Incorporated | Storage access validation to data messages using partial storage address data indexed entries containing permissible address range validation for message source |
US5594863A (en) | 1995-06-26 | 1997-01-14 | Novell, Inc. | Method and apparatus for network file recovery |
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 |
CA2199675C (en) | 1996-05-08 | 2002-03-26 | John C. Goodwin, Iii | System and method for managing electronic price label overlays |
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 |
US6269431B1 (en) | 1998-08-13 | 2001-07-31 | Emc Corporation | Virtual storage and block level direct access of secondary storage for recovery of backup data |
US6920537B2 (en) | 1998-12-31 | 2005-07-19 | Emc Corporation | Apparatus and methods for copying, backing up and restoring logical objects in a computer storage system by transferring blocks out of order or in parallel |
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 |
US6629264B1 (en) | 2000-03-30 | 2003-09-30 | Hewlett-Packard Development Company, L.P. | Controller-based remote copy system with logical unit grouping |
JP3562435B2 (ja) | 2000-04-12 | 2004-09-08 | 日本電気株式会社 | コンポーネントの自動生成装置 |
US6813770B1 (en) | 2000-04-21 | 2004-11-02 | Sun Microsystems, Inc. | Abstract syntax notation to interface definition language converter framework for network management |
US7783720B1 (en) * | 2000-04-21 | 2010-08-24 | Oracle America, Inc. | CORBA metadata gateway to telecommunications management network |
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 |
US6643672B1 (en) | 2000-07-31 | 2003-11-04 | Hewlett-Packard Development Company, Lp. | Method and apparatus for asynchronous file writes in a distributed file system |
US6925476B1 (en) | 2000-08-17 | 2005-08-02 | Fusionone, Inc. | Updating application data including adding first change log to aggreagate change log comprising summary of changes |
US6928555B1 (en) | 2000-09-18 | 2005-08-09 | Networks Associates Technology, Inc. | Method and apparatus for minimizing file scanning by anti-virus programs |
US7065742B1 (en) | 2000-10-30 | 2006-06-20 | Microsoft Corporation | System and method for dynamically processing declarative language instance data |
US7574346B2 (en) | 2000-10-30 | 2009-08-11 | Microsoft Corporation | Kernel emulator for non-native program modules |
US7730213B2 (en) | 2000-12-18 | 2010-06-01 | Oracle America, Inc. | Object-based storage device with improved reliability and fast crash recovery |
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 |
US6643612B1 (en) | 2001-06-28 | 2003-11-04 | Atrica Ireland Limited | Mechanism and protocol for per connection based service level agreement measurement |
US7165239B2 (en) | 2001-07-10 | 2007-01-16 | Microsoft Corporation | Application program interface for network software platform |
US7546602B2 (en) | 2001-07-10 | 2009-06-09 | 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 |
US7072915B2 (en) | 2002-01-22 | 2006-07-04 | International Business Machines Corporation | Copy method supplementing outboard data copy with previously instituted copy-on-write logical snapshot to create duplicate consistent with source data as of designated time |
JP2003223350A (ja) | 2002-01-29 | 2003-08-08 | Ricoh Co Ltd | データベースシステム |
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 |
US7334124B2 (en) | 2002-07-22 | 2008-02-19 | Vormetric, Inc. | Logical access block processing protocol for transparent secure file storage |
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 |
US7020746B2 (en) | 2003-01-28 | 2006-03-28 | Microsoft Corporation | Method and system for an atomically updated, central cache memory |
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 |
US7322029B2 (en) | 2003-05-08 | 2008-01-22 | American Megatrends, Inc. | Method and system for recovering program code in a computer system |
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 |
US7493592B2 (en) | 2003-10-24 | 2009-02-17 | 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 |
US7440966B2 (en) | 2004-02-12 | 2008-10-21 | International Business Machines Corporation | Method and apparatus for file system snapshot persistence |
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 |
WO2005114487A2 (en) | 2004-05-21 | 2005-12-01 | Computer Associates Think, Inc. | Method and apparatus for updating a database using table staging and queued relocation and deletion |
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 |
JP4104586B2 (ja) | 2004-09-30 | 2008-06-18 | 株式会社東芝 | ファイル管理機能を備えたファイルシステム及びファイル管理方法 |
JP4956922B2 (ja) | 2004-10-27 | 2012-06-20 | ソニー株式会社 | 記憶装置 |
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 |
US7464124B2 (en) | 2004-11-19 | 2008-12-09 | International Business Machines Corporation | Method for autonomic data caching and copying on a storage area network aware file system using copy services |
US20060129745A1 (en) | 2004-12-11 | 2006-06-15 | Gunther Thiel | Process and appliance for data processing and computer program product |
US7617259B1 (en) | 2004-12-31 | 2009-11-10 | Symantec Operating Corporation | System and method for managing redundant storage consistency at a file system level |
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 |
US20060195460A1 (en) * | 2005-02-28 | 2006-08-31 | Microsoft Corporation | Data model for object-relational data |
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 |
JP4591148B2 (ja) | 2005-03-25 | 2010-12-01 | 富士ゼロックス株式会社 | 機能変換装置、機能変換方法、機能変換プログラム、デバイスデータ生成装置、デバイスデータ生成方法、及びデバイスデータ生成プログラム |
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 |
CN1936853B (zh) | 2005-09-22 | 2010-05-05 | 康佳集团股份有限公司 | 嵌入式设备的数据掉电保护和修复方法 |
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 |
US7890659B2 (en) | 2005-12-15 | 2011-02-15 | Microsoft Corporation | Conforming web services to an updated contract |
WO2007075587A2 (en) | 2005-12-19 | 2007-07-05 | Commvault Systems, Inc. | Systems and methods for performing data replication |
US20070156913A1 (en) | 2005-12-30 | 2007-07-05 | Hiroyuki Miyamoto | Method for enabling extension points through plug-ins |
US8082555B2 (en) | 2006-02-21 | 2011-12-20 | Microsoft Corporation | Routing calls via reflective interfaces and a proxy |
US7552148B2 (en) | 2006-02-28 | 2009-06-23 | Microsoft Corporation | Shutdown recovery |
US7620721B2 (en) | 2006-02-28 | 2009-11-17 | Microsoft Corporation | Pre-existing content replication |
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 |
EP1845444B1 (en) | 2006-04-13 | 2010-05-19 | Microsoft Corporation | Virtual execution system for ressource-constrained devices |
US7730351B2 (en) | 2006-05-15 | 2010-06-01 | Oracle America, Inc. | Per file dirty region logging |
JP2007316944A (ja) | 2006-05-25 | 2007-12-06 | Toshiba Corp | データ処理装置、データ処理方法、およびデータ処理プログラム |
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 |
US20080077590A1 (en) | 2006-09-22 | 2008-03-27 | Honeywell International Inc. | Efficient journaling and recovery mechanism for embedded flash file systems |
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 |
EP2075706B1 (en) | 2006-10-20 | 2010-12-15 | Fujitsu Limited | Memory device and refresh adjusting method |
US7840752B2 (en) | 2006-10-30 | 2010-11-23 | Microsoft Corporation | Dynamic database memory management policies |
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 |
KR101490327B1 (ko) | 2006-12-06 | 2015-02-05 | 퓨전-아이오, 인크. | 뱅크 인터리브를 이용한 솔리드-스테이트 스토리지의 명령 관리 장치, 시스템 및 방법 |
US7956721B2 (en) | 2007-01-09 | 2011-06-07 | Homerun Holdings Corporation | Power conserving mobile transmitter |
JP2008293218A (ja) | 2007-05-23 | 2008-12-04 | Nec Corp | ファイル管理システム、ファイル管理方法、ファイル管理プログラム |
CN101051324A (zh) | 2007-05-23 | 2007-10-10 | 中兴通讯股份有限公司 | 一种内存数据库的事务管理方法 |
WO2009004620A2 (en) | 2007-07-03 | 2009-01-08 | Xeround Systems Ltd. | Method and system for data storage and management |
US7720800B2 (en) | 2007-07-06 | 2010-05-18 | International Business Machines Corporation | Method and approach to hosting versioned web services |
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 |
US9058407B2 (en) | 2008-01-22 | 2015-06-16 | Oracle International Corporation | Persistent multimedia content versioning |
EP2088506A1 (en) * | 2008-02-06 | 2009-08-12 | Software AG | Method and system for calling services from a remote client |
US8732386B2 (en) | 2008-03-20 | 2014-05-20 | Sandisk Enterprise IP LLC. | Sharing data fabric for coherent-distributed caching of multi-node shared-distributed flash memory |
JP5386111B2 (ja) | 2008-05-22 | 2014-01-15 | 株式会社日立ソリューションズ | ファイルシステムの記録方法 |
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 |
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 |
US8539475B2 (en) | 2009-09-29 | 2013-09-17 | Oracle America, Inc. | API backward compatibility checking |
US8433865B2 (en) | 2009-12-11 | 2013-04-30 | Microsoft Corporation | Consistency without ordering dependency |
US10089119B2 (en) | 2009-12-18 | 2018-10-02 | Microsoft Technology Licensing, Llc | API namespace virtualization |
US8983982B2 (en) | 2009-12-22 | 2015-03-17 | Bmc Software, Inc. | Mechanism for deprecating object oriented data |
US8572591B2 (en) | 2010-06-15 | 2013-10-29 | Microsoft Corporation | Dynamic adaptive programming |
US8224780B2 (en) | 2010-06-15 | 2012-07-17 | Microsoft Corporation | Checkpoints for a file system |
US8793440B2 (en) | 2010-06-17 | 2014-07-29 | Microsoft Corporation | Error detection for files |
US9411634B2 (en) | 2010-06-21 | 2016-08-09 | Microsoft Technology Licensing, Llc | Action framework in software transactional memory |
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 |
US9110770B1 (en) | 2014-03-04 | 2015-08-18 | Amazon Technologies, Inc. | Assessing quality of code in an open platform environment |
-
2011
- 2011-08-11 US US13/207,806 patent/US8776094B2/en active Active
- 2011-10-07 TW TW104140190A patent/TWI577539B/zh not_active IP Right Cessation
- 2011-10-07 TW TW100136563A patent/TWI533217B/zh not_active IP Right Cessation
- 2011-10-08 EP EP11870789.2A patent/EP2742420B1/en active Active
- 2011-10-08 MX MX2014001629A patent/MX336195B/es unknown
- 2011-10-08 CA CA2844492A patent/CA2844492C/en active Active
- 2011-10-08 JP JP2014524995A patent/JP5933002B2/ja active Active
- 2011-10-08 IN IN797CHN2014 patent/IN2014CN00797A/en unknown
- 2011-10-08 RU RU2014104582/08A patent/RU2601198C2/ru active
- 2011-10-08 KR KR1020147003539A patent/KR101795844B1/ko active IP Right Grant
- 2011-10-08 CN CN201180072813.6A patent/CN103718155B/zh active Active
- 2011-10-08 BR BR112014003123-1A patent/BR112014003123B1/pt active IP Right Grant
- 2011-10-08 WO PCT/US2011/055492 patent/WO2013022465A1/en active Application Filing
- 2011-10-08 AU AU2011374897A patent/AU2011374897B2/en active Active
-
2014
- 2014-06-06 US US14/298,679 patent/US9563487B2/en active Active
-
2017
- 2017-02-09 AU AU2017200899A patent/AU2017200899B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
CN103718155A (zh) | 2014-04-09 |
MX2014001629A (es) | 2014-05-28 |
BR112014003123A2 (pt) | 2017-02-21 |
WO2013022465A1 (en) | 2013-02-14 |
RU2014104582A (ru) | 2015-08-20 |
CN103718155B (zh) | 2017-09-26 |
CA2844492A1 (en) | 2013-02-14 |
AU2011374897B2 (en) | 2016-11-10 |
AU2017200899A1 (en) | 2017-03-02 |
JP5933002B2 (ja) | 2016-06-08 |
RU2601198C2 (ru) | 2016-10-27 |
TWI577539B (zh) | 2017-04-11 |
KR101795844B1 (ko) | 2017-11-08 |
AU2017200899B2 (en) | 2017-12-07 |
CA2844492C (en) | 2018-11-20 |
EP2742420A1 (en) | 2014-06-18 |
TW201609366A (zh) | 2016-03-16 |
US9563487B2 (en) | 2017-02-07 |
MX336195B (es) | 2016-01-11 |
US20130042258A1 (en) | 2013-02-14 |
TWI533217B (zh) | 2016-05-11 |
IN2014CN00797A (ko) | 2015-04-03 |
EP2742420B1 (en) | 2020-09-02 |
AU2011374897A1 (en) | 2014-02-27 |
EP2742420A4 (en) | 2015-02-11 |
US8776094B2 (en) | 2014-07-08 |
US20140325534A1 (en) | 2014-10-30 |
TW201308209A (zh) | 2013-02-16 |
BR112014003123B1 (pt) | 2021-07-20 |
JP2014522063A (ja) | 2014-08-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101795844B1 (ko) | 런타임 시스템 | |
TWI556170B (zh) | 將作業系統之原始應用程式介面投射至其它程式語言(二) | |
US9395963B1 (en) | System and method for accessing meta-data in a dynamically typed array-based language | |
WO2014062950A1 (en) | Code dependency calculation | |
KR20090024229A (ko) | 마크업 내부에서 명시적으로 서브클래스를 정의하고 이용하는 시스템 및 방법 | |
US20150067653A1 (en) | Automatic generation of analysis-equivalent application constructs | |
JP6338713B2 (ja) | 柔軟性の高いメタデータの合成 | |
US7219341B2 (en) | Code analysis for selective runtime data processing | |
US10346225B2 (en) | Synthesized modules for module renaming | |
Ludin | Learn BlackBerry 10 App Development: A Cascades-Driven Approach | |
Ali | iPhone SDK 3 programming: advanced mobile development for Apple iPhone and iPod touch | |
Weitz et al. | Chapter 22: The World Outside |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
N231 | Notification of change of applicant | ||
A201 | Request for examination | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |