KR20140124774A - 소프트웨어 코드의 생성 및 캐싱 기법 - Google Patents

소프트웨어 코드의 생성 및 캐싱 기법 Download PDF

Info

Publication number
KR20140124774A
KR20140124774A KR1020147022492A KR20147022492A KR20140124774A KR 20140124774 A KR20140124774 A KR 20140124774A KR 1020147022492 A KR1020147022492 A KR 1020147022492A KR 20147022492 A KR20147022492 A KR 20147022492A KR 20140124774 A KR20140124774 A KR 20140124774A
Authority
KR
South Korea
Prior art keywords
code
source code
software
operations
compiled
Prior art date
Application number
KR1020147022492A
Other languages
English (en)
Other versions
KR101966754B1 (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 KR20140124774A publication Critical patent/KR20140124774A/ko
Application granted granted Critical
Publication of KR101966754B1 publication Critical patent/KR101966754B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/61Installation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management

Landscapes

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

Abstract

본 명세서에 기술된 청구사항의 측면들은 소프트웨어 코드의 생성 및 캐싱에 관한 것이다. 측면들에서, 타겟 디바이스는 설치를 위한 소프트웨어를 수신할 수 있다. 이 소프트웨어는 컴파일되지 않은 소스 코드를 포함할 수 있다. 타겟 디바이스는 이 소프트웨어를 설치할 수 있으며 패키지의 소스 코드가 지속적으로 저장되는 중간 코드 또는 실행가능한 코드로 컴파일될 것임을 나타낼 수 있다. 만약 타겟 디바이스가 소프트웨어가 컴파일되기 전에 소프트웨어를 실행하라는 요청을 수신하면, 타겟 디바이스는 지연 없이 소프트웨어를 컴파일하여 실행할 수 있다. 만약 타겟 디바이스가 소프트웨어가 컴파일된 후에 소프트웨어를 실행하라는 요청을 수신하면, 타겟 디바이스는 컴파일된 코드를 획득하여 이를 실행할 수 있다. 위의 행동은 타겟 디바이스에 대해 원거리에 있는 서버로부터 획득된 스크립팅 코드에도 적용될 수 있다.

Description

소프트웨어 코드의 생성 및 캐싱 기법{GENERATING AND CACHING SOFTWARE CODE}
스크립팅 언어(scripting language)는 다양한 환경에서 찾아볼 수 있다. 예를 들어, 다수의 인터넷 브라우저는 웹페이지가 사용자 입력 또는 다른 데이터에 기초하여 자신의 행동을 커스터마이즈(customize)할 수 있게 하는 스크립팅 언어를 갖는다. 스크립팅 언어는 또한 인터넷 브라우저 외의 환경에서도 발견될 수 있다. 스크립팅 언어가 갖는 한가지 문제점은 특히 스타트업(startup)에서 그리고 아마도 각각의 실행에 있어서 컴파일된 종래의 프로그램과 비교하여 속도가 느릴 수 있다는 것이다.
본 명세서에 청구된 청구사항은 전술된 것과 같은 임의의 단점을 해결하거나 전술된 것과 같은 환경에서만 동작하는 실시예로 한정되지 않는다. 오히려, 이러한 배경기술은 단지 본 명세서에 설명된 일부 실시예가 실시될 수 있는 하나의 예시적인 기술 영역을 나타내도록 제공된 것이다.
간략하게, 본 명세서에 기술된 청구사항의 측면은 소프트웨어 코드의 생성 및 캐싱에 관한 것이다. 측면들에서, 타겟 디바이스는 설치를 위한 소프트웨어를 수신할 수 있다. 이 소프트웨어는 컴파일되지 않은 소스 코드를 포함할 수 있다. 타겟 디바이스는 이 소프트웨어를 설치할 수 있으며 패키지의 소스 코드가 지속적으로 저장되는 중간(intermediate) 코드 또는 실행가능한(executable) 코드로 컴파일될 것임을 나타낼 수 있다. 만약 타겟 디바이스가 소프트웨어가 컴파일되기 전에 소프트웨어를 실행하라는 요청을 수신하면, 타겟 디바이스는 지연 없이 소프트웨어를 컴파일하여 실행할 수 있다. 만약 타겟 디바이스가 소프트웨어가 컴파일된 후에 소프트웨어를 실행하라는 요청을 수신하면, 타겟 디바이스는 컴파일된 코드를 획득하여 이를 실행할 수 있다. 위의 행동은 타겟 디바이스에 대해 원거리에 있는 서버로부터 획득된 스크립팅 코드에도 적용될 수 있다.
본 요약부는 아래의 상세한 설명에서 추가로 설명되는 청구사항의 일부 측면들을 간략하게 식별하도록 제공되었다. 본 요약부는 청구된 청구사항의 기본 특성 또는 중요 특성을 식별하기 위한 것이 아니며, 청구된 청구사항의 범주를 한정하는데에 사용되기 위한 것 또한 아니다.
"본 명세서에 기술된 청구사항"이라는 구절은 내용 상에서 달리 명백하게 표시되지 않는 한 상세한 설명에서 기술된 청구사항을 지칭한다. "측면들"이라는 표현은 "적어도 하나의 측면"으로 해석되어야만 한다. 상세한 설명에 기술된 청구사항들의 측면들을 식별하는 것은, 청구된 청구사항의 중요 특성 또는 기본 특성을 식별하기 위한 것이 아니다.
전술된 측면들과 본 명세서에 기술된 청구사항의 다른 측면들이 예시로서 나타내어졌고 첨부된 도면으로 한정되지 않으며, 첨부됨 도면에서 동일한 참조번호는 유사한 요소를 나타낸다.
도 1은 본 명세서에 기술된 청구사항의 측면들이 포함될 수 있는 예시적인 범용 컴퓨팅 환경을 나타낸 블록도;
도 2는 본 명세서에 기술된 청구사항의 측면들이 동작할 수 있는 시스템의 구성요소들의 예시적인 배치를 나타낸 블록도;
도 3은 본 명세서에 기술된 청구사항의 측면들에 따라 사용될 수 있는 예시적인 데이터 구조를 도시한 도면;
도 4는 본 명세서에 기술된 청구사항의 측면들이 동작할 수 있는 환경의 구성요소들의 예시적인 배치를 나타낸 블록도;
도 5-6은 본 명세서에 기술된 청구사항의 측면들에 따라 발생할 수 있는 예시적인 동작들을 일반적으로 나타낸 순서도.
정의
본 명세서에서 사용된 "포함하는"이라는 표현과 그의 변형어들은 "포함하지만, 이것으로 한정되는 것은 아닌"을 의미하는 제약을 두지 않은(open-ended) 표현으로서 이해되어야 한다. "또는"이라는 표현은 내용 상에서 달리 명백하게 표시되지 않는 한 "및/또는"으로 이해되어야 한다. "기초하여"라는 표현은 "적어도 부분적으로 기초하여"로서 이해되어야 한다. "일 실시예" 및 "실시예"라는 표현은 "적어도 하나의 실시예"로 이해되어야 한다. "다른 실시예"는 "적어도 하나의 다른 실시예"로 이해되어야 한다.
본 명세서에서 사용된 단수형의 단어들은 하나 이상의 해당 아이템 또는 동작을 포괄하는 것이다. 특히, 특허청구범위에서 하나의 아이템을 지칭하는 것은 일반적으로 적어도 하나의 해당 아이템이 존재함을 의미하며, 하나의 동작을 지칭하는 것은 해당 동작의 적어도 하나의 인스턴스가 수행됨을 의미하는 것이다.
본 명세서에서 때때로 "제 1", "제 2", "제 3" 등의 표현이 사용될 수 있다. 추가적인 설명이 없다면 특허청구범위에서 이러한 표현을 사용하는 것은 순서를 적용하기 위한 것이 아니며, 오히려 식별의 목적으로 사용되는 것이다. 예를 들어, "제 1 버전" 및 "제 2 버전"이라는 표현이 반드시 제 1 버전이 맨 처음의 버전이거나 제 2 버전보다 먼저 생성된 버전을 의미하거나 또는 제 1 버전이 제 2 버전보다 먼저 요청 또는 동작되는 버전인 것을 의미하는 것은 아니다. 오히려, 이러한 표현은 서로 다른 버전들을 식별하기 위해 사용된다.
머리말은 단지 편의를 위한 것이며, 소정의 주제에 대한 정보가 해당 주제를 나타내는 머리말을 갖는 섹션 밖에서도 발견될 수 있다.
아래에서 다른 정의들이 명백하게 또는 내포적으로 포함될 수 있다.
예시적인 동작 환경
도 1은 본 명세서에 기술된 청구사항의 측면들이 구현될 수 있는 적절한 컴퓨팅 시스템 환경(100)의 예시를 도시한다. 컴퓨팅 시스템 환경(100)은 단지 적절한 컴퓨팅 환경의 일 예시이며 본 명세서에 기술된 청구사항의 측면들의 용도 또는 기능의 범주에 대한 임의의 제한을 제안하기 위한 것은 아니다. 또한 컴퓨팅 환경(100)이 예시적인 운영 환경(100) 내에 도시된 임의의 하나의 구성요소 또는 구성요소들의 조합에 대한 임의의 의존성 또는 요구사항을 갖는 것으로 해석되어서는 안된다.
본 명세서에 기술된 청구사항의 측면들은 다수의 다른 범용 또는 전용 컴퓨팅 시스템 환경 또는 구성으로 동작가능하다. 본 명세서에 기술된 청구사항의 측면들과 사용하기에 적합할 수 있는 잘 알려진 컴퓨팅 시스템, 환경 또는 구성은 개인 컴퓨터, 서버 컴퓨터, 핸드헬드 또는 랩탑 디바이스, 멀티프로세서 시스템, 마이크로컨트롤러 기반 시스템, 셋톱박스, 프로그램가능한 소비자 전자기기, 네트워크 PC, 미니컴퓨터, 메인프레임 컴퓨터, PDA, 게임 디바이스, 프린터, 셋톱(set-top), 미디어 센터를 포함하는 어플라이언스 또는 그외의 어플라이언스, 자동차 내장형 또는 부착형 컴퓨팅 디바이스, 그외의 모바일 디바이스, 임의의 전술된 시스템 또는 디바이스를 포함하는 분산 컴퓨팅 환경 등을 포함한다.
본 명세서에 기술된 청구사항의 측면들은 컴퓨터에 의해 실행되는 프로그램 모듈과 같은 컴퓨터 실행가능한 명령의 일반적인 맥락으로 기술될 수 있다. 일반적으로, 프로그램 모듈은 특정한 태스크를 수행하거나 특정한 추출 데이터 타입을 구현하는 루틴, 프로그램, 객체, 구성요소, 데이터 구조 등을 포함한다. 본 명세서에 기술된 청구사항의 측면들은 또한 통신 네트워크를 통해 링크된 원격 프로세싱 디바이스에 의해 태스크가 수행되는 분산 컴퓨팅 환경에서 실시될 수도 있다. 분산 컴퓨팅 환경에서, 프로그램 모듈은 메모리 저장 디바이스를 포함하는 로컬 및 원격 컴퓨터 저장 매체 모두에 위치될 수 있다.
도 1을 참조하면, 본 명세서에 기술된 청구사항의 측면들을 구현하는 예시적인 시스템은 컴퓨터(110)의 형태인 범용 컴퓨팅 디바이스를 포함한다. 컴퓨터는 명령을 실행할 수 있는 임의의 전자 디바이스를 포함할 수 있다. 컴퓨터(110)의 구성요소들은 프로세싱 장치(120), 시스템 메모리(130) 및 시스템 메모리를 포함하는 다양한 시스템 구성요소들을 프로세싱 장치(120)에 연결하는 시스템 버스(121)를 포함할 수 있다. 시스템 버스(121)는 메모리 버스 또는 메모리 컨트롤러, 주변기기 버스 및 임의의 다양한 버스 아키텍처를 사용하는 로컬 버스를 포함하는 여러 타입의 버스 아키텍처 중 임의의 버스일 수 있다. 예시로서, 이러한 아키텍처는 산업 표준 아키텍처(ISA) 버스, 마이크로 채널 아키텍처(MCA) 버스, 개선된 ISA(EISA) 버스, 비디오 전자 표준 연합(VESA) 로컬 버스, 메자닌(Mezzanine) 버스로도 알려져 있는 주변 구성요소 상호접속(PCI) 버스, 주변 구성요소 상호접속 확장(PCI-X) 버스, 개선된 그래픽 포트(AGP) 및 PCI 익스프레스(PCIe)를 포함하지만, 이것으로 한정되지는 않는다.
프로세싱 장치(120)는 하드웨어 보안 디바이스(122)로 상호접속될 수 있다. 보안 디바이스(122)는 컴퓨터(110)의 다양한 측면들을 보호하도록 사용될 수 있는 암호 키를 저장 및 생성할 수 있다. 일 실시예에서, 보안 디바이스(122)는 TPM(trusted platform module) 칩, TPM 보안 디바이스 등을 포함할 수 있다.
컴퓨터(110)는 전형적으로 다양한 컴퓨터 판독가능한 매체를 포함한다. 컴퓨터 판독가능한 매체는 컴퓨터(110)에 의해 액세스될 수 있는 임의의 이용가능한 매체일 수 있으며 휘발성 및 비휘발성 매체, 제거가능 및 제거 불가능 매체를 모두 포함한다. 예시로서, 컴퓨터 판독가능한 매체는 컴퓨터 저장 매체 및 통신 매체를 포함할 수 있다.
컴퓨터 저장 매체는 컴퓨터 판독가능한 명령, 데이터 구조, 프로그램 모듈 또는 그외의 데이터와 같은 정보의 저장을 위한 임의의 방법 또는 기술로 구현된 휘발성 및 비휘발성, 제거가능 및 제거 불가능한 매체 모두를 포함한다. 컴퓨터 저장 매체는 RAM, ROM, EEPROM, 고체 상태 스토리지, 플래시 메모리 또는 그외의 메모리 기술, CD-ROM, DVD 또는 그외의 광학 디스크 스토리지, 자기 카세트, 자기 테이프, 자기 디스크 스토리지 또는 그외의 자기 스토리지 디바이스, 또는 원하는 정보를 저장하도록 사용될 수 있고 컴퓨터(110)에 의해 액세스될 수 있는 임의의 다른 매체를 포함한다.
통신 매체는 전형적으로 컴퓨터 판독가능한 명령, 데이터 구조, 프로그램 모듈, 또는 반송파 또는 다른 수송 메커니즘과 같은 변조된 데이터 신호 내의 다른 데이터를 담으며 임의의 정보 전달 매체를 포함한다. "변조된 데이터 신호(modulated data signal)"라는 표현은 신호 내의 정보를 인코딩하는 것과 같은 방식으로 설정 또는 변경된 하나 이상의 자신의 특징을 갖는 신호를 의미한다. 예시로서, 통신 매체는 유선 네트워크 또는 다이렉트 와이어 접속과 같은 유선 매체 및 음향, RF, 적외선 및 그외의 무선 매체와 같은 무선 매체를 포함하지만 이것으로 제한되는 것은 아니다. 전술된 것들의 조합 역시 컴퓨터 판독가능한 매체의 범주 내에 포함되어야만 한다.
시스템 메모리(130)는 판독 전용 메모리(ROM)(131) 및 랜덤 액세스 메모리(RAM)(132)와 같은 휘발성 및/또는 비휘발성 메모리의 형태인 컴퓨터 저장 매체를 포함한다. 예로서 스타트업 동안 컴퓨터(110) 내의 요소들 간의 정보 전송을 돕는 베이직 루틴을 포함하는 베이직 입력/출력 시스템(133)(BIOS)이 전형적으로 ROM(131) 내에 저장된다. RAM(132)은 전형적으로 프로세싱 장치(120)에 의해 즉시 액세스 가능하고/하거나 프로세싱 장치(120) 상에서 현재 동작중인 데이터 및/또는 프로그램 모듈을 포함한다. 예시로서 도 1은 운영 시스템(134), 애플리케이션 프로그램(135), 다른 프로그램 모듈(136) 및 프로그램 데이터(137)를 도시하지만, 이것으로 제한되는 것은 아니다.
컴퓨터(110)는 또한 다른 제거가능/제거 불가능, 휘발성/비휘발성 저장 매체를 포함할 수 있다. 단지 예시로서, 도 1은 제거 불가능한 비휘발성 자기 매체에 기록하거나 그로부터 판독하는 하드 디스크 드라이브(141), 제거가능한 비휘발성 자기 디스크(152)에 기록하거나 그로부터 판독하는 자기 디스크 드라이브(151) 및 CD-ROM 또는 그외의 광학 매체와 같은 제거가능한 비휘발성 광학 디스크(156)에 기록하거나 그로부터 판독하는 광학 디스크 드라이브(155)를 도시한다. 예시적인 운영 환경에서 사용될 수 있는 다른 제거가능/제거불가능, 휘발성/비휘발성 컴퓨터 저장 매체는 자기 테이프 카세트, 플래시 메모리 카드 및 다른 고체 상태 저장 디바이스, DVD, 다른 광학 디스크, 디지털 비디오 테이프, 고체 상태 RAM, 고체 상태 ROM 등을 포함한다. 하드 디스크 드라이브(141)는 인터페이스(140)를 통해 시스템(121) 버스에 접속될 수 있고, 자기 디스크 드라이브(151) 및 광학 디스크 드라이브(155)는 인터페이스(150)와 같은 제거가능한 비휘발성 메모리를 위한 인터페이스에 의해서 시스템 버스(121)에 접속될 수 있다.
도 1에 도시되고 위에서 언급된 드라이브 및 그외 연관된 컴퓨터 저장 매체는 컴퓨터 판독가능한 명령, 데이터 구조, 프로그램 모듈 및 컴퓨터(110)를 위한 그외의 데이터의 저장을 제공한다. 도 1에서, 예를 들어 하드 디스크 드라이브(141)는 운영 시스템(144), 애플리케이션 프로그램(145), 다른 프로그램 모듈(146) 및 프로그램 데이터(147)를 저장하는 것으로 도시되었다. 이러한 구성요소들은 운영 시스템(134), 애플리케이션 프로그램(135), 다른 프로그램 모듈(136) 및 프로그램 데이터(137)와 동일하거나 또는 상이할 수 있음을 인지하여라. 운영 시스템(144), 애플리케이션 프로그램(145), 다른 프로그램 모듈(146) 및 프로그램 데이터(147)는 최소한 이들이 상이한 카피임을 나타내기 위해서 본 명세서에서 상이한 참조번호가 주어졌다.
사용자는 키보드(162) 및 흔히 마우스, 트랙볼, 또는 터치패드로 지칭되는 포인팅 디바이스(161)와 같은 입력 디바이스를 통해 컴퓨터(110)에 커맨드 및 정보를 입력할 수 있다. (도시되지 않은) 다른 입력 디바이스는 마이크로폰, 조이스틱, 게임 패드, 위성 접시, 스캐너, 터치-감지 스크린, 필기용 태블릿, 제스처 캡처 디바이스 등을 포함할 수 있다. 이러한 입력 디바이스 및 그외의 입력 디바이스들은 종종 시스템 버스에 연결된 사용자 입력 인터페이스(160)를 통해서 프로세싱 장치(120)에 접속되지만, 병렬 포트, 게임 포트 또는 USB와 같은 다른 인터페이스 및 버스 구조에 의해서도 접속될 수 있다.
모니터(191) 또는 다른 타입의 디스플레이 디바이스 또한 비디오 인터페이스(190)와 같은 인터페이스를 통해 시스템 버스(121)에 접속된다. 모니터에 더하여, 컴퓨터는 출력 주변기기 인터페이스(195)를 통해 접속될 수 있는 스피커(197) 및 프린터(196)와 같은 다른 주변기기 출력 디바이스를 포함할 수 있다.
컴퓨터(110)는 원격 컴퓨터(180)와 같은 하나 이상의 원격 컴퓨터에 대한 논리적 접속을 이용하여 네트워킹된 환경에서 동작할 수 있다. 원격 컴퓨터(180)는 개인 컴퓨터, 서버, 라우터, 네트워크 PC, 피어 디바이스 또는 다른 공용 네트워크 노드일 수 있으며, 메모리 저장 디바이스(181)만이 도 1에 도시되었지만 전형적으로 컴퓨터(110)에 대해 전술된 다수의 또는 모든 요소들을 포함할 수 있다. 도 1에 도시된 논리적 접속들은 로컬 영역 네트워크(LAN)(171) 및 광역 네트워크(WAN)(173)를 포함하지만, 다른 네트워크도 포함할 수 있다. 이러한 네트워킹 환경은 사무실, 전사적(enterprise-wide) 컴퓨터 네트워크, 인트라넷 및 인터넷에서 매우 흔한 것이다.
LAN 네트워킹 환경에서 사용될 때, 컴퓨터(110)는 네트워크 인터페이스 또는 어댑터(170)를 통해 LAN(171)에 접속된다. WAN 네트워킹 환경에서 사용될 때, 컴퓨터(110)는 모뎀(172) 또는 인터넷과 같이 WAN(173) 상의 통신을 확립하기 위한 다른 수단을 포함할 수 있다. 내부 또는 외부 모뎀일 수 있는 모뎀(172)은 사용자 입력 인터페이스(160) 또는 다른 적절한 메커니즘을 통해 시스템 버스(121)에 접속될 수 있다. 네트워킹된 환경에서, 컴퓨터(110)에 대해 도시된 프로그램 모듈 또는 그의 일부분이 원격 메모리 저장 디바이스에 저장될 수 있다. 예시로서, 도 1은 원격 애플리케이션 프로그램(185)이 메모리 디바이스(181) 상에 존재하는 것으로 도시되었다. 도시된 네트워크 접속은 예시적인 것이며 컴퓨터들 사이의 통신 링크를 확립하기 위한 다른 수단이 사용될 수 있음이 이해될 것이다.
코드 생성 및 캐싱
전술된 바와 같이, 컴파일된 종래의 프로그램과 비교하였을 때 스크립팅 언어는 특히 초기 스타트업에서 사용자에게 느리게 보일 수 있다.
도 2는 본 명세서에 기술된 청구사항의 측면들이 동작할 수 있는 시스템의 구성요소들의 예시적인 배치를 나타낸 블록도이다. 도 2에 도시된 구성요소들은 예시적인 것이며, 필요할 수 있거나 포함될 수 있는 구성요소가 모두 포함된 것임을 의미하는 것은 아니다. 다른 실시예에서, 도 2와 관련하여 기술된 구성요소 및/또는 기능들은 본 명세서에 기술된 청구사항의 측면들의 사상 또는 범주로부터 벗어나지 않고 (도시되거나 도시되지 않은) 다른 구성요소에 포함될 수 있거나 또는 하위구성요소 내에 배치될 수 있다. 일부 실시예에서, 도 2와 관련하여 기술된 구성요소 및/또는 기능들은 복수의 디바이스에 걸쳐 분산될 수 있다.
다시 도 2를 참조하면, 시스템(205)은 스크립팅 구성요소(210), 스토어(220), 통신 메커니즘(225) 및 (도시되지 않은) 다른 구성요소를 포함할 수 있다. 시스템(205)은 하나 이상의 컴퓨팅 디바이스를 포함할 수 있다. 이러한 디바이스는 예를 들어 개인 컴퓨터, 서버 컴퓨터, 핸드헬드 또는 랩탑 디바이스, 멀티프로세서 시스템, 마이크로컨트롤러 기반 시스템, 셋톱박스, 프로그램가능한 소비자 전자기기, 네트워크 PC, 미니 컴퓨터, 메인프레임 컴퓨터, 휴대폰, PDA, 게임 디바이스, 프린터, 셋톱, 미디어 센터 또는 다른 어플라이언스를 포함하는 어플라이언스, 자동차 내장형 또는 부착형 컴퓨팅 디바이스, 다른 모바일 디바이스, 임의의 전술된 시스템 또는 디바이스를 포함하는 분산 컴퓨팅 환경 등을 포함할 수 있다.
시스템(205)이 단일 디바이스를 포함하는 경우에, 시스템(205)으로서의 역할을 하도록 구성될 수 있는 예시적인 디바이스는 도 1의 컴퓨터(110)를 포함한다. 시스템(205)이 복수의 디바이스를 포함하는 경우에, 복수의 디바이스 각각은 유사하게 또는 상이하게 구성된 도 1의 컴퓨터(110)를 포함할 수 있다.
스크립팅 구성요소(210)는 인스톨러(installer)(215), 코드 생성기(216), 캐시 관리자(217), 실행 관리자(218) 및 (도시되지 않은) 그외의 구성요소를 포함할 수 있다. 본 명세서에서 사용되는 "구성요소"라는 표현은 하나의 디바이스 전체 또는 일부분, 하나 이상의 소프트웨어 모듈의 집합 또는 그의 일부분, 하나 이상의 소프트웨어 모듈의 일부 조합 또는 그의 일부분 및 하나 이상의 디바이스 또는 그의 일부분 등을 포함하는 것으로 이해되어야 한다.
통신 메커니즘(225)은 시스템(205)이 다른 엔티티들과 통신하는 것을 가능하게 한다. 예를 들어, 통신 메커니즘(225)은 시스템(205)이 시스템(205) 상에서 캐시(cache)될 수 있는 스크립팅 코드(scripting code) 및/또는 패키지를 획득하기 위해 다른 엔티티와 통신하게 할 수 있다. 통신 메커니즘(225)은 네트워크 인터페이스 또는 어댑터(170), 모뎀(172), 또는 도 1과 관련하여 기술된 바와 같은 통신을 확립하기 위한 임의의 다른 메커니즘일 수 있다.
스토어(220)는 데이터에 대한 액세스를 제공할 수 있는 임의의 저장 매체이다. 본 명세서에서 사용되는 액세스라는 표현은 데이터의 판독, 데이터의 기록, 데이터의 삭제, 데이터의 업데이트, 이들 중 둘 이상을 포함하는 조합 등을 포함할 수 있다. 스토어는 휘발성 메모리(예를 들어, RAM, 인-메모리 캐시 등) 및 비휘발성 메모리(예를 들어, 지속성 스토리지)를 포함할 수 있다.
데이터라는 용어는 하나 이상의 컴퓨터 저장 요소에 의해 나타내어질 수 있는 모든 것을 포함하도록 광범위하게 이해되어야 한다. 논리적으로, 데이터는 휘발성 또는 비휘발성 메모리에서 일련의 1과 0의 숫자들로서 나타내어질 수 있다. 비-이진(non-binary) 저장 매체를 갖는 컴퓨터에서, 데이터는 저장 매체의 능력에 따라 나타내어질 수 있다. 데이터는 숫자, 문자 등과 같은 간단한 데이터 타입, 계층적, 링크 또는 그외의 관련 데이터 타입을 포함하는 서로 다른 타입의 데이터 구조, 복수의 다른 데이터 구조 또는 단순한 데이터 타입을 포함하는 데이터 구조 등으로 조직화될 수 있다. 데이터의 일부 예시는 정보, 프로그램 코드, 프로그램 상태, 프로그램 데이터, 그외의 데이터 등을 포함한다.
스토어(220)는 하드 디스크 스토리지, 다른 비휘발성 스토리지, RAM과 같은 휘발성 메모리, 그외의 스토리지, 이들의 일부 조합 등을 포함할 수 있으며, 복수의 디바이스에 걸쳐 분산될 수 있다. 스토어(220)는 외부 스토어, 내부 스토어일 수 있거나, 또는 시스템(205)에 대해 내부 및 외부인 구성요소를 포함할 수 있다.
스타트업 및 실행 시간을 축소하기 위해서, 메모리 풋프린트(memory footprint)를 감소시키기 위해서, 부당변경(tampering)에 대한 보호를 가능하게 하도록, 또는 그외의 다른 이유로 인해서, 코드 생성기(216)는 소스 코드를 바이트코드 또는 일부 다른 중간 코드 또는 실행가능한 코드로 컴파일할 수 있다. 코드는 컴퓨터가 취해야 할 동작을 나타내는 명령을 포함한다. 코드는 또한 컴퓨터가 취해야 할 동작 외의 정보를 포함하는 데이터, 리소스, 변수, 정의, 관계, 연관성 등을 포함할 수 있다. 예를 들어, 코드는 이미지, 웹페이지, HTML, XML, 그외의 콘텐츠 등을 포함할 수 있다. 실시예에서, 코드는 소프트웨어 프로젝트 내에 포함될 수 있다. 소프트웨어는 컴퓨터가 취해야 할 동작 외의 정보를 포함하는 하나 이상의 코드 부분, 데이터, 리소스, 변수, 정의, 관계, 연관성 등과, 구성 정보 등을 포함하거나 참고할 수 있다.
코드에 의해 표시되는 동작들은 스크립팅 및 비스크립팅 언어, 중간 언어, 어셈블리 언어, 이진 코드, 그외의 언어, 이들의 일부 조합 등을 포함하는 소스 코드 언어로 인코딩될 수 있다.
인스톨러(215)는 시스템(205) 상에 패키지를 설치할 수 있다. 패키지는 하나 이상의 소프트웨어 애플리케이션을 포함할 수 있다. 인스톨러(215)는 설치된 패키지, 패키지가 설치된 타겟 머신, 패키지가 스크립팅 코드를 포함하는지 여부, 또는 다른 기준에 기초하여 사용자 지정 동작(custom action)들이 수행될 수 있게 하는 전개 확장 핸들러(deployment extension handler)를 포함할 수 있다.
일 구현에서, 인스톨러(215)가 스크립팅 코드가 포함된 패키지와 마주치는 경우, 인스톨러(215)는 패키지의 구성요소들에 상응하는 요소들을 패키지의 코드를 사전컴파일하기 위한 큐 또는 다른 데이터 구조에 추가할 수 있다.
코드 생성기(216)는 데이터 구조로부터 요소들을 획득할 수 있으며 각각의 요소에 상응하는 코드로부터 바이트코드, 실행가능한 코드, 또는 일부 다른 코드를 생성할 수 있다. 요소는 스크립트, 파일의 일부분(예를 들어, HTML 페이지 내에 내장된 스크립트), 컴파일된 코드 등을 포함하는 파일을 포함할 수 있다. 단순화를 위해, 바이트코드(bytecode)라는 용어는 본 명세서에서 종종 코드 생성기(216)가 생성하는 코드를 표기하도록 사용된다. 그러나, 코드 생성기(216)가 바이트코드를 생성 및 캐싱하는 것으로 제한되지 않으며 다른 구현에서는 전술된 타입의 코드를 포함하는 다른 타입의 코드를 생성 및 캐싱할 수 있음을 이해해야만 한다.
일 구현에서, 코드 생성기(216)는 패키지가 완전히 설치되고 패키지에 상응하는 요소들이 바이트코드를 생성하기 전에 컴파일을 위해 데이터 구조 내에 배치될 때까지 대기할 수 있다. 다른 구현에서, 코드 생성기(216)는 요소가 데이터 구조 내에서 이용가능해지자마자 또는 소스 코드 모듈이 설치되자마자 바이트코드를 생성하기 시작할 수 있다. 이러한 다른 구현의 일 예시에서, 코드 생성기(216)는 만약 패키지 설치가 실패하면 생성된 바이트코드를 폐기할 수 있다. 다른 예시에서, 코드 생성기(216)는 중단된 시점으로부터 (예를 들어, 전원이 복구되고 머신이 재부팅된 후에) 생성을 재개할 수 있다. 일 구현에서, 코드 생성기(216)는 시스템(205)이 유휴상태일 때(예로서 패키지를 설치하지 않거나 시스템(205)의 프로세싱 대역폭을 소비하는 다른 태스크를 수행하지 않음), 시스템(205)이 (예로서 배터리 전력 대신) 전력선 상에서 동작 중일 때, 하루의 정의된 또는 설정가능한 시간 등에 수행하기 위한 프로세서로서 구현될 수 있다.
본 명세서에서 사용되는 "프로세스"라는 용어 및 그의 변형어들은 하나 이상의 종래의 프로세스, 스레드, 구성요소, 라이브러리, 태스크를 수행하는 객체 등을 포함할 수 있다. 프로세스는 하드웨어, 소프트웨어, 또는 하드웨어와 소프트웨어의 조합으로 구현될 수 있다. 실시예에서, 프로세스는 임의의 동작을 수행할 수 있거나 동작을 수행하는데에 사용되는 임의의 메커니즘을 지칭한다. 프로세스는 복수의 디바이스 상에 분산될 수 있거나 또는 단일 디바이스일 수 있다.
일 구현에서, 코드 생성기(216)는 (예로서, 코드가 마주쳤을 때) 코드를 온 더 플라이(on the fly) 생성하도록 사용될 수도 있다. 예를 들어, 만약 사용자가 소프트웨어를 설치하여 해당 소프트웨어를 포함하는 전체 패키지에 대한 바이트코드가 생성되기 전에 소프트웨어를 실행하길 원하면, 코드 생성기(216)는 필요에 따라 해당 소프트웨어에 대한 코드를 생성하도록 사용될 수 있다. 다시 말하면, 사용자는 사용자가 패키지의 소프트웨어를 실행하도록 허락되기 전에 코드 생성기(216)가 전체 패키지에 대한 바이트코드를 생성하는 것을 기다리도록 요구되지 않는다. 또한, 구성요소에 대한 소스 코드가 변경되고 코드 생성기(216)가 신속하게 해당 구성요소에 대한 바이트코드를 생성하도록 사용될 수 있는 다른 상황들이 존재할 수 있다.
또한, 코드 생성기(216)는 수요에 따라 코드 및 캐시 코드를 컴파일하도록 사용될 수 있다. 예를 들어 인터넷 브라우저 애플리케이션에서, 새로운 코드로의 링크가 동적으로 발견될 수 있다. 예를 들어, 웹 문서는 다운로드되어 실행될 다른 코드로의 링크를 포함할 수 있다. 코드 생성기(216)는 이러한 링크에 의해 인용되는 코드를 컴파일하도록 사용될 수 있으며 코드의 후속 실행을 가속화하기 위해 컴파일된 코드를 캐싱할 수 있다.
코드 생성기(216)는 코드를 생성하기 위해 "샌드 박스(sand box)"로 구현될 수 있거나 또는 이를 사용할 수 있다. 샌드 박스는 액세스할 수 있는 데이터에 대해 제한된 권리를 갖는 환경이다. 일 구현에서, 코드 생성기(216)는 제한된 권리를 갖는 프로세스로서 구현될 수 있다. 프로세스에는 프로세스가 판독하고 기록할 수 있는 바이트코드 파일에 대한 핸들이 전달될 수 있으며, 소스 코드에 대한 판독 전용 액세스가 주어질 수 있다. 보안을 위해서, 프로세스는 전술된 것 외의 리소스에 대한 액세스를 갖지 않을 수 있다.
일 구현에서, 코드 생성기(216)는 가상 환경 내에서 호스팅될 수 있다. 가상 환경은 컴퓨터에 의해 시뮬레이션 또는 에뮬레이션(emulate)되는 환경이다. 가상 환경은 물리적 머신, 운영 시스템, 하나 이상의 인터페이스의 세트, 이들의 일부분, 이들의 조합 등을 시뮬레이션 또는 에뮬레이션할 수 있다. 머신이 시뮬레이션 또는 에뮬레이션되는 경우, 머신은 때때로 가상 머신으로 지칭된다. 가상 머신은 가상 머신 상에서 실행중인 소프트웨어에는 물리적 머신으로 보이는 머신이다. 소프트웨어는 가상 하드 드라이브, 가상 플로피 디스크 등과 같은 가상 저장 디바이스 내의 파일을 저장할 수 있고, 가상 CD로부터 파일을 판독할 수 있으며, 가상 네트워크 어댑터를 통해 통신할 수 있다.
가상 환경은 가상 환경 밖의 데이터 또는 다른 리소스에 대한 액세스가 제한되거나 액세스를 갖지 않을 수 있다. 이렇게, 가상 환경은 코드가 가상 환경의 호스트를 감염시킬 것인지 여부에 대한 걱정 없이 신뢰할 수 없는 코드를 컴파일하기에 적절한 환경을 제공할 수 있다.
파일에 바이트코드를 기록한 후에, 프로세스는 파일에 대한 임의의 수정(modification)이 검출될 수 있도록 전자 서명하거나 또는 다른 방식으로 파일을 "봉인(seal)"할 수 있다. 파일을 봉인하는 것은 당업자에 의해 이해될 수 있는 다수의 암호 및/또는 파일 시스템 형태를 취할 수 있다. 예를 들어 일 구현에서, 파일 시스템은 봉인에 따라 파일에 대한 확장된 속성을 설정할 수 있다. 만약 파일이 그 후에 수정되면, 확장된 속성이 파일이 더 이상 봉인되지 않았음을 나타내도록 변경될 수 있다.
스토어(220)에 바이트코드를 기록하는 것은 본 명세서에서 바이트코드를 캐싱하는 것으로 지칭된다. 캐시 관리자(217)는 스토어(220) 상에 바이트코드를 저장하고 요구에 따라 바이트코드에 대한 액세스를 제공하도록 동작할 수 있다. 캐시 관리자(217)는 바이트코드가 시스템(205)의 재시작 후에 이용가능하도록 바이트코드가 스토어(220) 상에 지속적으로 저장된다고 보장할 수 있다. 캐시 관리자(217)는 또한 바이트코드에 대한 액세스를 가속화하기 위해, 원한다면 메인 메모리, 고속 캐시 메모리, 비디오 메모리, 휘발성 및 비휘발성 메모리를 포함하는 다른 메모리 등에 바이트코드의 카피를 저장할 수 있다.
또한, 본 명세서에서 "파일"이라는 용어가 때때로 사용되었지만, 다른 구현에서는 본 명세서에 기술된 청구사항의 측면들의 사상 또는 범주로부터 벗어나지 않고 바이트코드가 휘발성 및/또는 비휘발성 메모리, 데이터베이스 또는 그의 일부분(예를 들어, 레코드), 또는 일부 다른 스토어에 기록될 수 있다는 것이 이해되어야 한다.
만약 둘 이상의 사용자가 패키지를 설치하면, 패키지에 대한 바이트코드의 오직 하나의 카피 또는 복수의 카피를 스토어(220) 내에 캐싱할 수 있다. 패키지가 둘 이상의 프로세서 아키텍처(예로서, 32비트 및 64비트)를 타겟으로 한다면, 코드 생성기(216)는 각각의 프로세서 아키텍처에 대해 타겟화된 바이트코드를 생성하고 캐싱할 수 있다.
일부 구현에서, 패키지의 바이트코드를 재생성하기 위한 몇몇 트리거(trigger)가 존재할 수 있다. 예를 들어, 만약 바이트코드를 포함하는 파일의 봉인이 파괴되었거나(예를 들어, 부당변경 검출), 저장 매체가 손상되었거나, 또는 다른 데이터가 캐시가 유효하지 않거나 온전하지 않을 수 있다고 나타낸다면, 이는 패키지의 바이트코드가 재생성되는 트리거로서의 역할을 할 수 있다. 이러한 경우에, 만약 실행 관리자(218)가 봉인이 파괴되었다고 결정하면, 실행 관리자(218)는 코드 생성기(216)에 패키지에 대한 바이트코드를 재생성하도록 지시할 수 있다. 코드 생성기(216)는 코드 생성기(216)가 처음으로 바이트코드를 생성했던 것과 유사한 방식으로 (예를 들어, 바이트코드를 생성할 필요성을 나타내는 큐 또는 다른 데이터 구조 내의 패키지의 구성요소들에 상응하는 요소들을 배치함으로써) 바이트코드를 재생성할 수 있다.
다른 예시로서, 만약 바이트코드를 사용하는 환경이 새로운 버전으로 업그레이드되었다면, 이는 바이트코드의 재생성을 트리거링할 수 있다. 예를 들어, 만약 인터넷 브라우저 또는 다른 실행 환경이 상이한 바이트코드 문법 또는 구문론(syntax)을 갖는 새로운 버전으로 업데이트되었다면, 이는 새로운 버전에 적합한 바이트코드의 재생성을 트리거링할 수 있다. 이러한 예시에서, 사용자가 바이트코드와 연관된 소프트웨어를 실행하고자 시도할 때 트리거가 발생할 수 있다. 이는 바이트코드가 이용에 따라 재생성되게 할 수 있으며, 설치된 모든 패키지들에 대한 바이트코드가 한번에 재생성되는 것을 방지할 수 있다.
다른 예시로서, 만약 주기적인 유지보수 태스크가 실행 환경이 상이한 바이트코드 문법 또는 구문론을 갖는 새로운 버전으로 업데이트되었음을 검출하면, 이것이 새로운 버전에 적합한 바이트코드의 재생성을 트리거링할 수 있다.
다른 예시로서, 만약 패키지의 새로운 버전이 설치된다면, 이것이 바이트코드의 재생성을 위한 트리거로서의 역할을 할 수 있다.
다른 예시로서, 만약 바이트코드가 일부 이유로 인해 삭제되면, 이것이 바이트코드의 재생성을 위한 트리거로서의 역할을 할 수 있다.
스토어(220)에서, 일 예시에서 소스 코드 및 상응하는 바이트코드는 도 3에 도시된 바와 같이 저장될 수 있다. 도 3은 본 명세서에 기술된 청구사항의 측면들에 따라 사용될 수 있는 예시적인 데이터 구조를 도시한다. 일 구현에서, 도 3에 도시된 데이터 구조는 데이터 구조에서 입수가능한 소스 코드 파일 및 바이트코드 표현을 나타내는 테이블을 구비할 수 있다. 이러한 테이블은 또한 소스 코드 파일 및 바이트코드 표현이 데이터 구조 내에 위치된 장소를 나타내는 데이터를 포함할 수 있다. 데이터 구조는 본 명세서에 기술된 청구사항의 측면들의 사상 및 범주로부터 벗어나지 않고 파일 내에 저장될 수 있거나 또는 파일로서 나타내어질 수 있거나, 데이터베이스, 또는 다른 스토어 내에 저장될 수 있다.
도 3으로 돌아가면, 데이터 구조(305)는 병치된(collocated) 소스 코드 및 상응하는 바이트코드를 구비할 수 있다. 만약 스토어(220)가 파일 시스템으로서 구현되면, 바이트코드에 액세스하기 위해 필요한 파일 핸들 등의 수를 감소시킬 수 있기 때문에 데이터 구조(305)는 데이터 획득 효율성을 향상시킬 수 있다. 소스 코드가 하나 이상의 웹페이지 등과 상반되게 하나의 패키지 내에 존재하는 경우에, 병치하는 소스 코드 및 상응하는 바이트코드는 디폴트 행동(default behavior)일 수 있다. 이러한 디폴트 행동은 원하는 경우 무시될 수 있다.
다른 구현에서, 스토어(220)가 파일 시스템으로서 구현되는 경우, 패키지의 하나 이상의 구성요소 각각에 대한 별개의 바이트코드 파일이 존재할 수 있다. 일부 시나리오에서는 덜 효율적일 수 있지만, 다른 장점과 용도를 가질 수 있다. 이러한 구현은 예를 들어 소스 코드가 패키지 외부에(예로서, 하나 이상의 웹사이트에) 존재할 수 있는 경우에 및/또는 소스 코드가 동적으로 생성될 수 있는 경우에 사용될 수 있다.
다른 예시로서, 이것은 호스트 또는 사용자가 단일 웹사이트와 연관된 모든 정보를 제거하기 원하는 자연적으로 단절된 경험이 존재할 때 사용될 수 있다.
다른 예시로서, 이것은 브라우저가 주어진 웹사이트에 대한 리소스를 사전에 숙지하고 있는 시나리오에서 사용될 수 있다. 이러한 예시에서, 네트워크 접속이 존재하지 않을 때에도 웹사이트가 사용될 수 있도록 브라우저가 웹사이트의 리소스를 사전-페치(pre-fetch)할 수 있다. 이러한 예시에서, HTML 마크업 내의 페이지에 대한 스크립트 파일에 대한 명백한 레퍼런스(reference)와 마주치지 않았음에도 웹사이트 내의 더 깊은 페이지에 대해 바이트코드가 생성될 수 있다.
단일 파일 내의 소스 코드 및 상응하는 바이트코드를 기대할지 또는 각각의 소스 코드/바이트코드 쌍에 대한 개별적인 파일을 기대할지 여부를 결정하는 것은 해당 패키지를 실행중인 환경에 기초할 수 있다. 만약 환경이 웹 브라우저라면, 캐시 관리자는 각각의 소스 코드 구성요소에 상응하는 바이트코드에 대한 개별적인 파일을 기대할 수 있다. 만약 환경이 애플리케이션 프레임워크 또는 모든 소스 코드 구성요소가 하나의 패키지로부터 왔기 때문에 모든 소스 코드 구성요소가 사전에 알려진 다른 환경(예를 들어, 전술된 것과 같이 사전에 알려진 웹사이트 예시)이라면, 캐시 관리자는 전체 패키지에 대한 바이트코드가 단일 파일 내에 병치될 것으로 기대할 수 있다.
패키지의 모든 소스 코드 구성요소가 데이터 구조(305) 내의 상응하는 바이트코드를 가질 수 있는 것은 아니다. 예를 들어, 다양한 이유로 인해 하나의 패키지의 하나 이상의 구성요소에 대한 바이트코드를 생성하지 않는 것이 바람직할 수도 있다. 이러한 경우에, 소스 코드 및 구성요소(들)에 대한 바이트코드는 데이터 구조(305)로부터 생략될 수 있다.
또한, 데이터 구조(305)는 둘 이상의 패키지 사이의 공유를 위해 맵핑된 메모리일 수 있다. 예를 들어, 일부 경우에서 서로 다른 패키지들이 하나 이상의 동일한 소스 구성요소를 가질 수 있다. 이러한 경우에서, 메모리 맵핑은 메모리 내에 바이트코드의 복수의 카피가 필요하지 않도록 동일한 소스 구성요소에 대한 바이트코드를 공유하도록 활용될 수 있다. 또한, 데이터 구조(305) 내의 바이트코드는 공유를 위해 메모리가 맵핑될 때 변경되지 않도록 판독 전용일 수 있다.
도 2 및 3을 참조하면, 실행 관리자(218)는 실행 코드 내에서 실행 관리자(218)가 파싱(parsing)하는 문서(예를 들어, HTML, XML, 워드 프로세싱, 또는 다른 문서) 내의 소스 코드를 지칭하는 레퍼런스(예를 들어, HTTP 또는 다른 레퍼런스)를 발견할 수 있다. 실행 관리자(218)는 먼저 데이터 구조(305)를 컨설팅함으로써 레퍼런스에 상응하는 바이트코드의 현재 버전이 캐시 내에 존재하는지 찾고자 확인할 수 있다. 만약 바이트코드가 캐시 내에 존재한다면, 실행 관리자(218)는 실행을 위한 바이트코드를 획득할 수 있다. 만약 바이트코드가 캐시 내에 존재하지 않으면, 실행 관리자(218)는 소스 코드 위치로부터 소스 코드를 획득할 수 있으며 지연 없이 (예를 들어, 코드 생성기(216)가 큐 내에서 발견된 임의의 중요한 컴파일 요청을 완료하기를 기다리지 않고) 소스 코드가 컴파일 및 실행되게 할 수 있다.
일 구현에서, 소스 코드에 대한 바이트코드는 소스 코드에 대한 병렬 디렉토리 내에 존재할 수 있다. 예를 들어, 만약 소스 코드가 C:\PackageName\SourceCode\sourcecodename.scriptfile 내에 존재하면, 만약 바이트코드가 존재한다면 바이트코드는 C:\PackageName\SomeName\bytecodename.bytecodefile 내에 존재할 수 있다.
다른 구현에서, 소스 코드는 원격 디바이스 상에 존재할 수 있다.
도 4는 본 명세서에 기술된 청구사항의 측면들이 동작할 수 있는 환경의 구성요소들의 예시적인 배치를 나타낸 블록도이다. 도 4에 도시된 구성요소들은 예시적이며 필요할 수 있거나 포함될 수 있는 구성요소가 모두 포함된 것임을 의미하는 것은 아니다. 다른 실시예에서, 도 4와 관련하여 기술된 구성요소 및/또는 기능들은 본 명세서에 기술된 청구사항의 측면들의 사상 또는 범주로부터 벗어나지 않고 (도시되거나 도시되지 않은) 다른 구성요소에 포함될 수 있거나 또는 하위구성요소 내에 배치될 수 있다. 일부 실시예에서, 도 4와 관련하여 기술된 구성요소 및/또는 기능들은 복수의 디바이스에 걸쳐 분산될 수 있다.
도 4를 참조하면, 환경(405)이 타겟 디바이스(410), 네트워크(415), 코드 서버(417) 및 (도시되지 않은) 다른 구성요소를 포함할 수 있다. 타겟 디바이스(410) 및 코드 서버(417)는 하나 이상의 컴퓨팅 디바이스를 포함할 수 있다. 이러한 디바이스는 예를 들어 개인 컴퓨터, 서버 컴퓨터, 핸드헬드 또는 랩탑 디바이스, 멀티프로세서 시스템, 마이크로컨트롤러 기반 시스템, 셋톱박스, 텔레비전, 프로그램가능한 소비자 전자기기, 네트워크 PC, 미니컴퓨터, 메인프레임 컴퓨터, 휴대폰, PDA, 게임 디바이스, 프린터, 셋톱, 미디어 센터 또는 다른 어플라이언스를 포함하는 어플라이언스, 자동차 내장형 또는 부착형 컴퓨팅 디바이스, 그외의 모바일 디바이스, 임의의 전술된 시스템 또는 디바이스를 포함하는 분산된 컴퓨팅 환경 등을 포함할 수 있다. 타겟 디바이스(410) 또는 코드 서버(417)로서 작동하도록 구성될 수 있는 예시적인 디바이스는 도 1의 컴퓨터(110)를 포함한다.
실시예에서, 네트워크(415)는 인터넷을 포함할 수 있다. 실시예에서, 네트워크(415)는 하나 이상의 로컬 영역 네트워크, 광역 네트워크, 직접 접속, 가상 접속, 사설 네트워크, 가상 사설 네트워크, 이들의 일부 조합 등을 포함할 수 있다.
코드 서버(417)는 타겟 디바이스(410)에 코드를 제공할 수 있다. 일 실시예에서, 코드 서버(417)는 웹 서버일 수 있다. 다른 실시예에서, 코드 서버(417)는 코드를 포함하는 조직화의 사설 네트워크 내부의 머신일 수 있다. 다른 실시예에서, 코드 서버(417)는 타겟 디바이스(410)에 소스 코드를 제공할 수 있는 임의의 디바이스를 포함할 수 있다.
타겟 디바이스(410)는 코드가 실행할 수 있는 디바이스이다. 타겟 디바이스(410)는 컴파일 환경(compilation environment)(420), 실행 환경(425), 인스톨러(430) 및 스토어(435)를 포함할 수 있다. 인스톨러(430)는 도 2의 인스톨러(215)와 유사하게 구현되고 동작할 수 있으며 스토어(435)는 도 2의 스토어(220)와 유사하게 구현되고 동작할 수 있다.
컴파일 환경(420)은 소스 코드가 바이트코드로 컴파일될 수 있는 제한-권리 환경을 포함할 수 있다. 일 실시예에서, 컴파일 환경(420)은 전술된 바와 같은 가상 환경을 포함할 수 있다. 다른 실시예에서, 컴파일 환경(420)은 전술된 바와 같은 상이한 제한-권리 환경을 포함할 수 있다.
실행 환경(425)은 패키지의 소프트웨어가 실행되는 환경을 포함할 수 있다. 일 구현에서 실행 환경(425)은 인터넷 브라우저를 포함할 수 있다. 다른 구현에서, 실행 환경(425)은 소스 코드를 포함할 수 있는 패키지의 소프트웨어를 실행할 수 있는 호스트 프로세스를 포함할 수 있다.
도 5-6은 본 명세서에 기술된 청구사항의 측면들에 따라 발생할 수 있는 예시적인 동작들을 일반적으로 나타낸 순서도이다. 설명의 단순화를 위해서, 도 5-6와 관련하여 기술된 방법은 일련의 동작들로 도시되고 설명되었다. 본 명세서에 기술된 청구사항의 측면들이 도시된 동작들 및/또는 동작들의 순서에 의해 제한되지 않음을 이해해야 한다. 일 실시예에서, 동작들은 아래에 기술된 순서대로 발생한다. 그러나 다른 실시예에서, 동작들은 동시에, 다른 순서로, 및/또는 본 명세서에 제시되거나 기술되지 않은 다른 동작들과 함께 발생할 수 있다. 또한, 도시된 동작들 모두가 본 명세서에 기술된 청구사항의 측면들에 따라 방법을 구현하기 위해 요구되는 것은 아니다. 또한, 당업자는 방법론이 이와 달리 상태 다이어그램을 통한 일련의 상호관련된 상태로서 또는 이벤트로서 나타내어질 수 있음을 이해할 것이다.
도 5를 참조하면, 블록(505)에서 동작들이 시작된다.
블록(510)에서, 타겟 디바이스 상에서 설치하기 위한 소프트웨어의 소스 코드를 포함하는 패키지가 수신된다. 예를 들어, 도 4를 참조하면, 타겟 디바이스(410)는 코드 서버(417)로부터 패키지를 획득할 수 있다. 다른 예시로서, 인스톨러(430)는 스토어(435) 상에 존재하는 패키지를 설치하도록 지시될 수 있다.
블록(515)에서, 패키지는 타겟 디바이스 상에 설치된다. 예를 들어, 도 2를 참조하면, 인스톨러(215)는 스토어(220) 상에 패키지를 설치할 수 있다.
블록(520)에서, 표시자가 큐 등과 같은 데이터 구조 내에 배치된다. 데이터 표시자는 패키지의 소스 코드가 바이트코드로 컴파일될 것임을 나타낸다. 패키지 내의 소스 코드의 각각의 파일에 대한 데이터 구조 내에 배치된 개별적인 표시자가 존재할 수도 있다. 예를 들어, 도 2를 참조하면, 인스톨러(215)는 스토어(220)에 저장된 데이터 구조 내에 하나 이상의 플래그를 배치할 수 있다.
블록(525)에서, 처음에 소스 코드를 컴파일하기 위한 동작들이 패키지의 소프트웨어를 실행하라는 요청이 동작들의 시작 또는 완료 이전에 수신되지 않는 한 수행된다. 소스 코드를 컴파일하기 위한 동작들은 예를 들어:
1. 데이터 구조를 통해 반복하고 컴파일이 필요하다고 나타내는 표시자(들)를 찾는 단계;
2. 위의 단계 1에서 발견된 각각의 해당 소스 코드 요소를 바이트코드 또는 일부 다른 코드로 컴파일하는 것을 포함할 수 있다.
예를 들어 도 2를 참조하면, 코드 생성기(216)는 데이터 구조를 통해 반복하고 데이터 구조 내에서 발견된 플래그에 대한 소스 코드 파일을 컴파일할 수 있다. 다른 예시로서, 코드 생성기(216)는 파일들의 리스트를 통해 반복하고 소정의 확장자를 갖는 임의의 파일을 컴파일할 수 있다(예를 들어, ".js" 또는 소스 파일을 나타내는 다른 확장자).
블록(530)에서, 컴파일된 코드는 비휘발성 메모리 내에서 지속될 수 있다. 예를 들어 도 2를 참조하면, 캐시 관리자(217)는 스토어(220) 내에 코드 생성기(216)에 의해 생성된 코드를 저장할 수 있다. 또한 코드는 신속한 로딩 및 실행을 제공하기 위해 RAM 또는 인-메모리 캐시와 같은 휘발성 메모리 내에도 저장될 수 있다.
블록(535)은 패키지의 소프트웨어를 실행하라는 요청이 동작들(520-530) 전에, 중간에, 또는 후에 발생할 수 있음을 나타내기 위해서 동작들(520-530) 옆에 배치되었다. 만약 이러한 요청이 수신되면, 다른 동작들이 동작들(520-530)을 시작 또는 완료하기 이전에 수행될 수 있다. 예를 들어, 만약 이러한 요청이 블록(520-530)의 동작들을 시작 또는 완료하기 이전에 수신되면, 소스 코드가 신속하게 컴파일 및 실행될 수 있다. 이러한 요청이 수신되었을 때 발생할 수 있는 다른 동작들이 도 6과 관련하여 기술되었다.
블록(540)에서, 만약 존재한다면 다른 동작들이 수행될 수 있다. 예를 들어, 재생성 트리거링 이벤트가 수신될 수 있다. 이에 응답하여, 블록(520-530)의 동작들이 (만약 소스 코드가 변경되었다면) 상이한 소스 코드와 상이한 소스 코드로부터 컴파일된 상이한 제 2 코드와 함께 잠재적으로 재수행될 수 있다.
이제 도 6을 참조하면, 블록(605)에서 동작들이 시작된다.
블록(610)에서, 소스 코드를 포함하는 소프트웨어를 실행하라는 요청이 수신된다. 예를 들어 도 2를 참조하면, 실행 관리자(218)는 스토어(220) 상에 설치된 패키지의 소프트웨어를 실행하라는 요청을 수신한다.
블록(615)에서, 코드가 이미 컴파일되어 비휘발성 스토리지 상에 저장되었는지 여부에 대한 결정이 이루어진다. 만약 그렇다면, 동작들이 블록(640)에서 계속되고, 그렇지 않다면 동작들은 블록(620)에서 계속된다. 예를 들어 도 2를 참조하면, 실행 관리자(218)가 패키지가 이미 컴파일되어 스토어(220) 상에 저장되었는지 여부를 결정하기 위해 캐시 관리자(217)를 이용한다.
소스 코드가 이미 컴파일되었는지 여부를 결정하는 것은 비휘발성 스토리지의 알려진 위치 내의 컴파일된 코드를 확인하는 것을 포함할 수 있다. 알려진 위치는 패키지의 네임 또는 다른 식별자에 해당할 수 있다. 예를 들어, 알려진 위치는 패키지 뒤에 명명된 디렉토리일 수 있거나 또는 디렉토리의 파생 디렉토리일 수 있다. 다른 예시로서, 알려진 위치는 만약 존재한다면 컴파일된 코드가 코드에 대해 위치된 장소를 나타내는 데이터 구조 내의 위치일 수 있다. 다른 예시로서, 알려진 위치는 소스 위치가 네트워크 상에서 도달가능한 소스 코드의 소스 위치(예로서, 코드 서버)를 식별하는 레퍼런스로부터 파생된 위치일 수 있다. 또 다른 예시로서, 소스 코드가 이미 컴파일되었는지 여부를 결정하는 것은 패키지에 대한 소스 코드와 패키지에 대한 바이트코드를 병치하는 파일 내에 저장된 데이터 구조를 확인하는 것을 포함할 수 있다. 데이터 구조는 제 2 코드가 이미 생성되어 파일 내에 저장되었는지 여부를 나타낼 수 있다.
블록(620)에서, 소스 코드가 획득된다. 예를 들어 도 2를 참조하면, 코드 생성기(216)가 스토어(220)로부터 소스 코드를 획득한다.
블록(625)에서, 바이트코드(또는 다른 코드)가 소스 코드로부터 생성된다. 예를 들어 도 2를 참조하면, 코드 생성기(216)는 바이트코드, 머신 실행가능한 코드, 또는 위에서 획득된 소스 코드로부터의 일부 다른 중간 코드를 생성한다.
블록(630)에서, 코드(또는 실행가능한 코드 또는 다른 중간 코드와 같은 코드로부터 파생된 코드)가 실행된다. 예를 들어 도 2를 참조하면, 실행 관리자(218)가 위에서 생성된 코드를 실행한다.
블록(635)에서, 코드는 비휘발성 스토리지로 지속된다. 블록(635)에 의해 나타내어진 동작은 전술된 동작들과 함께 발생할 수 있거나 또는 이후의 기간에 수행될 수 있다. 예를 들어 도 2 및 3을 참조하면, 코드 생성기(216)는 데이터 구조(305) 내의 패키지에 대한 코드를 병치하고 소프트웨어의 후속 실행에서 사용하기 위해 스토어(220) 상에 데이터 구조(305)를 저장하도록 캐시 관리자(217)를 이용할 수 있다. 다른 예시로서, 이후의 시간에 코드 생성기(216)는 소스 코드를 재획득하여 컴파일된 코드를 재생성하고 컴파일된 코드를 스토어(220) 상에 저장할 수 있다.
블록(640)에서, 만약 코드가 이미 컴파일되었다면, 컴파일된 코드가 획득된다. 예를 들어 도 2를 참조하면, 실행 관리자(218)가 캐시 관리자(217)로부터 바이트코드를 획득할 수 있다.
블록(645)에서, 획득된 코드(또는 이진 코드와 같은 코드로부터 파생된 코드)가 실행된다. 예를 들어 도 4를 참조하면, 코드는 실행 환경(425) 내에서 실행될 수 있다.
블록(650)에서, 만약 다른 동작들이 존재한다면 이들이 수행될 수 있다. 예를 들어, 바이트코드를 포함하는 파일은 메모리 맵핑될 수 있으며 메모리 맵핑을 통해서 복수의 프로세스와 공유될 수 있다.
다른 예시로서, 다른 동작들은 컴파일된 코드가 생성된 후에 변경되었는지 여부를 확인하고 만약 그렇다면 (오리지널 소스 코드와는 상이할 수 있는) 소스 코드를 재획득하고, 소스 코드를 다시 컴파일하며, 소프트웨어의 후속 실행에서 사용하기 위해 컴파일된 코드를 비휘발성 스토리지 내에 저장하는 것을 포함할 수 있다.
전술된 상세한 설명으로부터 알 수 있는 바와 같이, 측면들은 소프트웨어 코드를 생성 및 캐싱하는 것과 관련하여 기술되었다. 본 명세서에 기술된 청구사항의 측면들이 다양한 수정사항 및 대안적인 구성을 허용할 수 있지만, 본 발명의 설명된 실시예들이 도면에 도시되었으며 위에서 상세하게 기술되었다. 그러나, 청구된 청구사항의 측면들을 개시된 특정한 형태로 제한하려는 의도는 없으며, 그 반대로 본 명세서에 기술된 청구사항의 다양한 측면들의 사상 및 범주 내에 포함되는 모든 수정사항, 대안적인 구성 및 동등물을 포함한다.

Claims (10)

  1. 컴퓨터에 의해서 적어도 부분적으로 구현되는 방법으로서,
    타겟 디바이스에 설치하기 위한 소프트웨어의 소스 코드를 포함하는 패키지를 수신하는 단계와,
    상기 타겟 디바이스에 상기 패키지를 설치하는 단계와,
    상기 소스 코드를 처음에 컴파일하기 위한 제 1 세트의 동작들을 시작 또는 완료하기 전에 상기 소프트웨어를 실행하라는 요청이 수신되지 않는 한, 상기 소프트웨어를 실행하기에 앞서 상기 제 1 세트의 동작들을 수행하는 단계를 포함하되,
    상기 제 1 세트의 동작들은,
    상기 소스 코드를 제 2 코드로 컴파일하는 단계와,
    상기 제 2 코드를 비휘발성 메모리 내에 지속시키는 단계
    를 포함하는
    방법.
  2. 제 1 항에 있어서,
    상기 제 1 세트의 동작들을 시작 또는 완료하기 이전에 상기 소프트웨어를 실행하라는 요청이 수신되면 상기 제 1 세트의 동작들을 완료하기 전에 제 2 세트의 동작들을 수행하는 단계를 더 포함하되,
    상기 제 2 세트의 동작들은 상기 타겟 디바이스 상에서 상기 소스 코드 또는 그로부터 파생된 실행가능한 코드를 실행하는 단계를 포함하는
    방법.
  3. 제 1 항에 있어서,
    상기 제 1 세트의 동작들은 둘 이상의 패키지를 실행하는 프로세스를 위해 상기 제 2 코드를 공유하도록 비휘발성 메모리 내의 상기 제 2 코드를 메모리 맵핑(memory mapping)하는 단계를 더 포함하는
    방법.
  4. 제 1 항에 있어서,
    상기 소스 코드가 상기 타겟 디바이스에 대한 제 2 코드로 컴파일될 것임을 나타내는 표시자를 데이터 구조 내에 배치하는 단계 및 상기 데이터 구조 내에서 상기 표시자를 찾는 단계를 더 포함하며,
    상기 소스 코드를 상기 제 2 코드로 컴파일하는 단계는 상기 데이터 구조 내에서 상기 표시자를 발견한 것에 응답하여 수행되는
    방법.
  5. 제 1 항에 있어서,
    재생성 트리거링 이벤트의 표시를 수신하는 단계와, 그에 응답하여 잠재적으로 상이한 소스 코드 및 상기 상이한 소스 코드로부터 컴파일된 상이한 제 2 코드로 상기 제 1 세트의 동작들을 재수행하는 단계를 더 포함하는
    방법.
  6. 컴퓨터 실행가능한 명령어들을 포함하는 컴퓨터 저장 매체로서,
    상기 컴퓨터 실행가능한 명령어들이 실행되면,
    소스 코드를 포함하는 소프트웨어를 실행하라는 요청을 수신하는 단계와,
    상기 요청에 응답하여, 제 2 코드가 상기 소스 코드로부터 이미 생성되어 비휘발성 스토리지 내에 저장되었는지 여부를 판정하는 단계와,
    상기 제 2 코드가 상기 요청을 수신하기에 앞서 이미 생성되었다면,
    상기 제 2 코드를 획득하고,
    상기 제 2 코드 또는 그로부터 파생된 코드를 실행하는 것
    을 포함하는 제 1 세트의 동작들을 수행하는 단계와,
    상기 제 2 코드가 상기 요청을 수신하기에 앞서 이미 생성되지 않았다면,
    상기 소스 코드를 획득하고,
    상기 소스 코드로부터 상기 제 2 코드를 생성하고,
    상기 제 2 코드 또는 그로부터 파생된 코드를 실행하는 것
    을 포함하는 제 2 세트의 동작들을 수행하는 단계와,
    상기 제 2 코드가 상기 요청을 수신하기에 앞서 이미 생성되지 않았다면,
    상기 소프트웨어의 후속 실행에서 사용하기 위해 상기 제 2 코드를 상기 비휘발성 스토리지 내에 저장하는 것
    을 포함하는 제 3 세트의 동작들을 수행하는 단계
    를 수행하는
    컴퓨터 저장 매체.
  7. 제 6 항에 있어서
    상기 제 3 세트의 동작들을 수행하는 단계는,
    상기 소스 코드를 재획득하고,
    상기 소스 코드로부터 상기 제 2 코드를 재생성하는 것
    을 더 포함하는
    컴퓨터 저장 매체.
  8. 제 6 항에 있어서
    상기 컴퓨터 실행가능 명령어들은
    상기 제 2 코드가 생성된 후에 수정되었는지 여부를 확인하는 단계와,
    상기 제 2 코드가 생성된 후에 수정되었다면,
    상기 소스 코드를 재획득하고,
    상기 소스 코드로부터 상기 제 2 코드를 재생성하며,
    상기 소프트웨어의 후속 실행에서 사용하기 위해 상기 제 2 코드를 상기 비휘발성 스토리지 내에 저장하는 동작들을 더 수행하는
    컴퓨터 저장 매체.
  9. 컴퓨팅 환경 내의 시스템으로서,
    소프트웨어의 소스 코드를 포함하는 패키지의 데이터를 저장하도록 동작하는 스토어와,
    상기 스토어 상에 상기 패키지를 설치하도록 동작하고, 또한 상기 소스 코드가 제 2 코드로 컴파일될 것임을 나타내기 위해 데이터 구조를 업데이트하도록 동작하는 인스톨러(istaller)와,
    상기 소스 코드를 식별하기 위해 상기 데이터 구조를 검사하고 상기 소스 코드를 상기 제 2 코드로 컴파일하도록 동작하는 코드 생성기와,
    상기 스토어 상에 상기 제 2 코드를 지속적으로 저장하고 상기 스토어 상의 상기 제 2 코드에 대한 액세스를 제공하도록 동작하는 캐시(cache) 관리자와,
    상기 소프트웨어를 실행하라는 요청을 수신하고 상기 코드 생성기가 상기 소스 코드를 상기 제 2 코드로 이미 컴파일했는지 여부를 판정하도록 동작하는 실행 관리자를 포함하되,
    상기 실행 관리자는,
    상기 소스 코드를 상기 제 2 코드로 이미 컴파일하였다고 판정하면,
    상기 제 2 코드를 획득하고,
    상기 제 2 코드 또는 그로부터 파생된 코드를 실행하는 것
    을 포함하는 동작들을 수행하고,
    상기 소스 코드를 상기 제 2 코드로 이미 컴파일하지 않았다고 판정하면,
    상기 소스 코드를 획득하고,
    상기 소스 코드가 상기 제 2 코드로 컴파일되게 하며,
    상기 소스 코드 또는 그로부터 파생된 코드를 실행하는 것
    을 포함하는 동작들을 수행하도록 동작하는
    시스템.
  10. 제 9 항에 있어서,
    상기 실행 관리자는 또한 상기 요청이 수신되기 전에 상기 코드 생성기가 상기 소스 코드를 상기 제 2 코드로 이미 컴파일하지 않았다면 지연 없이 상기 제 2 코드가 생성되도록 동작하는
    시스템.
KR1020147022492A 2012-02-13 2013-02-04 소프트웨어 코드의 생성 및 캐싱 기법 KR101966754B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/371,479 US9110751B2 (en) 2012-02-13 2012-02-13 Generating and caching software code
US13/371,479 2012-02-13
PCT/US2013/024559 WO2013122758A1 (en) 2012-02-13 2013-02-04 Generating and caching software code

Publications (2)

Publication Number Publication Date
KR20140124774A true KR20140124774A (ko) 2014-10-27
KR101966754B1 KR101966754B1 (ko) 2019-04-08

Family

ID=48946742

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020147022492A KR101966754B1 (ko) 2012-02-13 2013-02-04 소프트웨어 코드의 생성 및 캐싱 기법

Country Status (11)

Country Link
US (3) US9110751B2 (ko)
EP (1) EP2815309B1 (ko)
JP (1) JP6195849B2 (ko)
KR (1) KR101966754B1 (ko)
CN (1) CN104137057B (ko)
AU (1) AU2013219875B2 (ko)
BR (1) BR112014019783B1 (ko)
CA (1) CA2861426C (ko)
MX (1) MX336964B (ko)
RU (1) RU2646329C2 (ko)
WO (1) WO2013122758A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190038494A (ko) * 2019-03-05 2019-04-08 (주) 피플아이 패키지 소프트웨어 생성 장치

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9110751B2 (en) 2012-02-13 2015-08-18 Microsoft Technology Licensing, Llc Generating and caching software code
US9207914B2 (en) 2013-12-20 2015-12-08 Microsoft Technology Licensing, Llc Execution guards in dynamic programming
US9104434B2 (en) 2013-12-20 2015-08-11 Microsoft Technology Licensing, Llc Property accesses in dynamically typed programming languages
US9442707B2 (en) * 2014-06-25 2016-09-13 Microsoft Technology Licensing, Llc Incremental whole program compilation of code
US9772824B2 (en) * 2015-03-25 2017-09-26 International Business Machines Corporation Program structure-based blocking
US9811324B2 (en) * 2015-05-29 2017-11-07 Google Inc. Code caching system
US10055208B2 (en) 2015-08-09 2018-08-21 Oracle International Corporation Extending a virtual machine instruction set architecture
US9690360B2 (en) * 2015-08-13 2017-06-27 Intel Corporation Technologies for discontinuous execution by energy harvesting devices
US9696973B1 (en) * 2016-02-24 2017-07-04 Semmle Limited Compilation cache with imports scanner
CN108304189B (zh) * 2016-08-29 2021-03-12 迈普通信技术股份有限公司 多镜像设备软件编译方法、装置及设备
US10311217B2 (en) * 2016-12-09 2019-06-04 Microsoft Technology Licensing, Llc Application piracy prevention with secure enclave protection of automatically modularized functions
JP2018101240A (ja) * 2016-12-20 2018-06-28 株式会社ミロク情報サービス キャッシュ管理プログラム、キャッシュ管理装置及びキャッシュ管理方法
JP7030426B2 (ja) * 2017-05-31 2022-03-07 キヤノン株式会社 画像形成装置及びその制御方法、並びにプログラム
CN107341007B (zh) * 2017-06-20 2020-08-11 深圳创维-Rgb电子有限公司 显示终端及其定时开机方法、计算机可读存储介质
US10749740B2 (en) * 2017-10-31 2020-08-18 Hewlett Packard Enterprise Development Lp Deploying network-based cloud platforms on end equipment
US10606613B2 (en) 2018-05-31 2020-03-31 Bank Of America Corporation Integrated mainframe distributed orchestration tool
WO2020013724A1 (ru) * 2018-07-11 2020-01-16 Михаил Сергеевич ГЕРМАН Способ управления данными веб-сайта
CN108984183A (zh) * 2018-08-28 2018-12-11 郑州云海信息技术有限公司 一种软件跨地域构建方法、装置、设备及存储介质
KR102663196B1 (ko) * 2018-11-16 2024-05-07 삼성전자주식회사 사용자 단말장치, 서버, 사용자 단말장치의 제어방법 및 서버의 제어방법
US11150915B2 (en) 2019-09-13 2021-10-19 International Business Machines Corporation Deferred bytecode class verification in managed runtime environments
CN110990019B (zh) * 2019-11-20 2023-05-02 腾讯音乐娱乐科技(深圳)有限公司 一种Java类分析方法、装置、存储介质及电子设备
US11403075B2 (en) 2019-11-25 2022-08-02 International Business Machines Corporation Bytecode verification using class relationship caching
FR3105854B1 (fr) * 2019-12-31 2024-07-19 St Microelectronics Rousset Système embarqué
FR3105853B1 (fr) 2019-12-31 2023-01-06 Proton World Int Nv Système embarqué
CN111770170B (zh) * 2020-06-29 2023-04-07 北京百度网讯科技有限公司 请求处理方法、装置、设备和计算机存储介质
CN112346734B (zh) * 2020-11-06 2024-06-25 杭州和利时自动化有限公司 一种编译验证方法、装置、设备及计算机可读存储介质
US11829751B1 (en) * 2020-12-23 2023-11-28 Synopsys, Inc. System and method for automatically capturing source code and associated artifacts for static analysis
CN113326046B (zh) * 2021-05-26 2023-09-26 网易(杭州)网络有限公司 获取编译时长的方法和装置
CN113791770B (zh) * 2021-11-15 2022-06-21 北京壁仞科技开发有限公司 代码编译器、代码编译方法、代码编译系统和计算机介质
CN117130618B (zh) * 2023-06-13 2024-07-09 东信和平科技股份有限公司 智能卡可执行文件的增量编译方法、装置、设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004528626A (ja) * 2001-02-02 2004-09-16 オープンティブイ・インコーポレーテッド インタラクティブ・テレビジョンのインタープリタ言語のコンパイルの方法および装置
US20050055686A1 (en) * 2003-09-08 2005-03-10 Microsoft Corporation Method and system for servicing software
KR20060070412A (ko) * 2004-12-20 2006-06-23 마이크로소프트 코포레이션 소프트웨어 셋업을 위한 언어-중립 및 언어-특정 설치패키지
US20090100228A1 (en) * 2007-10-15 2009-04-16 Viasat, Inc. Methods and systems for implementing a cache model in a prefetching system

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5182806A (en) * 1989-06-30 1993-01-26 Digital Equipment Corporation Incremental compiler for source-code development system
US6381742B2 (en) * 1998-06-19 2002-04-30 Microsoft Corporation Software package management
US7243346B1 (en) * 2001-05-21 2007-07-10 Microsoft Corporation Customized library management system
US6715134B2 (en) * 2002-03-04 2004-03-30 Sun Microsystems, Inc. Method and apparatus to facilitate generating simulation modules for testing system designs
EP1552385B1 (en) * 2002-06-12 2008-10-15 Telelogic North America Inc. Providing dynamic model-code associativity
US7162628B2 (en) * 2002-07-23 2007-01-09 Cisco Technology, Inc. Method, system, apparatus and program product for temporary personalization of a computer terminal
US7246346B2 (en) * 2002-09-17 2007-07-17 Microsoft Corporation System and method for persisting dynamically generated code in a directly addressable and executable storage medium
US20040123278A1 (en) * 2002-12-23 2004-06-24 Murthi Nanja Persistent cache apparatus and methods
US7103723B2 (en) * 2003-02-25 2006-09-05 Intel Corporation Priority-based code cache management
US20040236824A1 (en) * 2003-05-23 2004-11-25 Millington Bradley D. Post-cache substitution
KR100518584B1 (ko) * 2003-07-12 2005-10-04 삼성전자주식회사 공유 라이브러리 시스템 및 상기 시스템 구축 방법
US7596554B2 (en) 2003-12-09 2009-09-29 International Business Machines Corporation System and method for generating a unique, file system independent key from a URI (universal resource indentifier) for use in an index-less voicexml browser caching mechanism
CA2465155C (en) 2004-04-21 2008-12-09 Ibm Canada Limited-Ibm Canada Limitee Recommendations for intelligent data caching
EP1669855A1 (en) 2004-12-02 2006-06-14 Deutsche Thomson-Brandt Gmbh Method for generating multi-language menus
US20060277250A1 (en) * 2005-06-03 2006-12-07 Sebastien Cherry Methods and systems for checking accessibility of web applications
US9009688B2 (en) * 2005-12-30 2015-04-14 Intel Corporation Type checking for object-oriented programming languages
US8225192B2 (en) * 2006-10-31 2012-07-17 Microsoft Corporation Extensible cache-safe links to files in a web page
US9112808B2 (en) * 2007-02-06 2015-08-18 At&T Intellectual Property Ii, L.P. Devices, systems, and methods for providing data
US8572065B2 (en) * 2007-11-09 2013-10-29 Microsoft Corporation Link discovery from web scripts
CN101226472A (zh) * 2008-02-03 2008-07-23 俞啟茂 一种遥控器代码生成方法
US8046779B2 (en) 2008-02-27 2011-10-25 Sap Ag Dynamic resolution of dependent components
KR100960111B1 (ko) 2008-07-30 2010-05-27 한국전자통신연구원 리버스 캐싱 프록시를 이용한 웹 기반의 역추적 시스템
US8752016B2 (en) * 2008-12-15 2014-06-10 Apple Inc. Converting JavaScript into a device-independent representation
US20100299661A1 (en) * 2009-05-25 2010-11-25 International Business Machines Corporation Load-Time Code Optimization In a Computing Environment
US20110087966A1 (en) * 2009-10-13 2011-04-14 Yaniv Leviathan Internet customization system
US8984009B2 (en) 2010-04-21 2015-03-17 Salesforce.Com, Inc. Methods and systems for utilizing bytecode in an on-demand service environment including providing multi-tenant runtime environments and systems
KR101689745B1 (ko) * 2010-09-06 2016-12-27 삼성전자주식회사 스크립트에 의한 동적 리소스 정보를 처리하는 웹 브라우징 시스템 및 방법
KR20120083803A (ko) * 2011-01-18 2012-07-26 삼성전자주식회사 가상머신을 위한 추가코드 생성장치 및 방법
US8880991B2 (en) * 2011-04-21 2014-11-04 Qualcomm Innovation Center, Inc. Methods and apparatus for improved browsing performance by precompilation of high-priority JavaScripts in a webpage and delaying the removal of corresponding compiled code
US9110751B2 (en) 2012-02-13 2015-08-18 Microsoft Technology Licensing, Llc Generating and caching software code

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004528626A (ja) * 2001-02-02 2004-09-16 オープンティブイ・インコーポレーテッド インタラクティブ・テレビジョンのインタープリタ言語のコンパイルの方法および装置
US20050055686A1 (en) * 2003-09-08 2005-03-10 Microsoft Corporation Method and system for servicing software
KR20060070412A (ko) * 2004-12-20 2006-06-23 마이크로소프트 코포레이션 소프트웨어 셋업을 위한 언어-중립 및 언어-특정 설치패키지
US20090100228A1 (en) * 2007-10-15 2009-04-16 Viasat, Inc. Methods and systems for implementing a cache model in a prefetching system

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Edward C. Bailey, 'Maximum RPM', 1997.02.17. (https://rikers.org/rpmbook/) *
Iffat H. Kazi 외 4명. 'Techniques for Obtaining High Performance in Java Programs'. ACM Computing Surveys, Vol.32, No.3, 2000.09., pp.213-240. *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190038494A (ko) * 2019-03-05 2019-04-08 (주) 피플아이 패키지 소프트웨어 생성 장치

Also Published As

Publication number Publication date
CA2861426C (en) 2020-07-07
US9940120B2 (en) 2018-04-10
RU2646329C2 (ru) 2018-03-02
CN104137057B (zh) 2017-10-24
US9110751B2 (en) 2015-08-18
EP2815309A4 (en) 2015-11-04
CN104137057A (zh) 2014-11-05
EP2815309B1 (en) 2020-10-07
BR112014019783A8 (pt) 2017-07-11
WO2013122758A1 (en) 2013-08-22
BR112014019783A2 (pt) 2021-05-18
US20130212567A1 (en) 2013-08-15
JP2015507310A (ja) 2015-03-05
EP2815309A1 (en) 2014-12-24
US20190108008A1 (en) 2019-04-11
KR101966754B1 (ko) 2019-04-08
MX336964B (es) 2016-02-08
JP6195849B2 (ja) 2017-09-13
BR112014019783B1 (pt) 2021-11-23
US20150324183A1 (en) 2015-11-12
US10963233B2 (en) 2021-03-30
AU2013219875B2 (en) 2018-05-31
RU2014133160A (ru) 2016-03-10
AU2013219875A1 (en) 2014-08-28
CA2861426A1 (en) 2013-08-22
MX2014009761A (es) 2014-09-12

Similar Documents

Publication Publication Date Title
KR101966754B1 (ko) 소프트웨어 코드의 생성 및 캐싱 기법
CN108027722B (zh) 在编译和部署中动态更新应用
Sen et al. Jalangi: A selective record-replay and dynamic analysis framework for JavaScript
US9530006B2 (en) Method and system for performing a memory safety check of a program written in an unmanaged programming language
US8683462B2 (en) Handling calls to native code in a managed code environment
US8694988B2 (en) Runtime extensions
US9900324B1 (en) System to discover and analyze evasive malware
US20060064576A1 (en) Boot systems and methods
JP2014521184A (ja) 信頼レベルのアクティブ化
CN109255235B (zh) 基于用户态沙箱的移动应用第三方库隔离方法
WO2011142095A1 (ja) 情報処理装置および情報処理方法
JP2019502197A (ja) ランタイム生成コードにおける悪意のあるコードの検出のためのシステムおよび方法
US9513762B1 (en) Static content updates
US20110271248A1 (en) Converting controls into source code
US9038018B2 (en) Integrating software components
CN111625296B (zh) 一种通过构建代码副本保护程序的方法
Kleissner Stoned bootkit
WO2023165257A1 (zh) 一种代码段动态度量方法、装置及电子设备
US20220308991A1 (en) Test processing method and information processing apparatus
KR101562282B1 (ko) 오덱스 무결성 검증 시스템 및 방법
US8892701B2 (en) Web publishing pipeline
CN116088917A (zh) 应用更新方法、装置、计算机设备和存储介质

Legal Events

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