KR20060111349A - 프로그램 프래그먼트를 공유하는 프로세스 및 시스템 - Google Patents

프로그램 프래그먼트를 공유하는 프로세스 및 시스템 Download PDF

Info

Publication number
KR20060111349A
KR20060111349A KR1020050099021A KR20050099021A KR20060111349A KR 20060111349 A KR20060111349 A KR 20060111349A KR 1020050099021 A KR1020050099021 A KR 1020050099021A KR 20050099021 A KR20050099021 A KR 20050099021A KR 20060111349 A KR20060111349 A KR 20060111349A
Authority
KR
South Korea
Prior art keywords
code
fragment
code fragment
fragments
server
Prior art date
Application number
KR1020050099021A
Other languages
English (en)
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 KR20060111349A publication Critical patent/KR20060111349A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4434Reducing the memory space required by the program code
    • G06F8/4436Exlining; Procedural abstraction

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

코드 프레그먼트를 공유하는 방법은 동일한 코드 프래그먼트를 검출하는 단계와, 그 후 코드 프래그먼트를 동일한 코드 프래그먼트에 대한 참조로 대체하는 단계를 포함한다. 본 발명에 따른 프로세스는 하나 이상의 모듈 내에서 동일한 코드 프래그먼트를 검출하는 단계와, 실행시간에 상기 동일한 코드 프래그먼트와 동일한 단일 코드 프래그먼트를 제공하는 단계와, 상기 하나 이상의 모듈 사이에서 상기 단일 코드 프래그먼트를 자동으로 공유하는 단계를 포함한다. 본 발명에 따른 시스템은 복수의 코드 프래그먼트를 포함할 수 있는 코드 프래그먼트 데이타베이스와, 프로그램에 대한 요구를 수신하고 상기 코드 프래그먼트 데이타베이스 내의 상기 복수의 코드 프래그먼트 중 하나 이상에 대한 참조를 제공하도록 구성된 코드 서버를 포함한다. 본 발명에 따른 다른 시스템은, 제1 객체와, 제2 객체와, 메소드 객체를 포함하며, 상기 제1 객체의 제1 메소드와 관련된 참조와 상기 제2 객체의 제2 메소드와 관련된 참조는 상기 메소드 객체의 포인터이다.
프레그먼트(Code Fragment), 객체(Object), 메소드(Method)

Description

프로그램 프래그먼트를 공유하는 프로세스 및 시스템{PROCESS AND SYSTEM FOR SHARING PROGRAM FRAGMENTS}
도 1은 종래기술에 따라 소스 코드를 컴파일하고 그 소스 코드를 실행가능한 코드로 표현하는 것을 도시한 개념도이다.
도 2는 본 발명의 일 실시형태에 따라 소스 코드를 컴파일하고 그 소스 코드를 실행가능한 코드로 나타내는 것을 도시한 개념도이다.
도 3은 본 발명의 일 실시형태에 따른 클라이어트에 프로그램을 제공하는 시스템을 나타내는 도면이다.
도 4는 본 발명의 다른 실시형태에 따른 클라이언트에 프로그램을 제공하는 시스템을 나타내는 도면이다.
도 5는 본 발명의 또 다른 실시형태에 따른 클라이언트에 프로그램을 제공하는 시스템을 나타내는 도면이다.
도 6a, 6b, 및 6c는 본 발명의 일 실시형태에 따른 개발자 환경과 함께 클라이언트 시스템을 포함하는 시스템을 나타내는 도면이다.
도 7은 본 발명의 일 실시형태에서의 사용을 위한 네트워크 시스템을 나타내는 도면이다.
도 8은 도 7의 시스템에서의 사용을 위한 컴퓨터 시스템을 나타내는 도면이 다.
도 9a, 9b 및 9c는 본 발명의 실시형태들에 따른 플로우차트를 나타내는 도면이다.
본 발명은 컴퓨터 메모리 관리에 관한 것이다. 더 자세하게는, 본 발명은 소프트웨어 콤포넌트의 연결에 관한 것이다.
임베디드 장치(embedded device)는 흔히 메모리 제한적이다. 임베디드 장치에 기능성(functionality)을 부가하는 것은 그 기능성에 필요한 코드를 저장하기 위한 메모리를 사용한다는 것을 의미한다. 따라서, 임베디드 장치 판매자는 기능성 대비 메모리 사용량의 균형을 맞추어야 하고, 흔히 프로그램을 이용가능한 메모리에 맞출 수 있도록 기능성을 제외시켜야 한다.
또한 임베디드 장치는 네트워크 연결에 의하여 프로그램 코드의 형태로 새로운 기능성을 동적으로 얻을 수 있다. 네트워크 연결에 의하여 이러한 코드를 송신하기 위해서는, 새로운 기능성을 얻기 위해 전송되어야 할 코드의 양에 비례하는 네트워크 대역폭이 요구된다.
프로그램 코드란, 호출될 수 있는 메소드(method)로 흔히 구성되는, 많은 "코드 프래그먼트(code fragments)"를 포함하는 것이라고 말할 수 있다. 예컨대, JavaTM 와 같은 일부 프로그래밍 언어는 메소드-사이즈(method-sized) 코드 프래그먼트를 지원한다. Smalltalk과 같은 다른 프로그래밍 언어는 "블록(blocks)"이라 부르는 더 작은 코드 프래그먼트를 지원하며, 각각의 메소드는 수개의 블록을 포함할 수 있다.
도 1은 소스 코드를 컴파일하고 그 소스 코드를 실행가능한(runnable) 코드로 표현하는 것을 도시한 개념도(100)이다. 이 개념도(100)에 도시된 바와 같이, 소스 코드(102, 104)는 각각의 객체(objects) (112, 114)로 컴파일된다. 이 객체(112, 114)는 각각의 가상 기계 명령어(VM 명령어; virtual machine instructions)(122, 124)를 포함한다. 도 1의 예에서, 소스 코드(102, 104)가 동일하지 않다라도, VM 명령어(122, 124)는 동일하다. 코드 프래그먼트가 작으면 작을수록, 그 장치 상에 제1 코드 프래그먼트와 동일한 다른 코드 프래그먼트가 이미 존재할 가능성은 더 커진다.
동일한 코드 프래그먼트를 재사용하여, 장치 상에는 단 1개 사본의 코드가 존재하도록 하는 것이 유리하다. 더욱이, 장치 상에는 무슨 코드 프래그먼트가 존재하는지를 미리 알아서, 그 장치에 새로운 기능성을 업로드할 때 그러한 코드 프 래그먼트가 전송될 필요가 없도록 하는 것이 유리하다.
알려진 방법들에 따르면, 프로그램들 간에 유사한 코드의 제한적인 공유가 허용된다. 예를 들어, 어떤 개발 툴(development tools)에 의하면, 개발자는 메소드를 공유 라이브러리(shared libraries) 내에 배치할 수 있다. 동적인 링커(dynamic linker)는 단 1개 사본의 공유 라이브러리가 존재하는 것과, 그 사본이 상기 라이브러리 내의 메소드를 사용하는 프로그램에 의하여 공유된다는 것을 보증한다. 공유 라이브러리는 Microsoftⓡ WindowsTM 등의 현대 운영체제에서 통상적인 것이며, 이는 동적 링크 라이브러리(Dynamic Link Libraries)로 알려져 있다.
공유 라이브러리의 개발자는 전형적으로 다른 개발자가 어떤 코드 프래그먼트를 재사용하는 데에 관심이 있는지를 예상하여야 한다. 더욱이, 공유 라이브러리는 전형적으로, 다른 개발자들이 필요로 하는 코드 프래그먼트를 그 공유 라이브러러가 포함한다는 것을 그 다른 개발자들이 알고 있을 것을 요구한다. 다시 말해서, 양쪽 모두는 코드 프래그먼트를 공유할 의사를 명시적으로 표명하여야 한다.
코드 프래그먼트를 공유하는 또 하나의 방법은 객체지향(object-oriented) 프로그래밍을 사용하는 것이다. 객체지향 프로그래밍은 상속(inheritance)을 통한 공유를 지원한다. 상속을 사용함으로써, 개발자는 이미 존재하는 클래스(class)의 서브클래스(subclass)를 생성하고, 이에 의하여 메소드를 상속(공유)할 수 있다. 상속은 개발자로 하여금 공유용 프로그램을 구성할 수 있게 하는데, 이는 공유 행위와 상속의 관계는 객체지향 프로그램 설계 프로세스의 필수적인 부분이기 때문이다.
상속을 통한 공유는 JavaTM 등의 객체지향 플랫폼에서 사용된다. JavaTM 가상 기계(VM)는 각각의 공유 메소드에 대해 단 1개 사본의 메소드가 존재하는 것을 보증하는 코드를 실행하는 데에 책임이 있다.
이러한 공유 기술은, 개발자가 공유를 염두에 두고 프로그램을 설계할 것을 요구한다. 코드는 분리된 공유 라이브러리 내에 배치되거나 그 공유 코드를 사용하는 클래스의 수퍼클래스(superclasses) 내에 배치되어야 한다. 이러한 공유 기술은 다른 점에서는 무관한 서로 동일한 코드 프래그먼트의 발행(issue)을 어드레스(address)하지 않는다. 예를 들어, 2개의 다른 메소드는, 소드 코드로부터 실행가능한 코드로 번역될 때, 동일한 것으로 종료될 수 있다(즉, 동일한 명령어와 같은 의미상으로 동등한 코드를 포함하는 것으로 종료될 수 있음). 이것은, 메소드가 다른 프로그래밍 언어로 쓰여있다 하더라도 특히 작은 메소드들에 대해서 일어날 수 있다. 그러나, 개발자는 실제로 메소드가 동일하다고는 생각하지 않는다. 종래 기 술들이 개발자로 하여금 공유할 의사를 알고 이를 명시적으로 표명할 것을 요구하기 때문에, 실행시간에 동일한 기능성을 갖는 2개의 메소드가 메모리에 존재할 수 있다.
코드 프래그먼트를 공유하는 방법은 동일한 코드 프래그먼트를 검출하는 단계와 그 후 코드 프래그먼트를 동일한 코드 프래그먼트에 대한 참조(references)로 대체하는 단계를 포함한다. 일 실시형태에서는, 상기 방법에 따른 프로세스는 하나 이상의 모듈 내에서 동일한 코드 프래그먼트를 검출하는 단계와, 실행시간에 상기 동일한 코드 프래그먼트와 동일한 단일 코드 프래그먼트를 제공하는 단계와, 상기 하나 이상의 모듈 사이에서 상기 단일 코드 프래그먼트를 자동으로 공유하는 단계를 포함할 수 있다.
다른 실시형태에서, 상기 모듈은 객체(objects)를 포함할 수 있다. 다른 실시형태에서, 상기 동일한 코드 프래그먼트를 검출하는 단계는 실행가능한 코드를 분석하는(analysing) 단계를 포함할 수 있다. 다른 실시형태에서, 상기 단일 코드 프래그먼트를 자동으로 공유하는 단계는 완료 메소드(complete method)를 공유하는 단계를 포함할 수 있다. 다른 실시형태에서, 상기 단일 코드 프래그먼트를 자동으로 공유하는 단계는 블록(block)을 공유하는 단계를 포함할 수 있다. 다른 실시형태에서, 상기 단일 코드 프래그먼트를 자동으로 공유하는 단계는 포인터(pointers) 를 사용하여 상기 단일 코드 프래그먼트를 참조하는(referencing) 단계를 포함할 수 있다.
다른 실시형태에서, 상기 단일 코드 프래그먼트는 메소드 객체를 포함할 수 있고, 상기 단일 코드 프래그먼트를 자동으로 공유하는 단계는 각각의 상기 동일한 코드 프래그먼트를 상기 메소드 객체로 포인팅하는 단계를 포함할 수 있다. 다른 실시형태에서, 동일한 코드 프래그먼트를 검출하는 단계와, 실행시간에 상기 단일 코드 프래그먼트를 제공하는 단계와, 상기 단일 코드 프래그먼트를 자동으로 공유하는 단계는 유저(user)의 관여 없이 순차적으로 일어난다.
다른 실시형태에서, 상기 프로세스는 또한 서버로부터 새로운 코드를 수신하는 단계와, 상기 단일 코드 프래그먼트가 상기 새로운 코드 내의 코드 프래그먼트와 동일한지를 결정하는 단계와, 상기 단일 코드 프래그먼트가 상기 새로운 코드 내의 코드 프래그먼트와 동일할 경우 상기 새로운 코드 내의 상기 코드 프래그먼트를 상기 단일 코드 프레그먼트에 대한 참조로 대체하는 단계와, 상기 단일 코드 프래그먼트가 상기 새로운 코드 내의 상기 코드 프래그먼트와 동일하지 않을 경우 장래의 새로운 코드로부터의 코드 프래그먼트와 대비한 비교를 위해 상기 코드 프래그먼트를 상기 새로운 코드 내에 보존(saving)하는 단계를 포함할 수 있다.
다른 실시형태에서, 상기 프로세스는 또한, 상기 단일 코드 프래그먼트를 포 함하는 제1 코드 프래그먼트의 리스트(list)를 코드 프래그먼트 데이타베이스 내에 유지하는 단계와, 한 세트의 제2 코드 프래그먼트와 한 세트의 제3 코드 프래그먼트를 도입(introducing)하는 단계를 포함할 수 있으며, 이 경우 상기 제2 코드 프래그먼트 각각은 상기 코드 프래그먼트 데이타베이스 내의 코드 프래그먼트와 동일하고, 상기 제3 코드 프래그먼트 중 어떠한 프래그먼트도 상기 코드 프래그먼트 데이타베이스 내의 코드 프래그먼트와 동일하지 않다. 상기 도입 단계는, 상기 세트의 제2 코드 프래그먼트 각각을 상기 제1 코드 프래그먼트 중 하나에 대한 참조로 대체하는 단계와, 상기 세트의 제3 코드 프래그먼트 각각을 상기 코드 프래그먼트 데이타베이스에 추가하는 단계에 의할 수 있다. 다른 실시형태에서, 상기 프로세스는 또한 실행시간에 코드를 동적으로 업로딩(uploading)하는 단계를 포함할 수 있다.
다른 실시형태에서, 상기 프로세스는 또한 프로그래밍 언어로 프로그램의 소스 코드를 쓰는 단계와, 상기 소스 코드를 실행가능한 코드로 번역하는 단계와, 상기 실행가능한 코드를 상기 하나 이상의 모듈 중 적어도 하나의 모듈로 제공하는 단계를 포함할 수 있다. 이 실시형태에서는 상기 실행가능한 코드를 실행하는 단계는, 상기 가상 기계(virtual machine)를 사용하여 상기 실행가능한 코드를 실행하는 단계를 포함할 수 있다.
일 실시형태에서, 본 발명에 따른 시스템은 복수의 코드 프래그먼트를 포함 할 수 있는 코드 프래그먼트 데이타베이스와, 프로그램에 대한 요구(request)를 수신하고 상기 코드 프래그먼트 데이타베이스 내의 상기 복수의 코드 프래그먼트 중 하나 이상에 대한 참조를 제공하도록 구성된 코드 서버를 포함할 수 있으며, 상기 복수의 코드 프래그먼트 중 상기 하나 이상은 요구된 프로그램과 관련될 수 있다.
일 실시형태에서, 상기 코드 서버는 또한 하나 이상의 객체 내에서 동일한 코드 프래그먼트를 검출하도록 구성될 수 있다. 다른 실시형태에서, 상기 코드 서버는 또한 상기 프로그램을 다운로드(download)하고 상기 프로그램 내의 코드 프래그먼트에 따라 상기 코드 프래그먼트 데이타베이스를 업데이트(update)하도록 구성될 수 있다. 다른 실시형태에서, 상기 코드 서버는 또한 상기 코드 프래그먼트 데이타베이스를 구축하고 유지하도록 구성될 수 있다.
다른 실시형태에서, 상기 시스템은 새로운 코드 프래그먼트를 상기 코드 서버에 제공하도록 구성된 개발자 I/O 모듈을 포함할 수 있으며, 이 경우 상기 코드 서버는 또한 상기 새로운 프래그먼트에 따라 상기 코드 프래그먼트 데이타베이스를 업데이트하도록 구성된다.
본 발명에 따른 다른 시스템은, 제1 네임드(named) 메소드와 관련된 참조를 포함한 제1 객체와, 제2 네임드 메소드와 관련된 참조를 포함한 제2 객체와, 메소드 객체를 포함할 수 있으며, 이 경우 상기 제1 네임드 메소드와 관련된 상기 참조 와 상기 제2 네임드 메소드와 관련된 상기 참조는 상기 메소드 객체로의 포인터이다. 일 실시형태에서, 상기 제1 객체 및 제2 객체는 서로 다른 클래스와 관련될 수 있다.
도 2는 일 실시형태에 따라 소스 코드를 컴파일하고 상기 소스 코드를 실행가능한 코드로 표현하는 것을 도시한 개념도(200)이다. 이 개념도(200)는 소스 코드(202), 소스 코드(204), 객체(212) 및 객체(214), 메소드 객체(220), 포인터(222) 및 포인터(224)를 포함한다.
도 2의 예에서, 소스 코드(202)는 C++로 쓰여진 것이고, 소스 코드(204)는 Smalltalk으로 쓰여진 것이다. 그러나, JavaTM 을 포함한 어떠한 프로그래밍 언어도 사용 가능하다. 실제, 소스 코드(202) 및 소스 코드(204)는 다른 언어로 쓸 수 있다. 유리하게는, 일 실시형태에서, 코드 프래그먼트는 컴파일 후에 실행가능한 코드로 분석되며, 이 코드는 전형적으로 무관하게 쓰여지는 특정 언어를 만든다. 더욱이, 단일한 프로그래밍 언어에서도, 동일한 명령어를 표현하는 다양한 방법들이 있다. 예를 들어, 다른 소스 코드 텍스트를 갖는 2개의 소스 코드 프래그먼트는 의미상 동등할 수 있으며, 이에 따라 동일한 실행가능한 코드 프래그먼드로 컴파일 될 수 있다.
소스 코드(202)는 객체(212)로 번역되고, 소스 코드(204)는 객체(214)로 번역된다. 이 번역은 예를 들어 컴파일러(compiler)를 통하여 이루어질 수 있다. 컴퓨터 프로그래밍 기술 분야에서 알려진 바와 같이, 컴파일러는 컴퓨터에 의해 실행될 수 있는 실행가능한 코드를 생성할 수 있다. 다른 방안으로서, 실행가능한 코드는 예를 들어, JavaTM Virtual Machine (VM)에 포함된 것과 같은 인터프리터(interpreter)에 의해 실행될 수 있다.
도 2의 예에서, 객체(212)는 한 세트의 데이타 필드(data felds)로 표현되며, 그 중 하나는 포인터(222)를 포함한다. 마찬가지로, 객체(214)는 한 세트의 데이타 필드로 표현되며, 그 중 하나는 포인터(224)를 포함한다. 추가적인 포인터(미도시)가 데이타 필드 내에 포함될 수도 있다. 다른 방안에서, 상기 시스템은 객제지향적인 형태로 구현될 필요는 없다. 이러한 다른 방안에서는, 객체(212) 및 객체(214)는 단순히 데이타 필드를 갖는 비객체 데이타 구조(non-object data structure)로 구현될 수 있다.
도 2의 예에서, 메소드 객체(220)는 가상 기계(WM) 명령어 세트로 표현된다. 컴퓨터 프로그래밍 기술 분야에서 알려진 바와 같이, 기계어 또는 어셈블리어(assembly language)를 포함한, 명령어 세트의 다양한 가능한 표현들(representations)이 있다. 예를 들어, 도 2는 VM 명령어 세트를 나타낸다.
VM 시스템에서, 메소드를 위한 코드는 흔히 메소드 객체(220)과 같은 메소드 객체 내에 저장된다. 전형적으로, 메소드 객체는, 상기 코드에 추가하여, 메소드의 네임(name)과 그 메소드가 한정되는 클래스 등의 정보를 포함한다. 일 실시형태에서, 메소드 객체는 예를 들어, 메소드 네임에 무관하게 고유되기 때문에, 그 네임이 항상 필요한 것은 아니다. 실제, 메소드 객체(220)은, 일 실시형태에서, 실행가능한 코드만을 포함한다.
도 2의 예에서, 소스 코드(202 및 204)와 관련된 코드 프래그먼트는 의미상 동등하고, 이에 따라 VM 명령어 세트는 동일하여, 포인터(222 및 224)는 동일한 명령어 세트를 포인팅하는 데에 사용될 수 있다. 도 2의 예에서, 소스 코드(202)와 소스 코드(204)의 의미상 동등한 부분은 호출된 객체의 제1 필드에 하나를 추가하는 코드 부분이다. 다시 말해서, "x = x+1" 및 "day := day+1"는 의미상 동등한다. 이러한 명령어들 양쪽 모두는 명령어 세트를 싸고 있는 메소드 객체(220) 내에 도시된 명령어 세트와 관련될 수 있다.
주목할 만하게도, 소스 코드(202) 및 소스 코드(204)는, 메소드 객체(220)의 공유에 특별히 향하여진 코드를 포함하고 있지 않다. 유리하게는, 일 실시형태에서, 어떠한 코드 프래그먼트를 공유할 지에 대한 정적 명세(static specification)는 요구되지 않는다.
도 3은 일 실시형태에 따른 클라이언트에게 프로그램을 제공하는 시스템(300)을 도시한 것이다. 시스템(300)은 소스 코드 프로그램(302-1 내지 302-N)(이하, 통칭하여 소스 코드 프로그램(302)이라 함), 컴파일 모듈(306), 프로그램 데이타베이스(308), 서버(310) 및 클라이언트(320)을 포함한다.
도 3의 예에서, 소스 코드 프로그램(302)는 하나 이상의 프로그래밍 언어로 쓰여질 수 있다. 이 컴파일 모듈(306)은 소스 코드 프로그램(302)을 실행가능한 코드로 변환할 수 있다. 소스 코드 프로그램(302)은 컴파일 모듈(306)에 의한 컴파일 전에 임의의 시간에 임의의 위치에서 생성될 수 있다. 예를 들어, 개발자에 의한 소스 코드의 개발을 용이하게 하도록, 에디터 소프트웨어(editor software)가 제1 컴퓨터 상에서 구현될 수 있다. 다른 방안으로서, 소스 코드 프로그램(302)은 컴파일러를 포함하는 컴퓨터 상에서 개발되고, 실행가능한 코드로 컴파일될 수 있다.
컴파일 모듈(306)의 출력은 실행가능한 코드이며, 이는 논리적으로 코드 프래그먼트로 나뉘어질 수 있다. 이들 코드 프래그먼트는 블록, 메소드 또는 어떤 다른 논리부(logical division)을 표현할 수 있다. 그 코드 프래그먼트는 프로그램 데이타베이스(308) 내에 저장된다. 그 코드 프래그먼트는 동일한 코드 프래그먼트를 공유하지 않는 컴퓨터 프로그램으로 저장될 수 있다는 것에 유의한다. 동일한 코드 프래그먼트의 공유는 예를 들어 나중에 클라이언트(320)에 올 수 있다. 또는 아마도, 동일한 코드 프래그먼트의 공유는 프로그램 데이타베이스(308) 내에 정적인 상태로 있고, 동적인 공유는 나중에 클라이언트(320)에 온다. 예를 들어, 프로그램 데이타베이스(308 내의 프로그램은 공유 라이브러리를 사용하여 코드 프래그먼트를 공유할 수 있다.
컴파일 모듈(306) 및 프로그램 데이타베이스(308)는 서로 로컬(local)일 필요가 없다. 이에 더하여, 컴파일 모듈(306)은, 프로그램 데이타베이스(308)에 추가되기 충분히 전에, 소스 코드 프로그램(302)를 실행가능한 코드로 컴파일할 수 있다. 예를 들어, 컴퓨터 프로그램은 컴퓨터 상에 소스 코드로 쓰여지고, 그 후 실행가능한 코드(예컨대, JavaTM 바이트코드 시퀀스(bytecode sequence))로 컴파일될 수 있다. 훨씬 뒤에, 상기 실행가능한 보드는 프로그램 데이타베이스(308)에 추가될 수 있다.
도 3의 예에서, 서버(310)은 코드 프래그먼트를 프로그램 데이타베이스(308)로부터 클라이언트(320)로 제공한다. 이 코드 프래그먼트는, 프로그램이 요구되거나 특정 코드 프래그먼트가 요구되거나 프로그램과 관련된 코드 프래그먼트의 서브세트(subset)가 제공될 수 있을 때, 제공될 수 있다(예를 들어, 어떤 코드 프래그먼트는, 그 코드 프래그먼트가 이미 클라이언트(320)에게 제공되었다는 것을 서버가 알고 있기 때문에, 보내어지지 않을 수 있다). 프로그램 데이타베이스(308)는 서버(310)에 로컬일 필요가 없다(예컨대, 서버(310)는 프로그램 데이타베이스(308)로부터 데이타를 요구해야 하는 프록시(proxy) 서버일 수 있다). 더욱이, 서버(310)는 클라이언트(320)에 로컬일 필요가 없다. 실제, 컴퓨터 네트워킹의 기술 분야에서 잘 알려지 바와 같이, 서버가 클라이언트에 대하여 원격(remote)인 것은 통상적인 것이다.
실시형태에 따라 코드 프래그먼트를 클라이언트에게 제공하는 일부 예들이 도 4-6을 참조하여 설명되어 있다. 도 4는 일 실시형태에 따른 클라이언트에게 프로그램을 제공하는 시스템(400)을 도시한 것이다. 시스템(400)은 프로그램 데이타베이스(408), 서버(410) 및 시스템(420)을 포함한다. 이 시스템(420)은 클라이언트(422) 및 코드 프래그먼트 데이타베이스(424)를 포함한다. 프로그램 데이타베이스(408) 및 서버(410)는 프로그램 데이타베이스(308) 및 서버(310) (도 3 참조)에 유사할 수 있다.
도 4는 클라이언트(422)가 완료 프로그램을 다운로드하고 그 후 여기서 설명되는 방법에 따라 자동으로 프로그램을 변경하는 예를 도시한 것이다. 이러한 예는, 서버가 코드 프로그램 데이타베이스(424) 또는 관련된 기능성을 알고 있는지와 무관하게, 임의의 호환성이 있는 종래기술의 서버로부터 파일을 다운로드하는 것을 용이하게 하는 장점을 가지고 있다.
동작에 있어서, 서버(410)는 프로그램 코드 프래그먼트를 프로그램 데이타베이스(408)로부터 클라이언트(422)에 제공한다. 일 실시형태에서, 서버(410)는 HTTP 서버이고 프로그램 데이타베이스(408)는 프로그램을 포함하는 파일 구조이다. 일 실시형태에서, 시스템(420)은 서버(410)에 대하여 원격이고, 클라이언트(422)는 서버(410)로부터 LAN 또는 WAN 등의 네트워크 또는 인터넷을 통해 코드 프래그먼트를 다운로드한다.
동작에 있어서, 일 실시형태에서, 클라이언트(422)가 상기 다운로드된 프로그램 코드 프래그먼트를 받을 때, 클라이언트(422)는 코드 프래그 먼트 각각(또는 코드 프래그먼트의 서브세트)를 코드 프래그먼트 데이타베이스(424)와 비교한다. 이 비교는, 예를 들어, 명령어의 시퀀스를 코드 프래그먼트 내에 저장된 명령어의 시퀀스와 비교함으로써 이루어질 수 있다. 코드 프래그먼트가 코드 프래그먼트 데이타베이스(424) 내의 엔트리(entry)와 매칭되면, 그 코드 프래그먼트는 버려진다(discard). 코드 프래그먼트가 코드 프래그먼트 데이타베이스(424) 내의 엔트리와 매칭되지 않으면, 코드 프래그먼트와 관련된 엔트리는 코드 프래그먼트 데이타베이스(424)에 추가된다.
동작에 있어서, 코드 프레그먼트가, 필요할 경우, 코드 프래그먼트 데이타베이스(424) 안으로 엔터(enter)된 후에는, 코드 프래그먼트를 포함했을 데이타 필드는 코드 프래그먼트 데이타베이스(424) 내에 관련 코드 프래그먼트로의 포인터를 대신 포함한다. 이러한 방법으로, 동일한 코드 프래그먼트는 동일한 코드 프래그먼트 엔트리로 포인팅하는 프로그램에 의하여 공유될 수 있다.
도 5는 다른 실시형태에 따른 클라이언트에게 프로그램을 제공하는 시스템(500)을 도시한 것이다. 도 5는 프로그램 다운로드에 요구되는 대역폭이 감소된 예를 도시한 것이다. 시스템(500)은 프로그램 데이타베이스(508), 서버(510), 코드 프래그먼트 선택 인터페이스(code fragment selection interface; 516) 및 시스템(520)을 포함한다. 프로그램 데이타베이스(508) 및 서버(510)는 프로그램 데이타베이스(308) 및 서버(310)(도 3 참조)와 유사할 수 있다. 코드 프래그먼트 선택 인터페이스(516)는 프로그램과 관련된 코드 프래그먼트의 선택적인 다운로드를 하용한다. 시스템(520)은 클라이언트(522), 코드 서버(524) 및 코드 프래그먼트 데이타베이스(526)을 포함한다.
코드 프래그먼트 선택 인터페이스(516)는 모든 시스템 상에서 이용가능하지는 않을 수 있다. 그러나, 서버(510)가 LAN 또는 WAN 등의 기업 시스템에서 구현될 경우, 그 서버는 많은 시스템 또는 워크스테이션을 서브(serve)할 수 있다. 이 경우, 그 기업은 서버(510)로부터 다운로딩시에 네트워크 대역폭 요건을 저감시키기 위해 코드 프래그먼트 선택 인터페이스(516)를 제공할 수 있다. 프로그램에 대한 요구는 그 요구하는 시스템(requesting system)에 이미 존재하는 코드프래그먼트에 관련된 정보를 포함하기 때문에, 대역폭 요건은 감소될 수 있다. 예를 들어, 시스 템(520)이 동일한 코드 프래그먼트를 포함하는 프로그램을 요구할 경우, 코드 프래그먼트 선택 인터페이스(516)는 동일한 프래그먼트들 중 하나만을 제공할 수 있다(그리고, 제공되지 않은 코드프래그먼트 대신에 참조 또는 다른 식별자(identifier)를 포함할 수 있다). 다른 방안으로서, 코드 프래그먼트 선택 인터페이스는 예를 들어, 시스템(520) 상에 있는 프로그램에 관련된 데이타베이스로의 액세스를 가질 수 있다. 이러한 다른 방안에서는, 서버(510)는 시스템(520) 상에 이미 존재하는 코드 프래그먼트를 제공할 필요가 없으며, 프로그램의 다운로드와 관련된 대역폭 요건을 더욱 감소시킨다.
동작에 있어서, 일 실시형태에서, 클라이언트(522)는 코드 서버(524)로부터 프래그램과 관련된 코드 프래그먼트를 요구한다. 예를 들어, 클라이언트(522)는 프로그램을 요구할 수 있다. 코드 서버(524)는 코드 프래그먼트 데이타베이스(526)를 체크하여 요구된 코드 프래그먼트 중 어느 것이든 로컬하게 이용가능한 것이 있는 지를 결정한다. 만약 없다면, 코드 서버(524)는 서버(510)으로부터 코드 프래그먼트를 다운로드한다. 그리고 나서 코드 서버(524)는 코드 프래그먼트를 코드 프래그먼트 데이타베이스(526)에 추가하고, 코드 프래그먼트에 대한 클라이언트(522)의 요구에 응답한다. 그리고 나서 클라이언트(522)는 예를 들어, 포인터를 사용하여, 코드 프래그먼트 데이타베이스(526)으로부터 코드 프래그먼트를 참조한다.
도 6a, 6b 및 6c는 일 실시형태에 따른 개발자 환경(developer environment) 과 함께 클라이언트 시스템을 포함하는 시스템을 도시한 것이다. 도 6a는 코드 서버가 코드 프래그먼트 데이타 베이스를 유지하는 시스템(600A)을 도시하고 있다. 시스템(600A)은 선택적인(optional) 서버(610) 및 클라이언트 시스템(620)을 포함한다. 서버(610)는 도 6a의 예에서 사용되지 않고 시스템(600A)은 서버(610) 없이도 구현될 수 있기 때문에, 서버(610)는 선택적이다. 클라이언트 시스템(620)은 실행시간 클라이언트(runtime client; 622), 코드 서버(624), 코드 프래그먼트 데이타베이스(626) 및 선택적인(optioanal) 개발자 I/O 모듈(628)을 포함한다. 개발자 I/O 모듈(628)은 도 6a의 예에서 사용되지 안고 시스템(600A)은 개발자 I/O 모듈(628) 없이도 구현될 수 있기 때문에, 개발자 I/O 모듈(628)은 선택적이다.
동작에 있어서, 일 실시형태에서, 코드 서버(624)는 실행시간 클라이언트(622)로부터 코드 프래그먼트를 요구한다. 실행시간 클라이언트(622)는 코드 프래그먼트를 코드 서버(624)로 리턴시킨다. 일 실시형태에서, 코드 프래그먼트는 실행시간 클라이언트(622) 상의 임의의 프로그램으로부터 얻어질 수 있다. 다른 실시형태에서, 코드 프래그먼트는 실행시간 객체 또는 메소드 객체로부터 얻어질 수 있다. 코드 서버는 코드 프래그먼트 데이타베이스(626)을 구축하고 유지하기 위해 코드 프래그먼트를 사용한다. 이러한 방법으로, 코드 프래그먼트 데이타베이스(626)는, 실행시간 클라이언트(622) 상에 적어도 일부 코드 프래그먼트를 표현하는 것을 포함한다.
도 6b는 코드 서버가 코드 프래그먼트 데이타베이스를 유지하는 시스템(600B)을 도시한 것이다. 시스템(600B)은 시스템(600A)의 콤포넌트와 유사한 콤포넌트를 포함한다. 도 6b는 코드 프래그먼트 데이타베이스(626)을 포함하는 시스템 내에서 가능한 동작을 나타낸다. 코드 프래그먼트 데이타베이스(626)을 구축하는 일례가 도 6a를 참조하여 제공되었다(그리고 예를 들어, 코드 프래그먼트 데이타베이스(626)는 적어도 일부 코드 프래그먼트를 실행시간 클라이언트(622) 상에 표현하는 것을 포함하는 것으로 가정한다).
동작에 있어서, 일 실시형태에서, 실행시간 클라이언트(622)는 코드 서버(624)로부터 프로그램의 다운로드를 요구한다. 코드 서버(624)는 서버(610)로부터 요구된 프로그램을 다운로드할 수 있다. 다른 방안으로서, 프로그램과 관련된 코드 프래그먼트의 서브세트가 다운로드될 수 있다(예컨대, 도 5를 참조).
일 실시형태에서, 일부 또는 모든 프로그램을 다운로드한 후에, 코드 서버(624)는 새로운 코드 프래그먼트를 코드 프래그먼트 데이타베이스(626)에 추가한다. 코드 프래그먼트 데이타베이스(626)가 동일한 코드를 갖는다면, 다운로드된 코드 프래그먼트는 새로운 것이 아니며, 그것은 버려질 수 있고 코드 프래그먼트 데이타베이스(626) 내에서 동일한 코드 프래그먼트로의 포인터로 대체될 수 있다. 그리고 나서 코드 서버(624)는 코드 프래그먼트에 대한 참조를 실행시간 클라이언트(622)로 업로드할 수 있다. 이와 달리, 코드 프래그먼트가 어떠한 다른 코드 프래 그먼트와도 동일하지 않은 경우에는, 코드 프래그먼트 자체가 실행시간 클라이언트(622)로 업로드될 수 있다.
도 6c는 개발자가 코드 프래그먼트를 수정할 수 있는 시스템(600C)을 도시한 것이다. 시스템(600C)은 시스템(600A)의 콤포넌트와 유사한 콤포넌트를 포함한다. 도 6c는, 코드 서버가 개발자 환경에 통합되어, 개발자로 하여금 그 개발자 환경 내로부터코드를 실행 시스템(running system)에 동적으로 업로드하고 실행 시스템 상에서 코드를 변경할 수 있도록 허용하는 시스템을 도시한 것이다.
일 실시형태에서, 시스템(620)을 모니터링할 수 있거나 또는 할 수 없는 개발자는 실행시간 동안에 코드 프래그먼트를 "요구에 따라 동태적으로(on the fly)" 변경하거나, 삭제하거나, 또는 추가할 수 있다. 개발자는 개발자 I/O 모듈(628)을 통하여 시스템(620)과 상호작용할 수 있다. 동작에 있어서, 일 실시형태에서, 개발자 I/O 모듈(628)은 코드 서버(624)에 새로운 코드 프래그먼트를 제공한다. 코드 서버(624)는 코드 프래그먼트 데이타베이스(626)를 새로운 코드 프래그먼트로 업데이트한다. 그리고 나서 코드 서버(624)는 새로운 코드 프래그먼트에 대한 참조를 실행시간 클라이언트(622)로 업로드한다. 상기 참조는 실행시간 클라이언트(622) 내의 참조를 대신할 수 있다. 다른 방안으로서, 참조가 포인팅하는 코드 프래그먼트는 참조 변경 없이 수정될 수 있다.
도 7 및 8에 대한 이하의 설명은 여기에 설명된 본 발명의 메소드를 실행하는데 적절한 컴퓨터 하드웨어 및 다른 동작 요소를 전체적으로 제공하기 위한 것이나, 적용 환경을 한정하기 위한 것은 아니다. 유사하게, 컴퓨터 하드웨어 및 다른 구동 요소들은 여기에 기술된 본 발명의 장치의 일부로서 적절할 수 있다. 본 발명은 휴대용 장치, 다중 프로세서 시스템, 마이크로프로세서 기반 또는 프로그램 가능한 소비자 전자기기(programmable consumer electronics), 네트워크 PC, 미니컴퓨터, 메인프레임(mainframe) 컴퓨터 등과 같은 다른 컴퓨터 시스템 구성을 이용하여 실행될 수 있다. 또한, 본 발명은 통신 네트워크를 통해 연결된 원격 프로세싱 장치에 의해 테스크가 수행되는 분산 컴퓨팅 환경에서 실행될 수 있다.
도 7은 인터넷과 같은 네트워크(702)를 통해 함께 연결된 다수의 컴퓨터 시스템을 포함하는 네트워크 시스템(700)을 도시한다. 여기에서, "인터넷"이라는 용어는, TCP/IP 프로토콜과 같은 소정의 프로토콜 및 월드 와이드 웹(World Wide Web: WWW)(웹)을 구성하는 하이퍼텍스트 생성 언어(hypertext markup language: HTML) 문서에 대한 하이퍼텍스트 전송 프로토콜과 같은 다른 프로토콜을 이용한 네트워크들의 네트워크를 의미한다. 인터넷과 프로토콜들의 물리적 연결 및 인터넷의 통신 절차는 당 기술분야에서 통상의 지식을 가진 자에게 잘 알려져 있다.
전형적으로, 웹 서버(704)는 서버 컴퓨터 시스템으로 동작하는 적어도 하나의 컴퓨터 시스템이며, 월드 와이드 웹의 프로토콜로 동작하도록 구성되며, 인터넷 과 연결된다. 웹 서버 시스템(704)은 전형적인 서버 컴퓨터 시스템일 수 있다. 선택적으로, 웹 서버(704)는 클라이언트 시스템에 대해 인터넷 접속을 제공하는 ISP의 일부일 수 있다. 웹서버(704)는 웹 컨텐츠(708)와 자신이 연결된 서버 컴퓨터 시스템(706)과 연결되는 것으로 도시되며, 미디어 데이터베이스의 형태로 간주될 수 있다. 두 개의 컴퓨터 시스템(704 및 706)이 도 7에 도시되나, 웹 서버 시스템(704) 및 서버 컴퓨터 시스템(706)은 기능적으로 웹 서버 및 이하에 기술되는 서버 컴퓨터 시스템(706)에 의해 제공되는 서버를 제공하는 다른 소프트웨어 요소를 갖는 하나의 컴퓨터 시스템일 수 있다.
전형적으로, 네트워크(702)로의 접속이 인터넷 서비스 공급자(ISP)(710 및 716)와 같은 ISP에 의해 제공된다. 클라이언트 컴퓨터 시스템(712, 718 722, 및 726)과 같은 클라이언트 시스템 상의 사용자는, ISP(710 및 716)를 통해 인터넷으로의 접속이 가능하다. 인터넷으로의 접속은, 클라이언트 컴퓨터 시스템의 사용자가 정보, 송수신 전자 우편 및 HTML 포멧으로 마련된 문서와 같은 뷰 문서(view document)를 교환할 수 있게 한다. 이러한 문서들은 웹 서버(704)와 같은 웹 서버에 의해 제공되며, 이는 인터넷 상에 존재한다라고 표현된다. 컴퓨터 시스템이 구성되고 또한 ISP인 시스템 없이 인터넷에 연결된다고 하더라도 ISP(710)과 같은 ISP들에 의해 웹 서버가 제공된다.
클라이언트 컴퓨터 시스템(712,718, 722 및 726) 각각은, 적절한 웹 브라우 징(browsing) 소프트웨어를 이용하여, 웹 서버(704)에 의해 제공되는 HTML 페이지를 볼 수 있다. ISP(710)는 모뎀 인터페이스(714)를 통해 클라이언트 컴퓨터 시스템(712)에 인터넷 연결을 제공하며, 모뎀 인터페이스(714)는 클라이언트 컴퓨터 시스템(712)의 중요한 부품일 수 있다. 클라이언트 컴퓨터 시스템은 개인 컴퓨터 시스템, 네트워크 컴퓨터, 웹 TV 시스템 또는 다른 컴퓨터 시스템일 수 있다. 도 7은 모뎀 인터페이스(714)를 일반적으로 "모뎀"으로 나타내는 반면, 인터페이스는 아날로그 모뎀, isdn 모뎀, 케이블 모뎀, 위성 전송 인터페이스(예를 들어, "DirecPC") 또는 다른 컴퓨터 시스템에 컴퓨터 시스템을 연결하는 다른 인터페이스일 수 있다.
ISP(714)와 유사하게, ISP(716)는 클라이언트 시스템(718, 722 및 726)에 인터넷 연결을 제공한다. 도 7에 도시한 바와 같이, 연결들은 세 컴퓨터 시스템에 대해 동일하지 않다. 클라이언트 컴퓨터 시스템(718)은 모뎀 인터페이스(720)을 통해 연결되나, 클라이언트 컴퓨터(722, 726)은 랜(LAN)(730)의 일부가 된다.
클라이언트 컴퓨터 시스템(724 및 728)은 네트워크 인터페이스(724, 728)를 통해 랜(730)에 연결되며, 네트워크 인터페이스(724 및 728)는 이더넷(ethernet) 네트워크 또는 다른 네트워크 인터페이스일 수 있다. 또한, 랜(730)은 로컬 영역 네트워크에 방화벽 및 다른 인터넷 관련 서비스를 제공할 수 있는 게이트웨이 컴퓨터 시스템(732)에 연결된다. 이 게이트웨이 컴퓨터 시스템(732)은 클라이언트 컴퓨터 시스템(722 및 726)에 인터넷 연결을 제공하기 위해 ISP(716)와 연결된다. 게이 트웨이 컴퓨터 시스템(732)은 전형적인 서버 컴퓨터 시스템일 수 있다.
선택적으로, 게이트웨이 시스템(732)을 통해 인터넷에 연결될 필요없이 클라이언트(722 및 726)에 파일(738) 및 다른 서비스를 제공하도록, 서버 컴퓨터 시스템(734)은 네트워크 인터페이스(736)을 통해 랜(730)에 직접 연결될 수 있다.
도 8은 시스템(700)(도 7)에 사용되는 컴퓨터 시스템(740)을 도시한다. 컴퓨터 시스템(740)은 클라이언트 컴퓨터 시스템 또는 서버 컴퓨터 시스템 또는 웹 서버 시스템으로 사용될 수 있는 전형적인 컴퓨터 시스템이다. 이러한 컴퓨터 시스템은, ISP(710)(도 7)와 같이 인터넷 서비스 공급자의 다수의 기능을 수행하는데 사용될 수 있다.
도 8의 예에서, 컴퓨터 시스템(740)은 컴퓨터(742), I/O 디바이스(744) 및 디스플레이 디바이스(746)를 포함한다. 컴퓨터(742)는 프로세서(748), 통신 인터페이스(750), 메모리(752), 디스플레이 컨트롤러(754), 비휘발성 저장매체(756), 및 I/O 컨트롤러(758)를 포함한다. 컴퓨터 시스템(740)은 I/O 디바이스(744) 및 디스플레이 디바이스(746)과 연결되거나 이들을 포함할 수 있다.
컴퓨터(742)는 통신 인터페이스(750)를 통해 외부 시스템과 인터페이스 연결되며, 이 통신 인터페이스(750)는 모뎀 또는 네트워크 인터페이스를 포함한다. 통 신 인터페이스(750)는 컴퓨터 시스템(740)의 일부로 간주되거나 컴퓨터(742)의 일부로 간주될 수 있다. 통신 인터페이스는 아날로그 모뎀, isdn 모뎀, 케이블 모뎀, 토큰 링 인터페이스(token ling interface), 위성 전송 인터페이스(예를 들어, "DirecPC"), 또는 다른 컴퓨터 시스템에 컴퓨터 시스템을 연결하기 위한 다른 인터페이스일 수 있다.
예를 들어, 프로세서(748)는 인텔 펜티엄 마이크로프로세서 또는 모토롤라 파워 PC 마이크로프로세서와 같은 전형적인 마이크로프로세서일 수 있다. 메모리(752)는 버스(760)에 의해 프로세서에 연결된다. 메모리(752)는 다이나믹 임의 접근 메모리(dynamic random access memory: DRAM)일 수 있으며, 스태틱(static) ram(sram)을 포함할 수 있다. 버스(760)는 프로세서(748)를 메모리(752)에 연결하며, 또한 프로세서(748)을 비휘발성 저장매체(756), 디스플레이 컨트롤러(754) 및 I/O 컨트롤러(758)에 연결한다.
I/O 디바이스(744)는 키보드, 디스크 드라이브, 프린터, 스캐너 및 마우스 또는 다른 포인팅 장치를 포함하는 다른 입출력 디바이스를 포함할 수 있다. 디스플레이 컨트롤러(754)는 전형적인 방법으로 디스플레이 디바이스(746) 상의 디스플레이를 제어하며, 디스플레이 디바이스(746)는, 예를 들어 음극선 튜브(CRT) 또는 액정 디스플레이(LCD)일 수 있다. 디스플레이 컨트롤러(754) 및 I/O 컨트롤러(758)는 공지의 전형적인 기술을 이용하여 실행된다.
비휘발성 저장매체(756)는 마그네틱 하드 디스크, 광 디스크 또는 대량 데이터를 저장하기 위한 다른 형태의 저장매체이다. 데이터의 일부는, 컴퓨터(742)에서 소프트웨어가 실행되는 동안 메모리(752)로 직접 메모리 접근 프로세스에 의해 기록된다. 당 기술분야에서 통상의 지식을 가진 자는, "기계-판독가능 매체(machine-readable medium)" 또는 "컴퓨터-판독가능 매체(computer-readable medium)"라는 용어가프로세서(748)에 의해 접근 가능한 임의의 형식을 갖는 저장 장치를 포함하며 데이터 신호를 부호화하는 캐리어 웨이브(carrier wave)를 포함한다는 것을 즉지 알 수 있을 것이다.
객체, 메소드, 인라인 캐시, 캐시 상태 및 다른 객체 지향 요소들은 비휘발성 저장 매체(756)에 저장되거나, 예를 들어 객체 지향 소프트웨어 프로그램이 실행되는 동안 메모리(752)에 기록될 수 있다. 이러한 방법으로, 예를 들어 도 1 내지 6에 도시된 요소들은 컴퓨터 시스템(740) 상에서 인스턴트화될 수 있다.
컴퓨터 시스템(740)은 다른 구조를 갖는 다수의 가능한 컴퓨터 시스템의 일례이다. 예를 들어, 인텔 마이크로프로세서 기반 개인 컴퓨터는 다수의 버스를 가지며, 이 버스 중 하나는 주변장치용 I/O 버스일 수 있으며, 프로세서(748)와 메모리(752)(메모리 버스라고도 함)를 직접 연결하는 버스(메모리 버스라고도 함)일 수 있다. 버스들은, 서로 다른 버스 프로토콜로 인한 임의의 필요한 번역 (translation)을 수행하는 브릿지(bridge) 요소를 통해 함께 연결된다.
네트워크 컴퓨터는 본 발명에 사용될 수 있는 다른 형식의 컴퓨터 시스템이다. 네트워크 컴퓨터는 하드 디스크 또는 다른 대량 저장 매체를 포함하지 않을 수도 있으며, 실행 가능한 프로그램은 프로세서(748)에 의한 실행을 위해 네트워크 연결로부터 메모리로 로드된다. 또한, 당 기술분야에 알려진 웹 TV 시스템은 본 발명에 따른 시스템으로 고려되나, 입출력 디바이스와 같이 도 8에 도시된 특징 중 일부가 결여될 수 있다. 일반적으로, 전형적인 컴퓨터 시스템은 적어도 프로세서, 메모리 및 메모리와 프로세서를 연결하는 버스를 포함한다.
더하여, 컴퓨터 시스템(740)은 디스크 오퍼레이팅 시스템(disk operating system)과 같은 파일 관리 시스템을 포함하는 오퍼레이팅 시스템 소프트웨어에 의해 제어되며, 이 디스크 운용 시스템은 운용 시스템 소프트웨어의 일부이다. 관련 파일 관리 시스템 소프트웨어를 갖는 오퍼레이팅 시스템 소프트웨어의 일례로, 마이크로소프트사(레드먼드, WA)의 윈도우즈(Windows)®로 알려진 오퍼레이팅 시스템 패밀리 및 이와 관련된 파일 관리 시스템이 있다. 관련 파일 관리 시스템 소프트웨어를 갖는 오퍼레이팅 시스템 소프트웨어의 다른 예로 리눅스(Linux) 오퍼레이팅 시스템 및 그와 관련된 파일 관리 시스템이 있다. 전형적으로, 파일 관리 시스템은 비휘발성 저장 매체(756)에 저장되며, 데이터의 입출력을 위해 그리고 비휘발성 저 장매체(756)에 저장된 파일을 포함하여 메모리에 데이터를 저장하기 위해 오퍼레이팅 시스템에 의해 요구되는 다양한 작업을 프로세서(748)가 수행할 수 있게 한다.
상세한 설명의 일부는 컴퓨터 메모리 내의 데이터 비트 상에서 동작의 알고리듬 및 기호적인 표현의 용어로 기재된다. 이러한 알고리듬의 기재 및 표현들은 데이터 처리 분야에서 통상의 지식을 가진 자들이 해당 분야의 다른 자들에게 자신들의 작업에 대한 요점을 가장 효과적으로 전달하기 위해 사용되는 수단이다. 여기에서, 알고리듬은, 바람직한 결과를 가져오는 일관성 있는 일련의 동작을 의미한다. 이 동작들은 물리량의 물리적 처리를 요구하는 것들이다. 일반적으로, 필수적이지는 않지만, 이 물리량은 저장, 전달, 결합, 비교 및 다른 처리가 가능한 전기적 또는 자기적 신호의 형태를 갖는다. 주로 통상적인 사용을 위해 이러한 신호를 비트, 값(value), 요소, 심볼, 문자(character), 용어, 숫자 등으로 표시하는 것은 때로는 편리한 것으로 입증되었다.
그러나, 이러한 모든 것들 및 유사한 용어가 적절한 물리량과 관련되며, 이 물리량에 적용된 단순히 편리한 레이블이라는 점을 명심해야 한다. 이하의 설명에서 명확하게 설명되지 않는 경우, 상세한 설명 전체에서, "프로세싱(processing)" 또는 "컴퓨팅(computing)" 또는 "연산(calculating)" 또는 "결정(determining)" 또는 "디스플레잉(displaying)" 등과 같은 용어를 사용한 기재는, 컴퓨터 시스템 또는 유사한 전자 컴퓨팅 장치의 동작 및 프로세스를 나타내는 것이 바람직하다. 이 컴퓨터 시스템 또는 유사한 전자 컴퓨터 시스템은, 컴퓨터 시스템 메모리 또는 레지스터 또는 정보 저장 매체, 전송 또는 디스플레이 디바이스와 같은 장치 내에서 물리적인(전자적인) 양으로서 표현된 데이터를 처리 및 변형한다.
또한, 일부 실시형태에서, 본 발명은 동작을 수행하기 위한 장치에 관련된다. 이 장치는 요구되는 목적을 위해 특별하게 구성되거나, 컴퓨터 내에 저장된 컴퓨터 프로그램에 의해 선택적으로 실행되거나 재 구성된 범용 컴퓨터를 포함할 수 있다. 이러한 컴퓨터 프로그램은, 플로피 디스크, 광 디스크, CD-롬 및 자기-광학 디스크, 롬(read only memoly: ROM), 램(random access memory), EPROM, EEPROM, 자기 또는 광학 카드 또는 전기적 명령을 저장하는데 적절한 임의의 형식의 매체를 포함하는 한정적이지 않은 임의의 형식의 디스크와 같은 컴퓨터 판독 가능한 저장 매체에 저장될 수 있으며, 각각은 컴퓨터 시스템 버스와 연결된다.
여기에 나타난 알고리듬 및 디스플레이는 특정 컴퓨터 또는 다른 장치에 고유하게 관련된 것이 아니다. 다양한 범용 시스템이 여기에 개시된 것에 따른 프로그램을 이용할 수 있거나, 일부 실시형태의 방법을 수행하기 위해 더 특수화된 장치를 구성하는 것이 편리한 것으로 입증될 수 있다. 다양한 시스템에 요구되는 구조는 다음 설명에 나타난다. 더하여, 본 발명은 특정 프로그램 언어를 참고하여 기술되지 않으며, 다양한 실시형태가 다양한 프로그래밍 언어를 이용하여 실행될 수 있다.
도9a, 9b 및 9c는 각 실시형태에 따른 흐름도이다. 도9a는 일 실시형태에 따른 흐름도(900A)를 도시한다. 흐름도(900A)는 하나 이상의 모듈에서 동일한 코드 프래그먼트를 검출하는 단계인 블록(902)에서 시작된다. 이 경우에, 상기 모듈은 프로그램, 절차, 기능, 메소드, 객체, 메소드 객체, 블럭, 또는 다른 데이터구조를 포함할 수 있다. 일련의 관련 명령어가 동일하다면, 일 코드 프래그먼트는 다른 코드 프래그먼트와 동일하다. 코드 프래그먼트가 동일한지 여부에 관한 판단은 각 코드 프래그먼트에 관련된 실행가능한 코드를 분석함으로써 실현될 수 있다. 상기 코드 프래그먼트가 동일한 명령어의 시퀀스를 포함하면, 적어도 일부의 코드 프래그먼트는 서로 동일한 것으로 말할 수 있다.
일 실시형태에서, 상기 흐름도(900A)는 실행시간에 상기 동일한 코드 프래그먼트와 동일한 단일 코드 프래그먼트를 제공하는 단계인 블록(904)에서 계속된다. 일반적으로, 코드 프래그먼트는 RAM과 같은 메모리에 상기 코드 프래그먼트를 로딩함으로써 실행시간에 제공된다. 그 제공된 코드 프래그먼트는 상기 메모리에 연결된 프로세서에 의해 실행될 수 있다.
일 실시형태에서, 상기 흐름도(900A)는 상기 단일 코드 프래그먼트를 하나 이상의 모듈 간에서 공유하는 단계인 블럭(906)에서 계속되고, 이어 종료한다. 일 실시형태에서, 상기 공유단계는 완료 메소드(complete method) 또는 블록(block)을 포함할 수 있다. 다른 실시형태에서, 상기 공유단계는 포인터를 이용한 단일 코드 프래그먼트를 참조하는 단계를 포함할 수 있다. 예를 들어, 동일한 코드 프래그먼트에 관련된 객체는 메소드 객체로 포인팅된다. 일 실시형태에서는, 상기 흐름도(900A)는 사용자 개입없이 순차적으로 실행될 수 있다.
도9b는 일 실시형태에 따른 프로세스의 흐름도(900B)를 도시한다. 도9b는 코드 프래그먼트를 동적으로 공유할 수 있는 시스템에서 새로운 코드 프래그먼트를 처리하는 예를 도시한다. 상기 흐름도(900B)는 서버로부터 새로운 코드를 수신하는 단계인 블럭(912)에서 시작된다.
일 실시형태에서, 상기 흐름도(900B)는 공유가능한 코드 프래그먼트가 새로운 코드의 코드 프래그먼트와 동일한지 여부를 판단하는 단계인 결정지점(914)으로 계속된다. 상기 공유가능한 코드 프래그먼트가 상기 새로운 코드의 코드 프래그먼트와 동일하다고 판단되면(914-Y), 상기 흐름도(900B)는 상기 새로운 코드의 그 코드 프래그먼트를 상기 공유가능한 코드 프래그먼트에 대한 참조로 대체하는 단계인 블록(916)으로 진행되고 이어 종료한다. 상기 공유가능한 프래그먼트가 상기 새로운 코드의 코드 프래그먼트와 동일하지 않다면(914-N), 상기 흐름도(900B)는 새로운 코드의 코드 프래그먼트를 장래의 새로운 코드의 코드 프래그먼트와 비교를 위해서 저장하는 단계인 블록(918)으로 진행하고 이어 종료한다.
도9c는 일 실시형태에 따른 프로세서의 흐름도(900C)를 도시한다. 도9c는 코드 프래그먼트 데이터베이스를 포함한 시스템에 새로운 코드를 도입하는 예를 도시한다. 상기 흐름도(900C)는 코드 프래그먼트 데이터베이스를 제1 코드 프래그먼트의 리스트로 유지하는 단계인 블록(922)에서 시작된다. 예를 들어, 상기 리스트된 코드 프래그먼트는 코드 서버에 의해 유지된다.
일 실시형태에서, 상기 흐름도(900C)는 한 세트의 코드 프래그먼트를 도입하는 단계인 블록(924)에서 진행된다. 상기 코드 프래그먼트 세트는 예를 들어 프로그램을 다운로딩하거나 실행시간에 코드를 동적으로 업로딩함으로써 도입될 수 있다.
일 실시형태에서, 상기 흐름도(900C)는 리스트된 코드 프래그먼트와 동일한 코드 프래그먼트 세트의 서브세트에 대해서 상기 코드 프래그먼트 자체를 상기 제1 코드 프래그먼트 중 하나의 참조로 대체하는 단계인 블록(926)에서 진행된다. 이러한 방식에서 코드 참조는 예를 들어 동일한 코드 참조를 포함하는 새로운 코드에 의해 공유될 수 있다.
일 실시형태에서, 상기 흐름도(900C)는 리스트된 코드 프래그먼트와 동일하지 않은 코드 프래그먼트 세트의 서브세트에 대해서, 그 코드 참조를 상기 프래그먼트 데이터베이스에 추가하는 단계인 블록(928)으로 진행된다. 이러한 방식에서, 상기 코드 프래그먼트 데이터베이스는 최근 코드 프래그먼트에 기반한 업데이트를 유지한다. 블록(928) 후에, 상기 흐름도(900C)는 종료한다.
여기서 사용된 바와 같이, 동일 실행가능한 코드 프래그먼트는 의미상 동등한 소스 코드 프래그먼트로부터 유도될 수 있다(또한, 중요한 것은 실행가능한 코드 프래그먼트의 기능이므로, 의미상 동등한 소스 코드 프래그먼트는 구문상 동일한지 여부와 특별히 관계없음). 비동등한 소스 코드가 실행가능한 코드로 번역될 때에 동일한 소스 코드 프래그먼트를 가질 수 있다는 것을 주목해야 할 것이다.
상기한 바와 같이 본 발명에 따르면, 개발자로 하여금 공유할 의사를 명시적으로 표명할 필요가 없게 되고, 실행시간에 동일한 기능성을 갖는 2개의 메소드가 메모리에 존재하는 것을 방지할 수 있게 된다. 이에 따라, 기능성에 대비하여 메모리를 효율적으로 사용 및 관리할 수 있게 된다.
본 발명은 특정 실시형태와 관련된 예로서 기술되어 있으나, 당 기술분야에서 숙련된 자에 의해 본 발명의 기술적 범위 내에서 본 발명의 특정한 변형, 치환, 균등물이 고려될 수 있을 것이다. 따라서, 아래에 첨부된 청구범위를 통해서, 본 발명의 진정한 사상과 범위 내에 해당하는 모든 변형, 치환 및 균등물을 포함하고자 한다. 본 발명은 단지 아래의 청구범위에 의해서만 한정된다.

Claims (20)

  1. 하나 이상의 모듈 내에서 동일한 코드 프래그먼트를 검출하는 단계;
    실행시간에 상기 동일한 코드 프래그먼트와 동일한 단일 코드 프래그먼트를 제공하는 단계; 및
    상기 하나 이상의 모듈 사이에서 상기 단일 코드 프래그먼트를 자동으로 공유하는 단계를 포함하는 프로세스.
  2. 제1항에 있어서,
    상기 모듈은 객체를 포함하는 것을 특징으로 하는 프로세스.
  3. 제1항에 있어서,
    상기 동일한 코드 프래그먼트를 검출하는 단계는 실행가능한 코드를 분석하는 단계를 포함하는 것을 특징으로 하는 프로세스.
  4. 제1항에 있어서,
    상기 단일 코드 프래그먼트를 자동으로 공유하는 단계는 완료 메소드를 공유하는 단계를 포함하는 것을 특징으로 하는 프로세스.
  5. 제1항에 있어서,
    상기 단일 코드 프래그먼트를 자동으로 공유하는 단계는 블록을 공유하는 단계를 포함하는 것을 특징으로 하는 프로세스.
  6. 제1항에 있어서,
    상기 단일 코드 프래그먼트를 자동으로 공유하는 단계는 포인터를 사용하여 상기 단일 코드 프래그먼트를 참조하는 단계를 포함하는 것을 특징으로 하는 프로세스.
  7. 제1항에 있어서,
    상기 단일 코드 프래그먼트는 메소드 객체를 포함하고,
    상기 단일 코드 프래그먼트를 자동으로 공유하는 단계는 각각의 상기 동일한 코드 프래그먼트를 상기 메소드 객체로 포인팅하는 단계를 포함하는 것을 특징으로 하는 프로세스.
  8. 제1항에 있어서,
    상기 동일한 코드 프래그먼트를 검출하는 단계와, 실행시간에 상기 단일 코드 프래그먼트를 제공하는 단계와, 상기 단일 코드 프래그먼트를 자동으로 공유하는 단계는, 유저의 관여 없이 순차적으로 일어나는 것을 특징으로 하는 프로세스.
  9. 제1항에 있어서,
    서버로부터 새로운 코드를 수신하는 단계;
    상기 단일 코드 프래그먼트가 상기 새로운 코드 내의 코드 프래그먼트와 동일한지를 결정하는 단계;
    상기 단일 코드 프래그먼트가 상기 새로운 코드 내의 상기 코드 프래그먼트와 동일한 것으로 결정된 경우, 상기 새로운 코드 내의 상기 코드 프래그먼트를 상기 단일 코드 프레그먼트에 대한 참조로 대체하는 단계; 및
    상기 단일 코드 프래그먼트가 상기 새로운 코드 내의 상기 코드 프래그먼트와 동일하지 않은 것으로 결정된 경우, 장래의 새로운 코드로부터의 코드 프래그먼트와 대비한 비교를 위해 상기 코드 프래그먼트를 상기 새로운 코드 내에 보존하는 단계를 더 포함하는 것을 특징으로 하는 프로세스.
  10. 제1항에 있어서,
    상기 단일 코드 프래그먼트를 포함한, 제1 코드 프래그먼트의 리스트를 코드 프래그먼트 데이타베이스 내에 유지하는 단계; 및
    한 세트의 제2 코드 프래그먼트와 한 세트의 제3 코드 프래그먼트를 도입하는 단계를 더 포함하고,
    상기 제2 코드 프래그먼트 각각은 상기 코드 프래그먼트 데이타베이스 내의 코드 프래그먼트와 동일하고, 상기 제3 코드 프래그먼트 중 어떠한 프래그먼트도 상기 코드 프래그먼트 데이타베이스 내의 코드 프래그먼트와 동일하지 않고,
    상기 도입 단계는 상기 세트의 제2 코드 프래그먼트 각각을 상기 제1 코드 프래그먼트 중 하나에 대한 참조로 대체하는 단계와, 상기 세트의 제3 코드 프래그먼트 각각을 상기 코드 프래그먼트 데이타베이스에 추가하는 단계에 의하여 수행되는 것을 특징으로 하는 프로세스.
  11. 제1항에 있어서,
    실행시간에 코드를 동적으로 업로딩하는 단계를 더 포함하는 것을 특징으로 하는 프로세스.
  12. 제1항에 있어서,
    프로그래밍 언어로 프로그램의 소스 코드를 쓰는 단계;
    상기 소스 코드를 실행가능한 코드로 번역하는 단계; 및
    상기 실행가능한 코드를 상기 하나 이상의 모듈 중 적어도 하나의 모듈로 제공하는 단계를 더 포함하는 것을 특징으로 하는 프로세스.
  13. 제12항에 있어서,
    상기 실행가능한 코드를 실행하는 단계는, 가상 기계를 사용하여 상기 실행가능한 코드를 실행하는 단계를 포함하는 것을 특징으로 하는 프로세스.
  14. 복수의 코드 프래그먼트를 포함할 수 있는 코드 프래그먼트 데이타베이스; 및
    프로그램에 대한 요구를 수신하고 상기 코드 프래그먼트 데이타베이스 내의 상기 복수의 코드 프래그먼트 중 하나 이상에 대한 참조를 제공하도록 구성된 코드 서버를 포함하고,
    상기 복수의 코드 프래그먼트 중 상기 하나 이상은 요구된 프로그램과 관련된 것을 특징으로 하는 시스템.
  15. 제14항에 있어서,
    상기 코드 서버는 하나 이상의 객체 내에서 동일한 코드 프래그먼트를 검출하도록 구성된 것을 특징으로 하는 시스템.
  16. 제14항에 있어서,
    상기 코드 서버는 상기 프로그램을 다운로드하고 상기 프로그램 내의 코드 프래그먼트에 따라 상기 코드 프래그먼트 데이타베이스를 업데이트하도록 구성된 것을 특징으로 하는 시스템.
  17. 제14항에 있어서,
    상기 코드 서버는 상기 코드 프래그먼트 데이타베이스를 구축하고 유지하도록 구성된 것을 특징으로 하는 시스템.
  18. 제14항에 있어서,
    새로운 코드 프래그먼트를 상기 코드 서버에 제공하도록 구성된 개발자 I/O 모듈을 더 포함하고,
    상기 코드 서버는 상기 새로운 프래그먼트에 따라 상기 코드 프래그먼트 데이타베이스를 업데이트하도록 구성된 것을 특징으로 하는 시스템.
  19. 제1 네임드 메소드와 관련된 참조를 포함한 제1 객체;
    제2 네임드 메소드와 관련된 참조를 포함한 제2 객체; 및
    메소드 객체를 포함하고,
    상기 제1 네임드 메소드와 관련된 상기 참조와 상기 제2 네임드 메소드와 관련된 상기 참조는 상기 메소드 객체로의 포인터인 것을 특징으로 하는 시스템.
  20. 제19항에 있어서,
    상기 제1 객체 및 제2 객체는 서로 다른 클래스와 관련된 것을 특징으로 하는 시스템.
KR1020050099021A 2005-04-22 2005-10-20 프로그램 프래그먼트를 공유하는 프로세스 및 시스템 KR20060111349A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/112,727 US20060242631A1 (en) 2005-04-22 2005-04-22 Process and system for sharing program fragments
US11/112,727 2005-04-22

Publications (1)

Publication Number Publication Date
KR20060111349A true KR20060111349A (ko) 2006-10-27

Family

ID=35708506

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020050099021A KR20060111349A (ko) 2005-04-22 2005-10-20 프로그램 프래그먼트를 공유하는 프로세스 및 시스템

Country Status (4)

Country Link
US (1) US20060242631A1 (ko)
KR (1) KR20060111349A (ko)
AU (1) AU2005203423A1 (ko)
WO (1) WO2006111209A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170023022A (ko) * 2014-06-30 2017-03-02 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 코드 추천 기법

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070028162A1 (en) * 2005-07-30 2007-02-01 Microsoft Corporation Reusing content fragments in web sites
US8578332B2 (en) * 2007-04-30 2013-11-05 Mark Murray Universal microcode image
US20090049425A1 (en) * 2007-08-14 2009-02-19 Aladdin Knowledge Systems Ltd. Code Obfuscation By Reference Linking
US9110769B2 (en) * 2010-04-01 2015-08-18 Microsoft Technology Licensing, Llc Code-clone detection and analysis
US8321426B2 (en) * 2010-04-30 2012-11-27 Hewlett-Packard Development Company, L.P. Electronically linking and rating text fragments
CN102546718A (zh) * 2010-12-31 2012-07-04 上海可鲁系统软件有限公司 一种分布式平台中功能模块软件配置方法
JP2013210920A (ja) * 2012-03-30 2013-10-10 Nec Corp コンパイル装置、コンパイル方法及びコンパイラ

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0658624B2 (ja) * 1990-03-30 1994-08-03 インターナショナル・ビシネス・マシーンズ・コーポレーション グラフィカル・ユーザ・インターフェース管理装置
US5446899A (en) * 1992-06-26 1995-08-29 Digital Equipment Corporation Hint generation in smart recompilation
JPH06103075A (ja) * 1992-07-06 1994-04-15 Internatl Business Mach Corp <Ibm> オブジェクト指向適用業務
US5924101A (en) * 1997-10-14 1999-07-13 International Business Machines Corporation User interface for creating class definitions and implementations for datastore persistent objects
US6484214B1 (en) * 1998-03-05 2002-11-19 Mcdonnell Douglas Helicopter Company Method for distributed object communications based on dynamically acquired and assembled software components
US6324685B1 (en) * 1998-03-18 2001-11-27 Becomm Corporation Applet server that provides applets in various forms
AU3106099A (en) * 1998-03-27 1999-10-18 Infoimage Incorporated Methods and apparatus for network applications using object tools
FR2781582B1 (fr) * 1998-07-21 2001-01-12 Technical Maintenance Corp Systeme de telechargement d'objets ou de fichiers pour mise a jour de logiciels
US6263429B1 (en) * 1998-09-30 2001-07-17 Conexant Systems, Inc. Dynamic microcode for embedded processors
FR2785695B1 (fr) * 1998-11-06 2003-01-31 Bull Cp8 Procede de compactage d'un programme de type code objet intermediaire executable dans un systeme embarque muni de ressources de traitement de donnees, systeme compacteur et systeme embarque multi-applications correspondants
FR2828296B1 (fr) * 2001-08-03 2003-12-12 Trusted Logic Procede de compression de code objet interprete par factorisation d'expressions arborescentes
DE10216602A1 (de) * 2002-04-15 2003-10-30 Giesecke & Devrient Gmbh Optimierung von compilergeneriertem Programmcode
US7194732B2 (en) * 2003-06-26 2007-03-20 Hewlett-Packard Development Company, L.P. System and method for facilitating profiling an application

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170023022A (ko) * 2014-06-30 2017-03-02 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 코드 추천 기법

Also Published As

Publication number Publication date
WO2006111209A1 (en) 2006-10-26
US20060242631A1 (en) 2006-10-26
AU2005203423A1 (en) 2006-11-09

Similar Documents

Publication Publication Date Title
US20050186625A1 (en) Process and system for sharing program fragments
US9063765B2 (en) System and methods for distributed execution of computer executable programs utilizing asymmetric translation
US7987459B2 (en) Application programming interface for identifying, downloading and installing applicable software updates
US6584612B1 (en) Transparent loading of resources from read-only memory for an application program
US8510734B2 (en) Streaming optimized virtual application images
US20200104143A1 (en) Conservative class preloading for real time java execution
US7117504B2 (en) Application program interface that enables communication for a network software platform
EP1174793A2 (en) System and method providing multi-tier applications architecture
KR20060111349A (ko) 프로그램 프래그먼트를 공유하는 프로세스 및 시스템
US9454616B2 (en) Method and system for unifying configuration descriptors
US20060031833A1 (en) Methods and apparatus for a web application processing system
JP2007524875A (ja) ネットワーク・ベースの処理のためのシステムおよび方法
KR20070015440A (ko) 고레벨 프로그래밍 언어들로부터 분산 인터랙티브애플리케이션들을 동적으로 구성하는 방법들 및 시스템들
US10365919B1 (en) Managing software assets installed in an integrated development environment
US20070271550A1 (en) System and method for extensible java server page resource management
US20060242654A1 (en) Process and apparatus for sharing inline caches
Kon et al. Design, implementation, and performance of an automatic configuration service for distributed component systems
EP1902379B1 (en) Node-to-node communication pipelines
JP5209058B2 (ja) ソフトウェア・コンポーネントを作成するための方法
US7263696B1 (en) Dynamic web based jar file finder
US8001523B1 (en) System and methods for implementing an explicit interface member in a computer programming language
CN113535188A (zh) 私有化部署的方法和装置
CN115934123A (zh) 一种客户端逻辑更新方法、装置、电子设备及存储介质
CN115134396A (zh) 服务的调用方法、装置、电子设备及存储介质
Ulkuniemi Stand-Alone. NET Microservices with Cameras and Image Comparison

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application