KR20070015440A - 고레벨 프로그래밍 언어들로부터 분산 인터랙티브애플리케이션들을 동적으로 구성하는 방법들 및 시스템들 - Google Patents

고레벨 프로그래밍 언어들로부터 분산 인터랙티브애플리케이션들을 동적으로 구성하는 방법들 및 시스템들 Download PDF

Info

Publication number
KR20070015440A
KR20070015440A KR1020067024803A KR20067024803A KR20070015440A KR 20070015440 A KR20070015440 A KR 20070015440A KR 1020067024803 A KR1020067024803 A KR 1020067024803A KR 20067024803 A KR20067024803 A KR 20067024803A KR 20070015440 A KR20070015440 A KR 20070015440A
Authority
KR
South Korea
Prior art keywords
generating
input program
class
syntax tree
abstract syntax
Prior art date
Application number
KR1020067024803A
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 KR20070015440A publication Critical patent/KR20070015440A/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/22Microcontrol or microprogram arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/38Creation or generation of source code for implementing user interfaces
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/51Source to source

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Stored Programmes (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

본 출원서는 고레벨 프로그래밍 언어들로부터 분산 인터랙티브 애플리케이션들의 동적 구성을 위한 방법 및 시스템에 관한 것이다. 전형적인 시스템은 시스템 프로세서(120)와 통신하는 시스템 프로세서 및 SDS(system data store)를 포함한다. 본 명세서에 기술된 방법들은 시스템 프로세서 및 SDS와 같은 어떠한 적절한 하드웨어 플랫폼에서 실행할 수 있다. 상기 방법들은 추가로 하나 또는 그 이상의 컴퓨터 판독가능 매체상에 저장되는 컴퓨터 실행가능 명령어들에서 활용될 수 있다. 대안적으로, 그러한 방법들 중 일부 또는 모두가 필드 프로그램 가능 게이트 어레이들 또는 애플리케이션 특정 집적 회로들과 같은 적절한 하드웨어에서 구현될 수 있고, 다른 단계들 또는 모든 단계들은 범용 프로세서에 의해 실행가능한 명령어들을 통해 구현될 수 있다. 예시적인 방법은, (1) 클라이언트(210)로부터 인터랙티브 애플리케이션에 대한 요청을 수신하는 단계와, (2) 상기 수신된 요청에 기초하여 입력 프로그램 언어로 입력 프로그램(850)을 선택하는 단계와, (3) 상기 선택된 입력 프로그램을 추상 구문 트리(420)로 파싱하는 단계와, (4) 하나 또는 그 이상의 연기된 바인딩 요청들(430)에 기초하여 상기 추상 구문 트리를 업데이트하는 단계와, (5) 상기 업데이트된 추상 구문 트리로부터 타겟 언어로 상기 인터랙티브 애플리케이션을 생성하는 단계(470)를 포함한다.

Description

고레벨 프로그래밍 언어들로부터 분산 인터랙티브 애플리케이션들을 동적으로 구성하는 방법들 및 시스템들{METHODS AND SYSTEMS FOR DYNAMICALLY COMPOSING DISTRIBUTED INTERACTIVE APPLICATIONS FROM HIGH-LEVEL PROGRAMMING LANGUAGES}
본 출원서는 공동 소유중인 미국 가출원서 제 60/565,443 호 및 제 60/666,116 호에 따라 우선권을 청구하며, 그것들 모두는 이러한 참조에 따른 모든 목적들을 위해 본 명세서에 전체적으로 포함된다.
본 발명은 고레벨 프로그래밍 언어들로부터 분산 인터랙티브 애플리케이션들의 동적 구성을 위한 방법 및 시스템에 관한 것이다. 인터넷은 접속된 컴퓨터 네트워크들의 글로벌 네트워크이다. 지난 수십년에 걸쳐, 인터넷은 중요한 기준으로 성장하여 왔다. 인터넷상의 많은 수의 컴퓨터들은 다양한 형태들로 정보를 제공한다. 인터넷에 접속되는 컴퓨터를 갖는 어느 누구도 정보의 이러한 광대한 시설에 잠재적으로 연결될 수 있다.
인터넷을 통해 사용가능한 정보는 SMTP(simple mail transfer protocol), POP3(Post Office Protocol), GOPHER(RFC 1436), WAIS, HTTP(Hypertext Transfer Protocol, RFC 2616), 및 FTP(file transfer protocol, RFC 1123)과 같은 애플리케이션 계층 정보 서버들의 다양한 형태들을 통해 사용가능한 정보를 포함한다.
인터넷에 걸쳐 정보를 제공하는 가장 폭 넓은 방법들 중 하나는 월드 와이드 웹(웹)을 통해서이다. 웹은 인터넷에 접속되는 컴퓨터들의 서브세트로 구성되고, 이러한 서브셋에 따른 컴퓨터들은 HTTP(Hypertext Transfer Protocol) 서버들(웹 서버들)을 운영한다. HTTP에 따른 몇 가지 확장들 및 수정들은 예를 들어 확장 프레임워크(RFC 2774) 및 인증(RFC 2617)을 포함하는 것을 제안하여 왔다. 인터넷상의 정보는 URI(Uniform Resource Identifier, RFC 2396)의 사용을 통해 액세스될 수 있다. URI는 인터넷상의 정보의 특정한 부분의 위치를 독특하게 명시한다. URI는 전형적으로 몇 가지 구성요소들로 구성된다. 제 1 구성요소는 전형적으로 정보의 어드레스 부분이 액세스되는 프로토콜(예로써, HTTP, GOPHER 등등)을 지정한다. 이러한 제 1 구성요소는 콜론(';')에 의해 URI의 나머지로부터 분리된다. URI의 나머지는 프로토콜 구성요소에 의존할 것이다. 전형적으로, 그 나머지는 지정된 컴퓨터에 대해 리소스의 위치의 보다 명확한 지정뿐만 아니라, 명칭에 의해 인터넷상의 컴퓨터를 지정한다. 예를 들어, HTTP 리소스에 대한 전형적인 URI는,
http://www.server.com/dir1/dir2/resource.htm
일 수 있다.
HTTP가 프로토콜인 경우, www.server.com은 지정된 컴퓨터 명칭이고, dir1/dir2/resource.htm은 지정된 컴퓨터에 대한 리소스의 위치를 지정한다. 용어 URI는 RFC 2141에 따라 규정된 URN들을 포함하는 URN들(Uniform Resource Names)을 포함한다.
웹 서버들은 웹 페이지들의 형태에 따라 정보를 호스팅하고, 호스팅되는 정 보 및 서버를 집합적으로 웹 사이트로 언급한다. 웹 페이지들의 상당수는 SGML, XML(eXtensible Markup Language), DHMTL, 또는 XHTML을 사용하는 다른 인코딩들이 가능할지라도 HTML(Hypertext Markup Language)를 사용하여 인코딩된다. 이러한 언어들에 대해 공개된 사항들은 본 명세서에 참조로 포함되고, 그러한 사항들은 월드 와이드 웹 콘소시엄 및 그것의 웹 사이트(http://www.w3c.org)로부터 사용가능하다. 이러한 포맷팅 언어들에 따른 웹 페이지들은 동일한 웹 사이트 또는 또 다른 것에 대한 다른 웹 페이지들로의 링크들을 포함할 수 있다. 당업자들에게 알려진 바와 같이, 웹 페이지들은 웹 클라이언트에 전송하기 이전에 포맷된 페이지로 다양한 요소들을 통합하여 서버에 의해 동적으로 생성될 수 있다. 다른 형태들의 정보 서버들 및 웹 서버들은 인터넷 클라이언트들로부터 정보에 대한 요청들을 기다린다.
인터넷에 접속되는 컴퓨터들의 사용자들이 이러한 정보에 액세스하도록 허용하는 클라이언트 소프트웨어가 개발되어 왔다. 넷스케이프의 네비게이터 및 마이크로소프트의 인터넷 익스플로러와 같은 진보된 클라이언트들은 사용자들이 통합된 클라이언트 환경에서 다양한 정보 서버들을 통해 제공되는 소프트웨어를 액세스하도록 허용한다. 전형적으로, 그러한 클라이언트 소프트웨어는 브라우저 소프트웨어로 언급된다.
많은 이러한 브라우저들은 서버로부터 다운로드되는 스크립트 애플리케이션들의 해석적 실행을 수행하기 위한 능력을 포함한다. 본 명세서에 기술된 시스템들 및 방법들은 웹 브라우저들에서 사용하기 위한 애플리케이션들의 빠른 개발 및 전 개를 지원한다.
본 출원서는 고레벨 프로그래밍 언어들로부터 분산 인터랙티브 애플리케이션들의 동적 구성을 위한 방법 및 시스템에 관한 것이다. 전형적인 시스템은 시스템 프로세서와 통신하는 SDS(system data store) 및 시스템 프로세서를 포함한다. 시스템 프로세서는 하나 또는 그 이상의 프로세싱 요소들을 포함할 수 있다. 시스템 프로세서는 또한 통신 채널에 접속되는 통신 어댑터들과 통신한다. 통신 채널은 시스템 프로세서로부터 각각 웹 브라우저를 실행하는 하나 또는 그 이상의 클라이언트 컴퓨터들까지의 통신을 허용할 수 있다.
본 명세서에 기술된 방법들은 상기 기술된 바와 같이 또는 이하 보다 상세히 기술되는 바에 따라 어떠한 적절한 하드웨어 플랫폼에 대해 수행할 수 있다. 상기 방법들은 추가로 하나 또는 그 이상의 컴퓨터 판독가능 매체상에 저장되는 컴퓨터 실행가능 명령어들에 따라 구체화될 수 있다. 대안적으로, 그러한 방법들의 단계들 중 일부 또는 모두가 필드 프로그램 가능 게이트 어레이들 또는 애플리케이션 특정 집적 회로들과 같은 적절한 하드웨어로 구현될 수 있고, 다른 단계들 또는 모든 단계들이 범용 프로세서에 의해 실행가능한 명령어들을 통해 구현될 수 있다.
본 출원서는 고레벨 프로그래밍 언어들로부터 분산 인터랙티브 애플리케이션들의 동적 구성을 위한 방법들을 기술한다. 한 가지 그러한 방법은 (1) 클라이언트로부터 인터랙티브 애플리케이션에 대한 요청을 수신하는 단계와, (2) 상기 수신된 요청에 기초하여 입력 프로그램 언어에서 입력 프로그램을 선택하는 단계와, (3) 추상 구문 트리로 상기 선택된 입력 프로그램을 파싱하는 단계와, (4) 하나 또는 그 이상의 연기된 바인딩 요청들에 기초하여 상기 추상 구문 트리를 업데이트하는 단계와, (5) 상기 업데이트된 추상 구문 트리로부터 타겟 언어에서 상기 인터랙티브 애플리케이션을 생성하는 단계를 포함한다. 본 명세서에 인용되고 추가로 다음에 따르는 특허청구범위에서와 이하 관련된 단계들은 문맥이 명확히 그러한 순서를 요구하지 않는 경우에 어떠한 특정 순서를 따르지 않으므로, 단계에 선행하는 참조 문자들 또는 번호들은 단지 참조 목적을 위해 제공되며 특정한 순서에 따른 제한을 의미하지는 않는다. 추가로, 일부 구현들에 있어서, 단일한 단계가 여러 기능들을 포함할 수 있고, 대안적을 여러 단계들이 단일한 기능으로 결합될 수 있다.
추가적인 장점들은 다음에 따르는 기술에서 부분적으로 설명되고 부분적으로 그 기술로부터 명백해지거나, 본 발명의 실행에 따라 학습될 수 있다. 기술된 시스템들 및 방법들의 장점들은 특별히 본 명세서에서 지적되는 요소들 및 조합들에 의해 실현 및 획득될 수 있다. 일반적 기술 및 상세한 기술 모두가 예시적이며, 본 발명을 제한하지 않는 것으로 이해될 것이다.
도 1은 입력 프로그램으로부터 인터랙티브의 동적 구성의 추상적인 개요를 도시한 도면.
도 2는 본 시스템들 및 방법들을 구현할 수 있는 전형적인 환경을 도시한 도면.
도 3은 연기된 바인딩에 대한 예시적인 프로세스를 도시한 도면.
도 4는 인터랙티브 애플리케이션 생성에 따른 단계들을 나타내는 프로세스를 도시한 도면.
도 5는 몇 가지 방식들에 따라 콘텍스트 정보의 생성기 사용을 도시한 도면.
도 6은 입력 프로그램 내에 매립되는 구성된 인터랙티브 프로그램의 타겟 언어에서 선천적 코드의 예시적 포함을 도시한 도면.
도 7은 출력 프로그램들이 전형적인 웹 지향 구현에 따라 캐싱될 수 있는 다양한 단계들을 도시한 도면.
도 8은 예시적 명명 및 캐싱 접근 방식을 도시한 도면.
예시적인 시스템들 및 방법들은 현재 첨부된 자료들 및 포함된 컴팩트 디스크 부록에 상세히 기술되어 있다. 본 명세서 내 기술에 따라 사용되는 바와 같이, "하나" 및 "상기"의 의미는 문맥이 명확히 다른 것을 설명하지 않는 경우 복수의 참조를 포함한다. 또한, 본 명세서 내 기술에서 사용되는 바와 같이, "-내"의 의미는 문맥이 다른 것을 명확히 설명하지 않는 경우 "-내" 및 "-상"을 포함한다. 마지막으로, 본 명세서 내 기술에서 사용되는 바와 같이, "및"과 "또는"의 의미는 접속 및 분리 모두를 포함하고, 문맥이 다른 것을 명확히 설명하지 않는 경우 상호 교환가능하게 사용될 수 있으며, 용어 "배타적 논리합'은 단지 분리적인 의미가 적용될 수 있는 상황을 표시하도록 사용될 수 있다.
상기 기술된 시스템들 및 방법들의 애플리케이션 개발, 구성, 및 전개 기능을 지원하는 구성요소들 중 하나 또는 그 이상에 대한 전형적인 실행 환경의 하드 웨어는 하드웨어 구성요소들에 걸쳐 분산될 수 있는 여러 프로세싱 요소들을 잠재적으로 포함하는 시스템 프로세서를 포함할 수 있고, 여기서 각각의 프로세싱 요소는 적어도 하나의 펜티엄 계열 또는 셀러론 계열(Inter Corp., 캘리포니아주 산타클라라) 프로세서를 사용하는 것이 바람직한 인텔 호환 가능 프로세서 플랫폼들과 같은 범용 프로세서를 통해 지원될 수 있고, UltraSPARC(Sun Microsystems, 캘리포니아주 팔로알토) 및 IBM zSeries 계열 프로세서들이 다른 실시예들에서 사용될 수 있으며, 장래의 프로세서들이 다양한 구현들에 의해 지원될 것이 기대된다.
일부 실시예들에서, 추가로 이하 기술되고 첨부 및 포함된 자료들 및 컴팩트 디스크 부록에서 애플리케이션 개발, 구성, 및 전개가 여러 프로세싱 요소들에 걸쳐 분산될 수 있다. 용어 프로세싱 요소는 (1) 하드웨어의 특정한 부분상에서 또는 특정한 부분들에 걸쳐 작동하는 프로세스나, (2) 하드웨어의 특정 부분이나, 문맥이 허용하는 바에 따라 (1) 또는 (2)를 언급할 수 있다.
일부 구현들은 DSP(digital signal processor), ASIC(application specific integrated circuits), 또는 FPGA(field programmable gate arrays)와 같은 하나 또는 그 이상의 제한된 특수 목적 프로세서들을 포함할 수 있다. 추가로, 일부 구현들은 범용 및 특수 목적 프로세서들의 조합들을 사용할 수 있다.
하드웨어는 추가로 다양한 제 1 및 제 2 저장 요소들을 포함할 수 있는 SDS(system data store)를 포함한다. 하나의 양호한 실시예에서, SDS는 제 1 저장소의 일부로 RAM을 포함할 것이다. 제 1 저장소는 캐시 메모리, 저항기들, 비휘발성 메모리(예로써, 플래시, ROM, EPROM 등등) 등등과 같은 메모리의 다른 형태들을 포함할 수 있다.
SDS는 또한 단일, 다중, 및/또는 변형된 서버들 및 저장 요소들을 포함하는 제 2 저장소를 포함할 수 있다. 예를 들어, SDS는 시스템 프로세서에 접속되는 내부 저장 디바이스들을 사용할 수 있다. 단일 프로세싱 요소가 모든 시스템 기능을 지원하는 실시예들에서, 로컬 하드 디스크 드라이브는 SDS의 제 2 저장소로 작동할 수 있고, 그러한 단일 프로세싱 요소상에서 실행하는 디스크 운영 시스템은 데이터 요청들을 수신 및 서비스하는 데이터 서버로 작동할 수 있다.
본 명세서에 개시된 시스템들 및 방법들에서 사용되는 서로 다른 정보가 SDS나, 통합된 관리 시스템을 통해 액세스 가능한 다중 관련 데이터 저장들로서, 함께 SDS로 작동하는, 상기 다중 관련 데이터 저장들이나, 다른 관리 시스템들을 통해 개별적으로 액세스 가능한 다중 독립 데이터 저장들로서, 일부 실시예들에서 SDS로 집합적으로 보여질 수 있는, 상기 다중 독립 데이터 저장들에 대한 제 2 저장소로 작동하는 단일 디바이스 내에서 논리적 또는 물리적으로 분리될 수 있다는 것을 당업자들은 이해할 것이다. SDS의 물리적 구조를 포함하는 다양한 저장 요소들은 다양한 다른 위치들에 걸쳐 중앙에 위치되거나 분산될 수 있다.
시스템 데이터 저장의 제 2 저장소의 구조는 서로 다른 실시예들에서 현저히 변경될 수 있다. 몇 가지 실시예들에서, 데이터베이스(들)가 그 데이터를 저장하고 조작하도록 사용되고, 일부 그러한 실시예들에서 DB2(IBM, 뉴욕주 화이트플레인스), SQL Server(Microsoft, 워싱톤주 레드몬드), ACCESS(Microsoft, 워싱톤주 레드몬드), ORACLE 8i(Oracle Corp., 캘리포니아주 레드우드 쇼어스), Ingres(Computer Associates, 뉴욕주 아일랜디아), MySQL(MySQL AB, 스웨덴), 또는 Adaptive Server Enterprise(Sybase Inc., 캘리포니아주 에머리빌)와 같은 하나 또는 그 이상의 관련 데이터베이스 관리 시스템들은 제한 없이 IDE 및 SCSI를 포함하는 어떠한 적절한 인터페이스를 사용하여 하나 또는 그 이상의 표준 자기 및/또는 광 디스크 드라이브들을 포함할 수 있는 다양한 저장 디바이스들/파일 서버들과 접속하여 사용될 수 있다. 일부 실시예들에서, Exabyte X80(Exabyte Corporation, 콜로라도주 볼더)과 같은 테이프 라이브러리, (EMC, Inc., 매사츄세츠주 홉킨톤)으로부터 사용가능한 것과 같은 SAN(storage attached network) 솔루션, NetApp Filer 740(Network Appliances, 캘리포니아주 서니베일)과 같은 NAS(network attached storage) 솔루션, 또는 그의 조합들이 사용될 수 있다. 다른 실시예들에서, 데이터 저장은 객체 지향, 공간, 객체 관련, 또는 계층과 같은 다른 구조들을 통해 데이터베이스 시스템들을 사용할 수 있다.
상기 논의된 그러한 조직적 접근 방식들 대신에 또는 이외에, 어떠한 실시예들이 해시 테이블들 또는 플랫 파일들(flat files)이나, 그러한 구조들의 조합들과 같은 다른 저장소 구현들을 사용할 수 있다. 그러한 대안적인 접근 방식들은 해시 테이블 룩업 서버, 절차 및/또는 프로세스 및/또는, 플랫 파일 검색 서버, 절차 및/또는 프로세스와 같은 데이터베이스 관리 시스템들과는 다른 데이터 서버들을 사용할 수 있다. 추가로, SDS는 그것의 제 2 저장소 구조를 조직하는데 그러한 접근 방식들 중 어느 것의 조합을 사용할 수 있다.
하드웨어 구성요소들은 WINDOWS/NT, WINDOWS 2000, 또는 WINDOWS/XP Server(Microsoft, 워싱톤주 레드몬드), Solaris(Sun Microsystems, 캘리포니아주 팔로알토), 또는 LINUX(또는 다른 UNIX 변형)과 같은 적절한 운영 시스템을 각각 가질 수 있다. 전체 환경의 하드웨어/운영 시스템 플랫폼에 의존하여, 웹 서버 기능성은 Internet Information Server(Microsoft, 워싱톤주 레드몬드), Apache HTTP server(Apache Software Foundation, 메릴랜드주 포레스트 힐), iPlanet Web Server(iPlanet E-Commerce Solutions--A Sun--Netscape Alliance, 캘리포니아주 마운틴 뷰), 또는 다른 적절한 웹 서버 플랫폼을 통해 제공될 수 있다. 브라우저 소프트웨어는 이하 추가로 기술되는 방법들에 따라 그러한 서버 소프트웨어와 통신할 수 있다.
도 1에 도시된 바와 같이, 전형적인 프로세스는 프로그램 기술("입력 프로그램")(110)을 소모하고, 다양한 상황 요인들("콘텍스트")(140)을 선택적으로 설명함으로써, 강화된 유도된 출력 프로그램("출력 프로그램")(130)을 생성한다(140). 입력 프로그램들가 결과적으로 연관된 출력 프로그램들은 본질적으로 일반적 목적을 위한 것이며, 어떠한 특정 산업 또는 도메인 특정 컨셉들로 지향될 필요가 없다.
도 2와 관련하여, 본 명세서에 기술된 방법들의 전형적인 구현은 하나 또는 그 이상의 클라이언트 구성요소들(예로써, 220)에 의한 요청들에 응답하여 출력 플그램을 생성하도록 입력 프로그램을 프로세싱하는 하나 또는 그 이상의 서버 구성요소들(예로써, 210)을 포함한다. 클라이언트 및 서버 구성요소들 모두는 전형적으로 적절한 통신 프로토콜에 따라 적절한 통신 채널에 걸쳐 인터랙팅할 수 있는 소프트웨어 모듈들로 구현될 것이다. 통신 채널은 TCP/IP와 같은 적절한 네트워킹 프 로토콜이나 HTTP와 같은 보다 높은 레벨의 프로토콜들에 따른 컴퓨터 네트워크(230)인 것이 바람직하다. 서버 구성요소들은 전형적으로 자립형 프로세스들(예를 들어, HTTP 서버) 또는 다른 호스트 프로세스들에 대한 플러그 인들(예를 들어, Microsoft IIS 또는 Apache httpd와 같은 확장가능한 HTTP 서버들)로 디자인될 것이다. 클라이언트 구성요소들은 전형적으로 임의의 논리 네트워크 위치들에 따라 그것들의 사용자들에 의해 반영될 수 있는 애플리케이션들로 디자인될 것이다. 그러한 클라이언트 구성요소의 공지된 예는 그것의 사용자가 URL을 통해 네트워크 위치를 명시하도록 허용하고 HTTP 프로토콜을 사용하여 정보를 전송 및 수신하는 웹 브라우저이다. 적절한 클라이언트 구성요소들의 다른 예들은 Java WebStart, 네트워크화된 애플리케이션 "라운처"를 포함한다.
기술된 시스템은 입력 프로그램의 특정한 형태를 설명하지 않는다. 컴퓨터 판독가능한 형태에 따라 제작자의 의도의 어떠한 명확한 표현도 Java, C, C++, C#, 또는 자바스크립트 언어들과 같은 필수적인 프로그래밍 언어들과, XML 기반 방식을 통해 표현될 수 있는 구조화된 명세들 또는 Prolog 언어와 같은 선언적 프로그래밍 언어들과, Haskell 또는 LISP 언어들과 같은 기능적 프로그래밍 언어들과, 프로그램적으로 파싱 및 분석될 수 있는 소프트웨어의 동작을 표현하는 어떠한 다른 방법이나 상기의 어떠한 조합을 사용하여 표현되는 프로그램 기술들을 포함하며 이에 제한되지 않는 잠재적으로 유효한 입력 프로그램이다. 본 명세서에 기술된 방법들의 전형적인 구현은 자바 프로그래밍 언어에 따른 소스 코드로 쓰여진 입력 프로그램들을 사용하며, 그 이유는 그것의 대중성 때문이다.
입력 프로그램들을 개발하기 위한 프로그래밍 언어들의 어떠한 선택들을 지원하는 기술된 시스템의 구현들은 입력 프로그램이 적절한 사전 프로세싱 단계들을 통해 툴들에 의해 분석 및 조작될 수 있는 경우에 추가적인 이익들을 제공할 수 있다. 예를 들어, 입력 프로그램들이 자바 언어로 쓰여지는 구현은 개발 환경들, 디버거들, 프로파일러들, 코드 커버리지 분석 툴들, 유닛 테스트 툴들 등등과 같은 자바 툴들의 전체의 존재로부터 도움을 받는다. 이것은 심지어 출력 프로그램이 입력 프로그램가 동일한 범위에서 툴들에 따라 수정가능하지 않을 때(또는 그러한 툴들이 사용가능하지 않은), 출력 프로그램이 본질적으로 그러한 툴들에 대해 수정가능한 입력 프로그램의 이익들을 갖기 때문에 본 명세서에 기술된 시스템과 관련된다. 계속해서 이전 예들에서, 입력 프로그램들이 예를 들어 자바 언어로 쓰여지고 출력 프로그램들이 자바스크립트 언어로 생성되는 경우, 유용한 자바스크립트의 결함은 (1) 입력 프로그램의 제작자가 많은 유용하고 응용가능한 툴들을 갖는 자바 언어로 작업하고 (2) 출력 프로그램들이 입력 프로그램에 대해 기능에서 본질적으로 같다는 것을 본 명세서에 기술된 시스템 및 방법들이 확인한다는 결합된 요인들에 의해 극복된다. 다시 말해서, 제작자는 단지 입력 시스템(양호한 툴들이 적용될 수 있는 것)에 관련되고, 시스템은 출력 프로그램이 "단지 작동한다"는 것을 보장한다. 입력 프로그램들이 자바 언어로 쓰여지는 경우, 예를 들어 소프트웨어 개발자들이 완전히 자바 중점 환경에서 그것들의 입력 프로그램들을 에디트하고, 운영하고, 디버깅할 수 있어서, 그에 따라 나중에 완전히 서로 다른 언어(예를 들어, 자바스크립트)에 따라 출력 프로그램들을 생성할 수 있는 "호스팅된 모드"와 같은 개념들 도입하는 것이 가능하다. 그 효과는 개발자들이 최종 출력 프로그램의 포맷 또는 언어에 대한 고려 없이 매우 생산적인 "호스팅된 모드" 개발 환경에서 작동할 수 있다는 것이다.
기술된 시스템은 출력 프로그램의 생성 동안 정보의 콘텍스트의 제한 없는 세트를 사용할 수 있고, 그에 의해 해석의 방법들이 어떻게 출력 프로그램으로 형태, 구조, 동작, 및 다른 속성들을 전달하는지에 대해 영향을 미친다. 해석 프로세스에 영향을 미칠 수 있는 콘텍스트 정보는 제한 없이, (1) (예를 들어, HTTP 프로토콜을 사용하는 전형적인 구현에서 클라이언트가 그것의 "사용자 에이전트 지정"과 같은 다른 표준 HTTP 요청 헤더들 및 그것의 저장된 "쿠키들"에 대한 정보를 자동적으로 전송할 수 있다) 요청 클라이언트에 의해 암시적으로 명시된 데이터와, (2) (예를 들어, HTTP 기반 구현에서 클라이언트가 사용자 공급 URL로부터의 쿼리 스트링, 명확한 HTTP 요청 헤더들, 및 클라이언트 내 프로그램 실행을 결과로 나타내는 다른 데이터를 전송할 것이다) 요청 클라이언트에 의해 명확히 명시된 데이터와, (3) (예를 들어, 문화 및 국부적 세팅들, 시스템 날짜, 시스템 시간, 및 다른 세팅들과 같은 서버 구성요소의 호스트 플랫폼의 하드웨어 및 소프트웨어 구성을 기술하는 운영 시스템에 의해 제공되는 애플리케이션 프로그래밍 인터페이스들 또는 "환경 변수들"의 운영 시스템 특징을 사용하여) 그것들의 실행 환경에 관해 서버 구성요소들에서 암시적으로 사용가능한 데이터와, (4) (예를 들어, 자바 시스템 속성들에 대한 값들을 명시하는) 기술된 시스템을 통해 소프트웨어의 발행자 또는 제작자에 의해 명시되는 서버 구성요소들에서 명확히 사용가능한 데이터를 포함할 수 있다.
기술된 시스템은 콘텍스트 정보의 어떠한 특정 형태들의 유용성을 설명할 필요가 없지만, 대신에 콘텍스트 정보의 새로운 소스들이 그 시스템을 수정하기 보다는 그 시스템에 추가함으로써 사용가능하게 구성될 수 있도록 "콘텍스트 플러그 인들"에 의해 확장되도록 구현될 수 있다. 전형적인 구현은 지정된 자바 클래스들, DLL들(dynamic link libraries), 공유되는 객체 코드, 및 코드의 런타임 로딩에 대해 유사한 설비들을 포함하며 이에 제한되지 않는 코드를 동적으로 로딩하는 설정된 메카니즘들을 사용할 수 있다. 콘텍스트 플러그 인들이 시스템의 특정 전개에서 사용되는 지정 단계는 재구성 가능한 선택일 수 있고, 콘텍스트 플러그 인들의 세트는 어떠한 방식에 따라 서버 구성요소에 의해 고정되거나 암시될 필요가 없다. 전형적인 구현은 데이터베이스 또는 구조화된 파일과 같은 적절한 데이터 저장에 따라 그러한 정보를 저장할 수 있다.
출력 프로그램은 그 출력 프로그램이 클라이언트에 의해 필요로 될 때와 비교하여 임의의 시간에 생성될 수 있다. 전형적인 구현은 시간에 우선하여(즉, 클라이언트가 그것을 요청하기 이전에) 출력 프로그램을 생성하기 위한 능력을 제공할 수 있고, 출력 프로그램이 URL 쿼리 스트링, 임의의 HTTP 요청 헤더들, 및 그 출력 프로그램의 생성에 영향을 미칠 수 있는 다른 시스템 속성들을 명시하기 위한 능력을 포함하여 생성되어야 하는 적어도 일비 콘텍스트 정보를 그것의 사용자가 나타내도록 허용하는 출력 프로그램의 미리 계산된 버전들을 생성하는 것을 가능하게 한다. 출력 프로그램들을 미리 계산하기 위한 이러한 능력은 많은 출력 프로그램 변형들이 존재하고 동적 프로세싱으로 인한 지연이 바람직하지 않을 때 유리하다.
기술된 시스템은 그 대신에 또는 그 이외에 클라이언트가 실제로 프로그램을 요청할 때까지 출력 프로그램들의 생성을 지연시키기 위한 능력을 가질 수 있다. 동적 출력 프로그램을 생성하기 위한 능력은 심지어 요청의 타임프레임이 생성된 출력 프로그램에 영향을 미칠 수 있는 사용 시나리오들을 인에이블한다. 예를 들어, 콘텐츠가 데이터베이스에서 데이터의 최신 상태에 기초하는 생성된 코드를 포함하도록 출력 프로그램이 디자인되는 경우, (요청의 타이밍과 무관하게 시간에 우선하여 출력 프로그램을 생성하는데 반하여) 요청이 실제로 이루어질 때까지 대기하기 위한 시스템의 능력은 가능한 한 가장 최신의 출력 프로그램의 생성을 허용한다. 전형적인 구현은 HTTP 요청들을 수행하는 프로세스로 자체를 암시하여 출력 프로그램들의 동적 생성을 지원할 수 있다.
자바 언어와 같이 정적으로 형성된 객체 지향 프로그래밍 언어로 쓰여진 입력 프로그램들에 대해, 출력 프로그램을 생성할 때의 콘텍스트를 설명하는 양호한 방법은 도 3에 도시된 바와 같이 "연기된 바인딩"으로 불리며, 여기서 서버 구성요소는 명확하게 하나의 클래스 또는 인터페이스(310-)를 인스턴스화하기 위한 요청을 요청 코드가 다형 또는 유사한 추상화 메카니즘에 의한 대체를 인식할 필요가 없는 것과 같이 호환 가능한 대안인 또 다른 클래스를 인스턴스화하기 위한 요청으로 (입력 언어의 의미에 대해 적절한 바에 따라, 가능한 한 "팩토리" 방법을 통해 간접적으로 이루어지는 상기 요청을 통해) 대체한다. 어느 클래스를 요청된 클래스 또는 인터페이스로 대체하기 위한 선택("연기된 바인딩 결정")은 한 세트의 규칙 들(330)뿐만 아니라 프로그램 요청의 시간에서 콘텍스트(320) 모두의 기능이다.
연기된 바인딩 구성의 전형적인 구현은 한 세트의 기준, 한 세트의 콘텍스트들(320), 및 한 세트의 규칙들(330)로 구성된다. 연기된 바인딩에 적용되는 인스턴스화될 클래스 또는 인터페이스는 각각 "요청된 클래스" 또는 "요청된 인터페이스"로 언급된다. "요청된 클래스"에 대해 이어지는 레퍼런스들은 또한 "요청된 클래스 또는 인터페이스"를 의미하도록 이해되어야 한다. 연기된 바인딩 결정(340)의 결과는 요청된 클래스에 대해 대체되어야 하는 클래스의 이름이다("대체 클래스")(예로써, 350A, 350B).
기준은 자신의 전체적으로 자격 부여된 명칭(예로써, "com.innuvo.dcs.server.criteria.UserLanguage")에 따른 구성으로 언급되는 어떠한 호환 가능한 자바 클래스로 표현될 수 있다. 기준들은 연기된 바인딩 결정들이 이루어질 수 있는 "결정 축들"로 사용된다. 마찬가지로, 콘텍스트 플러그 인은 자신의 전체적으로 자격 부여된 명칭(예로써, "com.innuvo.dcs.server.contexts.HttpRequestContext")에 의한 구성으로 언급되는 어떠한 호환 가능한 자바 클래스로 표현될 수 있다. 콘텍스트들은 기준 값들이 정확하게 자신들이 시작한 곳과 무관하게 규칙들 내에서 언급될 수 있도록 기준들과 연관된 값들을 페치 및 표준화하도록 사용된다.
각각의 기준에 대해, 그 구성은 어느 콘텍스트가 그것의 요청 값들 공급하는지를 명시한다. "요청 값"은 특정 기준과 연관된 스트링 값이다. 각각의 독특한 애플리케이션 요청은 요청 값들의 서로 다른 세트를 가질 수 있다. 그러나, 어떠한 특정 요청의 지속기간 동안, 요청 값은 전형적으로 일단 콘텍스트에 의해 공급되면 변경되지 않는다.
전형적으로, 각각의 연기된 바인딩 규칙은 (1) 얼마나 강하게 연기된 바인딩 결정을 구성하기 위한 하나의 "결정 규칙"에 대해 후보로 고려되어야 하는지를 결정하는 매칭 동작과, (2) 그것의 포함된 규칙이 결정 규칙으로 선택되는 경우 그것들 중 기껏해야 하나가 호출되는 동작들의 수집을 갖는다. 다음의 규칙 매칭 동작들은 비록 추가적인 동작들이 추가될 수 있을지라도, (1) "class-is" 규칙은 요청된 클래스가 특정한 명시된 클래스일 때 적용하고, (2) "inteface-is" 규칙은 요청된 인터페이스가 특정한 명시된 인터페이스일 때 적용하고, (3) "class-extends" 규칙은 입력 클래스가 직접적 또는 간접적으로 명시된 클래스를 확장할 때 적용하고, (4) "interface-extends" 규칙은 요청된 인터페이스가 직접적 또는 간접적으로 그 명시된 인터페이스를 확장할 때 적용하며, (5) "class-implements" 규칙은 요청된 클래스가 직접적 또는 간접적으로 명시된 인터페이스를 구현할 때 적용하는 것이 전형적이다. 양호한 구현에서, 결정 규칙은 명확하게 규칙이 요청된 클래스에 부합하는 방법에 기초하여 모든 규칙에 대해 스코어를 계산하여 선택된다. 가장 높은 스코어를 받아 가장 한정된 규칙이 결정 규칙으로 선택된다. 또한, 구현이 대체 없이 요청된 클래스 자체를 인스턴스화하는 것이 전형적인 경우에 어떠한 규칙도 적용하지 않는 것이 가능하다.
각각의 동작은 그 동작이 얼마나 잘 최신 요청에 부합하는지를 평가하도록 매칭될 수 있는 한 세트의 조건들을 갖는다. 각각의 조건은 기준 및 매치 값을 명 시한다. 매치 값은 동일한 기준을 갖는 대응하는 요청 값에 대해 비교되며, 조건이 부합되는지의 여부를 테스트하도록 사용된다. 매치 값은 어떠한 요청 값에 부합하는 와일드카드 값("*") 또는 부합하기 위한 정확한 스트링(예를 들어, "en")일 수 있다.
결정 규칙이 선택된 후에, 그 동작들 중 하나가 호출된다. 호출된 동작은 최종적으로 다음에 요청된 클래스 대신에 인스턴스화되어 리턴되는 대체 클래스를 "실현"한다. 대체 클래스를 실현하는 것은 코드가 대체 클래스의 콘텐츠 및/또는 명칭을 결정하는 프로세스에 따라 실행될 수 있다는 것을 의미하고, 이러한 코드는 예를 들어 연기된 바인딩 동작 동안 스크래치로부터 대체 클래스를 생성한다.
동작들의 다음의 형태들은 비록 많은 동작들의 형태들이 추가될 수 있을지라도, (1) 항상 동일하고 이미 존재하는 것으로 가정되는 특정한 클래스 명칭을 명확히 리턴하여 대체 클래스를 실현하는 "replace-with" 동작(예로써, 355A, 355B)과, (2) 어느 클래스가 선택되는지의 결정을 특정 생성기에 동적으로 위임하여 대체 클래스를 실현하는 "generate-using" 동작(예로써, 360)인 것이 전형적이다.
연기된 바인딩 "생성기"는 그것의 전체적으로 자격 부여된 명칭(예로써, "com.innuvo.dcs.server.generators.StringCalssGenerator")에 의한 구성으로 언급되는 어떠한 호환 가능한 자바 클래스로 표현될 수 있다. 생성기는 "generate-using" 동작을 수행할 때 호출되는 것이 전형적이다. 생성기들은 연기된 바인딩 동작을 완성하기 위해 임의의 코드를 실행한다. 예를 들어, 생성기는 (1) 대체 클래스의 명칭을 프로그램적으로 계산하거나, (2) 요청으로부터 또는 다른 데이터 소스 들로부터 데이터를 모으거나, (3) 대체 클래스가 최근에 것이라는 것을 보장하거나, (4) 그것이 존재하지 않는 경우 대체 클래스에 대한 소스 코드를 생성하거나, (5) 대체 클래스를 결정 및 실현하도록 이전 또는 다른 동작들의 조합들을 수행할 수 있다.
연기된 바인팅에 대한 전형적인 알고리즘은 다음에 따른다. 요청된 인터페이스들 및 그것들의 관련된 규칙 매치 동작들은 비록 그것들이 규칙 선택 알고리즘에 따라 쉽게 도입될 수 있을지라도 명확하게 제시되지는 않는다.
1. A를 요청된 클래스라 한다.
2. A에 적용하기 위해 가장 적절한 규칙 R에 대해 연기된 바인딩 규칙들을 검색한다.
2.1. A를 명시하는 "class-is" 규칙이 존재하는 경우, 그에 따라 그 규칙은 R로 선택된다.
2.2. R이 결정되지 않은 경우, 각각의 "class-extends-X" 규칙을 고려하고, 여기서 X는 A가 직접적 또는 간접적으로 확장하는 자바 클래스를 지명한다. 이러한 규칙들 중에서, 어느 경우에는 A의 가장 가까운 조상인 X를 명시하는 것은 R로 선택된다.
2.3. R이 결정되지 않은 경우, 각각의 "class-implements-Y" 규칙을 고려하며, 여기서 Y는 A가 직접적 또는 간접적으로 구현하는 자바 인터페이스를 지명한다. 이러한 규칙들 중에서, 어느 경우에는 A 또는 A의 가장 가까운 수퍼클래스에 의해 구현된 것은 R로 선택된다.
3. 어떠한 규칙도 적용하지 않는 경우, 출력 클래스는 A이다. 동작은 여기서 종료된다. 이러한 경우에, 어떠한 대체도 발생하지 않는다.
4. 최상이 동작 T를 찾기 위해 각각의 동작을 스코어링한다.
4.1. T를 초기에 규정되지 않게 한다.
4.2. 가장 높은 스코어를 -1로 가정한다.
4.3. 규칙 R의 각각의 동작 K에 대해, 다음에 따라 테스트 스코어(초기에 0)를 계산한다.
4.3.1. K의 각각의 조건 D에 대해, 다음에 따라 테스트 스코어를 조정한다.
4.3.1.1. U를 D의 기준으로 한다.
4.3.1.2 V를 D의 매치 값으로 한다.
4.3.1.3. W를 기준 U에 대한 요청 값으로 한다. 기준 U에 대한 요청 값이 규정되지 않는 경우, 우선적으로 그것이 규정되도록 그것에 대해 책임이 있는 콘텍스트를 호출한다.
4.3.1.4. V가 W와 매우 동일한 경우, 그에 따라 1만큼 K에 대한 테스트 스코어를 증가시킨다.
4.3.1.5. 다른 방식으로, V가 와일드카드 매치 값 "*"인 경우, K의 테스트 스코어를 조정하지 않는다.
4.3.1.6. 다른 방식으로, V 및 W가 미스매치되고, K가 T에 대한 후보로 고려되지 않는다.
4.3.2. K가 계속해서 T에 대한 후보이고 그것의 테스트 스코어가 가장 높은 스코어보다 더 큰 경우, K는 T가 되고 그 이유는 그것이 최상의 공지된 동작이기 때문이다(T로 그것의 영구적인 상태는 가장 높은 테스트 스코어들을 가질 수 있는 다른 동작들의 검사를 보류하고 있다).
4.4. 어떠한 최상의 동작 T도 발견되지 않는 경우, 출력 클래스는 A이다. 동작은 여기서 종료된다. 이러한 경우에, 어떠한 대체도 발생하지 않는다.
4.5. 동작 T를 수행하여 대체 클래스를 결정한다. T가 규정되면, 그에 따라 t에 의해 표시되는 동작을 수행하여 출력 클래스를 실현한다. 이것은 T에 의해 지정된 코드를 실행하는 단계를 포함할 수 있다. 그 동작은 여기서 종료된다. 이러한 경우에, 대체는 T에 의해 실현되는 출력 클래스가 A와는 다른 클래스인 경우에 발생할 수 있다.
도 4는 인터랙티브 웹 애플리케이션들을 생성하는데 지향되는 기술된 시스템의 예시적 구현들 도시한다. 엔드 사용자의 클라이언트 구성요소(예로써, 웹 브라우저)는 단계(410)에서 특정한 애플리케이션을 요청한다. 서버 구성요소는 그 요청을 수신하여 인터랙티브 웹 애플리케이션이 생성되어야 한다는 것을 인식한다. 단계(420)에서, 서버 구성요소는 자바 입력 프로그램(415)과 같은 고레벨 입력 프로그램을 AST(abstract syntax tree)로 파싱한다. 결정은 그 후에 AST가 단계(430)에서 어떠한 나머지 연기된 바인딩 요청들을 갖는지에 관해서 이루어진다. 그러한 경우, 연기된 바인딩 결정이 단계(440)에서 발생하고, 특정한 예시적인 연기된 바인딩 결정 프로세스가 도 3에 도시되어 있다. 그에 따라, AST는 연기된 바인딩 결정에 기초하여 단계(450)에서 업데이트되고, 프로세스는 단계(430)에서 계속해서 추 가적인 결정을 한다. 일단 어떠한 추가적인 서비스되지 않는 연기된 바인딩 요청들도 AST에 남아 있지 않다면, AST는 단계(460)에서 최적화된다. 단계(470)에서, 자바스크립트 코드(요청된 인터랙티브 웹 애플리케이션)(475)는 최적화된 AST로부터 생성된다.
입력 프로그램들은 자바 언어로 쓰여질 수 있고, 출력 프로그램들은 자바스크립트 언어로 입력 프로그램을 컴파일하여 생성된다. 이러한 구현은 "요청 시간 컴파일러"로 간주될 수 있고, 그것의 몇 가지 이익들은 적어도 부분적으로 시스템의 디자인의 2가지 측면들의 합류로부터 발생한다. (1) 요청이 이루어질 때까지 컴파일을 지연시키는 것은 요청자에 대한 정보가 연기된 바인딩 결정들에 포함되도록 허용한다. 이것은 그것이 관련되지 않은 입력 프로그램의 서브세트들을 배제하는 동안 요청자에 관련된 입력 프로그램의 서브세트들을 조건적으로 포함하기 위한 기회를 다른 이익들 중에서 제공하기 때문에 유리하다. (2) 연기된 바인딩 대체들은 다형적으로 자신들을 강제로 취급하는데 반해, 대체 클래스들의 정확한 형태를 고려하도록 컴파일러의 분석, 최적화, 및 코드 생성 단계들을 허용하여 출력 프로그램이 이미 동작할 때(종래 기술에서 보편적인 "팩토리 패턴" 구현들을 통한 경우에서와 같이)보다는 컴파일 동안 발생할 수 있다. 연기된 바인딩 인스턴스 생성들은 "개발자가 우선적으로 대체 클래스를 선택하는 것처럼" 처리될 수 있다.
요청 시간 컴파일이 중요한 이유의 한가지 예로, 요청 웹 브라우저에 대해 적절한 단지 하나의 코드가 출력 프로그램에 포함될 필요가 있는 것과 같이 웹 브라우저의 "사용자 에이전트" 식별자가 연기된 바인딩 결정들을 알릴 수 있다. 다양 한 이익들은, (1) 필요로 되지 않는 코드(예를 들어, 요청자와는 다른 사용자 에이전트들을 지원하기 위한 코드)가 출력 프로그램에 반영되지 않고, 따라서 그것의 사이즈를 줄이고 그것의 다운로드 시간을 향상시키고 그것의 메모리 소비를 감소시키고, (2) 컴파일러의 최적화기는 (메소드 인라이닝, 데드 코드 제거, 루프 언롤링, 및 다른 컴파일러 최적화들을 포함하며 이에 제한되지 않는) 사이즈, 속도, 또는 그의 조합에 관해 출력 프로그램을 최적화하기 위해 풍부한 정보를 제공하여 대체 클래스들의 정확한 형태들의 지식을 사용하는 프로그램을 완전히 분석할 수 있으며, (3) 연기된 바인딩 메카니즘은 입력 프로그램에 외부적인 코드를 "포크"하도록 구조화되고 효율적인 방식을 제공하여, 코드 포킹(code forking)을 달성하는 것을 통해 "이프 덴 엘스(if-then-else)" 테스트들을 분산시키는 것으로부터 입력 프로그램을 할애하고, 그러한 테스트들은 그렇지 않은 경우에 사이즈, 런타임, 속도, 및 정비성과 관련하여 부담스러울 것이다.
최적화기가 (자바 어휘를 사용하도록) 암시적으로 "최종"적인 클래스들을 식별하는 것과 같이 프로그램 구조에 대한 정확한 정보를 추론하여 심층적인 글로벌 최적화들을 수행하도록 허용하여, 구현은 또한 어떠한 코드도 그것이 작동할 때 출력 프로그램에서 동적으로 로딩되지 않는 추가적인 제한을 추가하도록 선택할 수 있고, 그러므로 그것의 메소드들은 인라이닝 및 이어지는 최적화들에 대한 후보들이다.
전형적인 구현에서, 연기된 바인딩과 같은 알고리즘은 요구 코드 생성을 도입하기 위해 확장가능한 프레임워크를 제공한다. 도 3은 대체 클래스가 결정 프로 세스 동안 필요로 될 때 생성될 수 있는 방법에 따른 예시적인 접근 방식을 도시한다. 대체 클래스들이 생성될 때, 시스템은 전형적으로 요청된 클래스의 형태를 포함하는 콘텍스트 정보가 코드 생성 프로세스를 알리도록 사용가능하다는 것을 보장할 수 있다.
생성기들은, (1) 생성된 클래스에 명칭을 부여하는 것을 결정하는 것과, (2) 생성된 클래스에 삽입될 데이터에 어떻게 액세스하는지 결정하는 것(예를 들어, 데이터베이스 "접속 스트링"을 제공하는 것)과, (3) (a) 어느 메소드들을 오버라이딩할 것인지 알리는 것과 같이, 호환 가능한 방식으로 대체 클래스를 생성하는 방법을 추론하고, (b) 요청된 클래스 자체의 콘텐츠들이 요청된 클래스의 인스턴스에 대해 메소드들을 호출하거나 그의 명칭들을 파싱하거나, 열거하거나, 메타데이터에 대한 코드 주석들을 파싱하는 것과 같이 코드 생성에 영향을 미치도록 허용하는 것과 같은 목적들에 대해 요청된 클래스를 검사하도록 타입 질의 테크닉들(예를 들어, 자바 리플렉션)을 사용하는 것을 포함하지만 이에 제한되지 않는 다양한 방식들에 따라 이러한 콘텍스트 정보를 사용할 수 있다. 다시 말해서, 요청된 클래스 자체는 생성기의 동작을 안내할 수 있다. 그러한 사용은 도 5에 도시되어 있다.
상기 시스템의 한 가지 양호한 구현에서, 연기된 바인딩 생성기는 프로그래머 개입 없이 출력 프로그램으로 자동적으로 통합되는 RPC(remote procedure call) 프록시들을 자동적으로 생성하도록 사용된다. 이러한 접근 방식은 보편적인 RPC 테크닉들이 요구되는 프록시 및 스터브 클래스들을 생성하도록 프록시/스터브 컴파일러를 운영하는 것과 같은 개별적인 명확한 단계를 수행하도록 프로그래머들에게 요 구하기 때문에 바람직하다. 상기 언급된 구현은 요청된 인터페이스를 검사하도록 자바 리플렉션을 사용하고, RPC 결과들의 비순차화 뿐만 아니라 RPC의 호출기 측 순차화를 자동적으로 수행하는 대체 클래스를 생성하도록 그것의 메소드들의 명칭들, 파라미터 형태들, 및 리턴 형태들을 분석한다.
기술된 시스템의 한 가지 양호한 구현은 "선천적 코드 통합"으로 본 명세서에서 언급되는 합리적인 본질적 방식에 따라 입력 프로그램 내에 출력 프로그램의 언어로(또는 원칙적으로 어떠한 다른 언어로) 직접적으로 쓰여지는 코드의 일부분들을 매끄럽게 통합하기 위한 능력을 제공한다. 이러한 설비는 C 언어 소스 코드에서 인라인 어셈블리를 허용하는 것과 같은 유사한 테크닉들의 관례에 따른다. 자바를 자바 스크립트로 해석하는 한 가지 구현에서, 예를 들어 손으로 쓰여진 자바스크립트를 자바 클래스 정의로 서로 연관시키기 위한 능력은 저레벨 및/또는 성능 민감형 코드를 기록하는데 매우 유용한 것으로 증명되어 왔다. 구조화된 방식에 따라 시스템의 생성된 출력 프로그램(즉, 생성된 자바 스크립트)과 손으로 쓰여진 자바 스크립트를 혼합하기 위한 능력은 작동하기 위해 출력 프로그램에 대해 요구되는 가장 낮은 레벨 코드를 기록하는 생산적이고 위험이 낮은 방법을 제공하며(즉, 출력 프로그램의 나머지가 의존하는 커널 자바스크립트), 도 6은 선천적 자바스크립트 코드의 예시적인 포함을 도시한다.
추가로, 이러한 설비는 입력 프로그램의 언어를 바이패싱하는 것과 출력 프로그램의 언어에 따른 개념들에 직접적으로 액세싱하는 것을 필요로 하는 다른 태스크들 및 통합 라이브러리들을 생성하는 것이 가능하도록 입력 프로그램들의 어떠 한 제작자에 의해 사용하도록 개방적일 수 있다. 이러한 설비가 사용될 수 있는 방법의 예들은 성능을 향상시키거나 사이즈를 감소시키도록 출력 프로그램의 언어에서 중요한 알고리즘들을 선택적으로 기록하는 것 뿐만 아니라 매크로미디어 플래시와 같은 다른 플러그 인들 또는 브라우저 호스팅된 ActiveX 제어들과 인터페이싱하기 위해 자바스크립트 코드를 캡슐화하는 자바 프로그래밍 인터페이스들을 포함한다.
독특하게 생성적인 환경을 제공하기 위해, 조합에 있어서 상기 기술된 하나 또는 그 이상의 테크닉들, 즉 (1) 연기된 바인딩 코드 생성, (2) 선천적 코드 통합, 및/또는 (3) 호스팅된 모드 설비를 결합하는 기술된 시스템의 구현을 생성하는 것이 가능하다. 자바 입력 프로그램들 및 자바스크립트 출력 프로그램들의 예를 사용하여, 호스팅된 모드 설비는 자바 툴들을 사용하여 입력 프로그램들의 개발 및 디버깅을 허용한다. 컴파일은 호스팅된 모드 자바 환경이 자바스크립트를 이해하지 못하는 것으로 선천적 코드 통합이 도입될 때 발생한다. 도 6에서, 예를 들어 손으로 쓰여진 자바스크립트는 자바 주석 내에 있고, 자바 입력 프로그램이 호스팅된 모드로 작동할 때 완전히 제거된다. 이것은 선천적 코드 통합이 요구되는 경우들에서 호스팅된 모드의 사용을 제한하는 것으로 보일 것이다.
연기된 바인딩 생성기들은 이러한 문제점을 해결할 수 있고, 생성기는 그것이 작동하는 프로세스로 실제의 자바스크립트를 삽입하기 위해 서브시스템을 호출하는 손으로 쓰여진 자바스크립트를 포함하는 어떠한 클래스에 대해 호스팅된 모드로 동적인 서브클래스를 생성하기 위해 호출될 수 있다. 그러한 생성기는 자바스크 립트를 포함하는 특정 포맷된 주석들 뿐만 아니라 메소드들을 해석하도록 요청된 클래스를 검사할 것이다. 이러한 파싱된 자바스크립트가 호스팅된 모드에서 상ㅇ될 수 있는 방법의 예에서와 같이, Win32 윈도우에서 인터넷 익스플로러 브라우저 ActiveX 제어를 호스팅하는 JNI(Java Native Interface) 라이브러리를 통해 액세스 가능한 Win32 DLL을 생성하는 것이 가능하다는 것에 주의하고, 이러한 JNI 라이브러리는 임의의 자바스크립트가 실행되도록 허용하는 인터넷 익스플로러 "스크립트" 객체로의 액세스를 제공한다. 그에 따라, 생성된 서브클래스는 자바 언어와는 다른 어떠한 것을 인식하는 호스팅된 모드 개발 시스템 없이 실행을 위해 인터넷 익스플로러에 자바스크립트를 전송하기 위해 DLL을 통과하는 JNI를 사용할 수 있다. 이러한 예시적인 구현에서, 이러한 기초적 테크닉들의 조합은 자바 코드가 호스팅된 모드 환경에서 임의적으로 자바스크립트를 통합하도록 허용한다. 출력 프로그램이 완전한 자바스크립트로 생성될 때, 특정 포맷된 주석 블록들의 콘텐츠들(즉, 손으로 쓰여진 자바스크립트)은 생성된 출력 프로그램으로 끊임없이 보내질 수 있다.
가능할 때, 출력 프로그램의 언어가 에러들을 표시하는 익셉션들 또는 다른 방식들을 지원하는 경우, 기술된 시스템의 구현들은 입력 프로그램의 언어로 그러한 에러 취급 메카니즘들을 명확히 통합하도록 시도할 수 있다. 이것은 소프트웨어 개발자들이 입력 프로그램의 언어에서 존재하지 않는 메카니즘들과 관련하여 출력 프로그램에서 발생하는 에러 취급 시나리오들을 고려하는 것을 방지한다. 예를 들어, 자비 입력 프로그램들은 규정된 익셉션 메카니즘을 가지며, 반면에 자바스크립트 출력 프로그램들은 또한 그러한 자바 메카니즘과는 서로 다른 규정된 익셉션 메 카니즘을 갖는다. 그 결과는 자바 입력 프로그램에서 익셉션들을 취급하기 위한 코드가 자바스크립트 출력 프로그램에서 발생할 수 있는 모든 익셉션들을 찾기에 반드시 충분한 것은 아니라는 것이다. 한 가지 양호한 구현은 입력 프로그램의 제작자에 의해 기록된 자바 코드에 의해 생성된 구조들에 따라 발견될 수 있는 형태로 취급되지 않는 자바스크립트 익셉션들을 변환하는 출력 프로그램에 따라 특정 코드를 생성한다. 즉, 자바 입력 프로그램은 자동적으로 발견되고 발견될 수 있는 RuntimeException 객체로 변환될 자바스크립트에 독특한 자바스크립트 출력 프로그램이 동작하는 동안 발생하는 어떠한 에러 및 "RuntimeException" 객체들을 발견하도록 기록될 수 있다. 이러한 테크닉은 입력 프로그램의 언어로 익셉션 취급을 통합하고, 그것은 입력 프로그램 개발을 매우 단순화한다.
기술된 시스템이 등가의 출력 프로그램에서 입력 프로그램의 해석을 수행하기 때문에, 코드 생성 및 최적화를 안내하도록 입력 프로그램으로부터 "힌트들"을 사용할 기회를 갖는다. 이러한 능력은 입력 프로그램의 언어의 어떠한 측면들이 출력 프로그램의 언어에 따라 구현하기에 어렵거나 불충분할 때 특히 중요할 수 있다.
이것의 예는 자바 애플리케이션들로부터 자바스크립트 애플리케이션들을 생성하는 구현에서 발생한다. 자바 언어에서, 정적 클래스 초기화 코드는 어떠한 정적 메소드들 또는 필드들이 액세스되기 이전에 호출되었다는 것이 항상 보장된다. 자바 언어의 구조는 정적 멤버들이 액세스되기 이전에 어떠한 정적 초기화 코드가 호출된다는 것을 보장하기 위해 출력 프로그램으로 많은 테스트들을 삽입할 필요가 있다. 사이즈 및 속도가 자바스크립트 언어로 프리미엄이 붙어 있기 때문에, 이러한 테스트들을 피하는 것이 바람직하다. 시스템의 양호한 구현은 "noinit" 클래스 수정자가 구현하고, 그것은 생성된 코드가 그것이 수정하는 클래스에 대해 정적 초기화를 무시하도록 허용한다. 정적 메소드들 및 필드들이 액세스되는 클래스들에 대해 이러한 수정자를 사용하는 것은 종종 성능에서 현저한 차이를 나타낸다.
기술된 시스템은 생성된 출력 프로그램들의 계층적 캐싱을 용이하게 한다. 그러한 디자인은 출력 프로그램이 클라이언트 구성요소에 의해 페치 및 실행될 수 있는 속도를 증가시킨다. 최상의 목적은 클라이언트 구성요소 자체가 출력 프로그램들을 캐싱할 수 있어서, 네트워크 페치들을 완벽히 바이패싱하는 것이다.
도 7은 출력 프로그램들이 전형적인 웹 지향 구현에서 캐싱될 수 있는 다양한 단계들을 도시한다. 레벨(710)에서, 사용자로부터 최소의 거리로, 출력 프로그램은 클라이언트 구성요소에 의해 직접적으로 액세스가능한 램 또는 디스크와 같은 로컬 데이터 저장에 캐싱된다. 레벨(720)에서, 출력 프로그램은 클라이언트 구성요소에 의해 액세스 가능한 로컬 통신 네트워크상의 중간 프록시, 미러, 또는 액셀레이터 웹 서버에 의해 직접적으로 액세스 가능한 데이터 저장에 캐싱된다. 레벨(730)에서, 출력 프로그램은 인터넷상의 중간 프록시, 미러, 또는 액셀레이터 웹 서버에 의해 직접적으로 액세스 가능한 데이터 저장에 캐싱된다. 레벨(740)에서, 출력 프로그램은 서버 구성요소가 통합되는 웹 서버에 의해 직접적으로 액세스 가능한 데이터 저장에 캐싱된다. 레벨(750)에서, 출력 프로그램은 서버 구성요소에 의해 직접적으로 액세스 가능한 데이터 저장에 캐싱된다. 레벨들(720, 730, 740, 및/또는 750) 중 어느 것도 일부 구현들에서 더 많은 사용자들에게 동시에 사용되고 처리율을 향상시키도록 클러스터링될 수 있다.
웹 지향 구현과, 일련의 개별적 HTML 웹 페이지들에 반하여 (때때로 동적 HTML 또는 DHTML로 언급되는) 브라우저 문서 지향 모델을 조작하는 전체 자바스크립트 출력 프로그램들을 생성하는 특정한 것에 대해, 기술된 시스템은 각각의 페이지가 HTML 및 그 페이징 특정한 데이터를 혼합하는 시간에 보편적인 웹 애플리케이션들이 하나의 페이지를 생성하는 점에서 독특하다. 이것은 심지어 그 페이지의 HTML 레이아웃이 요청들 사이에서 변경될 수 없고 포함된 데이터도 마찬가지이기 때문에 호전적인 계층적 캐싱을 억제하고, 그러므로 전체 페이지는 각각의 캐시 레벨로 다시 카피되어야 하다. 그러나, 언급된 웹 구현은 출력 프로그램이 디스플레이될 필요가 있는 특정한 데이터를 통해 변경되지 않기 때문에 그러한 상황을 제거할 수 있다. 따라서, 자신이 동작하는 동안 출력 프로그램에 의해 페치되는) 애플리케이션 데이터로부터 애플리케이션 사용자 인터페이스 및 관련된 로직(즉, 출력 프로그램)을 분리함으로써, 애플리케이션 데이터로의 변경들은 출력 프로그램의 캐싱된 카피들을 무효화시키지 않는다. 이러한 테크닉은 보편적인 페이지 기반 캐싱보다 훨씬 더 효과적인 캐싱을 구성한다.
통상적으로 계층적 캐싱을 통해 발생하는 컴파일은 캐싱된 카피들의 "프레쉬니스(freshness)"의 질의이다. 캐시들을 중재할 수 있는 방법은 출력 프로그램들의 그것들의 카피들이 권한적인 버전(즉, 서버 구성요소에 의해 직접적으로 생성된 최초 버전들)과 관련하여 현재 사용되지 않을 때를 인식한다. 최악의 경우에, 모든 요청은 질의 "나의 카피가 현재 사용되지 않는가?"를 단순히 묻기 위해 서버 구성요소로 다시 전체의 왕복을 요구한다. 도 8에 도시된 바와 같이, 기술된 시스템은 출력 프로그램에 대한 모든 요청이 실제 출력 프로그램(820)에 따른 레퍼런스를 포함하는 작지만 캐싱 불가능한 응답(이른바 "응답 랩퍼")을 통해 답해진다는 것을 미리 정하여 이러한 문제를 해결한다. 출력 프로그램은 차례대로 "스트롱 네임"으로 불려진다. 스트롱 네임은 출력 프로그램 자체의 콘텐츠로부터 계산된다. 전형적인 구현에서, 출력 프로그램의 스토롱 네임은 출력 프로그램을 구성하는 모든 바이트들의 MD5 해시이고, 여기서 MD5 해시 코드는 모든 적절한 길이 출력 프로그램들에 걸쳐 해시 코드 충돌들을 피하기 위한 충분한 비트 용량을 갖는다. 물론, 스트롱 네임들을 생성하기 위한 다른 테크닉들은 네트 효과가, (1) 서로 다른 콘텐츠들을 갖는 어떠한 2개의 출력 프로그램들도 가능한 한 동일한 스트롱 네임을 갖지 않고(따라서, 서로 혼동될 수 없고), (2) 출력 프로그램의 동일한 카피들은 항상 동일한 스트롱 네임을 갖는 한 사용될 수 있다.
상기 네이밍 및 캐싱 메소드들은 2개의 문제들을 해결한다. 우선적으로, 중간 캐시들은 응답 랩퍼가 서버 구성요소로부터 직접적으로 얻어지고 캐싱 가능하지 않으며, 그것이 클라이언트 구성요소(830)가 요청해야 하는 출력 프로그램의 스트롱 네임을 설명하는 응답 랩퍼이기 때문에, 출력 프로그램(820A, 820B)의 캐싱된 카피가 오래된 것인지의 여부에 대해 서버 구성요소(810A, 810B)를 통해 체크할 필요가 없다. 클라이언트 구성요소가 출력 프로그램의 스트롱 네임에 기초하여 그러한 요청을 구성할 때, 그러한 스트롱 네임을 갖는 카피를 포함하는 어떠한 중간 캐 시(예로써, 로컬 캐시(840))는 그것이 서버 구성요소를 통한 이중 검사 없이도 최신의 것이며 따라서 그것의 카피를 통해 클라이언트 구성요소에 즉시 응답할 수 있다는 것을 보장 받을 수 있다. 다음으로, 서버 구성요소들이 클러스터링되는 경우, 응답 랩퍼를 전송하는 서버 구성요소 인스턴스가 출력 프로그램 요청을 수신하는 동일한 서버 구성요소 인스턴스일 것을 보장하지 않는다. 예를 들어, 일부 라운드 로빈 로드 조정기는 서로 다른 서버 구성요소 인스턴스들로 의도적으로 요청들을 분산한다. 따라서, 서로 다른 서버 구성요소 인스턴스들에 의해 그리고 동일한 입력 프로그램으로부터 생성되는 출력 프로그램들이 동일한 스트롱 네임들을 갖는다는 것이 핵심이다.
출력 프로그램들이 웹 액세스 가능한 애플리케이션들(예를 들어, 상기 기술된 자바스크립트 및 DHTML 애플리케이션들)인 기술된 시스템의 양호한 구현들은 서버 구성요소의 보다 많은 인스턴스들 중 하나에 대해 소프트웨어 라이센스 순응을 모니터링하기 위한 메카니즘을 포함할 수 있다. 캐싱 동작들의 논의에서 상기 설명된 바와 같이, 웹 지향 구현은 전형적으로 적절한 출력 프로그램의 스트롱 네임을 참조로 하는 응답 랩퍼를 리턴할 것이다. 이러한 동일한 응답 랩퍼에 매우 독특하지만 "라이센스 태그"로 불리는 공지된 식별자를 배치할 수 있다. GUID("globally unique id")는 비록 그러한 독특한 키의 많은 다른 형태들이 가능할지라도 라이센스 태그의 적절한 형태이다. 응답 랩퍼는 또한 "방송 라이센스"로 불리는 응답 랩퍼가 생성되는 서버 구성요소의 소프트웨어 라이센스 키의 암호화된 버전을 포함한다. 응답 랩퍼가 우선적으로 생성되기 때문에, 구글과 같은 웹 기반 검색 엔진들이 기술된 시스템을 통해 생성되는 웹 애플리케이션을 요청할 때, 그것들은 응답 랩퍼의 카피를 수신 및 저장한다. (전형적으로, 그것들은 웹 브라우저에 반하여 검색 엔진이 애플리케이션을 요청하는 특정한 경우들에서 일시적으로 캐싱 가능한 응답 랩퍼를 구성하여 서버 구성요소가 보상할 필요가 있을 수 있을지라도, 응답 랩퍼의 캐싱 가능하지 않은 본질에도 불구하고 카피를 저장한다.) 따라서, 그것들의 검색 결과들 데이터베이스는 공지된 라이센스 태그 및 방송 라이센스 모두를 포함하는 페이지들을 저장한다. 결과적으로, 각각 방송 라이센스를 포함하는 캐싱된 응답 랩퍼들의 리스트를 생성하기 위해 공지된 라이센스 태그에 대해 상기 검색 엔진에 질의하는 것이 가능하다. 이러한 캐싱된 응답 랩퍼들 및 그것들의 방송 라이센스들을 분석함으로써, 이중 소프트웨어 라이센스 키들을 식별하는 것이 가능하고, 그것은 인증되지 않거나 허가되지 않은 사용을 식별하도록 나중에 사용될 수 있다.
서버 구성요소 라이센스 키는 전형적으로 서버 구성요소 인스턴스에 의해 암호화 및 입증될 수 있는 소비자, 시리얼 번호, 라이센스 프로세서 카운트 등등에 대한 정보를 포함하는 정보의 암호화된 블록으로 구현된다. 구현은 라이센스 키들들 카피하고 인증 없이 사용하기에 다른 것들에 대해 매우 쉬운 바와 같이, 인코딩되지 않은 형태로 응답 랩퍼에서 서버 라이센스를 방송하지 않아야 한다. 따라서, 서버 구성요소의 양호한 구현은 그 서버 구성요소의 구현자(전형적으로 소프트웨어 공급자)만이 발행된 라이센스로 다시 방송 라이센스를 암호화하기 위해 필요한 개인 키를 갖는 것과 같이 암호화를 위해 적절한 서로 다른 공개 키를 사용하여 라이센스 키를 암호화하여, 조사하기 시작할 것을 선택한 공급자가 라이센스 키들의 인 증되지 않은 카피를 식별하도록 허용한다.
상기 기술된 실시예들 및 포함된 가출원서들의 일부로 본 명세서에 포함된 문서들 및 컴팩트 디스크들은
단지 예시적인 것으로 제시된다. 많은 변형들이 이하 특허청구범위로부터 벗어나지 않으며 본 명세서에 개시된 특정 실시예들로부터 구성될 수 있다는 것을 당업자들을 이해할 것이다.

Claims (23)

  1. 입력 프로그램으로부터 인터랙티브 프로그램을 생성하는 방법에 있어서,
    a) 클라이언트로부터 인터랙티브 애플리케이션에 대한 요청을 수신하는 단계와,
    b) 상기 수신된 요청에 기초하여 입력 프로그램 언어에서 입력 프로그램을 선택하는 단계와,
    c) 상기 선택된 입력 프로그램을 추상 구문 트리로 파싱하는 단계와,
    d) 하나 또는 그 이상의 연기된 바인딩 요청들(deferred binding requests)에 기초하여 상기 추상 구문 트리를 업데이트하는 단계와,
    e) 상기 업데이트된 추상 구문 트리로부터 타겟 언어로 상기 인터랙티브 애플리케이션을 생성하는 단계를 포함하는, 상기 인터랙티브 프로그램 생성 방법.
  2. 제 1 항에 있어서,
    상기 추상 구문 트리를 최적화하는 단계를 더 포함하는, 상기 인터랙티브 프로그램 생성 방법.
  3. 제 1 항에 있어서,
    상기 추상 구문 트리를 업데이트하는 단계는,
    i) 대체 클래스를 생성하도록 요청된 클래스에 대해 연기된 바인딩 결정을 구성하는 단계와,
    ii) 상기 요청된 클래스의 연기된 바인딩 인스턴스 생성들을 상기 대체 클래스로 교체함으로써 상기 추상 구문 트리를 수정하는 단계를 포함하는, 상기 인터랙티브 프로그램 생성 방법.
  4. 제 3 항에 있어서,
    상기 연기된 바인딩 결정을 구성하는 단계는,
    (1) 콘텍스트 정보를 수신하는 단계와,
    (2) 상기 검색된 콘텍스트 정보에 기초하여 상기 대체 클래스를 선택 또는 생성하는 단계를 포함하는, 상기 인터랙티브 프로그램 생성 방법.
  5. 제 4 항에 있어서,
    상기 연기된 바인딩 결정을 구성하는 단계는 규칙 정보를 검색하는 단계를 더 포함하며, 상기 대체 클래스를 선택 또는 생성하는 단계는 추가로 상기 검색된 규칙 정보에 기초하는, 상기 인터랙티브 프로그램 생성 방법.
  6. 제 3 항에 있어서,
    상기 연기된 바인딩 결정을 구성하는 단계는,
    (1) 규칙 정보를 검색하는 단계와,
    (2) 상기 검색된 규칙 정보에 기초하여 상기 대체 클래스를 선택 또는 생성 하는 단계를 포함하는, 상기 인터랙티브 프로그램 생성 방법.
  7. 제 3 항 내지 제 6 항 중 어느 한 항에 있어서,
    상기 추상 구문 트리를 최적화하는 단계를 더 포함하는, 상기 인터랙티브 프로그램 생성 방법.
  8. 제 1 항 내지 제 6 항 중 어느 한 항에 있어서,
    상기 입력 프로그램은 상기 타겟 언어로 매립된 코드를 포함하며, 상기 인터랙티브 애플리케이션을 생성하는 단계는 상기 매립된 코드를 포함하는, 상기 인터랙티브 프로그램 생성 방법.
  9. 제 1 항 내지 제 6 항 중 어느 한 항에 있어서,
    상기 인터랙티브 애플리케이션을 생성하는 단계는 서버 라이센스 키를 상기 인터랙티브 애플리케이션으로 포함시키는 단계를 포함하는, 상기 인터랙티브 프로그램 생성 방법.
  10. 제 9 항에 있어서,
    상기 서버 라이센스 키는 서버 구성요소와 연관된 식별 정보를 인코딩하는, 상기 인터랙티브 프로그램 생성 방법.
  11. 제 1 항 내지 제 6 항 중 어느 한 항에 있어서,
    상기 입력 프로그램은 상기 입력 프로그램 언어로 매립된 힌트들을 포함하며, 상기 인터랙티브 애플리케이션을 생성하는 단계는 적어도 부분적으로 상기 매립된 힌트들에 기초하는, 상기 인터랙티브 프로그램 생성 방법.
  12. 제 1 항 내지 제 6 항 중 어느 한 항에 있어서,
    상기 인터랙티브 애플리케이션을 생성하는 단계는 하나 또는 그 이상의 캐싱 레벨들에서 상기 인터랙티브 애플리케이션의 정확한 캐싱을 용이하게 하는 매립된 정보를 통해 상기 인터랙티브 애플리케이션을 생성하는 단계를 포함하는, 상기 인터랙티브 프로그램 생성 방법.
  13. 제 1 항 내지 제 6 항 중 어느 한 항에 있어서,
    상기 입력 프로그램은 익셉션 취급 코드(exception handdling code)의 적어도 한 부분을 포함하며, 상기 인터랙티브 애플리케이션을 생성하는 단계는 상기 익셉션 취급 코드를 상기 타겟 언어에 따라 기능적으로 유사한 익셉션 취급 코드로 적응시키는 단계를 포함하는, 상기 인터랙티브 프로그램 생성 방법.
  14. 제 1 항 내지 제 13 항 중 어느 한 항에 따라 컴퓨터가 실행하도록 하는 상기 컴퓨터에 의한 실행시에 명령어들을 저장하는 하나 또는 그 이상의 컴퓨터 판독가능 매체.
  15. 웹 애플리케이션에 대해 라이센스 순응을 입증하는 방법에 있어서,
    a) 방송 키 및 라이센스 태그를 포함하는 웹 애플리케이션을 생성하는 단계와,
    b) 상기 생성된 웹 애플리케이션을 웹 검색 엔진에 의한 검사를 위해 사용가능하게 구성하는 단계와,
    c) 선택된 라이센스 태그에 대해 상기 검색 엔진에 질의하여, 그에 의해 검사된 웹 애플리케이션들의 리스트를 생성하는 단계와,
    d) 이중 방송 라이센스 키들을 식별하도록 검사된 웹 애플리케이션의 리스트에서 각각의 웹 애플리케이션과 연관된 상기 방송 키들을 평가하는 단계를 포함하는, 상기 라이센스 순응 입증 방법.
  16. 제 15 항에 있어서,
    라이센스 태그를 생성하는 단계를 더 포함하는, 상기 라이센스 순응 입증 방법.
  17. 제 16 항에 있어서,
    상기 라이센스 태그를 생성하는 단계는 전체적으로 독특한 식별자를 할당하는 단계를 포함하는, 상기 라이센스 순응 입증 방법.
  18. 제 15 항 내지 제 17 항 중 어느 한 항에 있어서,
    방송 키를 생성하는 단계를 더 포함하는, 상기 라이센스 순응 입증 방법.
  19. 제 18 항에 있어서,
    상기 방송 키를 생성하는 단계는,
    i) 로 키(raw key)를 검색하는 단계와,
    ii) 상기 로 키에 대칭적 암호화를 적용하고, 그에 의해 사용자 키를 생성하는 단계와,
    iii) 상기 사용자 키에 대칭적 암호화를 적용하고, 그에 의해 상기 방송 키를 결과로 나타내는 단계를 포함하는, 상기 라이센스 순응 입증 방법.
  20. 제 19 항에 있어서,
    상기 로 키를 검색하는 단계는 사용자와 연관된 정보에 기초하여 상기 로 키를 생성하는 단계를 포함하는, 상기 라이센스 순응 입증 방법.
  21. 제 20 항에 있어서,
    상기 로 키를 생성하는 단계는 추가로 라이센싱된 하드웨어 플랫폼과 연관된 정보에 기초하는, 상기 라이센스 순응 입증 방법.
  22. 제 15 항 내지 제 22 항 중 어느 한 항에 따라 컴퓨터가 실행하도록 하는 상 기 컴퓨터에 의한 실행시에 명령어들을 저장하는 하나 또는 그 이상의 컴퓨터 판독가능 매체.
  23. 입력 프로그램으로부터 인터랙티브 프로그램을 생성하는 시스템에 있어서,
    a) 입력 프로그램 언어에서 입력 프로그램을 선택하는 수단과,
    b) 상기 선택된 입력 프로그램을 추상 구문 트리로 파싱하는 수단과,
    c) 하나 또는 그 이상의 연기된 바인딩 요청들에 기초하여 상기 추상 구문 트리를 업데이트하는 수단과,
    d) 상기 업데이트된 추상 구문 트리로부터 타겟 언어로 상기 인터랙티브 애플리케이션을 생성하는 수단을 포함하는, 상기 인터랙티브 프로그램 생성 시스템.
KR1020067024803A 2004-04-26 2005-04-26 고레벨 프로그래밍 언어들로부터 분산 인터랙티브애플리케이션들을 동적으로 구성하는 방법들 및 시스템들 KR20070015440A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US56544304P 2004-04-26 2004-04-26
US60/565,443 2004-04-26
US66611605P 2005-03-29 2005-03-29
US60/666,116 2005-03-29

Publications (1)

Publication Number Publication Date
KR20070015440A true KR20070015440A (ko) 2007-02-02

Family

ID=35241845

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020067024803A KR20070015440A (ko) 2004-04-26 2005-04-26 고레벨 프로그래밍 언어들로부터 분산 인터랙티브애플리케이션들을 동적으로 구성하는 방법들 및 시스템들

Country Status (6)

Country Link
US (2) US20080022267A1 (ko)
EP (2) EP1754146A4 (ko)
KR (1) KR20070015440A (ko)
AU (1) AU2005239421B2 (ko)
CA (1) CA2564681C (ko)
WO (1) WO2005106658A1 (ko)

Families Citing this family (48)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU3689301A (en) * 2000-02-09 2001-08-20 Apriva Inc Communication systems, components, and methods operative with programmable wireless devices
US20060085430A1 (en) * 2004-10-08 2006-04-20 Sharp Laboratories Of America, Inc. Methods and systems for accessing a remote file structure from an imaging device
US7920101B2 (en) * 2004-10-08 2011-04-05 Sharp Laboratories Of America, Inc. Methods and systems for imaging device display standardization
US8213034B2 (en) 2004-10-08 2012-07-03 Sharp Laboratories Of America, Inc. Methods and systems for providing remote file structure access on an imaging device
US20060077431A1 (en) * 2004-10-08 2006-04-13 Sharp Laboratories Of America, Inc. Methods and systems for imaging device concurrent account use
US8237946B2 (en) * 2004-10-08 2012-08-07 Sharp Laboratories Of America, Inc. Methods and systems for imaging device accounting server redundancy
US20060119883A1 (en) * 2004-10-08 2006-06-08 Sharp Laboratories Of America, Inc. Methods and systems for imaging device credential consolidation
US20060077119A1 (en) * 2004-10-08 2006-04-13 Sharp Laboratories Of America, Inc. Methods and systems for receiving content at an imaging device
US8384925B2 (en) * 2004-10-08 2013-02-26 Sharp Laboratories Of America, Inc. Methods and systems for imaging device accounting data management
US8230328B2 (en) * 2004-10-08 2012-07-24 Sharp Laboratories Of America, Inc. Methods and systems for distributing localized display elements to an imaging device
US20060095536A1 (en) * 2004-10-08 2006-05-04 Rono Mathieson Methods and systems for imaging device remote location functions
US8428484B2 (en) * 2005-03-04 2013-04-23 Sharp Laboratories Of America, Inc. Methods and systems for peripheral accounting
US8291377B2 (en) * 2006-01-25 2012-10-16 Microsoft Corporation External configuration of processing content for script
US8336037B1 (en) * 2006-05-17 2012-12-18 Ross Richard A JNI-minimizing data structures for XML parsing
US8190752B1 (en) 2006-05-17 2012-05-29 Juniper Networks, Inc. Secure delivery of flash content over networks
US9514436B2 (en) * 2006-09-05 2016-12-06 The Nielsen Company (Us), Llc Method and system for predicting audience viewing behavior
US8345272B2 (en) * 2006-09-28 2013-01-01 Sharp Laboratories Of America, Inc. Methods and systems for third-party control of remote imaging jobs
US20080155068A1 (en) * 2006-12-21 2008-06-26 Palo Alto Research Center Incorporated Support for sharing abstract applications
US7890487B1 (en) * 2007-05-29 2011-02-15 Google Inc. Facilitating client-side data-management for web-based applications
US20090049423A1 (en) * 2007-07-23 2009-02-19 Ebay Inc. Javascripttm programming extension
US8825708B1 (en) * 2008-04-30 2014-09-02 Netapp, Inc. Program language binding generation for system interfaces
US9170787B2 (en) * 2008-06-27 2015-10-27 Microsoft Technology Licensing, Llc Componentization of compiler functionality
US20100037213A1 (en) * 2008-08-07 2010-02-11 Microsoft Corporation Grammar-based generation of types and extensions
US8473897B2 (en) * 2008-10-03 2013-06-25 Microsoft Corporation Common intermediate representation for data scripting language
US8336035B2 (en) * 2008-12-16 2012-12-18 Microsoft Corporation Customizable dynamic language expression interpreter
US9875671B2 (en) * 2009-12-17 2018-01-23 Google Llc Cloud-based user interface augmentation
US8561027B2 (en) * 2010-03-17 2013-10-15 International Business Machines Corporation Reflection capability in static programming languages
US9262138B2 (en) * 2010-05-27 2016-02-16 Salesforce.Com, Inc. Adding directives for JavaScript files directly into source code in a multi-tenant database environment
RU2446458C1 (ru) * 2010-11-24 2012-03-27 Закрытое акционерное общество "Лаборатория Касперского" Компонента лицензирования компьютерных приложений
US8839444B2 (en) 2011-03-31 2014-09-16 Kaspersky Lab Zao Automatic analysis of software license usage in a computer network
US9069897B2 (en) 2011-11-23 2015-06-30 Microsoft Technology Licensing, Llc Capturing telemetry data by dynamic language engine
US20130326479A1 (en) * 2012-06-01 2013-12-05 Qnx Software Systems Limited System and method for tracking compliance information for a build-system product
US9880820B2 (en) * 2013-06-02 2018-01-30 Microsoft Technology Licensing, Llc Programming language with extensions using dynamic keywords
US20150040102A1 (en) * 2013-07-31 2015-02-05 Fp Complete System and method for software interoperability
CN103631632B (zh) * 2013-11-29 2017-08-04 华为技术有限公司 移植方法及源到源编译器
US9792094B2 (en) 2014-09-04 2017-10-17 Home Box Office, Inc. Factory identification system
US9420027B1 (en) 2015-04-27 2016-08-16 Wowza Media Systems, LLC Systems and methods of communicating platform-independent representation of source code
US10216501B2 (en) * 2015-06-04 2019-02-26 The Mathworks, Inc. Generating code in statically typed programming languages for dynamically typed array-based language
CN107203408B (zh) * 2016-03-17 2021-02-23 华为技术有限公司 重定向的方法、装置和系统
US11017387B2 (en) * 2016-03-24 2021-05-25 International Business Machines Corporation Cryptographically assured zero-knowledge cloud services for elemental transactions
US10417036B2 (en) * 2017-02-24 2019-09-17 Oracle International Corporation Evaluation techniques for fast access to structured, semi-structured and unstructured data using a virtual machine that provides support for dynamic code generation
US11360976B2 (en) 2017-08-31 2022-06-14 Oracle International Corporation Deployment of javascript and typescript stored procedures and user-defined functions into database management systems
EP3543844B1 (de) * 2018-03-22 2020-04-29 Sick Ag Verfahren zum durchführen von änderungen an einer software-anwendung
CN111460464B (zh) * 2019-01-22 2023-04-25 阿里巴巴集团控股有限公司 数据加解密方法、装置、电子设备及计算机存储介质
US11474796B1 (en) * 2019-07-09 2022-10-18 Elements Dev Corporation Build system for distributed applications
US20210065441A1 (en) * 2019-08-29 2021-03-04 Advanced Micro Devices, Inc. Machine learning-based technique for execution mode selection
US20220237309A1 (en) * 2021-01-26 2022-07-28 EMC IP Holding Company LLC Signal of risk access control
US11842176B2 (en) * 2021-11-12 2023-12-12 Bank Of America Corporation System and method for performing parallel and distributed analysis of program code to generate dependency graphs for executing extract transform load transformations

Family Cites Families (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5313616A (en) * 1990-09-18 1994-05-17 88Open Consortium, Ltd. Method for analyzing calls of application program by inserting monitoring routines into the executable version and redirecting calls to the monitoring routines
US5349662A (en) * 1992-05-21 1994-09-20 International Business Machines Corporation Method of and apparatus for providing automatic detection of user activity
US5553143A (en) * 1994-02-04 1996-09-03 Novell, Inc. Method and apparatus for electronic licensing
US5671412A (en) * 1995-07-28 1997-09-23 Globetrotter Software, Incorporated License management system for software applications
US5794048A (en) * 1996-08-29 1998-08-11 Matridigm Corporation Method for classification of year-related data fields in a program
US5892904A (en) * 1996-12-06 1999-04-06 Microsoft Corporation Code certification for network transmission
US6148331A (en) * 1997-04-25 2000-11-14 Parry; Rhys Evan Destination website access and information gathering system
US6044398A (en) * 1997-11-21 2000-03-28 International Business Machines Corporation Virtual dynamic browsing system and method for automated web server and testing
US6510466B1 (en) * 1998-12-14 2003-01-21 International Business Machines Corporation Methods, systems and computer program products for centralized management of application programs on a network
US6173446B1 (en) * 1999-02-02 2001-01-09 Ultimus, Inc. Apparatus for licensing software applications
US6505230B1 (en) * 1999-05-14 2003-01-07 Pivia, Inc. Client-server independent intermediary mechanism
US6353925B1 (en) * 1999-09-22 2002-03-05 Compaq Computer Corporation System and method for lexing and parsing program annotations
US7010683B2 (en) * 2000-01-14 2006-03-07 Howlett-Packard Development Company, L.P. Public key validation service
US20020091991A1 (en) * 2000-05-11 2002-07-11 Castro Juan Carlos Unified real-time microprocessor computer
WO2001092993A2 (en) * 2000-06-02 2001-12-06 Vigilant Systems, Inc. System and method for licensing management
JP3588042B2 (ja) * 2000-08-30 2004-11-10 株式会社日立製作所 証明書の有効性確認方法および装置
US20030220880A1 (en) * 2002-01-17 2003-11-27 Contentguard Holdings, Inc. Networked services licensing system and method
US6658423B1 (en) 2001-01-24 2003-12-02 Google, Inc. Detecting duplicate and near-duplicate files
US7219331B2 (en) * 2001-03-14 2007-05-15 Sun Microsystems, Inc. Method and apparatus for lightweight support on set top box
US7065507B2 (en) * 2001-03-26 2006-06-20 Microsoft Corporation Supervised license acquisition in a digital rights management system on a computing device
US20030005412A1 (en) * 2001-04-06 2003-01-02 Eanes James Thomas System for ontology-based creation of software agents from reusable components
US7761288B2 (en) * 2001-04-30 2010-07-20 Siebel Systems, Inc. Polylingual simultaneous shipping of software
CN1509433A (zh) * 2001-05-11 2004-06-30 ���������˼�빫˾ 把传统软件应用程序转换为现代面向对象系统的方法和系统
WO2002093365A1 (en) * 2001-05-11 2002-11-21 Sospita As Sequence numbering mechanism to ensure execution order integrity of inter-dependent smart card applications
US20030070160A1 (en) * 2001-10-04 2003-04-10 International Business Machines Corporation Embedding information in software
US6925640B2 (en) * 2001-10-12 2005-08-02 Sun Microsystems, Inc. Method and apparatus for extending a program element in a dynamically typed programming language
US7089541B2 (en) * 2001-11-30 2006-08-08 Sun Microsystems, Inc. Modular parser architecture with mini parsers
US7412535B2 (en) * 2001-12-19 2008-08-12 International Business Machines Corporation Method and system for caching fragments while avoiding parsing of pages that do not contain fragments
US7587515B2 (en) * 2001-12-19 2009-09-08 International Business Machines Corporation Method and system for restrictive caching of user-specific fragments limited to a fragment cache closest to a user
US7483860B2 (en) * 2002-03-08 2009-01-27 Pace Anti-Piracy Method and system for managing software licenses
US20030182651A1 (en) * 2002-03-21 2003-09-25 Mark Secrist Method of integrating software components into an integrated solution
US20050050319A1 (en) * 2003-08-12 2005-03-03 Zeev Suraski License control for web applications
US20050076200A1 (en) * 2003-08-15 2005-04-07 Imcentric, Inc. Method for discovering digital certificates in a network
US7500100B1 (en) * 2003-09-10 2009-03-03 Cisco Technology, Inc. Method and apparatus for verifying revocation status of a digital certificate
US20050132060A1 (en) * 2003-12-15 2005-06-16 Richard Mo Systems and methods for preventing spam and denial of service attacks in messaging, packet multimedia, and other networks
US7428530B2 (en) * 2004-07-01 2008-09-23 Microsoft Corporation Dispersing search engine results by using page category information
US20060112278A1 (en) * 2004-11-19 2006-05-25 Cohen Mark S Method and system for biometric authentication of user feedback
US8447837B2 (en) * 2005-12-30 2013-05-21 Akamai Technologies, Inc. Site acceleration with content prefetching enabled through customer-specific configurations
US7685255B2 (en) * 2006-04-24 2010-03-23 Blue Coat Systems, Inc. System and method for prefetching uncacheable embedded objects

Also Published As

Publication number Publication date
EP1754146A1 (en) 2007-02-21
CA2564681A1 (en) 2005-11-10
US8745579B2 (en) 2014-06-03
AU2005239421A1 (en) 2005-11-10
CA2564681C (en) 2015-09-22
US20080022267A1 (en) 2008-01-24
AU2005239421B2 (en) 2012-04-12
WO2005106658A1 (en) 2005-11-10
EP2112612A2 (en) 2009-10-28
EP1754146A4 (en) 2009-04-22
EP2112612A3 (en) 2011-08-03
US20120041935A1 (en) 2012-02-16

Similar Documents

Publication Publication Date Title
KR20070015440A (ko) 고레벨 프로그래밍 언어들로부터 분산 인터랙티브애플리케이션들을 동적으로 구성하는 방법들 및 시스템들
US8645490B2 (en) Web site implementation by mapping expression evaluation
JP4625198B2 (ja) 動的ウェブページコンテンツファイルからのサーバ側コード生成
US8443346B2 (en) Server evaluation of client-side script
US8245198B2 (en) Mapping breakpoints between web based documents
US6202201B1 (en) Text object compilation method and system
US7509335B2 (en) System and method for extensible Java Server Page resource management
Gilmore Beginning PHP and MySQL 5: From novice to professional
de Brock et al. From Conceptual Specification to OO Specification
Stapelberg Debian code search
Duthie et al. ASP. NET in a Nutshell
Santos et al. idDL2DL–Interval Syntax to d L
Ihrig et al. The Express Framework
Qi et al. SAS Viya: The R Perspective
Peschla Information flow tracking for JavaScript in Chromium
Christensen et al. JWIG User Manual
Olds et al. Engineering safe and efficient shareability within Web systems
League MetaOCaml server pages: Web publishing as staged computation
Neely Mobile Computations Over Distributed Semistructured Data
Myalapalli et al. Optimizing Front End Applications and JavaScript
Outman Static optimization of transparently distributed network applications
Lam et al. Static verification of design constraints and software correctness properties in the Hob system
Halfond Program analysis to support quality assurance techniques for web applications.
Butnaru Optimizations of XQuery in peer-to-peer distributed XML databases

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid