DE69918334T2 - Erzeugung von kompilierten programmen für interpretative laufzeitumgebungen - Google Patents

Erzeugung von kompilierten programmen für interpretative laufzeitumgebungen Download PDF

Info

Publication number
DE69918334T2
DE69918334T2 DE69918334T DE69918334T DE69918334T2 DE 69918334 T2 DE69918334 T2 DE 69918334T2 DE 69918334 T DE69918334 T DE 69918334T DE 69918334 T DE69918334 T DE 69918334T DE 69918334 T2 DE69918334 T2 DE 69918334T2
Authority
DE
Germany
Prior art keywords
bytecode
runtime
language
runtime environment
program
Prior art date
Legal status (The legal status 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 status listed.)
Expired - Lifetime
Application number
DE69918334T
Other languages
English (en)
Other versions
DE69918334D1 (de
Inventor
M. David SAUNTRY
Mark Gilbert
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
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 Microsoft Corp filed Critical Microsoft Corp
Application granted granted Critical
Publication of DE69918334D1 publication Critical patent/DE69918334D1/de
Publication of DE69918334T2 publication Critical patent/DE69918334T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

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/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Debugging And Monitoring (AREA)
  • Control Of Eletrric Generators (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Description

  • GEBIET DER ERFINDUNG
  • Die Erfindung betrifft allgemein interpretierende Laufzeitumgebungen, und spezieller betrifft sie die Erzeugung eines Codes in einer Compilersprache zur Ausführung in einer interpretierenden Laufzeitumgebung.
  • COPYRIGHTHINWEIS/-ERLAUBNIS
  • Ein Teil der Offenbarung dieses Patentdokuments enthält Material, das dem Copyrightschutz unterliegt. Der Inhaber des Copyrights hat keinen Einwand gegen beliebige Personen hinsichtlich der Faksimilevervielfältigung des Patentdokuments oder der Patentoffenbarung, wie sie in der Patentakte oder Datensätzen des Patent and Trademark Office erscheint, behält sich jedoch ansonsten alle beliebigen Rechte aus dem Copyright vor. Der folgende Hinweis gilt für die Software und die Daten, wie sie unten beschrieben sind, sowie für die hier vorliegenden Zeichnungen: Copyright © 1997, Microsoft Corporation, alle Rechte vorbehalten.
  • HINTERGRUND DER ERFINDUNG
  • Interpretiersprachen werden in weitem Umfang dazu verwendet, Computerprogramme über diverse Hardwareplattformen portierbar zu machen. Dasselbe Interpretiersprachenprogramm kann leicht von einem Computertyp zu einem anderen verschoben werden; es muss nur die Laufzeitumgebung, die die Interpretation ausführt, speziell auf die zugrundeliegende Hardware zugeschnitten werden.
  • Dieser Vorteil einer Interpretiersprache ist auch ihr größ ter Nachteil. Ein in einer Interpretiersprache geschriebenes Programm wird deutlich langsamer als dasselbe in einer Compilersprache geschriebene Programm auf demselben Computer ausgeführt. Bisherige Lösungen für das Problem enthalten alle wesentliche Mängel.
  • Z. B. wurden Nativcodecompiler implementiert, die die Anweisungen der Interpretiersprache in entsprechende Anweisungen in einer Sprache wandeln, die für die spezielle Hardware nativ ist. Dann wird das Nativcodeprogramm ausgeführt. Da jedoch das compilierte Nativcodeprogramm nicht in einer interpretierenden Laufzeitumgebung läuft, sind für es keinerlei Funktionen verfügbar, die durch die Laufzeitumgebung bereitgestellt werden. Ein derartiges Programm ist häufig auch viel größer als das Interpretiersprachenprogramm, was auf minimal konfigurierten Computern zu Ressourcenproblemen führt.
  • Es wurde eine andere Vorgehensweise ergriffen, um ein Interpretiersprachenprogramm insgesamt in ein Programm in einer Compilersprache zu wandeln, wobei dieselben Funktionen bewerkstelligt werden. Derartige Bemühungen haben sich als äußerst komplex in der Realisierung erwiesen, und sie führen zu ineffizientem compiliertem Code.
  • Daher ist eine Art zum Erhöhen des Funktionsvermögens eines Interpretiersprachenprogramms erforderlich, während für Zugriff auf die Funktionen der entsprechenden Laufzeitumgebung gesorgt ist, wobei dies auf eine Weise erfolgen soll, die Systemressourcen bewahrt.
  • Das Dokument "Harissa: A flexible and efficient Java environment mixing bytecode and compiled code", 16. Juni 1997, Proceedings of Object-Oriented Technologies and System, Usenix Assoc., Berkeley, CA, USA, Seiten 1–20 von Müller G. et al. aus dem Stand der Technik beschreibt ebenfalls Funktionsprobleme hinsichtlich der Interpretation von Java-Programmen.
  • ZUSAMMENFASSUNG DER ERFINDUNG
  • Die o. g. Mängel, Nachteile und Probleme werden durch die Erfindung berücksichtigt, die durch Lesen und Studieren der folgenden Beschreibung verständlich werden wird.
  • Ein Inlinecodegenerator, der extern zu einer Laufzeitumgebung arbeitet, reproduziert die Verarbeitung einer Innenschleife eines Interpretierers für die Laufzeitumgebung. Der Inlinecodegenerator verarbeitet ein Programm in der Interpretiersprache, und er produziert ein entsprechendes Programm in einer Compilersprache. Das Compilersprachenprogramm wird unter Verwendung eines Standardcompilers, der für die zugrundeliegende Hardware spezifisch ist, in ein Programm in einer nativen Sprache compiliert. Das Programm in der nativen Sprache läuft innerhalb der Laufzeitumgebung auf dieselbe Weise als sei es durch den Interpretierer interpretiert worden.
  • Der Inlinecodegenerator beseitigt den Overhead in Zusammenhang mit laufenden Programmen in interpretiertem Code durch Exportieren der Verarbeitungszeit für die Innenschleife an den Codegenerator. Da der Inlinecodegenerator vorhandene Interpretiersprachenprogramme als Eingabe akzeptiert, bleiben die durch solche Programme erzielten Portierbarkeitsvorteile erhalten, während gleichzeitig die Ausführung solcher Programme optimiert wird, wenn sie auf einem speziellen Computer laufen. Ferner stehen, da das sich ergebende Programm in einer nativen Sprache innerhalb des Rahmens der Laufzeitumgebung arbeitet, Funktionen und Routinen, wie sie durch diese bereitgestellt werden, dem Programm in einer nativen Sprache zu Verfügung.
  • Die Erfindung beschreibt Systeme, Clients, Server, Methoden und computer-lesbare Medien verschiedenen Umfangs. Zusätzlich zu den Gesichtspunkten und Vorteilen der Erfindung, wie sie in dieser Zusammenfassung beschrieben sind, werden weitere Gesichtspunkte und Vorteile der Erfindung unter Bezugnahme auf die Zeichnungen und durch Lesen der folgenden detaillierten Beschreibung ersichtlich.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • 1 zeigt ein Diagramm der Hardware und der Betriebsumgebung, in deren Zusammenhang Ausführungsformen der Erfindung realisiert werden können;
  • 2AC sind Diagramme zum Veranschaulichen eines Überblicks einer beispielhaften Ausführungsform der Erfindung auf Systemebene;
  • 3 ist ein Flussdiagramm eines Verfahrens, wie es von einem Client gemäß einer beispielhaften Ausführungsform der Erfindung auszuführen ist;
  • 4 ist ein Diagramm einer beispielhaften Java-Ausführungsform der Erfindung auf Systemebene; und
  • 5 ist ein Diagramm einer Methodenzustand-Datenstruktur zur Verwendung bei einer beispielhaften Implementierung der Erfindung.
  • DETAILLIERTE BESCHREIBUNG DER ERFINDUNG
  • In der folgenden detaillierten Beschreibung beispielhafter Ausführungsformen der Erfindung wird auf die beigefügten Zeichnungen Bezug genommen, die einen zugehörigen Teil bilden und in denen veranschaulichend spezielle beispielhafte Ausführungsformen dargestellt sind, durch die die Erfindung realisiert werden kann. Diese Ausführungsformen sind mit ausreichender Detailliertheit beschrieben, um es dem Fachmann zu ermöglichen, die Erfindung auszuüben, und es ist zu beachten, dass andere Ausführungsformen verwendet werden können und dass logische, mechanische, elektrische und andere Änderungen vorgenommen werden können, ohne vom Grundgedanken oder Schutzumfang der Erfindung abzuweichen. Die folgende detaillierte Beschreibung ist daher nicht in beschränkendem Sinn zu verwenden, und der Schutzumfang der Erfindung ist nur durch die beigefügten Ansprüche definiert.
  • Die detaillierte Beschreibung ist in fünf Abschnitte unterteilt. Im ersten Abschnitt werden die Hardware und die Betriebsumgebung, in deren Zusammenhang Ausführungsformen der Erfindung realisiert werden können, beschrieben. Im zweiten Abschnitt wird ein Überblick über die Erfindung auf Systemebene angegeben. Im dritten Abschnitt werden Methoden für eine beispielhafte Ausführungsform der Erfindung angegeben. Im vierten Abschnitt wird eine spezielle Java-Implementierung der Erfindung beschrieben. Schließlich erfolgt im fünften Abschnitt eine Schlussfolgerung zur detaillierten Beschreibung.
  • Hardware und Betriebsumgebung
  • Die 1 ist ein Diagramm der Hardware und der Betriebsumgebung, in deren Zusammenhang Ausführungsformen der Erfindung realisiert werden können. Die Beschreibung zur 1 soll eine kurze, allgemeine Beschreibung geeigneter Computerhardware und einer geeigneten Rechenumgebung liefern, in deren Zusammenhang die Erfindung realisiert werden kann. Obwohl es nicht erforderlich ist, wird die Erfindung im all gemeinen Zusammenhang computer-ausführbarer Anweisungen, wie Programmmodulen, beschrieben, die von einem Computer, wie einem PC, ausgeführt werden. Im Allgemeinen beinhalten Programmmodule Routinen, Programme, Objekte, Komponenten, Datenstrukturen usw., die spezielle Tasks ausführen oder spezielle abstrakte Datentypen implementieren.
  • Darüber hinaus erkennt der Fachmann, dass die Erfindung mit anderen Computersystemkonfigurationen realisiert werden kann, einschließlich Handgeräten, Mikroprozessorsystemen, programmierbarer Verbraucherelektronik oder solcher auf Mikroprozessor-Basis, Netzwerk-PCs, Minicomputern, Großrechnern und dergleichen. Die Erfindung kann auch in verteilten Rechenumgebungen ausgeführt werden, in denen Tasks durch Fernverarbeitungsvorrichtungen ausgeführt werden, die über ein Kommunikationsnetzwerk verbunden sind. In einer verteilten Rechenumgebung können Programmmodule sowohl in lokalen als auch in entfernten Speichern liegen.
  • Die beispielhafte Hardware und Betriebsumgebung der 1 zum Realisieren der Erfindung verfügt über eine Universal-Computervorrichtung in Form eines Computers 20 mit einer Verarbeitungseinheit 21, einem Systemspeicher 22 und einem Systembus 23, der verschiedene Systemkomponenten, einschließlich des Systemsspeichers 22, funktionsmäßig mit der Verarbeitungseinheit 21 verbindet. Es kann nur eine einzelne Verarbeitungseinheit 21 vorhanden sein, oder es können mehrere vorhanden sein, so dass der Prozessor des Computers 20 über eine einzelne zentrale Verarbeitungseinheit (CPU) oder über mehrere Verarbeitungseinheiten verfügt, was allgemein als parallele Verarbeitungsumgebung bezeichnet wird. Der Computer 20 kann ein herkömmlicher Computer, ein verteilter Computer oder ein beliebiger anderer Typ eines Computers sein; die Erfindung ist in dieser Weise nicht beschränkt.
  • Der Systembus 23 kann von einem beliebigen von mehreren Typen von Busstrukturen sein, einschließlich eines Speicherbusses oder eines Speichercontrollers, eines Peripheriebusses und eines lokalen Busses unter Verwendung einer beliebigen einer Anzahl von Busarchitekturen. Der Systemspeicher kann auch einfach als Speicher bezeichnet werden, und er verfügt über einen Festwertspeicher (ROM) 24 und einen Direktzugriffsspeicher (RAM) 25. Ein grundlegendes Eingabe-/Ausgabe-System (BIOS) 26, das diejenigen Grundroutinen enthält, die dazu beitragen, Information zwischen Elementen innerhalb des Computers 20 zu übertragen, wie während des Hochfahrens, ist im ROM 24 gespeichert. Der Computer 20 verfügt ferner über ein Festplattenlaufwerk 27 zum Lesen von Daten von einer nicht dargestellten Festplatte, und zum Schreiben auf diese, ein Magnetplatten-Laufwerk 28 zum Lesen von einer herausnehmbaren Magnetplatte 29, oder zum Schreiben auf diese, und ein optisches Plattenlaufwerk 30 zum Lesen von einer herausnehmbaren optischen Platte 31 wie einer CD-ROM oder anderen optischen Medien, oder zum Schreiben auf diesen.
  • Das Festplattenlaufwerk 27, das Magnetplatten-Laufwerk 28 und das optische Plattenlaufwerk 30 sind durch eine Festplattenlaufwerk-Schnittstelle 32, eine Magnetplattenlaufwerk-Schnittstelle 33 bzw. eine Optikplattenlaufwerk-Schnittstelle 34 mit dem Systembus 23 verbunden. Die Laufwerke und die zu ihnen gehörenden computerlesbaren Medien bilden einen nichtflüchtigen Speicher computer-lesbarer Anweisungen, Datenstrukturen, Programmmodule und anderer Daten für den Computer 20. Der Fachmann erkennt, dass in der beispielhaften Betriebsumgebung jeder beliebige Typ computerlesbarer Medien verwendet werden kann, die Daten speichern können, auf die ein Computer zugreifen kann, wie Magnetkassetten, Flashspeicherkarten, digitale Videoplatten, Bernoulli-Kassetten, Direktzugriffsspeicher (RAMSs), Festwertspei cher (ROMs) und dergleichen.
  • Auf der Festplatte, der Magnetplatte 29, der optischen Platte 31, dem ROM 24 oder dem RAM 25 kann eine Anzahl von Programmmodulen gespeichert sein, einschließlich eines Betriebssystems 35, eines oder mehrerer Anwendungsprogramme 36, anderer Programmmodule 37 sowie Programmdaten 38. Ein Benutzer gibt Befehle und Information über Eingabevorrichtungen wie eine Tastatur 40 und eine Zeigevorrichtung 42 in den PC 20 ein. Zu anderen Eingabevorrichtungen (nicht dargestellt) können ein Mikrofon, ein Joystick, ein Gamepad, eine Satellitenschüssel, ein Scanner oder dergleichen gehören. Diese und andere Eingabevorrichtungen werden häufig über eine Schnittstelle 46 mit seriellem Port, die mit dem Systembus gekoppelt ist, mit der Verarbeitungseinheit 21 gekoppelt, jedoch können sie durch andere Schnittstellen angeschlossen werden, wie einen Parallelport, einen Gameport oder einen universal serial bus (USB). Mit dem Systembus 23 ist auch ein Monitor 47 oder eine andere Art einer Anzeigevorrichtung über eine Schnittstelle, wie einen Videoadapter 48, verbunden. Zusätzlich zum Monitor verfügen Computer typischerweise über andere periphere Ausgabevorrichtungen (nicht dargestellt), wie Lautsprecher und Drucker.
  • Der Computer 20 kann in einer Netzwerkumgebung unter Verwendung logischer Verbindungen zu einem oder mehreren Ferncomputern, wie einem Ferncomputer 49 arbeiten. Diese logischen Verbindungen erfolgen durch eine Kommunikationsvorrichtung, die mit dem Computer oder einem Teil desselben verbunden ist; die Erfindung ist nicht auf eine spezielle Art von Kommunikationsvorrichtung beschränkt. Der Ferncomputer 49 kann ein anderer Computer, ein Server, ein Router, ein Netzwerk-PC, ein Client, einer Peervorrichtung oder ein anderer üblicher Netzwerkknoten sein, und typischerweise enthält er viele oder alle der Elemente, die oben hinsichtlich des Compu ters 20 beschrieben wurden, obwohl in der 1 nur ein Speicher 50 dargestellt ist. Zu den in der 1 dargestellten logischen Verbindungen gehören ein lokales Netzwerk (LAN) 51 sowie ein Fernbereichs-Netzwerk (WAN) 52. Derartige Netzwerkumgebungen sind in Büros, unternehmensweiten Computernetzwerken, Intranets und dem Internet üblich.
  • Wenn der Computer 20 in einer LAN-Netzwerkumgebung verwendet wird, ist er über eine Netzwerkschnittstelle oder einen Adapter 53, wobei es um einen Typ einer Kommunikationsvorrichtung handelt, mit dem lokalen Netzwerk 51 verbunden. Wenn der Computer 20 in einer WAN-Netzwerkumgebung verwendet wird, enthält er typischerweise ein Modem 54, einen Typ einer Kommunikationsvorrichtung, oder irgendeinen anderen Typ einer Kommunikationsvorrichtung zum Errichten einer Verbindung über das Fernbereichs-Netzwerk, wie das Internet. Das Modem 54, das intern oder extern sein kann, ist über die Schnittstelle 46 mit seriellem Port mit dem Systembus 23 verbunden. In einer Netzwerkumgebung können Programmmodule, wie sie hinsichtlich des PC 20 oder Teilen desselben dargestellt sind, in einem Fernspeicher gespeichert werden. Es ist zu beachten, dass die dargestellten Netzwerkverbindungen beispielhaft sind und dass andere Einrichtungen von Kommunikationsvorrichtungen zum Erstellen einer Kommunikationsverbindung zwischen den Computern, sowie derartige Kommunikationsvorrichtungen, verwendet werden können.
  • Es wurden die Hardware und die Betriebsumgebung beschrieben, in deren Zusammenhang Ausführungsformen der Erfindung realisiert werden können. Der Computer, in dessen Zusammenhang Ausführungsformen der Erfindung realisiert werden können, kann ein herkömmlicher Computer, ein verteilter Computer oder ein beliebiger anderer Typ eines Computers sein; die Erfindung ist in dieser Weise nicht beschränkt.
  • Ein derartiger Computer enthält typischerweise eine oder mehrere Verarbeitungseinheiten als Prozessor sowie ein computerlesbares Medium als Speicher. Der Computer kann auch über eine Kommunikationsvorrichtung wie einen Netzwerkadapter oder ein Modem verfügen, so dass er kommunizierend an andere Computer angeschlossen werden kann.
  • Überblick auf Systemebene
  • Unter Bezugnahme auf die 2AC wird nun ein Überblick über den Betrieb einer beispielhaften Ausführungsform der Erfindung auf Systemebene gegeben.
  • Die 2A zeigt die Logikblöcke eines Interpretierers 200 für eine allgemeine Computersprache, der in einer Laufzeitumgebung in einem Computer wie dem Computer 20 in der 1 arbeitet. Der Interpretierer 200 sorgt dafür, dass Anweisungen in der Interpretiersprache, die allgemein als "Bytecodes" bezeichnet werden, als Anweisungen in einer Sprache ausgeführt werden, die für die Laufzeitumgebung nativ ist. Im Allgemeinen werden der Bytecode und der Code in der Interpretiersprache als "lauffähiger" Code bezeichnet, da sie vom Computer ausgeführt werden, ohne dass sie compiliert werden müssten. In ähnlicher Weise bildet auch Code in der nativen Sprache, wie ein Maschinensprachecode, lauffähigen Code.
  • Wenn ein in der Interpretiersprache geschriebenes Programm in der Laufzeitumgebung läuft, liest der Interpretierer 200 jeden Bytecode im Programm, und er verzweigt auf eine Routine, die für den Typ des Bytecodes spezifisch ist (Logikblock 201). Dann führt der Interpretierer eine Anweisung, oder eine Gruppe von Anweisungen, in der nativen Sprache aus, wobei die durch den Bytecode spezifizierte Operation ausgeführt wird (Logikblock 202). Der Prozess wird wiederholt, bis alle Bytecodes im Programm abgearbeitet sind.
  • In der 2B ist ein anderer Typ eines Interpretierers dargestellt, der als "just-in-time" (JIT)-Compiler 210 bezeichnet wird. Anstatt dass der JIT-Compiler 210 jeden Bytecode interpretieren würde und die zugehörige Operation sofort ausführen würde, wandelt er alle Bytecodes im Programm in äquivalente Anweisungen in einer nativen Sprache (Logikblöcke 211 und 212). Diese Anweisungen werden dann in einem Programm in der nativen Sprache gesammelt (Logikblock 213) und ausgeführt (Logikblock 214). Die Logikblöcke 211 und 212 werden gemeinsam als "Innenschleife" des JIT-Compilers bezeichnet.
  • Die 2C veranschaulicht eine Ausführungsform eines Inlinecodegenerators 220, der extern zu einer Laufzeitumgebung 221 arbeitet und die Verarbeitung der Innenschleife des JIT-Compilers 210 reproduziert. In den Inlinecodegenerator 220 wird ein Bytecodeprogramm 222 eingegeben, um ein entsprechendes Programm in einer Compilersprache 223 zu erzeugen. Das Programm 223 in der Compilersprache wird dann unter Verwendung eines Compilers 224 in ein Programm 225 in der nativen Sprache compiliert. Wenn das Programm 225 in der nativen Sprache durch die Laufzeitumgebung 221 ausgeführt wird, erscheint es so, als sei es durch einen JIT-Compiler erzeugt worden. Da das Programm 225 in der nativen Sprache innerhalb des Ausführungsrahmens der Laufzeitumgebung 221 arbeitet, stehen durch diese bereitgestellten Funktionen und Routinen dem Programm 225 in der nativen Sprache zu Verfügung, wie es durch die gestrichelte Verbindung zwischen dem Inlinecodegenerator 220 und der Laufzeitumgebung 221 dargestellt ist. Darüber hinaus kann der Compiler 224, da er für den Computer spezifisch ist, den erzeugten Code optimieren, um redundante Anweisungen zu beseitigen und eine zusätzliche Codeoptimierung für die Hardware auszuführen.
  • Bei einer beispielhaften Ausführungsform gibt der Inlinecodegenerator 220 Quellcode-Anweisungen für eine Compilerhochsprache, wie C, aus, und der Compiler 224 ist für diese Sprache spezifisch.
  • Bei einer anderen beispielhaften Ausführungsform gibt der Inlinecodegenerator 220 Anweisungen in einer Compiler-Zwischensprache aus. Eine Compiler-Zwischensprache wird dazu verwendet, für Kommunikation zwischen sprachspezifischer Compilerlogik und hardwarespezifischer Compilerlogik zu sorgen. Die durch den Inlinecodegenerator erzeugten Anweisungen in der Zwischensprache werden an die geeignete hardwarespezifische Compilerlogik, d. h. den Compiler 224, weitergegeben, um das Programm in der nativen Sprache zu erzeugen.
  • In diesem Abschnitt der detaillierten Beschreibung wurde ein Überblick über den Betrieb einer beispielhaften Ausführungsform der Erfindung auf Systemebene beschrieben. Ein Inlinecodegenerator implementiert die Innenschleife eines extern zu einer Laufzeitumgebung vorhandenen JIT-Compilers, um den Overhead in Zusammenhang mit laufenden Programmen in interpretiertem Code zu beseitigen. Da der Inlinecodegenerator existierende Interpretiersprachenprogramme als Eingang akzeptiert, bleiben die durch diese Programme erzielten Portierbarkeitsvorteile erhalten, während gleichzeitig die Ausführung dieser Programme optimiert wird, wenn sie auf einem speziellen Computer laufen. Ferner erzeugt der Inlinecodegeneratorcode, der jede beliebige Funktion nutzt, wie sie von der Laufzeitumgebung exportiert wird. Während die Erfindung nicht auf irgendeine spezielle Ausführungsform einer interpretierenden Innenschleife beschränkt ist, wurden der Deutlichkeit halber die auf hoher Ebene liegenden Funktionen der Innenschleife eines JIT-Compilers beschrieben.
  • Methoden beispielhafter Ausführungsformen der Erfindung
  • Im vorigen Abschnitt wurde ein Überblick der Operationen beispielhafter Ausführungsformen der Erfindung auf Systemebene beschrieben. In diesem Abschnitt werden die speziellen Methoden, wie sie von einem derartige beispielhafte Ausführungsformen ausführenden Computer verwendet werden, unter Bezugnahme auf eine Reihe von Flussdiagrammen beschrieben. Die auszuführenden Methoden bilden Computerprogramme aus computer-ausführbaren Anweisungen. Das Beschreiben der Methoden unter Bezugnahme auf ein Flussdiagramm ermöglicht es dem Fachmann, derartige Programme, die derartige Anweisungen enthalten, zu entwickeln, um die Methoden auf einem geeigneten Computer auszuführen (wobei der Prozessor der Computer die Anweisungen von computerlesbaren Medien ausführt).
  • Als Erstes wird auf die 3 Bezug genommen, in der Vorgänge dargestellt sind, wie sie von einem den Inlinecodegenerator 220 realisierenden Computer auszuführen sind. Beginnend mit einem Block 301 wird der erste Bytecode im Programm eingelesen. Wie es unten detaillierter erläutert wird, wird eine eindeutige Marke für den Bytecode erzeugt (Block 302). Es wird der Typ des Bytecodes bestimmt (Block 303), und der Bytecode wird in die ihm entsprechende Anweisung in der Compilersprache oder einen Satz von Anweisungen gewandelt (Block 304). Der Inlinecodegenerator 300 fährt mit der Verarbeitung jedes Bytecodes im Programm fort, bis alle Bytecodes gewandelt sind (Block 305). Wie es der Fachmann unmittelbar erkennt, hängt der im Block 304 erzeugte Anweisungstyp davon ab, ob der Inlinecodegenerator Quellcode in einer Compilersprache oder Compilerzwischencode ausgibt.
  • In den meisten Bytecodeprogrammen wird, wenn es erforderlich ist, dass die Logik auf einen Bytecode außerhalb der Sequenz springt, eine Verzweigungsanweisung verwendet, die einen Versatz für den Ziel-Bytecode relativ zur Verzweigungsanweisung spezifiziert. Da der Inlinecodegenerator 300 für jeden Bytecode eine Marke erzeugt, wandelt der Block 304 den Versatzwert in der Verzweigungsanweisung in die Marke für den Ziel-Bytecode. Bei einer Ausführungsform enthält jede im Block 302 erzeugte Marke ihren relativen Versatz zum Anfang des Programms. Der Inlinecodegenerator subtrahiert den in der Verzweigungsanweisung spezifizierten Relativversatz vom Versatz in der Marke der Verzweigungsanweisung, um die Marke für den Ziel-Bytecode zu berechnen. Dem Fachmann sind leicht alternative Wege erkennbar, gemäß denen die ursprünglichen Bytecodes mit für die äquivalenten Anweisungen erzeugten Marken gleichgesetzt werden, wie die Verwendung eines Arrays zum Verwalten aller Marken. Bei einer alternativen beispielhaften Ausführungsform, die gestrichelt in der 3 dargestellt ist, führt der Codegenerator ein "Zusammenstreichen" der Marken aus, die unbenutzt sind, nachdem alle Bytecodes gewandelt wurden (Block 306), so dass nur Marken vorhanden sind, auf die durch die abschließend erzeugten Anweisungen Bezug genommen wird.
  • Wie es im vorigen Abschnitt erläutert ist, hat der im Block 304 erzeugte Code Zugriff auf alle globalen variablen und/oder Funktionen, die durch die Laufzeitumgebung exportiert werden.
  • Es wurden spezielle Methoden beschrieben, wie sie von einem Computer ausgeführt werden, der eine beispielhafte Ausführungsform der Erfindung ausführt. Die Methoden wurden unter Bezugnahme auf ein Flussdiagramm veranschaulicht, das alle der Schritte von 301 bis 306 enthält.
  • Implementierung der Java Virtual Machine
  • In diesem Abschnitt der detaillierten Beschreibung wird eine spezielle Implementierung der Erfindung beschrieben, wie sie für die Implementierung der Java Virtual Machine (JVM) durch Microsoft Corporation spezifisch ist.
  • Die 4 veranschaulicht eine beispielhafte Ausführungsform des erfindungsgemäßen Inlinecodegenerators 401 in Verbindung mit einer JVM 402. Die JVM 402 besteht aus drei Hauptkomponenten: einem Java-Interpretierer 403, einem Java-JIT-Compiler 404 und einem Laufzeitsystem 405. Da die JVM ein System auf Stapelspeicherbasis ist, werden alle vom im Laufzeitsystem 402 ausgeführten Programmen geschaffenen Objekte in einem Stapelspeicher 406 gespeichert. Ein Konstantenpool 407 sorgt für Variable für die Programme. Sowohl der Stapelspeicher 406 als auch der Konstantenpool 407 werden vom Laufzeitsystem 405 verwaltet. Das Laufzeitsystem 405 sorgt auch für Spezialfunktion 408, wie die Sammlung von Datenmüll zu Objekten, die nicht länger in Gebrauch sind, im Hintergrund.
  • Ein Java-Programmierer erzeugt Objekte und Methoden, die auf die Objekte im Java-Quellcode ("Java"-Datei) 409 einwirken, und er gibt die Java-Datei 409 an einer Java-Compiler 410 weiter, der die Java-Bytecodes ("Klassen"datei) 411 erzeugt. Wenn der Inlinecodegenerator 401 verwendet wird, werden die Klassendatei 411 und jegliche Java-Bibliotheken 412, die Methodenbezüge auf die Klassendatei 411 enthalten, an den Codegenerator 402 weitergegeben. Code in Compilersprache wird vom Codegenerator 402 erzeugt und an einen hardwarespezifischen Compiler 413 weitergegeben, der eine ausführbare Datei (DLL) 414 erzeugt.
  • Wenn von einem im Laufzeitsystem 405 laufenden Programm eine externe Methode aufgerufen wird, ermittelt die JVM 402, ob die Methode in einer Bytecode-Klassendatei oder einer ausführbaren DLL-Datei vorliegt, wie es unten detaillierter erläutert wird. Wenn die Methode eine Klassendatei ist, leitet die JVM 402 die Klassendatei 411 gemeinsam mit den erforderlichen Klassenbibliotheken 412 entweder an den Java-Interpretierer 403 oder den Java-JIT-Compiler 404 zur Wandlung in ausführbaren Code weiter. Der ausführbare Code wird dann zur Ausführung an das Laufzeitsystem 405 weitergeleitet. Andererseits leitet die JVM 402, wenn die Methode in einer durch den Inlinecodegenerator 401 erzeugten DLL-Datei vorliegt, einfach die DLL-Datei 414 zur Ausführung an das Laufzeitsystem 405 weiter.
  • Die JVM 402 exportiert auch bestimmte Laufzeitsystemvariable und Methoden an den Codegenerator 401, damit der ausführbare Code in der DLL-Datei 414 erhalten werden kann und den Zustand der JVM 402 manipulieren kann.
  • Die unten angegebene Tabelle 1 veranschaulicht Anweisungen in der Sprache C, wie sie durch die Innenschleife des JIT-Compilers 404 für eine Untergruppe von Java-Bytecodes erzeugt werden. Die Anweisungen in der Sprache C enthalten Zeigen auf den Stapelspeicher 406, den Konstantenpool 407, Methoden 408 sowie lokale Variable im Laufzeitsystem 405, die von der JVM 402 exportiert wurden. Die Innenschleife wird wie folgt codiert:
    while (pCode++)
    switch (*pCode)
    ...
    case LDC
    [entsprechend C-Anweisungen, wie in der Tabelle 1 dargestellt]
    ...
    case BEQ
    [entsprechend C-Anweisungen, wie in der Tabelle 1 dargestellt]
    ...
    case IADD
    [entsprechend C-Anweisungen, wie in der Tabelle 1 dargestellt]
    ...
    break
  • Figure 00170001
    Tabelle 1
  • Unter Verwendung des folgenden Java-Bytecodeprogramms als Beispiel
    LDC <index1>
    LDC <index2>
    IADD
    BEQ-3
  • Erzeugt der Codegenerator 401 das folgende Programm in der Sprache C:
    label_1:
    *pStack++ = m_pMethod->m_pClass->m_ConstantPool[1];
    label_2:
    *pStack++ = m_pMethod->m_pClass->m_pConstantPool[2];
    label_3:
    *(pStack-1) += *(pStack);
    pStack-;
    label_4:
    if (*pStack) goto label_1;
  • Da der ausführbare Code 414 außerhalb der JVM 402 erzeugt wird, muss diese zur Laufzeit keine Schleife durch die Innenschleife des JIT-Compilers 404 ausführen, wodurch das Funktionsvermögen gegenüber einem identischen Bytecodeprogramm wesentlich erhöht wird, das den JIT-Compiler 404 durchläuft. Ferner werden Bezugnahmen auf den Konstantenpool 407 durch den Codegenerator 401 speziell codiert, so dass der Compiler 413 für diesen Teil des Programms in der Sprache C effizienter Code als der JIT-Compiler 404 erzeugt, der Code ausgibt, der der Art nach allgemein ist. Bei einer alternativen beispielhaften Ausführungsform, bei der der Compiler 413 ein optimierender C-Compiler ist, ist die Anzahl der einem Bytecode entsprechenden Anweisungen auf einen mi nimalen Satz compilierter Anweisungen reduziert.
  • Bestimmte Java-Bytecodes müssen in die JVM 402 zurückgerufen werden, und so können sie nicht alleine durch Anweisungen in der Sprache C repräsentiert werden. Der sich ergebende erzeugte Code ist in der Tabelle 1 durch den Bytecode INVOKESTATIC <index> veranschaulicht, der einen Aufruf auf eine andere Java-Methode ausführt. Der erzeugte Code muss als Erstes FindMethod aufrufen, um einen Zeiger auf die Methode (pMethod) zu erhalten, die durch die JVM 402 freigelegt wurde. Dann muss der erzeugte Code die exportierte Methode, ExecuteStaticMethod, aufrufen, um die aufgerufene Methode auszuführen, und er muss LookUpException aufrufen, um jegliche Ausnahmen zu handhaben, die sich aus der Ausführung ergeben. Bei einer alternativen beispielhaften Ausführungsform werden die Anweisungen sowohl für ExecuteStaticMethod als auch LookUpException inline mit dem C-Sprache-Code für INVOKESTATIC erzeugt.
  • Bei der beispielhaften Ausführungsform der JVM 402 zeigen zwei Flags, ein Flag 501 für native Methoden sowie ein JIT-Flag 502, für jede Methode den "Zustand" der Methode an. Die Flags 501, 502 können in einer internen, im Speicher vorhandenen Repräsentation der Klasse gespeichert werden, oder sie können in einer Datei dauerhaft gespeichert sein. Eine die Flags enthaltende beispielhafte Datenstruktur ist in der 5 dargestellt. Die JVM 402 verwendet die Flags 501, 502 zum Bestimmen, wie eine Methode zu laden ist, die innerhalb des Laufzeitsystems 405 aufgerufen wird.
  • Wenn keines der Flags gesetzt ist, lädt die JVM 402 die Bytecodes für die Methode, und sie ruft entweder den Interpretierer 403 oder den JIT-Compiler 404 auf, um die Codes zu verarbeiten. Dieser Fall repräsentiert einen Java-Nach-Java-Aufruf. Wenn nur das Flag zur nativen Methode gesetzt ist, lädt die JVM 402 die entsprechende DLL, sie durchsucht dieselbe nach dem Eintrittspunkt für die aufgerufene Methode, und sie ruft die Methode über eine Schnittstelle für nativen Methoden, wie JNI oder RNI, auf. Dieser Fall wird als Aufruf eines "importierten" Codes gehandhabt.
  • Wenn nur das JIT-Flag gesetzt ist, erkennt die JVM 404, dass die Methode bereits in Maschinencode compiliert ist, sie springt direkt zum Eintrittspunkt der Methode in der entsprechenden DLL-Datei, und sie führt den geeigneten Code aus. Auf diese Weise wird ausführbarer Code gehandhabt, der gemäß der Erfindung erzeugt und compiliert wird.
  • Der Fachmann erkennt leicht andere Stellen, die dazu verwendet werden können, den Zustand jeder Methode zu speichern. Z. B. wird bei einer alternativen beispielhaften Ausführungsform der Zustand jeder Methode innerhalb der entsprechenden Klassendatei selbst gespeichert. Bei einer anderen alternativen beispielhaften Ausführungsform wird die Erweiterung J/Direct verwendet, die einen privaten Datensatz speichert, um auf den Eintrittspunkt einer Methode zu zeigen.
  • In diesem Abschnitt wurde ein Inlinecodegenerator beschrieben, der Java-Bytecodes in äquivalente Anweisungen in einer Compilersprache wandelt. Die Anweisungen in der Compilersprache werden dann an einer Compiler weitergegeben, der ausführbaren Maschinensprachecode erzeugt. Der ausführbare Code kann dann direkt vom aktuellen Java-Laufzeitsystem aufgerufen werden, und daher allen Stapeloperationen des interpretierten Bytecodes genügt, arbeiten der vorhandene Datenmüllsammler und andere Laufzeitmerkmale normal. Der ausführbare Code muss nur die Information der JVM dahingehend aktualisieren, welcher äquivalente Bytecode gerade ausgeführt wird, wenn ein Funktionsaufruf erfolgt oder wenn eine Ausnahme ausgegeben wird. Daher, und aufgrund der Tatsache, dass grundlegende Stapeloperationen durch den Compiler so optimiert werden können, dass Register genutzt werden, beschleunigt der Inlinecodegenerator die Ausführung von Java-Bytecode deutlich gegenüber einem Interpretierer oder einem JIT-Compiler.
  • Schlussfolgerung
  • Es wurde ein Inlinecodegenerator beschrieben. Obwohl hier spezielle Ausführungsformen veranschaulicht und beschrieben wurden, erkennt es der Fachmann, dass jede Anordnung, die es darauf abgesehen hat, denselben Zweck zu erfüllen, die dargestellten speziellen Ausführungsformen ersetzen kann. Diese Anwendung soll alle Anpassungen oder Variationen der Erfindung abdecken.
  • Z. B. erkennt es der Fachmann, dass zwar alle Java Virtual Machines auf Stapelbasis arbeiten, dass jedoch nicht alle JVMs über einen Konstantenpool verfügen, wie er im vorigen Abschnitt beschrieben ist. Da der Begriff "Konstantenpool" auf jede Ansammlung verfügbarer Variablen, die Konstanten enthalten, angewandt werden kann, gehören zu Strukturen, die einem Konstantenpool äquivalent sind, Variablenspeicher, die innerhalb von Klassendateien implementiert sind und zum Ladezeitpunkt zu einer Hashtabelle decodiert werden.
  • Ferner erkennt es der Fachmann, dass verschiedene Laufzeitumgebungen verschiedene Methoden, d. h. Ausnahmehandling, Aufruf von Methoden und/oder Speicherzuordnung, exportieren, die vom erzeugten Code genutzt werden können. Daher ist der erzeugte Code spezifisch für die Laufzeitumgebung, wie dies für Code gilt, der durch einen Interpretierer oder einen JIT-Compiler erzeugt wird, und es besteht keine Beschränkung nur durch die charakteristischen Beschränkungen der Laufzeitumgebung, in der der Inlinecodegenerator implementiert ist.
  • Die diesbezüglich in dieser Anmeldung verwendete Terminologie soll alle Laufzeitumgebungen beinhalten, sowohl vergangene als auch aktuelle und zukünftige. Daher ist es ausdrücklich beabsichtigt, dass die Erfindung nur durch die folgenden Ansprüche und deren Äquivalente beschränkt ist.

Claims (17)

  1. Verfahren zum Ausführen eines in einer Interpretiersprache vorliegenden Programmes innerhalb eines Computersystems, das einen über einen Systembus (23) mit einem Prozessor verbundenen Systemspeicher (22) enthält und in dem der Systemspeicher (22) Anweisungen zum Bereitstellen einer Laufzeitumgebung (402) zum Ausführen des Interpretiersprachenprogramms speichert, wobei die Laufzeitumgebung (402) umfasst: i) ein Laufzeitsystem (405) umfassend einen Stapelspeicher (406), einen Konstantenpool (407) und Methoden (408), die innerhalb des Laufzeitsystems (405) ausgeführt werden, ii) einen Laufzeitinterpreter (403), und iii) einen Laufzeitcompiler (404), wobei das Verfahren durch die folgenden Schritte gekennzeichnet ist: Kompilieren von Quellcodes (409) für die Interpretiersprache in Bytecode (411) und Speichern des Bytecodes in Klassendateien vor dem Eintritt in die Laufzeitumgebung; Weitergeben zumindest einiger Teile des Bytecodes (411) für die Interpretiersprache vor dem Eintritt in die Laufzeitumgebung an einen Compiler (401), der den Bytecode in ausführbare Anweisungen (414) kompiliert; Ausführen eines Programmes innerhalb der Laufzeitumgebung (402) und Aufrufen einer für das in der Laufzeitumgebung (402) laufende Programm externen Methode; und Entscheiden, ob: i) die aufgerufene externe Methode in Bytecode (411) vorliegt und, wenn dies der Fall ist, Weitergeben des Bytecodes entweder an einen Interpreter (403) oder einen Compiler (404) innerhalb der Laufzeitumgebung und danach Weitergeben des interpretierten oder kompilierten Bytecodes in ausführbarer Form an ein Laufzeitsystem (405) der Laufzeitumgebung, oder ii) die aufgerufene externe Methode in einem kompilierten ausführbaren Satz von Instruktionen (414) vorliegt und, wenn dies der Fall ist, direktes Weitergeben des ausführbaren Anweisungssatzes an das Laufzeitsystem (405) der Laufzeitumgebung zum Ausführen.
  2. Verfahren nach Anspruch 1, wobei der Schritt, bei dem zumindest einige Teile des Bytecodes (411) für die Interpretiersprache an einen Kompiler (404) der den Bytecode in ausführbare Anweisungen kompiliert, weitergegeben werden, die folgenden Schritte umfasst: Erzeugen eines eindeutigen Labels für den Bytecode (411); Decodieren des Bytecodes; und Umwandeln des Bytecodes in eine äquivalente Anweisung (504) einer kompilierten Sprache.
  3. Verfahren nach Anspruch 2 ferner umfassend das Entfernen eines unbenutzten Labels für einen Bytecode.
  4. Verfahren nach Anspruch 2, wobei das Erzeugen eines eindeutigen Labels das Erzeugen einer eindeutigen Laufnummer für den Bytecode beinhaltet.
  5. Verfahren nach Anspruch 4, wobei die eindeutige Laufnummer für den Bytecode (411) einen zu einem Startwert für ein den Bytecode enthaltendes Programm relativen Versatzwert für den Bytecode aufweist.
  6. Verfahren nach Anspruch 2, wobei beim Erzeugen eines eindeutigen Labels außerdem das Label mit dem Bytecode mittels einer Datenstruktur in Beziehung gesetzt wird.
  7. Verfahren nach Anspruch 2, wobei das Umwandeln des Bytecodes (411) in eine äquivalente Anweisung (504) einer kompilierten Sprache außerdem das Einfügen des Labels für einen Zielbytecode in eine Verzweigungsanweisung beinhaltet, wenn der Bytecode in eine Verzweigungsanweisung decodiert wird.
  8. Verfahren nach Anspruch 7, wobei das Einfügen des Labels für einen Zielbytecode in eine Verzweigungsanweisung beim Decodieren des Bytecodes in eine Verzweigungsanweisung außerdem das Erzeugen des Labels für den Zielbytecode durch Subtraktion eines in der Verzweigungsanweisung angegebenen Versatzwertes von einem Versatzwert für die Verzweigungsanweisung beinhaltet.
  9. Computersystem umfassend einen durch einen Systembus (23) mit einem Prozessor (21) verbundenen Systemspeicher, dadurch gekennzeichnet, dass der Systemspeicher (22) speichert: eine erste Kompilierzeitumgebung umfassend einen Kompiler (410) zum Kompilieren von Quellcode (409) für eine Interpretiersprache in Bytecode (411) und zum Speichern des Bytecodes (411) in Klassendateien; eine zweite Kompilierzeitumgebung umfassend: i) einen Inlinecodeerzeuger (401) zum Verarbeiten zumindest einiger Teile des Bytecodes (411) für die Interpretiersprache und zum Erzeugen von Code in einer kompilierten Sprache, und ii) einen Kompiler (413) einer hardwarespezifischen Sprache zum weiteren Verarbeiten des Codes in einer kompilierten Sprache, um eine ausführbare DLL-Datei (414) herzustellen; und eine Laufzeitumgebung (402) umfassend: i) ein Laufzeitsystem (405), das einen Stapelspeicher (406), einen Konstantenpool (407) und Methoden (408), die innerhalb des Laufzeitsystems (405) ausgeführt werden, umfasst; ii) einen Laufzeitinterpreter (403); und iii) einen Laufzeitkompiler (404); wobei die Laufzeitumgebung bei dem Ausführen eines Programms innerhalb der Laufzeitumgebung (402) und dem Aufrufen einer für das in der Laufzeitumgebung (402) laufende Programm externen Methode so ausgelegt ist, dass, falls die aufgerufene externe Methode in Bytecode (411) vorliegt, die Laufzeitumgebung (402) den Bytecode entweder an den Laufzeitinterpreter (403) oder an den Laufzeitkompiler (404) innerhalb der Laufzeitumgebung (402) und danach den interpretierten oder kompilierten Bytecode in ausführbarer Form an das Laufzeitsystem (405) weitergibt und, falls die aufgerufene externe Methode in einem kompilierten ausführbaren Satz von Instruktionen (414) vorliegt, die Laufzeitumgebung (402) den ausführbaren Satz von Instruktionen (414) direkt an das Laufzeitsystem (405) der Laufzeitumgebung (402) zum Ausführen weitergibt.
  10. Computersystem nach Anspruch 9, wobei der Inlinecodeerzeuger (401) zum Kompilieren von Bytecode (411) in ausführbare Anweisungen ausgelegt ist, indem: ein eindeutiges Label für den Bytecode (411) erzeugt wird; der Bytecode decodiert wird; und der Bytecode in eine äquivalente Anweisung (504) einer kompilierten Sprache umgewandelt wird.
  11. Computersystem nach Anspruch 10, wobei der Inlinecodeerzeuger (401) ferner zum Kompilieren von Bytecode (401) in ausführbare Anweisungen durch das Entfernen eines unbenutzten Labels für einen Bytecode ausgelegt ist.
  12. Computersystem nach Anspruch 10, wobei der Inlinecodeerzeuger (401) zum Erzeugen eindeutiger Labels für Bytecode (411) durch Erzeugen einer eindeutigen Laufnummer für den Bytecode (411) ausgelegt ist.
  13. Computersystem nach Anspruch 12, wobei der Inlinecodeerzeuger (401) ausgelegt ist zum Erzeugen einer eindeutigen Laufnummer für Bytecode (411), welche einen zu einem Startwert für ein den Bytecode (411) enthaltendes Programm relativen Versatzwert für den Bytecode (411) umfasst.
  14. Computersystem nach Anspruch 10, wobei der Inlinecodeerzeuger (401) ausgelegt ist zum Erzeugen eines eindeutigen Labels, indem das Label mit dem Bytecode (411) mittels einer Datenstruktur in Beziehung gesetzt wird.
  15. Computersystem nach Anspruch 11, wobei der Inlinecodeerzeuger (401) ausgelegt ist zum Umwandeln des Bytecodes (411) in eine äquivalente Anweisung einer kompilierten Sprache, indem ein Label für den Zielbytecode in eine Verzweigungsanweisung eingefügt wird, wenn der Bytecode (411) in eine Verzweigungsanweisung decodiert wird.
  16. Computersystem nach Anspruch 15, wobei der Inlinecodeerzeuger (401) ausgelegt ist zum Einfügen eines Labels für einen Zielbytecode in eine Verzweigungsanweisung beim Decodieren des Bytecodes in eine Verzweigungsanweisung, indem das Label für den Zielbytecode (411) erzeugt wird durch Subtraktion eines in der Verzweigungsanweisung angegebenen Versatzwertes von einem Versatzwert für die Verzweigungsanweisung.
  17. Trägermedium, das computerimplementierbare Anweisungen zum Steuern eines programmierbaren Computersystems trägt, wobei das Computersystem einen Systemspeicher (22) aufweist, der zum Speichern von Anweisungen zum Bereitstellen einer Laufzeitumgebung zum Ausführen eines Programms in einer Interpretiersprache ausgelegt ist, wobei der Systemspeicher (22) durch einen Systembus (23) mit einem Prozessor (21) verbunden ist, wobei die computerimplementierbaren Anweisungen so beschaffen sind, dass sie das programmierbare Computersystem ein Verfahren nach einem der Ansprüche 1 bis 8 durchführen lassen.
DE69918334T 1998-12-30 1999-12-23 Erzeugung von kompilierten programmen für interpretative laufzeitumgebungen Expired - Lifetime DE69918334T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US223440 1994-04-05
US09/223,440 US6327702B1 (en) 1998-12-30 1998-12-30 Generating a compiled language program for an interpretive runtime environment
PCT/US1999/030706 WO2000041075A2 (en) 1998-12-30 1999-12-23 Generating compiled programs for interpretive runtime environments

Publications (2)

Publication Number Publication Date
DE69918334D1 DE69918334D1 (de) 2004-07-29
DE69918334T2 true DE69918334T2 (de) 2005-08-04

Family

ID=22836504

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69918334T Expired - Lifetime DE69918334T2 (de) 1998-12-30 1999-12-23 Erzeugung von kompilierten programmen für interpretative laufzeitumgebungen

Country Status (7)

Country Link
US (1) US6327702B1 (de)
EP (1) EP1145120B1 (de)
JP (1) JP4562918B2 (de)
AT (1) ATE269990T1 (de)
AU (1) AU2380700A (de)
DE (1) DE69918334T2 (de)
WO (1) WO2000041075A2 (de)

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000020319A (ja) * 1998-06-30 2000-01-21 Canon Inc プログラム実行装置、その制御方法および記憶媒体
US7150005B2 (en) * 1999-07-02 2006-12-12 Beryl Technical Assays, Llc Method and system for global constant management for memory
US6968549B1 (en) 1999-07-02 2005-11-22 Beryl Technical Assays Llc Method and system for dynamically loading data structures into memory with global constant pool
US7028298B1 (en) * 1999-09-10 2006-04-11 Sun Microsystems, Inc. Apparatus and methods for managing resource usage
US6930235B2 (en) * 2001-03-15 2005-08-16 Ms Squared System and method for relating electromagnetic waves to sound waves
US6836884B1 (en) * 2001-06-04 2004-12-28 Microsoft Corporation Method and system for editing software programs
US6973644B2 (en) * 2002-04-12 2005-12-06 The Mathworks, Inc. Program interpreter
JP2003330732A (ja) * 2002-05-17 2003-11-21 Canon Inc 画像形成装置、制御方法、制御プログラム
US7104889B2 (en) * 2002-09-13 2006-09-12 Igt Method of using a rule based script to describe gaming machine payout
US20040083467A1 (en) * 2002-10-29 2004-04-29 Sharp Laboratories Of America, Inc. System and method for executing intermediate code
AU2002363920A1 (en) * 2002-10-29 2004-05-25 Freescale Semiconductor, Inc. Method and apparatus for selectively optimizing interpreted language code
US7318215B1 (en) 2003-02-26 2008-01-08 Microsoft Corporation Stored procedure interface language and tools
US7490332B2 (en) * 2003-04-04 2009-02-10 Sesma Systems, Inc. System and method for accessing ActiveX objects in a platform dependent environment from objects in a platform independent environment
US7478408B2 (en) * 2003-04-04 2009-01-13 Sesma Systems, Inc. System and method for accessing objects in a platform dependent environment from a platform independent environment
US7380242B2 (en) * 2003-05-14 2008-05-27 Mainsoft Israel Ltd. Compiler and software product for compiling intermediate language bytecodes into Java bytecodes
US7219329B2 (en) * 2003-06-13 2007-05-15 Microsoft Corporation Systems and methods providing lightweight runtime code generation
US7421687B1 (en) * 2003-10-08 2008-09-02 Sun Microsystems, Inc. Optimizing branch condition expressions in a JIT compiler
GB0424756D0 (en) * 2004-11-10 2004-12-08 Ibm Executing a native software routine in a virtual machine
US7530059B2 (en) * 2005-02-18 2009-05-05 International Business Machines Corporation Method for inlining native functions into compiled java code
ITRM20070273A1 (it) * 2007-05-16 2008-11-17 Micron Technology Inc Lettura di celle di memoria non volatile a livello mutiplo.
US8806457B2 (en) * 2008-12-15 2014-08-12 Apple Inc. Deferred constant pool generation
US9940147B2 (en) * 2009-08-28 2018-04-10 Adobe Systems Incorporated Systems and methods for providing information for use in a runtime computing environment
US8762972B2 (en) * 2011-02-08 2014-06-24 Nokia Corporation Methods and apparatuses for facilitating execution of applications requiring runtime compilation
US8793240B2 (en) * 2011-08-26 2014-07-29 Oracle International Corporation Generation of machine code for a database statement by specialization of interpreter code
US10037197B2 (en) * 2013-03-15 2018-07-31 Oracle International Corporation Flexible microinstruction system for constructing microprograms which execute tasks, gateways, and events of BPMN models
FR3009400B1 (fr) * 2013-07-31 2015-09-18 Oberthur Technologies Procede d'installation d'une application sur un element securise
US9158505B2 (en) 2014-01-09 2015-10-13 Microsoft Technology Licensing, Llc Specifying compiled language code in line with markup language code
US10002153B2 (en) 2015-05-14 2018-06-19 Illumon Llc Remote data object publishing/subscribing system having a multicast key-value protocol
US10198469B1 (en) 2017-08-24 2019-02-05 Deephaven Data Labs Llc Computer data system data source refreshing using an update propagation graph having a merged join listener
CN114186550B (zh) * 2021-12-10 2023-04-18 北京百度网讯科技有限公司 文本处理方法、装置、系统、设备以及存储介质

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4989132A (en) * 1988-10-24 1991-01-29 Eastman Kodak Company Object-oriented, logic, and database programming tool with garbage collection
JPH03240837A (ja) * 1990-02-19 1991-10-28 Nec Corp デバッグ情報生成装置
JPH05108372A (ja) * 1991-10-21 1993-04-30 Nec Ic Microcomput Syst Ltd コンパイラ最適化処理内容の出力方式
JPH0644082A (ja) * 1992-04-23 1994-02-18 Nec Corp 最適化テキスト作成方式
US6026485A (en) * 1996-01-24 2000-02-15 Sun Microsystems, Inc. Instruction folding for a stack-based machine
US5848274A (en) * 1996-02-29 1998-12-08 Supercede, Inc. Incremental byte code compilation system
US6063128A (en) * 1996-03-06 2000-05-16 Bentley Systems, Incorporated Object-oriented computerized modeling system
JPH09282174A (ja) * 1996-04-10 1997-10-31 Hitachi Ltd プログラム実行方法
US6151703A (en) * 1996-05-20 2000-11-21 Inprise Corporation Development system with methods for just-in-time compilation of programs
US6260078B1 (en) * 1996-07-03 2001-07-10 Sun Microsystems, Inc. Using a distributed object system to find and download java-based applications
US6021275A (en) * 1996-08-05 2000-02-01 General Magic, Inc. Object code structure and method for translation of architecture independent program implementations
US6186677B1 (en) * 1996-08-27 2001-02-13 Compuware Corporation Byte code instrumentation
US5884081A (en) * 1996-12-19 1999-03-16 International Business Machines Corp. Method and system for synchronizing code with design
US5953736A (en) * 1997-04-23 1999-09-14 Sun Microsystems, Inc. Write barrier system and method including pointer-specific instruction variant replacement mechanism
US6098089A (en) * 1997-04-23 2000-08-01 Sun Microsystems, Inc. Generation isolation system and method for garbage collection
US6009517A (en) * 1997-10-06 1999-12-28 Sun Microsystems, Inc. Mixed execution stack and exception handling
US5995754A (en) * 1997-10-06 1999-11-30 Sun Microsystems, Inc. Method and apparatus for dynamically optimizing byte-coded programs
US5970249A (en) * 1997-10-06 1999-10-19 Sun Microsystems, Inc. Method and apparatus for performing byte-code optimization during pauses
US6122638A (en) * 1997-11-26 2000-09-19 International Business Machines Corporation Object-oriented processor and method for caching intermediate data in an object-oriented processor
US6081665A (en) * 1997-12-19 2000-06-27 Newmonics Inc. Method for efficient soft real-time execution of portable byte code computer programs
US6110226A (en) * 1998-02-19 2000-08-29 Cygnus Solutions Java development environment using optimizing ahead-of-time compiler
US6161217A (en) * 1998-09-14 2000-12-12 Sun Microsystems, Inc. Accurate method for inlining virtual calls

Also Published As

Publication number Publication date
EP1145120B1 (de) 2004-06-23
DE69918334D1 (de) 2004-07-29
JP4562918B2 (ja) 2010-10-13
WO2000041075A3 (en) 2000-11-09
AU2380700A (en) 2000-07-24
JP2002534735A (ja) 2002-10-15
EP1145120A2 (de) 2001-10-17
WO2000041075A2 (en) 2000-07-13
ATE269990T1 (de) 2004-07-15
US6327702B1 (en) 2001-12-04

Similar Documents

Publication Publication Date Title
DE69918334T2 (de) Erzeugung von kompilierten programmen für interpretative laufzeitumgebungen
DE69938218T2 (de) Vorrichtung und Verfahren zum Laden eines Java Anwendungsprogramms
DE69730276T2 (de) Vorrichtung und Verfahren zur Erleichterung der Vermeidung von exzeptionellen bestimmten Zuständen während des Ablaufs eines Programmes
DE69924857T2 (de) Programm-kode-umwandlung
DE69936162T2 (de) Verfahren und Gerät für ein objektorientiertes Unterbrechungssystem
DE69835062T2 (de) Gemischter Registerstapel und Ausnahmebehandlung
DE69922015T2 (de) Verfahren und vorrichtung zum übersetzen und ausführen von arteigenem code in einer umgebung mit virtuellen maschinen
DE60035745T2 (de) Verfahren zum bei Bedarf Laden und Ausführen einer Netzwerkanwendung
DE60031370T2 (de) Tokenbasierte verknüpfung
DE69814174T2 (de) Java laufzeitsystem mit veränderter sammlung von konstanten
DE102010051477B4 (de) Verfahren in einer computerplattform sowie computerplattform zum gemeinsamen benutzen von virtuellen speicherbasierten mehrversionsdaten zwischen den verschiedenartigen prozessoren der computerplattform
DE60208710T2 (de) Plattformunabhängige im-voraus-kompilierung
DE69724322T2 (de) Verfahren und Anordnung zum frühzeitigen Einfügen von Assemblercode zwecks Optimierung
DE69909945T2 (de) Verfahren und Anordnung zur Korrelation von Profildaten dynamisch erzeugt durch ein optimiertes ausführbares Programm mit Quellcodeanweisungen
DE60021066T2 (de) Prüfung eines Softwarepakets
DE69932964T2 (de) Verfahren, System und Rechnerprogrammprodukt zur Initialisierung einer Datenstruktur beim ersten Gebrauch
DE19928980A1 (de) Codeerzeugung für einen Bytecode-Compiler
DE112012000303T5 (de) Dynamische binäre Optimierung
DE19959758A1 (de) Bestimmung der Art und der Genauigkeit von lokalen Variablen bei vorhandenen Subroutinen
DE69905776T2 (de) Sprachenverarbeitungsverfahren mit geringem Aufwand und Speicherbedarf bei der Profildatensammlung
DE19934424A1 (de) Verfahren, Vorrichtung und Computer-Programm-Produkt zur Optimierung von Registern in einem Stapel unter Verwendung eines Register-Zuordners
DE10225664A1 (de) System und Verfahren zum Prüfen von Systemabrufereignissen mit Systemabrufumhüllungen
DE3131204A1 (de) Adressumrechnungs- und generatoranordnung
EP1034475A1 (de) Verfahren zum testen von systemkomponenten eines objektorientierten programms
DE102004057490B4 (de) Vorrichtung und Verfahren zum Verarbeiten eines Programmcodes

Legal Events

Date Code Title Description
8364 No opposition during term of opposition