Abstract

A representation of types, type-checker, and compiler are provided for checking consistency in various forms of an intermediate language. Type- checking a programming language in a compiler is accomplished by taking one or more rule sets as input to a type-checker, which selects one or more of the rule sets based upon any one, or combination of two or more, of numerous criteria. Among them are stage of compilation, source language, architecture, and level of typing present in the language being type-checked. The language is then type-checked using the selected one or more rule sets. The rule sets can include one rule set corresponding to strong type-checking, one rule set corresponding to weak type-checking, and one rule set corresponding to representation type-checking. In the alternative, a compiler can be provided with a type-checker that constructs the one or more sets of rules at runtime from a larger set of rules based on any one, or combination of two or more, of the previously mentioned criteria.

Description

Translated from Korean

컴파일 프로세스 동안 프로그램 컴포넌트의 일관성을 표현하고 검사하기 위한 확장가능 타입 시스템{AN EXTENSIBLE TYPE SYSTEM FOR REPRESENTING AND CHECKING CONSISTENCY OF PROGRAM COMPONENTS DURING THE PROCESS OF COMPILATION} Extensions to the compilation process for expressing the consistency of program components and inspectable type system {AN EXTENSIBLE TYPE SYSTEM FOR REPRESENTING AND CHECKING CONSISTENCY OF PROGRAM COMPONENTS DURING THE PROCESS OF COMPILATION}

타입 시스템이란 런 타임 에러에 대한 탐지와 방지를 돕는 프로그래밍 언어에서 사용되는 시스템이다. What type of system is the system used in programming languages ​​to help detect and prevent run-time errors.프로그래밍 언어가 변수, 함수 등의 객체에 대해 선언된 타입 집합을 포함하면, 이 프로그래밍 언어는 "타입 지정된 것이고", 이들 타입들은 프로그래밍 언어로 작성된 프로그램의 컴파일 동안 규칙 집합에 대해 검사된다. Programming languages ​​include the type declaration for the collection of objects, such as variables, functions, programming language "type will specified", these types are checked against a set of rules for the compilation of a program written in a programming language.만일 타입 지정된 언어로 작성된 소스 코드가 타입 규칙들 중 하나를 위반한 경우에는, 컴파일러 에러가 확정된다. If the type of source code written in a given language is a violation of one of these types of rules, a compiler error will be fixed.

컴파일러에서 사용하기 위한 타입 지정된 중간 언어는 지난 수년에 걸쳐 연구 단체에서 상당히 연구되어 왔다. Type for use in a given compiler intermediate language has been studied in considerable research groups over the last few years.이들 언어는 컴파일러의 신뢰성 및 견고성을 향상시켰을 뿐 아니라, 불필요 정보 수집기(garbage collector)가 필요로 하는 정보를 추적하여 검사하는 체계적인 방식을 제공한다. The language provides a systematic way to track checking the information you need, as well as sikyeoteul improve the reliability and robustness of the compiler, garbage collector (garbage collector).이 개념은 중간 표현을 갖는 것인데, 이 중간 표현은 타입들이 첨부되어 있으며 소스 프로그램에 대한 타입 검 사와 유사한 방식으로 타입 검사가 행해질 수 있다. This concept is directed towards having an intermediate representation, the intermediate representation types are attached and can be the type of inspection carried out in a manner similar to Sawa-type search for the source program.그러나, 타입 지정된 중간 언어는 컴파일 프로세스 동안 명시적으로 만들어진 아이템들을 표현하는 타입들을 필요로 하기 때문에 구현하기가 매우 곤란하다. However, the type specified intermediate language that is very difficult to implement because it requires the type of items that represent explicitly created during the compilation process.

타입 지정된 중간 언어는 이것이 다수의 상이한 고레벨의 프로그래밍 언어를 표현해야할 경우에는 구현하기가 훨씬 더 곤란하다. Type specified intermediate-language, the implementation is much more difficult to do this when expressing the number of high-level programming language different from the.언어가 다르면 서로 다른 프리미티브 연산 및 타입을 가질 뿐 아니라, 고레벨의 프로그래밍 언어는 상이한 레벨의 타입 지정을 갖는다. Different languages, as well as have different primitive types and operations, high-level programming language has the type designation of the different levels.예를 들어, 어셈블리어와 같은 일부 언어는 일반적으로 타입이 지정되지 않는다. For example, some languages ​​such as assembly language is not usually the type is not specified.환언하자면, 이들 언어는 타입 시스템을 갖지 않는다. Gritty In other words, these languages ​​do not have the type of system.타입이 지정되는 언어들 중, 일부는 강하게 타입이 지정되는 반면, 다른 것은 보다 느슨하게 타입이 지정된다. This type of language is specified, while some strongly-type is specified, the other is more loosely this type is specified.예컨대, C++는 일반적으로 느슨하게 타입 지정된 언어인 것으로 여겨지는 한편, ML 또는 파스칼은 강하게 타입 지정되는 언어인 것으로 여겨진다. For example, C ++ is generally considered to be a loose type specified language other hand, it is believed to be the language that is ML or Pascal strong typing.또한, 느슨하게 타입 지정된 일부 언어는 프로그램 내의 대부분의 코드 섹션들이 강하게 타입 지정될 수 있는 반면, 다른 코드 섹션들은 느슨하게 타입 지정될 수 있는 언어의 보다 작은 부분 집합을 갖는다. In addition, while that may be given some type of loose language specifies the type most strongly in the program code sections and other sections of code have a smaller subset of the language, which can be loosely specified type.예를 들어, C# 및 .NET에서 사용되는 마이크로소프트 중간 언어(MSIL)가 이것을 허용한다. For instance, the C #, and is allowed this Microsoft Intermediate Language (MSIL) used in .NET.따라서, 이들 고레벨의 언어들 중 임의의 것을 표현하는 데 사용되는 타입 지정된 중간 언어는 서로 다른 타입 강도를 표현할 수 있어야 한다. Thus, the intermediate language specified type that is used to represent any of these high-level languages ​​to be able to express the different types of strength.마찬가지로, 이런 타입 지정된 중간 언어의 타입 시스템은 타입 검사가 이루어진 코드의 특성에 따라 여러 규칙들을 실행할 수 있어야 한다. Similarly, this type of system type specified intermediate language should be able to run multiple rules based on attributes in the code that type checking is made.

타입 지정된 중간 언어의 레벨이 컴파일 프로세스 전체에 걸쳐 낮아지면 다 른 문제가 발생된다. This type of a specified level intermediate language is generated another problem is low throughout the compilation process.언어의 레벨이 낮아진다는 것은 언어의 형태를, 예를 들어, 프로그래머가 작성할 수 있는 고레벨의 형태로부터, 예를 들어, 중간 언어와 같은 저레벨의 형태로 변경하는 프로세스를 의미하는 것이다. It is in the form of a low level of language language, for example, intended to mean the process of changing from the high level form of the programmer to create, for example, to the low level type, such as an intermediate language.이어서, 언어는 중간 언어에서 기계-의존성 원시 코드와 같은 컴퓨터가 실행하는 것에 근접한 레벨로 더욱 낮아진다. Then, the language is in the intermediate language machine - even close to the low level to which the computer is running, such as the dependency source code.컴파일 프로세스 동안 다른 레벨로 낮아진 중간 언어에 대해 타입-검사를 행하기 위해, 각 표현마다 다른 규칙 집합을 사용해야 한다. Type for lower intermediate language to another level during the compilation process - to conduct an inspection, you should use a different set of rules for each expression.

타입 지정된 중간 언어를 작성하려는 시도는 종종 상술된 문제점의 해결에 미치지 못한다. Attempts to create a type specified intermediate language often does not reach the settlement of the above-mentioned problems.예를 들어, Cedilla Systems' Special J 컴파일러는 타입 지정된 중간 언어를 사용한다. For example, Cedilla Systems' J Special compilers use the type specified intermediate language.그러나, 이 컴파일러는 자바 소스 언어에 고유하므로, 예컨대, 비-타입-안전 코드를 가질 수 있는 다수의 언어를 처리할 필요가 없었다. However, the compiler is so unique to the Java source language, for example, non-did not have to handle the number of languages ​​that can have a security code - the type.또한, 이 컴파일러는 단지 타입-검사를 위한 하나의 규칙 집합만을 사용하므로, 여러 레벨의 컴파일에서는 사용될 수 없다. In addition, the compiler will just type - uses only one set of rules for inspection and can not be used in the compilation of the various levels.연구자들에게 있어서, 타입 지정된 중간 언어는 종종 여러 단계의 컴파일 동안 소스 언어에 고도로 고유하며 엔지니어(및 타입 설계)에게 곤란하게 되는 경향이 있다. According to researchers, the type specified intermediate language is often highly specific to the source language during the various stages of compilation and tends to make it difficult for engineers (and type design).

본 발명의 한 양상에 있어서, 컴파일러에서 프로그래밍 언어의 타입을 검사하는 방법이 제공된다. In one aspect of the invention, there is provided a method for inspecting a type of programming language, the compiler.타입-검사기로의 입력으로서 하나 이상의 규칙이 택해지며, 이 타입-검사기는 다수의 기준 중 임의 하나, 또는 둘 이상의 결합에 기초하여 하나 이상의 규칙 집합을 선택한다. Type - becomes the one or more rules taekhae as an input to checker, the type-checker based on any one, or two or more combination of a number of criteria to select the one or more set of rules.이들 가운데는 컴파일 단계, 소스 언어, 아키텍처, 및 타입이 검사된 언어에 제공된 타입 지정 레벨이 있다. Among these are the type specified level provided in the compilation stage, the source language, architecture, language, and type checking.이 언어는 선택된 하나 이상의 규칙 집합을 사용하여 타입 검사된다. This type of language is examined using a set of one or more rules selected.

본 발명의 다른 양상에 있어서, 프로그램의 중간 표현의 일관성을 검사하기 위한 복수의 규칙들 구성하는 프로그래밍 인터페이스가 제공된다. In another aspect of the invention, a programming interface is provided for configuring a plurality of rules to check the consistency of the intermediate representation of the program.중간 표현의 일관성을 검사하는 것에는 소정의 기준에 따라 하나의 중간 표현에 제1 규칙 집합을 적용시키고 또 다른 중간 표현에 제2 규칙 집합을 적용시키는 타입-검사기에 복수의 규칙을 제공하는 것이 포함될 수 있다. As to check the consistency of the intermediate representation is a type that applies a second set of rules in the first to apply the rule set and another intermediate representation into a single intermediate representation according to a predetermined criteria - included to provide a plurality of rules to the checker can.

본 발명의 상기 및 기타 양상들은 첨부된 도면을 참조하여 이하에서 기술한 상세한 설명으로부터 명백해질 것이다. These and other aspects of the invention will become apparent from the detailed description described below with reference to the accompanying drawings.

도 7은 타입들 간에서의 계층 관계에 타입을 추가하는 것을 나타내는 직접 그래프 다이어그램. 7 is a diagram showing a graph which directly the addition of the type of the hierarchical relationship between the types.

도 8은 타입-검사 시스템에서 타입 규칙에 대한 명령어를 검사하기 위한 방법에 대한 흐름도. 8 is a type of flow diagram for a method for checking the command for the type of rule from the inspection system.

도 9는 타입-검사 시스템의 실시예에 대해 운영 환경으로서 동작하는 컴퓨터 시스템의 일례의 블럭도. 9 is a type-a block diagram of an example of a computer system that operates as an operating environment for an embodiment of the inspection system.

여러 형태의 중간 언어에서 일관성을 검사하기 위한 타입 표현, 타입-검사기, 및 컴파일러가 제공된다. Type expression types to check for consistency in the intermediate language of different types - the inspector, and the compiler is provided.타입-검사기 및 컴파일러는 프로그램 컴포넌트에 대한 소스 언어 및/또는 컴파일 단계에 따라 서로 다른 타입 및 타입-검사 규칙을 사용할 수 있다. Type-checker and compiler different types depending on the type and source language and / or compilation step for the program components - can be used to test the rule.예컨대, 고레벨의 최적화기를 각종 언어로 작성된 프로그램에 적용시키는 것이 바람직할 수 있다. For example, it may be desirable to apply an high level of optimization in the program written in various languages.이들 언어는 서로 다른 프리미티브 타입 및 프리미티브 연산들을 가질 수 있다. These languages ​​may have different primitive types and primitive operations.어느 한 언어는 예를 들어, 복합 산술을 위한 타입 및 연산을 포함할 수 있는 한편, 또 다른 언어는 컴퓨터 그래픽에 고유한 타입 및 연산을 포함할 수 있다. Any language, for example, which may include a type and a complex arithmetic operation for the other hand, another language may comprise a unique type of operation and the computer graphics.중간 표현이 서로 다른 타입 시스템에 의해 파라미터화되는 것이 가능함으로써, 최적화기는 서로 다른 프리미티브 타입 및 연산을 갖는 언어에 사용될 수 있다. By possible that the intermediate representation is parameterized by a different type of system, the optimizer can be used for each language having a different primitive types and operations.다른 예는 어떤 컴포넌트들은 강하게 타입 지정된 언어의 부분 집합으로 작성되고, 다른 컴포넌트는 타입이 안전하지 않은 완전(full) 언어로 작성되는 프로그램을 포함할 수 있다. Another example is that some components may be stronger type is created with a subset of the specified language, and the other component contains programs that are written in full (full) language type is unsafe.제1 컴포넌트 집합에 대해 보다 많은 에러 검사를 행하는 바람직하다. The first is preferable for performing a number of error detection than for the set of components.이는 서로 다른 컴포넌트마다 서로 다른 타입 검사 규칙을 사용함으로써 달성될 수 있다. This one another can be achieved by using different types of validation rules for different components.또 다른 예로서는 컴파일 동안 타입 정보를 드롭하는 것이다. Another example is to drop the type information during compilation.타입-검사기 및 컴파일러는 초기 단계 동안은 정확한 정보를 유지시키면서 나중 단계에서는 타입 정보를 드롭시킬 수 있다. Type-checker and compiler may be during the initial stage, while maintaining the correct information to a drop type information in a later stage.이는 서로 다른 컴파일 단계 동안 서로 다른 타입 검사 규칙들과 결합하여 알려지지 않은 타입을 사용함으로써 달성될 수 있다. This can be achieved by using each other compilation steps for each type unknown in combination with other types of inspection rules.

이와 같이, 컴파일 프로세스는 중간 언어 명령어를 한 레벨의 표현에서 다른 레벨의 표현으로 변환하는 것으로 이루어진다. As such, the compilation process consists in converting a representation of the different levels in the expression level of the intermediate language instruction.예를 들어, 도 2는 소스 코드문을 HIR로 변환하는 것뿐 아니라, HIR을 기계-의존성 LIR로 변환하는 것을 도시한다. For example, Figure 2, as well as the conversion of the source code statement to the HIR, the HIR machine- shows the conversion of a dependency LIR.소스 코드문(200)은 다수의 고레벨 프로그래밍 언어로 작성될 수 있다. Source code statement (200) can be written in a number of high-level programming languages.이들 언어 는 프로그래머가 쉽게 이해하는 방식으로 코드를 작성하고 판독할 수 있도록 설계된다. The language is designed to create and read the code in a way that programmers can easily understand.따라서, 프로그래머는 추가를 위해 '+'와 같은 문자를 사용할 수 있고, 소스 코드문(200)에 도시된 바와 같이 둘 이상의 연산자를 추가하는 등의 보다 강력한 형태를 사용할 수 있다. Thus, the programmer may use a more robust form, such as for further use and the characters such as "+", add the two or more operators, as shown in the source code statement 200.

명령문(202 내지 206)은 동일한 기능을 표현하지만, 컴퓨터가 이해할 수 있으나 여전히 아키텍처 독립형인 것에 근사한 포맷으로 표현하는 소스 코드문(200)의 HIR 표현이다. Statement (202 to 206) represent the same features, but the HIR representation of the source code statement (200) for the computer to understand, but still expressed by the approximate format being a standalone architecture.명령문(202)은 제1 및 제2 변수를 추가하는 'ADD' 명령을 사용하고, 그 결과를 제1 일시적 변수 t1에 할당한다. Statements 202 using the 'ADD' command for adding the first and the second variable, and assigns the result to the first temporary variable t1.다음에, 명령문(204)은 제3 변수에 t1을 추가하기 위한 또 다른 'ADD' 명령을 사용하여 그 결과를 제2 일시적 변수 t2에 할당한다. Then, the statements 204 using another 'ADD' command for adding t1 to the third variable and assigns the result to the second temporary variable t2.이어서, 명령문(206)은 t2의 값을 'ASSIGN' i 명령어를 이용하여 최종 변수 z에 할당한다. Then, the statement (206) is assigned to the final variable z the value of t2 by using the 'ASSIGN' i command.

다수의 프로그래밍 언어를 여러 레벨의 표현으로 사용하기에 적합한 타입 지정된 중간 언어에 대한 타입 표현의 일 실시예가 부록 A에 나타나 있다. A plurality of programming languages, for an embodiment of the type of representation of the specified type suitable for use as an intermediate language representation of the various levels is shown in Appendix A.이는 단지 여러 가능한 실시예들 중 일례에 불과한 것임에 유의해야 한다. It should be noted that only one example will only one of several possible embodiments.

베이스 클래스 아래, 'Phx::PtrType'으로 정의된 클래스는 포인터 타입을 나 타낼 수 있다. Under the base class, the class defined by 'Phx :: PtrType' can tanael or a pointer type.다양한 종류의 포인터들도 정의될 수 있다. It can also be defined for different kinds of pointers.그 다양한 종류의 포인터들에는, 예를 들어, 관리되는 폐영역 회수된 포인터(폐영역 회수된 객체 내의 위치로의 포인터), 관리되는 폐영역 회수되지 않은 포인터(폐영역 회수되지 않은 객체 내의 위치로의 포인터), 관리되지 않는 포인터(예를 들어, C++로 작성된 코드 내에서 발견되는 것과 같음), 참조 포인터(폐영역 회수된 객체의 베이스로의 포인터), 및 널이 있다. Its wide variety of pointers include, for example, the management closed region number of times that the pointer (a closed area where the pointer to the in the recovered object), to a position within the management closed region that is not recovered pointer (closed region that is not collected objects there is a pointer), an unmanaged pointer (e. g., as the same), the reference point (the base pointer to the closed area of ​​the recovered object to be detected within the code written in C ++), and null.

예를 들어, int 타입으로의 포인터를 가정한다. For example, assume a pointer to type int.하향화(lowering)의 몇몇 단계에서, 타입 정보 int를 드롭하는 것이 바람직할 수 있다. In some stage of hahyanghwa (lowering), it may be desirable to drop the type information int.unkown 타입은 컴파일러가 int 타입을 unkown 타입으로 대체시키는 것을 허용한다. unkown type allows the compiler to replace the int type to a type unkown.그 후에, 타입 검사기는 해당 포인터가 올바른 타입을 가리키고 있는지를 검사할 필요가 없다. After that, the type checker is not required to check whether that pointer points to the correct type.이것은 본질적으로 가리켜진 값이 실행시간에 프로그램 기능에 불리하게 영향을 주지 않는 방식으로 전달될 수 있게 한다. This makes it possible to be delivered in such a way that the value pointed to essentially do not affect adversely the program functions at run time.

unkown 타입을 이용하는 또 다른 예는 함수에 대한 타입을 정의하기 위한 것이다. Another example of using the unkown type is for defining a type of the function.인수가 이미 int로의 타입 포인터를 갖는 경우, unkown으로의 타입 포인터의 인수를 갖는 함수가 호출되면, 컴파일러는 올바른 타입이 전달되었다고 믿어야 한다. If the argument is already the case with the type of pointer to int, calling a function having arguments of type pointer to the unkown, the compiler must believe that the correct type of transfer.포인터를 역참조(dereferencing)한 결과는 int라고 알려지거나 알려지지 않을 수 있지만, int로 이용될 것이다. Dereference a pointer (dereferencing) as a result, but that may not be known or unknown int, will be used as an int.보다 복잡한 예는 가상 함수 호출의 고레벨 중간 표현에서부터 저레벨 중간 표현으로의 변환 동안의 중간 임시 변수의 도입이다. More complex example is the introduction of the converted intermediate temporary variable during the low-level intermediate representation of the high level from an intermediate representation of the virtual function call.가상 테이블(vtable)은 객체-지향 언어로 가상 호출을 구현하는 데 광범위하게 이용된다. Virtual table (vtable) is an object - is widely used to implement a virtual call-oriented language.저레벨 중간 표현으로 가상 함수 호출을 만드는 첫번째 단계는 메모리의 객체의 첫번째 필드를 페치(fetch)하는 것이다. The first step in creating a virtual function call to the low-level intermediate representation is to fetch (fetch) the first field of the memory object.첫번째 필드는 vtable로의 포인터를 포함한다. The first field contains a pointer to a vtable.그 후 페치의 결과가 임시 변수에 할당된다. Then the result of the fetch is assigned to a temporary variable.임시 변수의 타입(vtable이 다수의 필드를 가질 수 있을 때, vtable로의 포인터를 나타내는 타입)을 구성하는 것은 표현하기 복잡하고 부담스러울 수 있다. Type of temporary variables is to configure (when vtable can have a number of fields, the type indicating the pointer to a vtable) can seureoul complex and burden to represent.대신, 컴파일러는 단순하게 중간 임시 변수를 "unknown으로의 포인터"로 할당할 수 있다. Instead, the compiler may simply assign the intermediate temporary variable to "Pointer to unknown".따라서, unknown 타입의 사용은, 상세한 타입 정보를 유지하는 것이 불필요하거나 컴파일러 구현기에 상당한 부담을 나타낼 수 있는 경우, 컴파일의 나중 단계들을 단순화시킨 다. Therefore, the use of unknown type, it is unnecessary to maintain a detailed type information or if that can represent a significant burden groups compiler implementation, the simplified the later stages of compilation.

마지막으로, 집합은 "표현" 검사에 대응할 수 있다. Finally, the set can correspond to "express" tests."표현" 검사는 unknown형을 사용하는 것과 같이 중간 프로그램 표현의 일부에서 드롭된 타입 정보를 허용할 수 있으며, 이러한 타입 정보가 드롭될 수 있는 경우 또는 unknown 타입이 또 다른 타입을 대신할 수 있는 경우를 나타내는 규칙을 포함할 수 있다. "Expression" test cases that can be substituted for the intermediate program may allow a drop type information in some cases, if there is this type of information can be dropped or the unknown type another type of representation, such as using an unknown type the rules may include showing.예를 들어, Void 타입의 값을 리턴하는 함수의 결과는 unknown 타입의 변수에 할당되지 않도록 방지될 수 있다. For example, the result of a function that returns a value of type Void can be prevented from being assigned to a variable of type unknown.

부가적으로, 두 개 이상의 규칙 집합이 컴파일의 단일 단계에서 이용될 수 있다. Additionally, there is more than one set of rules can be used in a single step in the compilation.예를 들어, 소스 코드(300)는 단일 언어를 포함하지만, 강하게 타입 지정된 섹션과 느슨하게 타입 지정된 몇몇의 섹션을 포함한다고 가정한다. For example, assume that the source code 300 contains a section including a single language, but the type specified sections of the type given some slack stronger.타입 검사기는 특정 강하게 타입 지정된 섹션 내의 HIR에 대해 하나의 규칙 집합, 및 느슨하게 타입 지정된 코드 섹션에 대해 또 다른 규칙 집합을 이용할 수 있다. Type checker can use another set of rules for one set of rules, and the type specified in the particular section of code loose for HIR stronger type specified section.

도 4는 도 3에 설명된 것과 유사한, 컴파일러 시스템 내에서의 사용을 위한 타입 검사기의 블럭도이다. Figure 4 is a block diagram of a type-checker for use in a similar, compiler system described in FIG.타입 검사기(400)는 입력으로 상이한 소스 언어 및/또는 상이한 컴파일 단계들에 대응하는 임의의 수의 규칙 집합을 수락할 수 있다. Type checker 400 may accept any number of a set of rules corresponding to different source language and / or different compilation step as an input.도 4에서, 네 가지의 규칙 집합(402-408)이 타입 검사기(400)에 제공된다. In Figure 4, four kinds of set of rules (402-408) are provided on the type-checker 400.규칙 집합(402)은 강하게 타입 지정된 언어들의 HIR에 대한 규칙 집합을 나타내고, 규칙 집합(404)은 약하게 타입 지정된 언어들의 HIR에 대한 규칙 집합을 나타내며, 규칙 집합(406)은 타입 지정되지 않은 언어들의 HIR에 대한 규칙 집합을 나타내고, 규칙 집합(408)은 LIR에 대한 규칙 집합을 나타낸다. Rule set 402 is strongly Type represents a set of rules for HIR of the designated language, rule set 404 represents a rule set for HIR of the type specified language weakly, rule set 406 is of an unspecified type of language represents a set of rules for HIR, rule set 408 represents a rule set for the LIR.프로그램 모듈(410)은 HIR 내의 강하게 타입 지정된 언어를 나타내고, 프로그램 모듈(412)은 LIR로 하향화된 후의 프로그램 모듈(410)을 나타낸다. Program module 410 represents a type of the specified language in the strongly HIR, program module 412 indicates the program module 410 after the hahyanghwa as LIR.

타입 검사기(400)는 타입 검사되는 프로그램 모듈의 속성들에 기초하여 적절한 규칙 집합을 선택하고, 통합된 절차 또는 알고리즘을 이용하여 선택된 규칙 집합을 프로그램 모듈에 적용한다. Type checker 400 to select the appropriate set of rules based on the attribute of the program module type checking, it applies a set of rules selected by the integrated process or algorithm to the program module.예를 들어, 타입 검사기(400)는 프로그램 모듈(410)(HIR의 강하게 타입 지정된 언어를 나타냄)을 타입 검사하기 위한 규칙 집합(402)(강하게 타입 지정된 언어들의 HIR에 대한 규칙 집합을 나타냄)을 선택할 수 있다. For example, the type-checker 400 has program module 410 (representing a rule set for of the types specified language strongly HIR) (indicating the type of the given language strongly of HIR) a set of rules (402) to check the type of You can choose.이어서, 그 후 타입 검사기(400)는 프로그램 모듈(412)(LIR의 강하게 타입 지정된 언어를 나타냄)을 타입 검사하기 위한 규칙 집합(408)(LIR에 대한 규칙 집합을 나타냄)을 선택할 수 있다. Then, it is possible to select the type checker then 400 program module 412 (representing the type of the given language strongly LIR) (representing a rule set for the LIR) set of rules (408) to check the type.

LIR인 경우, 표현 타입 검사에 대응하는 규칙 집합을 선택하기 위한 결정 블 럭(510)이 프로세싱된다. If the LIR, the decision block Luck (510) for selecting a set of rules corresponding to the representation type checking is processed.도 5는 단지 하나의 실시예라는 것을 명심해야 한다. 5 must bear in mind that only one of the Cordillera conducted.상이한 속성들에 대응 및 기초하여 임의의 수의 규칙 집합들이 선택될 수 있다. In response, and based on a different property may be any of a set of rules may be selected.

설명된 타입 검사 시스템의 규칙 집합은 전체적으로 새로운 언어로 확장될 수 있고, 또한 기존 언어의 새로운 특성으로 용이하게 확장될 수 있다. A set of rules of the type described inspection system can be extended to a whole new language, and can be easily extended with a new attribute of the existing language.예를 들어, 새로운 언어가 도입되어야 하는 경우, 단순히 새로운 언어를 위한 새로운 규칙 집합이 작성된다. For example, if a new language should be introduced, it is simply creating a new set of rules for a new language.규칙 집합이 타입 검사기 또는 컴파일 시스템 자체와 개별적이고 규칙 집합을 개별적인 엔티티로 수용하도록 설계되기 때문에, 기존 타입 검사 시스템 또는 컴파일러를 재분배 또는 갱신할 필요없이, 새로운 언어에 대한 새로운 규칙 집합이 분배될 수 있다. Rules set the type checker or compile the system itself and the individual, the rule set because it is designed to accommodate a separate entity, without the need to redistribute or to update an existing type of inspection system or compiler, a new set of rules for a new language can be distributed .마찬가지로, 예를 들어, C++에 XML 지원을 추가하는 것처럼, 새로운 특징이 기존 언어에 추가되면, 다양한 컴파일 단계에서 C++에 대응하는 규칙 집합이 새로운 특징을 처리하도록 용이하게 동적으로 재구성될 수 있다. Like, for example, such as adding XML support in C ++, when the new features added to the existing languages, there is a set of rules corresponding to C ++ in various compilation steps can easily be reconfigured dynamically to handle new features.또다시, 새로운 핵심 시스템이 갱신 또는 분배될 필요가 없다. Again, there is a new core systems need to be updated or distribution.

규칙 집합은 또한 타입에 대한 제약을 허용할 수 있다. Rule sets can also allow for restrictions on the type.예를 들어, 클래스가 또 다른 것으로부터 상속될 때 특정한 타입에 대한 하위 타입을 지정하는 것이 허용되는지가 규칙 내에 설명된 제약일 수 있다. For example, when a class inherits from which another is that it is acceptable to specify a subtype of the specified type it can be a constraint described in the rule.또 다른 제약은, 데이터가 데이터를 포함하는 가상 테이블로 변환될 수 있다는 것을 나타내는 데 바람직할 수 있는 것과 같이 정리된(boxed) 제약일 수 있다. Another restriction is, the data can be organized as may be desirable to indicate that they can be converted to a virtual table containing data (boxed) constraints.다른 것들에는 크기 제약, 또는 프리미티브의 동일한 타입에 대한 필요성을 나타내는 프리미티브 타입 제약이 포함될 수 있다. Others may include a primitive type constraint indicating the need for the same type of size constraints, or primitives.규칙 집합의 임의의 다른 부분과 같이, 새로운 제약들이 원하는 대로 추가될 수 있다. Rules as any other part of the set, there are new restrictions can be added as desired.

타입 검사기에 의해 사용된 규칙 집합은 규칙 집합을 작성하기 위한 애플리케이션에의 프로그래밍 인터페이스를 통해 구성될 수 있다. The set of rules used by the type-checker can be configured via the programming interface of the application, for creating a set of rules.어플리케이션은, 규칙 집합이 타입 지정된 중간 언어의 개별적인 명령어들에 할당된 규칙을 갖는 타입 프리미티브의 계층에 표현되도록 규칙을 구성할 수 있다. The application may configure the rule be present in the layer of type primitive with the rules assigned to the individual instructions of an intermediate language, the rule set type specified.계층은 특정 프로그램 모듈 또는 컴파일 유닛에 관련된 다양한 타입의 구성요소들을 명시적으로 표현할 타입 그래프의 형태로 제공될 수 있다. Layer may be provided in the form of a type of the graph represent the various types of components related to a specific program modules or compilation unit explicitly.심볼 및 연산과 같은 IR 구성요소는 타입 시스템의 구성요소에 연관될 것이다. IR components, such as symbols and the operation will be associated with a component of the type system.타입 그래프 노드는 컴포넌트, 네스팅된 타입, 함수 서명, 인터페이스 타입, 계층의 구성요소, 및 소스 이름, 및 모듈/어셈블리 외부 타입 구성요소에의 참조 등의 기타 정보와 같은 구성된 타입, 그들의 관계, 및 프리미티브를 설명할 것이다. Type graph node type configured as other information, such as components, nesting the type, function signature, the interface type, the components of the layer, and a source name, and module / assembly reference of the external type components, their relationships, and It will be described in the primitive.

단순한 타입 규칙의 예는 다음과 같다: An example of a simple rule types are as follows:

ADD ADD

N = add n, n Add N = n, n

본 예에서, I는 부호화된 정수 타입이고, U는 부호화되지 않은 정수 타입이고, X는 둘 중 한 타입의 정수이고, F는 실수이고, N은 상기의 것들 중 임의의 것이라고 가정한다. In this example, I is a signed integer type, U is an integer type that is not encoded, X is an integer from one of the two types, F is a real number, N is assumed that any of the things described above.도 6은 이러한 타입들 간의 계층적 관계를 나타낸다. 6 shows a hierarchical relationship between these types.타입 N은 계층구조의 상위에 존재한다. Type N is at the top of the hierarchy.타입 F 및 X는 타입 N으로부터 갈라져 내려와 계층의 다음 레벨을 형성한다. Type F and X are divided down from the N type to form the next level in the hierarchy.마지막으로, 타입 U 및 I는 타입 X로부터 갈라져 내려와 계층의 최하위 레벨을 형성한다. Finally, Type I and U is divided down from the Type X form the lowest level in the hierarchy.따라서, 'ADD' 중간 언어 명령어에 대해서, 이 규칙에 따라 오직 타입 N 또는 계층 내의 그보다 하위의 타입만이 add 명령어에 의해 프로세싱될 수 있으며, 연산은 계층 상에서 결과보다 높이 있어서는 안 된다. Therefore, with respect to 'ADD' the intermediate language instructions, in accordance with this rule it may only be processed by only the type of the sub-add instruction than that in the N-type layer, or, the operation shall not be higher than the results on the layer.예를 들어, 두 개의 정수를 더해서 하나의 정수를 만들 수 있으며(I=ADD i, i), 또는 정수와 실수를 더해서 하나의 실수를 만들 수 있다(F=ADD i, f). For example, the number of plus two integers create an integer, and (I = ADD i, i), or by adding an integer and a real number is to create one of the real (F = ADD i, f).그러나, 실수 와 정수를 더해서 하나의 정수를 만들 수는 없다(I=ADD i, f). However, it is not possible by adding the real and integer create a single integer (I = ADD i, f).

예시된 실시예들의 원칙을 도시 및 기술함에 의해, 그러한 원칙으로부터 벗어나지 않고서 실시예들이 배치 및 세부사항에 있어서 수정될 수 있음이 본 분야에 서 숙련된 기술을 가진 자들에게 명백해질 것이다. Carried out by as shown and described the principles of the illustrated embodiments, without departing from such principles will become apparent to those of examples may be modified that the skilled in the the art in the arrangement and detail.

예를 들어, 본원의 일 실시예는 타입-검사기 또는 컴파일러에 제공될 수 있는 하나 이상의 규칙 집합을 기술하며, 컴파일러 또는 타입-검사기가 타입-검사되는 언어 및/또는 컴파일의 페이즈에 기초하여 언어를 타입-검사하기 위해 규칙 집합 중 하나 이상을 선택한다. For example, one embodiment of the present example is a type-and the techniques of one or more set of rules that may be provided to the tester, or the compiler, the compiler or the type-checker type - the language based on the language and / or phase of compiling the tests type - select one or more of the set of rules to check.그러나, 대안적으로, 컴파일러 또는 타입-검사기가 타입-검사되는 언어 및/또는 컴파일의 페이즈에 기초하여 정적으로든지 런타임 시에 동적으로든지 규칙들의 단일 집합으로부터 규칙들의 하나 이상의 부집합을 구성하도록, 규칙들의 단일 집합이 타입-검사기 또는 컴파일러에 제공될 수 있다. However, alternatively, the compiler or the type-checker type -, of the rules to configure at least one sub-set of rules from a single set of dynamic whatsoever rules at runtime whatsoever static on the basis of the language and / or phase of compiling the tests It may be provided to the checker or compiler - a single set of this type.

여러 가능한 실시예의 관점에서, 예시된 실시예들은 단지 예를 포함하는 것이며, 본 발명의 범위에 대한 제한으로 여겨져서는 안 된다는 것을 인식할 것이다. In many possible embodiments the viewpoint, the illustrated embodiments are intended to include the way of example only, will recognize that should not be taken as a limitation on the scope of the invention.오히려, 본 발명은 후술되는 특허청구범위에 의해 정의된다. Rather, the invention is defined by the claims below.그러므로 이러한 특허청구범위의 범위 내에 속하는 그러한 모든 실시예들을 본 발명으로서 특허청구한다. Thus obtained patent all such embodiments that fall within the scope of these claims, as the present invention.

부록 A Appendix A

Claims (34)

Translated from Korean

하나 이상의 규칙 집합에 따라 컴파일러에서 프로그래밍 언어를 타입-검사하는 방법으로서, A method for inspection, - the type of programming language compiler according to one set of rules

컴파일의 현재 단계에 기초하여 상기 규칙 집합 중 하나 이상을 선택하는 단계, 및 Based on the current stage of the compilation step of selecting at least one of the set of rules, and

상기 규칙 집합 중 하나 이상을 선택하는 단계는 상기 컴파일의 단계보다 상기 프로그래밍 언어의 특징에 기초하는 방법. Selecting at least one of the set of rules is a method based on the characteristics of the programming language than the steps of the compilation.

제2항에 있어서, 3. The method of claim 2,

상기 프로그래밍 언어의 특징은 상기 언어의 타입 시스템을 기술하는 방법. Features of the programming language, a way to describe the type system of the language.

상기 선택된 하나 이상의 규칙 집합은 각 표현에 대해 상이한 방법. Said selected at least one rule set is different method for each expression.

제4항에 있어서, 5. The method of claim 4,

상기 규칙 집합 중 하나 이상을 선택하는 단계는 상기 컴파일의 단계보다 타입-검사되는 상기 표현의 특징에 기초하는 방법. Selecting at least one of the set of rules is a type of step than the compile-method based on the characteristics of the representation to be inspected.

제1항에 있어서, According to claim 1,

상기 프로그래밍 언어는 상기 프로그래밍 언어의 구성요소가 다수의 타입 중 하나일 수 있음을 나타내는 타입을 포함하는 방법. The programming language comprises a type indicating that this is a component of the programming language may be one of a number of types.

제7항에 있어서, The method of claim 7,

상기 하나 이상의 규칙 집합은 상기 프로그래밍 언어의 구성요소가 다수의 타입 중 하나일 수 있음을 나타내는 타입을 타입-검사하기 위한 규칙을 포함하는 방법. At least one set of rules is the component type that represents a type that can be one of a number of types of the programming language - how to include rules for checking.

제1항에 있어서, According to claim 1,

상기 하나 이상의 규칙 집합은 다수의 규칙을 계층적 포맷으로 포함하는 방법. The at least one rule set comprises a plurality of rules in a hierarchical format.

제1항에 있어서, According to claim 1,

상기 하나 이상의 규칙 집합은 강한 타입-검사(strong type-checking)에 대응하는 하나의 규칙 집합, 약한 타입-검사(weak type-checking)에 대응하는 하나의 규칙 집합, 및 표현 타입-검사(representation type-checking)에 대응하는 하나의 규칙 집합을 포함하는 방법. The one or more set of rules are strong type-checking (strong type-checking) set a rule corresponding to the weak type-checking set a rule that corresponds to the (weak type-checking), and expressed type-test (representation type It comprises a single set of rules corresponding to -checking).

소스 언어로 작성된 소스 코드를 컴파일하기 위한 컴파일러로서, As the compiler to compile the source code in the source language,

다수의 타입 규칙, 및 Multiple types of rules, and

규칙 집합을 구성하기 위해 상기 소스 언어에 기초하여 상기 다수의 타입 규칙으로부터 타입 규칙의 부분집합을 선택하는 타입-검사기 To form a set of rules for selecting a type of a subset of rules from a plurality of types of rules, the type based upon the source language - checker

를 포함하는 컴파일러. The compiler that includes.

제13항에 있어서, 14. The method of claim 13,

상기 타입 규칙의 부분집합은 상기 소스 언어보다 상기 소스 코드의 중간 표현에 기초하여 선택되는 컴파일러. A subset of the types of rules the compiler selected on the basis of the intermediate representation of the source code than the source language.

제13항에 있어서, 14. The method of claim 13,

상기 타입 규칙의 부분집합은 상기 소스 언어보다 컴파일의 단계에 기초하여 선택되는 컴파일러. A subset of the types of rules the compiler is selected based on the stage of compilation than the source language.

상기 규칙 집합을 선택하는 단계는 컴파일 프로세스의 일련의 단계들 중 어느 단계가 상기 타입 지정된 중간 표현을 생성하였는지에 기초하는 방법. Selecting the set of rules is a method for the one step of a series of steps in the compilation process based on the type of produce to whether the designated intermediate representation.

제24항에 있어서, 25. The method of claim 24,

상기 규칙 집합을 선택하는 단계는 상기 타입 지정된 중간 표현이 생성되었던 소스 언어에 기초하는 방법. Selecting the set of rules is a method that is based on a source language is the type that was specified intermediate representation generation.

제24항에 있어서, 25. The method of claim 24,

상기 규칙 집합을 선택하는 단계는 프로세서 아키텍처에 기초하는 방법. Selecting the set of rules is a method based on the processor architecture.

제24항에 있어서, 25. The method of claim 24,

상기 규칙 집합을 선택하는 단계는 상기 타입 지정된 중간 표현이 검증된 코드(verified code)를 나타내는지 또는 검증되지 않은 코드(unverified code)를 나타내는지에 기초하는 방법. Selecting the set of rules is a method based on whether or not the code indicating (unverified code) representing the code has not been verified (verified code) is an intermediate representation given the type verification.

프로그램의 중간 표현의 일관성(consistency)을 검사하기 위한 다수의 규칙을 구성하기 위한 수단을 포함하고, And it means for configuring a plurality of rules to check the consistency (consistency) of the intermediate representation of the program,

상기 프로그램의 중간 표현의 일관성을 검사하는 동작은 제1 중간 표현에 상기 다수의 규칙의 제1 집합을, 그리고 제2 중간 표현에 상기 다수의 규칙의 제2 집합을 적용하도록 동작가능한 타입-검사기에 다수의 규칙을 제공하는 동작을 포함하는 프로그래밍 인터페이스. Operable to check the consistency of the intermediate representation of the program, first the first set of the plurality of rules to the intermediate representation, and a second operable type so as to apply a second set of the plurality of rules to the intermediate representation to the checker programming interface that includes an operation that provides a number of rules.