KR101944570B1 - 변형 컨텍스트-인식 데이터 소스 관리 - Google Patents

변형 컨텍스트-인식 데이터 소스 관리 Download PDF

Info

Publication number
KR101944570B1
KR101944570B1 KR1020147006151A KR20147006151A KR101944570B1 KR 101944570 B1 KR101944570 B1 KR 101944570B1 KR 1020147006151 A KR1020147006151 A KR 1020147006151A KR 20147006151 A KR20147006151 A KR 20147006151A KR 101944570 B1 KR101944570 B1 KR 101944570B1
Authority
KR
South Korea
Prior art keywords
source
data
data source
code
execution
Prior art date
Application number
KR1020147006151A
Other languages
English (en)
Other versions
KR20140060299A (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 KR20140060299A publication Critical patent/KR20140060299A/ko
Application granted granted Critical
Publication of KR101944570B1 publication Critical patent/KR101944570B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files

Landscapes

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

Abstract

로컬, 클러스터 및 클라우드 실행 사이에서의 포팅은 복수의 데이터 소스에 대해 동일한 소스 코드를 이용함으로써 도움을 받을 수 있다. 소스 코드 내에서 인용된 데잉터 소스 식별자는 서로 다른 실행 타겟에서 데이터 소스로 맵핑된다. 연속적인 타겟들에 맞춰진 실행가능한 코드는 개발자의 소스 코드를 변경하지 않고 레졸루션 API를 이용하여 생성된다. 편집가능한 데이터 소스 맵핑이 프로젝트마다 이루어지며, 파일 또는 프로젝트 특성에서 보관되고, 실행가능한 코드와의 분산가능한 소프트웨어 패키지 내에 배치된다. 자신의 소스 코드 내의 실행 타겟을 결정하고 소스 코드 내의 서로 다른 실행 위치를 명백하게 다루어야 하는 개발자의 부담이 감소된다. 소스 코드는 절대 경로 데이터 소스 식별자 또는 실행 위치를 검출하기 위한 코드가 면제될 수 있다. 폴더, 파일, 또는 클라우드 컨테이너를 생성하기 위해 소스-투-소스 번역이 호출을 주입한다. 데이터 소스 레졸루션은 데이터 소스 식별자에서 루팅된 상대 경로에 기초할 수 있다.

Description

변형 컨텍스트-인식 데이터 소스 관리{TRANSFORMATIONAL CONTEXT-AWARE DATA SOURCE MANAGEMENT}
단일 머신 상에서 실행하도록 맞춤화된 컴퓨터 프로그램은 때때로 추가적인 프로세싱 능력 및/또는 추가 메모리의 이득을 취하기 위해서 복수의 머신 상에서 실행하도록 개발자에 의해 수정될 수 있다. 예를 들어, 개발자는 원래 단일 데스크톱 컴퓨터상에서 실행하도록 작성된 프로그램을 취해서 그 프로그램이 컴퓨팅 클러스터 또는 컴퓨팅 클라우드와 같은 컴퓨터들의 그룹상에서 대신 실행되도록 구성하기를 원할 수 있다. 보다 일반적으로, 개발자는 서로 다른 데이터 소스들을 프로세싱하기 위해 특정한 프로세싱 로직을 적용하길 원할 수 있으며 각 데이터 소스를 로직의 파라미터로서 명확하게 명시하길 원치 않을 수도 있다.
컴퓨팅 클러스터는 빠른 로컬 영역 네트워크 또는 그 외의 상대적으로 빠른 통신 메커니즘을 통해 함께 링크된 컴퓨터들의 그룹이다. 클러스터 내의 컴퓨터들은 클러스터 밖에서 보았을 때 하나의 강력한 컴퓨터와 같이 행동하도록 서로 조화를 이룬다.
컴퓨팅 클라우드는 구성가능한 컴퓨팅 리소스(예로서, 서버, 스토리지, 애플리케이션 및 소프트웨어 서비스)의 공유 네트워킹 풀이다. 클라우드의 리소스는 사용자가 신속하게 이용가능할 수 있으며, 사용자에 의한 컴퓨터 수요가 늘어나거나 줄어들 때 쉽게 배포될 수 있다. 애플리케이션은 로컬로 설치된 애플리케이션의 클라이언트 카피가 필요하지 않도록 클라우드 서버에 의해 브라우저에 제공될 수 있다.
클러스터 및 클라우드에 대한 다양한 정의가 사용되어왔다. 현재의 논의를 위해서, 클러스터는 천 개보다 적은 프로세싱 코어를 포함하고/하거나 단일 빌딩 내에 존재한다. 이와 대조적으로 컴퓨팅 클라우드는 천 개 이상의 프로세싱 코어를 포함하고/하거나 둘 이상의 빌딩 내에 존재한다.
로컬 실행 컨텍스트로부터 클러스터 또는 클라우드 실행으로 프로그램을 포팅(porting)하는 것은 지루하고 오류 발생이 쉬운 소스 코드 변경을 포함할 수 있으며, 보다 구체적으로 프로그램 내에서 사용되는 데이터 소스에 대한 참조를 수정하기 위한 변경을 포함할 수 있다. 서로 매우 다른 크기의 데이터세트에 대해 프로그램을 실행하도록 하는 것은 개발자에게 있어서 매우 도전적인 일일 수 있다. 본 명세서에 기술된 일부 실시예는 복수의 다른 컴퓨터 데이터 소스를 갖는 단일 소스 코드 알고리즘을 자동으로 관리하기 위한 방식과 같이, 광범위한 데이터세트로의 액세스를 제공하는 방식으로 프로그램 이식성(portability)을 증가시키는 방법을 제공한다.
예를 들어, 일부 시나리오에서 데이터 소스 맵핑이 존재하여, 특정한 데이터 소스 식별자가 각각의 실행 타겟에서 예를 들어 클러스터 상의 수 테라바이트 및 클라우드 내의 수십 또는 수백 테라바이트에 비해 로컬 머신에서의 수백 기가바이트인 실질적으로 서로 다른 크기의 복수의 데이터 소스로 맵핑된다. 실시예는 데이터 소스 식별자를 데이터 소스로서 인용하는 소스 코드를 수신한다. 제 1 실행 타겟을 식별한 후에, 실시예는 소스 코드로부터 제 1 실행 타겟으로 맞춤화된 제 1 실행가능 코드를 자동으로 생성한다. 즉, 제 1 실행 타겟이 실행되면, 실행가능물(executable)이 데이터 소스 식별자에 의해 식별되는 데이터 소스와 같은 제 1 실행 타겟의 맵핑된 데이터 소스와 동작할 것이다. 제 1 실행 타겟과 상이한 데이터 소스를 갖는 제 2 실행 타겟이 식별된 후에, 실시예는 동일한 소스 코드로부터 제 2 실행 타겟에 맞춤화된 제 2 실행가능 코드를 자동으로 생성한다. 즉, 제 2 실행 타겟이 실행되면, 제 2 실행가능물은 제 1 실행 타겟의 데이터 소스를 이용하는 대신 식별된 데이터 소스와 같은 제 2 실행 타겟의 맵핑된 데이터 소스와 동작할 것이다. 기술된 바와 같이, 이러한 포트는 개발자가 소스 코드를 편집할 필요 없이 획득된다.
일부 실시예에서, 데이터 소스 맵핑은 문자 구성 파일 내에 유지되며, 일부 경우에는 비문자 프로젝트 특성, 프로젝트 헤더, 또는 다른 프로젝트-특정 구조로부터 판독된다. 일부 실시예에서, 데이터 소스 맵핑은 분산가능한 소프트웨어 패키지 내에 배치되며, 그에 따라 어떤 실행 위치(들)가 현재 패키지 내의 실행가능한 코드로 지원되는지와 무관하게 이식가능성을 높인다.
실시예는 개발자가 소스 코드 내의 실행 타겟을 결정하고 소스 코드 내의 서로 다른 실행 위치를 명확하게 다루어야 하는 부담을 감소시키거나 제거할 수 있다. 일부 실시예에서, 예를 들어 소스 코드는 절대 경로 데이터 소스 식별자가 면제된다. 실시예는 개발자가 하나의 머신 상의 로컬 데이터의 더 작은 서브셋을 이용하여 신속하게 소스 코드 반복을 통해 작업하고, 클라우드 또는 클러스터 상의 더 큰 데이터에 대해 선택된 프로그램 반복을 테스트하는 것을 돕기 위한 민첩성을 제공할 수 있다.
일부 실시예는 코드를 포팅하기 위한 자동화 소스-투-소스 번역 메커니즘(source-to-source translation mechanism)을 이용한다. 데이터 소스를 포팅하는 것은 단지 물리적 저장 위치 식별자 스트링의 치환보다 더 많은 것을 포함할 수 있다. 예를 들어, 일부 실시예에서, 제 1 실행가능물을 발생시키는 동일한 소스 코드로부터 제 2 실행가능 코드를 자동으로 생성하는 것은 폴더 생성 호출, 클라우드 컨테이너 생성 호출, 또는 파일 생성 호출과 같이 소스의 개발자 버전 내에 존재하지 않은 호출을 주입(inject)하는 소스-투-소스 번역을 포함한다. 다른 맵핑은 예를 들어 로컬, 엔터프라이즈, 클라우드 서버, 또는 개발 서버 및 생산 서버와 같은 서로 다른 맵핑 데이터베이스 서버와 같이 단지 파일 기반의 스토리지가 아니고 데이터베이스 접속을 포함할 수 있다. 파일 시스템(예를 들어, Windows® NTFS™ 시스템) 및 클라우드 스토리지(예를 들어, Windows® Azure™ 스토리지 또는 다른 클라우드 스토리지)와 같은 스토리지 시스템은 서로 다른 저장 구조를 가질 수 있으며, 일부 실시예는 이러한 구조들 중 맵핑을 제공한다(Microsoft Corporation 사의 마크).
개발자의 관점에서, 일부 실시예는 특정한 데이터 소스 식별자가 각각의 실행 타겟에서 복수의 데이터 소스로 맵핑되는 데이터 소스 맵핑을 획득한다. 그 다음 실시예는 개발자에 의한 소스 코드에 대한 임의의 변화를 필요로 하지 않고, 데이터 소스 맵핑 및 소스 코드로부터 데이터 소스 레졸루션(resolution)을 자동으로 생성한다. 서로 다른 데이터 소스 레졸루션은 서로 다른 실행 타겟, 예를 들어 URI(Universal Resource Identifier)를 이용하는 특정한 클라우드 데이터 소스, 또는 특정한 클러스터 데이터 소스에 상응한다. 실행 타겟은 개발자에 의해 명시될 수 있거나, 또는 디폴트로서 명시될 수 있다. 일부 실시예에서, 데이터 소스 레졸루션은 데이터 소스 식별자에서 루팅된(rooted) 상대 경로에 기초할 수 있다. 일부 실시예는 개발자로부터의 데이터 소스 맵핑에 대한 수정을 수락할 것이다.
아키텍처 관점에서, 일부 실시예는 논리적 프로세서 및 논리적 프로세서와 동작가능한 통신을 하는 메모리를 포함한다. 데이터 소스 맵핑은 메모리 내에 존재하며, 각각의 서로 다른 실행 타겟에서 복수의 서로 다른 데이터 소스로 맵핑되는 특정한 데이터 소스 식별자를 구비한다. 데이터 소스 맵핑은 예를 들어 문자 구성 파일, 비문자 프로젝트 특성, 프로젝트-특정 구조, 및/또는 사용자-특정 구조 내에 존재하거나 지속될 수 있다. 소스 코드 또한 메모리 내에 존재하며, 데이터 소스 식별자는 소스 코드 내의 데이터 소스로서 인용된다. 메모리 내에 존재하는 실행가능한 코드 생성기는, 실행되었을 때 서로 다른 시간에 동일한 소스 코드로부터 복수의 서로 다른 실행가능한 코드를 자동으로 생성하는 명령을 포함하며, 이때 각각의 실행가능한 코드는 서로 다른 데이터 소스를 참조한다.
일부 실시예에서, 소스 코드는 실행 위치를 검출하기 위한 코드가 면제된다. 일부에서, 소스 코드는 절대 경로 데이터 소스 식별자가 면제된다. 일부 실시에는 실행가능한 코드 생성기에 의해 생성된 실행가능한 코드를 포함하며, 이때 실행가능한 코드는 예를 들어 폴더 생성 호출, 클라우드 컨테이너 생성 호출, 및/또는 파일 생성 호출과 같은 소스 코드 내에 존재하지 않는 주입된 코드를 포함한다.
일부 실시예에서, 실행가능한 코드 생성기는 레졸루션 API를 포함한다. 레졸루션 API는, 실행되었을 때 프로세서에 의해 상대 경로 및 실행 타겟을 물리적 경로를 포함하는 데이터 소스 레졸루션으로 레졸브하는 명령을 포함한다. 일부에서, 실행가능한 코드 생성기는 소스-투-소스 번역기를 포함한다. 서로 다른 실시예들은 하나 이상의 전반적인 접근법을 취할 수 있다. 일 접근법에서, 로컬 머신 상에서 소스 코드가 명시된 실행 타겟에 대한 중간 코드(IC) 또는 실행가능 코드(EC)로 번역된다. 그 다음 IC 또는 EC가 전개되어 실행 타겟 상에서 실행된다. 제 2 접근법에서, 소스 코드는 먼저 실행 타겟에 대해 전개된다. 해당 실행 타겟에 대해 설계된 생성기는 해당 코드를 즉각 번역할 것이다. 제 3 접근법에서, 소스 코드는 데이터가 코드에 대해 로컬인 것처럼 번역된다. 데이터가 원거리 위치에 있는 환경에 대해 코드가 전개될 때, 코드가 로컬 데이터에 액세스할 수 있도록 선행작업(pre-task)이 데이터를 먼저 다운로드할 것이다.
주어진 예시는 단지 설명을 위한 것이다. 본 요약부는 청구된 특허청구범위의 중요 특성 또는 기본 특성을 식별하기 위한 것이 아니며, 청구된 특허청구범위의 범주를 한정하도록 사용하기 위한 것 또한 아니다. 오히려, 본 요약부는 아래의 상세한 설명에서 추가로 기술되는 일부 개념들을 단순화된 형식으로 소개하고자 제공되었다. 본 발명은 특허청구범위로 정의되며, 본 요약부가 특허청구범위와 충돌하는 경우, 특허청구범위가 우위에 있는 것으로 해석되어야 한다.
도 1은 적어도 하나의 프로세서, 적어도 하나의 메모리, 소스 코드 및 일반적으로 복수의 네트워크 노드 상에 존재하는 운영 환경 내의 다른 아이템을 구비하는 컴퓨터 시스템 및 환경 설정된 저장 매체 실시예를 도시한 블록도;
도 2는 예시적인 아키텍처 내의 변형 컨텍스트-인식(transformational context-aware) 데이터 소스 관리를 도시한 블록도;
도 3은 일부 프로세스의 단계들 및 환경 설정된 저장 매체 실시예를 도시한 순서도.
보다 구체적인 설명이 첨부된 도면을 참조로 하여 주어질 것이다. 도면들은 오직 선택된 측면들을 설명하기 위한 것이며, 따라서 범위 또는 범주를 완전히 결정하지 않는다.
개요
데이터의 폭발적 증가에 직면한 일부 분야들에서, 클러스터 또는 클라우드 내의 분산 프로세싱과 같이 크고 다양한 데이터 세트들의 보다 빠르고 강력한 프로세싱을 활용하는 것이 바람직해졌다. 종래의 데스크톱 및 다른 단일 노드 컴퓨터는 큰 볼륨의 데이터를 다루기 위한 프로세싱 파워 및 용량이 상대적으로 한정되며, 따라서 더 많은 개발자 및 엔지니어가 서로 다른 소스들로부터의 더욱 큰 데이터 세트를 이용하여 자신들의 데스크톱 애플리케이션을 클러스터 또는 클라우드 상에서 실행하길 원한다. 예를 들어, 개발자는 데이터의 작은 서브셋을 이용해 로컬 데스크톱 상의 알고리즘을 개발하여, 서브셋과 동일한 포맷을 갖는 데이터의 풀 세트를 포함하는 클러스터 또는 클라우드에 대해 프로그램 내의 해당 알고리즘을 실행하길 원할 수 있다.
그에 따른 하나의 도전은 서로 다른 실행 환경 사이에서 트랜지션(transition) 방법이다. 엔지니어는 각각의 서로 다른 실행 환경에 대해 서로 다른 데이터 소스를 이용하길 원할 수 있으며, 이는 각각의 배치 및 실행 이전에 다수의 데이터 참조를 변경하는 것을 의미할 수 있다. 만약 원하는 데이터가 서로 다른 실행 환경에 대한 서로 다른 물리적 스토리지 내에 저장되었다면, 서로 다른 데이터 제공자가 종종 서로 다른 액세스 방법을 사용하기 때문에, 엔지니어는 소스 코드를 변경해야 할 수 있다. 그러나 버전들의 확산 및 빈번한 변경은 코드 유지를 어렵게 만들고, 클러스터 또는 클라우드 적응에 대한 장벽을 높일 수 있다.
다행히도, 본 명세서에 기술된 일부 실시예는 서로 다른 실행 컨텍스트에 대한 복수의 데이터 소스와 단일 소스 코드를 연계하기 위한 도구 및 기술들을 제공한다. 일부 실시예에서, 컨텍스트-인식 데이터 소스/데이터 제공자 추출 메커니즘은, 사용자가 로컬 파일 시스템, 파일 공유, 클라우드 스토리지, FTP 어드레스, 특정 데이터베이스, 특정 데이터 스트림 등과 같은 물리적 데이터 소스에 대한 명확한 참조를 포함하는 것을 피할 수 있게 한다. 프로젝트는 실행 위치(예컨대, 로컬, 클러스터, 클라우드)에 따라서 특정 데이터 소스에 대한 가상 참조를 자동으로 리다이렉트(redirect)할 수 있다. 유사하게, 사용자는 데이터 액세스를 위해 데이터 제공자를 가상화할 수 있다. 프로젝트는 원하는 데이터 스토리지에 의존하여 실행가능한 코드를 자동으로 재단할 수 있다.
일부 실시예는 물리적 데이터 소스 및 그들의 계층적 구조에 대한 가상화를 제공한다. 일부는 서로 다른 데이터 액세스 방법의 가상화를 제공한다. 일부는 각 실행 위치에 대한 물리적 데이터 소스와 가상 참조 사이를 맵핑한다. 일부는 실행 위치에 따라서 데이터 참조를 자동으로 재다이렉팅하고 데이터 액세스 방법을 업데이트한다.
일부 상황에서, 개발자가 마주하는 가장 큰 도전은 단일 머신의 저장 용량을 훨씬 넘는 거대한 데이터세트에 대해 단일 머신 상에서 개발된 프로그램을 어떻게 실행시킬 것인지가 된다. 본 명세서에 기술된 일부 실시예는 서로 다른 크기의 데이터세트를 갖는 컴퓨터 프로그램을 이용하여 개발자가 알고리즘을 탐색하는 것을 도울 수 있으며, 예를 들어, 단일 머신 상의 작은 서브셋에 대해 먼저 프로그램을 실행하고, 그 다음 동일한 개발 소스 코드를 이용하는 매끄러운 방식으로 전체 데이터세트로 이동한다. 그 결과, 개발자가 실행 위치를 검출하기 위해 코드를 기록하는 것을 피할 수 있고, 데이터에 액세스하기 위해서 상대 경로를 사용할 수 있기 때문에, 더 짧고 더 깨끗한 코드가 가능해진다. 복수의 실행 위치가 사용된다고 할지라도 개발자에 의해 오직 한 카피의 소스 코드만이 추적되기 때문에, 소스 코드 유지가 더 쉬울 수 있다. 일부 실시예에서, 물리적 소스는 데이터 소스 맵핑시에 단일 장소에서 식별/업데이트된다. 실행 위치를 전환하는 각 시간마다 데이터 소스에 대한 변경을 피함으로써, 실행 위치들 사이에서의 보다 부드러운 트랜지션가 이루어질 수 있다.
본 명세서에 기술된 일부 실시예는 더 넓은 맥락으로 보여질 수 있다. 예를 들어, 소스 코드, 실행가능한 코드, 실행 타겟, 데이터 소스 및 맵핑과 같은 컨셉은 특정 실시예와 관련될 수 있다. 그러나, 넓은 맥락의 이용가능성이 추상적인 아이디어에 대해 본 명세서에서 독점권이 추구된다는 것을 의미하는 것은 아니다. 오히려, 본 발명은 특정 실시예를 적절하게 제공하는 것에 초점이 맞추어진다. 소스 코드, 실행가능한 코드, 실행 타겟, 데이터 소스, 및/또는 맵핑을 포함하는 다른 매체, 시스템 및 방법이 현재의 범주 밖에 있다. 따라서, 본 발명에 대한 적절한 이해 하에서 막연함 및 수반되는 입증 문제 또한 방지된다.
이제 도면에 도시된 것과 같이 예시적인 실시예에 대한 참조가 이루어질 것이며, 특정 언어가 그 내용을 설명하도록 본 명세서에서 사용될 것이다. 그러나 본 명세서에 설명된 특성들에 대한 변경 및 추가적인 수정, 본 명세서에 설명된 원리들의 추가적인 응용이 본 발명의 소지를 가지는 관련 업계(들)의 당업자에게 발생할 수 있을 것이며, 특허청구범위의 범주 내에 있는 것으로 간주되어야 한다.
용어들의 의미는 본 명세서에 명확하게 언급되었으며, 따라서 특허청구범위는 이들 해설에 집중하여 읽어야만 한다. 특정한 예시들이 주어졌지만, 당업자는 다른 예시들이 사용된 용어들의 의미 내에 포함될 수 있고 한 이상의 특허청구범위의 범주 내에 있을 수 있음을 이해할 것이다. 용어들은 본 명세서에서 일반적인 용도, 특정 산업에서의 용도, 또는 특정 사전 또는 사전들의 세트에서 갖는 것과 반드시 동일한 의미를 가질 필요가 없다. 참조번호는 용어의 폭을 나타내는 것을 돕기 위해 다양한 구절과 사용될 수 있다. 주어진 텍스트 조각으로부터 참조번호를 생략하는 것이 반드시 도면의 내용이 텍스트에 의해 논의되지 않았음을 의미하는 것은 아니다. 출원인은 자신의 사전 편집법에 대한 본인의 권리를 주장하고 실행한다. 용어들은 상세한 설명 및/또는 출원문서 내의 다른 곳에서 명백하게 또는 명백하지 않게 정의될 수 있다.
본 명세서에 사용된 "컴퓨터 시스템"이라는 용어는, 예를 들어 하나 이상의 서버, 마더보드, 프로세싱 노드, 개인 컴퓨터(휴대용 또는 휴대용이 아님), PDA, 셀폰 또는 모바일폰, 적어도 프로세서 및 메모리를 구비하는 다른 모바일 디바이스, 및/또는 명령에 의해 적어도 부분적으로 제어되는 하나 이상의 프로세서를 제공하는 다른 디바이스(들)를 포함할 수 있다. 명령은 펌웨어 또는 메모리 및/또는 전용화된 회로 내의 다른 소프트웨어의 형태일 수 있다. 특히, 다수의 실시예가 워크스테이션 또는 랩탑 컴퓨터 상에서 실행할 수 있지만, 다른 실시예는 다른 컴퓨팅 디바이스 상에서 실행될 수도 있으며, 하나 이상의 이러한 임의의 디바이스는 주어진 실시예의 일부일 수 있다.
"멀티스레드(multithreaded)" 컴퓨터 시스템은 복수의 실행 스레드를 지원하는 컴퓨터 시스템이다. "스레드"라는 용어는 스케줄링하거나 스케줄링될 수 있는 (그리고 어쩌면 동기화될 수 있는) 임의의 코드를 포함하는 것으로 이해되어야만 하며, 예를 들어 "태스크," "프로세스," 또는 "코루틴(coroutine)"과 같은 다른 명칭으로도 알려질 수 있다. 스레드는 동시에, 차례대로, 또는 병렬 실행(예로서, 멀티프로세싱)과 순차적 실행(예로서, 타임-슬라이스)의 결합으로도 실행될 수 있다. 멀티스레드 환경은 다양한 구성에서 설계되어져 왔다. 실행 스레드는 동시에 실행될 수 있으며, 또는 스레드는 병렬 실행으로 조직화되었지만 실제로는 순차적으로 실행될 수도 있다. 멀티스레딩은 예를 들어 멀티프로세싱 환경 내의 서로 다른 코어들에 대해 서로 다른 스레드를 실행함으로써, 단일 프로세서 코어 상의 서로 다른 스레드를 타임-슬라이드함으로써, 또는 타임 슬라이스된 멀티프로세서 스레딩의 일정 조합에 의해서 구현될 수 있다. 스레드 컨텍스트 스위치는 예를 들어 커널(kernel)의 스레드 스케줄러에 의해서, 사용자 공간 신호에 의해서, 또는 사용자 공간과 커널 동작의 조합에 의해서 개시될 수 있다. 예를 들어, 스레드는 공유 데이터에 대해 번갈아서 동작할 수 있거나, 또는 각 스레드가 자신의 고유의 데이터에 대해서 동작할 수도 있다.
"논리적 프로세서" 또는 "프로세서"는 동시의 멀티스레딩 구현 내에 있는 코어와 같은 단일의 독립적인 하드웨어 스레드-프로세싱 유닛이다. 다른 예시로서, 코어당 두 개의 스레드가 구동하는 하이퍼스레드 쿼드 코어 칩(hyperthreaded quad core chip)은 8개의 논리적 프로세서를 구비한다. 프로세서는 범용 프로세서일 수 있거나, 또는 그래픽 프로세싱, 신호 프로세싱, 플로팅-포인트(floating-point) 산술 프로세싱, 암호화, I/O 프로세싱 등과 같은 특정 용도를 위해 맞춤화될 수도 있다.
"멀티프로세서" 컴퓨터 시스템은 복수의 논리적 프로세서를 구비하는 컴퓨터 시스템이다. 멀티프로세서 환경은 다양한 구성을 발생시킨다. 주어진 구성에서, 모든 프로세서가 기능적으로 동일할 수 있는 반면, 다른 구성에서는 서로 다른 하드웨어 용량을 가지거나, 서로 다른 소프트웨어 할당을 가지거나, 또는 둘 모두로 인해 일부 프로세서가 다른 프로세서들과 상이할 수 있다. 구성에 따라서, 프로세서는 단일 버스 상에서 서로 밀접하게 연결될 수 있거나, 또는 느슨하게 연결될 수도 있다. 일부 구성에서, 프로세서는 중앙 메모리를 공유하고, 일부 경우에는 자신의 고유의 로컬 메모리를 구비하며, 일부 구성에서는 공유 및 로컬 메모리가 모두 존재한다.
"커널(kernel)"은 운영 시스템, 하이퍼바이저(hypervisor), 가상 머신, BIOS 코드 및 유사한 하드웨어 인터페이스 소프트웨어를 포함한다.
"실행가능한 코드(executable code)"는 프로그래밍 언어의 형태 외의 프로세서 명령, 데이터(상수, 변수 및 데이터 구조를 포함함), 또는 명령과 데이터 모두를 의미한다.
"소스 코드(source code)"는 선택적으로 수반되는 선언(declaration) 및/또는 데이터를 갖는 스테이트먼트(statement)를 의미하며, 이는 컴퓨터 프로그래밍 언어로 기록되고 자동으로 실행가능한 코드를 생성하는데에 사용되도록 설계된다.
"프로그램"은 애플리케이션, 커널, 드라이버, 인터럽트 핸들러(interrupt handler), 라이브러리 및 (개발자로도 지칭되는) 프로그래머에 의해 기록된 다른 코드를 포함하도록 본 명세서에서 광범위하게 사용되었다.
"자동으로"라는 용어는 자동화 없는 것에 대조되는, 자동화를 이용하는 것을 의미한다(예를 들어, 본 명세서에 논의된 특정 동작에 대해 소프트웨어에 의해 구성된 범용 컴퓨팅 하드웨어). 특히, "자동으로" 수행되는 단계들은 페이퍼 상에서 손에 의해 수행되는 것이 아니며 사람의 마음속에 있는 것으로, 이들은 머신으로 수행된다. 그러나, "자동으로"라는 용어가 반드시 "즉시"를 의미하는 것은 아니다.
본 명세서 전반에 걸쳐, "-들,"과 같은 선택적인 복수형의 이용은 해당 특징이 하나 이상 존재한다는 것을 의미한다. 예를 들어, "데이터 소스(들)"은 "하나 이상의 데이터 소스"를 의미하거나 또는 동일하게 "적어도 하나의 데이터 소스"를 의미한다.
본 명세서 전반에 걸쳐, 특별히 언급되지 않는 한 프로세스 내의 단계에 대한 임의의 참조는 해당 단계가 관심 파티에 의해서 직접 수행될 수 있고/있거나 관심 파티에 의해 매개(intervening) 메커니즘 및/또는 매개 엔티티를 통해 간접적으로 수행될 수 있으며, 여전히 단계의 범주 내에 있다고 간주한다. 즉, 관심 파티에 의한 단계의 직접 수행이 필수적인 것으로 명백하게 언급되지 않는 한 반드시 요구되지는 않는다. 예를 들어, 목적 또는 다른 대상과 관련하여 수락, 내재, 검출, 실행, 생성, 구비, 식별, 포함, 주입, 맵핑, 획득, 동작, 수행, 배치, 생성, 판독, 수신, 존재, 레졸브, 치환, 변환, 또는 번역(또는 수락하는, 수락된, 내재하는, 내재된, 검출하는, 검출된 등)과 같은 관심 파티에 의한 동작을 포함하는 단계는, 일부 다른 파티에 의한 포워드, 카피, 업로드, 다운로드, 인코딩, 디코딩, 압축, 압축해제, 암호화, 암호해독, 인증, 적용 등과 같은 매개 동작을 포함할 수 있으며, 이는 여전히 관심 파티에 의해 직접 수행된 것으로 이해된다.
데이터 또는 명령에 대한 참조가 이루어질 때마다, 이들 아이템이 컴퓨터 판독가능한 메모리를 구성하며, 그에 따라 예를 들어 페이퍼 상에 단순히 존재하는 것과 상반되는, 사람의 마음속에 있는, 또는 유선상의 일시적인 신호인 특정 아티클(article)로 변환한다는 것을 이해해야 한다. 컴퓨터 판독가능한 메모리 또는 매체는 달리 명백하게 언급되지 않는 한 비일시적인 것으로 간주된다.
운영 환경
도 1을 참조하면, 실시예를 위한 운영 환경(100)은 컴퓨터 시스템(102)을 포함할 수 있다. 컴퓨터 시스템(102)은 멀티프로세서 컴퓨터 시스템일 수 있거나, 그렇지 않을 수도 있다. 운영 환경은 주어진 컴퓨터 시스템 내에 클러스터화, 클라이언트-서버 네트워킹, 및/또는 피어 투 피어(peer-to-peer) 네트워킹될 수 있는 하나 이상의 머신을 포함할 수 있다. 개별적인 머신이 컴퓨터 시스템이며, 협력하는 머신들의 그룹 또한 컴퓨터 시스템이다. 주어진 컴퓨터 시스템(102)은 최종 사용자에 대해 구성될 수 있으며, 예로서 애플리케이션과 함께, 관리자용으로, 서버로서, 분산 프로세싱 노드로서, 및/또는 다른 방식들로 구성될 수 있다.
사용자(104)는 디스플레이, 키보드 및 다른 주변기기(106)를 이용함으로써 컴퓨터 시스템(102)과 상호작용할 수 있다. 시스템 관리자, 개발자, 엔지니어 및 최종 사용자는 사용자(104)의 각각 특정 유형이다. 한 명 이상의 사람 대신 작동하는 자동화된 에이전트 또한 사용자(104)일 수 있다. 스토리지 디바이스 및/또는 네트워킹 디바이스는 일부 실시예에서 주변 장치로 간주될 수 있다. 도 1에 도시되지 않은 다른 컴퓨터 시스템이 예를 들어 네트워크 인터페이스 장치를 통해 네트워크(108)로의 하나 이상의 접속을 이용하여 컴퓨터 시스템(102) 또는 다른 시스템 실시예와 상호작용할 수 있다.
컴퓨터 시스템(102)은 적어도 하나의 논리적 프로세서(110)를 포함한다. 다른 적절한 시스템과 같이, 컴퓨터 시스템(102)은 또한 하나 이상의 컴퓨터 판독가능한 비일시적 저장 매체(112)를 포함한다. 매체(112)는 서로 다른 물리적 유형들일 수 있다. 매체(112)는 (단지 신호를 전파하는 와이어와 같은 일시적 매체와 반대되는) 휘발성 메모리, 비휘발성 메모리, 고정(fixed in place) 매체, 제거가능한 매체, 자기 매체, 광학적 매체, 및/또는 그 외의 유형의 비일시적 매체일 수 있다. 특히, CD, DVD, 메모리 스틱, 또는 다른 제거가능한 비휘발성 메모리 매체와 같은 환경설정된 매체(114)는, 삽입되거나 또는 다른 방식으로 설치되었을 때 프로세서(110)에 의해 사용하기 위해 액세스할 수 있는 자신의 콘텐츠를 구성하는 컴퓨터 시스템의 기능적인 일부가 될 수 있다. 제거가능한 환경설정된 매체(114)는 컴퓨터 판독가능한 저장 매체(112)의 예시이다. 컴퓨터 판독가능한 저장 매체(112)의 일부 다른 예시는 빌트인 RAM, ROM, 하드 디스크 및 사용자(104)에 의해 쉽게 제거가능하지 않은 다른 저장 디바이스를 포함한다.
매체(114)는 프로세서(110)에 의해 실행가능한 명령(116)으로 구성되며; 이때 "실행가능한(executable)"이라는 용어는 본 명세서에서 예로서 머신 코드, 해석가능한 코드 및 가상 머신 상에서 실행하는 코드를 포함하도록 넓은 의미로 사용된다. 매체(114)는 또한 명령(116)의 실행에 의해서 생성되고, 수정되고, 참조되고, 및/또는 다른 방식으로 사용되는 데이터(118)로 구성된다. 명령(116) 및 데이터(118)는 자신이 존재하는 매체(114)를 구성하며; 메모리가 주어진 컴퓨터 시스템의 기능적 일부인 경우, 명령(116) 및 데이터(118)는 해당 컴퓨터 시스템 또한 구성한다. 일부 실시예에서, 데이터(118)의 일부분은 제품 특징, 재고, 물리적 측정, 설정, 이미지, 판독, 타겟, 볼륨 등과 같은 현실 세계 아이템들을 표현한다. 또한 이러한 데이터는 예로서 주입(injection), 번역, 레졸루션(resolution), 바인딩, 사용, 실행, 수정, 디스플레이, 생성, 로딩, 및/또는 다른 동작들에 의해, 본 명세서에 논의된 바와 같이 변형된다.
소스 코드(122) 및 실행가능한 코드(124)를 포함하는 코드 베이스(120); 컴파일러(128), 디버거(debugger)(130) 및 구성 파일(132)과 같은 개발 툴(126); 다른 소프트웨어, 로컬 데이터 소스(134)(데이터 소스는 일반적으로 참조번호(136)로 지정됨) 및 도면에 도시되고/되거나 텍스트로 언급된 다른 아이템들이 하나 이상의 매체(112) 내에 부분적으로 또는 전부가 존재할 수 있으며, 그에 따라 이러한 매체를 구성한다.
프로세서(들)(110) 및 메모리(112)에 추가로, 운영 환경은 예를 들어 디스플레이(138), 버스, 파워 서플라이 및 가속기와 같은 다른 하드웨어도 포함할 수 있다.
디바이스(102)는 자체의 프로세서(들), 메모리 및 소프트웨어뿐 아니라 자체의 각 데이터 소스(144, 146)를 각각 구비할 수 있는 하나 이상의 컴퓨팅 클러스터(140) 및/또는 하나 이상의 컴퓨팅 클라우드(142)와 네트워크(108) 상에서 통신할 수 있다. 일부 실시예에서, 클러스터 및 클라우드 상의 데이터 소스는 로컬 데이터세트보다 훨씬 더 큰 데이터세트를 위한 것이다. 실제로, 클러스터 또는 클라우드 데이터세트에 대한 저장 요구가 로컬 데이터 소스의 데이터 저장 부피의 용량을 훨씬 뛰어넘을 것이다.
주어진 운영 환경(100)은 통합 개발 환경(IDE; Integrated Development Environment)(148) 또는 개발자에게 소프트웨어 개발 프로젝트(150)를 위한 연계된 소프트웨어 개발 도구들의 세트를 제공하는 다른 소프트웨어를 포함할 수 있다. 특히, 일부 실시예에서의 일부 적절한 운영 환경은 프로그램 개발을 지원하도록 구성된 Microsoft® Visual Studio® 개발 환경(Microsoft Corporation 사의 마크)을 포함하거나 생성을 돕는다. 일부 적절한 운영 환경은 Java® 환경(Oracle America, Inc. 사의 마크)을 포함하고, 일부는 C++ 또는 C#("C-Sharp")과 같은 언어를 이용하는 환경을 포함하지만, 본 명세서의 내용은 매우 다양한 프로그래밍 언어, 프로그래밍 모델 및 프로그램뿐 아니라, 클러스터 컴퓨팅, 클라우드 컴퓨팅, 또는 둘 모두를 사용하는 소프트웨어 개발 자체 분야 밖의 시도에 대해서도 적용가능하다.
도 1에서 하나 이상의 아이템은 이들이 반드시 도시된 운영 환경의 일부는 아니며, 본 명세서에서 논의된 바와 같이 운영 환경 내의 아이템과 상호동작할 수 있음을 강조하기 위해서 윤곽의 형태로 도시되었다. 이것은 윤곽의 형태가 아닌 아이템들이 임의의 도면 또는 임의의 실시예에서 반드시 요구된다는 것을 의미하는 것은 아니다.
도 2는 일부 실시예에서 이용하기 적절한 아키텍처를 도시한다. 데이터 소스 맵핑(202)은 소스 코드(122) 내에서 사용되는 데이터 소스 식별자(204)를 로컬 데이터 소스(134), 클러스터 데이터 소스(144) 및/또는 클라우드 데이터 소스(146)와 같은 각각의 데이터 소스(136)로 맵핑하며, 이는 아래에서 추가로 기술된다. 실행가능한 코드 생성기(206)는 특정 데이터 소스와 관련하여 특정한 실행 타겟(208)(예로서, 로컬, 클러스터, 또는 클라우드)에 맞춤화되는 실행가능한 코드(124)를 생산하고 이에 액세스하기 위해 소스 코드(122) 및 데이터 소스 맵핑(202)을 이용한다. 서로 다른 데이터 실행 타겟은 서로 다른 양의 동일하게 포맷된 데이터와 같은 서로 다른 데이터세트 크기를 포함할 수 있다. 예를 들어, 데이터세트의 크기는 데이터세트 내의 데이터가 표현하는 시간의 기간에 의존할 수 있으며, 예컨대 로컬 디스크 상의 한 달 분량의 데이터는 수백 기가바이트일 수 있는 반면, 클라우드/클러스터 스토리지 상의 수년 분량의 데이터는 백 테라바이트 저장을 맡을 수 있다. 다른 예시로서, 데이터 소스 식별자에 맵핑된 데이터 소스들 중 하나는 10 기가바이트의 데이터보다 적은 데이터를 포함할 수 있는 반면, 동일한 데이터 소스 식별자에 맵핑된 다른 데이터 소스는 적어도 100 기가바이트의 데이터를 포함한다. 100 기가바이트, 또는 예를 들자면 2 테라바이트와 같은 다른 문턱값도 사용될 수 있다. 이러한 상황에서, 실시예는 개발자가 하나는 상대적으로 작고 다른 것은 상대적으로 큰 복수의 데이터세트에 대해 동일한 개발 소스 코드를 테스트하는 것을 용이하게 하도록 도울 수 있다.
실행가능한 코드 생성기는 편집(compilation) 및 링크를 달성하기 위한 친숙한 명령에 더하여, 맞춤화된 실행가능물의 생산을 촉진하기 위한 명령(210)을 포함한다. 예를 들어, 일부 실시예에서 생성기(206)는 데이터 소스 식별자(204)를 물리적 위치(레졸루션(214))로 레졸브하는 API(212)를 포함한다. 일부에서, 생성기(206)는 개발자의 소스 코드(122)에 호출(call), 선언(declaration), 및/또는 그외의 코드를 삽입하여 중간 소스(intermediate source)를 얻고, 이어서 이 중간 소스를 컴파일하여 실행-타겟에 맞춤화되는 실행가능한 코드(124)를 획득하는 소스-투-소스(source-to-source) 번역기(216)를 포함한다.
로컬, 클러스터 및 클라우드 타겟(208)이 본 명세서에서 예시로서 사용되었지만, 개발자(104)는 서로 다른 실행 타겟(208)의 사양(218)을 (예로서, 이름, 주소, 또는 다른 세부사항을 통해) 제공할 수 있다. 예를 들어, 복수의 클러스터(140)가 일부 실시예에서 명시될 수 있으며, 클라우드(142)는 일부 실시예에서 명시되지 않을 수 있다.
일부 실시예에서, 하나 이상의 데이터 소스 식별자(204)에 대한 데이터 소스 맵핑(202)은 (때때로 속성으로도 지칭되는) 프로젝트 특성(220)과 같은 프로젝트-특정 구조 내에 저장된다.
일부 실시예에서, 하나 이상의 데이터 소스 식별자(204)에 대한 데이터 소스 맵핑(202)은 특성(220)의 형태로 또는 구성 파일(132)과 같은 다른 형태로 실행가능한 코드(124)와 함께 소프트웨어 패키지(222) 내에 저장된다.
도 1 내지 3을 참조하면, 일부 실시예는 본 명세서에 기술된 바와 같이 복수의 실행 타겟 데이터 소스와 단일 소스 코드를 연계함으로써 개발 환경을 변환하도록, 보다 구체적으로는 소스 코드를 변환하기 위해서, 회로, 펌웨어, 및/또는 소프트웨어에 의해 구성된 논리적 프로세서(110) 및 메모리 매체(112)를 구비하는 컴퓨터 시스템(102)을 제공한다.
예를 들어, 일부 실시예는 논리적 프로세서(110), 논리적 프로세서와 동작가능한 통신을 하는 메모리(112) 및 메모리(112)를 구성하는 아이템들을 포함한다. 메모리(112) 내에 존재하는 (따라서 메모리를 구성하는) 데이터 소스 맵핑(202)은 각각의 서로 다른 실행 타겟(208)에서 복수의 서로 다른 데이터 소스(136)로 맵핑되는 적어도 하나의 데이터 소스 식별자(204)를 구비한다. 일부 실시예에서, 데이터 소스 맵핑은 메모리(112)에서 예를 들어 문자 구성 파일, 비문자 프로젝트 특성(220), 다른 프로젝트-특정 구조, 및/또는 사용자-특정 구조 내에 존재한다. 메모리(112) 내에 존재하는 소스 코드(122)는 데이터 소스(136)로서 데이터 소스 식별자(204)를 인용한다.
메모리(112) 내에 존재하는 실행가능한 코드 생성기(206)는, 실행되었을 때 동일한 개발자 소스 코드(122)로부터 서로 다른 시간에 복수의 서로 다른 실행가능한 코드(124)를 자동으로 생산하는 명령(210, 116)을 구비한다. 이러한 실행가능한 코드(124)의 각각은, 이들 각각이 다른 실행가능한 코드와 동일한 소스로부터 자동으로 생성되었을지라도, 서로 다른 데이터 소스를 참조한다.
따라서, 개발자는 개발자의 소스 코드(122) 내의 서로 다른 실행 타겟의 세부사항을 관리하는 부담을 막을 수 있다. 예를 들어, 개발자의 소스 코드(122)는 실행 위치를 검출하기 위한 코드가 면제될 수 있고, 절대 경로(absolute path)(346) 데이터 소스 식별자가 면제될 수 있다. 예를 들어 후속 편집을 위해 중간 소스(344)를 생성하기 위해, 및/또는 개발자의 소스(122)로부터 생산된 코드를 실행가능한 코드에 대한 패치로서, 특정 타겟(208)에 대한 실행가능물을 맞춤화하기 위해 필요한 코드가 생성기(206)에 의해 주입될 수 있다. 주입과 관련하여, 일부 실시예는 폴더 생성 호출, 클라우드 컨테이너 생성 호출, 파일 생성 호출과 같은 개발자 소스 코드 내에 존재하지 않는 호출들(318)을 포함하는 중간 소스 코드(344)를 이용한다.
일부 실시예에서, 실행가능한 코드 생성기(206)는 레졸루션 API(212)를 포함한다. 레졸루션 API(212)는, 프로세서에 의해 실행되면 상대 경로(relative path)(334) 및 실행 타겟(208)을 물리적 경로(346)를 포함하는 데이터 소스 레졸루션(214)으로 레졸브하는 명령(210)을 포함한다. 일부 실시예에서, 실행가능한 코드 생성기(206)는 중간 소스 코드(344)를 생성하는 소스-투-소스 번역기(216)를 포함한다.
일부 실시예에서, 사용자 I/O 디바이스(스크린, 키보드, 마우스, 태블릿, 마이크로폰, 스피커, 모션 센서 등)와 같은 주변기기(106)는 하나 이상의 프로세서(110) 및 메모리와 동작가능하게 통신하도록 존재할 것이다. 그러나, 실시예는 사용자(104)가 실시예와 직접 상호작용하지 않도록 시스템 내에 깊숙이 포함될 수도 있다. 소프트웨어 프로세스는 사용자(104)일 수 있다.
일부 실시예에서, 시스템은 네트워크에 의해 접속된 복수의 컴퓨터를 포함한다. 네트워킹 인터페이스 장치는, 예를 들어 컴퓨터 시스템 내에 존재하는 패킷-스위치 네트워크 인터페이스 카드, 무선 송수신기, 또는 전화 네트워크 인터페이스와 같은 구성요소를 이용하여 네트워크(108)로의 액세스를 제공할 수 있다. 그러나, 실시예는 직접 메모리 액세스, 제거가능한 비휘발성 매체, 또는 다른 정보 저장-검색 및/또는 전송 접근법을 통해 통신할 수 있거나, 컴퓨터 시스템 내의 실시예는 다른 컴퓨터 시스템과 통신하지 않고 동작할 수도 있다.
프로세스
도 3은 순서도(300) 내의 일부 프로세스 실시예를 도시한다. 도면들에 도시된 프로세스는 예를 들어 IDE(148) 내의 실행가능한 코드 생성기(206)에 의해, 스크립트의 제어 하에서, 또는 동시에 발생하는 사용자 입력을 거의 필요로 하지 않거나 전혀 필요로 하지 않고 일부 실시예에서 자동으로 수행될 수 있다. 프로세스는 또한 따로 표시되지 않는 한 일부분은 자동으로 일부분은 수동으로 수행될 수도 있다. 주어진 실시예에서, 프로세스의 도시된 단계들 중 0개 이상의 단계가 동작을 위해 아마도 서로 다른 파라미터 또는 데이터로 반복될 수 있다. 또한 실시예 내의 단계들은 도 3에 배치된 위에서 아래로의 순서와는 다른 순서로 수행될 수도 있다. 단계들은 직렬로 수행될 수 있거나, 부분적으로 겹쳐지는 방식으로 수행될 수 있거나, 또는 전부가 동시에 수행될 수도 있다. 프로세스 동안 수행되는 단계들을 표시하도록 순서도(300)가 가로지르는 순서는 프로세스의 성능마다 서로 달라질 수 있다. 순서도 횡단 순서는 또한 프로세스 실시예마다 서로 달라질 수도 있다. 단계들은 도시된 순서와 다르게 생략, 결합, 재명명(renamed), 재그룹화(regrouped) 등이 될 수 있으며, 수행된 프로세스는 동작가능하고 적어도 하나의 특허청구범위에 따른다.
본 명세서에 제공된 예시들은 기술의 측면들에 대한 설명을 돕기 위한 것이지만, 본 명세서에서 주어진 예시들이 가능한 모든 실시예를 기술하는 것은 아니다. 실시예들은 본 명세서에서 제공된 특정한 구현, 배치, 디스플레이, 특징, 접근법, 또는 시나리오로 제한되지 않는다. 주어진 실시예는 예를 들어 추가적인 또는 상이한 특징, 메커니즘, 및/또는 데이터 구조를 포함할 수 있으며, 본 명세서에 제공된 예시들과는 상이할 수 있다.
맵핑 획득 단계(302) 동안, 실시예는 데이터 소스 맵핑(202)을 획득한다. 단계(302)는 예를 들어 파일 또는 특성 세트로부터 맵핑(202)을 판독함으로써, 및/또는 다른 메커니즘을 통해서 달성될 수 있다.
소스 코드 수신 단계(304)에서, 실시예는 예를 들어 IDE(148) 편집기를 통해, 파일로부터 코드를 판독함으로써, 및/또는 다른 메커니즘을 통해 개발자 소스 코드(122)를 수신한다.
타겟 식별 단계(306)에서, 실시예는 적어도 하나의 실행 타겟(208)("실행 위치" 또는 "실행 콘텍스트"로도 지칭됨)을 식별한다. 단계(306)는 예를 들어 빌트인 디폴트를 이용함으로써, 및/또는 사용자(104)로부터 명세(218)를 수락(326)함으로써 달성될 수 있다.
실행가능한 코드 생성 단계(308)에서, 실시예는 개발자 소스 코드(122), 데이터 맵핑(들)(202) 및 타겟(208) 명세(들)(218)로부터 실행가능한 코드(124)를 자동으로 생성한다. 친숙한 편집, 링크 및 다른 실행가능한 코드 생성 메커니즘이 데이터 소스 식별기(204), 레졸루션(332), 레졸루션 API(212), 소스-투-소스 번역기(216), 중간 소스 코드(344), 및/또는 서로 다른 타겟에서 복수의 데이터 소스를 관리하는 것을 지원하는 동시에 개발자가 단일 소스 코드(122)를 사용할 수 있게 하는 본 명세서에서 기술된 다른 메커니즘과 함께 사용될 수 있다.
맵핑 획득 단계(302)의 일부일 수 있는 구성 파일 판독 단계(310)에서, 실시예는 파일 시스템, 네트워킹, 및/또는 다른 메커니즘을 이용하여 구성 파일(132)로부터 데이터 소스 맵핑을 판독한다. 보다 일반적으로, 단계(310)에서 실시예는 예를 들어 구성 파일, 프로젝트 특성(220), 또는 사용자-특정 설정 또는 환경 구조와 같은 구조(312)로부터의 데이터 소스 맵핑(202)을 판독한다.
번역 수행 단계(314)에서, 실시예는 선언, 호출(318), 및/또는 특정한 실행 위치로 코드를 맞춤화하는 다른 코드를 주입함으로써 개발자-제공 소스 코드(122)로부터 중간 소스 코드(344)를 생성하도록 소스-투-소스 번역을 자동으로 수행한다. 친숙한 컴퓨터 언어 문법 메커니즘이 본 명세서에 기술된 바와 같이 수행하도록 적용되는 친숙한 의미론적 분석과 함께 사용될 수 있다.
번역 수행 단계(314)의 일부로서 발생할 수 있는 코드 주입 단계(316)에서, 실시예는 데이터 소스의 타겟-특정 세부사항 및 그들의 액세스 메커니즘을 포함하는 중간 소스 코드(344)를 형성하도록 호출(318) 및/또는 다른 소스 코드를 개발자 소스 코드(122)에 자동으로 주입한다. 적절한 코드 변환이 본 명세서에 개시되었으며, 예시들이 제공되었다. 사용자는 일부 실시예에서 중간 소스 코드(344)의 세부사항에 대해, 심지어 그 존재에 대해서도 알 필요가 없다.
맵핑 배치 단계(320)에서, 실시예는 분산가능한 소프트웨어 패키지(222) 내에 데이터 소스 맵핑(202)을 배치한다(예로서, 기록, 연계, 추가). 맵핑(202)은 데이터 소스 맵핑(202)을 배치하도록 적응된 친숙한 기록 메커니즘을 이용하여 예로서 특성(220) 내에, 헤더 내에, 또는 구성이나 환경적으로 다양한 파일 내에 배치될 수 있다(320).
생성 단계(308)의 일부일 수 있는 레졸루션 생성 단계(322)에서, 실시예는 데이터 소스 맵핑(202) 및 개발자 소스 코드(122)로부터 데이터 소스 레졸루션을 자동으로 생성(322)한다. 단계(322)는 맵핑(202)의 데이터 소스 식별자(204)가 소스 코드(122) 내의 상대 경로(334)와 사용될 때 레졸브 단계(332)를 포함할 수 있다.
수정 수락 단계(324)에서, 실시예는 앞서 획득된(302) 데이터 소스 맵핑에 대한 수정을 편집기 또는 (예로서) IDE를 통해 사용자(104)로부터 수락한다. 예를 들어, 데이터 소스 식별기(204)는 추가, 제거, 또는 재명명될 수 있고; 타겟(208)은 추가 또는 제거될 수 있으며; 데이터 소스 물리적 위치는 변경될 수 있다. 단계(324)는 수정이 수락되기 전에 실존 검사(예로서, 물리적 위치 또는 타겟이 존재하는지 여부), 컴퓨터 언어 문법 검사(예로서, 데이터 소스 식별자의 URI 또는 절대 경로의 부재), 및/또는 다른 유효성 테스트를 포함할 수 있다.
타겟 명세 수락 단계(326)에서, 실시예는 예로서 앞서 명시된 타겟의 제거 또는 타겟 추가와 같은 타겟(들)(208)에 대한 적어도 하나의 변화의 명세를 편집기 또는 (예로서) IDE를 통해서 사용자(104)로부터 수락한다.
맵핑 단계(328)에서, 실시예(또는 실시예의 측면들을 다루는 사용자)는 예를 들어 데이터 소스 맵핑(202)을 생성 또는 수정함으로써 식별자(204)를 실행 타겟 데이터 소스(들)(136)로 맵핑한다.
인용 단계(330)에서, 실시예(또는 실시예의 측면들을 다루는 사용자)는 개발자 소스 코드(122) 내에 데이터 소스 식별자(204)를 인용(예로서, 판독 또는 기록)한다. 데이터 소스 식별자(204)는 (a) 데이터 소스(136)를 식별하고 (b) 특정한 타겟의 데이터 소스로 특정되지 않은 식별자이다. 실제로, 데이터 소스 식별자(204)는 실행 중에 있는 그대로 사용될 수 없으며 반드시 맵핑되어야 한다. 데이터 소스의 물리적 위치와 같은 세부사항이 데이터 소스 식별자로부터 소실되기 때문에 맵핑되지 않은 데이터 소스 식별자(204)를 사용하도록 시도하는 것은 컴파일-시간 및/또는 런타임 오류로 이어질 것이다.
레졸루션 생성 단계(322)의 일부일 수 있는 상대 경로 레졸브 단계(332)에서, 상대 경로(334)를 포함하는 데이터 소스 식별자는 데이터 소스 레졸루션(214)으로 레졸브된다.
실행가능한 코드 생성 단계(308)의 일부, 소스 코드 수신 단계(304)의 일부, 및/또는 단일 수신된(304) 소스 코드(122)로부터 복수의 타겟에 대한 코드를 생성(308)하는 것을 포함하는 프로세스의 일부로서 보여질 수 있는 소스 수정 방지 단계(336)에서, 사용자(및 실시예)는 소스 코드(122)의 사용자의 카피를 수정하는 것을 방지한다. 따라서, 사용자는 타겟-특정 데이터 소스 구현 세부사항을 제공하거나 이해해야 하는 부담을 방지할 수 있다.
실행가능한 코드 생성 단계(308)의 일부, 소스 코드 수신 단계(304)의 일부, 및/또는 단일 수신된(304) 소스 코드(122)로부터 복수의 타겟에 대한 코드를 생성(308)하는 것을 포함하는 프로세스의 일부로 보여질 수 있는 절대 경로 방지 단계(338)에서, 사용자(및 실시예)는 데이터 소스(136)에 액세스하기 위해 소스 코드(122) 내의 절대 경로(346)를 이용하는 것을 방지한다. 따라서, 사용자는 타겟-특정 데이터 소스 구현 세부사항을 제공하거나 이해해야 하는 부담을 방지한다.
실행가능한 코드 생성 단계(308)의 일부, 소스 코드 수신 단계(304)의 일부, 및/또는 단일 수신된(304) 소스 코드(122)로부터 복수의 타겟에 대한 코드를 생성(308)하는 것을 포함하는 프로세스의 일부로서 보여질 수 있는 위치 검출 코드 방지 단계(340)에서, 사용자(및 실시예)는 원하는 데이터 소스(136)에 액세스하기 위해 타겟들(208)을 서로 구별하거나 또는 타겟 위치를 검출하고자 시도하는 소스 코드(122)의 이용을 막는다. 따라서, 사용자는 타겟-특정 데이터 소스 구현 세부사항을 제공하거나 이해하는 부담을 막을 수 있다.
메모리 구성 단계(342)에서, 메모리 매체(112)는 데이터 소스 맵핑(202), 레졸루션 API(214), 실행가능한 코드 생성기(206)의 다른 데이터 소스 변환 명령, 및/또는 본 명세서에 기술된 바와 같이 서로 다른 실행 위치에서 데이터 소스를 가상화하기 위해 맵핑 및 단일 소스 코드를 이용하는 것과 관련된 다른 요소들에 의해 구성된다.
전술된 단계들 및 이들의 상호관련성은 아래에서 다양한 실시예들과 관련하여 더욱 상세하게 논의될 것이다.
일부 실시예는 소스 코드 및 복수의 다른 컴퓨터 데이터 소스를 연계적으로 관리하기 위한 프로세스를 제공한다. 프로세스는 데이터 소스 맵핑(202)을 획득하는 단계(302)를 포함하며, 이때 특정한 데이터 소스 식별자(204)가 각각의 실행 타겟(208)에서 복수의 데이터 소스(136)로 맵핑된다. 프로세스는 데이터 소스 식별자를 데이터 소스로서 인용(330)하는 개발자 소스 코드를 수신(304)하고, 제 1 실행 타겟을 식별(306)하며, 개발자 소스 코드로부터 제 1 실행가능 코드(124)를 자동으로 생성(308)한다. 제 1 실행가능 코드는 제 1 타겟에 맞춤화되고; 제 1 실행 타겟의 실행에 따라, 소스(136)가 소스 코드(122) 내에 명확히 언급되지 않았다고 해도 제 1 코드(124)가 데이터 소스 식별자(204)에 의해 식별된 데이터 소스와 같은 제 1 실행 타겟의 맵핑된 데이터 소스와 동작할 것이다. 제 1 실행 타겟과는 다른 데이터 소스를 갖는 제 2 실행 타겟을 식별(306)한 후에, 프로세스는 -동일한 소스 코드(122)로부터- 제 2 타겟에 맞춤화된 제 2 실행가능 코드를 자동으로 생성(308)한다. 즉, 제 2 실행 타겟에서의 실행에 따라, 제 2 코드(124)는 제 1 실행 타겟의 데이터 소스 대신 식별된 데이터 소스와 같은 제 2 실행 타겟의 맵핑된 데이터 소스와 동작할 것이다.
다양한 변화가 고려된다. 일부 실시예는 문자 구성 파일을 판독함으로써, 또는 비문자 프로젝트 특성을 판독함으로써 데이터 소스 맵핑을 획득(30)하는 것을 포함한다. 일부 실시예에서, 수신 단계는 절대 경로 데이터 소스 식별자가 면제된(즉, 피하는(338)) 개발자 소스 코드(122)를 수신(304)한다. 일부 실시예에서, 실행 타겟 식별 단계는 로컬 실행 타겟, 클러스터 실행 타겟, 클라우드 실행 타겟 중 적어도 둘을 식별(306)한다. 일부 실시예에서, 동일한 개발자 소스 코드로부터 제 2 실행가능 코드를 자동으로 생성(308)하는 것은 폴더 생성 호출, 클라우드 컨테이너 생성 호출, 파일 생성 호출을 포함하는 호출(318) 중 적어도 하나를 주입(316)하는 소스-투-소스 번역을 수행(314)하는 것을 포함한다. 일부 실시예는 데이터 소스 맵핑(202)을 분산가능한 소프트웨어 패키지(222) 내에 배치(320)하는 것을 포함한다.
개발자 경험 관점에서, 일부 실시예는 특정한 데이터 소스 식별자가 각각의 실행 타겟에서 복수의 데이터 소스로 맵핑되는 데이터 소스 맵핑을 획득(302)하고, 개발자에 의한 소스 코드(122)에 대한 임의의 변화를 필요로 하지 않고(즉, 피하고(336)) 각각의 서로 다른 실행 타겟에 대해 적어도 두 개의 서로 다른 데이터 소스 레졸루션(214)을 데이터 소스 맵핑(202) 및 소스 코드(122)로부터 자동으로 생성(322)하는 단계를 포함한다.
다시, 변경사항이 고려된다. 일부 실시예에서, 획득(302) 단계는 프로젝트-특정 구조로부터 데이터 소스 맵핑을 판독(310)하는 것을 포함한다. 일부 실시예에서, 생성 단계는 URI를 포함하는 적어도 하나의 데이터 소스 레졸루션(214)을 생성(322)한다. 일부 실시예에서, 생성 단계는 데이터 소스 식별자에서 루트된 상대 경로(334)에 기초하여 적어도 하나의 데이터 소스 레졸루션을 생성(322, 332)한다. 일부 실시예에서, 생성 단계(322)는 단지 물리적 저장 위치 식별자 스트링의 치환(substitution) 이상을 포함하며; 예를 들어 호출(318)이 주입(316)될 수 있다.
일부 실시예에서, 프로세스는 개발자(104)로부터의 데이터 소스 맵핑 수정을 수락(324)하는 것을 더 포함한다. 일부 실시예는 개발자로부터 실행 타겟의 명세를 수락(326)하는 것을 포함하며, 이러한 경우에 적어도 하나의 실행 타겟이 예를 들어 타겟으로서의 클러스터 또는 클라우드와 같은 복수의 컴퓨팅 디바이스를 포함할 수 있다.
INPUT TEMP 예시
제한적이지 않은 예시로서, 아래에서는 가능한 실시예를 추가로 설명한다.
실시예가 데이터 소스 식별자(204)가 각각의 실행 위치(타겟(208))에서 복수의 데이터 소스(136)로 맵핑(328)되는 데이터 소스 맵핑(202)을 획득(302)한다고 가정하자. 예를 들어, 아래의 맵핑(202)에서 INPUT 및 TEMP는 데이터 소스 식별자이고, d:/MyData/Input/, \\fileshare\TeamFolder\MyInput\ 등은 데이터 소스이며, 로컬, 클러스터 및 클라우드는 실행 위치이다:
Figure 112014022155048-pct00001
USPTO 관례와 일관되도록, 전술된 어드레스와 다른 모든 문자 URL, URI, 디렉토리 경로, 명백한 하이퍼링크, 및 본 명세서에서의 다른 데이터 소스 어드레스들은 단지 예시로서 기술된 것임을 인지해야 한다. 이들은 일부 다른 문자에 도달하도록 팔로우되기 위한 것이 아니고, 어떠한 정보도 참조로서 본 명세서에 포함시키기 위한 의도가 없다.
이 예시에서, 실시예는 예를 들어 다음과 같이 데이터 소스 식별자를 데이터 소스로서 인용하는 소스 코드를 수신(304)한다.
foreach (file f in TEMP)
{
do_things(f);
}
계속하여 예시에서, 실시예는 예로서 로컬(Local)과 같은 제 1 실행 위치를 식별(306)한다. 실시예는 소스 코드로부터 제 1 실행가능 코드를 자동으로 생성(308)하며 이것은 제 1 실행 위치에서 실행되면 데이터 소스와 같이, 예로서 실제로 수신된 소스 코드가 대신 아래의 동등한 소스 코드였던 것처럼 제 1 실행 위치의 맵핑된 데이터 소스와 동작할 것이다:
folder TEMP=new folder("d:/MyData/Input/");
foreach (file f in TEMP)
{
do_things(f);
}
실시예는 예로서 클러스터(Cluster)와 같은 제 2 실행 위치를 식별(306)하며 동일한 소스 코드로부터 제 2 실행가능 코드를 자동으로 생성(308)하고, 이것이 제 2 실행 위치에서 실행되면 데이터 소스와 같이, 예를 들어 수신된 소스 코드가 대신 아래의 동등한 소스 코드였던 것처럼 제 2 실행 위치의 맵핑된 데이터 소스와 동작할 것이다:
folder TEMP=new folder("\\fileshare\TeamFolder\MyInput\");
foreach (file f in TEMP)
{
do_things(f);
}
이러한 예시를 고려할 때, 로컬 등가(equivalent) 소스 코드와 클러스터 등가 소스 코드 사이의 차이만이 "new folder()"의 파라미터로서 첫 번째 줄에서 통과된 스트링 값이라고 잘못 가정할 수 있다. 즉, 첫눈에 예를 들어 커맨드 라인 파라미터를 사용함으로써, TEMP_DATA_SOURCE="d:/MyData/Input/"을 설정하거나 또는 TEMP_DATA_SOURCE="\\fileshare\TeamFolder\MyInput\"을 설정함으로써, 글로벌 스트링 변수 TEMP_DATA_SOURCE가 동일한 결과를 얻도록 사용되어왔을 수 있다고 볼 수 있다. 그러나, 더욱 정밀한 검토를 통해 단지 스트링을 설정하는 것이 new folder()를 생성하기 위한 코드를 생성하지 않음이 드러난다. 또한, 단지 서로 다른 스트링뿐 아니라 폴더 대신 블롭컨테이너(blobcontainer)를 생성 및 액세스하는 것을 포괄하기 때문에, 스트링 변수는 클러스터 실행에 대해 동일한 소스의 기능을 제공하기에 충분한 힘이 없다.
전술된 내용을 구현하기 위한 하나의 방법은 개발자의 소스인 S-오리지널(S-original)(소스 코드(122))을 실행 위치 의존적인 소스 S-디펜던트(dependent)(중간 소스 코드(344))로 변환하고 변환된 소스 S-디펜던트를 컴파일하는 것이다. 전처리(preprocessor)는 일부 경우에서 소스-투-소스 번역기(216)의 일부로서 사용될 수 있다.
환경 설정된 매체( Configured Media )
일부 실시예는 환경 설정된 컴퓨터 판독가능한 저장 매체(112)를 포함한다. 매체(112)는 디스크(자기, 광학, 또는 그 외의 디스크), RAM, EEPROM 또는 다른 ROM, 및/또는 특히 (유선 및 다른 전파 신호 매체와 상반되는) 비일시적 컴퓨터 판독가능한 매체를 포함하는 다른 환경설정 가능한 메모리를 포함할 수 있다. 환경 설정된 저장 매체는 특히 CD, DVD, 또는 플래시 메모리와 같은 제거가능한 저장 매체(114)일 수 있다. 제거가능하거나 제거가능하지 않을 수 있고, 휘발성이거나 휘발성이 아닐 수 있는 범용 메모리는, 환경 설정된 매체를 형성하기 위해 제거가능한 매체(114) 및/또는 네트워크 접속과 같은 다른 소스로부터 판독되는 데이터(118) 및 명령(116)의 형태로, 데이터 소스 맵핑(202), 실행가능한 코드 생성기(206) 및 레졸루션 API(212)와 같은 아이템을 이용하여 실시예로 구성될 수 있다. 환경 설정된 매체(112)는 컴퓨터 시스템으로 하여금 본 명세서에 개시된 데이터 소스 관리를 통해 데이터를 변형하기 위한 프로세스 단계들을 수행하게 할 수 있다. 따라서 도 1 내지 3은 시스템 및 프로세스 실시예뿐 아니라 환경 설정된 저장 매체 실시예 및 프로세스 실시예를 설명하는 것을 돕는다. 특히, 도 3에 도시되거나 본 명세서에 설명된 임의의 프로세스 단계가 환경 설정된 매체 실시예를 형성하도록 저장 매체의 구성을 돕기 위해 사용될 수 있다.
추가의 예시들
아래에는 추가적인 세부사항 및 설계 고려사항이 제공되었다. 본 명세서의 다른 예시들과 같이, 기술된 특징들이 주어진 실시예에서 개별적으로 사용될 수 있고/있거나 조합하여 사용될 수 있거나, 또는 전혀 사용되지 않을 수도 있다.
당업자는 구현 세부사항이 특정 API 및 특정 샘플 프로그램과 같은 특정 코드와 관련될 수 있으며, 따라서 모든 실시예에서 나타날 필요가 없다는 것을 이해할 것이다. 당업자는 또는 논의되는 세부사항에서 사용되는 프로그램 식별자 및 일부 다른 전문용어가 구현-특정적인 것이며 따라서 모든 실시예와 관련될 필요는 없다는 것을 이해할 것이다. 그럼에도, 이러한 세부사항들이 반드시 존재할 필요는 없지만, 맥락을 제공함으로써 일부 독자의 이해를 도울 수 있고/있거나 본 명세서에 논의된 기술에 대한 다수의 가능한 몇몇 구현을 설명할 수 있기 때문에 세부사항들이 제공되었다.
일부 실시예는 가상화로도 알려져 있는 추출 메커니즘(abstraction mechanism)을 제공한다. 가상화는 데이터 맵핑(202)을 포함하는 프로젝트 설정 또는 사용자 설정을 포함할 수 있다. 일부 접근법에서, 설정 파일은 각 프로젝트(150)에 대해 자동으로 생성되고; 현존하는 사용자 설정을 파일로 불러올 수 있다. 설정 파일은 임의의 수의 참조 아이템 및 몇몇 실행 위치를 포함할 수 있다. 각각의 참조 아이템에 대해서, 설정 파일 맵핑(202)은 이러한 데이터 참조를 나타내기 위한 이름(예로서, 식별자(204)) 및 각 실행 위치에 대한 물리적 데이터 소스(예로서, 절대 경로(346))를 갖는다.
맵핑된 데이터 소스(136)는 위의 INPUT TEMP 예시에서와 같이 서로 다른 데이터 제공자로부터 올 수 있다. 코딩할 때, 사용자는 예로서 "INPUT" 또는 "TEMP"와 같은 이름을 참조함으로써 데이터를 판독/기록한다. 만약 데이터 소스(136)가 계층을 가지면, 사용자는 "INPUT/OrderData"와 같은 상대 경로(334)를 이용하여 데이터를 참조할 수 있다. 만약 사용자가 소스로부터의 모든 데이터에 대한 동작을 반복하면, 사용자는 "foreach (file f in TEMP) do_things(f);" 또는 "foreach (file f in INPUT/OrderData) do_things(f);"와 같은 기록 코드(122)에 의한 데이터 소스(136)를 통해 반복할 수 있다.
프로젝트(150)를 구축할 때, 사용자는 실행 타겟들 중 하나를 선택한다. 구축 시스템은 그 다음 소스 코드 내의 이름을 서로 다른 데이터 제공자들 사이의 적절한 맵핑을 이용하여 설정 파일 맵핑(202)에 따라 상응하는 물리적 소스로 번역(맵핑, 리졸브)한다.
예를 들어, 아래에서 소스 코드(122)를 가정한다:
foreach (file f in TEMP)
{
do_things(f);
}
이러한 동일한 소스(12)로부터, 생성기(206)는 어떤 타겟(208)이 명시되었는지에 기초하여 실행가능한 코드(124)를 생성할 수 있다. 따라서, 로컬 타겟에 대해서 실행가능물은 이러한 중간 소스(344)에 상응할 수 있다:
folder TEMP=new folder("d:/MyData/Input/");
foreach (file f in TEMP)
{
do_things(f);
}
클러스터 타겟에 있어서:
folder TEMP=new folder("\\fileshare\TeamFolder\MyInput\");
foreach (file f in TEMP)
{
do_things(f);
}
클라우드 타겟에 있어서:
Blobcontainer TEMP=new
blobcontainer(http://myaccount.blob.core.windows.net/Temp/");
foreach (blob b in TEMP)
{
file f=new file (b);
do_things(f);
}
아래의 논의는 PDL(Project Data Library) 문서로부터 파생된다. PDL은 Microsoft Corporation 사에 의해 설계되는 소프트웨어 구성요소 및 서비스의 집합이다. PDL 소프트웨어 및/또는 문서화의 측면들은 본 명세서에 기술된 실시예들의 측면들과 일관되거나 또는 다른 방식으로 이러한 측면들을 설명한다. 그러나, PDL 문서화 및/또는 구현 선택이 반드시 이러한 실시예의 범주를 제한하는 것은 아님을 이해해야 하며, 유사하게 이러한 PDL 및/또는 그 문서화가 이러한 실시예의 범주 밖에 있는 특성들을 충분히 포함할 수도 있음을 이해해야 한다. 또한, Microsoft® Azure™ 클라우드 기술이 예시에서 사용되었지만, 본 발명의 설명 및 실시예가 반드시 특정한 클라우드 기술(Microsoft Corporation 사의 마크)로 제한되는 것은 아니다. 또한 아래의 논의는 반드시 당업자가 아닐 수도 있는 독자를 부분적으로 돕기 위해 제공되었으며, 따라서 아래에서 인용하는 것이 본 발명을 지원하는데에 엄격히 요구되지 않는 세부사항을 포함 및/또는 생략할 수 있다.
PDL(Project Data Library) 특성은 원격 실행에 대한 소스 코드 변화없이 클라이언트, 클라우드 스토리지 및 원격 컴퓨터 노드를 가로지르는 매끄러운 데이터 액세스를 제공하는 것과 관련된다. 이는 로컬 파일 저장, 스테이징(staging) 저장 및 컴퓨팅 노드 상의 파일 저장 사이에서의 데이터 인용의 프로젝트당(per-project) 추상화(가상화)를 포함한다. 로컬 박스 상의 PDL은 로컬 PDL로 지칭될 수도 있으며, 원격 컴퓨팅 노드 상의 PDL은 원격 PDL로 지칭될 수 있다.
Microsoft® Windows® 7 운영 시스템 소프트웨어는 예를 들어 "음악 라이브러리" 및 "문서 라이브러리"(Microsoft Corporation 사의 마크)와 같은 사용자 콘텐츠를 저장하기 위해 특정 폴더를 포함하는 라이브러리를 제공한다. 이러한 경우에, 라이브러리 추상화는 몇몇 폴더(하나는 디폴트 기록 위치)의 논리적 그룹핑을 나타낸다. 반면에, PDL은 로컬 파일 시스템, 클라우드 스토리지 및 원격 컴퓨팅 노드의 파일 시스템과 같은 실행 환경 및 복수의 스토리지를 가로지르는 맵핑을 지원할 수 있다.
PDL은 Azure™ 블롭 스토리지(Microsoft Corporation 사의 마크)에서의 스테이징 스토리지 내의 하나의 컨테이너와 로컬 PDL 내의 각 폴더를 맵핑할 수 있다. 예를 들어, 로컬 PDL은 프로젝트 공간 하의 물리적 폴더로 맵핑될 수 있으며, 전체 데이터세트로부터 다운로드된 하나의 파일을 포함하고; 클라우드 PDL은 사용자의 Azure™ 스토리지 하의 컨테이너로 맵핑될 수 있으며; 원격 PDL은 모델 배치 디렉토리("모델"은 본 명세서에서 컴퓨터 프로그램을 지칭함) 하의 물리적 폴더로 맵핑될 수 있다. 클라이언트, 클라우드 및 클러스터를 가로지르는 PDL 트랜지션은 사용자의 관점으로부터 클라우드 스토리지의 물리적 성질을 제거하며, 사용자는 데이터와 모델링에 집중할 수 있다. 따라서, 실행가능한 코드 내의 데이터 인용은 임의의 절대 경로를 하드코딩하지 않고 상대 경로를 이용할 수 있으며, 이는 로컬에서 원격 실행 환경으로 포팅될 때 소스 코드 변경 없이 모델 코드를 실행하는 것을 지원한다.
일부 접근법에서, 데이터 인용 맵핑은 스테이징 저장 어드레스와 같은 Azure™ 블롭의 공유되는 액세스 시그니처(SAS; shared access signature) URI를 지원한다. 일부 접근법은 PDL 내의 2-레벨 깊이의 디렉토리 구조를 이용하며, 따라서 로컬 PDL과 Azure™ 스토리지 사이의 맵핑은 Azure™ 스토리지 엔드에서의 컨테이너 및 블롭을 이용하여 간단해진다. 예를 들어, 로컬 PDL 하에서의 폴더 이름은 컨테이너 이름에 상응할 것이며 폴더 하의 파일 이름은 블롭에 상응할 것이다. 일부 접근법은 폴더-레벨 데이터 인용 맵핑, 즉 프로젝트 데이터 라이브러리에 대한 Azure™ 블롭 스토리지에서 컨테이너 하의 풀 콘텐츠를 로컬 폴더와 맵핑하는 것에 초점을 맞추며, 컨테이너 내의 부분적인 콘텐츠와 로컬 폴더 사이는 맵핑하지 않는다. 따라서, 하나의 컨테이너 하의 파일은 맵핑에 모두 포함된다. 일부 접근법에서, 프로젝트 데이터 라이브러리는 머신 와이드 데이터 라이브러리 대신 프로젝트마다의 구현에 초점을 맞춘다. Azure™ 블롭 스토리지의 일부 버전은 오직 2-레벨 깊이의 디렉토리(컨테이너/블롭)만을 지원하지만, 계층 구조를 흉내내기 위해서 "/"을 갖도록 블롭의 이름을 지음으로써 이를 해결할 수 있다(예로서, 블롭 이름 "folder/subfolder/name"). 만약 소스 코드가 "INPUT/folder/subfolder/blob"을 인용하면, 생성기는 "INPUT"에 맵핑된 컨테이너 내의 블롭 "folder/subfolder/name"을 맵핑할 것이다.
일부 접근법은 사용자(104)가 PDL과 연관된 물리적 폴더를 재명명(rename), 이동 및 삭제하는 영향을 인식한다고 가정한다. PDL 밖의 변화는 PDL과 자동으로 동기화되지 않을 것이다. 이러한 맵핑은 다시 삭제 및 생성될 것이다.
본 명세서에서의 설계는 또한 보다 많은 저장 타겟(예를 들어, 두 개의 HPC 클러스터) 및 복수의 스테이징 스토리지(예를 들어, 두 개의 Azure™ 스토리지 계정)를 적응시키기 위해서 세 개의 데이터 인용 타겟(208)을 넘어서 적용가능할 수도 있다.
일부 접근법에서, 원격 컴퓨팅 노드에 대한 전체 경로는 배치 디렉토리(deployment directory)에 의존할 것이며, 이것은 프로그램 런타임을 통해 검새고딜 것이고, 맵핑(202)은 오직 배치 디렉토리 하의 상대 경로의 추적을 유지한다.
일부 접근법에서, 맵핑(202) 테이블 내의 각각의 열(row)은 데이터 인용 맵핑을 나타낸다. PDL은 데이터 인용 맵핑의 통합을 포함하며, 서로 다른 환경에 걸쳐 데이터 인용 번역을 제공하기 위해서 API를 제공한다. 맵핑 이름은 PDL 하의 데이터 폴더의 디스플레이 이름일 수 있으며, 디폴트에 의한 폴더명일 수도 있다.
클라우드 스토리지에서, 일부 접근법은 컨테이너의 전체 URI를 추적하고; 스토리지 계정 이름 및 키가 PDL 내에 저장되지 않을 것이다. 스토리지 계정 이름과 키는 클라이언트 측의 사용자 설정에서 저장될 것이다. SAS 정책이 데이터 인용 맵핑 내의 Azure™ 블롭 컨테이너와 연관되었다면, 컨테이너 이름보다 우위에 있는 특정한 SAS 정책이 맵핑 정보 내에 포함될 수도 있다.
일부 접근법에서, PDL 내에 포함되는 모든 데이터 인용 맵핑 정보는 프로젝트 레벨에서 유지되며, 따라서 이것이 원격 HPC 클러스터 상에서 실행될 때 패키지(222) 내에 포함될 수 있다. PDL 정보는 예를 들어 모든 데이터 인용 맵핑을 포함하는 DataLib.pdl의 구성 파일(132)과 같은 XML로서, 또는 각각의 데이터 인용 맵핑에 대해 하나의 파일을 갖는 복수의 구성 파일로서, 또는 프로젝트 내의 프로젝트 특성(220)으로서 유지될 수 있다. 데이터 인용 맵핑이 프로젝트 시스템 또는 프로젝트(150)에 대한 다른 지속적인 스토리지 내에 등록될 때, 이는 프로그램 패키징 기간 동안 코드를 구축함으로써 액세스 가능하게 된다. 따라서, 클라우드 스테이징 스토리지 상의 상응하는 데이터 인용 정보 및 원격 컴퓨팅 노드 데이터 다운로드가 패키지 내에 포함될 수 있다.
일부 접근법에서, PDL은 PDL 하의 상대 경로가 주어진 물리적 경로를 제공하도록 데이터 인용 레졸루션을 제공한다. 데이터 인용 레졸루션을 로컬로 반환할 때, PDL은 맵핑 내의 루트 디렉토리의 전체 경로를 인지한다. 따라서 전체 경로에 대해 연관된 스트링을 반환할 수 있다.
그러나, PDL은 원격 루트 디렉토리를 알지 못하고 오직 모델(프로그램) 배치 디렉토리 하의 폴더명만 인지한다. 프로그램 배치 디렉토리는 프로그램 런타임에만 알려지며, 생략된 코드는 컴파일 시에 이를 알지 못한다. 원격 노드 상의 편집이 존재하지 않기 때문에 프로그램 런타임에 원격 컴퓨팅 노드 상에서 전체 경로를 레졸브하기 위해 다양한 접근법들이 사용될 수 있다. 예를 들어, 예를 들어 batsmapping.config에 대해 "C:\BATS"와 같은 각 맵핑의 로컬 타겟의 디렉토리에 대한 파일을 생성할 수 있으며, 파일은 실행중인 load_csv의 루트 디렉토리 내에 있을 것이다. 파일은 데이터가 맵핑을 위해 로딩될 때 원격 노드 상에 생성될 것이다. 이와 달리, 각 맵핑에 있어서 로컬 타겟에 대한 로컬 루트 디렉토리에 대한 환경 변소를 등록할 수 있다.
일부 접근법은 서로 다른 환경을 가로질러 데이터 인용을 레졸브하기 위해 아래의 API를 사용한다.
Figure 112014022155048-pct00002
일부 접근법은 데이터 인용 맵핑을 위해 아래의 클래스 설계를 이용하며, 이것은 로컬 PDL, 스테이징 스토리지 및 원격 PDL을 가로지르는 맵핑을 나타낸다. ExecutionTarget 및 VirtualPath 클래스는 데이터 액세스 API 및 PDL 라이브러리 사이에서 공유될 것이다.
Figure 112014022155048-pct00003
Figure 112014022155048-pct00004
코드를 계속하기에 앞서 여담으로서, ExecutionTarget 및 VirtualPath 클래스가 데이터 액세스 API 및 PDL 라이브러리 사이에서 공유될 것이다.
코드는 다음과 같이 계속된다:
Figure 112014022155048-pct00005
Figure 112014022155048-pct00006
일부 접근법에서, 각 스토리지 타겟은 실행 환경, 스테이징 데이터 타겟 또는 결과적인 지속 스토리지에 대한 스토리지 인용을 나타낼 것이다. 로컬 파일 시스템 타겟, Azure™ 블롭 스테이징 스토리지, 원격 타겟, 결과의 지속 스토리지와 같은 각각의 특정 타겟에 있어서 스토리지 타겟에 대한 베이스 클래스는 아래와 같다.
Figure 112014022155048-pct00007
일부 접근법에서, PDL 하의 로컬 폴더(상대 경로)를 나타내는 VirtualPath 클래스도 사용한다:
Figure 112014022155048-pct00008
일부 접근법에서, 아래는 3C(즉, 클라이언트, 클러스터 및 클라우드)를 가로지르는 모든 데이터 인용 맵핑을 유지하는 PDL에 대한 클래스 설계이다.
Figure 112014022155048-pct00009
Figure 112014022155048-pct00010
코드를 계속하기 전에, 여담으로서 본 명세서에 리스트된 코드와 일부 다른 코드에서, 아래와 같은 태그가 리스트 공간을 압축시키기 위해서 제거되었다:
Figure 112014022155048-pct00011
리스트 공간을 압축시키기 위해서 흰 공간도 제거되었다. 코드는 아래에서 계속된다:
Figure 112014022155048-pct00012
Figure 112014022155048-pct00013
몇몇 접근법은 클라이언트 측에서 PDL 정보(예로서, 맵핑(202))를 유지하기 위해 사용될 수 있다. PDL 정보를 포함하고 프로젝트에 구성 파일을 추가시키기 위해서 XML-유사 구성 파일을 이용할 수 있다. 이와 달리, 프로젝트 파일을 오른쪽 클릭하여 특성을 선택함으로써 입력 및 편집될 수 있는 프로젝트 특성(220)과 같은 PDL 정보를 추가하기 위해 프로젝트 관리 시스템을 수정할 수 있다. 다른 옵션은 클라이언트 인프라구조의 IPropertyCollection 인터페이스를 레버리지하는 것이다.
일부 접근법에서, 데이터 인용 맵핑(202)은 예를 들어 DataLib.pdl 파일과 같은 XML 파일로서 저장된다. 일부 접근법은 사용자가 이러한 파일 내의 맵핑을 생성 및 편집할 수 있다고 가정하며, 이러한 파일은 IDE(148)를 이용하여 프로젝트로 추가될 수 있다. PDL XML은 DataContractSerializer를 이용하여 생성될 수 있고, 상응하는 요소 이름은 C# 클래스 정의 내의 속성으로서 추가될 것이다.
Figure 112014022155048-pct00014
로컬 실행과 관련하여, 사용자가 load_csv(dataref("BATS\a.csv"))와 같은 식별자(204)를 인용하는 소스 코드를 기록한다고 가정하자. 일부 접근법에서, dataref는 프로젝트 데이터 라이브러리 내의 로컬에 대한 데이터 인용 맵핑 정보를 검색하고, 경로를 번역한 다음, load_csv(c:\data\BatsData\a.csv")를 호출한다. 예를 들어, dataref("BATS\a.csv")는 아래와 같이 PDL 맵핑 정보에 액세스하는 기능으로 번역될 수 있다. 이러한 맵핑을 위한 로컬 루트 디렉토리는 로컬 실행에 대해 생략된 기능에서 인라인(inline)일 것이다.
function dataref(path)
root="C:\BATS"; //BATS 로컬 타겟에 대한 루트 디렉토리 반환
return root & path; //가상 경로 엔드 및 BATS에 대한 루트 디렉토리의 연결
클라우드에 대해 패키징할 때, 일부 접근법은 pdl 파일을 패키지(222)로 패킹한다. 스테이징 스토리지로서 Azure™ 스토리지를 이용하는 원격 컴퓨팅 노드 실행에 대한 패키징에서, 데이터 보안을 위해 SAS URI를 갖는 다른 pdl 파일을 생성할 수 있다. SAS 생성은 예를 들어 MSBuild 내부에서 트리거링될 것이며, 사용자에게 투명하다. 이러한 파일을 생성하기 위해, 클라우드 타겟의 경로를 SAS 생성된 것으로 대체하고; 로컬 타겟의 경로를 컴퓨팅 노드 상의 데이터의 예상된 위치로 대체한다. 만약 프로그램이 패키지되지 않은 위치가 알려지면, 데이터는 동일한 폴더 하에서 로딩될 것이며, 그렇지 않다면 폴더를 생성할 수 있다. 패키지로 포함될 새로운 DataLib.pdl 파일을 생성할 수 있다:
Figure 112014022155048-pct00015
Figure 112014022155048-pct00016
이러한 DataLib.pdl은 프로그램(예로서, 모델)과 패키지 내에 배치된다. 프로그램 런타임에 패키지를 해제하는 동안, DataLib_cloud.pdl을 발견할 수 있다. 이름으로부터, 클라우드로부터 로컬로 데이터를 가져오기 위한 것임을 알 수 있다. 따라서 각각의 SAS 생성된 경로로 이동하며, 상응하는 로컬 경로로 데이터를 가져온다. 데이터 인용 맵핑에서, 폴더명은 인식하지만 전체 이름은 인식하지 못한다. (PDL 외의 구성요소인) 데이터 로딩은 루트 배치 디렉토리를 검색할 것이며 예를 들어 확장가능성 있는 프레임워크를 이용하여 데이터 목적지에 대한 전체 경로를 생성한다.
원격 실행과 관련하여, 사용자가 위에서와 동일한 코드 load_csv(dataref("BATS\a.csv"))를 기록한다고 가정하자. dataref는 DataLib_cloud.pdl 내의 로컬에 대한 맵핑 정보를 검색하며, 경로를 번역한 다음, load_csv("c:\deploymentroot\\TradingStrategy\BATS\a.csv")를 호출한다. dataref에 대해 실행가능한 기능은 BATS 맵핑에 대한 루트 디렉토리를 레졸브하는 이전의 데이터 로딩 위상에서 생성된 batsmapping.config를 판독할 것이며, dataref는 아규먼트(argument)로부터 전달된 가상 경로 및 루트 디렉토리의 연결을 반환할 것이다. 따라서, a.csv에 대한 로컬 경로가 원격 컴퓨팅 노드에 대한 로컬 파일 인용에 기초하여 레졸브될 수 있다.
스레드 안전과 관련하여, 일부 접근법에서 각각의 프로젝트가 별개의 PDL 및 PDL 상에서의 다음과 같은 동작들을 가질 수 있다: 인-메모리(in-memory) PDL로 데이터 인용 맵핑을 추가, 인-메모리 PDL 인스턴스를 파일 내에 저장, 파일로부터 인-메모리 PDL 인스턴스로 PDL을 로딩, 물리적 경로를 레볼즈, 데이터 인용 맵핑 획득. 복수의 데이터 인용 맵핑을 포함하는 인-메모리 PDL 데이터 구조가 프로젝트마다 하나씩 존재하며, PDL 인-메모리 구조로 로딩될 수 있는 지속적 XML 파일도 존재한다. 일부 접근법에서, 인-메모리로 맵핑을 추가하기 위해 사용자에 대해서(클라이언트에 대해서만), 인-메모리 PDL로부터의 맵핑을 획득하기 위해 MSBuild에서(클라이언트만), PDL을 로딩/맵핑을 추가/PDL을 저장하기 위한 데이터 로딩에 대해서(원거리에 대해서만), PDL은 데이터 라이브러리 익스플로러(DLE) 내에서 호출될 수 있다. DLE 및 MSBuild는 PDL을 동시에 수정할 수 없으며, 따라서 인-메모리 PDL 또는 PDL 파일에 대한 논쟁이 존재하지 않는다.
일부 접근법은 아래의 기능적인 제한을 제공한다. 데이터 라이브러리 생성, 저장 및 로딩에 있어서: 데이터 라이브러리에 대한 맵핑 및 설정은 퍼블릭 인터페이스를 통해서 올바르게 생성, 저장 및 로딩된다; 설계자로부터 새로운 데이터 라이브러리를 생성하는 것이 지원된다; 파일에 데이터 라이브러리를 저장하는 것이 지원된다; 지속 스토리지로부터 데이터 라이브러리를 로딩하는 것이 지원된다; 그리고 유효하지 않거나 존재하지 않는 경로로 저장하거나 그러한 경로로부터 로딩하는 것이 검출되고 방지된다.
PDL로 새로운 엔트리를 추가하는 것과 관련하여: 사용자는 새로운 고유한 엔트리를 PDL로 성공적으로 등록하고 새로운 고유한 맵핑 엔트리를 PDL로 추가하기 위한 지원 제공, 복제 맵핑 엔트리를 PDL에 추가, 동일한 Azure™ 스토리지 경로와 서로 다른 로컬 경로를 갖는 엔트리를 추가, 그리고 동일한 로컬 경로와 서로 다른 Azure™ 스토리지를 갖는 새로운 엔트리를 추가하고자 시도한다.
현존하는 PDL을 변경하는 것과 관련하여, 사용자는 현존하는 PDL을 로딩할 수 있고, 예를 들어 일부 새로운 엔트리 추가, 현존하는 엔트리 편집, 현존하는 엔트리 삭제와 같은 일부 변경을 수행하고 이를 다시 저장한다.
데이터 폴더, 스토리지 및 블롭의 이름을 지정하는 것과 관련하여, 서로 다른 타겟들이 서로 다른 명명 관습 및 제한을 가질 수 있다. 데이터 라이브러리는 이것이 유효함을 보장하기 위해서 파일 인용을 검사할 수 있다. 일부 접근법에서, 라이브러리는 사용자 시나리오에 의해 호출되거나 오류에 따라 동작하기 위해 올바른 맵핑, 레졸브된 리소스 어드레스 또는 오류(만약 데이터 라이브러리 내에 있지 않은 경우)를 반환할 수 있다. 또한, 예를 들어 로컬 파일을 레졸브하기 위한 기능, Azure™ 스토리지 리소스 URI로의 맵핑, 원격 타겟의 리졸브 및 2-레벨 디렉토리 내의 리소스 레졸브를 이용하여, 리소스의 검색 및 레졸브는 반복할 수 있고 최종적인 것으로 가정될 수 있다.
결론
특정한 실시예들이 본 명세서에서 프로세스, 환경 설정된 매체, 또는 시스템으로서 명백하게 설명되고 기술되었지만, 실시예의 일 유형에 대한 논의는 일반적으로 다른 실시예 유형으로 확대된다는 것을 이해할 것이다. 예를 들어, 도 3과 관련된 프로세스의 설명은 환경설정된 매체를 설명하는 것 역시 도울 수 있으며, 다른 도면과 관련하여 논의된 제조품 및 시스템의 동작을 기술하는 것도 도울 수 있다. 일 실시예로부터의 제한이 반드시 다른 실시예에 대해서도 적용되는 것은 아니다. 특히, 환경 설정된 메모리와 같은 제조품 또는 시스템을 논의하였지만, 프로세스는 반드시 제시된 데이터 구조 및 배치로 제한되지 않는다.
도면에 도시된 모든 아이템이 모든 실시예에 존재해야만 하는 것은 아니다. 역으로, 실시예는 도면에 명백하게 도시되지 않은 아이템(들)을 포함할 수 있다. 일부 가능성이 본 명세서에서 특정 예시로서 문자 및 도면으로 설명되었지만, 실시예는 이러한 예시들과 상이할 수도 있다. 예를 들어, 예시들의 특정한 특성들이 하드웨어 및/또는 소프트웨어에서 서로 다르게 생략, 재명명(rename), 그룹화, 반복, 인스턴스화될 수 있으며, 둘 이상의 예시들에서 나타난 특성들이 혼합될 수도 있다. 하나의 위치에서 도시된 기능은 일부 실시예에서 다른 위치에서도 제공될 수 있다.
참조번호에 의해 도면 전체에 걸쳐 참조가 이루어졌다. 도면 또는 내용에서, 주어진 참조번호와 연관된 구절 내의 임의의 명백한 불일치는 단순히 번호에 의해 참조된 범주를 넓히는 것으로 이해되어야만 한다.
본 명세서에서 사용된 단수의 명사들은 지시된 아이템 또는 단계가 하나 이상 존재한다는 것을 나타낸다. 특히, 특허청구범위에서 아이템에 대한 인용은 일반적으로 이러한 아이템이 적어도 하나 존재한다는 것을 의미하며, 단계에 대한 인용은 그러한 단계가 적어도 한 번 수행됨을 의미한다.
주제는 단지 편의를 위한 것으로, 주어진 주제에 대한 정보는 주제가 해당 토픽을 나타내는 섹션 밖에서 찾아볼 수 있다.
출원된 모든 특허청구범위 및 요약부는 본 명세서의 일부이다.
예시적인 실시예가 도면에 도시되고 위에 기술되었지만, 특허청구범위에서 기술된 원리 및 개념으로부터 벗어나지 않고 다수의 수정이 이루어질 수 있으며, 그러한 수정이 전체 추상적 개념을 포함할 필요가 없음이 당업자에게 명백할 것이다. 청구사항이 구조적 특징 및/또는 절차상 동작에 대해 특정한 언어로 기술되었지만, 첨부된 특허청구범위 내에 정의된 청구사항은 반드시 특허청구범위 위에서 기술된 특정한 특징 또는 동작으로 한정되는 것이 아님을 이해해야 한다. 주어진 정의 또는 예시에서 식별된 측면 또는 모든 의미가 반드시 모든 실시예 내에 존재하거나 이용되어야만 하는 것은 아니다. 오히려, 기술된 특정한 특징 및 동작들은 특허청구범위를 구현할 때 예시로서 고려된다.
전체의 추상적 아이디어를 포함하는 데에는 미치지 못하지만 특허청구범위의 동등물의 범주 및 의미 내에 포함되는 모든 변경들이 법적으로 허용된 확장된 전체 범위 내에 포함된다.

Claims (20)

  1. 컴퓨터 프로세서에 의해 수행되는, 소스 코드와 다수의 다른 컴퓨터 데이터 소스(multiple alternative computational data sources)를 연계적으로(cooperatively) 관리하는 방법으로서,
    각각의 실행 타겟에서 특정 데이터 소스 식별자가 복수의 데이터 소스에 맵핑되는 데이터 소스 맵핑을 획득하는 단계와,
    상기 데이터 소스 식별자를 데이터 소스로서 인용하는 개발자 소스 코드를 수신하는 단계와,
    제 1 실행 타겟을 식별하는 단계와,
    상기 개발자 소스 코드로부터 제 1 실행가능한 코드를 자동을 생성하는 단계- 상기 제 1 실행가능한 코드는 상기 제 1 실행 타겟에서 실행되었을 때, 상기 데이터 소스 식별자에 의해 식별된 상기 데이터 소스로서의 상기 제 1 실행 타겟의 맵핑된 데이터 소스와 함께 동작함 -와,
    상기 제 1 실행 타겟과 상이한 데이터 소스를 갖는 제 2 실행 타겟을 식별하는 단계와,
    동일한 소스 코드로부터 제 2 실행가능한 코드를 자동으로 생성하는 단계- 상기 제 2 실행가능한 코드는 상기 제 2 실행 타겟에서 실행되었을 때, 상기 제 1 실행 타겟의 데이터 소스 대신 상기 식별된 데이터 소스로서의 상기 제 2 실행 타겟의 맵핑된 데이터 소스와 함께 동작함 -를 포함하는
    방법.
  2. 제1항에 있어서,
    상기 데이터 소스 맵핑을 획득하는 단계는 텍스트 구성 파일(textual configuration file)을 판독하는 것, 비텍스트 프로젝트 특성(nontextual project property)을 판독하는 것 중 적어도 하나를 포함하는
    방법.
  3. 제1항에 있어서,
    상기 수신하는 단계는 절대 경로 데이터 소스 식별자가 면제된 개발자 소스 코드를 수신하는 것을 포함하는
    방법.
  4. 제1항에 있어서,
    상기 제 1 실행 타겟을 식별하는 단계 및 상기 제 2 실행 타겟을 식별하는 단계는 로컬 실행 타겟, 클러스터 실행 타겟, 클라우드 실행 타겟 중 적어도 두 개를 식별하는
    방법.
  5. 제1항에 있어서,
    상기 동일한 개발자 소스 코드로부터 제 2 실행가능한 코드를 자동으로 생성하는 단계는 폴더 생성 호출, 클라우드 컨테이너 생성 호출, 파일 생성 호출 중 적어도 하나를 주입(inject)하는 소스-소스 간 번역(source-to-source translation)을 수행하는 것을 포함하는
    방법.
  6. 제1항에 있어서,
    상기 제 2 실행가능한 코드를 자동으로 생성하는 단계 후에, 상기 데이터 소스 맵핑을 분산가능한 소프트웨어 패키지 내에 배치하는 단계를 더 포함하는 방법.
  7. 적어도 하나의 프로세서에 의해서 실행되었을 때 상기 프로세서로 하여금 개발자가 사용하기 위한 프로세스를 수행하게 하는 명령어와 데이터로 구성된 컴퓨터 판독가능한 저장 매체로서,
    상기 프로세스는,
    각각의 실행 타겟에서 특정 데이터 소스 식별자가 복수의 데이터 소스에 맵핑되는 데이터 소스 맵핑을 획득하는 단계와,
    상기 개발자에 의한 소스 코드에 대한 어떠한 변경도 필요로 하지 않고, 각각의 서로 다른 실행 타겟에 대해 적어도 두 개의 서로 다른 데이터 소스 레졸루션(resolution)을 상기 데이터 소스 맵핑 및 상기 소스 코드로부터 자동으로 생성하는 단계
    를 포함하는
    컴퓨터 판독가능 저장 매체.
  8. 제7항에 있어서,
    상기 데이터 소스 식별자에 맵핑된 상기 데이터 소스들 중 하나의 데이터 소스는 10 기가바이트 미만의 데이터를 포함하고, 상기 데이터 소스 식별자에 맵핑된 상기 데이터 소스들 중 다른 데이터 소스는 적어도 100 기가바이트의 데이터를 포함하는
    컴퓨터 판독가능 저장 매체.
  9. 제7항에 있어서,
    상기 생성하는 단계는 URI(Universal Resource Identifier)를 포함하는 적어도 하나의 데이터 소스 레졸루션을 생성하는
    컴퓨터 판독가능 저장 매체.
  10. 제7항에 있어서,
    상기 생성하는 단계는 상기 데이터 소스 식별자에서 루팅된(rooted) 상대 경로(relative path)에 기초하여 적어도 하나의 데이터 소스 레졸루션을 생성하는
    컴퓨터 판독가능 저장 매체.
  11. 제7항에 있어서,
    상기 생성하는 단계는 물리적 저장 위치 식별자 스트링의 치환(mere substitution)에 더하여 추가 정보를 포함하는
    컴퓨터 판독가능 저장 매체.
  12. 제7항에 있어서,
    상기 프로세스는 상기 개발자로부터 상기 데이터 소스 맵핑의 수정을 수락하는 단계를 더 포함하는
    컴퓨터 판독가능 저장 매체.
  13. 제7항에 있어서,
    상기 프로세스는 상기 개발자로부터 상기 실행 타겟들의 명세(specification)를 수락하는 단계를 더 포함하고,
    상기 실행 타겟들 중 적어도 하나는 복수의 컴퓨팅 장치를 포함하며,
    상기 실행 타겟에 대해 맵핑된 데이터 소스는 적어도 1 테라바이트의 데이터를 포함하는
    컴퓨터 판독가능 저장 매체.
  14. 컴퓨터 시스템으로서,
    논리적 프로세서와,
    상기 논리적 프로세서와 통신하는 메모리와,
    상기 메모리 내에 존재하고, 각각의 서로 다른 실행 타겟에서 복수의 서로 다른 데이터 소스에 맵핑되는 특정 데이터 소스 식별자를 갖는 데이터 소스 맵핑과,
    상기 메모리 내에 존재하고, 개발자 소스 코드 내에서 데이터 소스로서 인용되는 상기 데이터 소스 식별자를 갖는 상기 개발자 소스 코드와,
    상기 메모리 내에 존재하고 명령어를 구비하는 실행가능한 코드 생성기를 포함하되,
    상기 명령어는 실행되면 서로 다른 시간에 동일한 상기 개발자 소스 코드로부터 복수의 서로 다른 실행가능한 코드를 자동으로 생성하고, 각각의 실행가능한 코드는 상기 데이터 소스들 중 서로 다른 데이터 소스를 참조하는
    컴퓨터 시스템.
  15. 제14항에 있어서,
    상기 개발자 소스 코드는 실행 위치를 검출하기 위한 코드가 면제된
    컴퓨터 시스템.
  16. 제14항에 있어서,
    상기 개발자 소스 코드는 절대 경로 데이터 소스 식별자가 면제된
    컴퓨터 시스템.
  17. 제14항에 있어서,
    상기 실행가능한 코드 생성기에 의해 생성된 실행가능 코드를 더 포함하되, 상기 실행가능 코드는 상기 개발자 소스 코드에 존재하지 않는 폴더 생성 호출, 클라우드 컨테이너 생성 호출, 파일 생성 호출 중 적어도 하나를 포함하는
    컴퓨터 시스템.
  18. 제14항에 있어서,
    상기 실행가능한 코드 생성기는 레졸루션 API를 포함하고, 상기 레졸루션 API는 상기 프로세서에 의해 실행되는 경우 상대 경로(relative path) 및 실행 타겟을 물리적 경로를 포함하는 데이터 소스 레졸루션으로 레졸브하는(resolve) 명령어를 포함하는
    컴퓨터 시스템.
  19. 제14항에 있어서,
    상기 실행가능한 코드 생성기는 소스-소스 간 번역기를 포함하는
    컴퓨터 시스템.
  20. 제14항에 있어서,
    상기 데이터 소스 맵핑은 텍스트 구성 파일, 비텍스트 프로젝트 특성, 프로젝트-특정 구조, 사용자-특정 구조 중 적어도 하나에 존재하는
    컴퓨터 시스템.
KR1020147006151A 2011-09-07 2012-09-04 변형 컨텍스트-인식 데이터 소스 관리 KR101944570B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/226,679 2011-09-07
US13/226,679 US8863082B2 (en) 2011-09-07 2011-09-07 Transformational context-aware data source management
PCT/US2012/053592 WO2013036460A2 (en) 2011-09-07 2012-09-04 Transformational context-aware data source management

Publications (2)

Publication Number Publication Date
KR20140060299A KR20140060299A (ko) 2014-05-19
KR101944570B1 true KR101944570B1 (ko) 2019-01-31

Family

ID=47574776

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020147006151A KR101944570B1 (ko) 2011-09-07 2012-09-04 변형 컨텍스트-인식 데이터 소스 관리

Country Status (6)

Country Link
US (1) US8863082B2 (ko)
EP (1) EP2754032B1 (ko)
JP (2) JP2014529832A (ko)
KR (1) KR101944570B1 (ko)
CN (1) CN102902529B (ko)
WO (1) WO2013036460A2 (ko)

Families Citing this family (99)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9451393B1 (en) * 2012-07-23 2016-09-20 Amazon Technologies, Inc. Automated multi-party cloud connectivity provisioning
US9361068B2 (en) 2014-05-21 2016-06-07 International Business Machines Corporation System and method for using development objectives to guide implementation of source code
US9830193B1 (en) 2014-09-30 2017-11-28 Amazon Technologies, Inc. Automatic management of low latency computational capacity
US9715402B2 (en) 2014-09-30 2017-07-25 Amazon Technologies, Inc. Dynamic code deployment and versioning
US9146764B1 (en) 2014-09-30 2015-09-29 Amazon Technologies, Inc. Processing event messages for user requests to execute program code
US9600312B2 (en) 2014-09-30 2017-03-21 Amazon Technologies, Inc. Threading as a service
US10048974B1 (en) 2014-09-30 2018-08-14 Amazon Technologies, Inc. Message-based computation request scheduling
US9678773B1 (en) 2014-09-30 2017-06-13 Amazon Technologies, Inc. Low latency computational capacity provisioning
US9323556B2 (en) 2014-09-30 2016-04-26 Amazon Technologies, Inc. Programmatic event detection and message generation for requests to execute program code
CN105701118B (zh) * 2014-11-28 2019-05-28 国际商业机器公司 用于归一化文件的非数值特征的方法和装置
US9537788B2 (en) 2014-12-05 2017-01-03 Amazon Technologies, Inc. Automatic determination of resource sizing
US9733967B2 (en) 2015-02-04 2017-08-15 Amazon Technologies, Inc. Security protocols for low latency execution of program code
US9588790B1 (en) 2015-02-04 2017-03-07 Amazon Technologies, Inc. Stateful virtual compute system
US9785476B2 (en) 2015-04-08 2017-10-10 Amazon Technologies, Inc. Endpoint management system and virtual compute system
US9930103B2 (en) 2015-04-08 2018-03-27 Amazon Technologies, Inc. Endpoint management system providing an application programming interface proxy service
US11681531B2 (en) 2015-09-19 2023-06-20 Microsoft Technology Licensing, Llc Generation and use of memory access instruction order encodings
US11977891B2 (en) 2015-09-19 2024-05-07 Microsoft Technology Licensing, Llc Implicit program order
US9928108B1 (en) 2015-09-29 2018-03-27 Amazon Technologies, Inc. Metaevent handling for on-demand code execution environments
US10042660B2 (en) 2015-09-30 2018-08-07 Amazon Technologies, Inc. Management of periodic requests for compute capacity
US10621524B2 (en) * 2015-11-09 2020-04-14 Dassault Systemes Americas Corp. Exporting hierarchical data from a source code management (SCM) system to a product lifecycle management (PLM) system
US9811434B1 (en) 2015-12-16 2017-11-07 Amazon Technologies, Inc. Predictive management of on-demand code execution
US10754701B1 (en) 2015-12-16 2020-08-25 Amazon Technologies, Inc. Executing user-defined code in response to determining that resources expected to be utilized comply with resource restrictions
US10013267B1 (en) 2015-12-16 2018-07-03 Amazon Technologies, Inc. Pre-triggers for code execution environments
US10067801B1 (en) 2015-12-21 2018-09-04 Amazon Technologies, Inc. Acquisition and maintenance of compute capacity
US10002026B1 (en) 2015-12-21 2018-06-19 Amazon Technologies, Inc. Acquisition and maintenance of dedicated, reserved, and variable compute capacity
US9910713B2 (en) 2015-12-21 2018-03-06 Amazon Technologies, Inc. Code execution request routing
CN107015996A (zh) * 2016-01-28 2017-08-04 阿里巴巴集团控股有限公司 一种资源访问方法、装置及***
CN107025104A (zh) * 2016-02-02 2017-08-08 龙芯中科技术有限公司 内核开发管理***和方法
CN108885568B (zh) * 2016-03-30 2022-01-28 亚马逊技术有限公司 用于通过按需代码执行环境处理数据源内的多个数据项的***和计算机实现的方法
US10891145B2 (en) 2016-03-30 2021-01-12 Amazon Technologies, Inc. Processing pre-existing data sets at an on demand code execution environment
US11132213B1 (en) 2016-03-30 2021-09-28 Amazon Technologies, Inc. Dependency-based process of pre-existing data sets at an on demand code execution environment
US10162672B2 (en) 2016-03-30 2018-12-25 Amazon Technologies, Inc. Generating data streams from pre-existing data sets
US10282229B2 (en) 2016-06-28 2019-05-07 Amazon Technologies, Inc. Asynchronous task management in an on-demand network code execution environment
US10102040B2 (en) 2016-06-29 2018-10-16 Amazon Technologies, Inc Adjusting variable limit on concurrent code executions
US10277708B2 (en) 2016-06-30 2019-04-30 Amazon Technologies, Inc. On-demand network code execution with cross-account aliases
US10203990B2 (en) 2016-06-30 2019-02-12 Amazon Technologies, Inc. On-demand network code execution with cross-account aliases
US9971594B2 (en) * 2016-08-16 2018-05-15 Sonatype, Inc. Method and system for authoritative name analysis of true origin of a file
US10884787B1 (en) 2016-09-23 2021-01-05 Amazon Technologies, Inc. Execution guarantees in an on-demand network code execution system
US10061613B1 (en) 2016-09-23 2018-08-28 Amazon Technologies, Inc. Idempotent task execution in on-demand network code execution systems
US11119813B1 (en) 2016-09-30 2021-09-14 Amazon Technologies, Inc. Mapreduce implementation using an on-demand network code execution system
WO2018111270A1 (en) * 2016-12-15 2018-06-21 Schlumberger Technology Corporation Systems and methods for generating, deploying, discovering, and managing machine learning model packages
KR20180072436A (ko) * 2016-12-21 2018-06-29 엘에스산전 주식회사 프로그램 제공 장치
US10303492B1 (en) 2017-12-13 2019-05-28 Amazon Technologies, Inc. Managing custom runtimes in an on-demand code execution system
US10564946B1 (en) 2017-12-13 2020-02-18 Amazon Technologies, Inc. Dependency handling in an on-demand network code execution system
US10353678B1 (en) 2018-02-05 2019-07-16 Amazon Technologies, Inc. Detecting code characteristic alterations due to cross-service calls
US10572375B1 (en) 2018-02-05 2020-02-25 Amazon Technologies, Inc. Detecting parameter validity in code including cross-service calls
US10831898B1 (en) 2018-02-05 2020-11-10 Amazon Technologies, Inc. Detecting privilege escalations in code including cross-service calls
US10733085B1 (en) 2018-02-05 2020-08-04 Amazon Technologies, Inc. Detecting impedance mismatches due to cross-service calls
US10725752B1 (en) 2018-02-13 2020-07-28 Amazon Technologies, Inc. Dependency handling in an on-demand network code execution system
US10776091B1 (en) 2018-02-26 2020-09-15 Amazon Technologies, Inc. Logging endpoint in an on-demand code execution system
US10853115B2 (en) 2018-06-25 2020-12-01 Amazon Technologies, Inc. Execution of auxiliary functions in an on-demand network code execution system
US10649749B1 (en) 2018-06-26 2020-05-12 Amazon Technologies, Inc. Cross-environment application of tracing information for improved code execution
US11146569B1 (en) 2018-06-28 2021-10-12 Amazon Technologies, Inc. Escalation-resistant secure network services using request-scoped authentication information
US10949237B2 (en) 2018-06-29 2021-03-16 Amazon Technologies, Inc. Operating system customization in an on-demand network code execution system
US11099870B1 (en) 2018-07-25 2021-08-24 Amazon Technologies, Inc. Reducing execution times in an on-demand network code execution system using saved machine states
WO2020051237A1 (en) * 2018-09-04 2020-03-12 Aveva Software, Llc Stream-based composition and monitoring server system and method
US11099917B2 (en) 2018-09-27 2021-08-24 Amazon Technologies, Inc. Efficient state maintenance for execution environments in an on-demand code execution system
US11243953B2 (en) 2018-09-27 2022-02-08 Amazon Technologies, Inc. Mapreduce implementation in an on-demand network code execution system and stream data processing system
US11943093B1 (en) 2018-11-20 2024-03-26 Amazon Technologies, Inc. Network connection recovery after virtual machine transition in an on-demand network code execution system
US10884812B2 (en) 2018-12-13 2021-01-05 Amazon Technologies, Inc. Performance-based hardware emulation in an on-demand network code execution system
US11010188B1 (en) 2019-02-05 2021-05-18 Amazon Technologies, Inc. Simulated data object storage using on-demand computation of data objects
KR102202121B1 (ko) * 2019-03-06 2021-01-13 주식회사 커먼컴퓨터 피투피 클라우드 컴퓨팅 시스템 및 그 시스템에서 소스코드를 실행환경과 연결하고 실행하는 방법
US11861386B1 (en) 2019-03-22 2024-01-02 Amazon Technologies, Inc. Application gateways in an on-demand network code execution system
US11119809B1 (en) 2019-06-20 2021-09-14 Amazon Technologies, Inc. Virtualization-based transaction handling in an on-demand network code execution system
US11159528B2 (en) 2019-06-28 2021-10-26 Amazon Technologies, Inc. Authentication to network-services using hosted authentication information
US11115404B2 (en) 2019-06-28 2021-09-07 Amazon Technologies, Inc. Facilitating service connections in serverless code executions
US11190609B2 (en) 2019-06-28 2021-11-30 Amazon Technologies, Inc. Connection pooling for scalable network services
US11023311B2 (en) 2019-09-27 2021-06-01 Amazon Technologies, Inc. On-demand code execution in input path of data uploaded to storage service in multiple data portions
US11550944B2 (en) 2019-09-27 2023-01-10 Amazon Technologies, Inc. Code execution environment customization system for object storage service
US11023416B2 (en) 2019-09-27 2021-06-01 Amazon Technologies, Inc. Data access control system for object storage service based on owner-defined code
US11106477B2 (en) 2019-09-27 2021-08-31 Amazon Technologies, Inc. Execution of owner-specified code during input/output path to object storage service
US10996961B2 (en) 2019-09-27 2021-05-04 Amazon Technologies, Inc. On-demand indexing of data in input path of object storage service
US11250007B1 (en) 2019-09-27 2022-02-15 Amazon Technologies, Inc. On-demand execution of object combination code in output path of object storage service
US11656892B1 (en) 2019-09-27 2023-05-23 Amazon Technologies, Inc. Sequential execution of user-submitted code and native functions
US11263220B2 (en) 2019-09-27 2022-03-01 Amazon Technologies, Inc. On-demand execution of object transformation code in output path of object storage service
US10908927B1 (en) 2019-09-27 2021-02-02 Amazon Technologies, Inc. On-demand execution of object filter code in output path of object storage service
US11360948B2 (en) 2019-09-27 2022-06-14 Amazon Technologies, Inc. Inserting owner-specified data processing pipelines into input/output path of object storage service
US11055112B2 (en) 2019-09-27 2021-07-06 Amazon Technologies, Inc. Inserting executions of owner-specified code into input/output path of object storage service
US11386230B2 (en) 2019-09-27 2022-07-12 Amazon Technologies, Inc. On-demand code obfuscation of data in input path of object storage service
US11416628B2 (en) 2019-09-27 2022-08-16 Amazon Technologies, Inc. User-specific data manipulation system for object storage service based on user-submitted code
US11394761B1 (en) 2019-09-27 2022-07-19 Amazon Technologies, Inc. Execution of user-submitted code on a stream of data
US10942795B1 (en) 2019-11-27 2021-03-09 Amazon Technologies, Inc. Serverless call distribution to utilize reserved capacity without inhibiting scaling
US11119826B2 (en) 2019-11-27 2021-09-14 Amazon Technologies, Inc. Serverless call distribution to implement spillover while avoiding cold starts
US11714682B1 (en) 2020-03-03 2023-08-01 Amazon Technologies, Inc. Reclaiming computing resources in an on-demand code execution system
CN111479265B (zh) * 2020-03-09 2021-06-18 珠海格力电器股份有限公司 信息传播方法、装置、计算机设备和存储介质
US11188391B1 (en) 2020-03-11 2021-11-30 Amazon Technologies, Inc. Allocating resources to on-demand code executions under scarcity conditions
US11775640B1 (en) 2020-03-30 2023-10-03 Amazon Technologies, Inc. Resource utilization-based malicious task detection in an on-demand code execution system
US10997243B1 (en) 2020-06-30 2021-05-04 Snowflake Inc. Supporting unstructured, semi-structured, and structured files
US11423081B1 (en) * 2020-06-30 2022-08-23 Snowflake Inc. Accessing files in a database stage using a user defined function
US11361026B2 (en) 2020-06-30 2022-06-14 Snowflake Inc. Accessing files in a database stage using a user defined function
CN111984944B (zh) * 2020-08-28 2024-04-19 重庆小雨点小额贷款有限公司 一种源代码处理方法、相关装置及存储介质
US11593270B1 (en) 2020-11-25 2023-02-28 Amazon Technologies, Inc. Fast distributed caching using erasure coded object parts
US11550713B1 (en) 2020-11-25 2023-01-10 Amazon Technologies, Inc. Garbage collection in distributed systems using life cycled storage roots
US11645243B2 (en) 2021-06-07 2023-05-09 Snowflake Inc. Accessing files in a database stage using a user defined function
US11388210B1 (en) 2021-06-30 2022-07-12 Amazon Technologies, Inc. Streaming analytics using a serverless compute system
CN113688285B (zh) * 2021-08-23 2024-05-03 同济大学 一种用于工业互联网标识的信息模型的建模方法及装置
US11968280B1 (en) 2021-11-24 2024-04-23 Amazon Technologies, Inc. Controlling ingestion of streaming data to serverless function executions
US12015603B2 (en) 2021-12-10 2024-06-18 Amazon Technologies, Inc. Multi-tenant mode for serverless code execution
CN114840598B (zh) * 2022-07-04 2022-10-04 好享家舒适智能家居股份有限公司 一种创建运行时数据源并自动切换的方法及***

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2718427B2 (ja) 1988-12-20 1998-02-25 富士通株式会社 大規模知識ベースにおけるデータアクセス方式
US20050138609A1 (en) 2003-12-18 2005-06-23 Kevin Mitchell Method of translating computer program code, communications system and network management entity therefor
JP2007004503A (ja) 2005-06-24 2007-01-11 Mitsubishi Electric Corp プログラム変換方式およびプログラム変換方法およびコード変換プログラム
JP2007133820A (ja) 2005-11-14 2007-05-31 Nec Corp プログラム開発支援装置およびプログラム開発支援方法

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2025131A1 (en) 1989-09-28 1991-03-29 John W. White Portable and dynamic distributed applications architecture
JPH1031603A (ja) * 1996-07-17 1998-02-03 Nec Corp 情報処理システム、クライアント/サーバシステム、およびデータベースアクセス方法
US5920721A (en) * 1997-06-11 1999-07-06 Digital Equipment Corporation Compiler generating functionally-alike code sequences in an executable program intended for execution in different run-time environments
JPH1165832A (ja) * 1997-08-21 1999-03-09 Sony Corp ソースコード変換方法及び記録媒体
JP3067707B2 (ja) * 1997-08-28 2000-07-24 三菱電機株式会社 クライアント/サーバ・プログラム生成方法
JP3292160B2 (ja) * 1998-12-18 2002-06-17 日本電気株式会社 Cobol言語のソースプログラムのコンバージョン方法及び装置並びに記録媒体
US7009980B1 (en) 2000-03-13 2006-03-07 Lucent Technologies Inc. Apparatus and method for automatic port identity discovery in hierarchical heterogenous systems
JP2001306326A (ja) * 2000-04-24 2001-11-02 Sony Corp データ処理システム及びデータ処理方法、並びに、ソフトウェア記憶媒体
US6901409B2 (en) * 2001-01-17 2005-05-31 International Business Machines Corporation Mapping data from multiple data sources into a single software component
JP2002318692A (ja) * 2001-04-19 2002-10-31 Sony Corp インストール支援システム、インストール支援装置、インストール支援方法、インストールを支援するためのプログラムおよびそのプログラムを記録した記録媒体
US6941547B2 (en) * 2001-06-25 2005-09-06 International Business Machines Corporation Apparatus and method for porting applications to different platforms
US6986135B2 (en) * 2001-09-06 2006-01-10 Cognos Incorporated Deployment manager for organizing and deploying an application in a distributed computing environment
KR100922141B1 (ko) 2003-09-15 2009-10-19 아브 이니티오 소프트웨어 엘엘시 데이터 프로파일링 방법 및 시스템
US7590972B2 (en) 2004-10-28 2009-09-15 Cogency Software, Inc. Role-oriented development environment
JP2008538016A (ja) * 2004-11-12 2008-10-02 メイク センス インコーポレイテッド 概念または項目を用いて知識相関を構成することによる知識発見技術
US20060259903A1 (en) * 2005-05-12 2006-11-16 Xerox Corporation Method for creating unique identification for copies of executable code and management thereof
US8789016B2 (en) * 2005-12-29 2014-07-22 Panasonic Corporation Systems and methods for providing user configurable software libraries
US7543282B2 (en) 2006-03-24 2009-06-02 Sun Microsystems, Inc. Method and apparatus for selectively executing different executable code versions which are optimized in different ways
US7814498B2 (en) * 2006-05-01 2010-10-12 Microsoft Corporation Loading application resources
US9158538B2 (en) * 2007-05-21 2015-10-13 International Business Machines Corporation User-extensible rule-based source code modification
US8429645B2 (en) * 2007-08-14 2013-04-23 International Business Machines Corporation Method for optimizing migration of software applications to address needs
CN101968793B (zh) * 2010-08-25 2012-09-05 大唐软件技术股份有限公司 一种基于异构数据源数据核对的方法和***

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2718427B2 (ja) 1988-12-20 1998-02-25 富士通株式会社 大規模知識ベースにおけるデータアクセス方式
US20050138609A1 (en) 2003-12-18 2005-06-23 Kevin Mitchell Method of translating computer program code, communications system and network management entity therefor
JP2007004503A (ja) 2005-06-24 2007-01-11 Mitsubishi Electric Corp プログラム変換方式およびプログラム変換方法およびコード変換プログラム
JP2007133820A (ja) 2005-11-14 2007-05-31 Nec Corp プログラム開発支援装置およびプログラム開発支援方法

Also Published As

Publication number Publication date
EP2754032B1 (en) 2021-04-07
EP2754032A4 (en) 2015-06-24
EP2754032A2 (en) 2014-07-16
WO2013036460A2 (en) 2013-03-14
CN102902529B (zh) 2017-04-12
US20130061208A1 (en) 2013-03-07
JP6457594B2 (ja) 2019-01-23
KR20140060299A (ko) 2014-05-19
JP2017215999A (ja) 2017-12-07
WO2013036460A3 (en) 2013-05-10
JP2014529832A (ja) 2014-11-13
CN102902529A (zh) 2013-01-30
US8863082B2 (en) 2014-10-14

Similar Documents

Publication Publication Date Title
KR101944570B1 (ko) 변형 컨텍스트-인식 데이터 소스 관리
CN114041117A (zh) 用于代码优化的语法图的持续注释
US10942734B2 (en) Software dependency shading
EP3035191B1 (en) Identifying source code used to build executable files
US10353702B2 (en) Source code element signatures
RU2598600C2 (ru) Проецирование собственных интерфейсов прикладного программирования операционной системы в другие языки программирования
KR20160002888A (ko) 애플리케이션 내의 대역외 프레임워크 라이브러리
EP3147783B1 (en) Automatic determination of compiler configuration
US10409567B2 (en) Trimming unused dependencies using package graph and module graph
CN117280318A (zh) 派生许多惯用编程语言接口
EP3147781A1 (en) Wrapper calls identification
KR101798705B1 (ko) 유연성을 갖춘 메타데이터 구성 기법
US9672020B2 (en) Selectively loading precompiled header(s) and/or portion(s) thereof
US10346225B2 (en) Synthesized modules for module renaming
Duldulao et al. Spring Boot and Angular: Hands-on full stack web development with Java, Spring, and Angular
EP3164800B1 (en) Bridging a module system and a non-module system
Yannes The Future of Android with Liquid Development
Čečil Cross-platform Mobile Development
Villela et al. About Static. NET Assembly
Lavieri Mastering Java 11: Develop modular and secure Java applications using concurrency and advanced JDK libraries
Ciliberti et al. Solution Design Using ASP. NET Core MVC
Varghese et al. Building Go Web Applications on Google Cloud
Sterling A Universal Framework for (nearly) Arbitrary Dynamic Languages

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