KR20160074486A - 상호작용 개발 환경으로부터의 소프트웨어 아티팩트의 점진적 컴파일링 기법 - Google Patents

상호작용 개발 환경으로부터의 소프트웨어 아티팩트의 점진적 컴파일링 기법 Download PDF

Info

Publication number
KR20160074486A
KR20160074486A KR1020167009790A KR20167009790A KR20160074486A KR 20160074486 A KR20160074486 A KR 20160074486A KR 1020167009790 A KR1020167009790 A KR 1020167009790A KR 20167009790 A KR20167009790 A KR 20167009790A KR 20160074486 A KR20160074486 A KR 20160074486A
Authority
KR
South Korea
Prior art keywords
compiling
type
compiled
computer
cache
Prior art date
Application number
KR1020167009790A
Other languages
English (en)
Other versions
KR102193404B1 (ko
Inventor
칼리드 아가그
수리야 나라야난
Original Assignee
마이크로소프트 테크놀로지 라이센싱, 엘엘씨
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 filed Critical 마이크로소프트 테크놀로지 라이센싱, 엘엘씨
Publication of KR20160074486A publication Critical patent/KR20160074486A/ko
Application granted granted Critical
Publication of KR102193404B1 publication Critical patent/KR102193404B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/48Incremental compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/37Compiler construction; Parser generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/38Creation or generation of source code for implementing user interfaces

Landscapes

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

Abstract

상호작용 개발 환경은 모델링된 타입을 개발 또는 맞춤화하기 위한 개발자 입력을 수신한다. 컴파일링 에이전트는 개발자가 개발 또는 맞춤화하는 모델링된 타입을 컴파일링하기 위한 IDE로부터의 요청을 수신한다. 컴파일링 에이전트는 이전에 컴파일링된 타입의 캐시에 액세스하고, 개발자에 의해 행해진 변경에 기초하여 개별적으로 로딩 가능한 타입 중 어느 것이 다시 컴파일링되어야 하는지를 결정하고, 그러한 식별된 타입만을 컴파일링한다. 다시 컴파일링된 타입도 캐시에 저장된다.

Description

상호작용 개발 환경으로부터의 소프트웨어 아티팩트의 점진적 컴파일링 기법{INCREMENTALLY COMPILING SOFTWARE ARTIFACTS FROM AN INTERACTIVE DEVELOPMENT ENVIRONMENT}
많은 소프트웨어 개발자는 소프트웨어를 개발하기 위해 상호작용 개발 환경(interactive development environment(IDE))을 이용한다. 개발자는 컴퓨터 시스템 내의 타입의 모델을 개발하고 그러한 모델을 맞춤화하기 위해 IDE를 이용한다.
모범적인 통합 개발 환경은 예컨대 개발자가 개발되어야 하는 코드를 개발 및 테스트할 수 있도록 그리고 컴퓨터 시스템을 필요에 따라 맞춤화하기 위해 복수의 상이한 도구를 포함하는 개발 도구 또는 개발 환경이다. 예컨대, IDE는 컴퓨터 프로그래머가 소프트웨어를 개발하는 것을 가능케 하는 소스 코드 편집기, 하나 이상의 빌드 자동화 도구(build automation tool) 및 디버거를 포함할 수 있다. 일부 IDE는, 예컨대 컴파일러나 해석기 또는 둘 모두를 포함한다. 이들 IDE는 버전 제어 시스템, 및 그래픽 사용자 인터페이스의 형성을 간소화하기 위한 다양한 도구를 포함할 수 있다. 이들 IDE는 객체 지향 소프트웨어 개발에 사용하기 위한 클래스 브라우저, 객체 브라우저 및 클래스 계층구조 다이어그램도 포함할 수 있다. 따라서, 개발자는 주어진 조직에서 사용하기 위한 시스템을 개발하는 데 사용될 수 있는 코드 및 메타데이터의 생성과 함께 코드 및 메타데이터를 맞춤화하기 위해 IDE를 이용할 수 있다.
IDE를 이용하여 소프트웨어를 생성 또는 맞춤화할 때, 애플리케이션 개발자는 애플리케이션 내의 (타입으로도 지칭되는) 특정 개념을 모델링하며, 필요한 경우에는 코드를 작성한다. 개발자가 종종 IDE를 이용하여 개발하는 대형 애플리케이션은 수천 개의 상이한 타입을 포함할 수 있다. 따라서, 이러한 타입의 개발 및 맞춤화는 비교적 방대한 작업이다.
예컨대, 일부 컴퓨터 시스템은 특히 기업 자원 계획(ERP) 시스템, 고객 관계 관리(CRM) 시스템, 비즈니스 라인(LOB) 시스템과 같은 비즈니스 시스템을 포함한다. 이러한 타입의 컴퓨터 시스템은 종종 모델링 및 맞춤화되는 수천 개의 상이한 타입을 갖는다. 예컨대, 일부 그러한 비즈니스 시스템은 흔히 많은 다른 타입은 말할 것도 없고 홀로 수천 개의 상이한 형태를 갖는다.
비즈니스 시스템이 많은 수의 타입을 갖는 컴퓨터 시스템의 유일한 타입은 아니다. 예컨대, 게이밍 시스템 또는 광범위한 다른 타입의 시스템도 종종 소프트웨어 시스템에서 모델링되는 수천 개의 상이한 타입을 갖는다.
그러한 컴퓨터 시스템은 해석된 코드(interpreted code) 또는 컴파일링된 코드(compiled code)에 의해 표현될 수 있다. 개발자가 컴파일링된 코드를 개발 또는 맞춤화할 때, 개발자는 종종 개발 또는 맞춤화에 공들인 후에 개발자의 의도대로 코드가 동작하는지를 확인하기 위해 코드를 실행하기를 원한다. 컴파일링된 코드 환경에서, 이것은 새로 개발되거나 맞춤화된 코드를 갖는 시스템을 실행하기 위해 컴파일러가 전체 시스템을 다시 컴파일링하는 것을 필요로 한다. 그 이유는 일반적으로 컴파일러는 대개는 컴파일링이 필요할 때 실행되는 실행 파일일 뿐이기 때문이다. 컴파일링이 종료될 때, 컴파일러는 자신이 구축한 자신의 메모리 및 임의의 캐시를 잃는다. 개발 환경에서, 이것은 매우 시간 소모적일 수 있고, 프로젝트의 개발 단계에 시간 및 비용을 추가할 수 있으며, 개발자 경험에 좌절을 유발할 수도 있다.
위의 설명은 일반적인 배경 정보를 위해 제공될 뿐이며, 청구 발명의 범위를 결정하기 위한 보조물로서 사용하기 위한 것은 아니다.
상호작용 개발 환경은 모델링된 타입(modeled type)을 개발 또는 맞춤화하기 위한 개발자 입력을 수신한다. 컴파일링 에이전트는 IDE로부터 개발자가 개발 또는 맞춤화하고 있는 모델링된 타입의 컴파일 요청을 수신한다. 컴파일링 에이전트는 이전에 컴파일링된 타입의 캐시를 유지하고 개발자에 의해 행해진 변경에 기초하여 개별적으로 로딩 가능한 타입 중 어느 것이 다시 컴파일링되어야 하는지를 판정하는 장기 실행 서비스로서 컴파일러를 호스팅하며, 그러한 식별된 타입만을 컴파일링한다. 다시 컴파일링된 타입도 캐시에 저장된다.
위의 설명은 일반적인 배경 정보를 위해 제공될 뿐이며, 청구 발명의 범위를 결정하기 위한 보조물로서 사용하기 위한 것은 아니다.
이 요약은 아래의 상세한 설명에서 더 설명되는 개념의 발췌를 간단한 형태로 소개하기 위해 제공된다. 이 요약은 청구 발명의 중요한 특징 또는 필수적인 특징을 밝히려는 것은 아니며, 청구 발명의 범위를 결정하기 위한 보조물로서 사용하고자 하는 것도 아니다. 청구 발명은 배경에서 설명된 임의의 또는 모든 단점을 해결하는 구현으로 한정되지 않는다.
도 1은 하나의 예시적인 개발 아키텍처의 블록도이다.
도 2는 개발 동안 컴파일링 동작을 수행함에 있어서의 도 1에 도시된 아키텍처의 동작의 일 실시예를 나타내는 흐름도이다.
도 3은 컴파일링 에이전트의 동작을 관리함에 있어서의 도 1에 도시된 컴파일링 에이전트를 위한 관리 컴포넌트의 일 실시예를 나타내는 흐름도이다.
도 4a 및 4b는 클라우드 컴퓨팅 아키텍처 내에 배치된 도 1에 도시된 아키텍처의 다양한 실시예를 나타낸다.
도 5-9는 이동 장치의 다양한 실시예를 나타낸다.
도 10은 하나의 예시적인 컴퓨팅 환경의 블록도이다.
도 1은 개발 아키텍처(100)의 하나의 예시적인 블록도를 나타낸다. 도 1은 개발 아키텍처(100)가 상호작용 개발 환경(IDE)(102)을 컴파일링 에이전트(104) 및 메타데이터 및 코드 저장소(106)와 함께 포함한다는 것을 나타낸다. 도 1은 또한 IDE(102) 및 컴파일링 에이전트(104)가 IDE(102)를 이용하여 개발 또는 맞춤화되는 컴퓨터 시스템을 호스팅하는 실행시간 환경(108)과 상호작용할 수 있다는 것을 나타낸다.
게다가, 도 1은 개발자(110)가 예컨대 실행시간 환경(108)에 의해 서빙되는 컴퓨터 시스템에서 실행되는 애플리케이션 요소(112)(예로서, 타입)의 개발 또는 맞춤화를 수행하기 위해 IDE(102)와 상호작용한다는 것을 나타낸다. 애플리케이션 요소 각각은 예컨대 메타데이터(114)를 포함하며, 코드(116)도 포함할 수 있다. 도 1은 또한 IDE(102)가 예컨대 프로세서(118) 및 데이터 저장소(120)를 포함한다는 것을 나타낸다.
컴파일링 에이전트(104)는 예컨대 IDE(102)에 의해 전송된 컴파일링 요청(122)에서 요청된 컴파일링 동작을 수행한다. 컴파일링 에이전트(104)는 예컨대 캐시(124), 관리 컴포넌트(126) 및 프로세서(128)를 포함한다. 컴파일링 동작이 수행된 후, 에이전트(104)는 예컨대 응답(130)을 IDE(102)에 역으로 제공한다. 이러한 동작 모두가 아래에서 도 2 및 3을 참조하여 더 상세히 설명된다.
컴파일링 에이전트(104)는 또한 예컨대 컴파일링된 타입(132)을 실행시간 환경(108)에 제공하며, 이들은 실행시간 동안의 실행을 위해 데이터 저장소(134)에 저장될 수 있다. 실행시간 환경(108)은 예컨대 애플리케이션 서버(136) 및 실행시간 번역기/로케이터(138)를 포함한다. 실행시간 번역기/로케이터(138)는 예컨대 컴퓨터 시스템을 실행하는 데 필요한 애플리케이션 요소에 대한 타입을 찾고, 요구시에 이들 타입을 로딩한다. 이들 타입은 예컨대 데이터 저장소(134)로부터 실행시간 동안 이들 타입이 실행될 수 있는 애플리케이션 서버(136) 내로 로딩된다.
메타데이터 및 코드 저장소(106)는 예컨대 다양한 상이한 타입의 애플리케이션 요소(예로서, 타입)에 대응하는 메타데이터 및 코드를 저장한다. 메타데이터 및 코드 저장소(106)는 예컨대 IDE(102) 및 컴파일링 에이전트(104)에 의해 액세스될 수 있다.
도 2는 소프트웨어 시스템을 개발함에 있어서의 도 1에 도시된 개발 아키텍처(100)의 동작의 일 실시예를 나타내는 흐름도이다. 개발자(110)는 예컨대 실행시간 환경(108)에 의해 사용되는 애플리케이션 서버에서 디버깅 또는 개발할 애플리케이션 요소를 선택하기 위해 IDE(102)에 의해 생성된 사용자 인터페이스 디스플레이와 상호작용한다는 점에 유의할 것이다. 개발자(110)는 (개인용 컴퓨터, 태블릿, 다른 이동 장치 등과 같은) 개별 개발자 장치를 통해 또는 직접 IDE(102)와 상호작용할 수 있다. 개발자(110)는 또한 네트워크를 통해 IDE(102)와 상호작용할 수 있다. 개발자(110)는 도 1에서 단지 예로서 IDE(102)와 직접 상호작용하는 것으로 도시된다.
IDE(102)는 먼저 예컨대 개발자가 모델링 또는 맞춤화하기를 원하는 (컴파일링 가능 타입과 같은) 애플리케이션 요소를 식별하는 개발자 입력을 수신한다. 이것은 도 2에 블록 150으로 표시되어 있다. 그에 응답하여, IDE(102)는 예컨대 메타데이터 및 코드 저장소(106)로부터 또는 실행시간 환경(108)으로부터 식별된 애플리케이션 요소의 소스 코드 표현을 획득한다. 이것은 도 2에 블록 152로 표시되어 있다. 소스 코드 표현은 메타데이터(114), 코드(116) 또는 다른 정보(118)도 포함할 수 있다.
선택적으로, 컴파일링 에이전트(104)는 또한 예컨대 개발 또는 맞춤화 동작이 수행된 후에 개발자(110)가 개발 또는 맞춤화된 코드를 실행하도록 로딩될 필요한 모든 애플리케이션 요소(예로서, 컴파일링 가능 타입)를 사전 로딩하기 위해 저장소(106)로부터 메타데이터 및 코드에 액세스할 수 있다. 에이전트(104)는 예컨대 이들 애플리케이션 요소를 개별적으로 로딩 가능한 타입으로 컴파일링하고, 이들을 캐시(124) 내에 캐싱한다. 이것은 도 2에 블록 154로 표시되어 있다. 이어서, IDE(102)는 식별된 애플리케이션 요소에 대한 개발자 맞춤화 입력을 수신하고, 따라서 개발자는 IDE(102)를 이용하여 컴파일링 가능 타입을 실제로 맞춤화 또는 개발한다. 맞춤화 입력의 수신 및 애플리케이션 요소의 맞춤화는 도 4에 블록 156으로 표시되어 있다.
소정 시점에서, 개발자(110)가 기존 모델에 대해 원하는 횟수의 맞춤화를 행하거나 처음부터 다수의 모델을 개발한 후, 개발자(110)는 코드가 컴파일링 에이전트(104)에 의해 컴파일링되기를 원할 수 있다. 이로써 개발자(110)는 새로 개발 또는 맞춤화된 코드를 실행하여 이것이 자신의 의도대로 동작하는지를 파악할 수 있다. 컴파일링 에이전트(104)가 이미 데이터 저장소(106)로부터 다수의 모델링된 타입에 액세스하여 이들 타입을 캐시(124) 내에 사전 로딩했을 수 있다는 것을 상기하라. 또한, 컴파일링 에이전트(104)는 개발자(110)에 의해 이전에 행해진 변경 또는 이전에 수행된 개발에 기초하여 IDE(102)로부터 수신된 다수의 컴파일링 가능 타입을 이미 컴파일링했을 수 있다. 그러한 컴파일링된 타입도 이미 캐시(124) 내에 존재할 수 있다. 따라서, 컴파일링 에이전트(104)는 IDE(102)로부터 컴파일링 요청(122)을 수신한다. 일 실시예에서, 컴파일링 에이전트(104)는 서비스 계약 메소드 호출(service contract method call)을 통해 컴파일링 요청(122) 내에서 컴파일링 파라미터를 수신한다. 예컨대, 노출되는 서비스 계약은 아래의 표 1에 나타난 것과 유사한 것일 수 있다.
표 1
Figure pct00001
컴파일링 에이전트(104)는 다른 방식으로 컴파일링 요청(122)을 수신할 수도 있다는 것을 알 것이다. 컴파일링 에이전트(104)가 개발자(102)에 의해 IDE(102)에서 행해진 변경 또는 개발을 식별하는 컴파일링 요청을 수신하는 것은 도 2에서 블록 158로 표시되어 있다.
이어서, 컴파일링 에이전트(104)는 개발자(110)에 의해 행해지는 개발 및 맞춤화가 개발자(110)에 의해 실행되고 검사될 수 있도록 컴파일링되어야 하는 요소(예로서, 모델링된 타입)를 식별하기 위해 캐시(124)에 액세스한다. 일 실시예에서, 컴파일링 에이전트(104)는 어떤 특정한 모델링된 타입이 개발자(110)에 의해 변경되었는지 또는 어떤 것이 추가되었는지를 식별함으로써 이를 행하고, 그러한 모델링된 타입, 및 개발 또는 맞춤화된 코드의 실행을 위해 컴파일링되어야 하는 임의의 다른 모델링된 타입만을 컴파일링한다.
컴파일링 에이전트(104)는 컴파일링되어야 하는 임의의 모델링된 타입이 이미 컴파일링되어 캐시(124)에 저장되었는지를 판정하기 위해 캐시(124)를 검사한다. 컴파일되어 저장되어 있다면 다시 컴파일링될 필요는 없다. 이것은 모델링된 타입이 독립적으로 로딩 가능한 어셈블리로서 모델링 및 컴파일링되기 때문이다. 따라서, 현재 맞춤화 또는 개발된 모델링된 타입만 컴파일링되면 되고, 임의의 다른 모델링된 타입은, 이들 타입이 이미 컴파일링되었고 컴파일링된 버전이 캐시(124) 내에 저장되어 있는 한, 다시 컴파일링될 필요는 없다. 컴파일링될 요소의 식별은 도 2에 블록 160으로 표시되어 있다.
이어서, 컴파일링 에이전트(104)는 컴파일링되어야 하는 식별된 요소에 대한 메타데이터 및 코드만을 데이터 저장소(106)로부터 로딩한다. 이것은 도 2에서 블록 162로 표시되어 있다. 예컨대, IDE(102)는 맞춤화 및 새로 개발된 타입을 컴파일링 에이전트(104)에 의한 액세스를 위해 데이터 저장소(106)에 저장할 수 있다. 에이전트(104)는 그러한 타입이 컴파일링되어야 하는 것으로 식별할 때, (존재할 경우) 데이터 저장소(106)에서 메타데이터 및 코드에 액세스하여 컴파일링이 수행되게 할 수 있다.
컴파일링 에이전트(104)는 컴파일링을 수행하는 데 필요한 모든 메타데이터 및 코드를 갖는 경우에, 식별된 요소(예로서, 모델링된 타입)를 개별적으로 로딩 가능한 타입으로 컴파일링하고, 컴파일링된 타입(132)이 실행시간 환경(108)에 의해 이용될 수 있게 한다. 이것은 도 2에서 블록 164로 표시되어 있다.
이어서, 컴파일링 에이전트(104)는 새로 컴파일링된 요소를 캐시(124)에 저장하고, 컴파일링의 완료를 지시하는 응답(130)을 IDE(102)로 전송한다. 이것은 도 2에서 블록 166으로 표시되어 있다. 그 시점에서, 실행시간 환경(108)은 방금 컴파일링된 코드를 실행할 수 있으며, 따라서 개발자(110)는 코드가 의도대로 동작하는지를 판정할 수 있다. 그에 따라, 실행시간 번역기/로케이터(138)는 컴파일링된 타입(132)을 식별할 수 있고, 애플리케이션 서버(136)는 이들 타입을 로딩 및 실행할 수 있다.
전체 프로세스에 걸쳐, 관리 컴포넌트(126)는 예컨대 에이전트(104)의 자기 관리를 수행한다. 이것은 아래에서 도 3과 관련하여 더 상세히 설명된다. 그러나, 요컨대, 관리 컴포넌트(126)는 예컨대 컴파일링 에이전트(104)에 의해 사용되는 메모리 풋프린트를 모니터링한다. 메모리 풋프린트가 임계 레벨에 도달하는 경우, 관리 컴포넌트(126)는 예컨대 캐시(124)를 무효화하여, 메모리의 대부분을 릴리스할 수 있다. 유사하게, 컴파일링 에이전트(104)가 사전 결정된 양의 시간 동안 유휴 상태인 경우, 또는 어떠한 IDE 인스턴스(102)도 현재 인스턴스화되지 않은 경우, 에이전트(104)는 그 자신을 셧다운할 수 있다. 자기 관리의 수행은 도 2에 블록 168로 표시되어 있으며, 그 자신을 셧다운할지의 결정은 블록 170으로 표시되어 있다.
블록 170에서 관리 컴포넌트(126)가 에이전트(104)를 셧다운해야 하는 것으로 결정되면, 에이전트(104)는 셧다운된다. 이것은 도 2에 블록 172로 표시되어 있다.
도 3은 관리 컴포넌트(126)의 동작의 일 실시예를 더 상세히 나타내는 흐름도이다. IDE(102)가 처음 컴파일링 요청(122)을 에이전트(104)에 제공할 때, 에이전트(104)는 그 시간에 실행중일 수도 있고, 실행되고 있지 않을 수도 있다. 실행되고 있지 않은 경우, 관리 컴포넌트(126)는 컴파일링 요청(122)이 수신되었음을 자동으로 검출하고, 컴파일링 에이전트(104)를 런칭한다. 에이전트(104)가 아직 시동되지 않은 경우에 IDE(102)로부터 요청을 수신하고 이를 시동하는 것은 도 3에 블록 180으로 표시되어 있다.
도 2와 관련하여 전술한 바와 같이, 컴파일링 에이전트(104)는 그 후 요청된 컴파일링 동작을 캐싱 동작과 함께 수행한다. 즉, 컴파일링 에이전트(104)는 (캐시(124)를 검색하여, 어느 것이 컴파일링 또는 다시 컴파일링되어야 하는지를 결정한 후에) 모든 필요한 컴파일링 가능 타입을 컴파일링하고, 새로 컴파일링된 타입을 캐시(124)에 저장한다. 이것은 도 3에 블록 182로 표시되어 있다.
관리 컴포넌트(126)는 자신을 실행하고 있는(또는 자신을 실행하는데 이용되는) 운영 체제에 간헐적으로 조회하여, 컴파일링 에이전트(104)의 메모리 소비가 주어진 임계값을 초과하는지를 판정한다. 이것은 도 3에 블록 184로 표시되어 있다. 임계값을 초과하는 경우, 관리 컴포넌트(126)는 캐시(124)를 무효화하거나 자유롭게 한다. 즉, 관리 컴포넌트(126)는 캐싱 동작(컴파일링된 타입의 캐싱)을 처음부터 다시 시작한다. 이것은 블록 186으로 표시되어 있다. 물론, 관리 컴포넌트(126)는 컴파일링 에이전트(104)의 메모리 풋프린트를 줄이기 위해 다른 동작을 수행할 수도 있으며, 캐시의 무효화는 일례일 뿐이다.
블록 184에서 메모리 소비가 임계값을 초과하지 않는 것으로 판정되는 경우, 또는 블록 186에서 캐시가 무효화된 후, 관리 컴포넌트(126)는 IDE(102)의 임의의 인스턴스가 여전히 실행되고 있는지를 판정한다. 이것은 도 3에 블록 188로 표시되어 있다. 컴파일링 에이전트(104)의 단일 인스턴스가 예컨대 IDE(102)의 다수의 인스턴스를 서빙할 수 있다. IDE(102)의 어떠한 인스턴스도 실행되고 있지 않으면, 컴파일링 에이전트(104)는 실행될 필요가 없으며, 블록 190으로 표시되어 있는 바와 같이 셧다운된다.
그러나, 블록 188에서 IDE(102)의 인스턴스가 여전히 실행되고 있는 것으로 판정되는 경우, 관리 컴포넌트(126)는 컴파일링 에이전트(104)가 임계 시간 동안 유휴 상태였는지를 판정한다. 이것은 도 3에 블록 192로 표시되어 있다. 예컨대, 개발자(110)는 코드를 여전히 작성하고 있지만, 아직 코드를 디버깅하고 있지 않을 수 있다. 개발자(110)는 휴식을 취했거나, 단지 코드가 컴파일링되기를 원하는 개발 단계에 있지 않을 수도 있다. 여하튼, 컴파일링 에이전트(104)가 블록 192에서 임계 시간 동안 유휴 상태에 있었다면, 관리 컴포넌트(126)는 블록 190에 의해 지시되는 바와 같이 컴파일링 에이전트(104)를 셧다운한다. 그러나, 블록 192에서 컴파일링 에이전트(104)가 임계 시간 동안 유휴 상태에 있지 않은 것으로 판정되면, 처리는 단지 블록 180으로 복귀하며, 여기서 에이전트(104)는 IDE(102)로부터의 추가 컴파일링 요청(122)을 기다린다.
따라서, 컴파일링 에이전트(104)는 컴파일링 요청(122)을 수신할 때마다 개발자(110)에 의해 행해진 변경에 기초하여 그리고 어느 타입이 이미 컴파일링되어 캐시(124)에 저장되었는지에 기초하여 필요한 컴파일링 가능 타입만을 컴파일링하거나 재컴파일링한다는 것을 알 수 있다. 이것은 개발자가 코드가 적절히 실행되는지를 파악하기 위해 기다려야 하는 컴파일 시간을 크게 줄인다. 이것은 개발자 경험을 향상시키며, 코드의 개발, 맞춤화 또는 디버깅에 필요한 시간 및 노력을 줄일 수 있다.
위의 설명은 데이터 저장소(120), 데이터 저장소(106) 및 데이터 저장소(134)를 포함하는 다수의 데이터 저장소를 설명했다는 점에도 유의해야 한다. 이것은 3개의 독립적인 데이터 저장소로서 설명되지만, 단일 데이터 저장소 내에 형성될 수도 있다. 게다가, 그러한 데이터 저장소 내의 데이터는 다수의 추가 데이터 저장소 내에 저장될 수도 있다. 또한, 데이터 저장소는 그에 액세스하는 환경 또는 에이전트 또는 컴포넌트에 대해 국지적일 수 있거나, 그로부터 원격적이고, 그러한 환경, 컴포넌트 또는 에이전트에 의해 액세스될 수 있다. 유사하게, 일부는 국지적일 수 있고, 다른 것은 원격적일 수 있다.
프로세서(118, 128) 및 서버(136)는 예컨대 (개별적으로 도시되지 않는) 관련 메모리 및 타이밍 회로를 갖는 컴퓨터 프로세서를 포함한다. 이들 프로세서 및 서버는 이들이 속하는 에이전트 또는 환경의 기능적 부분이고, 예컨대 그러한 환경 또는 에이전트 내의 다른 아이템에 의해 활성화되고 그의 기능을 가능하게 한다.
도 1은 컴파일링 에이전트(104)를 IDE(102)로부터 분리된 것으로 도시한다는 점에도 유의할 것이다. 그러나, 컴파일링 에이전트(104)는 IDE(102)의 일부일 수도 있다는 것을 알 것이다. 또한, 도 1은 각 블록과 관련된 기능을 갖는 다양한 블록을 보여준다. 블록은 더 많은 기능이 각각의 블록에 의해 수행되도록 통합될 수 있거나, 기능이 더 분산되도록 분할될 수 있다는 점에 유의할 것이다.
또한, 개발자(110)가 IDE(102)를 조작 및 제어하기 위해 상호작용하는 사용자 인터페이스 디스플레이는, 예컨대 아이콘, 텍스트 박스, 체크 박스, 타일, 드롭다운 메뉴 등과 같은 다양한 상이한 형태를 취할 수 있는 사용자 작동 가능 입력 메커니즘을 갖는다. 이들 메커니즘은 예컨대 (트랙볼 또는 마우스와 같은) 포인트 및 클릭 장치, 버튼, 조이스틱, 썸패드(thumbpads), 썸 스위치(thumb switches), 가상 또는 하드웨어 키보드 또는 키패드를 이용하여 작동될 수 있다. 또한, 사용자 인터페이스 디스플레이가 터치 감지 스크린 상에 표시되는 경우, 사용자 입력 메커니즘은 사용자 손가락, 스타일러스 등을 이용하여 터치 제스처에 의해 작동될 수 있다. 디스플레이를 표시하는 장치가 음성 인식 컴포넌트를 갖는 경우, 사용자 입력 메커니즘은 음성 커맨드를 이용하여 작동될 수 있다.
도 4a는 아키텍쳐의 요소가 클라우드 컴퓨팅 아키텍처(500) 내에 배치된다는 점 외에는 도 1에 도시된 아키텍처(100)의 블록도이다. 도 4a는 다수의 대안적인 구성을 나타낸다. 예컨대, 컴파일링 에이전트(104)는 클라우드(502)의 내부 및 외부 모두에 도시된다. 이것은 에이전트(502)가 아키텍처(100) 내의 다른 아이템과 같이 다양한 상이한 위치에 배치될 수 있다는 것을 예시하는 것을 의도한다. 클라우드 컴퓨팅은 서비스를 전달하는 시스템의 물리 위치 또는 구성에 대한 최종 사용자 지식을 필요로 하지 않는 계산, 소프트웨어, 데이터 액세스 및 저장 서비스를 제공한다. 다양한 실시예에서, 클라우드 컴퓨팅은 적절한 프로토콜을 이용하여 인터넷과 같은 광역 네트워크를 통해 서비스를 전달한다. 예컨대, 클라우드 컴퓨팅 제공자는 광역 네트워크를 통해 애플리케이션을 전달하고, 웹 브라우저 또는 임의의 다른 컴퓨팅 컴포넌트를 통해 액세스될 수 있다. 아키텍처(100)의 소프트웨어 또는 컴포넌트는 물론, 대응하는 데이터도 원격 위치의 서버 상에 저장될 수 있다. 클라우드 컴퓨팅 환경 내의 컴퓨팅 자원은 원격 데이터 센터 위치에 통합될 수 있거나, 분산될 수 있다. 공유 데이터 센터가 사용자에게 단일 액세스 포인트처럼 보이지만, 클라우드 컴퓨팅 기반구조는 그를 통해 서비스를 전달할 수 있다. 따라서, 본 명세서에서 설명되는 컴포넌트 및 기능은 클라우드 컴퓨팅 아키텍처를 이용하여 원격 위치의 서비스 제공자로부터 제공될 수 있다. 대안으로서, 이들 컴포넌트 및 기능은 통상적인 서버로부터 제공될 수 있거나, 클라이언트 장치 상에 직접 또는 다른 방식으로 설치될 수 있다.
설명은 공개 클라우드 컴퓨팅 및 비공개 클라우드 컴퓨팅 양자를 포함하는 것을 의도한다. 클라우드 컴퓨팅(공용 및 사설 양자)은 자원의 실질적으로 중단 없는 풀링(pooling)은 물론, 기본 하드웨어 기반구조를 관리 및 구성하기 위한 필요성의 감소를 제공한다.
공개 클라우드는 판매자에 의해 관리되며, 통상적으로 동일 기반구조를 이용하여 다수의 소비자를 지원한다. 또한, 공개 클라우드는 비공개 클라우드와 달리 최종 사용자를 하드웨어 관리로부터 자유롭게 할 수 있다. 비공개 클라우드는 조직 자체에 의해 관리될 수 있으며, 기반구조는 통상적으로 다른 조직과 공유되지 않는다. 조직은 설치 및 수리 등과 같이 하드웨어를 어느 정도는 계속 유지한다.
도 4a에 도시된 실시예에서, 일부 아이템은 도 1에 도시된 것과 유사하며, 유사하게 넘버링된다. 도 4a는 특히 IDE(102), 컴파일링 에이전트(104) 및 실행시간 환경(108) 모두가 (공개적이거나, 비공개적이거나, 일부가 공개적이고 다른 것이 비공개적인 경우에는 조합일 수 있는) 클라우드(502) 내에 배치될 수 있다는 것을 나타낸다. 따라서, 개발자(110)는 사용자 인터페이스 디스플레이(505)를 갖는 사용자 장치(504)를 이용하여 클라우드(502)를 통해 그러한 시스템에 액세스한다.
도 4a는 클라우드 아키텍처의 다른 대안 실시예도 도시한다. 도 4a는 아키텍처(100)의 일부 요소가 클라우드(502) 내에 배치되고 다른 요소가 그 안에 배치되지 않는 것도 고려된다는 것을 나타낸다. 예컨대, 데이터 저장소(106, 120, 134)는 클라우드(502) 밖에 배치되고, 클라우드(502)를 통해 액세스될 수 있다. 다른 실시예에서, 컴파일링 에이전트(104)는 클라우드(502) 밖에 배치될 수 있다. 이들 요소가 어디에 배치되는지에 관계없이, 이들은 네트워크(광역 네트워크 또는 근거리 네트워크)를 통해 장치(504)에 의해 직접 액세스될 수 있거나, 서비스에 의해 원격 사이트에서 호스팅될 수 있거나, 클라우드를 통해 서비스로서 제공되거나, 클라우드 내에 존재하는 접속 서비스에 의해 액세스될 수 있다. 이러한 아키텍처 모두가 본 명세서에서 고려된다.
도 4b는 다른 클라우드 기반 아키텍처의 블록도를 나타낸다. 도 4b는 개발자(110)가 원격 액세스 장치(507)를 통해 개발자 장치(504) 및 IDE(102)에 액세스한다는 점 외에는 도 4a와 유사하다. 도 4a 및 4b에 표현된 모든 다양한 구성이 본 명세서에서 고려된다.
아키텍처(100) 또는 그 일부분이 다양한 상이한 장치 상에 배치될 수 있다는 점도 유의할 것이다. 그러한 장치 중 일부는 서버, 데스크탑 컴퓨터, 랩탑 컴퓨터, 태블릿 컴퓨터, 또는 다른 이동 장치, 예로서 팜탑 컴퓨터, 셀폰, 스마트폰, 멀티미디어 플레이어, 개인 휴대 단말기 등을 포함한다.
도 5는 아키텍처(100)(또는 그의 부분)가 배치될 수 있는 사용자 또는 클라이언트의 핸드헬드 장치(16)로서 사용될 수 있는 핸드헬드 또는 이동 컴퓨팅 장치의 하나의 예시적인 실시 형태의 간이 블록도이다. 도 6-9는 핸드헬드 또는 이동 장치의 예이다.
도 5는 아키텍처(100)의 컴포넌트를 실행할 수 있거나 아키텍처(100)와 상호작용하거나 양자일 수 있는 클라이언트 장치(16)의 컴포넌트의 일반 블록도를 제공한다. 장치(16) 내에는, 핸드헬드 장치가 다른 컴퓨팅 장치와 통신하는 것을 가능하게 하고, 일부 실시예에서는 예컨대 스캐닝에 의해 정보를 자동으로 수신하기 위한 채널을 제공하는 통신 링크(13)가 제공된다. 통신 링크(13)의 예는 적외선 포트, 직렬/USB 포트, 이더넷 포트와 같은 케이블 네트워크 포트, 및 네트워크에 대한 셀룰러 액세스를 제공하는 데 사용되는 무선 서비스인 범용 패킷 무선 서비스(GPRS), LTE, HSPA, HSPA+ 및 다른 3G 및 4G 무선 프로토콜, 1Xrtt 및 단문 메시지 서비스는 물론, 네트워크에 대한 로컬 무선 접속을 제공하는 802.11 및 802.11b(Wi-Fi) 프로토콜 및 블루투스 프로토콜도 포함하는 하나 이상의 통신 프로토콜을 통해 통신을 가능하게 하는 무선 네트워크 포트를 포함한다.
다른 실시예에서, 애플리케이션 또는 시스템은 보안 디지털(SD) 카드 인터페이스(15)에 접속되는 이동식 SD 카드 상에 수용된다. SD 카드 인터페이스(15) 및 통신 링크(13)는 메모리(21) 및 입출력(I/O) 컴포넌트(23)는 물론, 클럭(25) 및 로케이션 시스템(27)에도 접속되는 버스(19)를 따라 (도 1의 프로세서(118 또는 128) 또는 서버(136)도 구현할 수 있는) 프로세서(17)와 통신한다.
일 실시예에서, I/O 컴포넌트(23)는 입출력 기능을 가능하게 하도록 제공된다. 장치(16)의 다양한 실시예를 위한 I/O 컴포넌트(23)는 버튼, 터치 센서, 멀티터치 센서, 광 또는 비디오 센서, 음성 센서, 터치스크린, 근접 센서, 마이크, 기울기 센서 및 중력 스위치와 같은 입력 컴포넌트 및 디스플레이 장치, 스피커 및/또는 프린터 포트와 같은 출력 컴포넌트를 포함할 수 있다. 다른 I/O 컴포넌트(23)도 사용될 수 있다.
클럭(25)은 예컨대 시간 및 날짜를 출력하는 실시간 클럭 컴포넌트를 포함한다. 이것은 예컨대 프로세서(17)에 대한 타이밍 기능을 제공할 수도 있다.
로케이션 시스템(27)은 예컨대 장치(16)의 현재 지리 위치를 출력하는 컴포넌트를 포함한다. 이것은 예컨대 글로벌 포지셔닝 시스템(GPS) 수신기, LORAN 시스템, 데드 레커닝 시스템(dead reckoning system), 셀룰러 삼각측량 시스템 또는 다른 포지셔닝 시스템을 포함할 수 있다. 이것은 또한 예컨대 원하는 맵, 내비게이션 라우트 및 다른 지리 기능을 생성하는 맵핑 소프트웨어 또는 내비게이션 소프트웨어를 포함할 수 있다.
메모리(21)는 운영 체제(29), 네트워크 설정(31), 애플리케이션(33), 애플리케이션 구성 설정(35), 데이터 저장소(37), 통신 드라이버(39) 및 통신 구성 설정(41)을 저장한다. 메모리(21)는 모든 타입의 유형적인 휘발성 및 비휘발성 컴퓨터 판독 가능 메모리 장치를 포함할 수 있다. 이것은 또한 컴퓨터 저장 매체(후술함)를 포함할 수 있다. 메모리(21)는 컴퓨터 판독 가능 명령어를 저장하며, 명령어는 프로세서(17)에 의해 실행될 때 프로세서로 하여금 명령어에 따라 컴퓨터 구현 단계 또는 기능을 수행하게 한다. 유사하게, 장치(16)는 다양한 비즈니스 애플리케이션을 실행할 수 있는 클라이언트 비즈니스 시스템(24)을 가질 수 있다. 프로세서(17)는 다른 컴포넌트에 의해 그의 기능을 가능하게 하도록 작동될 수도 있다.
네트워크 설정(31)의 예는 프록시 정보, 인터넷 접속 정보 및 맵핑과 같은 것을 포함한다. 애플리케이션 구성 설정(35)은 특정 기업 또는 사용자에 대해 애플리케이션을 맞춤화하는 설정을 포함한다. 통신 구성 설정(41)은 다른 컴퓨터와 통신하기 위한 파라미터를 제공하며, GPRS 파라미터, SMS 파라미터, 접속 사용자 이름 및 패스워드와 같은 아이템을 포함한다.
애플리케이션(33)은 장치(16) 상에 이전에 저장된 애플리케이션 또는 사용 중에 설치되는 애플리케이션일 수 있지만, 이는 운영 체제의 일부이거나 장치(16) 외부에서 호스팅될 수도 있다.
도 6은 장치(16)가 태블릿 컴퓨터(600)인 일 실시예를 나타낸다. 도 6에서, 컴퓨터(600)는 디스플레이 스크린(602)을 갖는 것으로 도시된다. 스크린(602)은 터치스크린(따라서, 사용자의 손가락으로부터의 터치 제스처가 애플리케이션과 상호작용하는 데 사용될 수 있음) 또는 펜 또는 스타일러스로부터 입력을 수신하는 펜 인에이블드 인터페이스일 수 있다. 이것은 온-스크린 가상 키보드를 사용할 수도 있다. 물론, 이것은 예컨대 무선 링크 또는 USB 포트와 같은 적절한 부착 메커니즘을 통해 키보드 또는 다른 사용자 입력 장치에 부착될 수도 있다. 컴퓨터(600)는 예컨대 음성 입력도 수신할 수 있다.
도 7 및 8은 사용될 수 있는 장치(16)의 추가 예를 제공하지만, 다른 장치도 사용될 수 있다. 도 7에는, 피처 폰, 스마트폰 또는 이동 전화(45)가 장치(16)로서 제공된다. 전화(45)는 전화 번호를 다이얼링하기 위한 한 세트의 키패드(47), 애플리케이션 이미지, 아이콘, 웹페이지, 사진 및 비디오를 포함하는 이미지를 표시할 수 있는 디스플레이(48) 및 디스플레이 상에 표시된 아이템을 선택하기 위한 제어 버튼(51)을 포함한다. 전화는 범용 패킷 무선 서비스(GPRS) 및 1Xrtt, 및 단문 메시지 서비스(SMS) 신호와 같은 셀룰러 전화 신호를 수신하기 위한 안테나(53)를 포함한다. 일부 실시예에서, 전화(45)는 보안 디지털(SD) 카드(57)를 수용하는 SD 카드 슬롯(55)도 포함한다.
도 8의 이동 장치는 개인 휴대 단말기(PDA)(59) 또는 멀티미디어 플레이어 또는 태블릿 컴퓨팅 장치 등(이하, PDA(59)로 지칭됨)이다. PDA(59)는 스타일러스가 스크린 위에 배치될 때 스타일러스(63)(또는 사용자의 손가락과 같은 다른 포인트)의 위치를 감지하는 유도성 스크린(61)을 포함한다. 이것은 사용자가 스크린 상에서 아이템을 선택하고, 강조하고, 이동시키는 것은 물론, 그리기 및 쓰기를 행하는 것을 가능하게 한다. PDA(59)는 또한, 사용자가 디스플레이(61) 상에 표시된 메뉴 옵션 또는 다른 디스플레이 옵션을 통해 스크롤링하는 것을 가능하게 하고, 사용자가 디스플레이(61)와 접촉하지 않고서 애플리케이션을 변경하거나 사용자 입력 기능을 선택하는 것을 가능하게 하는 다수의 사용자 입력 키 또는 (버튼(65)과 같은) 버튼을 포함한다. 도시되지 않지만, PDA(59)는 다른 컴퓨터와의 무선 통신을 가능하게 하는 내부 안테나 및 적외선 송신기/수신기는 물론, 다른 컴퓨팅 장치에 대한 하드웨어 접속을 가능하게 하는 접속 포트도 포함할 수 있다. 그러한 하드웨어 접속은 통상적으로 직렬 또는 USB 포트를 통해 다른 컴퓨터에 접속되는 크레이들을 통해 이루어진다. 따라서, 이러한 접속은 논-네트워크 접속(non-network connection)이다. 일 실시예에서, 이동 장치(59)는 SD 카드(69)를 수용하는 SD 카드 포트(67)도 포함한다.
도 9는 전화가 스마트폰(71)이라는 점 외에는 도 7과 유사하다. 스마트폰(71)은 아이콘 또는 타일 또는 다른 사용자 입력 메커니즘(75)을 표시하는 터치 감지 디스플레이(73)를 갖는다. 메커니즘(75)은 사용자에 의해 애플리케이션을 실행하고, 호출을 행하고, 데이터 전송 동작을 행하는 것 등을 위해 사용될 수 있다. 일반적으로, 스마트폰(71)은 이동 운영 체제 상에 구축되며, 피처 폰보다 진보된 컴퓨팅 능력 및 접속성을 제공한다.
다른 형태의 장치(16)가 가능하다는 점에 유의한다.
도 10은 (예컨대) 아키텍처(100) 또는 그의 부분이 배치될 수 있는 컴퓨팅 환경의 일 실시예이다. 도 10을 참조하면, 일부 실시예를 구현하기 위한 모범적인 시스템은 컴퓨터(810) 형태의 범용 컴퓨팅 장치를 포함한다. 컴퓨터(810)의 컴포넌트는 (프로세서(118 또는 128) 또는 서버(136)를 포함할 수 있는) 처리 유닛(820), 시스템 메모리(830), 및 시스템 메모리를 포함하는 다양한 시스템 컴포넌트를 처리 유닛(820)에 결합하는 시스템 버스(821)를 포함할 수 있지만 이에 한정되지 않는다. 시스템 버스(821)는 임의의 다양한 버스 아키텍처를 이용하는 메모리 버스 또는 메모리 제어기, 주변장치 버스 및 로컬 버스를 포함하는 임의의 여러 타입의 버스 구조일 수 있다. 한정이 아니라 예로서, 그러한 아키텍처는 산업 표준 아키텍처(ISA) 버스, 마이크로 채널 아키텍처(MCA) 버스, 향상된 ISA(Enhanced ISA: EISA) 버스, 비디오 전자 표준 협회(VESA) 로컬 버스, 및 메자닌 버스로서 알려진 주변 컴포넌트 상호접속(PCI) 버스를 포함한다. 도 1과 관련하여 설명된 메모리 및 프로그램은 도 10의 대응하는 부분에 배치될 수 있다.
컴퓨터(810)는 통상적으로 다양한 컴퓨터 판독 가능 매체를 포함한다. 컴퓨터 판독 가능 매체는 컴퓨터(810)에 의해 액세스될 수 있는 임의의 이용 가능 매체일 수 있으며, 휘발성 및 비휘발성, 이동식 및 비이동식 매체 양자를 포함한다. 한정이 아니라 예로서, 컴퓨터 판독 가능 매체는 컴퓨터 저장 매체 및 통신 매체를 포함할 수 있다. 컴퓨터 저장 매체는 피변조 데이터 신호 또는 반송파와 다르고, 이들을 포함하지 않는다. 컴퓨터 저장 매체는 컴퓨터 판독 가능 명령어, 데이터 구조, 프로그램 모듈 또는 다른 데이터와 같은 정보의 저장을 위한 임의의 방법 또는 기술로 구현되는 휘발성 및 비휘발성, 이동식 및 비이동식 매체 양자를 포함하는 하드웨어 저장 매체를 포함한다. 컴퓨터 저장 매체는 RAM, ROM, EEPROM, 플래시 메모리 또는 다른 메모리 기술, CD-ROM, 디지털 다기능 디스크(DVD) 또는 다른 광 디스크 저장소, 자기 카세트, 자기 테이프, 자기 디스크 저장소 또는 다른 자기 저장 장치, 또는 원하는 정보를 저장하는 데 사용될 수 있고 컴퓨터(810)에 의해 액세스될 수 있는 임의의 다른 매체를 포함하지만 이에 한정되지 않는다. 통신 매체는 통상적으로 운반 매체 내에 컴퓨터 판독 가능 명령어, 데이터 구조, 프로그램 모듈 또는 다른 데이터를 구현하며, 임의의 정보 전달 매체를 포함한다. 용어 "피변조 데이터 신호"는 신호 내에 정보를 인코딩하는 방식으로 신호의 특성 중 하나 이상이 설정 또는 변경된 신호를 의미한다. 한정이 아니라 예로서, 통신 매체는 유선 네트워크 또는 직접 유선 접속과 같은 유선 매체, 및 음향, RF, 적외선 및 다른 무선 매체와 같은 무선 매체를 포함한다. 임의의 위의 것의 조합도 컴퓨터 판독 가능 매체의 범위 내에 포함되어야 한다.
시스템 메모리(830)는 판독 전용 메모리(ROM)(831) 및 랜덤 액세스 메모리(RAM)(832)와 같은 휘발성 및/또는 비휘발성 메모리 형태의 컴퓨터 저장 매체를 포함한다. 예컨대 시동 동안 컴퓨터(810) 내의 요소 간의 정보 전달을 돕는 기본 루틴을 포함하는 기본 입출력 시스템(833)(BIOS)은 통상적으로 ROM(831)에 저장된다. RAM(832)은 통상적으로 처리 유닛(820)에 의해 즉시 액세스될 수 있고/있거나 현재 조작되고 있는 데이터 및/또는 프로그램 모듈을 포함한다. 한정이 아니라 예로서, 도 10은 운영 체제(834), 애플리케이션 프로그램(835), 다른 프로그램 모듈(836) 및 프로그램 데이터(837)를 도시한다.
컴퓨터(810)는 다른 이동식/비이동식 휘발성/비휘발성 컴퓨터 저장 매체도 포함할 수 있다. 단지 예로서, 도 10은 비이동식 비휘발성 자기 매체로부터 판독하고 그에 기록하는 하드 디스크 드라이브(841), 이동식 비휘발성 자기 디스크(852)로부터 판독하고 그에 기록하는 자기 디스크 드라이브(851), 및 CD ROM 또는 다른 광학 매체와 같은 이동식 비휘발성 광 디스크(856)로부터 판독하고 그에 기록하는 광 디스크 드라이브(855)를 도시한다. 모범적인 동작 환경에서 사용될 수 있는 다른 이동식/비이동식 휘발성/비휘발성 컴퓨터 저장 매체는 자기 테이프 카세트, 플래시 메모리 카드, 디지털 다기능 디스크, 디지털 비디오 테이프, 반도체 RAM, 반도체 ROM 등을 포함하지만 이에 한정되지 않는다. 하드 디스크 드라이브(841)는 통상적으로 인터페이스(840)와 같은 비이동식 메모리 인터페이스를 통해 시스템 버스(821)에 접속되며, 자기 디스크 드라이브(851) 및 광 디스크 드라이브(855)는 통상적으로 인터페이스(850)와 같은 이동식 메모리 인터페이스에 의해 시스템 버스(821)에 접속된다.
대안으로서 또는 추가로, 본 명세서에서 설명되는 기능은 하나 이상의 하드웨어 논리 컴포넌트에 의해 적어도 부분적으로 수행될 수 있다. 한정이 아니라 예로서, 사용될 수 있는 예시적인 타입의 하드웨어 논리 컴포넌트는 필드 프로그래머블 게이트 어레이(FPGA), 프로그램 고유 집적 회로(ASIC), 프로그램 고유 표준 제품(ASSP), 시스템-온-칩 시스템(SOC), 복합 프로그래밍 가능 논리 장치(CPLD) 등을 포함한다.
위에서 설명되고 도 10에 도시된 드라이브 및 그와 관련된 컴퓨터 저장 매체는 컴퓨터(810)를 위한 컴퓨터 판독 가능 명령어, 데이터 구조, 프로그램 모듈 및 다른 데이터의 저장을 제공한다. 도 10에서, 예컨대, 하드 디스크 드라이브(841)는 운영 체제(844), 애플리케이션 프로그램(845), 다른 프로그램 모듈(846) 및 프로그램 데이터(847)를 저장하는 것으로 도시된다. 이러한 컴포넌트는 운영 체제(834), 애플리케이션 프로그램(835), 다른 프로그램 모듈(836) 및 프로그램 데이터(837)와 동일하거나 상이할 수 있다는 점에 유의한다. 운영 체제(844), 애플리케이션 프로그램(845), 다른 프로그램 모듈(846) 및 프로그램 데이터(847)에는 본 명세서에서 최소한 그가 상이한 사본이라는 것을 나타내기 위해 다른 번호가 부여된다.
사용자는 키보드(862), 마이크로폰(863), 및 마우스, 트랙볼 또는 터치 패드와 같은 포인팅 장치(861)와 같은 입력 장치를 통해 컴퓨터(810) 내에 커맨드 및 정보를 입력할 수 있다. 다른 입력 장치(도시되지 않음)는 조이스틱, 게임 패드, 위성 안테나, 스캐너 등을 포함할 수 있다. 이것 및 다른 입력 장치는 종종 시스템 버스에 결합되는 사용자 입력 인터페이스(860)를 통해 처리 유닛(820)에 접속되지만, 병렬 포트, 게임 포트 또는 유니버설 직렬 버스(USB)와 같은 다른 인터페이스 및 버스 구조에 의해 접속될 수 있다. 시각적 디스플레이(891) 또는 다른 타입의 디스플레이 장치도 비디오 인터페이스(890)와 같은 인터페이스를 통해 시스템 버스(821)에 접속된다. 모니터 외에, 컴퓨터는 출력 주변장치 인터페이스(895)를 통해 접속될 수 있는 스피커(897) 및 프린터(896)와 같은 다른 주변 출력 장치도 포함할 수 있다.
컴퓨터(810)는 원격 컴퓨터(880)와 같은 하나 이상의 원격 컴퓨터에 대한 논리 접속을 이용하여 네트워킹 환경에서 동작한다. 원격 컴퓨터(880)는 개인용 컴퓨터, 핸드헬드 장치, 서버, 라우터, 네트워크 PC, 피어 장치 또는 다른 일반 네트워크 노드일 수 있고, 통상적으로 컴퓨터(810)와 관련하여 전술한 요소 중 다수 또는 전부를 포함한다. 도 10에 도시된 논리 접속은 근거리 네트워크(LAN)(871) 및 광역 네트워크(WAN)(873)를 포함하지만, 다른 네트워크도 포함할 수 있다. 그러한 네트워킹 환경은 사무실, 기업 광역 컴퓨터 네트워크, 인트라넷 및 인터넷에서 일반적이다.
LAN 네트워킹 환경에서 사용될 때, 컴퓨터(810)는 네트워크 인터페이스 또는 어댑터(870)를 통해 LAN(871)에 접속된다. WAN 네트워킹 환경에서 사용될 때, 컴퓨터(810)는 통상적으로 인터넷과 같은 WAN(873)을 통해 통신을 설정하기 위한 모뎀(872) 또는 기타 수단을 포함한다. 내장형 또는 외장형일 수 있는 모뎀(872)은 사용자 입력 인터페이스(860) 또는 다른 적절한 메커니즘을 통해 시스템 버스(821)에 접속될 수 있다. 네트워킹 환경에서, 컴퓨터(810) 또는 그의 부분과 관련하여 도시된 프로그램 모듈은 원격 메모리 저장 장치에 저장될 수 있다. 한정이 아니라 예로서, 도 10은 원격 애플리케이션 프로그램(885)을 원격 컴퓨터(880) 상에 존재하는 것으로 도시한다. 도시된 네트워크 접속은 모범적이며, 컴퓨터 사이의 통신 링크를 설정하는 다른 수단이 이용될 수 있다는 것을 알 것이다.
본 명세서에서 설명되는 상이한 실시예가 상이한 방식으로 결합될 수 있다는 점에도 유의해야 한다. 즉, 하나 이상의 실시예의 부분이 하나 이상의 다른 실시예의 부분과 결합될 수 있다. 이 모두가 본 명세서에서 고려된다.
본 발명은 구조적 특징 및/또는 방법적 동작에 고유한 언어로 설명되었지만, 첨부된 청구항에서 정의되는 발명은 전술한 특정 특징 또는 동작으로 반드시 한정되지는 않는다는 것을 이해해야 한다. 오히려, 전술한 특정 특징 및 동작은 청구항을 구현하는 예시적인 형태로서 개시된다.

Claims (15)

  1. 컴퓨터 시스템에서 모델링된 타입을 컴파일링하기 위한 컴파일링 시스템으로서,
    이전에 컴파일링된 타입을 저장하는 컴파일링 캐시(a compilation cache)와,
    개발 환경(development environment)으로부터 컴파일링 요청을 수신하는 점진적 컴파일링 컴포넌트(an incremental compilation component) - 상기 점진적 컴파일링 컴포넌트는 상기 개발 환경에서 상기 컴퓨터 시스템에 대해 행해진 변경에 기초하여 그리고 상기 컴파일링 캐시를 검색하여 컴파일링될 임의의 타입이 이전에 컴파일링된 타입으로서 저장되었는지를 식별함으로써 컴파일링될 타입을 식별하고, 상기 점진적 컴파일링 컴포넌트는 상기 식별된 타입을 컴파일링하고, 상기 식별된 타입이 실행시간 환경에 의해 액세스될 수 있게 함 - 와,
    상기 컴파일링 시스템의 기능 부분이고, 상기 점진적 컴파일링 컴포넌트에 의해 활성화되어, 상기 컴파일링될 타입의 식별, 상기 컴파일링 캐시의 검색 및 상기 식별된 타입의 컴파일링을 가능하게 하는 컴퓨터 프로세서를 포함하는
    컴파일링 시스템.
  2. 제1항에 있어서,
    상기 컴파일링 시스템의 메모리 사용 및 동작을 관리하는 관리 컴포넌트를 더 포함하는
    컴파일링 시스템.
  3. 제2항에 있어서,
    상기 점진적 컴파일링 컴포넌트는 상기 식별된 타입을 컴파일링하여 최근에 컴파일링된 타입을 획득하고, 상기 최근에 컴파일링된 타입을 상기 컴파일링 캐시에 저장하는
    컴파일링 시스템.
  4. 제3항에 있어서,
    상기 관리 컴포넌트는 상기 컴파일링 시스템으로부터의 메모리 사용이 임계 레벨을 충족시키는지를 간헐적으로 판정하고, 임계 레벨을 충족시킬 경우에 상기 컴파일링 캐시의 적어도 일부를 무효화하는
    컴파일링 시스템.
  5. 제3항에 있어서,
    상기 관리 시스템은 임의의 개발 환경 인스턴스가 실행되고 있는지를 간헐적으로 판정하고, 실행되고 있지 않은 경우에 상기 컴파일링 시스템을 셧다운하는
    컴파일링 시스템.
  6. 제3항에 있어서,
    상기 관리 시스템은 상기 컴파일링 시스템이 사전 결정된 임계 시간 동안 유휴 상태였는지를 간헐적으로 판정하고, 유휴 상태인 경우에 상기 컴파일링 시스템을 셧다운하는
    컴파일링 시스템.
  7. 제2항에 있어서,
    상기 컴파일링 캐시, 상기 점진적 컴파일링 컴포넌트 및 상기 컴퓨터 프로세서는 통합 개발 환경(integrated development environment: IDE)의 일부인
    컴파일링 시스템.
  8. 제7항에 있어서,
    상기 IDE는 모델 및 컴파일링 가능 타입을 생성 및 맞춤화하는(customizing) 개발 입력을 수신하도록 구성되는
    컴파일링 시스템.
  9. 타입을 모델링하는 컴퓨터 시스템을 개발하는 컴퓨터 구현 방법으로서,
    타입의 컴파일링 요청을 수신하는 단계와,
    개발 환경에서 행해진 상기 컴퓨터 시스템에 대한 변경에 기초하여 그리고 이미 컴파일링되어 컴파일링 캐시에 저장된 타입에 기초하여, 컴파일링할 상기 타입을 상기 컴퓨터 시스템 내의 타입의 서브세트로서 식별하는 단계와,
    상기 식별된 타입을 컴파일링하여 최근에 컴파일링된 타입을 획득하는 단계를 포함하는
    컴퓨터 구현 방법.
  10. 제9항에 있어서,
    상기 최근에 컴파일링된 타입을 상기 컴파일링 캐시에 저장하는 단계를 더 포함하는
    컴퓨터 구현 방법.
  11. 제10항에 있어서,
    상기 최근에 컴파일링된 타입을 실행될 개발 환경으로 전송하는 단계와,
    상기 요청을 수신하는 단계, 상기 타입을 식별하는 단계, 상기 식별된 타입을 컴파일링하는 단계 및 상기 최근에 컴파일링된 타입을 저장하는 단계를 반복하는 단계를 더 포함하는
    컴퓨터 구현 방법.
  12. 제10항에 있어서,
    상기 컴파일링 캐시의 메모리 사용이 임계값을 충족시키는지를 간헐적으로 판정하고 충족시킬 경우에 상기 컴파일링 캐시의 적어도 일부를 릴리스하는 단계를 더 포함하는
    컴퓨터 구현 방법.
  13. 제10항에 있어서,
    상기 컴파일링 요청을 수신하는 단계, 상기 타입을 식별하는 단계 및 상기 컴파일링하는 단계는 컴파일링 에이전트에 의해 수행되며, 상기 컴퓨터 구현 방법은,
    상기 개발 환경의 임의의 인스턴스가 실행되고 있는지를 간헐적으로 판정하고, 실행되고 있지 않은 경우에 상기 컴파일링 에이전트를 셧다운하는 단계와,
    상기 컴파일링 에이전트가 임계 기간 동안 유휴 상태였는지를 간헐적으로 판정하고, 유휴 상태인 경우에 상기 컴파일링 에이전트를 셧다운하는 단계를 더 포함하는
    컴퓨터 구현 방법.
  14. 제10항에 있어서,
    상기 타입을 개발하는 상기 개발 환경에서의 개발 입력을 수신하는 단계와.
    상기 개발 입력에 기초하여 컴파일링 가능 타입의 모델을 생성 또는 맞춤화하는 단계를 더 포함하는
    컴퓨터 구현 방법.
  15. 컴퓨터에 의해 실행될 때 상기 컴퓨터로 하여금 방법을 수행하게 하는 컴퓨터 실행 가능 명령어를 저장하는 컴퓨터 판독 가능 저장 매체로서,
    상기 방법은,
    컴퓨터 시스템 내에 모델링된 타입을 컴파일링하기 위한 요청을 수신하는 단계와,
    개발 환경에서 행해진 상기 컴퓨터 시스템에 대한 변경에 기초하여 그리고 이미 컴파일링되어 컴파일링 캐시에 저장된 타입에 기초하여, 컴파일링할 상기 타입을 컴퓨터 시스템 내의 타입의 서브세트로서 식별하는 단계와,
    상기 식별된 타입을 컴파일링하여 최근에 컴파일링된 타입을 획득하는 단계와,
    상기 최근에 컴파일링된 타입을 상기 컴파일링 캐시에 저장하는 단계와,
    상기 최근에 컴파일링된 타입을 실행될 개발 환경으로 전송하는 단계와,
    상기 요청을 수신하는 단계, 상기 타입을 식별하는 단계, 상기 식별된 타입을 컴파일링하는 단계 및 상기 최근에 컴파일링된 타입을 저장하는 단계를 반복하는 단계를 포함하는
    컴퓨터 판독 가능 저장 매체.
KR1020167009790A 2013-10-18 2014-10-14 상호작용 개발 환경으로부터의 소프트웨어 아티팩트의 점진적 컴파일링 기법 KR102193404B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/058,082 2013-10-18
US14/058,082 US9600256B2 (en) 2013-10-18 2013-10-18 Incrementally compiling software artifacts from an interactive development environment
PCT/US2014/060319 WO2015057592A1 (en) 2013-10-18 2014-10-14 Incrementally compiling software artifacts from an interactive development environment

Publications (2)

Publication Number Publication Date
KR20160074486A true KR20160074486A (ko) 2016-06-28
KR102193404B1 KR102193404B1 (ko) 2020-12-21

Family

ID=51866320

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167009790A KR102193404B1 (ko) 2013-10-18 2014-10-14 상호작용 개발 환경으로부터의 소프트웨어 아티팩트의 점진적 컴파일링 기법

Country Status (7)

Country Link
US (1) US9600256B2 (ko)
EP (1) EP3058460B1 (ko)
JP (1) JP6529505B2 (ko)
KR (1) KR102193404B1 (ko)
CN (1) CN105723337B (ko)
CA (1) CA2924871A1 (ko)
WO (1) WO2015057592A1 (ko)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9442707B2 (en) 2014-06-25 2016-09-13 Microsoft Technology Licensing, Llc Incremental whole program compilation of code
US10554709B2 (en) * 2014-07-08 2020-02-04 Microsoft Technology Licensing, Llc Stream processing utilizing virtual processing agents
CN104915214B (zh) * 2015-06-25 2018-09-07 走遍世界(北京)信息技术有限公司 系统的发布方法及装置
US10242119B1 (en) * 2015-09-28 2019-03-26 Amazon Technologies, Inc. Systems and methods for displaying web content
US10311217B2 (en) * 2016-12-09 2019-06-04 Microsoft Technology Licensing, Llc Application piracy prevention with secure enclave protection of automatically modularized functions
US10216615B2 (en) * 2017-06-30 2019-02-26 Sap Se Debuggable instance code in a cloud-based instance platform environment
CN109933326B (zh) * 2017-12-15 2023-03-17 北京奇虎科技有限公司 改写代码的编译方法、装置及相应终端
JP6890557B2 (ja) 2018-01-17 2021-06-18 株式会社日立製作所 分析モデル作成システム、プログラミング装置および分析モデル作成方法
CN109358841B (zh) * 2018-08-15 2024-04-30 中国平安人寿保险股份有限公司 网页应用开发编译方法、装置及存储设备、计算机设备
US11115279B2 (en) 2018-12-07 2021-09-07 Hewlett Packard Enterprise Development Lp Client server model for multiple document editor
US11182145B2 (en) * 2019-03-15 2021-11-23 International Business Machines Corporation Optimizing updates to distributed data processing applications
CN112181422A (zh) * 2020-09-02 2021-01-05 苏州浪潮智能科技有限公司 一种Hadoop编译方法、装置及计算机可读存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050268292A1 (en) * 2004-05-28 2005-12-01 Microsoft Corporation Non-compile pages
KR20060118315A (ko) * 2003-10-23 2006-11-23 마이크로소프트 코포레이션 정적 및 동적 리스트의 사용을 포함하는 가상 폴더 및 항목분배 시스템 및 방법
US20070294480A1 (en) * 2006-06-15 2007-12-20 Martin Moser Cache With Time-Based Purging and Computation of Purged Items

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6519767B1 (en) 1995-06-07 2003-02-11 Microsoft Corporation Compiler and method for automatically building version compatible object applications
US5854932A (en) 1995-08-17 1998-12-29 Microsoft Corporation Compiler and method for avoiding unnecessary recompilation
US6463582B1 (en) * 1998-10-21 2002-10-08 Fujitsu Limited Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method
JP2002082811A (ja) * 2000-06-28 2002-03-22 Hitachi Ltd コンパイル方法および記録媒体
GB2373069B (en) * 2001-03-05 2005-03-23 Ibm Method, apparatus and computer program product for integrating heterogeneous systems
US7086041B2 (en) * 2003-06-27 2006-08-01 Microsoft Corporation Extensible type system for representing and checking consistency of program components during the process of compilation
US7665075B1 (en) * 2004-03-17 2010-02-16 Sun Microsystems, Inc. Methods for sharing of dynamically compiled code across class loaders by making the compiled code loader reentrant
US7493604B2 (en) * 2004-10-21 2009-02-17 Microsoft Corporation Conditional compilation of intermediate language code based on current environment
US8266605B2 (en) * 2006-02-22 2012-09-11 Wind River Systems, Inc. Method and system for optimizing performance based on cache analysis
JP2007233472A (ja) * 2006-02-27 2007-09-13 Canon Inc 情報処理装置、情報処理装置の制御方法および制御プログラム
US8108844B2 (en) * 2006-06-20 2012-01-31 Google Inc. Systems and methods for dynamically choosing a processing element for a compute kernel
US7814486B2 (en) * 2006-06-20 2010-10-12 Google Inc. Multi-thread runtime system
US8375368B2 (en) * 2006-06-20 2013-02-12 Google Inc. Systems and methods for profiling an application running on a parallel-processing computer system
US8381202B2 (en) * 2006-06-20 2013-02-19 Google Inc. Runtime system for executing an application in a parallel-processing computer system
US8443348B2 (en) * 2006-06-20 2013-05-14 Google Inc. Application program interface of a parallel-processing computer system that supports multiple programming languages
US8146066B2 (en) * 2006-06-20 2012-03-27 Google Inc. Systems and methods for caching compute kernels for an application running on a parallel-processing computer system
US7949998B2 (en) * 2007-04-20 2011-05-24 Microsoft Corporation Programming framework for closed systems
US8479178B2 (en) * 2008-06-27 2013-07-02 Microsoft Corporation Compiler in a managed application context
US8667483B2 (en) * 2009-03-25 2014-03-04 Microsoft Corporation Device dependent on-demand compiling and deployment of mobile applications
US8943482B2 (en) * 2009-05-15 2015-01-27 International Business Machines Corporation Incrementally constructing executable code for component-based applications
US8677329B2 (en) 2009-06-03 2014-03-18 Apple Inc. Methods and apparatuses for a compiler server
US8924922B2 (en) 2010-06-14 2014-12-30 Microsoft Corporation Pre-compiling hosted managed code
US8495355B2 (en) * 2011-02-28 2013-07-23 Microsoft Corporation Operating system experience states
US9043765B2 (en) * 2011-11-09 2015-05-26 Microsoft Technology Licensing, Llc Simultaneously targeting multiple homogeneous and heterogeneous runtime environments

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20060118315A (ko) * 2003-10-23 2006-11-23 마이크로소프트 코포레이션 정적 및 동적 리스트의 사용을 포함하는 가상 폴더 및 항목분배 시스템 및 방법
US20050268292A1 (en) * 2004-05-28 2005-12-01 Microsoft Corporation Non-compile pages
US20070294480A1 (en) * 2006-06-15 2007-12-20 Martin Moser Cache With Time-Based Purging and Computation of Purged Items

Also Published As

Publication number Publication date
CN105723337A (zh) 2016-06-29
JP6529505B2 (ja) 2019-06-12
EP3058460B1 (en) 2019-12-18
WO2015057592A1 (en) 2015-04-23
US20150113513A1 (en) 2015-04-23
US9600256B2 (en) 2017-03-21
EP3058460A1 (en) 2016-08-24
JP2016537755A (ja) 2016-12-01
KR102193404B1 (ko) 2020-12-21
CA2924871A1 (en) 2015-04-23
CN105723337B (zh) 2019-04-30

Similar Documents

Publication Publication Date Title
KR102193404B1 (ko) 상호작용 개발 환경으로부터의 소프트웨어 아티팩트의 점진적 컴파일링 기법
US10379818B2 (en) Multi-tenant, tenant-specific applications
US9690689B2 (en) Test case generation in a development environment
US10152308B2 (en) User interface display testing system
KR20170016362A (ko) 컴파일 동안 표시 메타데이터를 브라우저 렌더링 가능 포맷으로 변환하는 기법
KR102309211B1 (ko) 개발 시스템에서의 시맨틱 콘텐츠 액세스 기법
US9158505B2 (en) Specifying compiled language code in line with markup language code
US20150113499A1 (en) Runtime support for modeled customizations
US20150113498A1 (en) Modeling customizations to a computer system without modifying base elements
US9811333B2 (en) Using a version-specific resource catalog for resource management
US20150121343A1 (en) Test impact analysis using cross reference data and metadata
US10705802B2 (en) Extensible and queryable strong types
US20160274871A1 (en) Isolating components using method detouring

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant