-
Unter Schutz gestellt werden und Gegenstand des Gebrauchsmusters sind dabei, entsprechend den Vorschriften des Gebrauchsmustergesetzes, lediglich Vorrichtungen wie in den beigefügten Schutzansprüchen definiert, jedoch keine Verfahren. Soweit nachfolgend in der Beschreibung gegebenenfalls auf Verfahren Bezug genommen wird, dienen diese Bezugnahmen lediglich der beispielhaften Erläuterung der in den beigefügten Schutzansprüchen unter Schutz gestellten Vorrichtung oder Vorrichtungen.
-
HINTERGRUND
-
Entwickler schreiben große Mengen von Code in plattformunabhängigen Programmiersprachen (z. B. Programmiersprachen, die nicht auf die Verwendung innerhalb einer spezifischen Anwendungsdomäne begrenzt sind, sondern für das Schreiben von Software in einer Vielzahl von Anwendungsdomänen verwendet werden können) wie C++, Java, usw. Manchmal sind diese plattformunabhängigen Sprachen nicht ausdrucksstark genug oder zu umständlich für eine bestimmte Problemdomäne. Ein Ansatz von Entwicklern besteht darin, diese Probleme zu umgehen oder den Aufwand zu meiden und domänenspezifische Sprachen zu verwenden (z. B. Programmiersprachen speziell für eine bestimmte Anwendungsdomäne).
-
KURZDARSTELLUNG
-
Diese Zusammenhang führt eine Auswahl an Konzepten in einer vereinfachten Form ein, um ein grundlegendes Verständnis von einigen Aspekten der vorliegenden Offenbarung. Diese Zusammenfassung ist keine umfangreiche Übersicht über die Offenbarung und zielt nicht darauf ab, Schlüssel- oder kritischen Elemente der Offenbarung festzustellen, oder den Umfang der Offenbarung abzugrenzen. Diese Zusammenfassung stellt bloß einige der Konzepte der Offenbarung dar, wie eine Einleitung zur ausführlichen Beschreibung, die unten zur Verfügung gestellt wird.
-
Die vorliegende Offenbarung betrifft Verfahren und Systeme zur Bereitstellung von Webservices an Benutzer. Insbesondere betreffen Aspekte der vorliegenden Offenbarung die Bereitstellung von semantischen Informationen über integrierte Programmiersprachen, die in diesen plattformunabhängigen Programmiersprachen enthalten sind.
-
Eine Ausführungsform der vorliegenden Offenbarung betrifft ein computerimplementiertes Verfahren Folgendes umfassend: Analyse einer plattformunabhängigen Programmiersprache in einer Quelldatei mithilfe eines Analysators plattformunabhängiger Programmierung, worin der Analysator plattformunabhängiger Programmierung eine Erweiterung zur Analyse integrierter Programmiersprachen beinhaltet; als Reaktion auf das Erkennen einer integrierten Programmiersprache in der Quelldatei durch den Analysator plattformunabhängiger Programmierung Aufruf der Erweiterung zur Analyse der integrierten Programmiersprachen; Bereitstellen von Daten über die plattformunabhängige Programmiersprache an die Erweiterung zur Analyse der integrierten Programmiersprachen; und Generieren der semantischen Informationen über die integrierte Programmiersprache und die plattformunabhängige Programmiersprache, worin Teile der Quelldatei, die sich in der integrierten Programmiersprache befinden, Teilen der Quelldatei, die sich in der plattformunabhängigen Programmiersprache befinden über die semantischen Informationen zugewiesen werden.
-
In einer anderen Ausführungsform umfasst das Verfahren des Weiteren das Hinzufügen der semantischen Informationen über die integrierte Programmiersprache und die plattformunabhängige Programmiersprache zu einem für die integrierte Programmiersprache und die plattformunabhängige Programmiersprache erstellten Modell.
-
In einer anderen Ausführungsform umfasst das Verfahren des Weiteren die Analyse eines abstrakten Syntaxbaums eines Konstrukts für das Aufrufen der Erweiterung zur Analyse der integrierten Programmiersprachen, und Bereitstellen von Daten über die plattformunabhängige Programmiersprache an die Erweiterung zur Analyse der integrierten Programmiersprachen aufgrund der Analyse des abstrakten Syntaxbaums.
-
In wieder einer anderen Ausführungsform umfasst das Verfahren des Weiteren die Verwendung von Heuristik zur Zuordnung (Mapping) der Argumente der plattformunabhängigen Programmiersprache zu anderen Stellen in einem abstrakten Syntaxbaum der plattformunabhängigen Programmiersprache und Bereitstellen von Daten über die plattformunabhängige Programmiersprache an die Erweiterung zur Analyse der integrierten Programmiersprachen aufgrund der zugeordneten Argumente.
-
In wiederum einer anderen Ausführungsform umfasst das Verfahren des Weiteren das Ermitteln – aufgrund der Daten über die plattformunabhängige Programmiersprache, die an die Erweiterung zur Analyse der integrierten Programmiersprachen bereitgestellt wurden – ob einer der Knoten von der plattformunabhängigen Programmiersprache einen eindeutigen Namen besitzt und die Adressierung des Knotens von der plattformunabhängigen Programmiersprache mithilfe des eindeutigen Namens.
-
In wieder einer anderen Ausführungsform umfasst das Verfahren des Weiteren das Hinzufügen eines Knotens zu einer Grafik durch den Analysator plattformunabhängiger Programmierung, wobei der Knoten einen nichteindeutigen Namen und einen Kantensatz zwischen dem Knoten mit dem nichteindeutigen Namen und dem Knoten mit dem eindeutigen Namen hat, und Hinzufügen, durch die Erweiterung zur Analyse der integrierten Programmiersprachen, einer Kante zu dem Knoten mit dem nichteindeutigen Namen, wobei der Knoten mit dem eindeutigen Namen mithilfe der Kante von dem Knoten mit dem nichteindeutigen Namen identifiziert wird.
-
Eine weitere Ausführungsform der vorliegenden Offenbarung betrifft ein System umfassend einen oder mehrere Prozessoren und ein nichtflüchtiges computerlesbares Medium gekoppelt mit einem oder mehreren Prozessoren mit gespeicherten Befehlen, das Operationen durchführt, wenn es von Prozessoren ausgeführt wird, Folgendes umfassend: Analyse einer plattformunabhängigen Programmiersprache in einer Quelldatei mithilfe eines Analysators plattformunabhängiger Programmierung, worin der Analysator plattformunabhängiger Programmierung eine Erweiterung zur Analyse integrierter Programmiersprachen beinhaltet; als Reaktion auf das Erkennen einer integrierten Programmiersprache in der Quelldatei durch den Analysator plattformunabhängiger Programmierung Aufruf der Erweiterung zur Analyse der integrierten Programmiersprachen; Bereitstellen von Daten über die plattformunabhängige Programmiersprache an die Erweiterung zur Analyse der integrierten Programmiersprachen; und Generieren der semantischen Informationen über die integrierte Programmiersprache und die plattformunabhängige Programmiersprache, worin Teile der Quelldatei, die sich in der integrierten Programmiersprache befinden, Teilen der Quelldatei, die sich in der plattformunabhängigen Programmiersprache befinden über die semantischen Informationen zugewiesen werden.
-
In einer anderen Ausführungsform werden der eine oder die mehreren Prozessoren des Systems dazu veranlasst, weitere Operationen durchzuführen umfassend das Hinzufügen der semantischen Informationen über die integrierte Programmiersprache und die plattformunabhängige Programmiersprache zu einem für die integrierte Programmiersprache und die plattformunabhängige Programmiersprache erstellten Modell.
-
In einer anderen Ausführungsform werden der eine oder die mehreren Prozessoren des Systems dazu veranlasst, weitere Operationen durchzuführen umfassend die Analyse eines abstrakten Syntaxbaums eines Konstrukts für das Aufrufen der Erweiterung zur Analyse der integrierten Programmiersprachen, und Bereitstellen von Daten über die plattformunabhängige Programmiersprache an die Erweiterung zur Analyse der integrierten Programmiersprachen aufgrund der Analyse des abstrakten Syntaxbaums.
-
In wieder einer anderen Ausführungsform werden der eine oder die mehreren Prozessoren des System dazu veranlasst, weitere Operationen durchzuführen umfassend: die Verwendung von Heuristik zur Zuordnung (Mapping) der Argumente der plattformunabhängigen Programmiersprache zu anderen Stellen in einem abstrakten Syntaxbaum der plattformunabhängigen Programmiersprache und Bereitstellen von Daten über die plattformunabhängige Programmiersprache an die Erweiterung zur Analyse der integrierten Programmiersprachen aufgrund der zugeordneten Argumente.
-
In wiederum einer anderen Ausführungsform werden der eine oder die mehreren Prozessoren des Systems veranlasst, weitere Operationen durchzuführen das Folgende umfassend: Durchführen einer Kontrollflussanalyse für die plattformunabhängige Programmiersprache; und Bereitstellen von Daten über die plattformunabhängige Programmiersprache an die Erweiterung zur Analyse der integrierten Programmiersprachen aufgrund der Kontrollflussanalyse.
-
In einer anderen Ausführungsform werden der eine oder die mehreren Prozessoren des Systems veranlasst, weitere Operationen durchzuführen das Folgende umfassend: Durchführen einer dynamischen Programmanalyse für die plattformunabhängige Programmiersprache; und Bereitstellen von Daten über die plattformunabhängige Programmiersprache an die Erweiterung zur Analyse der integrierten Programmiersprachen aufgrund der dynamischen Programmanalyse.
-
In wieder einer anderen Ausführungsform werden der eine oder die mehreren Prozessoren des Systems dazu veranlasst, weitere Operationen durchzuführen Folgendes umfassend: Erkennen des Verhältnisses zwischen der plattformunabhängigen Programmiersprache und der integrierten Programmiersprache mithilfe maschinellen Lernens; und Bereitstellen von Daten über die plattformunabhängige Programmiersprache an die Erweiterung zur Analyse der integrierten Programmiersprachen aufgrund des vom maschinellen Lernen bestimmten Verhältnisses.
-
In wiederum einer anderen Ausführungsform werden der eine oder die mehreren Prozessoren des Systems veranlasst, weitere Operationen durchzuführen das Folgende umfassend: das Ermitteln – aufgrund der Daten über die plattformunabhängige Programmiersprache, die an die Erweiterung zur Analyse der integrierten Programmiersprachen bereitgestellt wurden – ob einer der Knoten von der plattformunabhängigen Programmiersprache einen eindeutigen Namen besitzt und die Adressierung des Knotens von der plattformunabhängigen Programmiersprache mithilfe des eindeutigen Namens.
-
In wiederum einer anderen Ausführungsform werden der eine oder die mehreren Prozessoren des Systems dazu veranlasst, weitere Operationen durchzuführen Folgendes umfassend: das Hinzufügen eines Knotens zu einer Grafik durch den Analysator plattformunabhängiger Programmierung, wobei der Knoten einen nichteindeutigen Namen und einen Kantensatz zwischen dem Knoten mit dem nichteindeutigen Namen und dem Knoten mit dem eindeutigen Namen hat, und Hinzufügen, durch die Erweiterung zur Analyse der integrierten Programmiersprachen, einer Kante zu dem Knoten mit dem nichteindeutigen Namen, wobei der Knoten mit dem eindeutigen Namen mithilfe der Kanten von dem Knoten mit dem nichteindeutigen Namen identifiziert wird.
-
Eine weitere Ausführungsform der vorliegenden Offenbarung betrifft ein System umfassend einen oder mehrere Prozessoren und ein nichtflüchtiges computerlesbares Medium gekoppelt mit einem oder mehreren Prozessoren mit gespeicherten Befehlen, das Operationen durchführt, wenn es von Prozessoren ausgeführt wird, Folgendes umfassend: Analyse einer plattformunabhängigen Programmiersprache in einer Quelldatei mithilfe eines Analysators plattformunabhängiger Programmierung, worin der Analysator plattformunabhängiger Programmierung eine Erweiterung zur Analyse integrierter Programmiersprachen beinhaltet; als Reaktion auf das Erkennen einer integrierten Programmiersprache in der Quelldatei durch den Analysator plattformunabhängiger Programmierung Aufruf der Erweiterung zur Analyse der integrierten Programmiersprachen; Bereitstellen von Daten über die plattformunabhängige Programmiersprache an die Erweiterung zur Analyse der integrierten Programmiersprachen; und Generieren der semantischen Informationen über die integrierte Programmiersprache und die plattformunabhängige Programmiersprache, worin Teile der Quelldatei, die sich in der integrierten Programmiersprache befinden, Teilen der Quelldatei, die sich in der plattformunabhängigen Programmiersprache befinden über die semantischen Informationen zugewiesen werden.
-
In einer oder mehreren anderen Ausführungsformen können die hier beschriebenen Verfahren und Systeme optional eine oder mehrere der folgenden zusätzlichen Merkmale beinhalten: die semantischen Informationen über die integrierte Programmiersprache und die plattformunabhängige Programmiersprache sind in einem Graph zum Modell als Knoten und Kanten hinzugefügt; die Daten über die plattformunabhängige Programmiersprache, die der Erweiterung zur Analyse der integrierten Programmiersprachen bereitgestellt wurden, beinhalten Informationen, die ein Konstrukt der integrierten Programmiersprache Konstrukten von der plattformunabhängigen Programmiersprache zuweisen, die für den Aufruf der Erweiterungsinstanz zur Analyse der integrierten Programmiersprachen relevant sind; die Konstrukte von der plattformunabhängigen Programmiersprache beinhalten eine oder mehrere der Folgenden: Argumente, Instanzen, auf denen die integrierte Programmiersprache aufgerufen wird, und den Umfang der Instanzen, auf denen die integrierte Programmiersprache aufgerufen wird; die Daten über die plattformunabhängige Programmiersprache, die der Erweiterung zur Analyse der integrierten Programmiersprachen bereitgestellt werden, beruhen auf der für die plattformunabhängige Programmiersprache durchgeführte Kontrollflussanalyse; die Daten über die plattformunabhängige Programmiersprache, die der Erweiterung zur Analyse der integrierten Programmiersprachen bereitgestellt werden, beruhen auf der der dynamischen Programmanalyse, die für die plattformunabhängige Programmiersprache durchgeführt wird; die Daten über die plattformunabhängige Programmiersprache, die der Erweiterung zur Analyse der integrierten Programmiersprachen bereitgestellt werden, beruhen auf maschinellem Lernen, das zur Bestimmung des Verhältnisses zwischen der plattformunabhängigen Programmiersprache und der integrierten Programmiersprache verwendet wird; und/oder die Knoten im Graph beinhalten Knoten von der integrierten Programmiersprache und Knoten von der plattformunabhängigen Programmiersprache, und worin sich die Kanten im Graph zwischen den Knoten von der integrierten Programmiersprache und den Knoten von der plattformunabhängigen Programmiersprache kreuzen.
-
Die Ausführungsformen einiger oder aller der hier offenbarten Prozessoren und Speichersysteme können auch so konfiguriert werden, dass einige oder alle Ausführungsformen des oben offenbarten Verfahrens durchgeführt werden. Ausführungsformen von einigen oder allen oben offengelegten Verfahren, können auch als Anweisungen dargestellt werden, die auf den vorübergehenden oder nicht-vorübergehenden, prozessorlesbaren Speichermedien enthalten sind, wie optische oder magnetische Speicher oder als ein fortgepflanztes Signal, das einem Prozessor oder Datenverarbeitungsgerät über ein Kommunikationsnetzwerk wie z. B. eine Internet- oder Telefonverbindung bereitgestellt wird.
-
Weiterhin wird der Umfang der Anwendbarkeit des Verfahrens und der Systeme der vorliegenden Offenbarung aus der nachfolgenden detaillierten Beschreibung offenbar werden. Jedoch sollte klargestellt werden, dass die ausführliche Beschreibung und spezifischen Beispiele nur durch Figuren bei der Angabe von Ausführungsformen der Verfahren und der Systeme gegeben werden, da verschiedene Änderungen und Modifikationen innerhalb des Geistes und des Umfangs der hierin offengelegten Konzepte für diejenigen erkennbar werden, die in der Kunst der detaillierten Beschreibung erfahren sind.
-
KURZBESCHREIBUNG DER ZEICHNUNGEN
-
Diese und andere Objekte, Merkmale und Eigenschaften der vorliegenden Offenbarung werden Fachleuten auf dem Gebiet aus einer Studie der folgenden detaillierten Beschreibung zu den Patentansprüchen und -zeichnungen offenbar, die alle Teil dieser Spezifikation sind. Die Zeichnungen umfassen Folgendes:
-
1 ist ein Blockdiagramm, das ein Beispielsystem für die Erweiterung der semantischen Informationen darstellt, die für Quellcode generiert werden und die Informationen über integrierte Programmiersprachen beinhalten, die im Quellcode enthalten sind, gemäß einer oder mehrerer der hierin beschriebenen Ausführungsformen.
-
2 ist ein Blockdiagramm, das die Knoten und Kanten eines Beispiels eines bestehenden semantischen Graphen darstellt.
-
3 ist ein Blockdiagramm, das die Beispielknoten und -kanten in einem erweiterten semantischen Graph gemäß einer oder mehrerer hierin beschriebener Ausführungsformen darstellt.
-
4 ist ein Blockdiagramm, das ein Beispielverfahren für die Erweiterung der semantischen Informationen darstellt, die für Quellcode generiert werden und die Informationen über integrierte Programmiersprachen beinhalten, die im Quellcode enthalten sind, gemäß einer oder mehrerer der hierin beschriebenen Ausführungsformen.
-
5 ist ein Blockdiagramm, das ein Beispielcomputergerät für die Erweiterung der semantischen Informationen darstellt, die für Quellcode generiert werden, die Informationen über integrierte Programmiersprachen beinhalten, die im Quellcode enthalten sind, gemäß einer oder mehrerer der hierin beschriebenen Ausführungsformen.
-
Die hierin bereitgestellten Titel dienen lediglich der Übersichtlichkeit und haben nicht notwendigerweise einen Einfluss auf den Umfang oder die Bedeutung des Patentanspruchs der vorliegenden Offenbarung.
-
In den Zeichnungen werden aus Gründen der Verständlichkeit und Übersichtlichkeit dieselben Bezugszeichen und Abkürzungen verwendet, um Elemente oder Handlungen mit derselben oder ähnlicher Struktur oder Funktionalität zu kennzeichnen. Die Zeichnungen werden im Detail im Verlauf der folgenden detaillierten Beschreibung beschrieben.
-
DETAILLIERTE BESCHREIBUNG
-
Die folgende Beschreibung enthält verschiedene Beispiele und Ausführungsformen der Verfahren und Systeme der vorliegenden Offenbarung. Die folgende Beschreibung bietet spezifische Details für ein vollständiges Verständnis und ermöglicht die Beschreibung dieser Beispiele. Jemand, der in der entsprechenden Kunst erfahren ist, wird jedoch verstehen, dass ein oder mehrere hierin beschriebenen Ausführungsformen ohne viele dieser Details angewandt werden können. Ebenso wird jemand, der in der entsprechenden Kunst erfahren ist, auch verstehen, dass ein oder mehrere Ausführungsformen der vorliegenden Offenbarung andere Eigenschaften umfassen können, die nicht im Detail hierin beschrieben werden. Zudem können einige wohlbekannte Strukturen oder Funktionen nachfolgend nicht im Detail gezeigt oder beschrieben werden, um in der entsprechenden Beschreibung nicht für eine unnötige Verwirrung zu sorgen.
-
Nach vorhandenen Ansätzen werden längere Codeausschnitte vom Benutzer normalerweise in Textform nachgesehen und überprüft. Manche integrierte Entwicklungsumgebungen (oder interaktive Entwicklungsumgebungen) (IDEs) erlauben es dem Benutzer, aufgrund der Kenntnis der Codesemantik durch Code zu navigieren. Dieser Ansatz ist jedoch nicht für alle Code-Datenbanken einfach skalierbar (wie für große Code-Datenbanken), die manche Einheiten pflegen. Manche Code-Datenbanken können z. B. eine Größe erreichen, dass die Verwendung einer IDE zur Suche von Code unpraktisch (oder sogar unmöglich) ist. Ohne den hierin beschriebenen Dienst kann eine IDE ein Client des hierin beschriebenen Systems/Dienstes sein.
-
Entsprechend sind die Verfahren und Systeme der vorliegenden Offenbarung dazu ausgelegt, diese großen Code-Datenbanken in Textform verständlich zu machen, damit sie leichter und effizienter navigierbar sind. Gemäß einer oder mehrerer der hierin beschriebenen Ausführungsformen kann der Benutzer z. B. zur Position im Code springen, an der die Methode definiert ist, wobei ein Benutzer sieht, dass eine Methode aufgerufen wird. In ähnlicher Weise können diese Informationen dem Benutzer bereitgestellt werden, ohne dass dieser die gesamte Code-Datenbank durchsuchen muss, wenn der Benutzer alle Positionen innerhalb des Codes sehen möchte, in denen eine bestimmte Methode aufgerufen wird.
-
Wie oben beschrieben verwenden Entwickler häufig in die Programmiersprachen integrierte plattformunabhängige Programmiersprachen für bestimmte domänenspezifischen Probleme, da plattformunabhängige Programmiersprachen (wie C++, Java usw.) manchmal nicht ausdrucksstark genug oder zu umständlich sind. Entwickler können z. B. integrierte domänenspezifische Sprachen (auch EDSL genannt) verwenden, um die oben genannten potenziellen Probleme bezüglich der plattformunabhängigen Sprachen zu vermeiden. Im Fall von EDSL wird auf die domänenspezifische Sprache als Bibliothek von der plattformunabhängigen Programmiersprache zugegriffen (in noch spezifischeren Fällen kann die plattformunabhängige Programmiersprache auch eine spezielle Syntax bereitstellen, um zur integrierten Sprache zu wechseln). Ein Beispiel dieser EDSL sind Formatzeichenketten, bei denen mithilfe spezieller Markierungen und einem Satz von Argumenten längere Zeichenketten gebildet werden, anstatt dass der Entwickler Verkettungen verwendet, um die längere Zeichenkette zu bilden. Zu den Vorteilen der Verwendung dieses Musters gehören Lesbarkeit, Leistungsoptimierung, bessere Lokalisierbarkeit und die Fähigkeit, eine statische Analyse der integrierten Sprache durchzuführen. Andere Beispiele integrierter Programmiersprachen beinhalten C# LINQ, reguläre Ausdrücke usw.
-
Viele bestehenden Analysen zum Aufrufen semantischer Informationen über große Code-Datenbanken wurden jedoch für plattformunabhängige Programmiersprachen geschrieben und nicht für integrierte Programmiersprachen. In dem Moment, in dem ein Benutzer von einer plattformunabhängigen Programmiersprache zu einer der integrierten Programmiersprachen wechselt, die häufig als Zeichenketten kodiert sind, stellen die Analysen von daher nicht mehr die gewünschten semantischen Informationen über den Code bereit.
-
Angesichts des vorstehenden Problems sind die hierin beschriebenen Verfahren und Systeme dazu ausgelegt, einem Benutzer (z. B. einem Entwickler) dabei zu helfen, zu erkennen, wann Code von einer plattformunabhängigen Programmiersprache mit einer integrierten Programmiersprache interagiert, dem Benutzer verständlich zu machen, wie die Grenze zwischen den Sprachen überschritten wird und den Code so darzustellen, dass der Benutzer ihn leichter verstehen kann, wenn er ihn ansieht.
-
Insbesondere betreffen Ausführungsformen der vorliegenden Offenbarung die Verfahren und System zur Erweiterung der semantischen Informationen, die für Quellcode generiert werden und die Informationen über integrierte Programmiersprachen beinhalten, die im Quellcode enthalten sind.
-
IDEs beinhalten normalerweise verschiedene Funktionalitäten (z. B. zur-Definitionspringen, Verweise suchen, betreffenden Code markieren usw.), die es Entwicklern erlauben, zu navigieren und den Quellcode zu verstehen. Diese Funktionalitäten werden häufig durch Betreiben der Compilers der plattformunabhängigen Programmiersprache in einem Spezialmodus implementiert, wobei die Informationen durch die IDE vom Compiler extrahiert werden können. Da der Compiler lediglich die plattformunabhängige Programmiersprache kennt, ist dieser nicht in der Lage, einen Zusammenhang zwischen der plattformunabhängigen Programmiersprache und jeglicher im Code verwendeter integrierter Programmiersprache herzustellen. Im Fall des Zeichenkettenformatierers sind die Funktionen zur-Definitionspringen, Verweise suchen oder Code markieren zwischen der Formatierermarkierung und den Variablen von der plattformunabhängigen Programmiersprache nicht möglich.
-
Der folgende Fall soll als Beispiel dienen:
String what = ”demoing”;
String longString = String.format („Lange Zeichenkette für %s zum Zweck des vorliegenden Beispiels”, what);
-
Im obigen Beispiel hätte ein Entwickler die folgenden Optionen: (1) auf jump-to-def auf dem 'what'-Argument zum Aufruf der Methode String.format klicken und zur Variablendeklaration 'what' springen; (2) auf der Variablendeklaration auf dem 'what'-String nach Querverweisen und nach dem Argument zu String.format suchen; oder (3) den Mauszeiger über eine der Anwendungen/Deklarationen von 'what' bewegen und die anderen zugehörigen Positionen im Code anzeigen.
-
Ohne die Verfahren und Systeme der vorliegenden Offenbarung wäre der Entwickler jedoch nicht in der Lage, die Anwendung und/oder das Verhältnis von '%s' im Formatstring anzuzeigen.
-
Während mit einigen bestehenden statischen Analysen wie der Cross-Site-Scripting-Analyse und der Analyse von SQL-Injection-Angriffen z. B. versucht wird, die Lücke zwischen domänenspezifischen Sprachen und plattformunabhängigen Sprachen zu füllen, fehlt diesen bestehenden Ansätzen die semantische Navigationsfunktionalität der Verfahren und Systeme der vorliegenden Offenbarung.
-
Wie hier noch weiter beschrieben werden wird nutzen die Verfahren und Systeme der vorliegenden Offenbarung ein semantisches Modell mit Informationen, die es einem Entwickler erlauben, zwischen EDSL-Konstrukten und den Konstrukten der plattformunabhängigen Sprache zu navigieren, die die EDSL-Instanz umgibt.
-
1 stellt ein Beispielsystem 100 zur Erweiterung semantischer Informationen dar, die für Quellcode generiert werden und die Informationen über integrierte Programmiersprachen beinhalten, die im Quellcode enthalten sind. Gemäß mindestens einer Ausführungsform können die EDSL-Konstrukte, die Konstrukte in der plattformunabhängigen Sprache, die die EDSL-Instanz umgeben und das Verhältnis zwischen ihnen als semantischer Graph 140 bestehend aus Knoten 150 und Kanten 160 modelliert werden. Die Knoten 150 in Graph 140 können z. B. als eine besondere Art von Quellkonstrukt (z. B. als ein Typ, eine Methode, eine Variable, ein Literal usw.) repräsentiert werden und die Kanten 160 können das Verhältnis zwischen diesen Knoten 150 (z. B. ist ein Stück Code ein Methodenaufruf von einer Methode zur anderen, eine bestimmte Klasse implementiert eine bestimmte Schnittstelle usw.) modellieren.
-
Gemäß mindestens einer Ausführungsform kann der semantische Graph 140 durch Bereitstellung von Werkzeugen für den Analysator 120 erstellt werden, der die semantischen Informationen aus dem Quellcode 110 extrahiert. Der Analysator 120 kann z. B. so konfiguriert werden, dass die semantischen Informationen extrahiert werden, indem der Compiler für eine bestimmte beteiligte Programmiersprache ausgeführt wird und die internen Details vom Compiler extrahiert werden, um die Teile (z. B. die Knoten 150 und Kanten 160) des Graphen 140 zu erstellen.
-
Gemäß einer oder mehrerer Ausführungsformen der vorliegenden Offenbarung kann der Graph 140, der für den Quellcode 110 erstellt (z. B. konstruiert, generiert usw.) werden kann, auf Informationen des Compilers 115 (z. B. dem Parser, dem abstrakten Syntaxbaum (AST), der Symboltabelle usw. (nicht in 1 dargestellt)) basieren. Der Graph 140 kann aus Knoten 150 und Kanten 160 bestehen, wobei sich die Knoten 150 auf Stücke des Quellcodes 110 (z. B. auf einen Methodencode, eine Methodendefinition und ähnliches) beziehen können und die Kanten 160 das Verhältnis zwischen den Stücken des Quellcodes 110 bezeichnen. Der Graph 140, der für Quellcode 110 erstellt werden kann, ist nicht sprachenspezifisch, sondern ist in der Lage, alle möglichen plattformunabhängigen Programmiersprachen zu modellieren, die in dem Code 110 verwendet werden.
-
Durch die Verfahren und Systeme der vorliegenden Offenbarung wird der Graph 140 nicht nur auf Informationen über plattformunabhängige Programmiersprachen erweitert, sondern auch auf Informationen über verschiedene integrierte Programmiersprachen (z. B. domänenspezifische Programmiersprachen), die im Quellcode 110 vorkommen können. Der Graph 140 kann z. B. erweitert werden, indem Kanten 160 (z. B. Verhältnisse) zwischen den Stücken des Codes 110 (z. B. Knoten 150) hinzugefügt werden, die in einer integrierten Programmiersprache sind, und den Stücken des Codes 110 (z. B. Knoten 150), die in einer plattformunabhängigen Programmiersprache sind. Durch Hinzufügen der spezifischen Knoten 150 für die integrierten Sprachstücke des Codes 110 und Hinzufügen von Kanten 160 für das Verhältnis zwischen diesen integrierten Sprachstücken und den plattformunabhängigen Sprachstücken des Codes 110 können, wenn der Compiler 115 am Quellcode 110 arbeitet, diese integrierten Sprachstücke erkannt und spezieller Code ausgeführt werden, sodass die Knoten 150 und Kanten 160 an den Graphen 140 abgegeben werden.
-
Obwohl die Erstellung der Knoten 150 und Kanten 160 für integrierte Programmiersprachen im Zusammenhang mit String-Formatierern beschrieben wird, sollte darauf hingewiesen werden, dass diese Knoten und Kanten auch für jegliche Mischung aus anderen integrierten Programmiersprachen erstellt werden können, die im Quellcode 110 verwendet werden können. Für jede dieser anderen integrierten Programmiersprachen kann entweder eine sehr spezifische Art von Knoten und Kanten zum Zweck der Modellierung erstellt werden (z. B. in einem semantischen Graph wie dem Graphen 140) oder es kann eine eher allgemeine oder generische Kombination von Knoten und Kanten zum Modellieren erstellt werden. Die Entscheidung, eine eher sehr spezifische Art von Knoten und Kanten für eine gegebene integrierte Sprache zu erstellen oder eine eher allgemeine Art von Knoten und Kanten, kann darauf beruhen, ob der Benutzer die Möglichkeit besitzen möchte, Knoten und Kanten für andere integrierte Sprachen zu abstrahieren.
-
Um Daten über EDSL in der plattformunabhängigen Sprache abzurufen, für die der Analysator 120 geschrieben ist, kann eine EDSL-Erweiterung 130 zum Analysator 120 hinzugefügt werden. Gemäß mindestens einer Ausführungsform kann die EDSL-Erweiterung 130 fest in diese Werkzeuge eingebaut sein, während gemäß einer oder mehrerer anderer Ausführungsformen die EDSL-Erweiterung 130 über eine Plug-in-Schicht eingebaut oder als völlig separater Prozess oder Dienst ausgeführt werden kann.
-
Die EDSL-Erweiterung 130 wirkt als Analysator der im Quellcode 110 enthaltenen EDSL insofern, als die EDSL-Erweiterung 130 die Semantik dieser bestimmten Sprache versteht. Die EDSL-Erweiterung 130 kann diese Semantik mithilfe von etablierten Kanälen (die auch für den Analysator plattformunabhängiger Sprachen 120 verwendet werden können, zu der die Erweiterung 130 gehört) an das allgemeine Framework senden (z. B. generieren, produzieren, ausgeben, bereitstellen usw.), um semantische Informationen bereitzustellen. Abhängig von der bestimmten Implementierung können die von der Erweiterung 130 erstellten semantischen Daten direkt an den Benutzer ausgegeben, weiter verarbeitet oder (z. B. auf einer Diskette) gespeichert werden.
-
Die EDSL-Erweiterung 130 kann semantische Informationen über die EDSL entweder markiert mit normalen Arten (z. B. knotenartige VARIABLE, kantenartige REFERENCE/REFERENCED_BY usw.) senden oder die Erweiterung 130 könnte so konfiguriert werden, dass eindeutige Arten dieser Werkzeuge gesendet werden, sodass die Werkzeuge, die die semantischen Informationen abrufen, spezielle Maßnahmen gegen EDSL-Konstrukte ergreifen können. Einige nichtbegrenzende Beispiele dieser eindeutigen Arten beinhalten Knotenart STRING_FORMAT_VARIABLE (im Beispiel eines semantischen Graphen 300 in 3 mit 310 gekennzeichnet, wie in größeren Einzelheiten nachstehend beschrieben), Kantenart STRING_FORMAT_VARIABLE_REFERENCE/REFERENCED_BY_STRING_FORMAT_VARIABLE (im Beispiel eines semantischen Graphen 300 in 3 mit 320 gekennzeichnet) usw.
-
Wie oben beschrieben, können die Knoten umfassend den semantischen Graphen der vorliegenden Offenbarung (z. B. die Knoten 150 im Graphen 140 des Beispielsystems 100 dargestellt in 1) Positionen oder Abstraktionen im Quellcode repräsentieren, während die Kanten des Graphen (z. B. die Kanten 160 im Graphen 140 des Beispielsystems 100 dargestellt in 1) das Verhältnis zwischen diesen Positionen/Abstraktionen repräsentieren können.
-
2 stellt ein Beispiel eines bestehenden semantischen Graphen 200 dar, wobei alle Knoten und Kanten sich auf Positionen in der plattformunabhängigen Programmiersprache beziehen.
-
3 stellt ein Beispiel eines semantischen Graphen 300 gemäß einer oder mehrerer Ausführungsformen der vorliegenden Offenbarung dar. Im Vergleich zu bestehenden semantischen Graphen (z. B. dem Graphen 200 dargestellt in 2) besitzt der semantische Beispielgraph 300 zusätzliche Knoten und Kanten, die Positionen in der EDSL repräsentieren, sowie zusätzliche Kanten als Brücke zwischen der EDSL und der plattformunabhängigen Programmiersprache.
-
Wenn der Analysator 120 der plattformunabhängigen Sprache die EDSL-Erweiterung 130 aufruft, kann der Analysator 120 der plattformunabhängigen Sprache der Erweiterung 130 genügend Informationen bereitstellen, um das EDSL-Konstrukt auf die Konstrukte von der plattformunabhängigen Sprache zurückzuführen, die für die EDSL-Instanz relevant sind. Einige nichtlimitierende und nichterschöpfende Beispiele dieser Konstrukte von der plattformunabhängigen Sprache sind:
Argumente: Literale, Ausdrücke, Variablen;
Instanz, auf der die EDSL-Methode aufgerufen wird; und
Umfang, in dem der Aufruf erfolgt.
-
Die EDSL-Erweiterung 130 muss über die plattformunabhängige Sprache informiert werden, sodass die Erweiterung 130 in der Lage ist, die Lücke zwischen der plattformunabhängigen Sprache und den integrierten Sprachen zu füllen und die Kanten 160 zwischen den Knoten 150 im Graphen 140 zu senden. Je mehr Daten der Analysator 120 der plattformunabhängigen Sprache der Erweiterung 130 über die plattformunabhängige Sprache bereitstellen kann, desto besser ist die Erweiterung 130 in der Lage, das unterschiedliche Verhältnis zwischen Stücken des Codes 110 (z. B. Knoten 150) zu bestimmten, die sich in der plattformunabhängigen Sprache befinden und den Stücken des Codes 110 (z. B., Knoten 150), die sich in der integrierten Sprache befinden und entsprechend Kanten 160 zu senden.
-
Gemäß einer oder mehrerer hierin beschriebener Ausführungsformen können Informationen über plattformunabhängige Programmiersprachen der EDSL-Erweiterung 130 auf viele verschiedene Arten bereitgestellt werden.
-
Gemäß einer oder mehrerer Ausführungsformen der vorliegenden Offenbarung kann der Analysator 120 der plattformunabhängigen Sprache irgendeine einer Vielzahl von Strategien oder Prozessen verwenden, um der EDSL-Erweiterung 130 Daten über plattformunabhängige Programmiersprachen bereitzustellen. Der Analysator 120 kann die Daten an die Erweiterung 130 z. B. bereitstellen durch: (i) Analyse des abstrakten Syntaxbaums (AST) der Konstrukt-Aufrufs der EDSL; (ii) Verwendung von Heuristik zur Zuordnung (Mapping) der Argumente zu anderen Positionen im AST der plattformunabhängigen Sprache; (iii) Verwendung von Kontrollfluss-/Datenflussanalyse (z. B. um die Reihenfolge zu bestimmten, in der einzelne Aussagen, Befehle, Funktionsaufrufe usw. eines Programms ausgeführt oder ausgewertet werden); (iv) Verwendung der Ergebnisse früherer dynamischer Programmanalysen (z. B. durchgeführt durch Ausführung von Programmen auf einem echten oder virtuellen Prozessor); und/oder (v) Verwendung von Technologien wie Maschinenlernen, um das Verhältnis zwischen den beiden Sprachen zu bestimmen.
-
Gemäß einer oder mehrerer Ausführungsformen kann der Analysator 120 die Daten über die plattformunabhängige Programmiersprache verwenden, um Kanten zu senden, die sich zwischen Knoten von der EDSL und Knoten von der plattformunabhängigen Sprache kreuzen (z. B. die Kanten 160, die sich zwischen den Knoten 150 im Graphen 140 im Beispielsystem 100 dargestellt in 1 kreuzen).
-
Da der Analysator 120 als eine Erweiterung ausgeführt wird, sollte der Analysator 120 normalerweise die Adresse (z. B. den Namen) des Knoten von der plattformunabhängigen Programmiersprache kennen. In Situationen, in denen der Analysator 120 jedoch nicht fähig ist, Zugang zu den Datenstrukturen der plattformunabhängigen Programmiersprache zu erhalten (z. B. bei Ausführung in einem anderen Prozess oder da die Programmierschnittstelle API dies nicht erlaubt), können die folgenden Beispielalternativen verwendet werden, um die Knoten von der plattformunabhängigen Programmiersprache zu adressieren:
- (1) Der Analysator 120 der plattformunabhängigen Sprache kann so konfiguriert sein, dass genügend Daten bereitgestellt werden, um den Knoten eindeutig zu benennen; oder
- (2) Der EDSL-Analysator kann so konfiguriert sein, dass die Benennung des Knoten aufseiten der plattformunabhängigen Sprache weniger präzise ist (was immer noch zu nützlichen Daten führt, nur ggf. etwas weniger präzise). Angenommen, es gibt einen Knoten in der plattformunabhängigen Programmierung mit einem eindeutigen Namen, aber die Erweiterung kennt diesen eindeutigen Namen nicht. Gemäß einer oder mehrerer hierin beschriebener Ausführungsformen kann der Analysator der plattformunabhängigen Sprache (z. B. Analysator 120 der plattformunabhängigen Sprache) einen zusätzlichen Knoten mit einem nichteindeutigen Namen senden (da der Namen nicht eindeutig ist, dann er mehrmals gesendet werden) und einen Kantensatz zwischen den Knoten mit den eindeutigen Namen und den nichteindeutigen Name, (z. B. HAS_PARTIAL_NAME/PARTIAL_NAME_OF). Die Erweiterung kann dann eine Kante zu diesem nichteindeutigen Knoten senden. Der Benutzer des Graphen kann den Satz von Knoten mit den eindeutigen Namen auflösen, indem er die Kanten vom nichteindeutigen Knoten aufsucht.
-
Nachdem der Analysator 120 der plattformunabhängigen Sprache und die EDSL-Erweiterung 130 ihre Operationen abgeschlossen haben, können die Daten wie jeder andere Teil des Index aufgebaut sein und die restlichen Werkzeuge können wie normal eingebaut werden. Gemäß mindestens einer Ausführungsform der vorliegenden Offenbarung, wobei die Werkzeuge die Verfügbarkeit von Informationen über die Verbindung zwischen der EDSL- und der plattformunabhängigen Sprache nutzen möchten (z. B. in Fällen, in denen speziell gekennzeichnete Knoten und Kanten über die EDSL-Erweiterung gesendet wurden (z. B. über die EDSL-Erweiterung 130 im Beispielsystem 100 dargestellt in 1)), gibt es jedoch zahlreiche Wege, in denen der Rest der Werkzeuge davon profitieren könnte. Eine zusätzliche Verarbeitung kann z. B. beim Aufbau der Indizierung erfolgen, dem Benutzer können über eine Benutzerschnittstelle spezielle Anzeigen bereitgestellt werden usw.
-
Es ist anzumerken, dass eine oder mehrere Ausführungsformen der vorliegenden Offenbarung eine Programmierschnittstelle (API) beinhalten können oder eine solche im Zusammenhang damit implementiert werden kann, die dem Benutzer erlaubt, die mithilfe der hierin beschriebenen Verfahren und Systeme erfasste Daten abzurufen. Ein Webservice kann z. B. einem Benutzer den Zugang (dabei kann es sich um direkten oder sofortigen Zugang handeln) zu den von einem oder mehreren Compiler gesammelten Daten bereitstellen, die so konfiguriert sind, dass sie die hierin beschriebenen Verfahren ausführen. Im Einklang mit einer oder mehreren Ausführungsformen kann ein Benutzer ein Tool (z. B. einen Webbrowser) verwenden, das ihm erlaubt, seinen Quellcode zusammen mit Links zu sehen, die mit einem oder mehreren Servern interagieren, auf denen die hier beschriebenen Verfahren und Systeme implementiert werden können.
-
Es ist ebenso impliziert, dass die aufgrund der hierin beschriebenen Verfahren und Systeme erstellten Daten dem Benutzer auf vielfache Weise bereitgestellt werden kann. Im Einklang mit mindestens einer Ausführungsform können die Daten auf einem Benutzerschnittstellen-Bildschirm angezeigt werden, auf den der Benutzer zugreifen kann, wo die Daten auf diesem Bildschirm hervorgehoben werden können, um sie leichter zu erkennen und zu interpretieren. Im Einklang mit einer oder mehreren weiteren Ausführungsformen können die Daten dem Benutzer über eine Befehlszeile zur Verfügung gestellt werden, oder durch eine interaktive Entwicklungsumgebung (IDE), oder durch andere zur Verfügung stehende Methoden.
-
4 stellt einen Beispielprozess zur Erweiterung semantischer Informationen dar, die für Quellcode generiert werden und die Informationen über integrierte Programmiersprachen beinhalten, die im Quellcode enthalten sind. Gemäß einer oder mehrerer hierin beschriebener Ausführungsformen kann der Beispielprozess 400 über ein System ausgeführt werden, dass dem oben beschriebenen System 100 ähnlich ist und dargestellt ist in 1.
-
In Block 405 kann die plattformunabhängige Programmiersprache in einer Quelldatei mithilfe eines Analysators der plattformunabhängigen Programmierung (z. B. die plattformunabhängige Programmiersprache in Quelldatei 110 kann mithilfe des Analysators 120 der plattformunabhängigen Sprache im Beispielsystem 100 dargestellt in 1 analysiert werden), wobei der Analysator der plattformunabhängigen Programmierung eine Erweiterung zur Analyse der integrierten Programmiersprachen beinhaltet (z. B. die EDSL-Erweiterung 130 im Beispielsystem 100 dargestellt in 1).
-
In Block 410 kann, als Reaktion auf das Erkennen einer integrierte Programmiersprache in der Quelldatei, die Erweiterung zur Analyse integrierter Programmiersprachen (das Teil des Analysators der plattformunabhängigen Programmierung ist) aufgerufen werden.
-
In Block 415 können Daten über die plattformunabhängige Programmiersprache, die in Block 405 analysiert wurden (z. B. durch den Analysator plattformunabhängiger Programmierung) an die Erweiterung zur Analyse der integrierten Programmiersprachen bereitgestellt werden. Gemäß mindestens einer Ausführungsform der vorliegenden Offenbarung können die Daten über die plattformunabhängige Programmiersprache, die der Erweiterung zur Analyse der integrierten Programmiersprachen (in Block 415) bereitgestellt wurden, Informationen beinhalten, die ein Konstrukt der integrierten Programmiersprache den Konstrukten von der plattformunabhängigen Programmiersprache zuweisen, die für diese Instanz (z. B. bei Block 410) der Erweiterung zur Analyse der integrierten Programmiersprache relevant sind. Die Konstrukte von der plattformunabhängigen Programmiersprache können z. B. eines oder mehrere der Folgenden beinhalten: Argumente, Instanzen, auf denen die integrierte Programmiersprache aufgerufen wird, und den Umfang der Instanzen, auf denen die integrierte Programmiersprache aufgerufen wird.
-
Gemäß mindestens einer Ausführungsform können die Daten über die plattformunabhängige Programmiersprache der Erweiterung zur Analyse der integrierten Programmiersprachen (in Block 415) durch den Analysator plattformunabhängiger Programmierung bereitgestellt werden. Je nach Implementierung kann der Analysator plattformunabhängiger Programmierung die Daten über die plattformunabhängige Programmiersprache an die Erweiterung zur Analyse der integrierten Programmiersprachen bereitstellen durch (i) Analyse eines abstrakten Syntaxbaums eines Konstruktes, das die Erweiterung zur Analyse der integrierten Programmiersprachen aufruft; (ii) Verwendung von Heuristik zur Zuordnung (Mapping) der Argumente der plattformunabhängigen Programmiersprache zu anderen Positionen in einem abstrakten Syntaxbaum der plattformunabhängigen Sprache; (iii) Verwendung von Kontrollfluss-/Datenflussanalyse für die plattformunabhängige Programmiersprache; (iv) Durchführung einer dynamischen Programmanalyse für die plattformunabhängige Programmiersprache; oder (v) Verwendung von Maschinenlernen, um das Verhältnis zwischen der plattformunabhängigen Programmiersprache und der integrierten Programmiersprache zu bestimmen.
-
In Block 420 können semantische Informationen über die integrierte Programmiersprache und die plattformunabhängige Programmiersprache generiert werden, wobei Teile der Quelldatei, die sich in der integrierten Programmiersprache befinden, Teilen der Quelldatei, die sich in der plattformunabhängigen Programmiersprache befinden, über die semantischen Informationen zugewiesen werden.
-
Gemäß einer oder mehrerer Ausführungsformen der vorliegenden Offenbarung kann der Beispielprozess 400 zur Erweiterung semantischer Informationen, die für Quellcode generiert werden, eine oder mehrere Operationen (nicht dargestellt) zusätzlich zu oder anstelle der oben hinsichtlich der Blöcke 405–420 beschriebenen Beispieloperationen beinhalten.
-
Gemäß mindestens einer Ausführungsform kann z. B. können die semantischen Informationen über die integrierte Programmiersprache und die plattformunabhängige Programmiersprache (z. B. in Block 420 generiert) zu einem für die integrierte Programmiersprache und die plattformunabhängige Programmiersprache erstellten Modell hinzugefügt werden. Bei diesem Modell kann es sich z. B. um einen semantischen Graphen (z. B. um den semantischen Graphen 140 im Beispielsystem 100 dargestellt in 1) handeln und die semantischen Informationen über die integrierte Programmiersprache und die plattformunabhängige Programmiersprache können als Knoten und Kanten zum Graphen hinzugefügt werden. Die zum Graphen hinzugefügten Knoten können Knoten von der integrierten Programmiersprache und Knoten von der plattformunabhängigen Programmiersprache beinhalten und die zum Graphen hinzugefügten Kanten können zwischen Knoten von der integrierten Programmiersprache und Knoten von der plattformunabhängigen Programmiersprache wechseln.
-
5 ist ein Übersichts-Blockdiagramm eines Beispielcomputers (500), der für die Bereitstellung erweiterter semantischer Informationen über den Quellcode vorbereitet wurde, einschließlich Informationen über integrierte Programmiersprachen, die im Quellcode enthalten sind, gemäß einer oder mehrerer der hierin beschriebenen Ausführungsformen. In einer sehr grundlegenden Konfiguration (501), schließt das Rechengerät (500) für gewöhnlich eine oder mehrere Prozessoren (510) und Systemspeicher ein (520). Ein Speicher-Bus (530) kann für die Kommunikation zwischen dem Prozessor (510) und dem Systemspeicher (520) verwendet werden.
-
Abhängig von der gewünschten Konfiguration kann der Prozessor (510) aus einem beliebigen Typ bestehen wie Mikroprozessor (μP), Mikrocontroller (μC), digitaler Signalprozessor (DSP) oder einer beliebigen Kombination dieser Prozessortypen. Der Prozessor (510) kann ein oder mehr Cache-Ebenen einschließen, wie z. B. ein Cache der Ebene Eins (511) und ein Cache der Ebene Zwei (512), einen Prozessorkern (513) und Register (514). Der Prozessorkern (513) kann eine arithmetisch-logische Einheit (ALU), eine Gleitpunkt-Maßeinheit (FPU), einen digitalen Signalverarbeitungskern (DSP Core) oder jede mögliche Kombination davon umfassen. Eine Speichersteuerung (516) kann ebenfalls mit dem Prozessor (510) verwendet werden, oder in einigen Implementierungen kann die Speichersteuerung (515) ein internes Teil des Prozessors (510) sein.
-
Abhängig von der gewünschten Konfiguration kann der Systemspeicher (520) ein beliebiger Typ sein einschließlich flüchtiger Speicher (wie RAM), nichtflüchtiger Speicher (wie ROM, Flashspeicher etc.) oder eine beliebige Kombination dieser Typen. Systemspeicher (520) umfasst üblicherweise ein Betriebssystem (521), ein oder mehrere Anwendungen (522) und Programmdaten (524). Die Anwendung (522) kann ein System zur Erweiterung semantischer Informationen über EDSL (523) beinhalten, das so konfiguriert sein kann, dass ein Benutzer dabei unterstützt wird, zu bestimmten, wo Stücke des Quellcodes, die eine plattformunabhängige Programmiersprache enthalten, mit Stücken des Code, die eine integrierte Programmiersprache enthalten, interagieren. Das System (523) kann auch so konfiguriert sein, dass dem Benutzer verständlich gemacht wird, wie die Grenze zwischen den Sprachen überschritten wird und den Code so darzustellen, dass der Benutzer ihn leichter verstehen kann.
-
Programmdaten (524) können Speicheranweisungen enthalten, die bei Ausführung durch ein oder mehrere Verarbeitungsgeräte ein System (523) und eine Methode zur Erweiterung semantischer Informationen implementieren, die für Quellcode generiert werden und die Informationen über integrierte Programmiersprachen beinhalten, die im Quellcode enthalten sind. Zusätzlich können gemäß mindestens einer Ausführungsform die Programmdaten (524) Daten (525) über plattformunabhängige Programmiersprachen enthalten, die sich auf die Daten über eine plattformunabhängige Sprache beziehen können, die eine EDSL-Erweiterung (z. B. die EDSL-Erweiterung 130 im Beispielsystem 100 dargestellt in 1) benötigen kann, um die Lücke zwischen der plattformunabhängigen Sprache und einer oder mehreren im Quellcode enthaltenen integrierten Sprachen zu füllen und semantische Informationen über die Interaktion zwischen den beiden Sprachen zu generieren. In Übereinstimmung mit mindestens einigen Ausführungsformen kann die Anwendung (522) so angeordnet werden, um mit Programmdaten (524) oder einem Betriebssystem (521) zu funktionieren.
-
Das Computergerät (500) kann zusätzliche Merkmale oder Funktionalitäten besitzen sowie zusätzliche Schnittstellen für die Kommunikation zwischen der Basiskonfiguration (501) und allen erforderlichen Geräten und Schnittstellen.
-
Der Systemspeicher (520) ist ein Beispiel eines Computerspeichermediums. Ein Computerspeichermedium umfasst, ist aber nicht darauf begrenzt, RAM, ROM, EEPROM, Flash-Speicher oder andere Speichertechnologien, CD-ROM, Digital Versatile Disks (DVDs) oder andere optische Speicher, Magnetkassetten, Magnetbänder, magnetische Magnetplattenspeicher oder andere magnetische Speichervorrichtungen oder jedes andere Medium, das verwendet werden kann, um die gewünschten Informationen zu speichern und auf das über das Rechengerät 500 zugegriffen werden kann. Jedes derartige Computerspeichermedium kann ein Teil des Geräts (500) sein.
-
Das Computergerät (500) kann als Teil eines kleinformatigen tragbaren (oder mobilen) elektronischen Geräts wie einem Mobiltelefon, Smart Phone, Personal Data Assistant (PDA), Personal Media Player, Tabletcomputer (Tablet), schnurlosen mobilen Internetgerät, persönlichen Headset-Gerät, anwendungsspezifischen Gerät oder Hybridgerät implementiert werden, das beliebige der oben genannten Funktionen enthält. Das Rechengerät (500) kann auch als ein PC implementiert werden, einschließlich Laptopcomputer und Nicht-Laptopcomputerkonfigurationen.
-
In der vorhergehenden detaillierte Beschreibung wurden verschiedene Ausführungsformen der Geräte und/oder Prozesse mithilfe von Blockdiagrammen, Flussdiagrammen und/oder Beispielen dargelegt. Insoweit wie solche Blockdiagramme, Flowcharts und/oder Beispiele eine oder mehrere Funktionen und/oder Operationen beinhalten, werden sie verstanden von denen in der Wissenschaft, das jede Funktion und/oder Operation mit solchen Blockdiagrammen, Flowcharts oder Beispielen implementiert werden können, individuell und/oder kollektiv, durch ein weites Angebot von Hardware, Software, Firmware der irgendeiner virtuellen Kombination davon. In Übereinstimmung mit mindestens einer Ausführungsform können mehrere Teile des betreffenden Gegenstands, das hierin beschrieben wird, über Application Specific Integrated Circuits (ASICs), Field Programmable Gate Arrays (FPGAs), digitale Signalprozessoren (DSPs) oder andere integrierte Formate eingeführt werden. Dennoch werden die Fachkundigen feststellen, dass einige Aspekte der hier dargelegten Ausführungen, teilweise oder gänzlich, ebenso in integrierten Kreisläufen implementiert werden können, als ein oder mehrere Computerprogramme, die auf einem oder mehreren Computer ausgeführt werden, als ein oder mehrere Programme, die auf einem oder mehreren Prozessoren ausgeführt werden, als Firmware oder irgend eine Kombination davon; und dass ein Entwurf der Kreisläufe und/oder des Schreibens des Codes für die Software und/oder Firmware unter Berücksichtigung der vorliegenden Veröffentlichung eine große Leistung wäre. Außerdem werden Fachleute verstehen, dass die Mechanismen dieses hier beschriebenen Gegenstands in der Lage sind, als ein Programmprodukt in einer Vielzahl von Formen verteilt zu werden, und dass eine veranschaulichende Ausführungsform des hier beschriebenen Gegenstands unabhängig von der besonderen Art des nicht-flüchtigen signalführenden Mediums gilt, das für die tatsächliche Verteilung verwendet wird. Beispiele nichtflüchtiger Signalträgermedien sind unter anderem: beschreibbare Medien wie Floppy Disk, Harddisklaufwerk, Compact Disc (CD), Digital Video Disk (DVD), Digitalband, Computerspeicher etc.; und Übertragungsmedien wie digitale und/oder analoge Kommunikationsmedien (z. B. Glasfaserkabel, Wellenleiter, drahtgebundene Kommunikationsverbindungen, drahtlose Kommunikationsverbindungen etc.)
-
Bezüglich der Verwendung von im Wesentlichen beliebigen Plural- und/oder Singularausdrücken hierin kann der Fachmann von Plural zu Singular und/oder von Singular zu Plural übersetzen, wie dies für den Kontext und/oder die Anwendung angebracht ist. Die verschiedenen Singular-/Plural-Permutationen können hierin ausdrücklich aus Gründen der Klarheit dargelegt.
-
Es ist zudem anzumerken, dass in Situationen, in denen durch die hierin beschriebenen Systeme und Methoden personenbezogene Daten über den Benutzer gesammelt werden oder personenbezogene Daten genutzt werden, der Benutzer eine Gelegenheit enthalten kann, zu steuern, ob mit den Systemen und/oder Programmen zusammenhängende Systeme und/oder Methoden Benutzerinformationen sammeln (z. B. Informationen über die Einstellungen des Benutzers). Darüber hinaus können gewisse Daten auf eine oder mehrere Wege behandelt werden, bevor sie gespeichert oder verwendet werden, sodass Informationen zur Identifizierung von Personen entfernt werden.
-
Eine Identität eines Benutzers kann zum Beispiel so behandelt werden, dass keine personenbezogenen Informationen für den Benutzer bestimmt werden können. Deshalb kann der Benutzer darüber Kontrolle haben, wie die Benutzerinformationen gesammelt und durch einen Server benutzt werden.
-
Es wurden somit besondere Ausführungsformen des Gegenstandes beschrieben. Weitere Ausführungsformen gehören zum Umfang der folgenden Ansprüche. In einigen Fällen können die in den Ansprüchen beschriebenen Handlungen in einer anderen Reihenfolge ausgeführt werden und dennoch erwünschte Ergebnisse erzielen. Zusätzlich erfordern die in den beigefügten Figuren dargestellten Prozesse nicht notwendigerweise die bestimmte gezeigte Reihenfolge oder aufeinanderfolgende Reihenfolge, um erwünschte Ergebnisse zu erzielen. Bei bestimmten Implementierungen können Multitasking und eine Parallelbearbeitung vorteilhaft sein.