Java development environment using optimizing ahead-of-time compiler

Saved in:
Bibliographic Details
Title: Java development environment using optimizing ahead-of-time compiler
Patent Number: 6,110,226
Publication Date: August 29, 2000
Appl. No: 09/025,842
Application Filed: February 19, 1998
Abstract: The present invention, generally speaking, provides a machine-independent solution suitable for high-performance systems development. In a preferred embodiment, the solution is Java-based, providing machine independence. The requirements of high-performance systems are satisfied by providing a Java optimizing, ahead-of-time compiler. Optimized ahead-of-time compilation produces code having comparable size and speed as code written in C/C++. At the same time, compatibility with the Java world is afforded, allowing for the mixing and matching of code according to individual system requirements. If the system has a network connection, for example, then the system software may include, in addition to the pre-compiled Java code, a Java Virtual Machine, allowing Java bytecode to be downloaded and run. A coherent model allows for pre-compiled Java code, VM interpreted bytecode and JIT compiled Java code, as well as C/C++code, to interoperate. Preferably, the optimizing ahead-of-time Java compiler is capable of compiling either Java source code or Java bytecode. In this manner, code distributed only in bytecode form may be pre-compiled. A Java stack slot compilation scheme achieves code optimization and overcomes difficulties peculiar to ahead-of-time compilation of Java. In addition, a static layout of Java metadata is created by the compiler, obviating the need to create such a layout at runtime.
Inventors: Bothner, Per (Cupertino, CA)
Assignees: Cygnus Solutions (Sunnyvale, CA)
Claim: What is claimed is
Claim: 1. A method of producing software code, comprising the steps of
Claim: producing code in a first high-level programming language having both a source code and an intermediate form in which code is represented in terms of machine-independent code instructions, wherein a standard execution model of said high-level programming language is to interpret or compile at run time said machine-independent code instructions;
Claim: producing code in a second different high-level programming language; and
Claim: pre-compiling code in said first language and code in said second language for a specific machine using an optimizing ahead-of-time compiler, producing pre-compiled code;
Claim: wherein code in said first language and code in said second language is compiled using shared data type representations and calling conventions, achieving efficient direct interoperability.
Claim: 2. The method of claim 1, wherein said first code is pre-compiled from source code.
Claim: 3. The method of claim 1, wherein said first code is precompiled from said machine-independent code instructions.
Claim: 4. The method of claim 1, comprising the further steps of
Claim: selecting a subset of run-time components called for by said standard execution model; and
Claim: fixing only said subset of run-time components within a system.
Claim: 5. The method of claim 4, comprising the further steps of
Claim: including within said system, software realizing a virtual machine for executing said machine-independent code instructions, and communications software for downloading a file of said machine-independent code instructions.
Claim: 6. The method of claim 5, comprising the further step of downloading a file of said machine-independent code instructions.
Claim: 7. The method of claim 6, comprising the further step of executing said machine-independent code instructions on said virtual machine.
Claim: 8. The method of claim 7, comprising the further steps of causing said machine-independent code instructions and said pre-compiled code to interoperate.
Claim: 9. A method of producing software code, comprising the steps of
Claim: producing code in a high-level programming language having both a source code and an intermediate form in which code is represented in terms of machine-independent code instructions, wherein a standard execution model of said high-level programming language is to interpret or compile at run time said machine-independent code instructions; and
Claim: pre-compiling said first code for a specific machine using an optimizing ahead-of-time compiler, producing pre-compiled code;
Claim: wherein pre-compiling comprises a stack slot compilation process in which a stack slot, representing data of a particular Java type, is mapped to one of a set of virtual registers according to a machine mode used to represent data of said particular Java type.
Claim: 10. The method of claim 9, wherein stack slot compilation comprises
Claim: modeling a stack of said standard execution model using a stack of tree nodes; and
Claim: expanding tree node expressions to obtain a machine-instruction-level code representation.
Claim: 11. The method of claim 10, comprising the further step of performing optimizations on the machine-instruction-level code representation to produce an optimized machine-instruction-level code representation.
Claim: 12. The method of claim 11, comprising the further step of producing assembly code from the optimized machine-instruction-level code representation.
Claim: 13. A method of producing software code, comprising the steps of
Claim: wherein said first code contains metadata describing at least one of data fields used by said first code and methods used by said first code, and wherein pre-compiling comprises transforming said metadata to produce an initialized static data representation of said metadata.
Current U.S. Class: 717/7; 717/5; 717/9
Current International Class: G06F 945
Patent References Cited: 5375242 December 1994 Kumar et al.
5551039 August 1996 Weinberg et al.
5581696 December 1996 Kolawa et al.
5590331 December 1996 Lewis et al.
5664172 September 1997 Antoshenkov
5768593 June 1998 Walters et al.
5812854 September 1998 Steinmetz et al.
5836014 November 1998 Faiman, Jr.
5946487 August 1999 Dangelo
Other References: Dean, J., et al., "Vortex: an optimizing compiler for object-oriented languages", Proc. of the Eleventh Annual Conference on Object-Oriented Programming Systems, Languages, and Applications, vol. 31, No. 10, pp. 83-100, section 3, p. 85, (Oct. 1996).
Fleischmann, J., et al., "A hardware/software prototyping environment for dynamically reconfigurable embedded systems", Proc of the Sixth Intl. Workshop in Hardware/Software Codesign, pp. 105-109 (1998).
"Compiling Java.TM. Code For Embedded Systems: The FastJ.TM. Solution", Diab Data, Inc., pp. 1-22 (1998).
"JOVE.TM. Super Optimizing Deployment Environment.TM. for Java.TM.", JOVE Technical Report, pp. 1-21 (1998).
Per Bothner, "A Gcc-based Java Implementation," Proceedings of IEEE Compcon '97, Feb. 23-26, 1997, pp. 174-178.
Cierniak et al, "Briki: an optimizing Java compiler," Proceedings of IEEE Compcon '97, Feb. 23-26, 1997, pp. 179-184.
Per Bothner, "Compiling Java for Embedded Systems," Paper was presented at the Embedded System Conference West, San Jose, Sep. 1997, 16 pages
Per Bothner, "Writing native Java methods in natural C++: Java/C++ integration," [online], Cygnus Solutions Co., Nov. 1997[retrieved on 1999-09-15]. Retrieved from the Internet: .
Primary Examiner: Hafiz, Tariq R.
Assistant Examiner: Dam, Tuan Q.
Attorney, Agent or Firm: Burns Doane Swecker & Mathis L.L.P.
Accession Number: edspgr.06110226
Database: USPTO Patent Grants
Description
Abstract:The present invention, generally speaking, provides a machine-independent solution suitable for high-performance systems development. In a preferred embodiment, the solution is Java-based, providing machine independence. The requirements of high-performance systems are satisfied by providing a Java optimizing, ahead-of-time compiler. Optimized ahead-of-time compilation produces code having comparable size and speed as code written in C/C++. At the same time, compatibility with the Java world is afforded, allowing for the mixing and matching of code according to individual system requirements. If the system has a network connection, for example, then the system software may include, in addition to the pre-compiled Java code, a Java Virtual Machine, allowing Java bytecode to be downloaded and run. A coherent model allows for pre-compiled Java code, VM interpreted bytecode and JIT compiled Java code, as well as C/C++code, to interoperate. Preferably, the optimizing ahead-of-time Java compiler is capable of compiling either Java source code or Java bytecode. In this manner, code distributed only in bytecode form may be pre-compiled. A Java stack slot compilation scheme achieves code optimization and overcomes difficulties peculiar to ahead-of-time compilation of Java. In addition, a static layout of Java metadata is created by the compiler, obviating the need to create such a layout at runtime.