KR20080043325A - 유형 추론 및 유형 지향 후기 바인딩 - Google Patents

유형 추론 및 유형 지향 후기 바인딩 Download PDF

Info

Publication number
KR20080043325A
KR20080043325A KR1020087005382A KR20087005382A KR20080043325A KR 20080043325 A KR20080043325 A KR 20080043325A KR 1020087005382 A KR1020087005382 A KR 1020087005382A KR 20087005382 A KR20087005382 A KR 20087005382A KR 20080043325 A KR20080043325 A KR 20080043325A
Authority
KR
South Korea
Prior art keywords
type
variable
computer
programming language
late
Prior art date
Application number
KR1020087005382A
Other languages
English (en)
Other versions
KR101354803B1 (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 KR20080043325A publication Critical patent/KR20080043325A/ko
Application granted granted Critical
Publication of KR101354803B1 publication Critical patent/KR101354803B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/449Object-oriented method invocation or resolution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms

Abstract

후기 바인딩을 옵팅-인 (또는 옵팅-아웃)하는 옵션 컴포넌트를 공급함으로써, 프로그래밍 언어에서 후기 바인딩 및 조기 바인딩을 향상시키고 밸런싱하는 시스템 및 방법에 관한 것이며, 여기서 후기 바인딩은 변수에 대한 정적 유형(예를 들어, 오브젝트 또는 유형/스트링)에 기초하여 트리거된다. 또한, 변수는 프로그래밍 언어의 서로 다른 영역들(예를 들어, 프로그램 프래그먼트)에서 서로 다른 정적 유형들을 갖도록 활성화된다.
Figure P1020087005382
후기 바인딩, 유형 추론, 변수 유형, 옵션 컴포넌트, 프로그래밍 언어

Description

유형 추론 및 유형 지향 후기 바인딩{TYPE INFERENCE AND TYPE-DIRECTED LATE BINDING}
프로그래밍 방식 및 기반이 발전됨에 따라, 애플리케이션 프로그래밍 인터페이스(API) 및 프로그래밍 스키마가 개발되어 이전엔 다변수적이고 상대적으로 호환될 수 없었던 프로그래밍 방법론들을 표준화 및 단일화하였다. 이에 따라, 오늘날의 프로그래밍은 재사용가능한 라이브러리와 함께 API 및 스키마를 흔히 채용한다. 이러한 프로그래밍 언어는 효율적인 실행 뿐만 아니라 프로그래머에 의한 명세가 용이해지도록 계속해서 발전하고 있다.
컴파일러 및/또는 해석기는 고레벨 논리를 실행가능 머신 코드로 번역하는 부담을 갖고 있다. 일반적으로, 컴파일러 및/또는 해석기는, 소스 프로그래밍 언어(예를 들어, C, C#, Visual Basic, Java 등)로 특정된 프로그램을 수신하고 이에 따라 제공되는 논리를 하드웨어 장치에 의해 실행가능한 머신 언어로 변환하는 컴포넌트들이다. 그러나, 축어적으로 변환을 행할 필요가 없다. 사실, 종래의 컴파일러 및/또는 해석기는 소스 코드를 분석하고 매우 효율적인 코드를 생성한다. 예를 들어, 프로그래머들은 사람이 이해하기엔 직관적이고 쉽지만 컴퓨터가 실행하기엔 흔히 비효율적인 동작들의 논리적 흐름을 설명하는 코드를 작성한다. 컴파일러 및/또는 해석기는, 비효율성을 식별할 수 있고, 불필요한 동작들을 소거하고 그리 고/또는 명령어들의 실행을 재배열함으로써 하드웨어 레벨에서 프로그램 성능을 개선하면서도 여전히 의도한 결과들을 얻을 수 있다. 이러한 방식으로, 프로그래머들은 강건하고 효율적인 소프트웨어를 생성할 수 있다.
프로그래밍 언어에는 정적 언어 및 동적 언어가 포함된다. 정적 언어는 함수 인수들 및 변수들의 유형들과 같은 대부분의 프로그램 구조가 컴파일 때 결정되는 것을 요구한다. 컴파일러는 에러를 검출할 수 있고 런타임 유연성(run-time flexibility)을 희생하여 성능을 최적화할 수 있다. 반면에, 동적 언어는, 사용자로 하여금 서로 다른 유형들의 인수들을 동일한 함수에 전달하고 일부 언어에선 새로운 유형들이나 클래스들을 정의하는 것처럼 프로그램 구조에 대하여 더 많은 런타임 변경을 행할 수 있게 한다. 동적 환경은 런타임 정의 및 링킹(linking)을 활성화할 수 있다.
일반적으로, 유형 추론은 프로그래머를 위해 정확한 유형의 애플리케이션 작성을 용이하게 하는 언어 메카니즘이다. 변수 X를 선언하며 이 변수의 값을 스트링 "Hello"로 초기화하는 비주얼 베이직 선언문으로서 Dim X = "Hello"를 고려해 본다. 컴파일러는 우변의 유형이 스트링이라는 것을 인식하고 있다. 이에 따라, 컴파일러는 이 변수의 유형이 X일 것이라는 것을 추론할 수 있다. 일반적으로, 컴파일러는 X의 유형을 가장 일반적인 언어 유형인 "Object"로 설정하며, 후기 바인딩(late binding)을 채용하여 유형 스트링에 대하여 유일하게 적법한 "X.Length()"와 같은 후기 코드를 정한다.
후기 바인딩은, 컴파일러가 런타임때 "Length" 메소드를 찾기 위해 코드를 삽입하는 동작을 가리킨다. 멤버 이름에 대한 이러한 후기 바인딩 기능은, 데이터의 구조가 정적으로 알려지지 않은 데이터 집중식 프로그램에서 그리고 일반적 해석 코드(generic interpretative code)를 작성하는 데 특히 중요하다. 그럼에도 불구하고, 후기 바인딩은, 매우 유연적이긴 하지만, 때때로 런타임 비용을 도입할 수 있으며 (예를 들어, Intellisense®와 같은 보조 제공자를 채용할 때) 사용자 인터페이스에서 설계 시간 힌트(design-time hint)를 줄일 수 있다. 이것은 프로그래밍 언어의 유연성을 방해할 수 있다.
따라서, 종래의 시스템 및 장치에 관련하여 전술한 예시적인 결함들을 극복할 필요가 있다.
다음에 따르는 것은 청구 대상의 일부 양태들의 기본적인 이해를 제공하고자 간략한 개요를 제시한다. 이 개요는 확장가능한 견해가 아니다. 이 개요는 주요/핵심 요소들을 식별하려는 것도 아니며 청구 대상의 범위를 한정하려는 것도 아니다. 이 개요의 유일한 목적은 일부 개념들을 후술하는 보다 상세한 설명에 대한 도입부로서 간략한 형태로 제시하는 것이다.
본 발명은, 후기 바인딩을 옵팅-인(opt-in)(또는 옵팅-아웃)하는 옵션 컴포넌트를 공급함으로써, 프로그래밍 언어로 후기 바인딩 및 조기 바인딩(early binding)을 밸런싱하는 시스템 및 방법을 제공하고, 여기서 후기 바인딩은 변수에 대한 정적 유형(예를 들어, 오브젝트 또는 유형/스트링)에 기초하여 트리거된다. 유형 추론 컴포넌트는 프로그래밍 언어로 구현되며, 적합한 후기 바인딩된 헬퍼(예를 들어, XML 유형의 값에 대한 XML 후기 바인딩된 헬퍼, 오브젝트에 대한 반사 후기 바인딩된 헬퍼 등)가 호출되어 후기 바인딩을 유형 지향(type direct)할 수 있다. 이처럼, 후기 바인딩은 변수를 위해 특정된 유형에 기초하여 트리거될 수 있다. 옵션 컴포넌트는, 사용자가 "as string" 또는 "as object"를 선택할 수 있게 하고 예를 들어 후기 바인딩이 필요한지 여부 뿐만 아니라 후기 바인딩의 유형도 특정할 수 있게 하는 스마트 태크 또는 유사한 리팩터링(refactoring) 메카니즘을 포함할 수 있다. 후기 바인딩은 프로그래밍 언어에 있어서 디폴트 시나리오일 수 있고 사용자는 옵팅-아웃할 수 있다. 다른 방안으로, 프로그래밍 언어는 비후기(non-late) 바인딩을 디폴트로서 포함할 수 있고, 이에 따라 사용자는 옵팅-인할 수 있다. 또한, 비주얼 베이직(VB) 구문의 문맥에서, 스마트 태그는 유형을 명시적으로 가리키도록 클릭되면 확장될 수 있고, 여기서 변수 선언이 이미 이용가능하다.
본 발명의 추가 양태에 따르면, 변수는 프로그래밍 언어의 서로 다른 영역들(예를 들어, 프로그램 프래그먼트)에서 서로 다른 정적 유형들을 가질 수 있다. 게다가, 분석을 수행하여 프로그램의 서로 다른 세그먼트들에 있는 변수 유형을 식별하거나 그 변수의 발생가능한 유형들의 세트를 식별할 수 있다. 이것은 유형의 조기 위임을 완화시킬 수 있고, 유형이 허용가능하다면, 추후에 체크를 행할 수 있다. 변수의 변경된 유형에 대하여 (에러에 반대되는) 피드백 경고를 사용자에게 제공할 수도 있다. 이것은 사용자에게 유연성을 제공할 수 있으며, 예를 들어 동일한 변수 이름이 프로그래밍 코드를 통해 여러 경우에 사용될 수 있다.
관련된 방법에 있어서, 사용자는 처음에 후기 바인딩이 필요한지 여부를 선택할 수 있다. 후속하여, 사용자는 후기 바인딩의 필요한 유형들을 지정할 수 있다. 게다가, (예를 들어, 후기 바인딩의 사용으로부터 추론된) 변수의 정적 유형에 따라 후기 바인딩의 서로 다른 유형들을 공급할 수 있다. 이에 따라, 조기 바인딩과 후기 바인딩 간에 밸런스를 생성할 수 있고, 여기서 런타임때 체크가 완화될 수 있고, 정적 유형에 관하여 이용가능한 정보를 컴파일 타임때 채용할 수 있다.
전술한 목적 및 관련된 목적을 달성하고자, 본 명세서에서 청구 대상의 소정의 예시적인 양태들을 다음에 따르는 설명 및 첨부 도면과 함께 설명한다. 이러한 양태들은 청구 대상이 실시될 수 있는 다양한 방식들을 가리키며, 이들 모두는 청구 대상의 범위 내에 있다. 다른 이점들 및 신규한 특징들은 도면과 함께 고려할 때 다음에 따르는 상세한 설명으로부터 명백해진다.
도 1은 본 발명의 향상된 프로그래밍 환경의 옵션 컴포넌트를 도시한다.
도 2는 유형 추론 및 유형 지향 후기 바인딩을 위한 프로그래밍 환경을 도시한다.
도 3은 본 발명에 따른 변수의 정적 유형 표현, 및 종래 방식과의 비교를 개략적으로 도시한다.
도 4는 본 발명의 예시적인 양태에 따른 스마트 태그 구현예를 도시한다.
도 5는 후기 바인딩의 유형에 기초하여 채용된 적합한 헬퍼를 갖는 프로그래 밍 환경을 도시한다.
도 6은 변수가 서로 다른 영역들에서 서로 다른 정적 유형들(예를 들어, 유형들의 세트)을 가질 수 있는 코드의 프래그먼트를 도시한다.
도 7은 본 발명의 일 양태에 따른 유형 지향 후기 바인딩의 예시적인 방법을 도시한다.
도 8은 본 발명의 일 양태에 따른 예시적인 방법을 추가로 도시한다.
도 9는 유형 추론 및 유형 지향 후기 바인딩으로 프로그래밍 언어를 지원하는 소스 프로그램을 갖는 프로그래밍 환경을 도시한다.
도 10은 본 발명의 유형 지향 후기 바인딩을 구현하는 데 활용될 수 있는 컴파일러 환경을 도시하는 블록도이다.
도 11은 본 발명의 다양한 양태들을 구현하기 위한 예시적인 환경을 도시한다.
도 12는 본 발명을 구현하는 데 채용될 수 있는 추가 컴퓨팅 환경의 개략적인 블록도이다.
이제 첨부 도면을 참조하여 본 발명의 다양한 양태들을 설명하되, 전체에 걸쳐 유사한 번호들은 유사하거나 대응하는 요소들을 가리킨다. 그러나, 도면 및 이에 대한 상세한 설명은 청구 대상을 개시된 특정한 형태로 한정하려는 것이 아님을 이해하길 바란다. 오히려, 본 발명은 청구 대상의 사상 및 범위 내에 속하는 모든 수정, 등가물, 대체물을 포함하는 것이다.
본 명세서에서 사용되는 바와 같이, "컴포넌트", "시스템" 등의 용어들은 컴퓨터 관련 엔티티, 하드웨어, 하드웨어와 소프트웨어의 조합, 소프트웨어, 또는 실행중인 소프트웨어를 가리키고자 한다. 예를 들어, 컴포넌트는 프로세서 상에서 실행중인 프로세스, 오브젝트, 실행가능 코드, 실행 스레드, 프로그램, 및/또는 컴퓨터일 수 있지만, 이러한 예로 한정되지는 않는다. 예를 들어, 컴퓨터 상에서 실행중인 애플리케이션 및 컴퓨터 둘 다가 하나의 컴포넌트일 수 있다. 하나 이상의 컴포넌트들은 프로세서 및/또는 실행 스레드 내에 상주할 수 있고, 하나의 컴포넌트가 하나의 컴퓨터 상에 위치할 수 있으며 그리고/또는 2개 이상의 컴포넌트들 간에 분산될 수 있다. 또한, 본 명세서에서 사용되는 "예시적"이라는 용어는 예, 경우, 또는 도시를 의미하는 것이다. 본 명세서에서 "예시적"이라고 설명되는 임의의 양태나 설계는 다른 양태들이나 설계들에 대해선 반드시 바람직하거나 유익한 것으로 해석되지 않는다.
게다가, 설명하는 청구 대상은, 본 명세서에서 설명하는 양태들을 구현하기 위해 컴퓨터 또는 프로세서 기반 장치를 제어하는 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합을 제공하고자, 시스템, 방법, 장치, 또는 표준 프로그래밍 및/또는 엔지니어링 기술들을 이용하는 제조 물품으로서 구현될 수 있다. 본 명세서에서 사용되는 컴퓨터 프로그램이라는 용어는, 임의의 컴퓨터 판독가능 장치, 캐리어, 또는 매체로부터 액세스가능한 컴퓨터 프로그램을 포함하는 것이다. 예를 들어, 컴퓨터 판독가능 매체는, 자기 저장 장치(예를 들어, 하드 디스크, 플로피 디스크, 자기 스트림 등), 광 디스크(예를 들어, 컴팩트 디스크(CD), DVD 등), 스마 트 카드, 플래시 메모리 장치(예를 들어, 카드, 스틱)를 포함할 수 있지만, 이러한 예로 한정되지는 않는다. 또한, 전자 메일의 송수신에 사용되거나 인터넷 또는 LAN과 같은 네트워크의 액세스에 사용되는 것과 같은 컴퓨터 판독가능 전자 데이터를 전달하는 데 반송파를 채용할 수 있음을 인식하기 바란다. 물론, 청구 대상의 사상이나 범위로부터 벗어나지 않고서 이러한 구성에 많은 수정을 행할 수 있다는 것을 당업자라면 인식할 것이다.
먼저 도 1을 참조해 보면, 프로그래밍 환경(100), 및 옵션 컴포넌트(130)를 채용함으로써 향상된 프로그래밍 언어(110)(예를 들어, 비주얼 베이직)가 도시되어 있다. 옵션 컴포넌트(130)는 사용자가 후기 바인딩(108)을 옵팅-인(또는 옵팅-아웃)할 수 있게 하며, 여기서 후기 바인딩은 변수에 대하여 지정된 정적 유형에 기초하여 트리거된다(예를 들어, 변수에는 특정한 정적 유형(115) 또는 오브젝트(120)가 할당될 수 있다). 유형 추론 컴포넌트(12)는 프로그래밍 언어로 구현되고, 이러한 유형 컴포넌트(125)는, 통상적으로 불가피하게 완전한 유형 정보가 없는 경우, 식 및 변수의 유형들을 지정할 수 있다. 이처럼, 후기 바인딩과 조기 바인딩 간에 밸런스가 프로그래밍 언어로 제공될 수 있고, 여기서 적합한 후기 바인딩된 헬퍼(예를 들어, XML에 대한 XML 후기 바인딩된 헬퍼, 오브젝트에 대한 반사 후기 바인딩된 헬퍼, 등)가 호출되어 후기 바인딩을 유형 지향할 수 있다.
도시한 바와 같이, 유형 추론 컴포넌트(125)는 입력 데이터 스트림의 문맥 정보에 기초하여 컴파일러(도시하지 않음)에게 부재(missing) 유형 정보를 공급할 수 있다. 옵션 컴포넌트(130)는 상세히 후술하는 바와 같이 스마트 태그 또는 유 사한 리팩터링 메카니즘을 더 포함할 수 있고, 이것은, 예를 들어, 사용자가 정확하게 추론된 유형 또는 오브젝트 간에 선택을 행할 수 있게 하고, 후기 바인딩이 필요한지 여부 뿐만 아니라 후기 바인딩의 유형도 특정할 수 있게 한다. 후기 바인딩은 프로그래밍 언어(110)에 대한 디폴트 시나리오일 수 있고 사용자는 옵팅-아웃할 수 있다. 다른 방안으로, 프로그래밍 언어(110)는 비후기 바인딩을 디폴트로서 포함할 수 있고, 이에 따라 사용자는 옵팅-인할 수 있다. 게다가, 비주얼 베이직(VB) 구문의 문맥에서, 스마트 태그는, 예를 들어, 클릭시 유형을 명시적으로 가리키도록 확장될 수 있으며, 변수 선언은 이미 이용가능하다.
먼저 도 2를 참조해 보면, 상세히 후술하는 바와 같이, 유형 추론 및 유형 지향 후기 바인딩을 위한 프로그래밍 환경(200)이 도시되어 있다. 시스템(200)은, 집적 개발 환경(IDE; 220)에 의해 개발되고, 설계되며, 또는 편집되는 소스 프로그램(210)을 포함한다. IDE(220)는, 예를 들어, 개발자 스튜디오 애플리케이션과 같이 보다 정교한 프로그래밍 스테이션에 관련될 수 있고, 또는 코드 텍스트 편집기와 같이 보다 기본적인 툴에 관련될 수 있다. 일반적으로, 옵션 컴포넌트는, 사용자가 후기 바인딩을 옵팅-인(또는 옵팅-아웃)할 수 있게 하며, 여기서 변수에 대한 정적 유형에는 정확하게 추론된 유형 또는 오브젝트가 할당될 수 있다. 컴파일러(250)는, 잘 알려져 있는 컴파일 기술에 따라 그리고 유형 지향 후기 바인딩을 고려하여 소스 프로그램을 처리함으로써 블록(260)에서 실행가능 코드를 생성할 수 있다.
통상적으로, 멤버 이름에 대하여 후기 바인딩되는 기능은, 데이터의 구조가 정적으로 알려져 있지 않은 데이터 집중식 프로그램에 있어서, 그리고 일반적 해석 코드를 작성하는 데 있어서 특히 중요하다. 일반적으로, 바인딩은 비주얼 베이직 코드와 같은 프로그래밍 코드가 액세스하는 방식을 가리킨다. 비주얼 베이직이 채용하는 바인딩에는 2가지 유형이 존재하는데, 일반적으로 조기 바인딩 및 후기 바인딩이다.
일반적으로, 식의 타겟은 런타임때까지 연기될 수 있고, 이러한 프로세싱 연기)를 후기 바인딩이라 한다. 후기 바인딩은, 오브젝트 변수들이 유형없는 방식으로 사용될 수 있게 하며, 멤버들의 모든 결정은 변수 값의 실제 런타임 유형에 기초한다. 컴파일 환경에 의해 엄격한 의미(semantic)가 특정된다면, 후기 바인딩은 컴파일 타임 에러를 야기하게 된다. 오버로드 해결을 위한 것을 포함하여 후기 바인딩을 수행할 때 비공중(non-public) 멤버들을 무시할 수 있다. 게다가, 공유 멤버(Shared member)를 인보크하거나 액세스하는 조기 바인딩된 경우와는 달리, 후기 바인딩은 인보크 타겟이 런타임때 평가되게 한다.
도 3은 본 발명에 따른 변수의 정적 유형 표현과 종래 방식의 비교를 개략적으로 도시한다. 예를 들어, 영역(310)으로 표시되는 종래의 정적 프로그래밍 언어에서, 변수는 프로그래밍 언어 전체에 걸쳐 동일한 정적 유형을 갖는다. 이처럼, 종래의 정적 프로그래밍 언어에서는, 지정되는 변수의 사용에 일관된, 유형(예를 들어, 수퍼 유형) 및 변수의 사용을 결정할 필요가 있다.
마찬가지로, 영역(320)은 동적 언어를 위한 종래의 방식을 나타내며, 여기서 모든 값들은 오브젝트로서 유형을 갖는다. 이러한 동적 언어에서, 동적 언어는 변 수의 정적 유형에 관한 지식을 갖지 않는다.
예시적인 일 양태에 따른 본 발명은 중간 지대(330)에 관한 것으로서, 후기 바인딩의 (예를 들어, 영역(310, 320)들의) 옵팅-인과 옵팅-아웃 및 서로 다른 형태들이 그 값의 정적 유형에 따라 공급된다. 따라서, 변수(예를 들어, 정적 유형이 변경되는 변수)는, 프로그램의 서로 다른 영역들에서 서로 다른 정적 유형들, 및 이 변수의 사용에 기초하여 추론되는 유형을 수용할 수 있다. 이처럼, 서로 다른 프로그램 프래그먼트들은 동일한 변수에 대하여 서로 다른 정적 유형들(또는 세트들)을 포함할 수 있다. 예를 들어, 컴파일 타임때, 변수는 정수 또는 버튼(button)의 정적 유형을 가능성들의 세트로서 수용할 수 있다. 이것은 변수가 통상적으로 프로그래밍 언어 내의 모든 곳에서 정확히 하나의 정적 유형을 수용하는 종래의 정적 프로그래밍 언어와 대조되는 것이다.
도 4는 본 발명의 예시적인 양태에 따른 스마트 태그 기반의 리팩터링을 도시한다. 사용자가 다음에 따르는 선언을 VB 프로그램으로 타이핑하는, 도 4에 도시한 예(400)를 고려해 본다.
Dim X = E
여기서, 식 E의 유형은 컴파일러에게 T로 알려진다. 본 발명의 일 양태에 따르면, VB는 예를 들어 VS IDE에서 X 아래에 스마트 태그(410)를 표시할 수 있다. 스마트 태그(410)는 인터랙티브 그래픽 요소로서 기능할 수 있다. 이에 따라, 사용자가 스마트 태그(410)를 클릭하거나 그 위에서 배회하는 경우, 옵션(420)의 드롭 다운 메뉴가 나타난다. 이 경우 도시된 2가지 옵션은 "T" 및 "오브젝트"이다.
일반적으로, 사용자가 T를 선택하는 경우, 사용자는 정적 유형 추론을 옵팅-인하며, 이것은 추후의 코드에서 변수 X의 유형이 T라는 것을 의미한다. 특히, 보조 제공자인 Intellisense®는, "X"로 작성된 이 X에 대한 도트 연산자를 위해, 유형 T에 대하여 필드들 및 메소드들의 알려져 있는 리스트를 표시한다. 다른 방안으로, 스마트 태그 드롭 다운 메뉴로부터 "오브젝트"를 선택한다는 것은, 사용자가 오브젝트에 대하여 표준 VB 후기 바인딩을 옵팅-인한다는 것을 의미한다. 이처럼, 컴파일러 및 IDE는 X에 대한 필드들 및 메소드들의 특정 리스트를 알지 못하며, 이에 따라 도트 연산자는 보조 제공자(예를 들어, Intellisense®) 힌트들을 표시하지 않으며 컴파일러는 (반사를 통해 구현된 메타-오브젝트 프로토콜을 통해) 런타임때 필드들 및 메소드들을 선택하도록 코드를 생성해야 한다.
통상적으로, 보조 제공자(도시하지 않음)는, 특정 프로그래밍 언어(예를 들어, 비주얼 베이직, C#, C++, 자바, J# 등)를 위한 인텔리전트 프로그래밍 방식 보조자(예를 들어, Intellisense®)를 공급한다. 이에 따라, 이러한 보조 제공자 컴포넌트들은 특정 언어 개발 엔티티(예를 들어, 소프트웨어 회사, 대학, 개개인 등)에 의해 제공될 수 있다. 보조 제공자 컴포넌트는, 예를 들어, 프로그래밍 방식 문맥에 기초하여 제안을 제공함으로써 문(statement), 클래스, 및 함수 완료에 대하여 프로그래머를 보조하는 코딩을 간략화할 수 있다. 이러한 제안은, 팝업 윈도우 또는 박스, 드롭 다운 윈도우 등을 통해 제공될 수 있다. 예를 들어, 동일하거나 다른 컴파일 유닛에서 보조 제공자 컴포넌트의 이전 명세에 기초하여 부분적으로 특정된 워드 또는 문을 완료하도록 제안을 행할 수 있다.
후기 바인딩이 통상적으로 정적 유형화(typing)의 반대로 해석되지 않음을 인식하기 바란다. 정적으로 알려진 유형 T는 자신의 도메인에 대하여 후기 바인딩을 요구할 수 있다. 예를 들어, 사용자가
Dim X = <book> <title> "Lions, Tigers, and Bears" </title> </book>
와 같이 타이핑하는 경우가 있다.
X의 정적 유형은 "XElement"일 수 있으며, 이것은 일종의 후기 바인딩을 실제 항들에게 XML로 제공한다. 특히, "X.book.title"은 법적 코드이며, 일반적으로 런타임시 완전히 결정된다. 따라서, Intellisense®는 사용자가 "X."를 타이핑할 때, 유효 범위에 XSD 스키마가 존재하는 경우 힌트를 표시할 수 있지만, "book" 및 "title"에 대한 바인딩은 후기, 즉, 런타임때에만 완료된다. 정적으로 알려져 있는 유형(XElement) 및 동적으로 알려져 있는 바인딩(X.book, X.book.title)의 이러한 혼합을 유형 지향 후기 바인딩(Type-Directed Late Binding)이라 칭할 수 있다.
게다가, 사용자가 오브젝트에 대하여 정적 유형화 또는 후기 바인딩을 옵팅-인하게 되면, IDE는 IDE의 프리티 리스터(pretty lister)를 이용하여 코드를 재작성하여 선택된 유형을 나타낼 수 있다. 예를 들어, 사용자가 T에 대하여 옵팅-인하면, IDE는 Dim X = E를 Dim X As T = E로 대체할 수 있고, 사용자가 오브젝트에 대하여 옵팅-인하면, IDE는 Dim X = E를 Dim X As Object = E로 대체할 수 있다.
이러한 프리티 리스팅에 후속하여, 옵팅-인을 위한 스마트 태그가 사라질 수 있다.
또한, 다음에 따르는 코드의 문맥에서,
Dim X = "Hello"
...
X = 5
그리고 사용자가 선언 사이트에서 오브젝트가 아닌 스트링 유형에 대하여 옵팅-인한다고 가정하는 경우, 프리티 리스터는 위 조합을 아래와 같이 재작성할 수 있다.
Dim X As String = "Hello"
...
X = Ctype(5,String)
여기서 내장 유형-변환 함수에 대한 명시적 호출은 추론된 유형에 따라 삽입될 수 있다. 게다가, 모든 유형 변환이 법적이거나 의미있는 것은 아니므로, 유형 추론은 컴파일러 및 런타임이 무의미한 코드를 식별하는 것을 도울 수 있다.
예를 들어,
Dim X As Integer = 5
...
X = Ctype("Hello",Integer)
은 의미없는 반면,
X = IntegerHash("Hello")
or
X = Ctype("37",Integer)
는 의미있다.
또한, "Option Strict"가 온(ON)이면, 사용자는 일반적으로 컴파일이 진행되기 전에 옵팅-인을 행하도록 요구받을 수 있다. 다른 방안으로, "Option Strict"가 오프이면, 사용자가 옵팅-인하지 않은 모든 경우에 대하여 오브젝트에 대한 후기 바인딩이 선택된 디폴트로 된다.
게다가, 일부 상황에서는, 변수를 채용하기 전에 모든 변수를 선언하는 것이 필요하지 않다. 예를 들어, 프로그램에서 변수 X가 처음으로 보일 때 "X=5"로 지정하게 되면, 컴파일러는 변수 X의 유형이 정수임을 추론할 수 있다. 마찬가지로, IDE는 "Integer" 및 "Object" 옵션들을 제시하는 드롭 다운 메뉴로 스마트 태그를 표시할 수 있다. 다음에 따르는 코드는 일례로 고려할 수 있다.
IF someBooleanExpression THEN
X = 5
ELSE
X = "Hello"
END IF
이 예에서, 이러한 코드는 프로그램에서 처음 보이는 변수 X라고 가정한다. 컴파일러에서의 표준 흐름 분석은 브랜치에서 어느 방식으로도 제어를 행할 수 있음을 인식하고 있으며, 따라서 X의 유형이 정수, 스트링, 오브젝트 중 어떤 것이라도 가능하다는 유형 추론을 통지할 수 있다. 사용자 편의를 위해, 이러한 3가지 옵션을 갖는 스마트 태그는 브랜치에서 첫번째 X 아래에 보일 수 있다. 게다가, 프리티 리스팅은 옵팅-인된 유형에 부합하는 내장된 유형 변환 함수에 대한 명시적 호출을 삽입할 수 있다. 위에서 사용자가 스트링을 선택한 경우, 프리티 리스터는 조합을 아래와 같이 재작성하게 된다.
IF someBooleanExpression THEN
X = Ctype(5,String)
ELSE
X = "Hello"
END IF
미선언 변수들에 대한 디폴트 유형은 오브젝트일 수 있고, 이에 따라 변수 X의 첫번째 사용이 추론가능한 문맥으로 되어 있지 않으면, 그 변수의 유형은 오브젝트로 추론된다.
도 5는 본 발명의 일 양태에 따른 프로그래밍 환경(500)을 도시한다. 본 발명의 일 양태에 따라, 오브젝트(520) 또는 스트링(515)의 선택에 기초하여, XML를 위한 XML 후기 바인딩된 헬퍼(510), 및 오브젝트를 위한 반사 후기 바인딩된 헬퍼(520)와 같은 적합한 헬퍼가 호출되어 후기 바인딩을 유형 지향할 수 있다.
이제 도 6을 참조해 보면, 서로 다른 영역들에서 변수가 서로 다른 정적 유형들을 (예를 들어, 유형들의 세트로서) 가질 수 있는 코드의 프래그먼트들이 도시되어 있다. 이것은, 특정 유형에 대한 조기 위임 없이 서로 다른 영역들에 유연성을 제공할 수 있다. 유형이 허용가능하다면, 허용이 수여되어 그 유형을 채용하며 후기 체크가 정밀성을 검증한다. 대조적으로, 종래의 정적 프로그래밍 언어는 이 러한 상황에서 에러를 발생시킨다. 도시한 바와 같이, 블록(610)에서, 변수 X는 스트링의 정적 유형을 가정하며, 여기서 Intellisense® 체크를 공급할 수도 있다. 후속하여 블록(620)에서, X는 정수일 수 있으며 X 유형에 관한 로컬 지식이 채용된다. 사용자에게 이러한 변경에 대한 피드백을 경고(625) 형태로 제공할 수 있다. 이후, 블록(630)에서, X는 버튼을 가정할 수 있다. 블록(640)에서, 그리고 End If후에, X는 (스트링이 아닌) 정수 또는 버튼일 수 있다. 컴파일러는 이제 유형을 추적할 수 있으며, 그 이유는 X가 정수 또는 버튼이라는 지식을 갖고 있기 때문이며, 이 둘 중 하나를 가정할 수 있다. 다른 방안으로, X는 보다 정밀한 추적 대신에 온 오브젝트(on object)로서 지정될 수 있다. 이것은 프로그램의 영역들을 식별할 수 있게 하며, 여기서 변수의 유형들(또는 정확한 규정)은 알려져 있다.
다른 예로, 다음에 따르는 코드를 고려할 수 있다.
Dim X = "Hello"
...
X = 5
"X=5" 지정의 사이트에서, IDE는, 사용자에게 유형 시프트에 대한 옵팅-인을 허용하는 다른 스마트 태그를 표시할 수 있다. 위에서 제안한 스킴 하에서, 이 코드는 자동적으로 아래와 같이 재작성된다.
Dim X As String = "Hello" ← statement 1, declaration
... region 1, X has type String ...
X = Ctype(5,String) ← statement 2
... region 2, X has type String ...
IDE는 통상적으로 statement 2에서 X 아래에 스마트 태그를 유지하여, 사용자가 region 2에서 정수, 스트링, 또는 오브젝트 유형에 대하여 옵팅-인할 수 있게 한다.
도 7은 본 발명의 일 양태에 따른 예시적인 방법(700)을 도시한다. 본 명세서에서 예시적인 방법이 다양한 이벤트들 및/또는 액트들을 나타내는 일련의 블록들로서 도시 및 설명되어 있지만, 본 발명은 이러한 블록들의 도시된 순서에 의해 한정되지 않는다. 예를 들어, 일부 액트들 또는 이벤트들은, 본 발명에 따라, 본 명세서에서 도시된 순서와는 달리, 서로 다른 순서들로 및/또는 다른 액트들 또는 이벤트들과 동시에 발생할 수 있다. 또한, 도시된 모든 블록들, 이벤트들, 또는 액트들이 본 발명에 따른 방법을 구현하도록 요구되지 않을 수 있다. 게다가, 본 발명에 따른 예시적인 방법 및 다른 방법들을, 도시하거나 설명하지 않은 다른 시스템들 및 장치와 관련해서 뿐만 아니라 본 명세서에서 도시 및 설명하는 방법과 관련해서도 구현할 수 있음을 인식할 것이다. 먼저 블록(710)에서, 변수에 대한 정적 유형을 지정할 수 있다. 후속하여, 블록(720)에서, 후기 바인딩을 위한 옵팅-인이라는 옵션을 사용자에게 제시한다. 블록(730)에서 후기 바인딩 옵션이 선택되면, 방법(700)은 블록(740)으로 진행하여, 후기 바인딩이 선택된 정적 유형에 기초하여 트리거된다. 다른 방안으로, 사용자가 후기 바인딩의 옵션을 선택하지 않으면, 방법은 블록(735)에서 종료된다.
도 8은 본 발명에 따른 예시적인 방법을 추가로 도시한다. 먼저, 블록(810) 에서, 변수에 대한 정적 유형은 블록(810)에서 프로그래밍 코드의 제1 영역에서 지정될 수 있다. 후속하여 블록(820)에서는, 변수가 코드의 제1 영역에서 채용될 수 있다. 블록(830)에서는, 변수의 정적 유형이 다른 유형으로, 예를 들어, 변경되는 정적 유형을 갖는 변수로 변경될 수 있다. 블록(840)에서 이러한 변경에 관하여 사용자에게 피드백을 제공할 수 있다. 블록(850)에서는, 이에 따라 정적 유형이 프로그래밍 코드의 제2 영역에서 채용될 수 있다. 이처럼, 코드의 프래그먼트들이 존재할 수 있고, 여기서 변수는 서로 다른 영역들에서 서로 다른 정적 유형들을 (예를 들어, 유형들의 세트로서) 가질 수 있다. 이는, 변수에 대하여 특정한 유형을 조기에 위임하지 않고서, 서로 다른 영역들에 대하여 유연성을 제공할 수 있다.
도 9는 유형 추론 및 유형 지향 후기 바인딩으로 프로그래밍 언어를 지원하는 소스 프로그램(910)을 갖는 프로그래밍 환경(900)을 도시한다. 이는, 후기 바인딩의 옵팅-인(또는 옵팅-아웃)을 공급함으로써 프로그래밍 언어로 후기 바인딩 및 조기 바인딩을 밸런싱할 수 있다. 시스템(900)은, 집적 개발 환경(Integrated Development Environment; IDE)에 의해 개발, 설계, 편집될 수 있는 소스 프로그램(910)을 포함한다. IDE는 예를 들어 개발자 스튜디오 애플리케이션처럼 보다 정교한 프로그래밍 스테이션에 관련될 수 있고, 또는 예를 들어 코드 텍스트 에디터처럼 보다 기본적인 툴에 관련될 수 있다. 컴파일러(920)는 잘 알려져 있는 컴파일 기술들에 따라 소스 프로그램을 처리하여 컴퓨터를 위한 실행가능 코드(930)를 생성한다.
도 10은 본 발명의 후기 바인딩 옵션을 구현하는 데 채용될 수 있는 컴파일 러 환경(1000)을 도시하는 블록도이다. 컴파일러 환경(1000)은, 매핑 컴포넌트(1014), 프론트 엔드 컴포넌트(1020), 컨버터 컴포넌트(1030), 백 엔드 컴포넌트(1040), 에러 체커 컴포넌트(1050), 심볼 테이블(1060), 파싱 트리(1070), 상태(1080)를 포함하는 컴파일러(1010)를 포함한다. 컴파일러(1010)는 소스 코드를 입력으로서 수용하고 구현 코드를 출력으로서 생성할 수 있다. 입력은, 본 명세서에서 설명하는 바와 같이 프로그래밍 방식의 식들을 포함할 수 있지만, 이러한 예로 한정되지는 않는다. 컴파일러 환경의 컴포넌트들 및 모듈들 간의 관계는 데이터의 주요 흐름을 나타낸다. 다른 컴포넌트들 및 관계들은 편의상 나타내지 않았다. 구현에 따라, 컴포넌트들을 추가, 생략, 다수의 모듈들로 분리, 다른 모듈들, 및/또는 모듈들의 다른 구성들과 결합할 수 있다.
컴파일러(1010)는 요소들의 시퀀스의 처리에 관련된 소스 코드를 갖는 파일을 입력으로서 수용할 수 있다. 소스 코드는 다양한 식들 및 관련 함수들, 메소드들, 및/또는 다른 프로그래밍 방식 구조들을 포함할 수 있다. 컴파일러(1010)는 구조를 분석하고 코드를 생성하거나 주입하도록 하나 이상의 컴포넌트와 함께 소스 코드를 처리할 수 있다.
프론트 엔드 컴포넌트(1020)는 소스 코드에 대한 어휘 분석을 판독 및 수행한다. 본질적으로, 프론트 엔드 컴포넌트(1020)는, 소스 코드에서의 문자들(예를 들어, 영숫자)의 시퀀스를, 특히 상수, 식별자, 연산자 심볼, 키워드, 구두점을 가리키는 구문 요소들이나 토큰들로 판독 및 번역한다.
컨버터 컴포넌트(1030)는 토큰을 중간 식으로 파싱한다. 예를 들어, 컨버터 컴포넌트(1030)는 식 또는 다른 구문 구조로 되는 구문 및 그룹 토큰들을 체크할 수 있고, 이 식 또는 다른 구문 구조는 다시 문 트리로 합쳐진다. 개념상으로는, 이러한 트리들이 파싱 트리(1070)를 형성한다. 게다가 적합한 경우, 변환기 모듈(1030)은 소스 코드에서 사용되는 심볼 이름 및 유형 정보를 관련 특징들과 함께 열거하는 심볼 테이블(1030) 내에 엔트리들을 둘 수 있다.
상태(1080)는, 수신된 또는 검색된 소스 코드를 처리하고 파싱 트리(1070)를 형성하는 컴파일러(1010)의 진행을 추적하는 데 채용될 수 있다. 예를 들어, 서로 다른 상태 값들은, 컴파일러(1010)가 클래스 정의 또는 함수의 시작에 있으며, 클래스 멤버를 방금 선언하였으며, 또는 식을 완료하였음을 가리킨다. 컴파일러가 진행됨에 따라, 이 컴파일러는 상태(1080)를 계속해서 갱신한다. 컴파일러(1010)는 상태(1080)를 외부 엔티티에 부분적으로 또는 완전히 노출시킬 수 있고, 이 외부 엔티티는 다시 입력을 컴파일러(1010)에 제공할 수 있다.
소스 코드에서 구성 또는 다른 신호들에 기초하여(또는 다른 점에서 기회가 인식된다면), 컨버터 컴포넌트(1030) 또는 다른 컴포넌트는 효율적이고 적절한 실행이 용이해지도록 대응 코드를 주입할 수 있다. 컨버터 컴포넌트(1030) 또는 다른 컴포넌트 내로 코딩된 규칙은, 필요한 기능성을 구현하고 코드가 주입되어야 하는 위치 또는 다른 동작들이 실행되어야 하는 위치를 식별하는 데 무엇을 행해야 하는지를 가리킨다. 주입된 코드는, 통상적으로, 하나 이상의 위치에서 추가된 문, 메타데이터, 또는 다른 요소들을 포함하지만, 이 항들은 기존의 소스 코드의 변경, 삭제, 또는 수정을 포함할 수도 있다. 주입된 코드는 하나 이상의 템플릿으 로서 또는 일부 다른 형태로 저장될 수 있다. 또한, 심볼 테이블 조작 및 파싱 트리 변환이 발생할 수 있음을 인식해야 한다.
심볼 테이블(1060) 및 파싱 트리(1070)에 기초하여, 백 엔드 컴포넌트(1040)는 중간 식을 출력 코드로 번역할 수 있다. 백 엔드 컴포넌트(1040)는 그 중간 식을 타겟 프로세서에서 또는 타겟 프로세서에 의해 실행가능한 명령어들로 변환하여 변수 등을 위한 메모리 할당으로 변환한다. 출력 코드는 실제 프로세서에 의해 실행가능하지만, 가상 프로세서에 의해 실행가능한 출력 코드도 제공될 수 있다.
게다가, 프론트 엔드 컴포넌트(1020) 및 백 엔드 컴포넌트(1040)는, 코드 최적화와 같은 기능들을 추가 기능들을 수행할 수 있고, 전술한 동작들을 하나의 단계로서 또는 다수의 단계들로 수행할 수 있다. 컴파일러(101)의 컴포넌트들의 다양한 다른 양태들은, 사실상 통상적인 것이며 등가의 기능들을 수행하는 컴포넌트들로 대체될 수 있다. 또한, 소스 코드의 처리 동안의 다양한 단계들에서, 에러 체커 컴포넌트(1050)는 어휘 구조에서의 에러, 구문 에러, 그리고 심지어는 의미 에러와 같은 에러들을 체크할 수 있다. 에러 검출시, 체커 컴포넌트(1050)는 컴파일을 정지하고 그 에러를 가리키는 메시지를 생성할 수 있다.
청구 대상의 다양한 양태들에 대한 문맥을 제공하기 위해, 다음에 따르는 설명 뿐만 아니라 도 11 및 도 12는 청구 대상의 다양한 양태들이 구현될 수 있는 적합한 환경의 간략하고도 일반적인 설명을 제공하고자 한다. 청구 대상이 컴퓨터 및/또는 컴퓨터들 상에서 실행되는 컴퓨터 프로그램의 컴퓨터 실행가능 명령어들의 일반적인 문맥으로 전술되었지만, 본 발명을 다른 프로그램 모듈들과 조합하여 구 현할 수도 있음을 당업자라면 인식할 것이다. 일반적으로, 프로그램 모듈은, 특정 태스크를 수행하며 그리고/또는 특별한 추상 데이터 유형들을 구현하는 루틴, 프로그램, 컴포넌트, 데이터 구조 등을 포함한다. 게다가, 퍼스널 컴퓨터, 핸드헬드 컴퓨팅 장치(예를 들어, PDA, 폰, 시계 등), 마이크로프로세서 기반이나 프로그래밍가능한 가전 또는 산업 제품 등 뿐만 아니라 싱글 프로세서 또는 멀티 프로세서 컴퓨터 시스템, 미니 컴퓨팅 장치, 미니프레임 컴퓨터를 포함하는 다른 컴퓨터 시스템 구성들로 본 발명의 방법들을 실시할 수 있음을 당업자라면 인식할 것이다. 또한, 예시한 양태들은 통신 네트워크를 통해 연결되어 있는 원격 처리 장치들에 의해 태스크들이 수행되는 분산 컴퓨팅 환경에서 실시될 수 있다. 그러나, 본 발명의 양태들 중 전부는 아니더라도 일부는 독립형 컴퓨터 상에서 실시될 수 있다. 분산형 컴퓨팅 환경에서, 프로그램 모듈은 로컬 및 원격 메모리 저장 장치들 둘 다에 위치할 수 있다.
도 11을 참조해 보면, 컴퓨터(1112)를 포함하는, 주제의 다양한 양태들을 구현하기 위한 예시적인 환경(1110)이 도시되어 있다. 컴퓨터(1112)는 처리 유닛(1114)과, 시스템 메모리(1116)와, 시스템 버스(1118)를 포함한다. 시스템 버스(1118)는 시스템 메모리(1116)를 포함하는 시스템 컴포넌트들을 처리 유닛(1114)에 연결하지만, 이러한 예로 한정되지는 않는다. 처리 유닛(1114)은 이용가능한 다양한 프로세서들 중 임의의 것일 수 있다. 듀얼 마이크로프로세서 및 기타 멀티프로세서 아키텍처도 처리 유닛(1114)으로서 채용될 수 있다.
시스템 버스(1118)는, 메모리 버스 또는 메모리 컨트롤러, 주변 장치 버스 또는 외부 버스, 및/또는 11-비트 버스, ISA(industry standard architecture) 버스, MCA(micro channel architecture) 버스, EISA(Enhanced ISA) 버스, IDE(Intelligent Drive Electronics), VESA 로컬 버스 (VLB), PCI(peripheral component interconnect) 버스, USB(Universal Serial Bus), AGP(Advanced Graphics Port), PCMCIA(Personal Computer Memory Card International Association bus), SCSI(Small Computer Systems Interface)를 포함하는 각종 버스 아키텍처 중 임의의 것을 이용하는 로컬 버스를 비롯한 몇몇 유형의 버스 구조 중 어느 것이라도 될 수 있지만, 이러한 예로 한정되는 것은 아니다.
시스템 메모리(1116)는, 휘발성 메모리(1120) 및 비휘발성 메모리(1122)를 포함한다. 기동 동안처럼 컴퓨터(1112) 내의 요소들 간에 정보를 전달하는 기본 루틴들을 포함하는 기본 입력/출력 시스템(BIOS)는, 비휘발성 메모리(1122)에 저장된다. 예시하자면, 비휘발성 메모리(1122)가 ROM, PROM, EPROM, EEPROM, 또는 플래시 메모리를 포함할 수 있지만, 이러한 예로 한정되지는 않는다. 휘발성 메모리(1120)는 외부 캐시 메모리로서 기능하는 RAM을 포함한다. 예시하자면, RAM은 SRAM, DRAM, SDRAM, DDR SDRAM, ESDRAM, SLDRAM, DRRAM과 같은 많은 형태로 이용가능하지만, 이러한 예로 한정되지는 않는다.
또한, 컴퓨터(1112)는, 분리식/비분리식, 휘발성/비휘발성 컴퓨터 저장 매체를 포함한다. 도 11은 예를 들어 디스크 저장소(1124)를 도시한다. 디스크 저장소(1124)는, 자기 디스크 드라이브, 플로피 디스크 드라이브, 테이프 드라이브, Jaz 드라이브, Zip 드라이브, LS-100 드라이브, 플래시 메모리 카드, 또는 메모리 스틱과 같은 장치들을 포함하지만, 이러한 예로 한정되지는 않는다. 또한, 디스크 저장소(1124)는, CD-ROM, CD-R 드라이브, CD-RW 드라이브 또는 DVD-ROM과 같은 광 디스크 드라이브를 포함하는 다른 저장 매체와 조합하여 또는 별도로 저장 매체를 포함할 수 있지만, 이러한 예로 한정되지는 않는다. 디스크 저장 장치(1124)를 시스템 버스(1118)에 용이하게 연결하기 위해, 통상적으로 인터페이스(1126)와 같은 분리식 또는 비분리식 인터페이스를 이용한다.
도 11이 적합한 동작 환경(1110)에서 설명되는 기본 컴퓨터 리소스들 및 사용자들 간의 매개자로서 기능하는 소프트웨어를 도시하고 있음을 인식할 것이다. 이러한 소프트웨어는 운영 체제(1128)를 포함한다. 운영 체제(1128)는, 디스크 저장소(1124) 상에 저장될 수 있으며, 컴퓨터 시스템(1112)의 리소스들을 제어 및 할당하도록 기능한다. 시스템 애플리케이션(1130)은 시스템 메모리(1116) 또는 디스크 저장소(1124)에 저장된 프로그램 데이터(1134) 및 프로그램 모듈(1132)을 통해 운영 체제(1128)에 의해 리소스들의 관리를 이용한다. 본 명세서에서 설명하는 다양한 컴포넌트들이 다양한 운영 체제들로 또는 운영 체제들의 조합으로 구현될 수 있음을 인식할 것이다.
사용자는 입력 장치(1136)를 통해 컴퓨터(1112)에 커맨드 또는 정보를 입력한다. 입력 장치(1136)는, 마우스, 트랙볼, 스타일러스, 터치 패드와 같은 포인팅 장치, 키보드, 마이크로폰, 조이스틱, 게임 패드, 위성 안테나, 스캐너, TC 튜너 카드, 디지털 카메라, 디지털 비디오 카메라, 웹 카메라 등을 포함하지만, 이러한 예로 한정되지는 않는다. 이러한 입력 장치들 및 다른 입력 장치들은 인터페이스 포트(1138)를 통해 시스템 버스(1118)에 의해 처리 유닛(1114)에 연결된다. 인터페이스 포트(1138)는, 예를 들어, 직렬 포트, 병렬 포트, 게임 포트, 및 USB를 포함한다. 출력 장치(1140)는 동일한 유형의 포트들 중 일부를 입력 장치(1136)로서 이용한다. 따라서, 예를 들어, USB 포트를 사용하여 컴퓨터(1112)에 입력을 제공하고 컴퓨터(1112)로부터의 정보를 출력 장치(1140)에 출력할 수 있다. 출력 아답터(1142)는, 특별한 아답터들을 요구하는 다른 출력 장치들(1140) 중에서 모니터, 스피커, 프린터와 같은 일부 출력 장치들(1140)이 존재한다는 것을 예시하고자 제공된다. 출력 아답터(1142)는, 출력 장치(1140)와 시스템 버스(1118) 간의 연결 수단을 제공하는 비디오 및 사운드 카드들을 포함하는 것으로 예시하지만, 이러한 예로 한정되지는 않는다. 다른 장치들 및/또는 장칟르의 시스템들이 원격 컴퓨터(1144)와 같이 입력 기능 및 출력 기능 둘 다를 제공한다는 점에 주목하길 바란다.
컴퓨터(1112)는 원격 컴퓨터(1144)와 같은 하나 이상의 원격 컴퓨터에 대한 논리적 접속부를 이용하여 네트워크화된 환경에서 동작할 수 있다. 원격 컴퓨터(11440는, 퍼스널 컴퓨터, 서버, 라우터, 네트워크 PC, 워크스테이션, 마이크로프로세서 기반 어플라이언스, 피어 장치 또는 기타 공통 네트워크 노드 등일 수 있으며, 통상적으로 컴퓨터(1112)에 대하여 설명한 요소들의 상당수 또는 모두를 포함한다. 편의상, 원격 컴퓨터(1144)에 하나의 저장 장치(1146)만이 도시되어 있다. 원격 컴퓨터(1144)는, 네트워크 인터페이스(1148)를 통해 컴퓨터(1112)에 논리적으로 연결된 후 통신 접속부(1150)를 통해 물리적으로 연결된다. 네트워크 인 터페이스(1148)는 LAN 및 WAN와 같은 통신 네트워크들을 포함한다. LAN 기술은, FDDI, CDDI, 이더넷/IEEE 802.3, 토큰 링/IEEE 802.5 등을 포함한다. WAN 기술은, 점대점 링크, ISDN과 같은 회로 전환 네트워크 및 그 변동, 패킷 전환 네트워크, DSL을 포함하지만, 이러한 예로 한정되지는 않는다.
통신 접속부(1150)는 네트워크 인터페이스(1148)를 버스(1118)에 연결하는 데 채용되는 하드웨어/소프트웨어를 가리킨다. 통신 접속부(1150)가 컴퓨터(1112) 내부에 있는 것으로 예시되어 있지만 컴퓨터(1112) 외부에 있을 수도 있다. 네트워크 인터페이스(1148)에 연결하는 데 필요한 하드웨어/소프트웨어는, 예시적으로, 정규 전화급 모뎀, 케이블 모뎀, DSL 모뎀을 포함하는 모뎀들, IDSN 아답터, 이더넷 카드와 같은 내장 및 외장 기술들을 포함한다.
도 12는 본 발명의 양태에 따라 옵션인 추기 바인딩을 위해 채용될 수 있는 샘플 컴퓨팅 환경(1200)의 개략적인 블록도이다. 시스템(1200)은 하나 이상의 클라이언트(1210)를 포함한다. 클라이언트(1210)는 하드웨어 및/또는 소프트웨어(예를 들어, 스레드, 프로세스, 컴퓨팅 장치)일 수 있다. 시스템(1200)은 하나 이상의 서버(1230)도 포함한다. 또한, 서버(1230)는 하드웨어 및/또는 소프트웨어(예를 들어, 스레드, 프로세스, 컴퓨팅 장치)일 수 있다. 서버(1230)는 예를 들어 본 명세서에서 설명한 컴포넌트들을 채용함으로써 변환을 수행하도록 스레드를 수용할 수 있다. 클라이언트(1210)와 서버(1230) 간에 가능한 한 가지 통신은 2개 이상의 컴퓨터 프로세스들 간에 전송되도록 적응된 데이터 패킷의 형태를 취할 수 있다. 시스템(1200)은 클라이언트(1210)와 서버(1230) 간의 통신이 용이해지도록 채용될 수 있는 통신 프레임워크(1250)를 포함한다. 클라이언트(1210)는 클라이언트(1210)에 대하여 로컬인 정보를 저장하는 데 채용될 수 있는 하나 이상의 클라이언트 데이터 저장소(1260)에 동작가능하게 연결된다. 마찬가지로, 서버(1230)는 서버(1230)에 대하여 로컬인 정보를 저장하는 데 채용될 수 있는 하나 이상의 서버 데이터 저장소(1240)에 동작가능하게 연결된다.
전술한 바는 다양하는 예시적인 양태들을 포함하고 있다. 물론, 이러한 양태들을 설명하고자 컴포넌트들 또는 방법들의 생각할 수 있는 모든 조합을 설명하는 것은 가능하지 않지만, 많은 추가 조합들 및 치환들이 가능하다는 것을 당업자라면 인식할 수 있다. 이에 따라, 본 명세서에서 설명하는 양태들은 청구범위의 사상 및 범위 내에 속하는 이러한 모든 변경, 수정, 변동을 포함하려는 것이다. 게다가, "포함"(include)이라는 용어가 상세한 설명이나 청구범위에서 사용된다는 점에서 볼 때, 이러한 용어는, comprising이라는 용어가 채용시 청구항에서 전이구로서 해석되기 때문에 "포함"(comprising)이라는 용어와 유사한 방식으로 포괄적이다.

Claims (20)

  1. 후기 바인딩(late binding)의 옵팅-인(opt-in) 및 옵팅-아웃(opt-out) 중 하나를 공급하는 옵션 컴포넌트를 구비한 프로그래밍 언어와,
    상기 후기 바인딩을 용이하게 하는 헬퍼 - 상기 후기 바인딩은 상기 프로그래밍 언어의 변수에 대하여 특정된 또는 추론된 유형에 기초함 -
    를 포함하는 컴퓨터 실행가능 컴포넌트들을 포함하는 컴퓨터 구현 시스템.
  2. 제1항에 있어서,
    상기 변수는 상기 프로그래밍 언어에서 변경되는 정적 유형을 갖는 컴퓨터 구현 시스템.
  3. 제2항에 있어서,
    상기 변경되는 정적 유형은, 상기 프로그래밍 언어의 코드 영역 내의 상기 변수의 위치에 기초하는 컴퓨터 구현 시스템.
  4. 제1항에 있어서,
    상기 변경되는 정적 유형은, 상기 변수의 사용에 기초하여 추론되는 컴퓨터 구현 시스템.
  5. 제1항에 있어서,
    상기 헬퍼는, XML 오브젝트 모델을 나타내는 유형에 대하여 XML 후기 바인딩된 헬퍼인 컴퓨터 구현 시스템.
  6. 제1항에 있어서,
    상기 헬퍼는 오브젝트에 대하여 반사 후기 바인딩된(reflection late bound) 헬퍼인 컴퓨터 구현 시스템.
  7. 제1항에 있어서,
    상기 옵션 컴포넌트는 상기 변수에 대하여 정확하게 추론된 유형 또는 오브젝트를 지정하는 리팩터링(refactoring) 메카니즘을 갖는 컴퓨터 구현 시스템.
  8. 제7항에 있어서,
    상기 리팩터링 메카니즘은 유형을 명시적으로 가리키도록 선언을 확장하는 컴퓨터 구현 시스템.
  9. 제7항에 있어서,
    상기 리팩터링 메카니즘은 오브젝트 및 유형을 가리키도록 드롭 다운 메뉴를 채용하는 컴퓨터 구현 시스템.
  10. 제9항에 있어서,
    오브젝트에 대하여 표준 비주얼 베이직 후기 바인딩의 선택을 가리키는 오브젝트를 선택하는 컴퓨터 구현 시스템.
  11. 프로그래밍 언어의 후기 바인딩 및 비후기 바인딩(non late bdining) 중 하나에 대한 옵션을 사용자에게 공급하는 컴퓨터 실행가능 컴포넌트와,
    변수의 유형을 추론하는 컴퓨터 실행가능 컴포넌트와,
    상기 변수의 정적 유형을 상기 프로그래밍 언어의 일부분으로서 변경하는 컴퓨터 실행가능 컴포넌트
    를 포함하는 컴퓨터 구현 시스템.
  12. 제11항에 있어서,
    상기 변수의 사용에 기초하여, 변경되는 정적 유형을 추론하는 컴퓨터 실행가능 컴포넌트를 더 포함하는 컴퓨터 구현 시스템.
  13. 제11항에 있어서,
    상기 프로그래밍 언어에서의 상기 변수의 위치에 기초하여 상기 정적 유형을 변경하는 컴퓨터 실행가능 컴포넌트를 더 포함하는 컴퓨터 구현 시스템.
  14. 제11항에 있어서,
    상기 프로그래밍 언어에 대한 후기 바인딩의 유형을 지정하는 컴퓨터 실행가능 컴포넌트를 더 포함하는 컴퓨터 구현 시스템.
  15. 제11항에 있어서,
    상기 정적 유형의 변경시 상기 사용자에게 피드백을 공급하는 컴퓨터 실행가능 컴포넌트를 더 포함하는 컴퓨터 구현 시스템.
  16. 제11항에 있어서,
    컴파일러를 통해 변수 유형을 추적하는 컴퓨터 실행가능 컴포넌트를 더 포함하는 컴퓨터 구현 시스템.
  17. 제11항에 있어서,
    선택한 정적 유형에 기초하여 후기 바인딩을 트리거하는 컴퓨터 실행가능 컴포넌트를 더 포함하는 컴퓨터 구현 시스템.
  18. 제11항에 있어서,
    유형을 명시적으로 지정하도록 확장되는 리팩터링 메카니즘을 채용하는 컴퓨터 실행가능 컴포넌트를 더 포함하는 컴퓨터 구현 시스템.
  19. 제11항에 있어서,
    유형들의 정확한 규칙을 갖는 프로그래밍 언어의 코드에 대한 영역들을 식별하는 컴퓨터 실행가능 컴포넌트를 더 포함하는 컴퓨터 구현 시스템.
  20. 프로그래밍 언어에 대해 후기 바인딩의 옵팅-인 및 옵팅-아웃 중 하나를 행하는 수단과,
    변수의 유형을 추론하는 수단과,
    상기 프로그래밍 언어에서 상기 변수의 정적 유형을 변경하는 수단
    을 포함하는 컴퓨터 실행가능 컴포넌트들을 포함하는 컴퓨터 구현 시스템.
KR1020087005382A 2005-09-06 2006-08-15 유형 추론 및 유형 지향 후기 바인딩 KR101354803B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/220,167 2005-09-06
US11/220,167 US8473971B2 (en) 2005-09-06 2005-09-06 Type inference and type-directed late binding
PCT/US2006/031709 WO2007030282A1 (en) 2005-09-06 2006-08-15 Type inference and type-directed late binding

Publications (2)

Publication Number Publication Date
KR20080043325A true KR20080043325A (ko) 2008-05-16
KR101354803B1 KR101354803B1 (ko) 2014-02-19

Family

ID=37831354

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020087005382A KR101354803B1 (ko) 2005-09-06 2006-08-15 유형 추론 및 유형 지향 후기 바인딩

Country Status (4)

Country Link
US (2) US8473971B2 (ko)
KR (1) KR101354803B1 (ko)
CN (1) CN101253478A (ko)
WO (1) WO2007030282A1 (ko)

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8473971B2 (en) 2005-09-06 2013-06-25 Microsoft Corporation Type inference and type-directed late binding
US8561048B2 (en) * 2005-12-29 2013-10-15 Sap Ag Late and dynamic binding of pattern components
US8171453B2 (en) * 2007-05-21 2012-05-01 Microsoft Corporation Explicit delimitation of semantic scope
US8589872B2 (en) * 2007-06-12 2013-11-19 International Business Machines Corporation System and method for variable type identification
US8321836B2 (en) 2007-06-21 2012-11-27 Microsoft Corporation Late bound programmatic assistance
US8156149B2 (en) * 2007-07-24 2012-04-10 Microsoft Corporation Composite nested streams
US7493610B1 (en) 2008-03-27 2009-02-17 International Business Machines Corporation Versioning optimization for dynamically-typed languages
US9170787B2 (en) * 2008-06-27 2015-10-27 Microsoft Technology Licensing, Llc Componentization of compiler functionality
US20090328001A1 (en) * 2008-06-27 2009-12-31 Microsoft Corporation Unloadable managed code
US8473897B2 (en) 2008-10-03 2013-06-25 Microsoft Corporation Common intermediate representation for data scripting language
US20100235730A1 (en) * 2009-03-13 2010-09-16 Microsoft Corporation Consume-first mode text insertion
US9075667B2 (en) * 2009-05-21 2015-07-07 Microsoft Technology Licensing, Llc Dynamic binding directed by static types
US9298427B2 (en) * 2010-01-06 2016-03-29 Microsoft Technology Licensing, Llc. Creating inferred symbols from code usage
US8572591B2 (en) 2010-06-15 2013-10-29 Microsoft Corporation Dynamic adaptive programming
US9081893B2 (en) * 2011-02-18 2015-07-14 Microsoft Technology Licensing, Llc Dynamic lazy type system
US9256401B2 (en) 2011-05-31 2016-02-09 Microsoft Technology Licensing, Llc Editor visualization of symbolic relationships
US9135027B1 (en) 2011-10-26 2015-09-15 The Mathworks, Inc. Code generation and execution for dynamic programming languages
US8943474B1 (en) * 2011-10-26 2015-01-27 The Mathworks, Inc. Code generation and execution for dynamic programming languages
US9542168B2 (en) 2011-11-10 2017-01-10 Microsoft Technology Licensing Llc Hostable compiler utilizing type information from a host application
US8893098B2 (en) * 2012-12-14 2014-11-18 Oracle International Corporation Deferred type inference of generic type parameters in function calls to overloaded functions
US9696968B2 (en) * 2014-01-17 2017-07-04 Microsoft Technology Licensing, Llc Lightweight optionally typed data representation of computation
US10817272B2 (en) * 2016-12-12 2020-10-27 Sap Se Generation and usage of language-converted script
US10437568B1 (en) * 2017-05-18 2019-10-08 Palantir Technologies Inc. Real-time rendering based on efficient device and server processing of content updates
US10474435B2 (en) * 2017-08-07 2019-11-12 Sap Se Configuration model parsing for constraint-based systems
US10534592B2 (en) 2017-08-07 2020-01-14 Sap Se Template expressions for constraint-based systems
US10599482B2 (en) 2017-08-24 2020-03-24 Google Llc Method for intra-subgraph optimization in tuple graph programs
US10642582B2 (en) 2017-08-24 2020-05-05 Google Llc System of type inference for tuple graph programs method of executing a tuple graph program across a network
US10887235B2 (en) 2017-08-24 2021-01-05 Google Llc Method of executing a tuple graph program across a network
US11836454B2 (en) * 2018-05-02 2023-12-05 Language Scientific, Inc. Systems and methods for producing reliable translation in near real-time
US11119887B2 (en) * 2018-11-29 2021-09-14 International Business Machines Corporation Attaching metadata to lines of code for alerting to changes in the code

Family Cites Families (84)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5488727A (en) 1991-09-30 1996-01-30 International Business Machines Corporation Methods to support multimethod function overloading with compile-time type checking
US5485615A (en) 1992-06-10 1996-01-16 Telefonaktiebolaget L M Ericsson System and method of interactively developing desired computer programs by using plurality of tools within a process described in graphical language
JP3178151B2 (ja) * 1993-03-19 2001-06-18 富士ゼロックス株式会社 オブジェクト指向言語のメッセージコンパイル装置
US5500881A (en) 1993-07-12 1996-03-19 Digital Equipment Corporation Language scoping for modular, flexible, concise, configuration descriptions
US5748961A (en) 1993-07-12 1998-05-05 Digital Equipment Corporation Efficient method and apparatus for compiling and linking modules of computer code in a large software system
US6425124B1 (en) 1993-11-08 2002-07-23 Matsushita Electric Industrial Co. Ltd. Resource allocation device for reducing the size and run time of a machine language program
US5742828A (en) * 1994-08-03 1998-04-21 Microsoft Corporation Compiler and method for evaluation of foreign syntax expressions in source code
US5692195A (en) * 1994-08-31 1997-11-25 International Business Machines Corporation Parent class shadowing
US5748963A (en) 1995-05-12 1998-05-05 Design Intelligence, Inc. Adaptive binding
US5687377A (en) 1995-10-06 1997-11-11 Electronic Data Systems Corporation Method for storing variables in a programming language
US5872973A (en) * 1995-10-26 1999-02-16 Viewsoft, Inc. Method for managing dynamic relations between objects in dynamic object-oriented languages
US6072950A (en) 1996-06-18 2000-06-06 Microsoft Corporation Pointer analysis by type inference combined with a non-pointer analysis
US6100885A (en) 1996-07-06 2000-08-08 International Business Machines Corporation Supporting modification of properties via a computer system's user interface
US6041179A (en) 1996-10-03 2000-03-21 International Business Machines Corporation Object oriented dispatch optimization
JPH10124325A (ja) 1996-10-25 1998-05-15 Toshiba Corp 変数の最適配置方法、変数の最適配置装置及び変数の最適配置プログラムを格納したコンピュータ読み取り可能な記録媒体
US6134708A (en) 1997-02-13 2000-10-17 Nec Corporation Program compilation execution system
US6041180A (en) 1997-04-28 2000-03-21 International Business Machines Corporation System and method for optimizing template object files
US5842220A (en) 1997-05-02 1998-11-24 Oracle Corporation Methods and apparatus for exposing members of an object class through class signature interfaces
US6026233A (en) 1997-05-27 2000-02-15 Microsoft Corporation Method and apparatus for presenting and selecting options to modify a programming language statement
US6314559B1 (en) 1997-10-02 2001-11-06 Barland Software Corporation Development system with methods for assisting a user with inputting source code
CA2219557C (en) 1997-10-29 2002-12-10 Ibm Canada Limited-Ibm Canada Limitee Run-time instrumentation for object oriented programmed applications
US6330717B1 (en) 1998-03-27 2001-12-11 Sony Corporation Of Japan Process and system for developing an application program for a distributed adaptive run-time platform
US5983021A (en) * 1998-05-27 1999-11-09 Sun Microsystems Dynamically switching statically bound function calls to dynamically bound function calls without recompilation
US6018628A (en) 1998-06-16 2000-01-25 Sun Microsystems, Inc. Method of implementing parameterized types to be compatible with existing unparameterized libraries
US6237135B1 (en) 1998-06-18 2001-05-22 Borland Software Corporation Development system with visual design tools for creating and maintaining Java Beans components
US6915301B2 (en) * 1998-08-25 2005-07-05 International Business Machines Corporation Dynamic object properties
US6415316B1 (en) 1998-09-01 2002-07-02 Aidministrator Nederland B.V. Method and apparatus for implementing a web page diary
US6477543B1 (en) 1998-10-23 2002-11-05 International Business Machines Corporation Method, apparatus and program storage device for a client and adaptive synchronization and transformation server
US6502233B1 (en) 1998-11-13 2002-12-31 Microsoft Corporation Automated help system for reference information
US7137069B2 (en) 1998-12-18 2006-11-14 Tangis Corporation Thematic response to a computer user's context, such as by a wearable personal computer
US6842877B2 (en) 1998-12-18 2005-01-11 Tangis Corporation Contextual responses based on automated learning techniques
US6895578B1 (en) 1999-01-06 2005-05-17 Parasoft Corporation Modularizing a computer program for testing and debugging
US6678745B1 (en) * 1999-06-01 2004-01-13 Bruce Hodge Dynamic object synthesis with automatic late binding
CA2279118A1 (en) 1999-07-29 2001-01-29 Ibm Canada Limited-Ibm Canada Limitee Tooling framework system and method for code generation
US6560774B1 (en) 1999-09-01 2003-05-06 Microsoft Corporation Verifier to check intermediate language
US6986132B1 (en) 2000-04-28 2006-01-10 Sun Microsytems, Inc. Remote incremental program binary compatibility verification using API definitions
US6981249B1 (en) 2000-05-02 2005-12-27 Microsoft Corporation Methods for enhancing type reconstruction
US6973646B1 (en) 2000-07-21 2005-12-06 International Business Machines Corporation Method for compiling program components in a mixed static and dynamic environment
AU2001296394A1 (en) 2000-09-27 2002-04-15 Conducive Technology Corp Scripting business logic in a distributed object oriented environment
US6957394B1 (en) 2000-12-01 2005-10-18 Microsoft Corporation Rendering controls of a web page according to a theme
US7437710B2 (en) 2001-07-02 2008-10-14 Bea Systems, Inc. Annotation based development platform for stateful web services
US7117504B2 (en) 2001-07-10 2006-10-03 Microsoft Corporation Application program interface that enables communication for a network software platform
US7120897B2 (en) 2001-07-10 2006-10-10 Microsoft Corporation User control objects for providing server-side code generation from a user-defined dynamic web page content file
US6928425B2 (en) 2001-08-13 2005-08-09 Xerox Corporation System for propagating enrichment between documents
US20030131347A1 (en) * 2001-10-12 2003-07-10 Allison David S. Method and apparatus for runtime binding of object members
US20030097648A1 (en) 2001-10-12 2003-05-22 Allison David S. Method and apparatus for determining runtime size and type information in dynamically typed languages
US6965990B2 (en) 2001-10-23 2005-11-15 International Business Machines Corporation Method and apparatus for providing programming assistance
US7152229B2 (en) * 2002-01-18 2006-12-19 Symbol Technologies, Inc Workflow code generator
US7017117B2 (en) 2002-02-14 2006-03-21 Symantec Corporation Attenuating and amplifying user interface themes
US7127707B1 (en) 2002-10-10 2006-10-24 Microsoft Corporation Intellisense in project upgrade
US7546607B2 (en) 2002-11-19 2009-06-09 Microsoft Corporation Native code exposing virtual machine managed object
US7051322B2 (en) 2002-12-06 2006-05-23 @Stake, Inc. Software analysis framework
US8032860B2 (en) 2003-02-26 2011-10-04 Oracle International Corporation Methods for type-independent source code editing
US7246361B1 (en) 2003-03-20 2007-07-17 Intuit, Inc. Supporting multiple late binding objects with the same identifier
US7389498B2 (en) 2003-03-25 2008-06-17 Microsoft Corporation Core object-oriented type system for semi-structured data
US7620959B2 (en) 2003-05-12 2009-11-17 Microsoft Corporation Reflection-based processing of input parameters for commands
US7197702B2 (en) 2003-06-13 2007-03-27 Microsoft Corporation Web page rendering mechanism using external programmatic themes
US7647610B2 (en) 2003-08-19 2010-01-12 Lg Electronics Inc. Interfacing system between digital TV and plurality of remote controllers, method thereof, remote controller thereof, and remote controller signal transmitting method thereof
US8307109B2 (en) * 2003-08-27 2012-11-06 International Business Machines Corporation Methods and systems for real time integration services
US7818729B1 (en) 2003-09-15 2010-10-19 Thomas Plum Automated safe secure techniques for eliminating undefined behavior in computer software
WO2005036368A2 (en) 2003-10-10 2005-04-21 Humanizing Technologies, Inc. Clustering based personalized web experience
WO2005038610A2 (en) 2003-10-14 2005-04-28 Donn Delson A method and system for using cascading style sheets (css) to customize an online store
US7676798B2 (en) 2003-10-24 2010-03-09 Microsoft Corporation Mechanism for obtaining and applying constraints to constructs within an interactive environment
US20050198177A1 (en) * 2004-01-23 2005-09-08 Steve Black Opting out of spam
US20050278695A1 (en) 2004-06-14 2005-12-15 Synovic Michael J System and method for modifying code assist within an integrated development environment
US7693856B2 (en) 2004-06-25 2010-04-06 Apple Inc. Methods and systems for managing data
US20060015817A1 (en) 2004-07-15 2006-01-19 Giuseppe Fioretti Method to dynamically customize a web user interface
GB0416867D0 (en) 2004-07-29 2004-09-01 Ibm Automatic content completion of valid values for method argument variables
US20060100975A1 (en) 2004-10-25 2006-05-11 Microsoft Corporation Strongly-typed object oriented GUI automation framework
US7490316B2 (en) 2004-12-02 2009-02-10 International Business Machines Corporation Method and apparatus to implement adaptive scripting tool
US7571189B2 (en) 2005-02-02 2009-08-04 Lightsurf Technologies, Inc. Method and apparatus to implement themes for a handheld device
US7730448B2 (en) 2005-08-11 2010-06-01 Microsoft Corporation Layered type systems
US8473971B2 (en) 2005-09-06 2013-06-25 Microsoft Corporation Type inference and type-directed late binding
US7765519B2 (en) 2005-12-16 2010-07-27 International Business Machines Corporation Efficient builds for installation software
US7958493B2 (en) 2006-01-20 2011-06-07 Kevin Edward Lindsey Type inference system and method
US8615743B2 (en) 2006-02-27 2013-12-24 Microsoft Corporation Adaptive compiled code
US7849451B2 (en) 2006-03-02 2010-12-07 Oracle America Inc. Dynamic delegation chain for runtime adaptation of a code unit to an environment
US8225294B2 (en) 2006-04-27 2012-07-17 Oracle America, Inc. Method and apparatus for expressing and checking relationships between types
US8321836B2 (en) 2007-06-21 2012-11-27 Microsoft Corporation Late bound programmatic assistance
US20080320453A1 (en) 2007-06-21 2008-12-25 Microsoft Corporation Type inference and late binding
US8434062B2 (en) 2008-06-19 2013-04-30 International Business Machines Corporation Enhancing source code debugging and readability using visual symbols
US8640104B2 (en) 2009-12-08 2014-01-28 International Business Machines Corporation Computer method and apparatus for debugging in a dynamic computer language
US8572591B2 (en) 2010-06-15 2013-10-29 Microsoft Corporation Dynamic adaptive programming
US9256401B2 (en) 2011-05-31 2016-02-09 Microsoft Technology Licensing, Llc Editor visualization of symbolic relationships

Also Published As

Publication number Publication date
US8473971B2 (en) 2013-06-25
US20130290987A1 (en) 2013-10-31
US20070055978A1 (en) 2007-03-08
KR101354803B1 (ko) 2014-02-19
WO2007030282A1 (en) 2007-03-15
US8732732B2 (en) 2014-05-20
CN101253478A (zh) 2008-08-27

Similar Documents

Publication Publication Date Title
KR101354803B1 (ko) 유형 추론 및 유형 지향 후기 바인딩
Bettini Implementing domain-specific languages with Xtext and Xtend
US7730448B2 (en) Layered type systems
KR101098718B1 (ko) 재사용 가능한 코드 세그먼트들을 생성 및 재사용하는 컴퓨터화된 방법 및 컴퓨터 구현 시스템, 및 컴퓨터 판독 가능 저장 매체
US20070044066A1 (en) Embedded multi-language programming
US11481201B2 (en) Integrated development environment for developing and compiling query language schemas for application program interfaces
US20070011651A1 (en) Customized annotation editing
US8850414B2 (en) Direct access of language metadata
JP2002024032A (ja) 複数言語のコンパイル方法及びシステム
KR101597599B1 (ko) 소스 위치가 결여된 코드 세그먼트들을 가지는 소스 코드를 모델링하기 위한 방법
US20070074185A1 (en) Identifier expressions
US7716656B2 (en) Nullable and late binding
US8239842B2 (en) Implicit line continuation
Price C# 9 and. NET 5–Modern Cross-Platform Development: Build intelligent apps, websites, and services with Blazor, ASP. NET Core, and Entity Framework Core using Visual Studio Code
US20080141230A1 (en) Scope-Constrained Specification Of Features In A Programming Language
KR20040077410A (ko) 마크업 내부에서 명시적으로 서브클래스를 정의하고이용하는 시스템 및 방법
García-Pradales et al. An s (CASP) In-Browser Playground based on Ciao Prolog.
Renggli Dynamic language embedding with homogeneous tool support
CA3134422A1 (en) System and method of computer-assisted computer programming
Petricek et al. In the age of web: Typed functional-first programming revisited
van der Storm et al. Towards multilingual programming environments
Renggli Dynamic Language Embedding
Menshikov Midair: An Intermediate Representation for Multi-purpose Program Analysis
Nellaiyapen Practical WebAssembly: Explore the fundamentals of WebAssembly programming using Rust
Kresowaty FxCop and code analysis: Writing your own custom rules

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20161220

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20171219

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20181226

Year of fee payment: 6