摘要:
A development system providing methodology for improving system performance by decreasing recompilation of dependent source modules is described. During operation, the system keeps track of several pieces of information. From the outset, the system has kept track of the timestamps of sources (e.g., A.java file in a Java system) and compiled files thereof (e.g., A.class class file in a Java system). Examination of the timestamps leads to detection of those files which have been modified. The system will recompile A.java in the following circumstances: (1) A.class is not found, (2) A.java has a different timestamp, or (3) A.class has a different timestamp. Otherwise, the system does not invoke a recompile. If a recompilation in not required, the system then looks to the imports for determining whether the imports are consistent. Here, the system checks the timestamps of imports, possibly recompiling one or more of the modules providing the imports. If the imports have been recompiled, then the system must check the root module for determining whether it remains consistent with the imports--that is, whether A is still consistent with its imports. If not, the system recompiles the source file (e.g., A.java).
摘要:
A development system having a client which employs a virtual machine for executing programs written in the Java programming language is described. The client executes a "compiled" (i.e., bytecode or pseudo-compiled) Java program, which has been created by compiling a Java source code program or script with a Java compiler. The pseudo-compiled program comprises the bytecode emitted by the compiler. The development system further includes a just-in-time compiler which natively compiles each pseudo-compiled method of a Java program on a "just-in-time" basis--that is, compiles each method as it is actually used into native machine code for a target microprocessor. Methods which are unused are left uncompiled (i.e., left as bytecode). During program execution, when a method call is made from interpreted code, the system employs an "invoker" slot of the callee. When a method call is made from compiled code, the system employs a "compiled code" slot of the callee. As the addresses for the slots themselves remain unchanged, a method which has been compiled need not be recompiled when a callee method it invokes is itself compiled. In this manner, a method (caller) calling another method (callee) need not know whether it is calling is an interpreted method or a compiled method.
摘要:
A development system having a compiler, a linker, and an interface is generated. When the system is (optionally) operating in a "code guarded" mode, the linker links the object modules with a CodeGuard.TM. Library to generate "code guarded" program(s). The API (Application Programming Interface) calls to the runtime libraries are "wrappered" by CodeGuard wrapper functions. Additionally in this mode, operation of the compiler is altered to insert calls from the user code (e.g., compiled user code in object modules) to the CodeGuard Runtime Library, for checking runtime use of resources and memory. As a result, the system can identify a programming error at the location where it occurs that is, at the original line of code which gave rise to the problem in the first place. Errors are found immediately as they happen, so that the original offending site can be determined. In this manner, the task of creating computer programs is simplified.
摘要:
A development system having a compiler, a linker, and an interface for detecting invalid use of resource is generated. When the system is (optionally) operating in a "code guarded" mode, the linker links the object modules with a CodeGuard.RTM. Library to generate "code guarded" program(s). The API (Application Programming Interface) calls to the runtime libraries are "wrappered" by CodeGuard wrapper functions. Additionally in this mode, operation of the compiler is altered to insert calls from the user code (e.g., compiled code in object modules) to the CodeGuard Runtime Library, for checking runtime use of resources and memory. As a result, the system can identify a programming error at the location where it occurs that is, at the original line of code which gave rise to the problem in the first place. Errors are found immediately as they happen, so that the original offending site can be determined. In this manner, the task of creating computer programs is simplified.