-
HINTERGRUND
-
Entwickler erstellen oft komplexe Softwareanwendungen, die einen externen Code oder Bibliotheken enthalten. Beispielsweise kann ein Entwickler wünschen, eine Liste von Leuten in seine Anwendung aufzunehmen. Anstelle eines Definierens seines eigenen Listenobjekts kann der Entwickler eine Listenklasse von einem externen Paket aufnehmen. Bei diesem Beispiel, wie es in 1 gezeigt ist, kann der Entwickler eine Liste aus einer Standardbibliothek in seinen Code aufnehmen, wie beispielsweise "java.util.List.". "java.util.List" ist eine Klasse einer geordneten Sammlung, die durch das Paket java.util öffentlich verfügbar ist. Wenn die Liste einmal in eine Quellcode-Datei eines Entwicklers importiert worden ist, kann der Entwickler überall, wo eine Liste instanziiert oder verwendet wird, einfach auf die Liste mit dem einfachen Namen "Liste" Bezug nehmen, ohne dass er den vollständigen, qualifizierten Namen "java.util.List" verwenden muss. Beispielsweise bezieht sich in der Zeile 3 von 1 der Code nur auf den einfachen Namen "Liste" und nicht auf den qualifizierten Namen "java.util.List".
-
Obwohl der Prozess, um Pakete, Bibliotheken oder einen externen Code, der die qualifizierten Namen definiert, in einen Quellcode zu importieren, für kleine Codebasen unter Verwendung von standardmäßigen integrierten Entwicklungsumgebungen (IDEs) unkompliziert sein können, haben Codebasen großen Ausmaßes zu viele externe Abhängigkeiten für Standard-IDEs, um die geeigneten vollständigen Namen, auf die als qualifizierte Namen Bezug genommen wird, oder die geeigneten Erstellungs-Systemkonstrukte für die Abhängigkeiten effizient zu finden.
-
Herkömmliche Systeme versuchen, qualifizierte Namen in Echtzeit zu finden, indem auf die gesamte Codebasis geschaut und versucht wird, das geeignete Paket, die geeignete Bibliothek oder einen geeigneten anderen externen Code zu bestimmen. Dieser Prozess ist zeitaufwendig. Große Mengen eines Quellcodes können unter Verwendung dieses Ansatzes nicht einfach in einer vernünftigen Zeit verarbeitet werden.
-
Wie es durch den Erfinder erkannt ist, wäre es erwünscht, Kandidaten von qualifizierten Namen schnell zu finden, um das geeignete Paket, die geeignete Bibliothek oder den geeigneten externen Code für einfache Namensreferenzen, die im Quellcode existieren, und die Erstellungs-Systemabhängigkeiten, die die qualifizierten Namen liefern, zu importieren.
-
ZUSAMMENFASSUNG
-
Diese Beschreibung beschreibt Technologien in Bezug auf ein Finden von Kandidaten von qualifizierten Namen für wenigstens einen einfachen Namen in einer Quellcode-Datei, wie beispielsweise in einer Quellcode-Datei in der Java-Sprache.
-
Allgemein kann ein Aspekt des in dieser Beschreibung beschriebenen Gegenstands in einem System zum Finden von Kandidaten von qualifizierten Namen für wenigstens einen einfachen Namen in einer Quellcode-Datei verkörpert sein. Ein beispielhaftes System kann eine oder mehrere Verarbeitungsvorrichtungen und eine oder mehrere Speichervorrichtungen, die Anweisungen speichern, die ein beispielhaftes Verfahren implementieren, enthalten. Ein beispielhaftes Verfahren kann enthalten: Empfangen einer Quellcode-Datei mit wenigstens einem einfachen Namen, für welchen ein entsprechender qualifizierter Name erforderlich ist; Parsen der Quellcode-Datei, um die einfachen Namen in der Datei und qualifizierte Namen in der Datei zu bestimmen; für den wenigstens einen einfachen Namen, für welchen ein entsprechender qualifizierter Name erforderlich ist, Suchen eines Quellcode-Graphen, um potentielle qualifizierte Namen zu finden, die dem wenigstens einen einfachen Namen entsprechen; und auf einen Empfang einer Liste von Kandidaten für potentielle qualifizierte Namen von dem Quellcode-Graphen hin Ausgeben der Liste.
-
Diese und andere Ausführungsformen können optional eines oder mehrere der folgenden Merkmale enthalten: die Liste von Kandidaten für potentielle qualifizierte Namen kann vor einem Ausgeben der Liste mit zusätzlicher Information gefiltert oder angereichert werden; Erstellungsabhängigkeiten und Erstellungsziele für spezifische qualifizierte Namen können bestimmt werden, wenn einmal ein qualifizierter Name ausgewählt ist; die Liste von Kandidaten für potentielle qualifizierte Namen kann vor einem Ausgeben der Liste basierend auf einer Anzahl von Malen gefiltert werden, für welche ein qualifizierter Name eines bestimmten Typs durch andere Quellcode-Dateien verwendet worden ist; die Liste kann basierend auf der Häufigkeit, mit welcher ein bestimmter qualifizierter Name in anderen Teilen eines Quellcode-Depots verwendet worden ist, in eine Rangfolge gebracht werden; wenn die Liste nur einen potentiellen qualifizierten Namen enthält, kann der Name ohne Anwenderinteraktion automatisch als der qualifizierte Name ausgewählt werden; eine Schnittstelle kann für einen Anwender vorgesehen sein, um eine Auswahl eines qualifizierten Namens aus der Liste von Kandidaten für potentielle qualifizierte Namen aufzunehmen; ein Filtern kann ein Bestimmen enthalten, ob ein Paket von qualifizierten Namen aus der Quellcode-Datei sichtbar ist, in welcher aktuell auf einen einfachen Namen, der potentiell dem qualifizierten Namen entspricht, Bezug genommen wird, und in Reaktion auf ein Bestimmen, dass das Paket von qualifizierten Namen aus der Quellcode-Datei sichtbar ist, ein Liefern des Namens des Pakets von qualifizierten Namen als einen Kandidaten für potentielle qualifizierte Namen; und ein Filtern kann ein Bestimmen des Ausmaßes an Komplikation enthalten, das ein Paket von qualifizierten Namen zum Erstellungsprozess hinzufügen kann, einschließlich der Erhöhung bezüglich Zeit oder Ressourcen, um die Quellcode-Datei zu erstellen, und in Reaktion auf ein Bestimmen, dass das Ausmaß an Komplikation, das ein Paket von qualifizierten Namen zum Erstellungsprozess hinzufügt, ein erträgliches Ausmaß ist, Hinzufügen des Namens des Pakets von qualifizierten Namen zur Liste von Kandidaten für potentielle qualifizierte Namen.
-
KURZE BERSCHREIBUNG DER ZEICHNUNGEN
-
1 ist ein Beispiel eines Quellcodes, der einen qualifizierten Namen und einen einfachen Namen enthält.
-
2 ist ein Blockdiagramm, das ein beispielhaftes System zum Bestimmen von qualifizierten Namen für einfache Namen in einer Quellcode-Datei darstellt.
-
3 ist ein Blockdiagramm, das eine beispielhafte Computervorrichtung darstellt.
-
DETAILLIERTE BESCHREIBUNG
-
Gemäß einer beispielhaften Ausführungsform kann es einen Graphen großen Ausmaßes in einem verteilten System geben, das einen gesamten Quellcode für ein bestimmtes Quellcode-Depot oder bestimmte Quellcode-Depots darstellt. Der Quellcode kann indexiert sein, um den Graphen zu erzeugen. Bei einigen Ausführungsformen kann dieser Graph auf einer Maschine oder mehreren Maschinen existieren, auf die entfernt durch Entwickler zugegriffen wird, so dass der Graph nicht auf einer Maschine eines individuellen Entwicklers laufengelassen wird und auf ihn durch mehrere Entwickler gleichzeitig zugegriffen werden kann. In der einfachsten Form kann der Graph zwei Tabellen sein, wobei eine einfache Namen auf qualifizierte Namen abbildet und wobei eine zweite Tabelle qualifizierte Namen auf Erstellungssystemabhängigkeiten abbildet. Durch Erzeugen des Graphen und Zugreifen auf ihn in einem verteilten System oder einer Cloud-Umgebung können Berechnungen in einem Cache gespeichert werden und unter Entwicklern wiederverwendet werden. Bei anderen Ausführungsformen kann der Graph auf der eigenen Maschine eines Entwicklers existieren.
-
Wie es in 2 gezeigt ist, gibt es zwei einfache Namen in einer beispielhaften Quellcode-Datei (201), "Bar" in Zeile 3 und "Foo" in Zeile 5. Der qualifizierte Name für "Bar" wird im Code als "com.sourcecode.Bar" in Zeile 1 zur Verfügung gestellt. Jedoch ist der qualifizierte Name für "Foo" nicht zur Verfügung gestellt.
-
Bei einem beispielhaften System kann eine integrierte Entwicklungsumgebung (IDE), die auf einer Maschine eines Entwicklers läuft, einen Parser (203) haben, der eine Liste von einfachen Namen zur Verfügung stellen bzw. liefern kann, die in einer bestimmten Quellcode-Datei verwendet werden. Der Parser (203) kann auch eine Liste von qualifizierten Namen in der Quellcode-Datei liefern. Für die in 2 gezeigte Quellcode-Datei kann die Liste von einfachen Namen Folgendes sein: [Foo, Bar]. Die Liste von qualifizierten Namen kann Folgendes sein: [com.sourcecode.Bar]. Wie es dargestellt ist, kann es sein, dass ein qualifizierter Name entsprechend einem einfachen Namen nicht geliefert ist. Um den qualifizierten Namen und das Erstellungssystemkonstrukt, das den qualifizierten Namen für einfache Namen im Quellcode liefert, für welche der entsprechende qualifizierte Name nicht geliefert ist, zu finden, kann der Quellcode-Graph (205) für mögliche Erweiterungen des einfachen Namens in einen qualifizierten Namen angefragt werden. Beim gegebenen Beispiel kann der Quellcode-Graph (205) für den qualifizierten Namen für "Foo" und Erstellungsabhängigkeiten, die mit "Foo" assoziiert sind, angefragt werden. Wenn der qualifizierte Name als ein Import geliefert wird, wie bei diesem Beispiel "Bar", kann die Erstellungssystemabhängigkeit vorhanden sein oder nicht. Daher kann der Quellcode-Graph (205) auch für die Erstellungssystemabhängigkeiten angefragt werden, selbst wenn der vollständig qualifizierte Name im Quellcode geliefert ist.
-
Beispielsweise kann, wenn nach "Foo" gesucht wird, die Suche des Quellcode-Graphen (205) Klassen und Erstellungssystem-Produkte bzw. -Prüfgegenstände, die den Namen "Foo" enthalten, paaren. Bei einigen Ausführungsformen können Ergebnisse dadurch gefiltert werden, wie ein einfacher Name in einem Code verwendet wird. Wenn beispielsweise ein bestimmtes Verfahren von "Foo" aufgerufen wird, können vollständig qualifizierte potentielle Kandidaten für eine Fertigstellung, die das Verfahren nicht enthalten, aus der Liste für potentielle Kandidaten herausgefiltert werden. Die Anfrage kann dann eine Liste von Importen und Erstellungssystemabhängigkeiten zurückbringen. Es gibt verschiedene Arten, um diese Liste zu ordnen und zu filtern, wie es ein Fachmann auf dem Gebiet erkennen kann.
-
Der Quellcode-Graph (205) kann durchquert bzw. durchlaufen werden, um Information zu erhalten, wie beispielsweise die Erstellungssystemabhängigkeiten für in den Dateien gefundene einfache Namen. Beispielsweise kann der Quellcode-Graph dazu fähig sein, die Ziele für die Abhängigkeiten zu dem qualifizierten Namen für den einfachen Namen "Foo" zu liefern, so dass der Quellcode in Objektdateien kompiliert werden kann.
-
Die Liste von potentiellen qualifizierten Namen für einen gegebenen einfachen Namen, der durch Durchqueren des Quellcode-Graphen (205) erhalten ist, kann mit anderen Daten angereichert und weiter gefiltert werden (213). Anreicherungsdaten können enthalten: die Anzahl von Malen, für welche der qualifizierte Name im Depot verwendet wird (um eine Rangfolgenbildung zuzulassen); ob der qualifizierte Name als abgelehnt bzw. überholt markiert ist, und wenn es so ist, welcher qualifizierte Name stattdessen verwendet werden sollte; ob das Paket von qualifizierten Namen aus dem Quellcode sichtbar ist, in welchem auf ihn aktuell Bezug genommen wird (einige Klassen können absichtlich beschränkt sein auf bestimmte Softwarepakete); und das Ausmaß an Komplikation, das dieser qualifizierte Name zum Erstellungsprozess hinzufügen kann, einschließlich der Erhöhung bezüglich Zeit und/oder Ressourcen, um den Quellcode zu erstellen. Die Liste kann beispielsweise basierend auf der Anzahl von Malen gefiltert werden, für welche ein qualifizierter Name eines bestimmten Typs durch andere Quellcode-Dateien verwendet worden ist. Ein Filtern kann auch ein Entfernen von allen nicht sichtbaren Klassen oder ein Entfernen von allen Klassen, die nicht in den spezifischen Kontext im Code passen würden, enthalten. Beispielsweise kann "Foo" ein spezifisches Verfahren in einer Quellcode-Datei aufrufen, so dass alle passenden "Foo"-Bibliotheken, die dieses Verfahren nicht haben, aus der potentiellen Kandidatenliste herausgefiltert werden können. Wenn eine Liste von möglichen Kandidaten für Fertigstellungen und Abhängigkeiten zu einem Anwender (215) zur Berücksichtigung zurückgebracht wird, kann ein beispielhaftes System zurückgebrachte Ergebnisse basierend auf der Häufigkeit in eine Rangfolge bringen, mit welcher ein bestimmter qualifizierter Name durch andere Entwickler in anderen Teilen des Quellcode-Depots verwendet worden ist.
-
Bei einigen Ausführungsformen sind stark verwendete qualifizierte Namen die Namen, die durch Entwickler in ihren Quellcode-Dateien am wahrscheinlichsten verwendet werden. Unter anderen Rangfolgenbildungen können Namen auch dadurch in eine Rangfolge gebracht werden, ob sie für die Quellcode-Datei sichtbar sind, die dafür in Betracht gezogen wird, dass sie darin verwendet werden; ob die Klasse, die den Namen darstellt, ein Verfahren hat, das in der Quellcode-Datei verwendet wird; und ob Klassen abgelehnt sind. Klassen, die abgelehnt sind, können in einer Rangfolgenbildung für einen Namen zurückgestuft werden. Einem Anwender (215) kann dann die angereicherte, gefilterte Liste von Kandidaten für potentielle qualifizierte Namen für eine spezifische einfache Namensbezugnahme im Code gezeigt werden, und er kann das geeignetste Paket, die geeignetste Bibliothek oder eine geeignetste andere externe Codequelle für das Objekt mit einfachem Namen auswählen. Wenn der Anwender (215) einmal den richtigen qualifizierten Namen für den einfachen Namen im Quellcode aus den Kandidaten von qualifizierten Namen auswählt, können die ausgewählten qualifizierten Namen dann wieder zum Quellcode-Graphen (205) gesendet werden, um Information über die Erstellungssystemabhängigkeiten zu erlangen, um Erstellungsregelabhängigkeiten und Erstellungsziele für spezifische qualifizierte Namen zu manipulieren. Bei einigen Ausführungsformen kann die Liste von potentiellen Kandidaten für eine Fertigstellung und Erstellungssystemabhängigkeiten gefiltert werden, und für die Anfrage, um nur den Import und Erstellungssystemabhängigkeiten zurückzubringen, die die wahrscheinlichsten Übereinstimmungen bzw. Paarungen sind.
-
Wie es in 2 gezeigt ist, können dann, wenn die eindeutigen qualifizierten Namen (207, 209) einmal im Quellcode-Graphen (205) gefunden worden sind oder aus der Datei selbst (203) geparst worden sind und mit den einfachen Namen gepaart worden sind, die in der Quellcode-Datei (201) verwendet sind, die qualifizierten Namen in die Datei (201) hinzugefügt/importiert werden. Der Quellengraph kann periodisch regeneriert werden, um zu bestimmen, welche Klassen/Erstellungsabhängigkeiten am häufigsten verwendet werden.
-
Ein beispielhaftes Verfahren, wie es in 3 gezeigt ist, beginnt mit einem Empfangen einer Quellcode-Datei mit wenigstens einem einfachen Namen, für welchen ein entsprechender qualifizierter Name gefunden werden sollte (oder erforderlich ist) (301). Die Quellcode-Datei kann dann geparst werden, um eine Liste der einfachen Namen zu finden, die in der Datei verwendet sind, und eine andere Liste von all den qualifizierten Namen in der Datei (303). Für den wenigstens einen einfachen Namen, für welchen ein entsprechender qualifizierter Name gefunden werden sollte, kann der Graph vom gesamten Quellcode durchsucht werden, um Kandidaten für potentielle qualifizierte Namen für den einfachen Namen zu finden (305). Bei einigen Ausführungsformen kann die Kandidatenliste von Namen mit zusätzlicher Information gefiltert oder angereichert werden. Die Liste kann einem Anwender dafür zur Verfügung gestellt bzw. geliefert werden, dass der Anwender den geeigneten qualifizierten Namen für einen gegebenen einfachen Namen auswählt (309). Bei einigen Ausführungsformen kann, wenn es nur einen Kandidaten für qualifizierte Namen gibt, ein Anwender den qualifizierten Namen nicht auswählen müssen und kann der qualifizierte Name automatisch ausgewählt werden. Bei anderen Ausführungsformen kann, wenn es nur einen Kandidaten für qualifizierte Namen gibt, ein Anwender nur bestätigen, dass der qualifizierte Name die geeignete Paarung für den einfachen Namen ist. Wenn der qualifizierte Name einmal ausgewählt ist, kann ein beispielhaftes Verfahren Erstellungsabhängigkeiten und Erstellungsziele für die spezifischen qualifizierten Namen bestimmen. Die qualifizierten Namen, die zu den einfachen Namen in der Quellcode-Datei passen, können zu der Quellcode-Datei hinzugefügt werden. Dann kann der Quellcode-Graph regeneriert werden und kann Information, die zu einer Häufigkeit eines einfachen Namens/qualifizierten Namens/Erstellungsabhängigkeit gehört, bei einer zukünftigen Analyse verwendet werden, um qualifizierte Namen und Erstellungsabhängigkeiten zu finden.
-
4 ist ein Blockdiagramm auf hoher Ebene eines beispielhaften Computers (400), der zum Hosten und Veröffentlichen von Softwarepaketen eingerichtet ist. Bei einer sehr grundsätzlichen Konfiguration (401) enthält die Computervorrichtung (400) typischerweise einen oder mehrere Prozessoren (410) und einen Systemspeicher (420). Ein Speicherbus (430) kann zum Kommunizieren zwischen dem Prozessor (410) und dem Systemspeicher (420) verwendet werden.
-
In Abhängigkeit von der erwünschten Konfiguration kann der Prozessor (410) von irgendeinem Typ sein, einschließlich, aber nicht darauf beschränkt, eines Mikroprozessors (µP), einer Mikrosteuerung (µC), eines digitalen Signalprozessors (DSP) oder irgendeiner Kombination davon. Der Prozessor (410) kann einige Ebenen mehr einer Cache-Speicherung enthalten, wie beispielsweise einen Level-Eins-Cache (411) und einen Level-Zwei-Cache (412), einen Prozessorkern (413) und Register (414). Der Prozessorkern (413) kann eine arithmetisch-logische Einheit (ALU), eine Gleitkommaeinheit (FPU), einen Kern eines digitalen Signalprozessors (DSP-Kern) oder irgendeine Kombination davon enthalten. Eine Speichersteuerung (416) kann auch mit dem Prozessor (410) verwendet werden oder die Speichersteuerung (415) kann bei einigen Implementierungen ein interner Teil des Prozessors (410) sein.
-
In Abhängigkeit von der erwünschten Konfiguration kann der Systemspeicher (420) von irgendeinem Typ sein, einschließlich, aber nicht darauf beschränkt, eines flüchtigen Speichers (wie beispielsweise RAM), eines nichtflüchtigen Speichers (wie beispielsweise ROM, Flash-Speicher, etc.) oder irgendeiner Kombination davon. Der Systemspeicher (420) enthält typischerweise ein Betriebssystem (421), eine oder mehrere Anwendungen (422) und Programmdaten (424). Die Anwendung (422) kann ein Verfahren zum Hosten und Veröffentlichen von Softwarepaketen enthalten. Die Programmdaten (424) enthalten Speicherungsanweisungen, die dann, wenn sie durch die eine oder die mehreren Verarbeitungsvorrichtungen ausgeführt werden, ein Verfahren zum Hosten und Veröffentlichen von Softwarepaketen implementieren (423). Bei einigen Ausführungsformen kann die Anwendung (422) eingerichtet sein, um mit Programmdaten (424) auf einem Betriebssystem (421) zu arbeiten.
-
Die Computervorrichtung (400) kann zusätzliche Merkmale oder Funktionalität haben und zusätzliche Schnittstellen, um Kommunikationen zwischen der grundsätzlichen Konfiguration (401) und irgendwelchen erforderlichen Vorrichtungen und Schnittstellen zu ermöglichen.
-
Der Systemspeicher (420) ist ein Beispiel von Computerspeichermedien. Computerspeichermedien enthalten, sind aber nicht darauf beschränkt, RAM, ROM, EEPROM, einen Flash-Speicher oder eine andere Speichertechnologie, CD-ROM, digitale vielseitige Scheiben (DVD) oder einen anderen optischen Speicher, magnetische Kassetten, ein Magnetband, einen Magnetplattenspeicher oder andere magnetische Speichervorrichtungen oder irgendein anderes Medium, das dazu verwendet werden kann, die erwünschte Information zu speichern, und auf das durch die Computervorrichtung 400 zugegriffen werden kann. Irgendwelche solchen Computerspeichermedien können ein Teil der Vorrichtung (400) sein.
-
Die Computervorrichtung (400) kann als ein Teilbereich einer tragbaren (oder mobilen) elektronischen Vorrichtung mit kleinem Formfaktor implementiert sein, wie beispielsweise eines Zellentelefons, eines Smartphones, eines persönlichen Datenassistenten (PDA), einer persönlichen Medienabspielvorrichtung, eines Tablet-Computers (Tablets), einer drahtlosen Web-Uhrenvorrichtung, einer persönlichen Headset-Vorrichtung, einer anwendungsspezifischen Vorrichtung oder einer hybriden Vorrichtung, die irgendeine der obigen Funktionen enthält. Die Computervorrichtung (400) kann auch als ein Personalcomputer implementiert sein, einschließlich sowohl Laptopcomputer- als auch nicht Laptopcomputer-Konfigurationen.
-
Die vorangehende detaillierte Beschreibung hat verschiedene Ausführungsformen der Vorrichtungen und/oder Prozesse über die Verwendung von Blockdiagrammen, Ablaufdiagrammen und/oder Beispielen dargelegt. Insoweit solche Blockdiagramme, Ablaufdiagramme und/oder Beispiele eine oder mehrere Funktionen und/oder Operationen enthalten, wird es von Fachleuten auf dem Gebiet verstanden werden, dass jede Funktion und/oder Operation innerhalb von solchen Blockdiagrammen, Ablaufdiagrammen oder Beispielen individuell und/oder kollektiv durch einen weiten Bereich von Hardware, Software, Firmware oder virtuell irgendeiner Kombination davon implementiert sein kann. Bei einer Ausführungsform können mehrere Teilbereiche des hierin beschriebenen Gegenstands über anwendungsspezifische integrierte Schaltungen (ASICs), feldprogrammierbare Gate-Arrays (FPGAs), digitale Signalprozessoren (DSPs), andere integrierte Formate oder als ein Web-Dienst implementiert sein. Jedoch werden Fachleute auf dem Gebiet erkennen, dass einige Aspekte der hierin offenbarten Ausführungsformen, insgesamt oder teilweise, auf äquivalente Weise in integrierten Schaltungen implementiert sein können, als ein oder mehrere Computerprogramme, die auf einem oder mehreren Computern laufen, als ein oder mehrere Programme, die auf einem oder mehreren Prozessoren laufen, als Firmware oder als virtuell irgendeine Kombination davon, und dass ein Entwickeln der Schaltung und/oder ein Schreiben des Codes für die Software und/oder Firmware angesichts dieser Offenbarung gut innerhalb der Erfahrung eines Fachmanns auf dem Gebiet sein würde. Zusätzlich werden Fachleute auf dem Gebiet erkennen, dass die Mechanismen des hierin beschriebenen Gegenstands dazu fähig sind, als ein Programmprodukt in einer Vielfalt von Formen verteilt bzw. vertrieben zu werden, und dass eine illustrative Ausführungsform des hierin beschriebenen Gegenstands ungeachtet des bestimmten Typs eines ein nichtflüchtiges Signal tragenden Mediums Anwendung findet, das dazu verwendet wird, die Verteilung bzw. den Vertrieb tatsächlich auszuführen. Beispiele eines ein nichtflüchtiges Signal tragenden Mediums enthalten, sind aber nicht darauf beschränkt, das Folgende: ein Medium vom Aufzeichnungstyp, wie beispielsweise eine Diskette, ein Festplattenlaufwerk, eine Kompaktdiskette (CD), eine digitale Videodiskette (DVD), ein digitales Band, einen Computerspeicher, etc.; und ein Medium vom Übertragungstyp, wie beispielsweise ein digitales und/oder ein analoges Kommunikationsmedium (z.B. ein Glasfaserkabel, ein Wellenleiter, eine verdrahtete Kommunikationsverbindung, eine drahtlose Kommunikationsverbindung, etc.).
-
In Bezug auf die Verwendung von im Wesentlichen irgendwelchen Plural- und/oder Singular-Ausdrücken hierin können Fachleute auf dem Gebiet aus dem Plural zum Singular und/oder aus dem Singular zum Plural übersetzen, wie es für den Zusammenhang und/oder eine Anwendung geeignet ist. Die verschiedenen Singular/Plural-Permutationen bzw. -Umsetzungen können hierin der Klarheit halber ausdrücklich dargelegt sein.
-
Somit sind bestimmte Ausführungsformen des Gegenstands beschrieben worden. Andere Ausführungsformen sind innerhalb des Schutzumfangs der folgenden Ansprüche. In einigen Fällen können die in den Ansprüchen wiedergegebenen Aktionen in einer anderen Reihenfolge durchgeführt werden und noch erwünschte Ergebnisse erreichen. Zusätzlich erfordern die in den beigefügten Figuren gezeigten Prozesse nicht notwendigerweise die gezeigte bestimmte Reihenfolge oder sequentielle Reihenfolge, um erwünschte Ergebnisse zu erreichen. Bei bestimmten Implementierungen können Multitasking und Parallelverarbeitung vorteilhaft sein.