ES2473765T3 - Paralelizaci�n e instrumentaci�n en un marco de programación orientado a grafos de productor - Google Patents
Paralelizaci�n e instrumentaci�n en un marco de programación orientado a grafos de productor Download PDFInfo
- Publication number
- ES2473765T3 ES2473765T3 ES07856310.3T ES07856310T ES2473765T3 ES 2473765 T3 ES2473765 T3 ES 2473765T3 ES 07856310 T ES07856310 T ES 07856310T ES 2473765 T3 ES2473765 T3 ES 2473765T3
- Authority
- ES
- Spain
- Prior art keywords
- producer
- execution
- producers
- graph
- dependency
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4494—Execution paradigms, e.g. implementations of programming paradigms data driven
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3404—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for parallel or distributed programming
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3409—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
- G06F11/3419—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment by assessing time
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
- G06F11/3495—Performance evaluation by tracing or monitoring for systems
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3409—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
- G06F11/3428—Benchmarking
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/865—Monitoring of software
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
Un método implementado por ordenador para ejecutar un programa de aplicación escrito en un código orientado a objetos, comprendiendo el método: instanciar un productor con una salida que es actualmente de interés como parte de un grafo de productor, donde el código orientado a objetos incluye métodos y declaraciones de dependencia del productor, donde la declaración de dependencia del productor para un método determinado es identificar en tiempo de ejecución un conjunto de cero o más productores, donde un productor es una construcción instanciada de tiempo de ejecución, donde cada productor se instancia a partir de una combinación respectiva de una instancia (108) específica de una clase y un método (104) específico de esa clase e identifica dicha instancia específica y dicho método específico, donde la ejecución de un productor da como resultado el método identificado por ese productor que se ejecuta en la instancia identificada por ese productor; intentar generar automáticamente, en respuesta a dicha instancia, un resto del grafo de productor a través de la vinculación, y la instanciación si es necesario, de otros productores en base a las declaraciones de dependencia del productor de los métodos identificados por los productores ya en el grafo de productor; y ejecutar los productores en el grafo de productor para determinar la salida actual para el productor de interés, donde dicha ejecución comprende paralelizar la ejecución de al menos dos de los productores en el grafo de productor, usando un tiempo de ejecución, en base a las dependencias entre los productores en el grafo de productor.
Description
Paralelizaci�n e instrumentaci�n en un marco de programación orientado a grafos de productor
5
Campo
Realizaciones de la invención relacionados al campo de los ordenadores, y más específicamente, al campo de la programación y la ejecución de código enun entorno de ejecución.
10 Antecedentes
Programaci�n orientada a objetos
15 La programación orientada a objetos es un paradigma de programación de ordenadores. La idea detrás de la programación orientada a objetos es que un programa de ordenador pueda ser visto como un compendio de unidades individuales (llamadas objetos o instancias) que actúan entre s�, en oposición a la manera tradicional donde un programa puede ser visto como una colección de funciones, o simplemente como una lista de instrucciones al ordenador. Un objeto es un mecanismo de lenguaje para el enlace de datos con los métodos que
20 operan sobre esos datos. Cada objeto es capaz de ser llamado a través de métodos, datos de procesamiento, y proporcionando resultados con otros objetos. Cada objeto puede ser visto como una máquina independiente o un actor con un papel o responsabilidad distinta.
Un lenguaje reflexivo orientado a objetos es un lenguaje de programación que tiene un conjunto particular de
25 características (por ejemplo, clases, objetos/instancias, herencia, reflexión, etc.), mientras que un lenguaje reflexivo basado en objetos a veces se utiliza para etiquetar un lenguaje de programación que tiene algún subconjunto de esas características (por ejemplo, objetos). Para los propósitos de este documento, las frases "código fuente orientado a objetos" y "código orientado a objetos" se utilizan para referirse al código escrito en un lenguaje que tiene estas características (por ejemplo, código escrito en un lenguaje reflexivo orientado a objetos, código escrito en
30 un lenguaje reflexivo basado en objetos). Si bien los lenguajes del procedimiento, lenguajes no reflexivos orientados a objetos, y lenguajes no reflexivos basados en objetos son lenguajes de programación que normalmente no soportan estas características, se pueden utilizar técnicas de transformación para proporcionar estas características (por ejemplo, a través de la emulaci�n) para codificar escritas correctamente en los dos lenguajes, y por lo tanto, estas técnicas transforman estos lenguajes en un lenguaje reflexivo basado en objetos o en un lenguaje reflexivo
35 orientado a objetos. (Estas técnicas no necesitan emular todas las características de los lenguajes orientados a o basados en objetos, sino que sólo pueden emular las características que sean de interés para el resto de este documento). Para los propósitos de este documento, las frases "código fuente orientado a objetos" y "código orientado a objetos" también se utilizan para referirse a este método transformado, de código de lenguaje no reflexivo orientado a objetos, y no reflexivo basado en objetos. A modo de ejemplo, y no de limitación, este
40 documento describe principalmente un código fuente orientado a objetos escrito en un lenguaje reflexivo orientado a objetos. Además, los términos objeto e instanciase utilizan indistintamente en este documento.
Utilizado principalmente en programación orientada a objetos, el término método se refiere a un trozo de código que est� exclusivamente asociado, ya sea con una clase (llamados métodos de clase, métodos est�ticos o métodos de
45 fábrica) o con un objeto (llamado métodos de instancia). Al igual que un procedimiento en lenguajes de programación de procedimiento, un método usualmente consiste en una secuencia de instrucciones para realizar una acción, un conjunto de parámetros de entrada para parametrizar las acciones, y, posiblemente, un valor de salida de algún tipo que se devuelve.
50 Cuando los programadores escriben un programa utilizando un lenguaje orientado a objetos, el código resultante puede ser visto conceptualmente como que incluye cuatro tipos básicos de código. El primer tipo incluye comandos que operan en instancia(s) de entrada para proporcionar instancia(s) de salida (referidos aquí como código de "transformación"); típicamente escrito como métodos (referidos aquí como métodos de "transformación"). El segundo tipo incluye comandos de instanciaci�n de instancias que hacen que el entorno de ejecución cree instancias de
55 clases (indicados aquí como código de "instanciaci�n de instancias"). El tercer tipo incluye comandos de manipulación de la propiedad (indicados aquí como código de "preparación de datos") para invocar métodos de acceso de propiedad, mutaciones, etc.) De las instancias anteriores. El cuarto tipo incluye secuencias de comandos que causan que la secuenciaci�n de invocaci�n del método usando las instancias correspondientes (cuando las instancias apropiadas incluyen las instancias para utilizar como argumentos, las instancias son utilizadas por los
60 métodos de instancia y las instancias de clases meta utilizadas por los métodos de clase) para especificar qué métodos de transformación de qué instancias que invocan, en qué orden, y con qué parámetros de qué instancias responden a los cambios introducidos por el código de preparación de datos (indicados aquí como código "de secuenciaci�n de invocaci�n manual"). El código de secuenciaci�n de invocaci�n manual se escribe a veces como métodos separados de los métodos de transformación, y por lo tanto, la invocaci�n manual del código de
65 secuenciaci�n incluye secuencias de comandos de invocaci�n de métodos de transformación. Un programa típicamente itera entre el código de preparación de datos y código de secuenciaci�n de invocaci�n manual (que también puede sumergirse en el código de instanciaci�n de instancias), que a su vez invoca el código de transformación (que también puede sumergirse en el código de instanciaci�n de instancias y los tipos de código de preparación de datos). Cabe señalar que esta es una representación conceptual de un programa, y por lo tanto, no
5 debe ser tomada como absoluta respecto a cómo ver un programa.
Entorno de ejecución
El término de entorno de ejecución se utiliza para referirse a un programa o una librería de código básico que ejecuta otro código escrito en el mismo y/o en un lenguaje diferente. Por lo tanto, un entorno de ejecución es una colección de funciones de utilidad que apoyan un programa mientras se est� ejecutando, incluyendo el trabajo con el sistema operativo para proporcionar servicios tales como funciones matemáticas, de entrada y de salida. Esto hace que sea innecesario para los programadores reescribir continuamente las capacidades básicas especificadas en un lenguaje de programación o proporcionada por un sistema operativo. Puesto que la demarcaci�n entre un entorno
15 de ejecución y un sistema operativo pueden confundirse, el término entorno de ejecución se utiliza aquí para referirse al código separado del sistema operativo y/o código que forma parte de este.
Los primeros entornos de ejecución, como el de FORTRAN, ofrecen características tales como operaciones matemáticas. Otros lenguajes añaden características más sofisticadas, por ejemplo, recolector de basura (gestión de memoria), a menudo en asociación con soporte para objetos. Lenguajes más recientes tienden a tener sistemas en tiempo de ejecución considerablemente más grandes y con más funcionalidades. Muchos lenguajes orientados a objetos también incluyen un sistema conocido como "despachador" y "cargador de clases". La Máquina Virtual de Java (JVM) es un ejemplo de este entorno de ejecución: también interpreta o compila los programas de Java portátiles binarios (byte-código) entiempo de ejecución. El entorno de ejecución de lenguaje común (CLR) es otro
25 ejemplo de un entorno de ejecución.
Marco de programación y ejecución
Un marco en el que las aplicaciones se proporcionan a los usuarios finales incluye tres divisiones básicas. La primera división incluye la creación del sistema operativo y el entorno de ejecución. Esta primera división se lleva a cabo por los programadores con conocimientos de programación muy avanzados. Cuando se trabaja en esta división, los programadores son llamados, respectivamente, programadores del sistema operativo y programadores del entorno de ejecución. Cuando se crea un entorno de ejecución para un lenguaje orientado a objetos, los programadores de entorno de ejecución incluyen el soporte para la ejecución de los distintos tipos de comandos que
35 se utilizan en el código de transformación, el código de instanciaci�n de instancias, el código de preparación de datos, y el código de secuencia manual de invocaci�n (por ejemplo, comandos de instanciaci�n de instancias, comandos de preparación de datos y comandos de invocaci�n del método).
La segunda división incluye la creación del código fuente de aplicaciones orientadas a objetos que se ejecutarán por el entorno de ejecución. La segunda división se realiza de nuevo por los programadores con conocimientos de programación más avanzados, as� como la comprensión de los objetivos de negocio de la aplicación. Cuando se trabaja en esta división, a los programadores se les conoce como programadores de aplicaciones. Al crear una aplicación en un lenguaje de programación orientado a objetos, los programadores de aplicaciones escriben el código de transformación específico, el código de instanciaci�n de instancias, el código de preparación de datos, y el
45 código de secuencia de invocaci�n manual para la aplicación específica que se cre�. Como parte de esto, si la aplicación requiere una interfaz gráfica de usuario, los programadores de aplicaciones también diseñan y codifican la interfaz gráfica de usuario para la aplicación específica, por lo tanto, también se les conoce como los diseñadores de aplicaciones.
La tercera división incluye el uso de programas de aplicaciones que son ejecutados por el entorno de ejecución. La tercera división se lleva a cabo por los usuarios finales que no necesitan tener conocimientos de programación.
C�digo de secuenciaci�n de invocaci�n manual
55 Los mayores costes asociados típicamente con la creación de una aplicación implican la depuración y/o la optimización del código de secuenciaci�n de invocaci�n manual. Para cada oportunidad para que los datos cambien, el programador de la aplicación debe tener en cuenta su efecto y escribir el código de secuenciaci�n de invocaci�n manual para hacer que los métodos de transformación adecuados de las instancias apropiadas sean invocados en el orden apropiado, con las entradas correspondientes. Errores de ejemplo realizados por los programadores de aplicaciones incluyen: 1) invocar los métodos de transformación adecuados de las instancias correspondientes en el orden incorrecto, 2) olvidarse de incluir comandos para hacer que uno o más métodos de transformación necesarios de las instancias que deben invocarse respondan a algunos datos que se cambiaron, 3) incluir los comandos para hacer que los métodos de transformación de innecesarias deban invocarse en respuesta a algunos datos que est�n siendo modificados (por ejemplo, incluyendo comandos para invocar métodos de transformación de instancias que
65 no est�n afectadas por el cambio en datos), etc.
A modo de ejemplo, una técnica de generación de código de secuenciaci�n de invocaci�n manual es el uso del patrón observador (a veces conocido como "subscribir publicación") para observar el estado de una instancia en un programa. En el patrón de observador, una o más instancias (llamadas observadores u oyentes) se registran (o se registra a s� mismas) para observar un evento que puede ser suscitado por el objeto observado (el sujeto). La
5 instancia observada, que puede provocar un evento, generalmente mantiene una colección de observadores registrados. Cuando se provoca el evento, cada observador recibe una devolución de llamada desde la instancia observada (la instancia observada invoca un método de "notificación" en los observadores registrados). La función de notificación puede pasar algunos parámetros (generalmente información sobre el evento que se est� produciendo) que pueden ser utilizados por los observadores. Cada observador implementa la función de notificación, y como consecuencia, define su propio comportamiento cuando se produce la notificación.
La instancia observada típicamente tiene un método de registro para agregar un nuevo observador y un método no registrado para la eliminación de un observador de la lista de instancias a notificar cuando se provoca el evento. Además, la instancia observada también puede tener métodos para inhabilitar temporalmente y luego volver a
15 habilitar llamadas para prevenir el derramamiento ineficiente de un número de cambios relacionados. Específicamente, las devoluciones de llamada en respuesta a un cambio del valor de la propiedad con frecuencia también cambian los valores de algunas otras propiedades, provocando devoluciones de llamada adicionales, y as� sucesivamente.
Cuando se utiliza la técnica de patrón de observador, los programadores de aplicaciones que escriben manualmente el código de secuenciado de invocaci�n manual especifican qué métodos de qué instancias se llaman, en qué orden, y con qué entradas mediante registro, anulación del registro, desactivación y vuelta a la rehabilitación de observadores a las diferentes instancias observadas, as� como la escritura de los métodos de notificación y devolución de llamadas para cada uno. Más específicamente, la relación entre el observador y los casos observados
25 se administra localmente (por ejemplo la instancia observada solamente, sin sincronización con otras instancias observadas) dentro del patrón del observador, y por lo tanto, el código de secuenciaci�n de invocaci�n manual necesario para sincronizar los eventos a partir de múltiples instancias observadas es típicamente parte de los métodos de devolución de llamadas específicos de cada observador.
Ejecuci�n de programas y paralelizaci�n
De manera convencional, los métodos de un programa se ejecutan de forma secuencial basada en el código de secuenciaci�n de invocaci�n manual. Para mejorar la eficiencia y la velocidad de ejecución, algunos métodos pueden ejecutarse en paralelo en los sistemas que soporta la paralelizaci�n. En general, la paralelizaci�n en
35 informática, es la ejecución de múltiples procesos, tareas o subprocesos, simultáneamente. Para poner en práctica la paralelizaci�n, los programadores de aplicaciones pueden identificar los métodos que se desean ejecutaren paralelo y, a continuación, escribir nuevamente el código de secuenciaci�n de invocaci�n manual para que los métodos identificados puedan ser ejecutados en paralelo.
En la actualidad, los mecanismos soportados de paralelizaci�n comunes en la computación, son multiprocesamiento y multihilo. En multiprocesamiento, un programa de aplicación se divide típicamente en múltiples tareas. Cada tarea es de un alto nivel, discreta y una sección independiente del trabajo computacional que puede ser ejecutada por un procesador. Para lograr la paralelizaci�n, al menos algunas de las tareas son ejecutadas simultáneamente en varios procesadores. Los procesadores pueden estar acoplados el uno al otro a través de una red y se denominan
45 colectivamente como un grid. Los procesadores en el grid pueden incluir los procesadores locales, los procesadores distantes, o una combinación de ambos.
Adem�s de multiprocesamiento, otro mecanismo de paralelizaci�n común es multithreading. Un hilo de ejecución es un proceso local para ejecutar una tarea. Un procesador que soporta multithreading puede ejecutar múltiples hilos sustancialmente de forma simultánea. Un ejemplo de este tipo de procesador, es un procesador de múltiples núcleos, donde cada núcleo del procesador puede ejecutar un hilo o subproceso.
A modo de ejemplo, una técnica convencional en la paralelizaci�n es analizar el código fuente de un programa de
aplicaci�n para extraer una configuración del programa de aplicación. Según la configuración, el programa de
55 aplicación se divide en una serie de sub-programas, que se presentan en un grafo basado en las relaciones entre padre e hijo de los sub-programas. Estos subprogramas se ejecutan en paralelo en base a las relaciones mencionadas anteriormente.
En algunos sistemas inform�ticos convencionales, el análisis del código intermedio generado a partir del código fuente se puede utilizar para llevar a cabo la paralelizaci�n. Por ejemplo, el análisis de código intermedio (por ejemplo, el lenguaje ensamblador) y paralelizaci�n se realiza durante la compilación. El paralelizador del compilador convierte el código intermedio en un formato ejecutable en paralelo. Un determinante de orden de ejecución determina el orden de los elementos básicos para ser ejecutados. Un paralelizador de bloque de construcción básico ampliado subdivide los bloques de construcción básicos en las unidades de ejecución, cada una compuesta de
65 instrucciones ejecutables en paralelo. El análisis de las dependencias se realiza en forma de instrucciones.
Sin embargo, las técnicas convencionales descritas anteriormente requieren el análisis del código de secuenciaci�n de invocaci�n manual en el programa de aplicación, escrito por los programadores de aplicaciones. Por lo tanto, el peso de la paralelizaci�n la llevan los programadores de aplicaciones debido al gran cuidado que se debe tener al escribir el código de secuenciaci�n de invocaci�n manual para que la paralelizaci�n se realice correctamente. Por lo
5 tanto, los programadores de aplicaciones necesitan tener un nivel relativamente alto de conocimientos de
programación.
Para facilitar el trabajo de los programadores de aplicaciones, algunas técnicas convencionales se han desarrollado para llevar a cabo la paralelizaci�n de los programas de aplicación sin necesidad de poseer un alto nivel de conocimientos de programación. Por ejemplo, se proporcionan construcciones de lenguaje y clases especiales que contienen los tipos de datos regulares para ejecutar un programa secuencial en paralelo. Los programadores no tienen que escribir un "programa paralelo" a fin de que las partes del programa se ejecuten en paralelo. Un método paralelo se especifica en el punto de llamada utilizando un identificador de proceso paralelo y los argumentos para el sistema. La función para ejecutar distintas partes en paralelo es proporcionada. Los métodos paralelos pueden ser
15 escritos creando una nueva clase derivada de una clase común correspondiente a cada método paralelo del programa. El sistema resuelve dependencias en tiempo de ejecución y la paralelizaci�n se realiza al nivel donde se encuentra la dependencia real. El compilador puede determinar si los argumentos pueden ser modificados en el método paralelo a través del análisis del grafo de flujo de control del método paralelo.
En otro sistema inform�tico convencional, un gestor de base de datos se utiliza para ejecutar funciones definidas por el usuario en un programa de aplicación sin necesidad de codificar todo el paralelismo en el propio programa de ordenador. Una tabla de base de datos se define con las instrucciones que el usuario desea ejecutar en paralelo. Una función definida por el usuario se define como una instrucción que se ejecuta en la tabla. El gestor de bases de datos proporciona paralelismo mediante la ejecución de varias tareas en paralelo en la función definida por el
25 usuario.
Instrumentaci�n de Software
En general, la instrumentaci�n de software se refiere a las técnicas para observar el comportamiento de uno o más programas de aplicación y la recolección de métricas correspondientes a los programas de aplicación y la ejecución de los mismos. Por lo tanto, la instrumentaci�n de software es una valiosa herramienta en el desarrollo as� como el mantenimiento de un programa de aplicación porque el programa de aplicación y / o la ejecución del programa de aplicación pueden ser mejorados de diversas maneras basadas en el comportamiento del programa de aplicación y las métricas recopiladas.
35 En la actualidad, varias técnicas se han desarrollado para poner en práctica los instrumentos de software. Por ejemplo, una técnica es para añadir módulos de software o el código para registrar el historial de ejecución de un programa de aplicación de tal manera que una futura ejecución del programa de aplicación pueda ser gestionada basándose en la historia registrada en ejecución. En otro ejemplo, un compilador genera la instrucción y los metadatos para el seguimiento y recopilación de métricas. Si un indicador seleccionado est� asociado con una instrucción, el recuento de eventos asociados con la ejecución de la instrucción est� habilitado. A continuación se cuenta el número de veces que se ejecuta una instrucción. Después de la ejecución del programa de aplicación, los puntos de acceso son identificados para determinar la metodología de mejora del rendimiento y el código fuente del programa de aplicación puede ser modificado para aplicar metodolog�as de mejoras del rendimiento.
45 Otra técnica convencional en la instrumentaci�n es utilizar los datos de representación intermedia (IR) generados a partir del código fuente de un programa de aplicación. En concreto, un compilador genera datos de IR del código fuente. Un módulo de instrumentaci�n de código actúa sobre los datos de IR para construir un árbol de IR y para añadir instrumentaci�n a los datos de IR basado en el árbol de IR. A continuación, el compilador finaliza la compilación mediante la conversión de los datos de IR con instrumentaci�n en código objeto. Una instancia de clase puede ser instrumentada utilizando una biblioteca de instrumentos (en lo sucesivo, una DLL de instrumentaci�n). Un módulo de la máquina virtual (VM) entiempo de ejecución puede ejecutar la instancia de la clase instrumentada. Hay declaraciones de los nombres de los métodos y parámetros en el código de bytes en la instancia de clase. Un designador especial indica que las partes ejecutables corresponden a los métodos declarados que se encuentran en
55 algunos bloques de código nativo separado del módulo de tiempo de ejecución de la VM. Por ejemplo, el código de bytes instrumentado de la VM de Java puede ser monitoreado durante la ejecución de un proceso de monitor y una biblioteca de monitor (conocido como una DLL de monitor).
Pila de llamadas volátil de sobre escritura
Los tiempos de ejecución t�picos utilizan una pila de llamadas volátil de sobre escritura para realizar un seguimiento de las llamadas actualmente invocadas no completadas. Una pila de llamadas volátil de sobre escritura sobrescribe porque despacha y descarta entradas cuando se ha completado cada llamada, y es volátil porque se descarta y se reconstruye en cada ejecución. Los tiempos de ejecución t�picos utilizan pilas de llamadas volátiles de sobre
65 escritura debido a que los tiempos de ejecución t�picos combinan la construcción la pila de llamadas volátil de sobre escritura, con la invocaci�n real de métodos de transformación apropiados de las instancias apropiadas con las entradas adecuadas que responden a la ejecución del código de secuencia manual de invocaci�n. En resumen, que responda a la ejecución del código de secuenciaci�n de invocaci�n manual, un motor de ejecución t�pico determina el método de transformación/llamada de secuenciaci�n de instancia por llamada (cuando se realiza cada llamada) y mantiene la pila de llamadas volátil de sobre escritura para realizar un seguimiento de sólo las llamadas invocadas
5 no completadas.
Asignado Objeto-Relacional
La asignación objeto-relacional es una técnica de programación que enlaza bases de datos relacionales con conceptos de lenguaje orientados a objetos, creando (en efecto) una "base de datos de objetos virtuales". Algunos mapeadores objeto-relacional mantienen automáticamente las instancias cargadas en la memoria en sincronización constante con la base de datos. En concreto, después de la construcción de una consulta de asignado objeto a SQL, los primeros datos devueltos se copian en los campos de las instancias en cuestión, como cualquier paquete de asignado objeto-SQL. Una vez all�, la instancia tiene que mirar para ver si estos valores cambian, y luego, invertir
15 con cuidado el proceso de escritura de los datos de nuevo a la base de datos.
Hibernate 3.0 es una solución de asignado objeto-relacional para Java y CLR (JBoss� Inc., de Atlanta, Georgia). Por lo tanto, Hibernate ofrece un marco para la asignación de un modelo de dominio orientado a objetos en una base de datos relacional tradicional. Su objetivo es aliviar el desarrollador de algunas tareas comunes de programación de datos relacionados con la persistencia. Hibernate se encarga de la asignación de las clases a las tablas de bases de datos (y a partir de los tipos de datos orientados a objetos a tipos de datos SQL), as� como los que ofrecen consultas de datos e instalaciones de recuperación. Hibernate est� centrado en las instancias y crea grafos que representan relaciones entre instancias.
25 Inversión de control y el principio de inversión de dependencia
La inversión de control, también conocida como IOC, es un principio de programación orientado a objetos que se puede utilizar para reducir el acoplamiento (el grado en que cada módulo de programa se basa en cada módulo de otro tipo) inherente a los programas de ordenador. La IOC también se conoce como el principio de inversión de la dependencia. En la IOC, una clase X depende de la clase Y si se aplica alguno de los siguientes casos: 1) X tiene una Y y la llama; 2) X es una Y, o 3) X depende de alguna clase Z que depende de Y (transitividad). Cabe señalar que X dependa de Y no implica que Y dependa de X; si ambos resultan ser ciertos, se llama una dependencia cíclica: X no puede ser utilizada sin Y, y viceversa.
35 En la práctica, si un objeto x (de la clase X) llama a los métodos de uno objeto y (de la clase Y), entonces la clase X depende de Y. La dependencia se invierte mediante la introducción de una tercera clase, es decir, una clase de interfaz I que debe contener todos los métodos que x podría llamar en y. Además, Y se debe cambiar de tal manera que implementa la interfaz I. X e Y ahora son ambas dependientes de la interfaz I y la clase X ya no depende de la clase Y (suponiendo que x no es una instancia de Y). Esta eliminación de la dependencia de la clase X en Y mediante la introducción de una interfaz I se dice que es una inversión de control (o una inversión de la dependencia). Cabe señalar que Y podría depender de otras clases. Antes de que la transformación se haya aplicado, X depende de Y, y as� X dependía indirectamente de todas las clases de las que Y depende. Mediante la aplicación de la inversión de control, todas estas dependencias indirectas se han roto también. La interfaz I recién introducida no depende de nada.
45 El marco de trabajo Springes un marco de aplicaciones de código abierto para la plataforma Java que utiliza IOCe inversión de dependencia. En concreto, lo central en el marco de trabajo Springes su contenedor de inversión de control que proporciona un medio para configurar y administrar los objetos de Java. Este contenedor se conoce también como Bean Factory, contexto de aplicaciones o contenedor de núcleo. Ejemplos de las operaciones de este contenedor son: creación de objetos, configuración de los objetos, métodos de inicialización de llamadas y paso de objetos a los objetos de devolución de llamadas registrados. Los objetos que se crean por el contenedor también se denominan objetos administrados o vainas. Normalmente, el contenedor est� configurado por la carga de archivos XML que contienen definiciones de vainas. Estas proporcionan toda la información que se requiere para crear objetos. Una vez que los objetos son creados y configurados sin elevar las condiciones de error, est�n disponibles
55 para su uso. Los objetos pueden ser obtenidos por medio de búsqueda de dependencia o inyección de dependencia. La búsqueda de la dependencia es un patrón en el que una persona que llama le pide al objeto contenedor un objeto con un nombre específico o de un tipo específico. La inyección de dependencia es un patrón donde el contenedor pasa objetos por su nombre a otros objetos, ya sea a través de constructores, propiedades o métodos de fábrica. Por lo tanto, el marco de trabajo Spring est� centrado en la memoria y construye grafos que representan las relaciones entre las instancias.
Herramientas de representación gráfica
Javadoc™ es una herramienta que analiza las declaraciones y comentarios de documentación en un conjunto de
65 archivos de código fuente Java y genera un conjunto de páginas HTML que describen (por defecto) las clases públicas y protegidas, clases anidadas (pero no clases internas anónimas), interfaces, constructores, métodos y campos (Sun Microsystems�, Inc., de Santa Clara, CA). Javadoc se puede utilizar para generar la documentación API (Interfaz de Programación de Aplicaciones) o la documentación de implementación de un conjunto de archivos de código fuente. Javadoc est� centrado en la clase y el método y crea grafos que representan las relaciones entre la combinación de clases y sus métodos.
5 Otro sistema para el diseño de aplicaciones de software incluye grafos de los objetos analizados por un intérprete para representar y reproducir una aplicación informática. Este sistema utiliza clases de programación escritas previamente almacenadas en las librerías de código, que pueden ser escritas para seguir los patrones de diseño descritos en "Design Patterns"de Gamma et al, Addison Wesley 1995, "Patternsin Java"de Grand, Wiley Computer Publishing, 1998, y/o herramientas de Ingeniería de software asistido (CASE) de alto nivel. Más específicamente, algunas clases se basan en el patrón de comportamiento del observador. Las librerías de código escritas previamente representan nodos de aplicación del estado, la lógica de procesamiento, y el flujo de datos del sistema entre los diversas estados de aplicaciones (es decir, los elementos de datos escritos previamente de la aplicación), por lo que un usuario no tiene que escribir, editar, o compilar el código, cuando se crea una aplicación de software.
15 En cambio, un usuario edita manualmente una aplicación de software en una interfaz gráfica de usuario mediante la edición de objetos visuales asociados con un nodo del estado actual de la aplicación, tal como datos en el nodo de estado de la aplicación o los procesos realizados en el nodo de estado de la aplicación. Luego, basándose en los cambios introducidos por el usuario para el nodo del estado actual de la aplicación, el intérprete muestra el estado de la aplicación actualizada para el usuario para el estado de la aplicación que acaba de ser editada. Entonces, el sistema puede hacer la transición a lo largo de un borde definido por el usuario de transición a otro estado de la aplicación donde el usuario puede, opcionalmente, editar el estado de la aplicación siguiente o el borde de transición. Los cambios en un grafo pueden realizarse a través de las instancias del grafo, que son implementadas por el intérprete mientras el software de la aplicación se est� ejecutando. Este sistema para el diseño de aplicaciones de software puede incluir representaciones visuales de una aplicación de software en funcionamiento
25 que se puede hacer "utilizable" con un controlador de aplicación. Cuando un usuario cambia los objetos visuales, que representa la aplicación de software que se ejecuta, el controlador utiliza la entrada para inducir al intérprete para hacer el cambio al grafo. El controlador entonces espera más cambios. Además, las representaciones visuales de las aplicaciones de software no pueden ser importadas o exportadas como documentos XML que describen la representación visual de la aplicación, y por lo tanto, la aplicación de software.
Con el fin de modificar y/o crear una aplicación de software, en forma de una representación visual de nodos, bordes dirigidos, y estados de aplicación, una interfaz de programa de aplicación y un editor de aplicación adicional pueden incluirse en el sistema. Las palabras clave y las definiciones asociadas de las librerías de código escritas previamente permiten a los desarrolladores de aplicaciones definir manualmente una aplicación de software, etapas 35 de tratamiento, as� como la representación visual de una aplicación de software, proporcionando representaciones gráficas, en un editor, de un grafo aplicación que se correlaciona estrechamente con la estructura de la aplicación real. Un usuario define una nueva aplicación a través de un "asistente de definición de aplicaciones", después de que ciertas cuestiones preliminares se hayan cumplido, muestra la nueva aplicación como un componente grafo en el espacio de trabajo del editor. Un usuario también interact�a con una aplicación haciendo selecciones de las listas que se muestran de los componentes creados previamente de posibles aplicaciones y arrastrando y soltando componentes en el espacio de trabajo a través del ratón de un PC y el clavedo. Un usuario puede seleccionar los componentes y "arrastrarlos" sobre los componentes existentes. Cuando un nuevo componente se "cae" sobre un componente existente, el nuevo componente se convierte en un menor del componente existente en un grafo de la aplicación. Las relaciones de los componentes dentro de la aplicación de forma se definen manualmente mediante
45 las selecciones del usuario en el editor. As�, se genera una estructura de árbol que representa una aplicación por parte del usuario. A medida que la aplicación es creada, el usuario puede seleccionar un visor de navegador de la aplicación para mostrar una vista de árbol de la solicitud de construcción, de manera que es posible seleccionar y editar cualquier componente de la aplicación. La interfaz del editor procesa las entradas del usuario y las selecciones, incluyendo la creación o la eliminación de los elementos de la aplicación, la actualización de los atributos de los componentes, y la actualización de las propiedades de la pantalla de una aplicación.
El sistema descrito anteriormente, mientras utilízalas representaciones visuales de las aplicaciones de software, también puede utilizarse como una herramienta de programación visual para definir y actualizar las bases de datos relacionales. El sistema utiliza las descripciones XML de la representación visual de las aplicaciones de software.
55 Una herramienta analiza e interpreta las descripciones XML para producir esquemas relacionales equivalentes en el listado de bases de datos, as� como sus cambios. Cuando los datos se cambian dentro de una representación visual de una aplicación de software, una descripción del cambio se almacena junto con otros cambios en un archivo de diario y luego se procesan como un grupo. Un programa intermedio (una aplicación Java que opera en su propio hilo) realiza las transacciones entre la representación visual de la aplicación de software y la base de datos relacional. La aplicación de Java (por ejemplo, comprobaciones) revisa el diario de los cambios en los nodos de la representación visual (es decir, los datos de la base de datos), y si hay cambios, hace los cambios en la base de datos. As�, mediante la alteración de los datos dentro de la representación visual, el sistema actualiza una base de datos. Una aplicación similar se encuentra entre la representación visual de la aplicación de software y la base de datos maneja las peticiones de los datos de la base de datos.
65 Otro sistema para el análisis de software se llama un Analizador de árbol de código (CTA). Un CTA analiza el código fuente est�tico escrito en un lenguaje de programación orientado a objetos. El CTA genera una tabla de símbolos y un árbol de llamadas desde el código fuente est�tico. Utilizando la tabla de símbolos, el CTA genera un diagrama de clases. Asimismo, utilizando el árbol de llamadas, el CTA genera un diagrama de secuencias. El diagrama de clases ilustra la relación entre una clase seleccionada por el usuario y las clases relacionadas con la clase seleccionada por
5 el usuario. El diagrama de secuencias ilustra la secuencia en la que diferentes métodos son llamados. Utilizando el diagrama de clases y el diagrama de secuencias, el CTA genera un representante de los artefactos de diseño del código fuente est�tico. Cuando el usuario modifica el artefacto de diseño, el CTA identifica las partes afectadas del código fuente mediante el diagrama de secuencia. El artefacto de diseño se utiliza para el mantenimiento del código y/o ingeniería inversa del código fuente est�tico.
El documento US 5.966.072 describe el uso de grafos para invocar computaciones de manera directa. Los siguientes aspectos son discutidos: obtención de información dentro y fuera de los procesos individuales representados en el grafo, movimiento de la información entre los procesos y definición del orden de corrida de los procesos. El arreglo descrito agrega un "adaptador de procesos", en caso de ser necesario, para ayudar en la
15 obtención de la información dentro y fuera de los procesos.
En el capítulo 8, "El modelo de enlace", del libro "Dentro de la máquina virtual de Java" (Segunda edición) de Bill Venners, describe el modelo de enlace dinámico de la máquina virtual de Java. El modelo de enlace de Java nos permite diseñar cargadores de clases definidos por el usuario que extiendan una aplicación de maneras personalizadas en tiempo de ejecución. Mientras un programa corre, la máquina virtual de Java construye una red interna de clases e interfaces interconectadas. Además del tipo de enlace simple en tiempo de ejecución, las aplicaciones de Java pueden decidir otros tipos de enlace. La arquitectura de Java permite que los programas sean extendidos din�micamente, el proceso de decisión de otros tipos, la carga y su uso en tiempo de ejecución. Esto permite que una aplicación pueda cargar tipos cuyos nombres no han sido mencionados en el código fuente de la
25 aplicación, sin embargo son determinados por la aplicación mientras ésta se ejecuta.
La invención proporciona un procedimiento para la ejecución de un programa de aplicación escrito en el código orientado a objetos tal como se establece en la reivindicación 1, y un aparato que comprende un entorno de ejecución dispuesto para interpretar el código orientado a objetos tal como se establece en la reivindicación 10, y un medio legible por máquina tal como se establece en la reivindicación 21.
Se han presentado las realizaciones de paralelizaci�n y/o instrumentaci�n de un marco de programación orientado a
35 grafos de productores. En una representación, Se recibe una solicitud para ejecutar el programa de aplicación, donde el código fuente orientado a objetos del programa incluye métodos y las declaraciones de las dependencias de los productores, estas declaraciones identifican a un grupo de cero o más productores de un método determinado. El productor es, al menos, una instancia y un método asociado con esa instancia. Además, la ejecución del programa de aplicación puede ser paralelizada, basada en la dependencia entre los productores del programa de aplicación utilizando el entorno de ejecución. En algunas representaciones, el programa de aplicación se instrumenta usando el entorno de ejecución.
45 La invención puede entenderse mejor haciendo referencia a la siguiente descripción y a los dibujos adjuntos que se utilizan para ilustrar las realizaciones de la invención. En los dibujos:
La figura 1A muestra un diagrama de bloque que ilustra la relación entre una declaración de dependencia de un productor, en un método perteneciente a una clase del código fuente orientado a objetos, con una instancia del productor basado en un método de la instancia dada, según la representación de la invención.
La figura 1B ilustra las relaciones de ejemplo entre el productor 110A y el productor padre 114A.1 de acuerdo con una realización de la invención;
55 La figura 1C ilustra las relaciones de ejemplo entre el productor 110A y el productor descendiente 112A.1 de acuerdo con una realización de la invención;
La figura 1D ilustra algunas combinaciones adicionales de ejemplo de las relaciones de los productores padre 114 y los productores descendientes 112 al productor 110A de acuerdo con una realización de la invención;
La figura 1E ilustra esas instancias diferentes de la misma clase que pueden tener los productores basadas en los mismos y/o diferentes métodos de acuerdo con una realización de la invención;
La figura 2 es un diagrama de bloques que ilustra la capacidad de reutilización de un entorno de ejecución con el 65 soporte de programación orientada a grafos del productor de acuerdo con una realización de la invención;
La figura 3A es un diagrama de bloques que ilustra un entorno de ejecución con el soporte de programación orientada a grafos de productor de acuerdo con una realización de la invención;
La figura 3B es un diagrama de bloques que ilustra un entorno de ejecución con el soporte de programación 5 orientada grafo de productor que también soporta la ejecución incremental y las salidas anuladas de los productores de acuerdo con una realización de la invención;
La figura 4A es un diagrama de bloques que ilustra el descubrimiento y la construcción de un grafo de productor de ejemplo de acuerdo con una realización de la invención;
La figura 4B es un diagrama de bloques que ilustra la ejecución inicial del grafo de productor de la figura 4A según una realización de la invención;
La figura 4C es un diagrama de bloques que ilustra la ejecución incremental del grafo de productor de la figura 4B de 15 acuerdo con una realización de la invención;
La figura 4D es un diagrama de bloques que ilustra la ejecución incremental del grafo de productor de la figura 4B después de que el productor dependiente 2 haya sido anulado de acuerdo con una realización de la invención;
La figura 4E es un diagrama de bloques que ilustra la ejecución incremental del grafo de productor de la figura 4B después de que el productor dependiente 2 se haya anulado y el productor fuente independiente 3 se haya modificado de acuerdo con una realización de la invención;
La figura 5A es un diagrama de bloques que ilustra el descubrimiento y la construcción de un grafo de productor de 25 ejemplo que incluye una dependencia no resuelta de acuerdo con una realización de la invención;
La figura 5B es un diagrama de bloques que ilustra la ejecución inicial del grafo de productor de la figura 5A y la resolución de la dependencia no resuelta de acuerdo con una realización de la invención;
La figura 5C es un diagrama de bloques que ilustra la ejecución inicial del grafo de productor de la figura 5A y/o la ejecución adicional del grafo de productor de la figura 5B de acuerdo con una realización de la invención;
La figura 5D es un diagrama de bloques que ilustra la ejecución inicial del grafo de productor de la figura 5A y/o la ejecución adicional del grafo de productor de las figuras 5B y 5C de acuerdo con una realización de la invención;
35 La figura 6 es un diagrama de flujo que ilustra un flujo de ejecución lógica de un cliente de ejecución y su relación con un entorno de ejecución con el soporte de programación orientado al grafo de productor según una realización de la invención;
La figura 7A ilustra un pseudo código de una declaración de dependencia del productor de un método que utiliza dependencias de acceso directo de acuerdo con una realización de la invención;
La figura 7B es un diagrama de bloques de productores de ejemplo de acuerdo con una realización de la invención;
45 La figura 7C ilustra un pseudo código de una declaración de dependencia del productor de un método que utiliza una dependencia sin acceso directo, e ilustra un diagrama de bloques de productores de ejemplo de acuerdo con una realización de la invención;
La figura 7D ilustra un pseudo código de una declaración de dependencia de productor de un método que utiliza una dependencia sin acceso directo de acuerdo con una realización de la invención;
La figura 7E es un diagrama de bloques de productores de ejemplo de acuerdo con una realización de la invención;
La figura 7F es un diagrama de bloques de unas dependencias de ejemplo mediante el uso de una dependencia 55 ascendente con un productor de determinación de dependencia de acuerdo con una realización de la invención;
La figura 7G es un diagrama de bloques de posibles dependencias de ejemplo mediante el uso de una dependencia débilmente restringida con un productor de determinación de dependencia de acuerdo con una realización de la invención;
La figura 7H ilustra grafos de productores de ejemplo de productores estándar de acuerdo con una realización de la invención;
La figura 7I ilustra un ejemplo de las dependencias de productores y los productores de determinación de 65 dependencia para descubrir, para resolver, y construir el grafo de productor de la figura 7H.
La figura 8A es un diagrama de bloques que ilustra un primer marco de ejemplo en el que las aplicaciones se proporcionan a los usuarios finales de acuerdo con una realización de la invención;
La figura 8B es un diagrama de bloques que ilustra un segundo ejemplo de marco en el que las aplicaciones se 5 proporcionan a los usuarios finales de acuerdo con una realización de la invención;
La figura 8C ilustra una pantalla y de ejemplo y el uso de selección de celdas libres con el módulo de interfaz de usuario gráfico de diseño de la salida del productor interactivo configurable 840 de acuerdo con una realización de la invención;
La figura 8D ilustra otra pantalla de ejemplo y el uso de selección de celdas libres con el módulo de interfaz de usuario gráfico de diseño de la salida del productor interactivo configurable 840 de acuerdo con una realización de la invención;
15 La figura 8E muestra un ejemplo de pantalla y del uso de creación de la tabla con el módulo de interfaz de usuario gráfico de diseño de la salida del productor interactivo configurable 840 de acuerdo con una realización de la invención;
La figura 8F ilustra otra pantalla de ejemplo y el uso de creación de la tabla con el módulo de interfaz de usuario gráfico de diseño de la salida del productor interactivo configurable 840 de acuerdo con una realización de la invención;
La figura 9A es un diagrama de bloques que ilustra un primer esquema de la distribución de un entorno de ejecución con el soporte de programación orientada al grafo de productor de acuerdo con una realización de la invención;
25 La figura 9B es un diagrama de bloques que ilustra un segundo esquema para la distribución de un entorno de ejecución con el soporte de programación orientada al grafo de productor de acuerdo con una realización de la invención;
La figura 9C es un diagrama de bloques que ilustra un tercer esquema de la distribución de un entorno de ejecución con el soporte de programación orientada al grafo de productor de acuerdo con una realización de la invención;
La figura 10 es un diagrama de bloques de una ejecución de ejemplo de acuerdo con una realización de la invención;
35 La figura 11A es un diagrama de bloques de un ejemplo de la estructura de seguimiento de clase 1092 de la figura 10 de acuerdo con una realización de la invención;
La figura 11B es un diagrama de bloques de un ejemplo de la estructura de seguimiento de instancia 1065 de la figura 10 de acuerdo con una realización de la invención;
La figura 11C es un diagrama de bloques de un ejemplo de la estructura de grafo(s) de productor 1060 de la figura 10 de acuerdo con una realización de la invención;
45 La figura 11D es un diagrama de bloques de un ejemplo de la estructura de seguimiento de método 1058 de la figura 10 de acuerdo con una realización de la invención;
La Figura11E es un diagrama de bloques de un ejemplo de un mapa local utilizado en forma serializada multiprocesamiento de acuerdo con una realización de la invención;
La Figura11F es un diagrama de bloques de un ejemplo de una estructura de ajuste de entorno de ejecución 1048 de la figura10 de acuerdo con una realización de la invención;
La figura11G es un diagrama de bloques de un ejemplo de una estructura de decisión configurable basada en los 55 productores 1049 de la figura 10 de acuerdo con una realización de la invención;
La Figura12A es un diagrama de bloques que ilustra detalles adicionales de la figura 1 0para ofrecer multiprocesamiento de acuerdo con una realización de la invención;
La figura 12B es un diagrama de bloques que ilustra detalles adicionales de la figura 10 para ofrecerlas dependencias de tipo contingente y suscripción dinámicas de productores de acuerdo con una realización de la invención;
La figura 13A ilustra un pseudo código de declaraciones de dependencia de productores de los métodos que utilizan
65 unadependencia no dinámica, sin acceso directo (no contingente, sin suscripción) de acuerdo con una realización de la invención;
La figura 13B es un diagrama de bloques productores que ilustran un ejemplo de dependencia de productor sin acceso directo, no dinámica (no contingente, sin suscripción) de acuerdo con una realización de la invención;
5 La figura 13C ilustra un pseudo código de declaraciones de dependencia de productores de los métodos que utilizan una dependencia de productor sin acceso directo, contingente, sin suscripción de acuerdo con una realización de la invención;
La figura 13D es un diagrama de bloques de productores que ilustran un ejemplo de dependencia de productor sin 10 acceso directo, contingente, sin suscripción de acuerdo con una realización de la invención;
La figura 13E muestra un pseudo-código de las declaraciones de dependencia de productores de los métodos que utilizan tanto una dependencia de productor sin acceso directo, contingente, sin suscripción y una dependencia de productor con acceso directo, contingente, sin suscripción de acuerdo con una realización de la invención;
15 La figura 13F es un diagrama de bloques de productores que ilustran una dependencia de productor sin acceso directo, contingente, sin suscripción y una dependencia de productor de acceso directo, contingente, sin suscripción de acuerdo con una realización de la invención;
20 La figura 13G ilustra un pseudo código de declaraciones de dependencia de productores de los métodos que utilizan una dependencia de productor de acceso directo, contingente, sin suscripción y una dependencia de productor de acceso directo, no contingente, sin suscripción de acuerdo con una realización de la invención;
La figura 13H es un diagrama de bloques de productores que ilustran un ejemplo de dependencia del productor con 25 acceso directo, contingente, sin suscripción y una dependencia de productor con acceso directo, no contingente, sin suscripción de acuerdo con una realización de la invención;
La figura 13I ilustra un pseudo código de declaraciones de dependencia de productores de los métodos que utilizan una dependencia de productor con acceso directo, no dinámico (no contingente, sin suscripción) de acuerdo con una 30 realización de la invención;
La figura 13J es un diagrama de bloques de productores que ilustran un ejemplo de dependencia de productor con acceso directo, no dinámico de acuerdo con una realización de la invención;
35 La figura 14A es un diagrama de bloques de un ejemplo del registro de suscripción 1250 de la figura 12 de acuerdo con una realización de la invención;
La figura 14B es un diagrama de bloques de productores de ejemplo que ilustran una dependencia de productor de suscripción no contingente, absorbente de acuerdo con una realización de la invención;
40 La figura 14C es un diagrama de bloques de productores de ejemplo que ilustran una dependencia de productor de suscripción no contingente, adherente de acuerdo con una realización de la invención;
La figura 14D ilustra la elección de un productor padre basada en un productor de determinación de dependencia 45 padre creado por una suscripción adherente de acuerdo con una realización de la invención;
La figura 14E ilustra la elección de un productor padre basada en un productor determinación de dependencia padre creada por un productor de determinación de dependencia descendiente, cuyo productor de determinación de dependencia descendiente est� vinculado por una dependencia de secuenciaci�n, de acuerdo con una realización
50 de la invención;
La figura 15 es un diagrama de flujo para la instanciaci�n de nuevas instancias de acuerdo con una realización de la invención;
55 La figura 16A es un diagrama de flujo de instanciaci�n de nuevos productores y productores sin anulación de acuerdo con una realización de la invención;
La Figura 16B es un diagrama de flujo para el bloque 1623 de la figura 16A acuerdo con una realización de la invención;
60 La figura 17 es un diagrama de flujo para el bloque 1650 de la figura 16A de acuerdo con una realización de la invención;
La figura 18 es un diagrama de flujo para el bloque 1745 de la figura 17 de acuerdo con una realización de la 65 invención; La figura 19 es un diagrama de flujo para el bloque 1630 de la figura 16A de acuerdo con una realización de la invención;
La figura 20 es un diagrama de flujo para los bloques 1635 y 1670 de la figura 16A de acuerdo con una realización 5 de la invención;
La figura 21A es un diagrama de flujo para reemplazar los productores de acuerdo con una realización de la invención;
La Figura 21B es un diagrama de flujo para reemplazar los ajustes del modo de ejecución de productores de acuerdo con una realización de la invención;
La Figura 21C es un diagrama de flujo para la redefinici�n de valores de modo de ejecución global a nivel del entorno de ejecución de acuerdo con una realización de la invención;
15 La Figura 21D muestra un diagrama de flujo de la configuración del modo de ejecución de reemplazo, basado en la estructura configurable de decisión de los productores según una realización de la invención;
La figura 22A es una parte de un diagrama de flujo para la ejecución de los grafo(s) productores actuales de acuerdo con una realización de la invención;
La figura 22B es otra parte de un diagrama de flujo para la ejecución de los grafo(s) productores actuales de acuerdo con una realización de la invención;
25 La figura 23 es un diagrama de flujo para el bloque 2205 de la figura 22A de acuerdo con una realización de la invención;
La figura 24 es un diagrama de flujo para el bloque 2260 de la figura 22B de acuerdo con una realización de la invención; y
La figura 25 es una parte de un diagrama de flujo para la ejecución en paralelo de un conjunto de productores listos sustancialmente de acuerdo con una realización de la invención;
La Figura 26 es otra parte del diagrama de flujo para la ejecución en paralelo de un conjunto de productores listos 35 sustancialmente de acuerdo con una realización de la invención;
La Figura 27A es una parte de un diagrama de flujo para crear instancias de estructuras de datos antes de ejecutar el conjunto de productores listos acuerdo con una realización de la invención;
La Figura 27B es otra parte del diagrama de flujo para crear instancias de estructuras de datos antes de ejecutar el conjunto de productores listos acuerdo con una realización de la invención;
La Figura 28A es un diagrama de flujo para la ejecución de los productores que utilizan múltiples hilos de acuerdo con una realización de la invención;
45 La Figura 28B es un diagrama de flujo que ilustra la ejecución de un hilo en múltiples hilos de acuerdo con una realización de la invención;
La Figura 28C es un diagrama de flujo para el tratamiento de retro llamada de terminación de hilo de acuerdo con una realización de la invención;
La Figura 29A es una parte de un diagrama de flujo para la ejecución de los productores utilizando
multiprocesamiento y ejecución local de acuerdo con una realización de la invención;
55 La Figura 29B es otra parte del diagrama de flujo para la ejecución de los productores utilizando multiprocesamiento y ejecución local de acuerdo con una realización de la invención;
La figura 30 es un diagrama de flujo para serializar las entradas y / o una instancia subyacente de un productor a ser multiprocesado de acuerdo con una realización de la invención;
La Figura 31A es parte de un diagrama de flujo para la informática distante de acuerdo con una realización de la invención;
La Figura 31B es otra parte del diagrama de flujo para la informática distante de acuerdo con una realización de la 65 invención; y
La figura 32 es un diagrama de flujo para la ejecución local de productores de acuerdo con una realización de la
invenci�n.
5 En la siguiente descripción, numerosos detalles específicos, tales como implementaciones lógicas, códigos de operación, medios para especificar los operandos, implementaciones de reparto/compartici�n/duplicación de recursos, los tipos e interrelaciones de los componentes del sistema y opciones de partición/integración lógica que se establecen con el fin de proporcionar una mayor comprensión completa de la invención. Se apreciar�, sin embargo, por parte de un experto en la materia, que la invención puede ser practicada sin estos detalles específicos. En otros casos, las estructuras de control, circuitos de nivel de puerta y las secuencias de instrucciones de software no se han mostrado en detalle para no oscurecer la invención. Los expertos en la materia, con las descripciones incluidas, ser�n capaces de aplicar la funcionalidad adecuada, sin experimentación indebida.
15 A menos que se especifique lo contrario, las líneas de trazos en las figuras (con la excepción de las líneas de trazos divisorias) se utilizan para representar elementos opcionales en las figuras. Sin embargo, no se debe suponer que todos los elementos opcionales se muestran mediante líneas de trazos, sino que los que se muestran en líneas de trazos fueron elegidos para una variedad de razones (por ejemplo, se podrían mostrar fácilmente, para proporcionar mayor claridad, etc.)
Las referencias en la memoria "una realización", "un ejemplo de realización", etc., indican que la realización descrita puede incluir una característica, o estructura particular, pero no necesariamente todas las realizaciones pueden incluir la característica, o estructura particular. Además, estas frases no necesariamente hacen referencia a la misma realización. Además, cuando una característica o estructura particular que se describe en conexión con una 25 realización, se afirma que est� dentro del conocimiento de un experto en la técnica para afectar a esta característica
o estructura en relación con otras realizaciones si est� o no descrita explícitamente.
En la siguiente descripción y en las reivindicaciones, los términos "acoplado" y "conectado", junto con sus derivados, pueden ser utilizados. Debe entenderse que estos términos no est�n pensados como sinónimos entre s�. Por el contrario, en realizaciones particulares, "conectado" puede ser utilizado para indicar que dos o más elementos est�n en contacto físico o eléctrico directo uno con otro. "Acoplado" puede significar que dos o más elementos est�n en contacto directo físico o eléctrico. Sin embargo, "acoplado" también puede significar que dos o más elementos no est�n en contacto directo entre s�, pero aún as� cooperan o interact�an el uno con el otro.
35 En algunos casos, las operaciones de diagramas de flujo se describen con referencia a las realizaciones de ejemplo de los otros diagramas de bloques. Sin embargo, debe entenderse que las operaciones de los diagramas de flujo pueden realizarse por realizaciones de la invención distintas de las descritas con referencia a estos otros diagramas de bloques, y que las realizaciones de la invención descritas con referencia a estos otros diagramas de bloques pueden realizar operaciones diferentes a las descritas con referencia a los diagramas de flujo.
Las técnicas que se muestran en las figuras se pueden implementar utilizando códigos y datos almacenados y ejecutados en uno o más ordenadores. Estos ordenadores almacenan y comunican (internamente y con otros equipos a través de una red) códigos y datos utilizando medios legibles por máquina, tal como medios de almacenamiento de máquina (por ejemplo, discos magnéticos, discos ópticos; memoria de acceso aleatorio, 45 memoria de sólo lectura, dispositivos de memoria flash) y medios de comunicación de la máquina (por ejemplo, eléctricos, ópticos, ac�sticos u otras formas de señales reproducidas, tal como ondas portadoras, señales infrarrojas, señales digitales, etc.). Además, estos ordenadores incluyen típicamente un conjunto de uno o más procesadores acoplados a uno o más de otros componentes, tales como un dispositivo de almacenamiento, una serie de dispositivos de entrada/salida de usuario (por ejemplo, un clavado y una pantalla), y una conexión de red. El acoplamiento del conjunto de procesadores y otros componentes es normalmente a través de uno o más buses y puentes (también denominados como controladores de bus). El dispositivo de almacenamiento y el tráfico de la red representan, respectivamente, uno o más medios de almacenamiento de la máquina y los medios de comunicación de la máquina. As�, el dispositivo de almacenamiento de un sistema inform�tico dado típicamente almacena códigos y los datos para su ejecución en el conjunto de uno o más procesadores de dicho equipo. Por supuesto, una o más
55 partes de una realización de la invención pueden ser implementadas utilizando distintas combinaciones de software, firmware y/o hardware.
Informaci�n general
De acuerdo con un aspecto de la invención, un productor es al menos una instancia específico (u objeto) y un método específico, de tal manera que si el productor se ejecuta durante el tiempo de ejecución, el método específico se ejecuta en la instancia específica. Por lo tanto, un productor determinado se instancia a partir de una instancia dada y un método dado asociado a esa instancia. Al igual que las clases, instancias y métodos, los productores son elementos básicos o construcciones manipuladas por el entornode ejecución. Por lo tanto, la instanciaci�n de un 65 productor es interpretada y seguida por el entornode ejecución, y por lo tanto, el entorno de ejecución sigue la combinación de instancias y métodos representados por los productores. En otras palabras, un productor es una
construcci�n que se puede instanciar en tiempo de ejecución y es seguida y ejecutada por el entorno de ejecución, incluyendo al menos una instancia y un método asociado a esta, tal que la ejecución de los tiempos de ejecución del productor resulta en el método del productor que se ejecuta en la instancia del productor. Además, el método de un productor tiene asociado con el mismo una declaración de la dependencia del productor que identifica, con un
5 conjunto de cero o más dependencias de productores, un conjunto de cero o más productores para un productor determinado. En concreto, las dependencias de los productores se declaran para los métodos que utilizan las declaraciones de dependencia de los productores, la declaración de la dependencia del productor de un determinado método puede incluir cero o más dependencias de productores, y cada dependencia del productor identifica un conjunto de cero o más productores. Por lo tanto, las declaraciones de dependencia de los productores y las dependencias de los productores que se definen se interpretan y son seguidos por el entorno de ejecución, y por lo tanto, este realiza un seguimiento de las relaciones entre los distintos productores indicados por las declaraciones de dependencia de los productores.
Cuando un productor dado depende de un conjunto de uno o más de otros productores, el entorno de ejecución
15 asegurar� la ejecución del conjunto de los otros productores antes de que el productor dado. Por lo tanto, las declaraciones de dependencia de los productores representan las relaciones de ejecución entre los productores, mientras que los productores representan las operaciones a realizar (métodos) e instancias. Aunque en algunas realizaciones de la invención se permiten las dependencias de los productores padre sobre los productores descendientes para ser declaradas en la declaración de dependencia del productor asociado con el método del productor padre (la declaración de la dependencia del productor del productor padre se identifica con cualquiera de los productores descendientes–indicado aquí como declarado descendente), otras realizaciones de la invención también permiten dependencias para ser declaradas en la declaración de dependencia del productor asociado al método(s) del productor(es)descendiente(s) (la declaración de dependencia del productor del productor descendiente se identifica uno o más productores padre -indicado aquí como declarado ascendente).
25 En diferentes realizaciones de la invención, un productor identifica cosas adicionales. Por ejemplo, mientras que en algunas realizaciones de la invención, un productor es al menos una instancia y un método asociado con esa instancia, en otras realizaciones de la invención, un productor es una clase, una instancia de esa clase, y un método asociado con esa instancia (por ejemplo, un productor directamente puede incluir una clase, instancia, y un método; un productor directamente puede incluir una instancia y un método, mientras que indirectamente la identificación de una clase de esa instancia a través de una referencia (por ejemplo, una referencia en la instancia)). Aunque la invención se puede utilizar en el contexto del código escrito en diferentes lenguajes de programación (por ejemplo, código orientado a objetos escrito en un lenguaje reflexivo orientado a objetos; código orientado a objetos escrito en un lenguaje reflexivo basado en objetos, el código escrito en un lenguaje de método no reflexivo orientado a objetos
35 no reflexivos y transformado en código de lenguaje reflexivo orientado a objetos), las realizaciones de la invención se describirán, a modo de ejemplo y no de limitación, con referencia a lenguajes de programación reflexivos orientados a objetos y con referencia a los productores que directamente incluyen clases, instancias y métodos. Además, aunque en una realización de la invención el método de un productor es un método de instancia (un método que puede utilizar campos de instancia además de cualquier entrada recibida como argumentos), realizaciones alternativas de la invención también pueden o alternativamente, soportar el método de un productor que es un método de clase (métodos que reciben todas las entradas como argumentos y/o utiliza las variables de instancia independientes) (donde el método de un productor es un método de instancia, la instancia del productor es una instancia de una clase, mientras que en el método de un productor es un método de clase, la instancia de ese productor es una instancia de meta-clase que representa la clase).
45 La figura 1A es un diagrama de bloques que ilustra la relación de una declaración de dependencia del productor para un método de una clase en un código fuente orientado a objetos de un productor que incluye la clase, una instancia dada de esa clase, y un método de esa clase, de acuerdo con una realización de la invención. En la figura 1A, se muestra un código fuente orientado a objetos 100 que incluye una clase 102, que a su vez incluye un método 104, parámetros del modo de ejecución 105 y una declaración de dependencia del productor 106 para el método
104. Por supuesto, la clase 102 normalmente incluye uno o más campos (no mostrados) y métodos adicionales (no mostrados). Además, el código fuente orientado a objetos 100 típicamente incluye clases adicionales.
Durante el tiempo de ejecución, una instancia 108 de la clase 102 se instancia. La instancia 108 incluye los datos de
55 los campos de la clase 102. Además, un productor 110 se instancia, cuando el productor 110 identifica la clase 102, la instancia108 de la clase 102 (que tiene asociado con la misma el m�todo104 de la clase 102), y el m�todo104 de la clase 102. La declaración de dependencia del productor 106 identifica al entornode ejecución de un conjunto de cero o más productores 112 (en adelante, los productores descendientes del productor 110) que debe ser ejecutado antes de la ejecución del productor 110. En otras palabras, el productor 110 depende del conjunto de cero o más productores 112. Además o en lugar de las salidas de consumo del conjunto del productor112, el productor 110 puede consumir datos de la instancia 108. Además, el productor 110 proporciona al menos una salida, cuya salida puede ser interna a la instancia 108 (y por lo tanto, modificar los datos del ejemplo 108) y/o puede ser externa, de cualquier manera, la salida del productor 110 puede ser consumida por un conjunto o cero o más de otros productores 114 (referidos como productores padre del productor 110)). Tal como se ha indicado anteriormente, y
65 como se describe con más detalle más adelante en este documento, la declaración de dependencia del productor 106, en algunas realizaciones de la invención, también puede identificar el entornode ejecución cero o más de los
productores 114.
Se debe entender que las entradas y las salidas de los productores se basan en las entradas y las salidas de los métodos en los que se basan los productores. Como tal, estas entradas y salidas pueden representar varios 5 parámetros que tienen una variedad de estructuras de datos.
La declaración de dependencia del productor para un determinado m�todoidentifica en el tiempo de ejecución del conjunto de cero o más productores para instanciarse y ejecutarse. A modo de ejemplo, cuando una declaración dependencia del productor (por ejemplo, la declaración de dependencia del productor 106) para un método dado (por ejemplo, el método 104) identifica una dependencia del productor en un productor determinado (cuyo productor dado identifica una primera clase, una primera instancia de esa clase, y un primer método de esa primera instancia) (por ejemplo, uno del conjunto de los productores 112), a continuación, la declaración de dependencia del productor del método dado identifica el tiempo de ejecución que la primera instancia debe instanciarse (si no est� ya instanciada) y que el primer método utiliza para crear una instancia del productor dado para la primera instancia (en
15 estos ejemplos, primero no significa ubicación u orden).
En funcionamiento, cuando, durante el tiempo de ejecución, un conjunto de uno o más productores son designados como de interés y tienen las dependencias de los productores declaradas por los mismos, el entornode ejecución: 1) genera de forma automática (descubre, desarrolla, y, opcionalmente, resuelve) un conjunto de uno o más grafos, que pueden ser de múltiples niveles y pueden ser de una variedad de formas (por ejemplo, cadena, árbol), desde el conjunto dado de productores designados como de interés hacia abajo a los productores de origen basados en las declaraciones de dependencia de los productores 106, y 2) la ejecución de las secuencias de los productores de la serie de grafos para generar la(s) salida(s) del conjunto dado de productores designados como de interés. Por lo tanto, el entornode ejecución utiliza las declaraciones de dependencia de los productores 106 para determinar qué
25 métodos de qué instancias con qué argumentos para ejecutar, y cuándo para fines de sincronización.
En algunas realizaciones, el entorno de ejecución comprueba la configuración en modo de ejecución 105 para determinar el modo de ejecución de un productor. Diferentes modos de ejecución pueden ser soportados en distintos sistemas. Algunos ejemplos incluyen los modos de ejecución multihilo, multi-procesamiento, y la ejecución local.
Llas dependencias de los productores representan la secuencia de ejecución de los mismos en el entorno de ejecución. Sin embargo, además de indicar la secuencia de ejecución, las dependencias de los productores pueden representar diferentes relaciones de entrada y de salida en diferentes realizaciones de la invención. Por ejemplo, diferentes realizaciones de la invención pueden soportar una o más de las dependencias del productor de 35 argumentos, dependencias del productor de campo y dependencias del productor sólo de secuenciaci�n (dependencias de los productores solamente de secuenciaci�n a las que se refiere el presente documento con la abreviatura dependencias de productores de secuenciaci�n). Aunque cada una de las dependencias del productor de argumentos, las dependencias del productor de campo y dependencias del productor de secuenciaci�n representan las relaciones de secuenciaci�n de ejecución entre los productores, el argumento y las dependencias del productor de campo, además, representan los datos de los cuales el entornode ejecución es consciente. En concreto, una dependencia del productor de argumento hace que el entornode ejecución para asignar la salida de un productor descendiente como parámetro de entrada a un productor padre, mientras que una dependencia del productor de campo indica el uso de un campo de una instancia. Independientemente de la entrada en relación con la salida representada por una dependencia del productor, asegurando el uso apropiado de las dependencias del
45 productor que los productores que acceden a la información que se secuencia después de que los productores que impactan la información.
Las dependencias de secuenciaci�n pueden ser usadas para una variedad de propósitos, incluyendo asegurar el orden de ejecución entre los productores que modifican los datos en una manera en la que el entornode ejecución no es consciente y productores que consumen los datos (un productor descendiente puede escribir sus salidas de una manera que requiera el método del productor padre para incluir código para acceder a la salida (por ejemplo, un método que impacta en el ambiente al afectar a una salida que no es la salida del productor regular y, como tal, que no es detectado por el entornode ejecución -tal como un método que establece una variable global, que define un campo en una instancia que no es la salida del productor, que afecta a un origen de datos externo, etc.)). As�, una
55 dependencia de secuenciaci�n refleja una dependencia de un productor padre en un productor descendiente, pero requiere salidas que necesitan ser proporcionadas, si las hubiere, entre s� que se producen a través de la escritura del código (por ejemplo, código en el método del productor descendiente para escribir una salida a un mecanismo dado (tal como establecer una variable global, el impacto de una fuente de datos externa, establecer un campo de un ejemplo que no es la salida del productor, etc.) y un código en el método del productor padre para leer la salida del mecanismo dado). De esta manera, las dependencias de secuenciaci�n permiten que el entornode ejecución sincronice la ejecución de los productores padre que se basan en una salida que el sistema en tiempode ejecución no puede detectar.
En una realización de la invención, la declaración de dependencia del productor 106 de un determinado método
65 identifica solamente las dependencias directas en los productores (es decir, descendientes directos (hijos), en contraste con los descendientes indirectos (nietos, bisnietos, etc.)). En esta realización, cada declaración de dependencia del productor proporciona sólo un único nivel o capa de productores cuyas salidas pueden ser utilizadas directamente por un productor instanciado a partir del método dado, dejando el descubrimiento/construcción/resolución de capas adicionales del grafo(s) del productor para procesamiento del entorno de ejecución de otras declaraciones de dependencia de los productores.
5 De acuerdo con una realización de la invención, las dependencias de los productores identificados por la declaración de dependencia de productor 106 son útiles en la aplicación de la paralelizaci�n y la instrumentaci�n del programa de aplicación, incluyendo los productores. Para paralelizar el programa de aplicación, dos o más productores del programa de aplicación se ejecutan sustancialmente aproximadamente en el mismo tiempo utilizando el mismo modo de ejecución o diferentes. Para instrumentarla aplicación, las métricas de los productores se adquieren a medida que estos se ejecutan. Los detalles de paralelizaci�n y la instrumentaci�n se discuten más adelante con referencia a formas de representación de la invención.
Claves de ejemplo
15 Un productor puede ser visto como un conjunto de identificadores múltiples, un identificador para cada nivel adicional de granularidad especificado. Además, algunas realizaciones de la invención aplican cada identificador como una clave separada, mientras que otras realizaciones tienen determinados identificadores que comparten una clave. A modo de ejemplo, algunas realizaciones de la invención implementan un productor como un triplete de clase, instancia, y método e implementan las claves, de tal manera que cada parte del triplete se identifica por una clave separada (una clave de clase, una clave de instancia, y una clave de método) y el productor se identifica por la combinación de la clave de clase, la clave de instancia, y la clave de método (la clave del productor).
Las realizaciones de la invención que usan claves pueden variar en la unicidad de las claves utilizadas. Por ejemplo,
25 en una realización de la invención, cada clave de clase es única, cada clave de instancia es única en todos los casos de todas las clases, y cada clave de método es única en todos los métodos de todas las clases. Como otro ejemplo, en otras realizaciones de la invención, cada clase tiene una clave única, cada instancia de una clase determinada tiene una clave única (a través de las instancias de la clase), y cada método de una clase tiene una única clave (a través de los métodos de la clase), pero instancias de clases diferentes pueden tener la misma clave de instancia, y métodos de clases diferentes pueden tener la misma clave de método; este enfoque más adelante se utilizar� en el resto del documento a modo de ejemplo y no de limitación. Por ejemplo, supongamos que una de primera clase incluye métodos y tiene una clave para cada uno de estos métodos que es único dentro de la primera clase, a continuación, las instancias de esta clase (que cada una tiene una clave única entre s�) tiene las mismas claves de método asociadas con las mismas. Como otro ejemplo, supongamos que una segunda clase diferente incluye
35 métodos (alguno, todos, o ninguno del mismo que los métodos de la primera clase) que tienen las mismas claves del método que las utilizadas para la primera clase, como tal, un ejemplo de esta clase diferente se puede asociar con las mismas claves del método que se asocian con una instancia de la primera clase.
El uso de las claves permite una gran variedad de características, incluyendo: 1) el seguimiento de cada entidad identificada por los identificadores de un productor (por ejemplo, el seguimiento de cada clase, instancia, y método), 2) varios productores padre (sin darse cuenta de su existencia mutua) para conectar con el productor de un mismo descendiente en base a sus declaraciones de dependencia de los productores (que especifican las dependencias de los productores con las claves de productores), etc. En una realización de la invención, la clave de instancia es una instancia de una clase (Clave de Instancia) que soporta dos elementos: una naturaleza de clave de instancia que
45 indica si el identificador de la clave es una referencia a la instancia o de otro objeto (como una cadena), y un identificador de clave que puede ser una referencia a la instancia, o a otro objeto (como una cadena). El almacenamiento de una referencia a la instancia en la clave de la instancia ahorra al programador inventar un nombre para identificar estos casos.
Relaciones de ejemplo
En el contexto de la discusión anterior en relación con un productor que se est� viendo como un conjunto de múltiples identificadores (con un identificador para cada nivel adicional de granularidad especificada), en una realización de la invención, las diversas relaciones entre el soporte de un productor y sus hijos y los padres son
55 aquellos en los que al menos un identificador es diferente entre un productor y su conjunto de cero o más productores padre y un identificador es diferente entre un productor y cada uno de su conjunto de cero o más productores descendientes. A modo de proporcionar algunas relaciones de ejemplo, supongamos que un primer productor se instancia, donde el primer productor es una primera instancia de una de primera clase y un primer método de esa primera clase, y se supone que la declaración de dependencia del productor para ese primer método identifica el entornode ejecución de un segundo productor como descendiente, entonces el segundo productor puede ser: 1) la primera instancia de la primera clase y un segundo método de esa primera clase, 2) una segunda instancia de la primera clase y un segundo método de esa primera clase, o 3) una segunda instancia de la primera clase y el primer método de la primera clase, o 4) una instancia de una segunda clase y un método de esa segunda clase. En tal caso, el primer productor depende del segundo productor -por lo tanto, representa una entrada en la
65 relación de salida del primer productor al segundo productor. Diversas relaciones y combinaciones de estas relaciones se describen a continuación para una realización de la invención que utiliza un lenguaje orientado a
objetos y en el que un productor identifica al menos una clase, instancia, y método.
Las figuras 1A-1D ilustran relaciones de ejemplo entre un productor dado, su conjunto de productores padre, y su conjunto de productores descendientes de acuerdo con una realización de la invención. Las figuras 1B-1D muestran 5 cada una lo siguiente: 1) una definición de clase 102A, incluyendo los métodos 104A-C y las declaraciones de los productores de dependencia 106A-C para cada uno de estos métodos, respectivamente, 2) una definición de clase 102B incluyendo los métodos 104D-E y las declaraciones de dependencia del productor 106D-E para cada uno de esos métodos, respectivamente, y 3) una definición de clase102C, incluyendo el m�todo104F y la declaración de dependencia del productor 106Fpara ese método; 4) una instancia 108A de la clase 102A, 5) un productor 110A que 10 identifica la clase102A, la instancia 108A, y el método 104A, y 6) un productor 112A.1 y un productor 114A.1 que representan respectivamente uno del conjunto de productores 112 y 114. Las líneas de trazos con letras en caja en las mismas se utilizan en las figuras 1B-1D para ilustrar las relaciones de ejemplo. De este modo, la colección de las líneas de trazos con una caja A en las mismas representa una relación. Las relaciones en la figura 1B se pueden combinar con las relaciones en la figura 1C, como tal, estas combinaciones representan las combinaciones de las
15 relaciones entre los productores padre 114A y los productores descendiente 112A alproductor110A. Además, la figura 1D ilustra algunas combinaciones adicionales de ejemplo de las relaciones entre los productores padre 114A y los productores descendientes 112A y el productor 110A.
La figura 1B ilustra las relaciones de ejemplo entre el productor 110A y el productor padre 114A.1 de acuerdo con
20 una realización de la invención. La figura 1B incluye adicionalmente una instancia 108B. El conjunto de productores 114 se identifica por otras declaraciones de dependencia de los productores del método(s) diferente(s) de la misma clase, diferentes instancias de la misma clase, y/o método(s) de una clase diferente, y por lo tanto, cada uno de la serie de productores 114 puede ser: 1) de la misma instancia que el productor 110A (instancia 108A de la clase 102A) y un método diferente de esa instancia (ilustrado por la caja A en las líneas de trazos de la instancia 108A
25 para el productor 114A.1 y desde el método 104B al productor 114A.1), 2) de una instancia diferente de la clase 102A y un método diferente de esa instancia (ilustrado por la caja B en las líneas de trazos de la clase 102A a la instancia 108B, desde la instancia 108B al productor 114A.1, y desde el método 104B al productor 114A.1), 3) de una instancia de una clase diferente y un método de esa instancia (ilustrado por la caja C en las líneas de trazos a partir de la clase 102B a la instancia 108B, desde la instancia 108B al productor 114A.1, y desde el método 104D al
30 productor 114A.1), o 4) de una instancia diferente de la clase 102A (instancia 108A) y el mismo método (método 104A) de esa instancia (por ejemplo, con una dependencia contingente -descrita más adelante en este documento) (ilustrada por la caja D en las líneas de trazos de la clase 102A a la instancia 108B, desde la instancia 108B para el productor 114A.1 , y desde el método 104A para el productor 114A.1); además, cuando hay múltiples productores en el conjunto de los productores 114, los productores 114 pueden formar parte de la misma instancia de la clase 102A,
35 diferentes instancias de la clase 102A, la misma instancia de una clase diferente, diferentes instancias de una clase diferente, y/o una mezcla de los anteriores.
La figura 1C ilustra las relaciones de ejemplo entre el productor 110A y el productor descendiente112A.1 de acuerdo con una realización de la invención. La figura 1C incluye adicionalmente una instancia 108C. Cada uno del conjunto 40 de productores 112A puede ser: 1) de la misma instancia que el productor 110A (instancia 108A de la clase 102A) y un método diferente de esa instancia (ilustrado por la caja E en las líneas de trazos de la instancia 108A al productor 112A.1 y desde el método 104C para el productor 112A.1), 2) de una instancia diferente de la clase 102A y un método diferente de esa instancia (ilustrada por la caja F en las líneas de trazos de la clase 102A en la instancia 108C, desde la instancia 108C al productor 112A.1, y desde el método 104C al productor 112A.1), 3) de una 45 instancia de una clase diferente y un método de esa instancia (ilustrada por la caja G en las líneas de trazos de la clase 102C a la instancia 108C, desde la instancia 108C al productor 112A.1, y desde el método 104F al productor 112A.1), o 4) de una instancia diferente de la clase 102A (instancia 108) y el mismo método (método 104A) de esa instancia (por ejemplo, con una dependencia contingente que se describe más adelante en este documento) (ilustrada por la caja H en las líneas de trazos de la clase 102A a la instancia 108C, desde la instancia 108C al 50 productor 112A.1, y desde el m�todo104A al productor 112A.1). As�, cada uno de los conjunto de productores 112A puede ser de la misma instancia que el productor 110A, de una instancia diferente de la clase 102A, o un ejemplo de una clase diferente; además, donde hay múltiples productores en el conjunto de los productores 112A, los productores 112A pueden formar parte de la misma instancia de la clase 102A, instancias diferentes de la clase 102A, la misma instancia de una clase diferente, diferentes instancias de una clase diferente, y/o una mezcla de los
55 anteriores.
La figura 1D ilustra algunas combinaciones adicionales de ejemplo de las relaciones de los productores padre 114 y los productores descendientes 112 alproductor110A de acuerdo con una realización de la invención. La figura 1D, además, incluye la instancia 108B y la instancia 108C. Las combinaciones de la figura 1D se muestran en la Tabla 1
60 a continuación:
TABLA 1
- Letra en caja
- Líneas de trazos para el productor padre 114A.1 desde Líneas de trazos para el productor descendiente 112A.1 desde
- I
- Desde la instancia 108A al productor 114A.1 y desde elm�todo104B al productor 114A.1 Desde la instancia 108A al productor 112A.1 y desde elm�todo104B al productor 112A.1
- J
- Desde la instancia 108A al productor 114A.1 y desde elm�todo104B al productor 114A.1 Desde la clase 102A a la instancia 108C, desde la instancia 108C al productor 112A.1, y desde el m�todo104B al productor 112A.1
- K
- Desde la clase 102A a la instancia 108B, desde la instancia 108B al productor 114A.1, y desde el m�todo104B al productor 114A.1 Desde la instancia 108A al productor 112A.1 y desde elm�todo104B al productor 112A.1
- L
- Desde la clase 102B a la instancia 108B, desde la instancia 108B al productor 114A.1 y desde el m�todo104E al productor 114A.1 Desde la clase 102B a la instancia 108B, desde la instancia 108B al productor 112A.1, y desde el m�todo104E al productor 112A.1
- M
- Desde 102B 108B de la clase a la instancia, de instancia para 108B 114A.1 de productores, y de 104E método de producción 114A.1 Desde 102B de la clase a 108C ejemplo, de 108C instancia para 112A.1 de productores, y de 104E método de producción 112A.1
- N
- Desde la clase 102A a la instancia 108B, desde la instancia 108B al productor 114A.1, y desde el método 104A al productor 114A.1 Desde la clase 102A a la instancia 108C, desde la instancia 108C al productor 112A.1, y desde el método 104A al productor 112A.1
- O
- Desde la clase 102A a la instancia 108B, desde la instancia 108B al productores 114A.1, y desde el método 104A al productor 114A.1 Desde la clase 102A a la instancia 108B, desde la instancia 108B al productor 112A.1, y desde el método 104A al productor 112A.1
- P
- Desde la instancia 108A al productor 114A.1 y desde elm�todo104B al productor 114A.1 Desde la clase 102A a la instancia 108C, desde la instancia 108C al productor 112A.1, y desde el método 104A al productor 112A.1
- Q
- Desde la clase 102A a la instancia 108B, desde la instancia 108B al productor 114A.1, y desde el método 104A al productor 114A.1 Desde la clase 102A a la instancia 108B, desde la instancia 108B al productor 112A.1, y desde el m�todo104B al productor 112A.1
- R
- Desde la clase 102B a la instancia 108B, desde la instancia 108B al productor 114A.1, y desde el m�todo104D al productor 114A.1 Desde la clase 102B a la instancia 108B, desde la instancia 108B al productor 112A.1, y desde el m�todo104E al productor 112A.1
La figura 1E ilustra que diferentes instancias de la misma clase pueden tener productores basado en los mismos métodos y/o diferentes de acuerdo con una realización de la invención. La figura 1E muestra: 1) la definición de 5 clase102A, que incluye los métodos 104A-C y la declaración de dependencia de los productores 106A-C para cada uno de estos métodos, respectivamente, 2) la instancia 108A y la instancia 108B, pertenecientes a la clase 102A, 3) un productor 110A es el m�todo104A de la instancia 108A de la clase 102A, 4) un productor 110B es el m�todo104B de la instancia 108A de la clase 102A, 5) un productor 110C es el m�todo104A de la instancia 108B de la clase 102A; y 6 ) un productor 110D es el m�todo104C de la instancia 108B de la clase 102A. Además, la figura 1D
10 muestra que: 1) la declaración de dependencia del productor 106A para el m�todo104A identifica en eltiempo de ejecución los productores descendientes del productor 110A y del productor 110C, 2) la declaración de dependencia del productor 106B para el m�todo104B identifica en el tiempo de ejecución el productor descendiente del productor 110B, y 3) la declaración de dependencia del productor 106C delm�todo104C identifica en el tiempo de ejecución el productor descendente del productor 110D.
15 Ejemplos de sistemas en tiempo de ejecución
La figura 2 es un diagrama de bloques que ilustra la capacidad de reutilización de un entornode ejecución con el soporte de programación orientada al grafo de productor de acuerdo con una realización de la invención. En la figura
20 2, varios programas de aplicaciones orientados a objetos (código de aplicación orientado a objetos con las declaraciones de dependencia de los productores 210A-I) son ejecutados mediante el mismo entorno de ejecución con la ayuda del soporte de programación orientado a grafos productor 220.
La figura 3A es un diagrama de bloques que ilustra un entornode ejecución con el soporte de programación
25 orientado al grafo de productor de acuerdo con una realización de la invención. En la figura 3A, un entornode ejecución con soporte de programación orientado al grafo de productor 335 incluye un módulo de generación de grafos del productor automatizado 340 y un módulo de ejecución del grafo de productor 345. El entornode ejecución 335 es para ejecutar el código fuente orientado a objetos, y por lo tanto, incluye módulos adicionales que no se muestran.
30 Además, la figura 3A muestra declaraciones de dependencia de los productores para métodos de código fuente orientado a objetos 320, un conjunto actual de uno o más productores cuyas salidas son de interés 325 (también denominados aquí como los productores seleccionados actualmente de interés), y las salidas de los productores de origen 330 (descritos más adelante en este documento). El módulo de generación de grafos del productor automatizado 340 recibe las declaraciones de dependencia de los productores 320 y el conjunto actual de los productores de interés 325.
El módulo de generación de grafos del productor automatizado 340 intenta descubrir, a partir de las declaraciones
5 de dependencia de los productores, los productores con salidas que contribuyen directa e indirectamente a la entrada de los productores de interés seleccionados,y construye un grafo actual de productores que representan la dependencia de entrada de estos productores entre s� de los productores seleccionados actualmente de interés a los que los productores descubiertos son productores de origen. El grafo(s) de los productores actuales se almacena(n) en la estructura del grafo(s) del productor 380.
El módulo de ejecución del grafo de productor345 recibe el grafo del productor actual desde el módulo de generación del grafo de productor automatizado 340 y las salidas de los productores de origen 330, y ejecuta los productores del grafo de productor actual para determinar la salida actual de los productores seleccionados actualmente de interés. En algunas formas de realización, el módulo de ejecución de grafos de 15 productores345incluyeun módulo deparalelizaci�n3451, un módulo demultiprocesamiento3453, un módulo de múltiples hilos3455, y un módulo de ejecución local3457. El módulo deparalelizaci�n3451puededeterminar el modo de ejecución de un productor y enviarlo a uno de los módulos demultiprocesamiento3453, el módulo demultihilo3455, y el módulo de ejecución local3457para ser ejecutado en el modo de ejecución determinado. La paralelizaci�n puede ser realizada por un modo de ejecución individual. Por ejemplo, la ejecución en paralelo de los productores puede llevarse a cabo por el módulo demultiprocesamiento3453usandomultiprocesamiento. Alternativamente, la ejecución en paralelo de los productores puede llevarse a cabo por el módulo demultihilo3455usandomultihilo. Por otra parte, la paralelizaci�n puede ser realizada por una combinación de modos de ejecución. En otras palabras, los productores pueden ser ejecutados en paralelo con diferentes modos de ejecución. Por ejemplo, dos productores se pueden ejecutaren paralelo mediante el envío de un productor al
25 m�dulomultihilo3455y el otro productor al módulo de ejecución local de3457. Se debe mencionar que otras combinaciones de modos de ejecución pueden ser utilizadas para poner en pract�cala paralelizaci�n.
El módulo de ejecución del grafo de productor 345 almacena en cach� las salidas actuales de los productores en la estructura de del grafo(s) del productor 380 tal como se ilustra mediante el almacenamiento en cach� de la salida del productor 384.
El almacenamiento en cach� de las salidas de los productores del grafo de productor durante la ejecución permite la sincronización. Por ejemplo, el tiempo apropiado para ejecutar un productor padre que depende de los múltiples productores descendientes es después que todos los productores descendientes múltiples hayan sido ejecutados, 35 en otras palabras, sería un desperdicio (y, en algunos casos, no posible) ejecutar el productor padre cada vez que uno de sus productores descendientes haya finalizado su ejecución. El almacenamiento en cach� de las salidas de los productores permite la ejecución del productor padre no sólo para ser aplazado hasta que todos sus productores descendientes se hayan ejecutado, sino que también permite una determinación del tiempo apropiado para la ejecución del productor padre -cuando todos los productores descendientes han sido ejecutados y sus resultados se han almacenado. As�, el entornode ejecución hace que esta decisión de sincronización para el programador comprobandola disponibilidad de las salidas necesariasel almacenamiento en cach� de la salida del productor 384, en otras palabras, dicha sincronización est� automatizada (el programador no necesita incluir el código fuente independiente que determina el tiempo apropiado para ejecutar un método de una instancia). A modo de otro ejemplo, donde varios productores padre dependen del mismo productor descendiente, as� como de otros
45 productores distintos de los descendientes, el momento adecuado para ejecutar cada uno de los varios productores padre suele ser diferente, el entornode ejecución determina automáticamente el momento adecuado para ejecutar cada uno de los varios productores padre dependiendo de la disponibilidad de las salidas de su conjunto de productores secundarios.
Tal como se describir� en detalle más adelante en este documento, ya que algunas partes de un grafo de productor pueden no ser detectables en la actualidad debido a las dependencias de productores dinámicos, el módulo de generación del grafo de productor automatizado 340 "intenta" descubrir y construir el grafo de productor entero, pero no puede inicialmente ser capaz de completar todo el grafo de productor hasta que algunos productores se ejecutan. Como tal, el módulo de ejecución del grafo de productor 345 puede invocar el módulo de generación del grafo de
55 productor automatizado 340 con las salidas de los productores necesarias durante la ejecución del grafo de productor actual para completar cualquier resto no resuelto del grafo de productor actual (esto se ilustra en la figura 3A mediante una línea con flecha discontinua del módulo de ejecución de grafos del productor 345 al módulo de generación de grafos del productor automatizado 340, y se utiliza una línea discontinua con flecha porque este soporte es opcional).
La figura 4A es un diagrama de bloques que ilustra el descubrimiento y la construcción de un grafo de productor de ejemplo de acuerdo con una realización de la invención. La figura 4A muestra que el conjunto actual de los productores de interés consiste en el productor 1. Sobre la base del productor 1 y su declaración de dependencia del productor, se descubren el productor 2 y el productor 3. En otras palabras, la declaración de dependencia del 65 productor para el productor 1 identifica que la entrada al productor 1 requiere la ejecución del productor 2 y el productor 3. Como tal, el productor 1 es un productor dependiente (un productor que tiene una o más dependencias
de productores). La figura 4A también muestra que mientras que el productor 3 es un productor independiente (un productor que no tiene ninguna dependencia de productores, y por lo tanto, es un productor de origen), el productor 2 no lo es. Como resultado, en base a la declaración de dependencia del productor2, se descubren el productor 4 y el productor 5. En la figura 2A, el productor 4 y el productor 5 son los productores independientes (y por lo tanto, los
5 productores de origen).
La figura 4B es un diagrama de bloques que ilustra la ejecución inicial del grafo de productor de la figura 4A según una realización de la invención. En la figura 4B, las líneas curvadas con flecha ilustran la ejecución de uno de los productores para generar una salida que se proporciona como la entrada a otro productor. Tal como se muestra en la figura 3A, la salida de los productores de origen 330 se proporcionan al módulo ejecución del grafo de productor345; en contraste, las salidas de los productores dependientes 1-2 se determinan mediante la ejecución de dichos productores, tal como se muestra en la figura 4B. Por lo tanto, en la figura 4B, ocurre lo siguiente: 1) la salida del productor de origen 4 y el productor de origen 5 se proporciona al productor dependiente 2, 2) el productor dependiente2se ejecuta, y 3) las salidas del productor dependiente 2 y el productor de origen 3 se proporcionan al
15 productor 1; y 4) el productor 1 se ejecuta y su salida se proporciona como la salida actual de interés. Debe indicarse que el grafo de productor de la figura 4B son los datos que circulan en el sentido de que los datos fluyen desde un productor a otro productor del grafo.
En algunas realizaciones, el productor 4yel productor 5pueden ser ejecutados en paralelo con diferentes modos o un modo único de ejecución que soporta paralelizaci�n (por ejemplo, multiprocesamiento, múltiples hilos, etc.) porque el productor4y el productor5son independientes el uno del otro. Sin embargo, ya que elproductor2depende de los productores4y5en el ejemplo actual, el productor 2no puede ser ejecutado en paralelo con los productores4y5. Por lo tanto, el entorno de ejecución debe esperar por los productores de4y5antes de ejecutarproductor2. Como para el productor 3, ya que el productor 3es independiente de los productores 4 y 5, el productor 3puede ser ejecutado en
25 paralelo con los productores4y5. Como alternativa, el productor 3puede ser ejecutado en paralelo con el productor2porqueel productor 3es también independientedeproductor2. En algunas realizaciones, la ejecución del productor 3puede solaparse en el tiempo con la ejecución de los productores 4 y 5, as� como la ejecución deproductor2, dependiendo de cuánto tiempo se tarda en ejecutarlos productores de3, 4, y5.
As�, las declaraciones de dependencia del productor 320 unido los posibles grafos de productores que pueden ser generados, mientras que el conjunto actualmente seleccionado de los productores de interés 325 identifican el nodo(s) inicial(es) del grafo de productor actual que se genera. De estos dos, el módulo de generación de grafo de productor automatizado 340 descubre y construye el grafo de productor. El descubrimiento y la construcción est� automatizada porque el módulo de generación de grafo de productor automatizado 340 no proporciona el grafo de
35 productor (por ejemplo, no necesita ser identificado manualmente por un programador) o incluso una lista de los productores que estar� en el grafo de productor. Por el contrario, el módulo de generación del grafo de productor automatizado 340 analiza la(s) declaración(es) de dependencia del productor del conjunto actual de productores seleccionados de interés para descubrir sus productores descendientes, a continuación, analiza las declaraciones de dependencia de productores de dichos productores descendientes, y as� sucesivamente hacia abajo a los productores de origen (en algunas realizaciones de la invención que se describen más adelante en este documento, esto se puede hacer con la ayuda del módulo de ejecución del grafo de productor 345). En el caso de que el grafo de productor sea un árbol, un productor actualmente seleccionado de interés ser� el nodo raíz, y las declaraciones de dependencia de productor se analizarán hasta que se descubren los nodos de hoja (los productores de origen).
45 Productores de anulación y ejecución incremental
La figura 3B es un diagrama de bloques que ilustra un entorno de ejecución con el soporte de programación orientada a grafo de productor a que también soporta la ejecución incremental y las salidas de anulación del productor de acuerdo con una realización de la invención. Se debe entender que la ejecución incremental y salidas de anulación del productor son, cada una, características opcionales independientes, y por lo tanto, diferentes realizaciones de la invención pueden aplicar una o ambas. Aunque no se ilustra explícitamente en la Figura 3B, se debe apreciar que los módulos de paralelizaci�n 3451, el módulo de multiprocesamiento 3453, el módulo de multihilo 3455, y el módulo de ejecución local 3457 en la Figura 3A pueden ser incluidos en el módulo de ejecución de grafos de productores 370 en la Figura 3B para permitir que el módulo de ejecución de grafos de productores 370 en la
55 Figura 3B pueda poner en práctica la paralelizaci�n en la ejecución de los productores.
En la figura 3B, un entornode ejecución con un soporte de programación orientada al grafo de productor 360 incluye un módulo de generación de grafo de productor automatizado 365, un módulo de ejecución de grafo de productor 370, y un módulo de salida del productor de anulación 390. El entornode ejecución 360 es la ejecución del código fuente orientado a objetos y, por tanto, as� incluye módulos adicionales que mostrados.
Adem�s, la figura 3B muestra las declaraciones de dependencia de productores para métodos en código fuente orientada a objetos 320, el conjunto actual de uno o más productores cuyas salidas son de interés 325 (también denominados aquí como los productores seleccionados actualmente de interés), y la salida de los productores de 65 origen 350. La salida de los productores de origen 350 incluye los resultados de los productores independientes establecidos en el código fuente 352 (por ejemplo, las constantes, los valores por defecto, etc.) y las salidas de los
productores actualmente anulados 354 (las salidas de los productores independientes y/o los productores dependientes cuyas salidas se anulan actualmente).
En algunas realizaciones de la invención, las salidas de los productores puede ser anuladas explícitamente con un
5 valor proporcionado actualmente (es decir, en lugar de ejecutar un productor para determinar su valor de salida en base a sus entradas actuales, el valor de salida para el productor se proporciona explícitamente). Además de los productores independientes de un grafo de productor, los productores de origen de un grafo de productor son los productores actualmente anulados.
El módulo de salida del productor de anulación 390 recibe las salidas del productor de anulación 354 (que identifica los productores est�n siendo anulados y cuyos valores de salida est�n siendo anulados). En una realización de la invención, los productores pueden ser clasificados como productores de propiedad o productores de método. Los productores de propiedad son los que se basan en los métodos de propiedad (por ejemplo, obtener y establecer). Los productores de método son los basados en métodos no de propiedad. El módulo de salida del productor de
15 anulación 390 incluye un módulo de salida de propiedad del productor de anulación 392 para los productores de propiedad anulados y un módulo de salida del productor de método de anulación 394 para los productores de método anulados. El módulo de salida del productor de propiedad de anulación 392 hace que el valor anulado se almacene en el cach� del productor de salida 384 y en los datos de la instancia, mientras que el módulo de salida del método del productor anulado 394 hace que el valor anulado sea almacenado en el cach� de salida del productor 384. Dependiendo de la realización de la invención, esta relación causal puede ser directa o indirecta. La figura 3B ilustra una relación causal indirecta a través del uso de un registro de anulación 396 que recoge la salida del módulo de salida del productor de anulación 390 y que es consumida por el módulo de ejecución del grafo de productor370. Para propósitos de optimización, el registro de anulación 396 permite el retraso de las anulaciones para recoger las anulaciones múltiples de procesamiento por lotes.
25 Similar al módulo de generación automática del grafo de productor 340, el módulo de generación automatizada del grafo de productor 365: 1) recibe las declaraciones de dependencia del productor 320 y el conjunto actual de los productores de interés 325, y 2) intenta descubrir, sobre la base de las declaraciones de dependencia de los productores, productores con salidas que contribuyen directa e indirectamente a la entrada de los productores seleccionados actualmente de interés, y construye un conjunto de uno o más grafos actuales de productor que representan la dependencia de entrada de estos productores entre s� de los productores seleccionados de interés a los productores descubiertos que son productores de origen (productores independientes y productores actualmente anulados). El grafo(s) productor se almacena(n) en el grafo(s) productor de la estructura 380.
35 Similar al módulo de ejecución del grafo de productor345, el módulo de ejecución del grafo de productor 370 recibe el grafo de productor actual desde el módulo grafo automatizado 365 y las salidas de los productores de origen350, y ejecuta los productores del grafo de productor actual para determinar la salida actual de los productores seleccionados de interés. El módulo de ejecución del grafo de productor370 almacena en cach� los resultados actuales de los productores de la estructura del grafo productor 380 tal como se ilustra en el almacenamiento cach� de salida del productor 384.
Tal como se describió previamente, el cach� de las salidas de productores durante la ejecución permite la sincronización (por ejemplo, el código fuente separada no necesita ser escrito para determinar cuándo debe ser ejecutado el productor 2 de la figura 4B, sino más bien el entorno de ejecución hace que esta decisión de
45 sincronización para el programador comprobando el disponibilidad de las salidas necesarias en el cach� de salida del productor 384, en otras palabras, dicha sincronización es automatizada). Por otra parte, el almacenamiento en cach� de las salidas del productor durante la ejecución puede permitir la paralelizaci�n de ejecución de productor porque el entorno de ejecución puede decidir qué productor est� listo para la ejecución mediante la comprobación de la disponibilidad de las salidas necesarias en el almacenamiento en el cach� de la salida del productor 384. Los productores que est�n listos para su ejecución pueden ser ejecutados en paralelo. En otras palabras, la paralelizaci�n puede ser automatizada de esta manera. Por lo tanto, no se necesita ningún código fuente separado para determinar o para indicar que los productores deben ser ejecutados en paralelo. Además, esta memoria cach� de salida del productor 384 se utiliza para la ejecución incremental. Más concretamente, después de que un grafo de productor haya sido generado inicialmente y ejecutado, la anulación de un productor en el grafo de productor actual
55 requiere un cierto nivel de una ejecución adicional. Si bien algunas realizaciones de la invención simplemente vuelven a ejecutar todo el grafo, realizaciones alternativas de la invención soportan la ejecución incremental (volver a ejecutar sólo aquellas partes del grafo de productor que se ven afectadas por la anulación). Algunos ejemplos de realización que soportan la ejecución incremental utilizan la ejecución incremental marcando 382 en la estructura del grafo(s) productor 380 para ayudar a determinar qué productores requieren la ejecución adicional. Por lo tanto, el mantenimiento del grafo del productor se refiere a mantener el grafo productor actual a través de ejecuciones múltiples, mientras que la ejecución incremental se refiere a mantener el grafo del productor y grafo utilizarlo para volver a ejecutar sólo aquellas partes del grafo del productor que se ven afectados por una anulación.
Similar a la figura 3A, hay una línea de trazos con flecha desde el módulo de ejecución del grafo de productor370 al 65 módulo de ejecución automatizada del grafo de productor 365 para representar un soporte opcional para las dependencias dinámicas. Cabe señalar que las dependencias dinámicas pueden cambiar durante la ejecución adicional de un grafo de productor.
La figura 4C es un diagrama de bloques que ilustra la ejecución incremental del grafo de productor de la figura 4B de
5 acuerdo con una realización de la invención. En la figura 4C, la salida del productor 5 ha sido modificada de forma explícita, pero las salidas del productor 3 y del productor 4 no. Basándose en el seguimiento de las dependencias de la salida a la entrada en el grafo de productor y que sólo la salida del productor 5 ha sido modificada de forma explícita, se determina que sólo el productor 2 y el productor 1 se ven afectados por esta modificación. Como resultado, la determinación de una salida actualizada del productor 1 requiere solamente la ejecución adicional del productor 2 y del productor 1 con la nueva salida del productor 5 y las salidas anteriores del productor 4 y del productor 3. Esta ejecución adicional parcial del grafo de productor se ilustra en la figura 4C mediante líneas curvas con flecha desde el productor 5 al productor 2 y del productor 2 al productor 1, pero no desde el productor 4 al productor 2 o del productor 3 al productor 1. La falta de líneas curvas con flechas del productor 4 al productor 2 y del productor 3 al productor 1 no son para indicar que las salidas del productor 3 al productor 4 no son necesarias, sino
15 que en su lugar, el productor 3 y el productor 4 no se necesitan volver a ejecutar si su salida se encuentra antes disponible. (Por ejemplo, almacenada en cach� desde la ejecución previa del grafo de productor).
El ejemplo relativamente simple de la figura 4C ilustra que no puede haber un ahorro en los recursos de procesamiento como resultado de la ejecución incremental. Estos ahorros dependerán de una serie de factores (por ejemplo, del número de productores que no necesitan volverse a ejecutar, de la cantidad de procesamiento de dichos productores habrían requerido, etc.).Aunque una realización de la invención se ilustra que realiza la ejecución incremental, realizaciones alternativas puede implementarse de forma diferente (por ejemplo, una realización alternativa puede volver a ejecutar para que todos los productores respondan a una modificación).
25 La figura 4D es un diagrama de bloques que ilustra la ejecución incremental del grafo de productor de la figura 4B después de que el productor dependiente 2 haya sido anulado de acuerdo con una realización de la invención. En la figura 4D, la salida del productor 2 ha sido modificada de forma explícita, pero la salida del productor 3 no. Basado en el grafo de productor y que sólo la salida del productor 2 ha sido modificada de forma explícita, se determina que sólo el productor 1 se ve afectado por esta modificación. Como resultado, la determinación de una salida actualizada del productor 1 requiere solamente la ejecución adicional del productor 1 que se anula con la salida del productor 2 y la salida modificada del productor 3. Esta ejecución adicional parcial del grafo de productor se ilustra en la figura 4D mediante una línea curva con flecha desde el productor 2 al productor 1, pero no desde el productor 4 al productor 5
o del productor 3 al productor 1.
35 La figura 4E es un diagrama de bloques que ilustra la ejecución incremental del grafo de productor de la figura 4B después de que el productor dependiente 2 se haya anulado y el productor fuente independiente 3 se haya modificado de acuerdo con una realización de la invención. Basado en el grafo de productor y en que sólo las salidas del productor 2 y del productor 3 se han modificado, se determina que sólo el productor 1 se ve afectado por esta modificación. Como resultado, la determinación de una salida actualizada del productor 1 requiere solamente la ejecución adicional del productor 1 que se reemplaza con la salida del productor 2 y la salida modificada del productor 3. Esta ejecución adicional parcial del grafo de productor se ilustra en la figura 4E mediante una línea curvada con flecha desde los productores 2 y 3 al productor 1, pero no desde los productores 4 y 5 al productor 2.
Aunque una realización de la invención que soporta las salidas del productor de anulación también soporta las
45 salidas del productor de anulación, realizaciones alternativas de la invención no lo hacen. Aunque una realización de la invención que soporta los productores de anulación deja un productor de anulación anulado hasta que est� específicamente anulado, realizaciones alternativas de la invención pueden implementarse de forma diferente (por ejemplo, anulando un productor anulado cuando uno de su progenie se anula).
Construcci�n y ejecución de un grafo de productor
En una realización de la invención, en marco de programación orientado a grafos de productores incluye una interfaz externa utilizada para interactuar con programas escritos sin declaraciones de dependencia de productor. Este marco externo incluye: 1) una parte que inicia la llamada (en adelante, el cliente de entorno de ejecución), y 2) una
55 parte que recibe la llamada (referida como una fuente de datos externa). Si un productor lee los datos directamente desde una fuente de datos externa, sólo puede leer los datos cuando el productor est� creado, cuando as� se le instruye (actualización manual), o cuando est� suscrito a él. En el caso de la actualización manual y la suscripción, los cambios en la fuente de datos externase traducirían en la invocaci�n del método de conjunto del productor y la modificación de la salida del productor (tratado igual que un productor anulado).
Construcci�n y ejecución del grafo de productor
Diferentes realizaciones de la invención pueden ser implementadas para descubrir y construir un grafo de productor en diferentes grados (por ejemplo, construir el grafo de productor hasta que todos los caminos desde el extremo del 65 nodo de raíz en los productores independientes (en cuyo caso, los nodos de extremo de un grafo de productor son productores independientes, con la posibilidad de que cualesquiera productores anulados sean nodos intermedios);
construir el grafo de productor hasta que cada camino desde el nodo de raíz termine en un productor anulado o un productor independiente, el que se alcance primero (en cuyo caso, cada nodo de extremo de un grafo de productor sea un productor independiente o un productor anulado)).
5 "Productores de ejecución de inicio" se refiere a los productores de un grafo de productora partir de los cuales comienza una ejecución dada del grafo de productor. Para una ejecución inicial de un grafo de productor, diferentes realizaciones pueden comenzar a partir de diferentes productores (por ejemplo, en las realizaciones de la invención que construyen el grafo de productor hasta que todos los caminos desde el extremo del nodo de raíz en productores independientes, la ejecución puede comenzar a partir de los nodos de extremo (que serían los productores independientes), a partir de los productores de origen (que incluirían los nodos de productores independientes y los nodos de productores anulados), a partir de un subconjunto de productores de origen que consisten en la combinación de cualesquiera productores independientes con al menos un camino entre los mismos y el productor raíz que no incluye un productor anulado y cualesquiera productores anulados, o a partir de un subconjunto de productores de origen que consiste en la combinación de cualesquiera productores anulados sin ningún tipo de
15 descendientes que se anulan y cualesquiera productores independientes con al menos un camino entre los mismos y el productor raíz que no incluye un productor anulado; en realizaciones de la invención donde el grafo de productor bajo productores anulados no se construye si y hasta que a un productor se le retira la anulación, la ejecución puede comenzar desde los nodos de extremo (que pueden ser productores independientes y/o productores anulados), etc.).
Para ejecuciones posteriores de un grafo de productor, diferentes realizaciones puede comenzar a partir de diferentes productores (por ejemplo, a partir de los productores independientes del grafo de productor (por ejemplo, en las realizaciones de la invención que no soportan la ejecución incremental), a partir de los productores de origen del grafo de productores (por ejemplo, en las realizaciones de la invención que no soportan la ejecución
25 incremental); a partir de un subconjunto de los productores de origen que consiste en los productores de origen que se han anulado y/o agregado desde la última ejecución (por ejemplo, en las realizaciones de la invención que se hacen compatible con la ejecución incremental), a partir de los productores de origen que se han anulado y/o agregado desde la última ejecución, a partir de la combinación de los productores anulados sin descendientes que se anulen y cualesquiera productores añadidos, con al menos un camino entre los mismos y el productor raíz que no incluye un productor anulado (por ejemplo, en las realizaciones de la invención que soportan la ejecución incremental); etc.).
Respecto al concepto anterior de los productores de inicio de la ejecución, el flujo de procesamiento de la ejecución del grafo de productor también difiere entre las diferentes realizaciones. Por ejemplo, en una realización de la
35 invención, la ascendencia de los productores de ejecución de inicio se determina y se coloca en una colección, los productores de inicio de ejecución se ejecutan, y la colección se analiza de manera iterativa en busca de productores para los cuales todas las dependencias han sido ejecutadas -eventualmente, los nodos de raíz son alcanzados. Como otro ejemplo, en una realización de la invención, los productores de inicio de la ejecución se ejecutan, los padres de los productores de ejecución de inicio se identifican, los padres se ejecutan, y sus padres se identifican y se ejecutan, y as� sucesivamente. Esta última realización de la invención se utiliza a continuación a modo de ejemplo, y no de limitación.
Tipos de de ejemplo de las dependencias
45 Dependencias dinámicas de productores de ejemplo
Una dependencia del productor dinámica es una dependencia del productor que no puede ser resuelta hasta el tiempo de ejecución. Se debe entender que los criterios para resolver la dependencia del productor est�n presentes en el código fuente, y por lo tanto, los productores a los que la dependencia del productor puede ser resuelta son limitados. Con referencia a la figura 3A, la línea discontinua con flecha desde el módulo de ejecución del grafo de productor345 al módulo de generación automatizada del grafo de productor 340 representa un soporte para la ejecución de uno o más productores en el grafo de productor actual que son necesarios para descubrir y construir toda el grafo de productor actual. En otras palabras, una realización de la invención que soporta las dependencias dinámicas de productores puede iterar entre el módulo de generación automatizada del grafo de productor340 y el
55 módulo de ejecución del grafo de productor 345 hasta que el todo grafo de productor se descubre, se construye, y se ejecuta, es decir, iterar entre: 1) la invocaci�n del módulo de generación automatizada del grafo de productor para descubrir y construir las partes del grafo de productor actual que se pueden resolver en ese momento, y 2) la invocaci�n del módulo de ejecución del grafo de productor para ejecutar los productores del grafo de productor actual). En este sentido, descubrir se refiere al acceso de las declaraciones de dependencia de los productores y la determinación de los productores que se identifican; la creación se refiere a la carga de los productores y su adición al grafo de productor, y la resolución se refiere a la determinación de las dependencias dinámicas de los productores actualmente no resueltas.
La figura 5A es un diagrama de bloques que ilustra el descubrimiento y la construcción de un grafo de productor de
65 ejemplo que incluye una dependencia no resuelta de acuerdo con una realización de la invención. La figura 5 muestra el conjunto actual de los productores de interés que consisten en el productor 1. Sobre la base del productor 1 y su declaración de dependencia del productor, el productor 2 y el productor 3 se descubren. En otras palabras, la declaración de dependencia para el productor 1 identifica que el productor 1 requiere como entradas la salida del productor 2 y del productor 3. La figura 5A también muestra que mientras el productor 3 es un productor independiente (y por lo tanto, un productor de origen), el productor 2 no lo es. Como resultado, en base a la
5 declaración de dependencia del productor 2, el productor 4 y el productor 5 se descubren. Además, la figura 5A muestra que mientras que el productor 4 es un productor independiente (y por lo tanto, un productor de origen), el productor 5 no lo es. Como resultado, en base a la declaración de dependencia del productor 5, el productor 6 y la dependencia actualmente no resuelta se descubren. La figura 5A muestra también que la dependencia actualmente no resuelta puede ser el productor 7A y/o el productor 7B.
La figura 5B es un diagrama de bloques que ilustra la ejecución inicial del grafo de productor de la figura 5A y la resolución de la dependencia no resuelta de acuerdo con una realización de la invención. La figura 5B muestra el grafo de productor de la figura 5A, con líneas curvas con flechas que muestran la ejecución de los productores y la provisión de sus salidas a los productores padre dependientes. Además, la figura 5B muestra que la dependencia no
15 resuelta del productor 5 se resuelve como una dependencia en el productor 7A, y que el productor 7A es un productor independiente. Se debe tener en cuenta que el productor7Apuedeser ejecutado por s� mismo, o ser ejecutado en paralelo con el productor6, el productor 4, o el productor 3, o ser ejecutado en paralelo con cualquier combinación de estos productores. Tal ejecución en paralelo est� permitida porque el productor 7Aes independiente de los productores 3, 4, y6.
La figura 5C es un diagrama de bloques que ilustra la ejecución inicial del grafo de productor de la figura 5A y/o la ejecución adicional del grafo de productor de la figura 5B de acuerdo con una realización de la invención. La figura5C muestra el grafo de productor de la figura 5A, con líneas curvas con flechas que muestran la ejecución de los productores y el suministro de sus salidas a los productores padre dependientes. Además, la figura 5C muestra 25 que la dependencia no resuelta del productor 5 se resuelve como una dependencia del productor 7B y que el productor 7B es un productor dependiente. Como resultado, en base a la declaración de dependencia del productor7B, el productor 8 es descubierto. El productor 8 es un productor independiente (y por lo tanto, es un productor de origen). Suponiendo que la figura 5C representa la ejecución inicial del grafo de productor de la figura 5A, se emplearían todas las líneas curvas con flecha en la figura 5C. Sin embargo, suponiendo que la figura 5C representa la ejecución adicional del grafo de productor de la figura 5B, la ejecución adicional resulta en la dependencia dinámica que se resuelve de forma diferente (un interruptor desde el productor 5 que es dependiente del productor 7A al productor7B). Además, si el ejecución adicional se realiza sin ejecución incremental, a continuación, se emplean todas las líneas curvadas con flecha en la figura 5C, sin embargo, si se utilizó la ejecución incremental, sólo se emplearían las líneas curvadas con flecha no discontinuas (del productor 8 al productor 7B, del
35 productor 7B al productor 5, del productor 5 al productor 2, y del productor 2 al productor 1). También debe entenderse que el cambio dinámico en la dependencia que se ilustra en la figura 5C es de ejemplo, y por lo tanto, cualquier número de diferentes situaciones podrían surgir (por ejemplo, el cambio dinámico puede no producirse nunca; el productor 5 podría haber sido primero el productor 7B dependiente y luego cambiar al productor7A, el productor 5 podría haber sido primero dependiente del productor 7B y no siempre se produce un cambio dinámico, el productor 5 se puede encontrar que es dependiente del productor 7A y del productor 7B como se ilustra en la figura 5D, etc.).
As�, la ejecución adicional automatizada de un grafo de productor no se limita al productor que se modifica y a su descendiente opadre directo que se vuelve a ejecutar, más bien un cambio es automáticamente ondulado a través
45 del grafo de productor durante el tiempo de ejecución, que afecta a los productores apropiados y sus dependencias, porque los grafos del productor se mantienen (y la ejecución incremental se utiliza si se soporta). Como tales, los cambios provocan cualquier descubrimiento adicional necesario, creación, resolución y ejecución. As�, la ejecución adicional de un grafo de productor est� automatizada en el sentido de que un usuario/programador no necesita determinar qué productores del grafo de productor se ven afectados, y posiblemente corregir manualmente el grafo.
Dependencias est�ticas del productor
Una dependencia est�tica es aquella que es conocida antes del tiempo de ejecución. As�, en una realización que soporta dependencias dinámicas contingentes y de suscripción, una dependencia no contingente sin suscripción es
55 una dependencia est�tica. El grafo de productor de ejemplo de la figura 4A ilustra un grafo de productor de dependencias est�ticas.
Formas del grafo de productor
Dado que un productor en lenguajes de programación orientados a objetos es al menos una clase, una instancia de esa clase y un método de esa instancia, un grafo de productor es una clase, instancia y método céntrico. Por lo tanto, un grafo de productor es un grafo que representa las instancias y los métodos de las instancias.
Se debe entender que un grafo de productor puede tomar una variedad de formas diferentes (por ejemplo, una sola
65 cadena de productores, un árbol, etc.). El grafo de productor de ejemplo de la figura 5B es un árbol con un nodo de raíz del productor 1, desde el cual hay dos ramas -una para cada uno del productor 2 y el productor 3. Cuando el productor 3 es un nodo de hoja, el productor 2 tiene dos ramas que se extienden desde la misma -una a cada uno del productor 4 y el productor 5. El productor 5 tiene dos ramas que se extienden desde el mismo -una para cada uno del productor 6 y el productor 7A. El grafo de productor de ejemplo de la figura 5B se dice que es multinivel, con el nivel 1 incluyendo el productor del nodo de raíz 1, con el nivel 2 incluyendo el productor 2 y el productor 3, con
5 nivel 3 incluyendo el productor 4 y el productor 5, con el nivel 4 incluyendo el productor 6 y el productor 7A (en la figura 5C, el nivel 4 incluye el productor 7B, y el nivel 5 incluye el productor 8). En algunas realizaciones, la paralelizaci�n puede ser implementada mediante la ejecución de los productores de cada nivel en paralelo. La ejecución de los productores puede comenzar con los productores en el nivel más bajo, como el nivel 5 en la figura 5C, y luego moviéndose hacia arriba nivel por nivel. Antes de comenzar la ejecución de los productores en un nivel, el entorno de ejecución debe esperar que todos los productores en el nivel inferiores est�n listos, es decir, los productores de los niveles inferiores han retornado las respectivas salidas.
Cuando se considera la rama desde el productor 1 con el productor 2, el primer productor de la rama es el productor 2 y los últimos productores de la rama son el productor 4, el productor 6, y el productor 7A en la figura 5B.
15 Aunque la figura 5B muestra un grafo de productor en el que el conjunto actual de productores de interés incluyen un solo productor, las realizaciones de la invención que soportan más de un productor de interés actual descubrirían y construirían grafos de productores para cada uno. Se debe entender que, cuando simultáneamente hay productores múltiples de interés, los grafos de productores resultantes pueden ser independientes o pueden cruzarse. Cuando los grafos de productores se cruzan, las realizaciones de la invención pueden implementarse en: 1) duplicar los productores para mantener separados los grafos del productor, o 2) evitar la duplicación y mantener dicha intersección de los grafos del productor. También debe entenderse que estos grafos del productor que se cruzan pueden incluir un grafo de productor que es un subconjunto de otro grafo de productor. Por ejemplo, si el productor 5 se incluyó con el productor 1 en el conjunto actual de los productores de interés, entonces habría un primer grafo de productor con un nodo de raíz del productor 5 y un segundo grafo de productor con un nodo de raíz del productor 1,
25 donde el segundo grafo de productor incluye el primer grafo de productor. Si, por ejemplo, el productor 7B se incluyó con el productor 1 y el productor 5 en el conjunto actual de los productores de interés, habría un tercer grafo de productor, separado del primer y segundo grafos del productor, con un nodo de raíz del productor 7B en la figura 5B. Además, si la dependencia contingente de productor 5 cambia desde el productor 7A al productor 7B (figura 5C), entonces el cambio se traduciría en que el segundo grafo de productor y el tercer grafo de productor restante (pero no el primero), con el tercer grafo de productores un subconjunto del segundo.
Flujo de ejecución de ejemplo
La figura 6 muestra un diagrama de flujo, que representa el flujo de ejecución lógica de un cliente delentornode
35 ejecución y su relación con un sistemade ejecución con el soporte de programación orientado al grafo de productor de acuerdo con una realización de la invención. En la figura 6, la línea divisoria de trazos 600 separa el flujo de ejecución lógica de un cliente en tiempo de ejecución 610 del entorno de ejecución con el soporte de programación orientada al grafo de productor 640.
El flujo de ejecución lógica del cliente en tiempoentorno de ejecución 610 incluye los bloques 615, 620, 625, y 630, mientras que el entornode ejecución con el soporte orientado al grafo de productor640 incluye los bloques 645, 650, 660, y, opcionalmente, 655. Una línea sólida con flecha representa una relación causal directa desde el bloque 630 al bloque 660. En contraste, las líneas de trazos con flecha ilustran una relación causal desde los bloques 615 y 625 en el flujo de ejecución lógica del cliente entiempode ejecución 610 a los bloques 645 y 650 en el entornode
45 ejecución con el soporte orientado al grafo de productor 640, respectivamente, dependiendo de la realización de la invención, esta relación causal puede ser directa o indirecta. Por ejemplo, la figura 6 ilustra una relación causal opcional indirecta a través del uso de un registro de comandos 665 en un óvalo discontinuo en el entornode ejecución con lado del grafo orientado al soporte del productor 640 de la línea de trazos 600. El registro de comandos 665 recoge los comandos que resultan de los bloques 615 y 625 del flujo de ejecución lógico del cliente en tiempo de de ejecución 610, y el registro de comandos 655 que se consume, que responde al bloque 630, mediante el procesamiento del bloque 660. Por lo tanto, el registro de comandos 665 permite el retraso de los comandos con el fin de recopilar los múltiples juntos y procesarlos por lotes con fines de optimización. As�, el registro de comandos 665 es similar al registro de anulación 396 de la figura 3B, y en realidad se incluye el registro de anulación 396 en algunas realizaciones de la invención.
55 En el bloque 615, el conjunto de uno o más productores de interés se determina como el conjunto actual de los productores de interés y el control pasa al bloque 620. En respuesta a la relación causal entre el bloque 615 y el bloque 645, el bloque 645 muestra que el conjunto actual de los productores de interés se instancia y que se hace un intento por descubrir, construir, y resolver (si las dependencias dinámicas son compatibles y una o más se descubren en el grafo de productor) el grafo(s) del productor para cada uno, incluyendo instancias de todas las instancias y los productores de las mismas, según sea necesario, basándose en las declaraciones de dependencia de los productores en el cliente en tiempo de ejecución 610. Con referencia a las figuras 3A y 3B, el módulo de generación automatizada de grafos del productor 340 y 365 se invocan, respectivamente.
65 En el bloque 620, se determina si hay alguna anulación de salida del productor. Si es as�, el control pasa al bloque
625, de lo contrario, el control pasa al bloque 630.
En el bloque 625, una o más anulaciones de salida del productor son recibidas por un conjunto de uno o más productores y el control pasa al bloque 630. En respuesta a la relación causal entre el bloque 625 y el bloque 650, el 5 bloque 650 muestra que el conjunto actual de los productores anulados son instanciados (si no est�n ya instanciados en el bloque 645), sus salidas se modifican, y se realiza su seguimiento. Un productor anulado puede ya haberse instanciado, ya que ya fue descubierto para formar parte del grafo(s) del productor en el bloque 645. Sin embargo, un productor anulado no puede ya ser descubierto en el bloque 645 debido a una dependencia dinámica sin resolver. Como tal, este productor anulado se instancia y se anula con la expectativa de que se pueda añadir al grafo(s) del productor cuando se resuelven las dependencias dinámicas. También, tal como se ha indicado anteriormente, el registro de anulación 396 de la figura 3B, si se aplica, existe entre el bloque 625 y el bloque 650, y forma parte del registro de comando 665. Además, el conjunto de los productores anulados se rastrea en algunas realizaciones de la invención que soportan la ejecución incremental. Aunque en las realizaciones de la invención que soportan el registro de anulación 396/el registro de comandos 665, el seguimiento es parte del registro, en
15 realizaciones alternativas de la invención el seguimiento serializa por separado en el bloque 650 con un mecanismo diferente.
En el bloque 630, el módulo de ejecución del grafo de productor se invoca y el control vuelve opcionalmente al bloque 615 y/o al bloque 625. En respuesta a la relación causal entre el bloque 630 y el bloque 660, el bloque 660 muestra que el grafo(s) del productor ha seguido y los productores que requieran la ejecución se ejecutan basándose en el seguimiento. Diversas técnicas se han discutido previamente para la ejecución de los productores del grafo de productor y son aplicables aquí. Con referencia a las figuras 3A y 3B, el módulo de ejecución del grafo de productor 345 y 370 se invocan, respectivamente. Además, en realizaciones de la invención en las que se lleva a cabo el registro de comandos 665, la relación causal incluye consume el registro de comandos 665 y la realización
25 de los bloques de procesamiento 645 y 650 antes del bloque 660. Además, en realizaciones de la invención que soportan la posibilidad de dependencias no resueltas, el control fluye desde el bloque 660 al bloque 655 cuando sea necesario.
En el bloque 655, se realiza un intento de resolver las dependencias no resueltas y descubrir y construir el resto del grafo(s) de productor, incluyendo instanciar todas las instancias y los productores de las mismas. Desde el bloque 655, el control fluye de vuelta al bloque 660.
Formas de ejemplo de las declaraciones de dependencia de los productores
35 Las figuras 7A-F ilustra algunas formas de ejemplo para las declaraciones de dependencia de productores de acuerdo con las realizaciones de la invención. Aunque las figuras 7A-F ilustran realizaciones que soportan dependencias de argumento, campo, y secuenciaci�n, se debe entender que diferentes realizaciones pueden soportar sólo una o dos de las tres formas de dependencia. En las realizaciones de la invención mostradas en las figuras 7A-F, una declaración de dependencia del productor se compone de una declaración de dependencia del productor y el código de declaración de dependencia del productor opcionalmente explícito. Un acceso no directo a la dependencia del productor es uno cuyo código de declaración de dependencia explícita del productor es utilizada, mientras que un acceso directo a la dependencia del productor es uno cuyo código de declaración de la dependencia no explícita del productor es utilizada (mejor dicho, el entorno de ejecución no utiliza el código de declaración de dependencia del productor y/o lo implementa sobre la marcha sobre la base de la información en la
45 declaración de dependencia del productor).
Diferentes realizaciones de la invención pueden utilizar diferentes sintaxis para declarar dependencias de los productores. Por ejemplo, diferentes realizaciones de la invención pueden incluir sintaxis diferentes para su uso en las declaraciones de dependencia de los productores que limitan fuertemente, limitan débilmente, y/o no limitan el tipo de dependencia del productor que puede ser creada. Una dependencia del productor fuertemente limitada es aquella para la cual se utiliza una sintaxis en la declaración de dependencia del productor que limita sustancialmente el tipo de dependencia del productor que puede ser creado, una dependencia del productor débilmente limitada es aquella para la cual se utiliza una sintaxis en la declaración de dependencia del productor que es menos limitativa del tipo de dependencia del productor que puede ser creado, y una dependencia del productor sin restricciones es
55 aquella para la cual se utiliza una sintaxis en la declaración de dependencia del productor que no limita el tipo de dependencia del productor que puede crearse.
A modo de ejemplo, y no de limitación, las realizaciones de la invención que se describen a continuación incluyen lo siguiente: 1) una sintaxis para una dependencia del productor fuertemente limitada para los argumentos (Dependencia de Argumentos = dependencia de argumentos declarada de manera descendente fuertemente limitado [est�tico o dinámico, y si es dinámico, suscripción contingente y/o de absorción]), 2) una sintaxis para una dependencia del productor fuertemente limitadas para los campos (Dependencia del campo = dependencia de campo declarada muy limitada [est�tica o dinámica, y si es dinámica, suscripción contingente y/o de absorción]), 3) una sintaxis para una dependencia de productores muy limitada para las dependencias de la secuencia 65 (Dependencia de la secuencia = dependencia de secuencia declarada muy limitada de manera descendente [est�tica o dinámica, y si es dinámica, suscripción contingente y/o adherente]), 4) una sintaxis para una dependencia declarada del productor débilmente limitada para argumento, campo, o secuencia de las dependencias (Dependencia ascendente = dependencia débilmente limitada declarada ascendente de campo, argumento, o secuencia [est�tica o dinámica, y si es dinámica, contingente]), y 5) una sintaxis para una dependencia del productor débilmente limitada (Dependencia débilmente limitada = o bien a) dependencia de secuencia declarada de manera 5 descendente [est�tica o dinámica, y si es dinámica, suscripción contingente y/o adherente], o b) dependencia declarada de manera ascendente [argumento, campo, o secuencia] [est�tica o dinámica, y si es dinámica, contingente]). Se debe entender que, si bien algunas realizaciones de la invención admiten una sintaxis para la declaración de dependencia del productor que distingue las dependencias de argumento declaradas de manera descendente, las dependencias de campo declaradas de manera descendente, las dependencias declaradas de manera ascendente (que pueden devolver las dependencias declaradas de manera ascendente de argumento, campo, o secuencia), y dependencias débilmente limitadas (que se puede devolver las dependencias declaradas de secuencia de manera descendente, las dependencias de argumento, campo, o secuencia de manera ascendente), realizaciones alternativas de la invención pueden adoptar una sintaxis diferente (por ejemplo, tienen una sintaxis que tiene todas las dependencias sin restricciones con la determinación de la dependencia los productores que pueden
15 devolver cualquier dependencia soportada (dependencias de manera descendente y ascendente declaradas de argumento, campo, y secuencia), que tienen una sintaxis que distingue todas las dependencias soportadas, que tienen una sintaxis que distingue de manera descendente y ascendente las dependencias declaradas de argumento y de campo, y que distingue una dependencia débilmente restringida que sólo puede devolver las dependencias de secuencia declaradas de manera ascendente y descendente, una sintaxis que distingue las dependencias declaradas de manera descendente de argumento y de campo, y que distingue las dependencias ascendentes declaradas que sólo pueden devolver de manera ascendente las dependencias declaradas de secuencia, una sintaxis que distingue las dependencias declaradas de manera descendente de argumento, campo, y secuencia (suscripciones adherentes y dependencias declaradas de manera ascendente no est�n soportadas), etc.
25 Debe entenderse que la sintaxis de la sentencia la declaración de dependencia del productor no equivale necesariamente a la dependencia del productor (por ejemplo, el enlace), creado en el grafo de productor (por ejemplo, Argumento Dependency crea una dependencia del argumento, pero una Upward Dependency puede crear una dependencia del argumento, campo, o secuencia). Como tal, en su caso para la comprensión, un espacio entre un calificador (por ejemplo, argumento, campo, o secuencia) y la palabra "dependencia" se usa para referirse a la dependencia creada por el entornode ejecución, mientras que la falta de un espacio se utiliza para referirse a la sintaxis.
La figura 7A ilustra el pseudo código de una declaración de dependencia del productor para un método que utiliza dependencias de acceso directo de acuerdo con una realización de la invención, mientras que la figura 7B es un 35 diagrama de bloques de productores ejemplares de acuerdo con una realización de la invención. La Figura 7A muestra: 1) una declaración de dependencia del productor 705 que incluye ArgumentDependencies 1-N, FieldDependencies 1-H, SequencingDependencies 1-L, UpwardDependencies 1-P, y WeaklyConstrainedDependencies 1-Q, y 2) un método alfa 710 que tiene argumentos 1-N de la declaración de dependencia del productor 705. En una realización de la invención, los argumentos de una declaración de dependencia del productor est�n contados para proporcionar un ID de argumento para cada uno con propósitos de seguimiento la figura 7B muestra un productor 720 que tiene las siguientes dependencias de los descendientes: 1) productor 725 para ID argumento 1, 2) productor 730 para ID del argumento N, 3) productores 740-745 para FieldDependencies 1-M, 4) productores 746-747 para SequencingDependencies 1-L, y 5) productor 748-749 para UpwardDependencies 1-P (nota, WeaklyConstrainedDependencies 1..Q no se muestran, pero se describir� en
45 mayor detalle con referencia a la figura 7G). Por lo tanto, los argumentos de la declaración de dependencia del productor 705 corresponden a los argumentos del método alfa 710, y a las IDs de los argumentos en la declaración de dependencia del productor 705 se les realiza un seguimiento con respecto a los descendientes de los productores que identifican.
La Figura 7C ilustra el pseudo código de una declaración de dependencia del productor de un método que utiliza una declaración de dependencia sin acceso directo, e ilustra un diagrama de bloques de los productores ejemplares de acuerdo con una realización de la invención. La figura 7C muestra la declaración de dependencia del productor 705 y el método alfa 710 de la figura 7A, as� como los productores 720 y 725 de la figura 7B. Además, la figura 7C incluye código de declaración de dependencia del productor 715 asociado con ArgumentDependency 1. Durante el
55 tiempo de ejecución, el entornode ejecución tiene acceso y ejecuta el código de declaración de dependencia del productor 715 que responde a ArgumentDependency 1 de la declaración de dependencia del productor 705. La ejecución del código declaración de dependencia del productor 715 devuelve el productor 725 como la dependencia del productor de ArgumentDependency 1. As�, la figura 7C ilustra realizaciones de la invención en las que el código de declaración de dependencia del productor 715 puede ser parte de un método (distinto del método alfa 710), pero no es parte de un productor.
La figura 7D ilustra pseudo código de una declaración de dependencia del productor de un método que utiliza un no acceso directo de dependencia de acuerdo con una realización de la invención, mientras que 7E figura es un diagrama de bloques de productores ejemplares de acuerdo con una realización de la invención. La figura 7D 65 muestra la declaración de dependencia del productor 705 y el método alfa 710 de la figura 7A, mientras que la figura 7E muestra los productores 720 y 725 de la figura 7B. Además, la figura 7D incluye: 1) una declaración de dependencia del productor 750, y 2) un método beta 755 incluyendo el código de declaración de dependencia del productor 760. La Figura 7D también muestra que la dependencia del argumento 1 de la declaración de dependencia del productor705 identifica un productor (mostrado en la figura 7E como productor 765) basado en el método beta 755 que devolver� la dependencia para el argumento de dependencia 1. Durante el tiempo de 5 ejecución, el entorno de ejecución, que responde a la dependencia del argumento 1 de una declaración de dependencia del productor 705, ejecuta el productor 765 para regresar de identificación que la dependencia del productor del argumento de dependencia 1 es el productor 725. Como tal, el productor 765 es referido como un productor de determinación de dependencia (su salida es una dependencia de productor -y por lo tanto, se devuelve utilizando una clase/ejemplo que es controlado para un tratamiento especial (manipulación del grafo(s)del productor) por el entorno de ejecución con el grafo de productor orientado al soporte de programación), mientras que el productor 725 es referido como un productor estándar (su salida, en su caso, no est� directamente procesada por el entorno de ejecuci�npara manipular un grafo de productor, pero su salida, en su caso, puede ser consumido por un productor ascendente (ya sea un productor de la determinación de dependencia o de otro productor estándar) y/o según lo disponga la salida del grafo de productor (si el productor estándar es un productor de interés, y por lo tanto
15 un nodo raíz).
As�, las figuras 7D-E ilustran realizaciones de la invención en la que las que código de declaración de dependencia del productor 715 es parte de otro productor, referido como un productor de determinación de dependencia. Mientras que en las figuras 7D-E el código fuente orientado a objetos incluye el código de declaración de dependencia del productor explícito en los métodos a partir de los cuales la determinación de los productores de dependencia se crean en el tiempo de ejecución mediante el entorno de ejecución de las dependencias de no acceso directo, realizaciones alternativas de la invención, adicionalmente o en lugar de aplicar el entorno de ejecución para incluir el código de declaración productor de dependencia genérico que invoca cuando uno o más productores de determinación de dependencia genéricos sobre la marcha para dependencias de acceso directo. También, mientras
25 que las figuras 7C-E ilustran con referencia a ArgumentDependencies, las técnicas ilustradas son aplicables a los otros tipos de dependencias declaradas de manera descendente. Además, las figuras 7F-G ilustran el uso de un productor de determinación de dependencia para una UpwardDependency y una WeaklyConstrainedDependency.
La figura 7F es un diagrama de bloques de una dependencia de ejemplo mediante el uso de una UpwardDependency con un productor de determinación de dependencia de acuerdo con una realización de la invención. La Figura 7F muestra el productor 720 que tiene dependencia de productor de secuenciaci�n a un productor de determinación de la dependencia 772. El productor de la determinación de la dependencia puede devolver un argumento, campo, o dependencia de la secuenciaci�n declarado de manera ascendente de nosuscripci�n, del productor ascendiente748 en el productor 720. Además, dicho productor de determinación de la
35 dependencia puede aplicar una dependencia dinámico (por ejemplo, una dependencia contingente que selecciona entre las anteriores dependiendo de los valores de datos, incluyendo entre diferentes IDs de argumento, como se describe aquí más adelante). Si bien algunas realizaciones de la invención soportan todas estas posibilidades, realizaciones alternativas de la invención soportan sólo un subconjunto (por ejemplo, sólo dependencias de secuenciaci�n declaradas de manera ascendente de no suscripción).
La figura 7G es un diagrama de bloques de posibles dependencias de ejemplo mediante el uso de un WeaklyConstrainedDependency con un productor de determinación de dependencia de acuerdo con una realización de la invención. La figura 7G muestra el productor 720 que tiene un productor de dependencia secuenciador a un productor de determinación de dependencia 775. En algunas realizaciones de la invención, el productor de
45 determinación de dependencia puede devolver cualquiera de los siguientes: 1) una dependencia de secuenciaci�n declarada de manera descendente de no suscripción en un productor descendiente 780, 2) una dependencia de secuenciado, campo o argumento declarado en sentido ascendente de no suscripción un productor padre 785 en el productor 720, y 3) una suscripción adherente (descrita más adelante en este documento). Además, dicho productor de determinación de dependencia puede aplicar una dependencia dinámica (por ejemplo, una dependencia contingente que selecciona entre los anteriores dependiendo de los valores de datos, incluyendo entre IDs de argumento diferente, como se describe aquí más adelante). Si bien algunas realizaciones de la invención soportan todas estas posibilidades, realizaciones alternativas de la invención soportan sólo un subconjunto (por ejemplo, sólo dependencias de secuenciaci�n declarada en sentido ascendente de no suscripción).
55 Como se indicó anteriormente, las dependencias de secuenciaci�n pueden ser usadas para una variedad de propósitos, incluyendo asegurar el orden de ejecución entre los productores que modifican los datos de una manera en que el entorno de ejecución no es consciente y los productores que consumen esos datos (un productor descendiente puede escribir sus salidas de una manera que requiere el método del productor padre para incluir código para acceder a esa salida (por ejemplo, un método que impacta el medio ambiente al afectar a una salida que no es la salida del productor regular y, como tal, que no es detectada por el entorno de ejecución -dicho método que establece una variable global, que define un campo en una instancia que no es la salida del productor, que afecta a un origen de datos externo, etc.)), etc. Las fuentes que afectan (como variables globales o fuentes de datos externos) de las que el entorno de ejecución no es consciente y la lectura de estas fuentes es una característica que debe ser evitada en los productores donde se requieran las capacidades de paralelizaci�n.
65 Diferentes formas de realización pueden soportar una o más formas para la declaración de las dependencias del
productor con respecto a los productores de bienes. En concreto, en algunas realizaciones de la invención, los productores que leen un campo deben ser dependientes del productor de propiedad obtener, mientras que el productor de propiedad obtener debería depender de cualquiera de los productores que establecen el campo en el que es responsable el método de propiedad obtener. Se proporciona una técnica de manipulación de esta situación 5 que puede ser utilizada en las realizaciones de la invención que soportan dependencias de productores de secuenciaci�n, para un método de propiedad obtener, una declaración de dependencia del productor que crea dependencias de productores de secuencia en cada método que establece el campo del cual el método de propiedad obtener es responsable (por ejemplo, con respecto a la figura 7G, donde el productor 780 es un productor que establece un campo y el productor 720 es el productor de propiedad obtener responsable de ese campo, el productor de determinación de dependencia 775 se escribiría para devolver una dependencia de secuenciaci�n declarada de manera descendente del productor 720 en el productor 780). Una segunda técnica para manejar esta situación que puede ser utilizada en las realizaciones de la invención que soportan tanto las dependencias de productor de secuenciado y las dependencias de productor declaradas de manera ascendente es incluir en la declaración/código de la dependencia del productor para cualquier método que establece un campo, una la
15 dependencia del productor de secuenciado declarada de manera ascendente (por ejemplo, usando un UpwardDependency o WeaklyConstrainedDependency) en el método obtener responsable de ese campo (por ejemplo, con respecto a la figura 7G, donde el productor 720 es un productor que establece un campo y el productor 785 es el productor de propiedad get responsable para ese campo, el productor de determinación de la dependencia 775 se escribiría para devolver una dependencia de secuenciaci�n declarada de manera ascendente del productor padre 785 en el productor 720). Esta segunda técnica permite que el programador del método que establece el campo para ser responsable de proporcionar una dependencia del productor al método get apropiado, en lugar de requerir que el programador vaya al método get y modifica su declaración/código de declaración de dependencia del productor.
25 Cuando se utiliza dependencias de secuenciaci�n, cuando un productor dado se basa en una variable dada, esa variable no debe ser modificada por más de uno de los productores descendientes de productor en una ejecución dada del grafo(s) de productor (Hay que señalar que a través de las dependencias contingentes (descritas más adelante en este documento), los diferentes productores descendientes pueden modificar esa variable durante diferentes ejecuciones del grafo(s) de productor actual). Por ejemplo, un productor de propiedad get debería depender sólo de un productor de otro tipo que establece el presentado para el cual el productor de propiedad get es responsable en una ejecución dada del grafo(s) de productor actual.
Se debe entender que diferentes realizaciones de la invención pueden aplicar una o más de las realizaciones de la invención mostrada en las figuras 7A-F. Por ejemplo, una forma de realización de la invención soporta dependencias
35 de acceso directo y sin acceso directo, tanto utilizando los productores de determinación de dependencia, en concreto, en esta realización de la invención: 1) el código fuente orientado a objetos incluye código de declaración de dependencia de productor explícito en los métodos a partir de los que los cuales productores de determinación de dependencia son de una instancia en el tiempo de ejecución por el entorno de ejecución paradependencias de no acceso directo, 2) el entorno de ejecución incluye el código de declaración de dependencia de productor genérico que lo invoca como uno o más productores de determinación de dependencia genéricos sobre la marcha para el acceso directo declarado, dependencias contingentes (descritas más adelante en este documento), y 3) el entorno de ejecución incluye el soporte para enlazar directamente acceso directo declarado, dependencias de productores no contingentes (descritas más adelante en este documento).
45 Como otro ejemplo, una forma de realización de la invención soporta dependencias de productores de no acceso directo y de acceso directo que utilizan productores de determinación de dependencia; específicamente, en esta realización de la invención: 1) el código fuente orientado a objetos incluye código de declaración de dependencia de productor explícito en los métodos a partir de los que el productor de determinación de la dependencia se instancia en el tiempo de ejecución por el entorno de ejecuci�npara las dependencias de no acceso directo, y 2) el entorno de ejecución incluye el código de determinación de dependencia genérico que lo invoca como uno o más productores de determinación de dependencia genéricos sobre la marcha para dependencias de acceso directo (independientemente del tipo). Esta última realización permite el tratamiento coherente de las dependencias de productores, y por lo tanto, simplifica el entorno de ejecución.
55 Además, mientras que en una realización de la invención, la declaración de dependencia del productor de un método est� situada justo por encima de dicho método en el código fuente orientado a objetos, en realizaciones alternativas de la invención se encuentra en otro lugar (por ejemplo, las declaraciones de dependencia de productores para todos los métodos para una clase se agrupan juntos dentro de la clase, las declaraciones de dependencia de productores de todos los métodos en todas las clases se agrupan en una tabla de datos separada, etc.) Además, mientras que en una realización de la invención del código de declaración de dependencia del productor est� separada de las declaraciones de dependencia de productores, en realizaciones alternativas de la invención se combinan (por ejemplo, el código de declaración de dependencia del productor se encuentra dentro de los paréntesis de la declaración de dependencia del productor, el código de declaración de dependencia del productor se coloca directamente por debajo de la declaración de dependencia de productor y es tratado por el
65 entorno de ejecución como una sola unidad, etc.)
Las Figuras 7H-I ilustran la distinción entre subgrafos diferentes que pueden existir en un grafo de productores debido a los productores de determinación de dependencia. La Figura 7H ilustra grafos de productores de ejemplo de los productores estándar de acuerdo con una realización de la invención. Específicamente, la figura 7H muestra un grafo productor con nodo raíz S 1, un grafo productor con nodo raíz S5, y un grafo productor con nodo raíz S 11. 5 El productor estándar S 1 tiene como productores estándar descendientes S2, S3 y S4; productores estándar S2 y S3 tienen como productores estándar descendientes S7 y S8; el productor estándar S5 tiene como productores estándar descendientes S4 y S6; y el productor estándar S11 tiene como productores estándar descendientes S6 y S10. Los grafos de productores de ejemplo de la figura 7H se pueden descubrir, construir, y girar con cualquier número de dependencias de productores y los productores de determinación de dependencia. La Figura 7I ilustra un ejemplo de dependencias de productores y los productores de determinación de dependencia para descubrir, resolver, y construir el grafo de productor de la figura 7H. En concreto, la figura 7I muestra los grafos de la figura 7H como subgrafos de un conjunto más amplio de grafos de los productores. En otras palabras, los grafos de productores de la figura 7I incluyen los grafos de la figura 7H (en adelante, los "subgrafos objetivo" y se ilustra con líneas de flecha sólidas y óvalos sólidos) y grafos que ayudan en el descubrimiento, resolución, y creación de los 15 subgrafos objetivo (referidos como "subgrafos de decisión e ilustrados utilizando líneas de flecha de trazos y óvalos de trazos). Los subgrafos de decisiones en la figura 7H incluyen los productores de determinación de dependencia (DDPs) 1-11 y los productores estándar S9-10. En la figura 7H, S1 se presenta como dependiente de DDPs1-3, que, respectivamente, devuelven dependencias de productores declaradas de manera descendente de S1 S2, S3 y S4, S4 se muestra como dependiente de DDP4, que devuelve una dependencia del productor declarada de manera ascendente S5 en S4; S5 se muestra como dependiente de DDP5, que devuelve una dependencia de productor declarada de manera descendente S5 en S6; S3 se muestra como dependiente de DDP6, que a su vez depende de DDP8, que devuelve una dependencia del productor declarada de manera descendente de DDP6 en S9 y S10, lo que hace que DDP6 devuelva una dependencia declarada de manera descendente S3 en S7; S3 se muestra como dependiente de DDP7, que devuelve una dependencia de productor declarada de manera descendente S3 en S8,
25 S8 se muestra como dependiente de DDP9, que devuelve una suscripción adherente para la que S6 es un productor de activación y S11 es el padre creado (por lo tanto, la dependencia de productor de S11 en S6); S2 se muestra como dependiente de DDP10, que devuelve una colección de dependencia de productor declarado de manera descendente S2 en S7 y S8, y S11 se muestra como dependiente de DDP 11, que devuelve una dependencia del productor declarada de manera descendente S11 en S10. Se debe entender que un productor estándar puede ser tanto parte de un subgrafo objetivo y un subgrafo de decisión (por ejemplo, véase S10). Vale la pena señalar que los subgrafos objetivos son los datos que circulan en el sentido de que los datos fluyen de un productor a otro productor estándar del grafo.
Programaci�n y marco de ejecución de ejemplo
35 La figura 8A es un diagrama de bloques que ilustra un primer marco de ejemplo en el que las aplicaciones se proporcionan a los usuarios finales de acuerdo con una realización de la invención. El marco que se muestra en la figura 8A incluye tres divisiones básicas. La primera división incluye la creación del entorno de ejecución con el soporte de la programación orientada a grafo de productor 810. Esta primera división es llevada a cabo por los programadores con conocimientos de programación muy avanzados. Cuando se trabaja en esta división, a los programadores se les conoce como los programadores de entorno de ejecución. Cuando se crea un entorno de ejecución con soporte de programación orientado a grafo de productor, los programadores de entorno de ejecución incluyen soporte para grafos de producto, as� como el soporte para la ejecución de los distintos tipos de comandos que se utilizan en el código de la transformación, el código de instancias, y el código de preparación de datos.
45 La segunda división incluye la creación de código fuente de aplicaciones orientado a objetos 820 para ser ejecutado por el entorno de ejecución. El código fuente de aplicación orientado a objetos 820 incluye dos divisiones básicas: 1) las definiciones de clase que incluyen la lógica de negocio expresada en métodos con declaraciones de dependencia de productores 822 (este puede incluir opcionalmente otras funcionalidades, tales como una interfaz gráfica de usuario -en cuyo caso, la interfaz gráfica de usuario se escribe utilizando productores y declaraciones de dependencia de productores), y 2) definiciones de clase que incluyen el código de cliente expresado en los métodos 824, incluyendo el código de instancias (clase, instancias, y productor(es) de interés, para provocar la generación del grafo(s) de productores) 824A, código de preparación de datos 824B (por ejemplo, los comandos del sistema, tales como comandos de ajuste que desencadenan la principal de las salidas de producción),comandos de ejecución
55 global 824C para provocar la ejecución del grafo(s) de productor (por ejemplo, comandos ejecutar y obtener), y cualquier interfaz gráfica de usuario necesaria 824d (no incluidas en 822). Las declaraciones de dependencia de productores se utilizan para definir los lazos entre los productores durante la definición de las clases que incluyen la lógica de negocio, antes quelas instancias posteriores de esas clases se crean. El código fuente orientado a objetos 820 es de clase hard codificado, instancia y los métodos que se compilan y ejecutan.
Mientras que en una realización de la invención un comando de ejecución global es implementado, la ejecución que hace que el intento de ejecución de todos los grafo(s) de productor que se encuentren en la estructura del grafo(s) del productor 380, realizaciones alternativas de la invención o, alternativamente, también aplican un comando de ejecución específico del grafo que requiere la identificación de un grafo dado del grafo(s) de productor actual que se
65 va a ejecutar. Además, el comando de ejecución global puede ser explícito (por ejemplo, ajuste, ajuste, ajuste, ejecutar, obtener, obtener) o implícito en función de la implementación del entorno de ejecución. Por ejemplo, un comando de ejecución global implícito podría ser: 1) provocado por el primer comando obtener en un productor de interés (por ejemplo, ajuste, ajuste, ajuste, obtener (ejecución implícita), obtener), 2) provocado por cada manipulación de datos (ajuste (ejecución implícita), ajuste (ejecución implícita), ajuste (ejecución implícita), obtener, obtener), etc.
5 La segunda división se realiza de nuevo por los programadores con conocimientos de programación más avanzados, as� como la comprensión de los objetivos de negocio de la aplicación. Cuando se trabaja en esta división, los programadores son conocidos como programadores de aplicaciones. Como parte de esto, si la aplicación requiere una interfaz gráfica de usuario, los programadores de aplicaciones también diseñan y codifican la interfaz gráfica de usuario para la aplicación específica, y por lo tanto, también se les conoce como diseñadores de aplicaciones.
La tercera división incluye el uso de programas de aplicación que se ejecutan durante el tiempo de ejecución. La tercera división es llevada a cabo por los usuarios finales que no necesitan tener conocimientos de programación. El
15 programa de aplicación puede ser distribuido en una variedad de formas (por ejemplo, como el código fuente; una transformación de código fuente, tales como código de bytes; como binario, etc.). Además, el programa de aplicación puede ser distribuido para su utilización independiente 830 (en cuyo caso, el programa de aplicación completo (y el entorno de ejecución si no est� ya presente) se proporciona a un sistema inform�tico) y/o uso del cliente/servidor. En una realización de la invención, una distribución de cliente/servidor incluye la difusión de las definiciones de clase que incluyen la lógica de negocio expresada en métodos con declaraciones de dependencia de productores 822 (y el entorno de ejecución si no est� ya presente) para el uso del servidor 832 y las definiciones de clase que incluyen el código de cliente expresado en los métodos 824 (y el entorno de ejecución si no est� ya presente) para uso del cliente 834, donde el uso del cliente 834 en un sistema inform�tico hace que la comunicación con el uso del servidor 832 en un sistema servidor.
25 La figura 8A muestra también un módulo de interfaz de usuario gráfica de diseño de salida de productor interactivo configurable opcional 840 que se proporciona para el uso independiente 830 y el uso del cliente 834. El código fuente orientado a objetos 820 sería dirigido por el entorno de ejecución para generar el grafo(s) de productor, y módulo de interfaz de usuario gráfica de diseño de salida de productor interactivo configurable 840 permite mostrar gráficamente las salidas de e interactuar con los grafos del productor. En concreto, el módulo de interfaz de usuario gráfica de diseño de salida de productor interactivo configurable 840 incluye: 1) una configuración y el módulo de interfaz de usuario grafo de asignado 844 para permitir la configuración de la diseño y asignado de las salidas de productor seleccionadas (por ejemplo, las áreas de la pantalla a ser utilizadas, cómo se van a mostrar los datos, etc.), y 2) una representación y módulo de interfaz de usuario gráfica de la interacción 846 para hacer la disposición
35 configurada y para permitir la predominancia de salidas de productores (que resulta en la actualización de los grafos de productores a través un comando de ejecución global). Se debe entender que el módulo de interfaz de usuario gráfica de diseño de salida de productor interactivo configurable 840 puede o no puede ser creado por la misma entidad que escribe el entorno de ejecución 810.
La figura 8B es un diagrama de bloques que ilustra un segundo ejemplo de marco en el que las aplicaciones se proporcionan a los usuarios finales de acuerdo con una realización de la invención. La Figura 8B es idéntica a la figura 8A, con las siguientes excepciones: 1) el uso independiente 830 no est� presente, 2) el código fuente orientado al objeto 820 se proporciona para el uso del servidor 832, mientras que el código de cliente 824 no est� previsto para uso del cliente 834, 3) el módulo de interfaz de usuario gráfica de diseño de salida de productor
45 interactivo configurable 840 se proporciona para el uso del servidor 832 y no el uso del cliente 834, y 4) se proporciona una interfaz de cliente de diseño de salida de productor de interactivo configurable 885 para el uso del cliente 834. La interfaz de cliente de diseño de salida de productor de interactivo configurable 885 se utiliza para conectar con el módulo de interfaz de usuario gráfica de diseño de salida de productor interactivo configurable 840.
Independientemente del marco utilizado, en una realización de la invención, el marco de programación orientado al grafo de productor ofrece la posibilidad de interfaz con los programas no escritos con declaraciones de dependencia de productores. Esta capacidad para interactuar con los programas que no est�n escritos con las declaraciones de la dependencia de productores incluye: 1) una parte que llama (por ejemplo, una interfaz gráfica de usuario no escrita de acuerdo a la programación orientada a grafo de productor), y 2) una parte llamada (tal como una fuente de
55 datos externa no escrita de acuerdo a la programación orientada a grafo de productor). La parte que llama puede, a través de código de cliente, emitir comandos de programación orientados a productores de grafos. La parte llamada se implementa como parte de los productores que envuelven la parte llamada (referidos como “productores envueltos"). Ejecutar la parte llamada (tal como la lectura de los datos desde una fuente de datos o suscribirse a los cambios de datos en una fuente de datos externa) puede a su vez disparar modificaciones de instancia. Estos cambios pueden ocurrir llamando a los métodos establecidos de propiedad en el código de los productores envueltos. Los productores de propiedad obtener (captadores) son obligados a tener dependencias en estos productores envueltos, con el fin de asegurarse de que las modificaciones de instancia provocadas por los cambios que ocurren en una fuente de datos externa son debidamente propagadas a través del grafo de productor. Como se describió anteriormente, las diferentes realizaciones pueden soportar una o más formas para la declaración de las
65 dependencias de productores con respecto a los productores de propiedad. Por ejemplo, en algunas realizaciones de la invención que soportan dependencias de productores de secuenciaci�n, puede ser utilizadas SequencingDependencies para declarar dependencias de productores de secuenciaci�n declaradas de manera descendente de no suscripción en los productores envueltos. Como otro ejemplo, en algunas realizaciones de la invención que soportan dependencias de productores de secuenciaci�n y dependencias de productores declaradas de manera ascendente de no suscripción, UpwardDependencies y/o WeaklyConstrainedDependencies pueden ser
5 colocadas en la declaración de dependencia del productor de los productores envueltos para crear dependencias de productores de secuenciaci�n declaradas de manera ascendente de no suscripción para los productores de propiedad.
Las Figuras 8C-F ilustran imágenes de ejemplo y el uso del módulo de interfaz de usuario gráfico de diseño de salida del productor interactivo configurable 840 de acuerdo con una realización de la invención. Si bien las realizaciones de la invención se describirán con referencia al módulo de interfaz de usuario gráfico de diseño de la salida del productor interactivo configurable 840 proporcionado para la configuración, la asignación, y la interacción con las salidas seleccionadas del grafo(s) de productores actual en la forma de una hoja de cálculo, realizaciones alternativas de la invención pueden ser implementadas para proporcionar soporte adicional o alternativamente para
15 otra forma. Además, aunque formas de ejemplo de realización de la configuración, la asignación, y la interacción en la forma de una hoja de cálculo se describe de acuerdo con algunas realizaciones, otras realizaciones de la invención pueden realizar estas operaciones de otra manera, con interfaz diferente, y/o con una distribución de pantalla diferente. Además, la hoja de cálculo puede soportar cualquiera de las funcionalidades conocidas asociadas con las hojas de cálculo (por ejemplo, selección de color, selección de fuentes, gráficos de barra/pie/línea, tablas dinámicas, guardar los diseños, cargar diseños, etc.).
Las Figuras 8C-Dilustran imágenes y el uso ejemplares de la selección de celdas libres de acuerdo con una realización de la invención, mientras que las figuras 8E-F ilustran imágenes y el uso ejemplares de creación de la tabla de acuerdo con una realización de la invención. Cada una de las figuras 8C-F incluyen una barra de menú 850 25 a lo largo de la parte superior de la pantalla, una lista de las clases (con sus métodos de propiedad obtener) 852 de los productores en el grafo de productor actual y sus salidas sobre el lado izquierdo de la pantalla, y un visor de configuración y la asignación 854 llenando el resto de la pantalla con un diseño a modo de hoja de cálculo. Además, las figuras 8C-F también muestran la lista siguiente de ejemplos de clases con sus métodos de propiedad obtener en la lista 852: 1) la clase PERSONA, 2) los métodos de propiedad obtener de la persona de la clase, incluyendo NOMBRE (por ejemplo, cadena) y APELLIDO (por ejemplo, cadena), GÉNERO (por ejemplo, cadena), DIRECCIÓN PERSONAL (instancia de la clase DIRECCIÓN), DIRECCIÓN PROFESIONAL (instancia de la clase DIRECCIÓN),FECHADE NACIMIENTO (por ejemplo, fecha) y EDAD (por ejemplo, entero), 3) la clase DIRECCIÓN, y 4) los métodos de propiedad obtener de la clase DIRECCIÓN incluyendo CIUDAD(por ejemplo, cadena), ESTADO (por ejemplo, cadena), CÓDIGO POSTAL (por ejemplo, cadena). Por lo tanto, el grafo de productor actual incluye a los
35 productores de las clases PERSONA y DIRECCIÓN, as� como los productores cuyas salidas son de las clases PERSONA y DIRECCIÓN. También es destacable que el método de propiedad obtener EDAD calcula una edad basada en la salida del método de propiedad obtener FECHA DE NACIMIENTO, como tal, un productor de una instancia del método de la propiedad obtener EDAD depender� de un productor de una instancia del método de la propiedad obtener FECHA DE NACIMIENTO.
Las Figuras 8C-D muestran el siguiente texto libre introducido en las celdas consecutivas de la primera columna del espectador: CLIENTE, NOMBRE, APELLIDO, FECHA DE NACIMIENTO, y EDAD, mientras que las figuras 8E-F muestran lo siguiente: 1) texto libre introducido en la primera fila del visor–LISTA DE CLIENTES, y 2) texto libre introducido en las celdas consecutivas de la segunda fila del visor NOMBRE, APELLIDO, FECHA DE NACIMIENTO
45 y EDAD.
La Figura 8C ilustra una pantalla y el uso de ejemplo de selección libre de celdas con el módulo de interfaz de usuario gráfico de diseño de la salida del productor interactivo configurable 840 de acuerdo con una realización de la invención. La Figura 8C muestra un conjunto de mapeos 856 de la clase PERSONA y una selección de los métodos de la propiedad obtener de la clase PERSONA a las distintas celdas del visor. En concreto, la clase PERSONA se asigna a la celda a la derecha del texto libre CLIENTE. Como parte de esta acción, algunas realizaciones de la invención indicar� al usuario que seleccione uno de una serie de filtros soportados (mostrar como la selección de filtro 858) (por ejemplo, abrir lista desplegable, flechas de desplazamiento del formulario, etc.) Estos filtros permiten la selección de una o más claves de instancia de los productores de la clase seleccionada, o una o más claves de
55 instancia de los productores cuya clase de salida es la clase seleccionada. Si bien algunas realizaciones de la invención soportan una serie de filtros, otras realizaciones de la invención predeterminan a uno (y permite al usuario elegir si selecciona uno diferente) o soportar sólo uno y no necesita realizar la selección del filtro 858. Las asignaciones 856 también muestran que los métodos de la propiedad obtener NOMBRE, APELLIDO, FECHA DE NACIMIENTO, y EDAD de la clase PERSONA son, respectivamente, asignadas a las celdas adyacentes a las celdas con texto libre correspondiente. Tal asignación se puede realizar con cualquier número de técnicas bien conocidas, incluyendo arrastrar y soltar, al escribir en un campo GUI, etc.
La Figura 8D ilustra otra pantalla y el uso de ejemplo de selección libre de celdas con el módulo de interfaz de usuario grafo de diseño de la salida del productor interactivo configurable 840 de acuerdo con una realización de la 65 invención. La Figura 8D muestra que la celda a la que se ha asignado la clase PERSONA para permitir por ejemplo la selecci�n854. En concreto, basado en el filtro que se utiliza para esta celda, el usuario tiene la oportunidad de
seleccionar una instancia de la clase PERSONA a partir de una lista que incluye la clave(s) de instancia de los productores de la clase PERSONA, y las claves de instancia de los productores que producen la clase PERSONA. La selección de una instancia de la clase PERSONA (o la existencia de una sola instancia) da como resultado de la población automática de las celdas, a las que los métodos de propiedad obtener de la clase PERSONA fueron
5 asignados, con las salidas de los métodos de propiedad obtener correspondientes de esa instancia. Este poblamiento de la tabla sobre la base de las instancias de la clase PERSONA es etiquetada 858. En el ejemplo de la figura 8D, las celdas en las que los métodos de propiedad obtener NOMBRE, APELLIDO, FECHA DE NACIMIENTO, y EDAD de la clase PERSONA fueron asignados, respectivamente, que se puebla con JOHN, SMITH, 7/20/1990, y 16.
La Figura 8D también muestra que las celdas del visor a las que los métodos de propiedad obtener se han asignado pueden ser anuladas. A modo de ejemplo, la figura 8D muestra que si la celda a la que se asigna EL método de propiedad obtener FECHA DE NACIMIENTO se reemplaza, a continuación, causar� que el predominio de la salida del productor, cuya salida est� actualmente poblando dicha celda, la invocaci�n de un comando de ejecución global
15 (que se traduciría en una re ejecución del productor, cuya salida est� actualmente poblando la celda a la que se asigna el método de la propiedad obtener EDAD), y cualquier actualización necesaria de la pantalla.
La Figura 8E muestra un de ejemplo de pantalla y el uso de creación de la tabla con el módulo de interfaz de usuario gráfica de disposición de salida del productor interactivo configurable 840 de acuerdo con una realización de la invención. La Figura 8E muestra una zona y la operación orientación de la selección 864 se realiza para identificar una tabla de tres filas verticales directamente en las celdas con el texto libre NOMBRE, APELLIDO, FECHA DE NACIMIENTO y EDAD (ilustradas con una línea gruesa discontinua en torno a estas celdas). Diferentes formas de realización de la invención pueden soportar que el usuario realice esta operación de muchas maneras, entre ellas: 1) selección de una zona con un dispositivo de entrada como un ratón, y 2) selección entre una tabla vertical, horizontal
25 o dinámica con una interfaz como un menú emergente – asumiendo que múltiples orientaciones son soportadas). La Figura 8E también muestra un conjunto de asignaciones 866 de métodos de propiedad obtener seleccionados de la clase PERSONA a celdas diferentes del visor. En concreto, las asignaciones de 866 muestran que los métodos de propiedad obtener NOMBRE, APELLIDO, FECHA DE NACIMIENTO, y EDAD de la clase PERSONA son, respectivamente, asignados a las celdas directamente debajo de las celdas con texto libre correspondiente.
La figura 8F ilustra otra pantalla y uso de ejemplo de creación de la tabla con el módulo de interfaz de usuario grafo de diseño de la salida del productor interactivo configurable 840 de acuerdo con una realización de la invención. Las asignaciones 866 resulta en la población automática de las columnas de la tabla, a las que los métodos de propiedad obtener de la clase PERSONA fueron asignados, con las salidas de los métodos de propiedad obtener
35 correspondientes de las instancias de esa clase Este poblamiento de la tabla sobre la base de las instancias de la clase PERSONA es etiquetada 868. En el ejemplo de la figura 8D, las columnas a las que los métodos de propiedad obtener NOMBRE, APELLIDO, FECHA DE NACIMIENTO, y EDAD de la clase PERSONA fueron asignados se rellenan con las siguientes filas de datos: 1) STEVE, COLLINS, 7/20/1990, y 16, 2) JENNIFER, ADAMS, 7/20/1990, y 16, y 3) JOHN, SMITH, 7/20/1985, y 21.
Como en la figura 8D, la figura 8F muestra que las celdas del visor a las que los métodos de propiedad obtener han sido asignados pueden ser anulados. A modo de ejemplo, la figura 8F muestra que si la celda de la segunda fila de la columna a la que se asigna el método de propiedad obtener FECHA DE NACIMIENTO se reemplaza, a continuación, har� que el predominio de la salida del productor, cuya salida est� actualmente rellenando dicha celda,
45 invoque un comando de ejecución global (que daría lugar a una ejecución adicional del productor, cuya salida est� actualmente poblando la celda a la que el método de propiedad obtener EDAD se asigna), y cualquier actualización necesaria de la pantalla.
Las Figuras 8C-F ilustran pantallas de ejemplo generadas por la configuración y la asignación del módulo de interfaz de usuario gráfica 842. Las pantallas generadas por la prestación y el módulo de interfaz de usuario gráfica interactivo 846 son los mismos, con la excepción de que la lista de las clases (con sus métodos de propiedad get) 852 la configuración y el visor asignado 854 se sustituyen por un visor de representación e interactivo (que no se muestra) que contiene la misma imagen que el visor de configuración y de asignación 854 mostrado (siendo la diferencia que la función de asignación ya no est� disponible).
55 Ejemplos de esquemas de distribución de entorno de ejecución
Las figuras 9A-C ilustran varios esquemas para la distribución de un entorno de ejecución con el soporte del de programación orientado a grafo de productor. Se debe entender que estos esquemas de distribución son ejemplares, y por lo tanto, otros esquemas est�n dentro del alcance de la invención.
La Figura 9A es un diagrama de bloques que ilustra un primer esquema para la distribución de un entorno de ejecución con el soporte de programación orientada al grafo de productor de acuerdo con una realización de la invención. En la figura 9A, el código fuente orientado a objeto 905 (que incluiría las declaraciones de dependencia 65 de los productores) se muestra en la parte superior de un entorno de ejecución con el soporte de programación orientado a grafo de productor 910, que es en la parte superior de un entorno de ejecución con la carga de clases,
creaci�n de instancias de clases dinámicas, invocaci�n del método de única dinámica, y la introspecci�n de la clase/método 915, que es en la parte superior de un sistema operativo 920. En la figura 9A, el entorno de ejecución 910 trabaja con el entorno de ejecución 915. Aunque cualquier número de mecanismos pueden ser utilizados para permitir al entorno de ejecución 910 trabajar con el entorno de ejecución 915, se describe a modo de ejemplo una
5 instalación de metadatos. Una instalación de metadatos permite que la información adicional se añada al código fuente, cuya información es utilizada por las herramientas de desarrollo. Por ejemplo, la instalación de metadatos para especificación Java define una API para los campos de anotación, los métodos y clases de que tienen atributos particulares que indican que deben ser tratados de manera especial por las herramientas de desarrollo, herramientas de implementación, o en las librerías en tiempo de ejecución (Java Specification Request 175). En este ejemplo, un programador que programa el código fuente orientado a objetos 905 a�adir�a anotaciones a los métodos en forma de las declaraciones de dependencia de los productores. Dado que estas anotaciones se entregan por el entorno de ejecución 915 al entorno de ejecuci�n910, el entorno de ejecución 910 dicta la sintaxis de las declaraciones de dependencia de los productores. En la figura 9A, los tiempos de ejecución de 910 y 915 pueden ser desarrollados y/o distribuidos por diferentes organizaciones.
15 La figura 9B es un diagrama de bloques que ilustra un segundo esquema para la distribución de un entorno de ejecución con el soporte de programación orientado al grafo de productor de acuerdo con una realización de la invención. En la figura 9B, el código fuente orientado a objetos 925 (que incluiría las declaraciones de dependencia de los productores) se muestra en la parte superior de un entorno de ejecución (con la carga de clases, creación de instancias de clases dinámicas, invocaci�n de método único dinámico, y la introspecci�n clase/método, as� como el soporte de programación orientado a grafo de productor 930, que est� en la parte superior de un sistema operativo
935. En comparación con la figura 9A, el entorno de ejecución 910 y el 915 se han combinado en un solo entorno de ejecución 930. Como resultado de esta combinación, el entorno de ejecución 930 dicta la sintaxis de las declaraciones de dependencia de los productores. Por lo tanto, un programador de la programación del código
25 fuente orientado a objetos 925 a�adir�a las declaraciones de dependencia de productores en la sintaxis necesaria.
La figura 9C es un diagrama de bloques que ilustra un tercer esquema de la distribución de un entorno de ejecución con el soporte de programación orientado al grafo de productor de acuerdo con una realización de la invención. En la figura 9C, el código fuente orientado a objetos 940 (que incluiría las declaraciones de dependencia de los productores) se muestra en la parte superior de un entorno de ejecución del sistema operativo (con la carga de clases, creación de instancias de clases dinámicas, la invocaci�n de método único dinámico, y la introspecci�n clase/método, as� como el soporte de programación orientado a grafo de productor) 945. En comparación con la figura 9B, el motorde ejecución 920 y el sistema operativo 935 se han combinado en una sola entidad. Como resultado de esta combinación, el sistema operativo en el motorde ejecución 945 dicta la sintaxis de las
35 declaraciones de dependencia de los productores. Por lo tanto, un programador de la programación de código fuente orientado a objetos 940 a�adir�a las declaraciones de dependencia de productores en la sintaxis necesaria.
Aunque se describen las realizaciones en el que el motorde ejecución tiene la carga de clases, creación de instancias de clases dinámicas, la invocaci�n de método único dinámico, y la introspecci�n, la clase/método, realizaciones alternativas pueden incluir más o menos características (por ejemplo, la clonaci�n de instancias, proxies dinámicos, conversiones de tipos primitivos, etc.).
Ventajas de ejemplo
45 En una realización de la invención, las dependencias de los productores se declaran para los métodos como una manera de especificar la secuencia de invocaci�n de método con las instancias correspondientes (en los casos apropiados incluyen los casos para utilizar como argumentos, las instancias para ser utilizadas por los métodos de instancia, y la meta instancias de la clase utilizadas por los métodos de clase) sin necesidad de utilizar el código de la secuencia de invocaci�n manual. En efecto, el trabajo de generar parte o la totalidad de la invocaci�n manual del código de secuencia se sustituye por: 1) el trabajo realizado por el programador de la aplicación para escribir las declaraciones de dependencia de productores, y 2) el trabajo realizado por el motorde ejecución para descubrir y construir el grafo(s) de productor y ejecutar los productores de los grafo(s) de productor. En otras palabras, la lógica que figuraba anteriormente en el código de la secuencia de invocaci�n manual es detectable por el motorde ejecución durante el tiempo de ejecución sobre la base de las declaraciones de dependencia de los productores. Por
55 lo tanto, las declaraciones de dependencia de productor informan al entorno de ejecución qué los métodos de qué instancias con qué los argumentos ejecutar, y cuándo para fines de sincronización. Aunque el esfuerzo de escribir el entorno de ejecución es relativamente grande, sólo necesita ser escrito una vez en que puede utilizarse para ejecutar cualquiera de las aplicaciones orientadas a objetos escritas para el entorno de ejecución, en cambio, para una aplicación típica, el esfuerzo de escribir las declaraciones de dependencia del productor es relativamente bajo en comparación con la escritura manual del código de secuenciaci�n de invocaci�n.
Reducci�n de errores de programación
La programación orientada a grafos del productor generalmente reduce los costos asociados con la depuración y/o
65 la optimización del rendimiento del código de secuenciaci�n de invocaci�n manual. Esto es cierto para al menos la razón de que la infraestructura de un programa de aplicación es conceptualmente un conjunto de grafos no
formalizados de métodos de transformación de objetos (la salida de un método de un objeto es la entrada a otro, y as� sucesivamente) que opera sobre entradas específicas. Las declaraciones de dependencia de productores y el entorno de ejecución con el soporte de programación orientado a grafos del productor formalizan estos grafos en forma de grafos de productores. Por lo tanto, para cada oportunidad para que los datos cambien, el programador de 5 la aplicación no tiene por qué considerar su efecto y escribir la invocaci�n manual de código de la secuencia para provocar los métodos de transformación adecuados de las instancias apropiadas para ser invocadas en el orden apropiado, con las entradas correspondientes. En otras palabras, para cada oportunidad en que cambien los datos, no es necesario que un programador de la aplicación considere que los grafos se ven afectados, as� como qué métodos de transformación de instancias dentro de los grafos se ven afectados. Por el contrario, el módulo de generación de grafo de productor automatizado descubre y construye los grafos de productores y el módulo de ejecución del grafo de productor vuelve a ejecutarlos grafos de productor, según sea necesario para reflejar los cambios en los datos. Esta automatización ayuda a los programadores de aplicaciones a evitar errores tales como: 1) invocar los métodos de transformación adecuados de las instancias apropiadas en el orden incorrecto, 2) olvidarse de incluir comandos para hacer que uno o más métodos necesarios de transformación de las instancias de
15 un grafo sean invocados en respuesta a algunos datos que se cambian, y 3) incluir comandos para realicen que los métodos de transformación innecesarios de instancias que deben invocarse que respondan a algunos datos que se cambian (por ejemplo, incluyendo comandos para invocar métodos de transformación de las instancias que no forman parte de un grafo afectado por el cambio en los datos; incluyendo comandos para invocar métodos de transformación de instancias que forman parte de un grafo afectado por el cambio en los datos, pero no se ven afectados en s� mismos, etc.).
Sincronizaci�n
Tal como se describió previamente, el cambio de las salidas de productores durante la ejecución permite la
25 sincronización. As�, en términos de comparación con el patrón de observador, las declaraciones de dependencia de productores notifican un entorno de ejecución con el soporte de programación orientado a grafo de productor a las dependencias, y el entorno de ejecución determina qué productores y cuándo volver a llamar.
Capacidad para explicar totalmente cualquier resultado
En una realización de la invención, un módulo de perforación/visualización (no mostrado) est� incluido como parte del entorno de ejecución. El módulo de perforación/visualización proporciona una interfaz gráfica de usuario que, a través de la interacción de un usuario final, permite perforar en el grafo de productor (caminando por un grafo de productor desde el nodo raíz) para ver las salidas de los diferentes productores del grafo de productor. Esto permite
35 que un usuario final vea los distintos resultados que contribuyeron a la salida del productor de interés, incluyendo los valores de los datos y las dependencias (devueltos por los productores de la determinación de dependencia). Además, en una realización de la invención, este módulo de perforación/visualización proporciona la habilidad para el usuario final para ver el código dentro de los métodos de los productores, los valores de los casos de los productores, y/o el contenido de las clases de los productores.
As�, el módulo de perforación/visualización ofrece una variedad de actividades de transformación posteriores, incluida la depuración, la explicación de las salidas, etc.
Aplicaci�n práctica / Efecto técnico /Aplicabilidad industrial ejemplares
45 Hay una variedad de aplicaciones prácticas de ejemplo de los diferentes aspectos y realizaciones de la invención. Por ejemplo, el entorno de ejecución, como parte de los programas de aplicación que se ejecuta, hace que la recuperación de la información de un medio de almacenamiento de la máquina (por ejemplo, el acceso al código fuente orientado a objetos, incluidas las declaraciones de dependencia de los productores), el almacenamiento de la información a un medio de almacenamiento de la máquina (por ejemplo, el almacenamiento de las estructuras de datos como la estructura de grafo(s) de productor, etc.), la operación de recursos de procesamiento del hardware, el suministro de salidas de productor(es) de interés (por ejemplo, a través de una interfaz gráfica de usuario, almacenamiento en medios de almacenamiento de la máquina, transmisión, etc.), etc. En cierto sentido, la actividad de pre-procesamiento incluye la escritura de este tipo de programa de aplicación y/o el suministro de datos (dichos
55 datos pueden representar cualquier número de elementos físicos y/o prácticos, como valores financieros, valores geógrafos, valores meteorológicos, valores actuariales, valores estadísticos, medidas físicas, valores de estado de la máquina, etc.), mientras que la actividad post-procesamiento incluye la provisión de los resultados (dichos resultados pueden representar cualquier número de elementos físicos y/o prácticos, tales como análisis financiero, análisis geógrafo, análisis meteorológico, análisis actuarial, análisis estadístico, medidas industriales, información de control de la máquina, etc.). A modo de ejemplo específico, la actividad de procesamiento posterior puede ser proporcionada por: 1) el módulo visor de grafo de productor 1062 de la figura 10 para mostrar gráficamente una representación del grafo(s) de productor actual generado por el entorno de ejecución, y/o 2) el módulo de interfaz de usuario gráfico de diseño de salida de productor interactivo configurable 840 (véase también, módulo de interfaz de usuario gráfico de diseño de salida de productor interactivo configurable 1085 de la figura 10) para mostrar
65 gráficamente las salidas de e interactuar con los grafos de los productores.
Como otro ejemplo, el programa de aplicación con las declaraciones de dependencia de productores en s�, cuando se ejecuta mediante el entorno de ejecución, representa los elementos físicos/prácticos y provoca las operaciones descritas anteriormente. A modo de ejemplo específico, estas declaraciones de dependencia de productores hacen que se formen estructuras de datos en los medios de almacenamiento de la máquina que responden a su ejecución
5 por el entorno de ejecución. Además, las declaraciones de dependencia de productores se almacenan y se recuperan a partir de los medios de almacenamiento de la máquina junto con el programa de aplicación. Además, estas declaraciones de dependencia de productores representan las relaciones entre los productores, mientras que los productores representan las operaciones a realizar (métodos) e instancias. Las instancias en programación orientada a objetos se pueden utilizar para representar los elementos físicos y/o prácticos, mientras que los productores representan las operaciones que se realizan en estas representaciones.
A modo de otro ejemplo, un conjunto de uno o más programas de aplicación y entorno de ejecución de la aplicación transversal de activos de software de gestión de riesgos que incluye cambio de divisas, equidad, tasa de interés, el crédito, inflación, materias primas y productos compuestos de activos cruzados. Estos productos van desde dinero
15 en efectivo y productos físicos vainilla planos a los productos derivados exóticos y complejos. También se incluye un conjunto de modelos matemáticos para estos productos, y sus datos de mercado correspondientes, pago y rutinas de generación de asientos contables y sus observables asociados, modelos de calibración y sus entradas en crudo asociadas.
A modo de otro ejemplo, un conjunto de uno o más programas de aplicación y entorno de ejecuci�npuede implementar un procesador de textos, una hoja de cálculo, un software de comunicación/ correo electrónico, un software de visualización de fotos, un software de detección de virus, un reproductor multimedia, un servidor de base de datos, un juego, una aplicación industrial, y/o un sistema operativo. Por supuesto, los programas de aplicación se pueden implementar para realizar una variedad de otras tareas.
25 Implementaciones de ejemplo
A modo de ilustración, se describirán las realizaciones de ejemplo de la invención que soportan las dependencias, dependencias dinámicas (incluyendo dependencias contingentes y dependencias de suscripción), productores determinación de dependencia explícitos para dependencias de acceso directo y para dependencias de no acceso directo, productores de determinación de dependencia sobre la marcha para dependencias declaradas de acceso directo, las claves de clase, claves de instancia, claves de método, comandos de anulación/des anulación inversa productores (que son los comandos de tipo establecer (set)), y comandos de ejecución globales. Además, las realizaciones de ejemplo opcionalmente soportan un módulo grafo visualizador interactivo del productor y ejecución
35 incremental. Por supuesto, las realizaciones alternativas de la invención pueden aplicar más, menos, y/o diferentes características.
La figura 10 es un diagrama de bloques de una ejecución de ejemplo de acuerdo con una realización de la invención. En la figura 10, la línea divisoria de trazos1000 separa de un cliente de entorno de ejecución 1002 de un entorno de ejecución con el soporte de programación orientado a grafo de productor 1004.
El flujo de ejecución lógico del cliente de entorno de ejecución 1002 incluye bloques 1010, 1020, 1025, 1030 y 1035, y el entorno de ejecución con el soporte de programación orientado a grafo de productor 1004 incluye, respectivamente, bloques correspondientes, 1095, 1098, 1040, 1045, 1070 y 1082, mientras que una línea de flecha 45 sólida representa una relación causal directa desde el bloque 1035 del flujo de ejecución lógica del cliente de entorno de ejecución 1002 con el bloque1070 del entorno de ejecución con el soporte de programación orientado a grafo de productor1004, líneas de flecha de puntos muestran una relación causal a partir de los bloques 1010, 1020, 1025 y 1030 del cliente de entorno de ejecución 1002 de los bloques 1095, 1098, 1040 y 1045 del entorno de ejecución con el soporte orientado a grafo de productor1004. Dependiendo de la realización de la invención, estas relaciones últimas causales pueden ser directas o indirectas. Por ejemplo, similar a la figura 6, una relación causal opcional indirecta a través del uso de un registro de comandos (no mostrado) y/o registro de anulación 1047 puede ser utilizada. Otros bloques 1095 y 1098 son discontinuos porque opcionalmente pueden ser parte de un bloque diferente dependiendo de la realización de la invención (por ejemplo, el bloque 1095 puede ser parte del bloque 1098; el bloque 1090puede ser parte del bloque 1040; los bloques 1095 y 1090pueden formar parte del bloque
55 1040). De manera similar, el bloque 1045 es discontinuo, ya que puede ser opcionalmente parte de un bloque diferente dependiendo de la realización de la invención (por ejemplo, el bloque 1045 puede ser parte del bloque 1070).Del mismo modo, el bloque 1049puede ser parte opcional de un bloque diferente dependiendo de la realización de la invención (por ejemplo, el bloque 1049puede ser parte delbloque1040). En algunas realizaciones, el entorno de ejecución 1004incluyeunm�dulo de adquisición de métricas de1082. El módulo de adquisición dem�tricas1082puede ser parte opcional parte del bloque1070.
En la figura 10, el entorno de ejecución 1002 incluye las definiciones de clase que incluyen la lógica de negocio1010 con datos 1012, los métodos 1014, el ajuste del modo de ejecución 1015, las declaraciones de los productores de dependencia 1016, y opcionalmente las claves de la clase 1090. Las definiciones de la clase 1010 son las clases en 65 un lenguaje de programación orientado a objetos, y por lo tanto se incluyen definiciones de los datos 1012 y los métodos 1014. El ajuste del modo deejecuci�n1015puedeespecificarunmodo de ejecución a nivel de código en el
que el método va a ser ejecutado si el ajuste del modo de ejecución no es anulado posteriormente. Además, estas definiciones de clase 1010 incluyen declaraciones de dependencia de los productores 1016 para el método 1014 como se describió previamente. Además, en una realización de la invención, cada clase tiene una clave de clase 1090 para fines de rastreo.
5 El módulo de la nueva clase 1095 del entorno de ejecución de 1004 carga y hace la introspecci�n sobre las definiciones de clase 1010 (por ejemplo, que responda a los comandos de la nueva clase). Esta carga y la introspecci�n se pueden hacer utilizando cualquier número de técnicas desarrolladas conocidas o por conocer, incluidas las de cargar las clases de forma selectiva con fines de optimización. La carga de las clases por el módulo de clase nueva 1095 se ilustra en las clases 1054 del entorno de ejecuci�n1004. Como parte de la carga y la introspecci�n de las clases 1054, el módulo de clase nueva 1095 también carga e inspecciona las declaraciones de dependencia de productores 1016, como se ilustra por los métodos y las declaraciones de dependencia de los productores1056 en las clases 1054. El módulo de la nueva clase 1095 también mantiene una estructura de seguimiento de la clase 1092 que se utiliza para el seguimiento de las identificaciones de las clases. As�, la
15 estructura de seguimiento de clase 1092 mantiene una correspondencia entre las identificaciones de clase y referencias en las clases 1054. Además, el módulo de la nueva clase 1095 también mantiene una estructura de seguimiento de método 1058 que se utiliza para los métodos de rastreo utilizando las claves de método. Por lo tanto, la estructura de sistema de seguimiento 1058 mantiene una correspondencia entre las claves de método y las referencias a los métodos, as� como información sobre las declaraciones de dependencia de los productores. Además, el módulo de la nueva clase1095puede introducir el ajuste del modo de ejecuci�n1015paralaestructura de decisión configurable basada en los productores 1049, que mantiene los modos de ejecución para los productores.
El cliente de entorno de ejecución 1002 también incluye los comandos de instancias con las claves de instancia 1020. El módulo de instancia nueva 1098 delentorno de ejecuci�n1004 cargalas instancias designadas por los 25 comandos de instancias con las claves de instancia 1020 (por ejemplo, que responda a los comandos de instancia nuevas). Esta carga se puede hacer utilizando cualquier número de técnicas desarrolladas también conocida o por conocer, incluidas técnicas para cargar lasinstancias de forma selectiva para fines de optimización. Como parte de estecarga, el módulo de instancia nueva 1098 accede a la estructura de seguimiento de la clase 1092 mediante una clave de clase para acceder a la clase apropiada de las clases 1054. La cargade instancias por parte del módulo de instancia nueva 1098 se ilustra con las instancias 1052 delentorno de ejecuci�n1004. El módulo de instancia nueva 1095 también mantiene una estructura de seguimiento de instancia 1065 que se utiliza para el seguimiento de las claves de instancia de las instancias. As�, la estructura de seguimiento de instancia 1065 mantiene una correspondencia entre las claves de instancia y referencias en las instancias 1052. Como se indicó anteriormente, el módulo de clase nueva 1095 puede ser parte del módulo de instancia nueva 1098 en que las clases 1054 puede ser
35 cargadaen respuesta a los comandos de instanciaci�n de instancia 1020, en contraposición a separar nuevos comandos de clase.
El cliente de entorno de ejecución 1002 también incluye comandos de productores de instancias con las claves de producción 1025. El módulo de generación de grafo de productor automatizado 1040 del entorno de ejecuci�n1004 cargauna instancia de productores designada por los comandos de instancias de productores con claves de productores 1025 (por ejemplo, que responda a los nuevos comandos de productores que designan el conjunto actual de los productores de interés). Además, módulo de generación de grafo de productores automatizado 1040 también descubre, construye, y, opcionalmente, resuelve el grafo(s) de productor en respuesta a la serie actual de los productores de interés, como se ha descrito anteriormente. En una realización de la invención, una clave 45 productor se compone de una clave de clase, clave de instancia, y clave de método. Como parte de esta instancia de los productores, el módulo de generación de grafo de productor automatizado 1040: 1) accede a la estructura de seguimiento de la clase 1092 con la clave de clase para acceder a la clase apropiada de las clases 1054, 2) accede a la estructura de seguimiento de instancia 1065 con la clave de instancia para acceder a la instancia adecuada de las instancias 1052, y 3) accede a la estructura de seguimiento de m�todo1058 que utiliza la clave de método para acceder a la declaración de dependencia de productor apropiada. La instancia de los productores designados por los comandos de productores de instancias con las claves de producción 1025 y la instancia de cualquiera los productores descubiertos y la construcción del grafo de productor est�n ilustradas por la estructura del grafo(s) del productor 1060 del entorno de ejecuci�n1004. As�, en una realización de la invención, las claves de productores identificadas por los comandos de productores de instancias con claves de productores 1025 y las descubiertas a
55 través de la generación de grafo de productor se almacenan en la estructura de grafo(s) del productor 1060, junto con información adicional para representar el grafo(s) de productor actual.
Tal como se describió anteriormente, el bloque 1095 y 1098 pueden ser parte del bloque 1040, y por lo tanto, la decisión sobre qué clases, instancias, y productores para cargar una instancia es impulsada por qué productores est�n en el grafo(s) de productor actual. En tal realización de la invención, la carga de clase, de instancias, y productores est� optimizada y es centrada en el productor.
El cliente de entorno de ejecución 1002 también incluye comandos de preparación de datos, incluyendo comandos anulación/anulación inversa de salida del productor 1030. Los comandos de anulación/anulación inversa incluyen la 65 clave del productor del productor al ser anulado/inversamente anulados, as� como los valores de anulación cuando se anulan. El módulo de salida del productor anulado 1045 delentorno de ejecuci�n1004 hace que los productores
designados por los comandos de anulación/anulación inversa de los productores sean anulados/inversamente anulados. Esta relación de causalidad puede ser indirecta o directa.
En el caso de la relación de causalidad indirecta, el módulo de salida del productor de anulación 1045 rellena el
5 registro de anulación 1047 para el consumo por el módulo de ejecución de grafo de productor 1070. En el caso de relación causal directa, el módulo de salida del productor de anulación 1045 accede al cach� de salida del productor 1097 de la estructura de grafo(s) del productor 1060 y las instancias 1052. Específicamente, como se ha descrito con referencia al módulo de salida del productor de anulación 390, en una realización, los productores pueden ser clasificados como productores de propiedad o productores de método, por lo que el módulo de salida del productor de anulación 1045 puede incluir una característica del módulo de salida del productor de propiedad de anulación para productores de propiedad anulados y un módulo de salida del productor de método de anulación para los productores de método anulados; la anulación de un método de propiedad hace que el valor anulado sea almacenado en la memoria cach� de salida del productor 1097 de la estructura de grafo(s) del productor1060 y ser almacenada en los datos de la instancia adecuada de las instancias 1052, mientras que la anulación de un método
15 del productor hace que el valor anulado sea almacenado en la memoria cach� de salida del productor 1097.
En una forma de realización de la invención los productores no pueden ser anulados antes de que un grafo de productor del que ser�n parte haya sido ejecutado inicialmente (por lo tanto, el productor ya se habr� instanciado como resultado de haber sido designado como un productor de interés o como resultado de ser descubierto por el módulo de generación de grafo de productor autom�tico1040). Sin embargo, en la realización mostrada en la figura 10, los productores pueden ser anulados antes de la ejecución inicial al ser instanciado y anulados con un comando de anulación del productor. Este productor anulado normalmente con el tiempo formar� parte de un grafo de productor a través del proceso de descubrimiento (por ejemplo, cuando se resuelve una dependencia dinámica). En algunas realizaciones de la invención, esta preparación de datos también puede incluir otros tipos de comandos set.
25 El módulo de salida de productor de anulación 1045 se muestra como un cuadro de líneas de trazos, ya que puede no estar presente en realizaciones alternativas de la invención.
La estructura del grafo(s) del productor1060 también incluye opcionalmente marcado de ejecución incremental 1080 para algunas realizaciones de la invención que soportan la ejecución incremental. Como se ha descrito anteriormente con referencia al marcado de ejecución incremental382 de la figura 3B, el marcado de ejecución incremental 1080 se utiliza para ayudar con la ejecución incremental del grafo(s) de productor en la ejecución más all� de la ejecución inicial. Diferentes realizaciones de la invención que utilizan marcado de ejecución incremental382, lo utilizan de diferentes maneras. Por ejemplo, en una de tales realizaciones de la invención que tiene un registro de comandos, el registro se utiliza para realizar un seguimiento de que productores se han añadido 35 y/o modificado, y el marcado de ejecución incremental 382 se utiliza para marcar los productores que se ven afectados (antepasados de los productores modificados o añadidos, y por lo tanto dependientes de ellos). Como otro ejemplo, en una realización de la invención tal que no tiene un registro de comandos, el marcado de ejecución incremental 382 se utiliza para marcar los productores que se añaden o modifican, as� como aquellos que son antepasados de los productores modificados o añadidos (y por lo tanto dependen de ellos). Como otro ejemplo, en una realización de la invención tal que no tiene un registro de comandos, las modificaciones y adiciones de los productores se hace inmediatamente y el marcado de ejecución incremental 382 se utiliza para marcar los productores que son antepasados de los productores modificados o añadidos (y por lo tanto dependen de ellos). Si bien se han descrito realizaciones de la invención que soportan la ejecución incremental y utilizan el marcado de ejecución incremental, otras realizaciones de la invención soportan la ejecución incremental que no utilizan marcado
45 de ejecución incremental (por ejemplo, se utiliza un registro de comandos para rastrear los productores que se han añadido o modificado, y una lista de productores de inicio de ejecución se mantiene en un registro de inicio de ejecución, donde el módulo de ejecución de grafo de productor 1070 comienza desde los productores de inicio de ejecución y se abre camino hasta los antepasados del grafo(s) de productor en la parte superior, a modo de ejemplo y no de limitación, esta realización de la invención se describe más adelante en este documento con respecto a las figuras 15-25.
El cliente en tiempo de ejecución 1002 también incluye comandos de selección del modo de ejecución 1036 de acuerdo con algunas realizaciones de la invención. Un usuario puede utilizar los comandos de selección del modo de ejecución 1036 para cambiar el ajuste de este modo, cambiando la estructura desajuste de entorno de 55 ejecuci�n1048, la estructura de decisión configurable basada en los productores 1049, y / o la estructura de grafos de productores 1060. En una realización, los comandos de selección del modo de ejecuci�n1036 cambian la estructura de decisión configurable basada en los productores 1049 para modificar los ajustes del modo de ejecución de una clase, instancia, método particular, o cualquier combinación de lo anterior. Por ejemplo, un primer comando de selección del modo de ejecución puede cambiar el ajuste del modo de todos los métodos de una clase particular, un segundo comando de selección del modo de ejecución puede cambiar el ajuste del modo de ejecución de una instancia o de una clase en particular, un tercera comando de selección del modo de ejecución puede cambiar el ajuste del modo de un método en particular, un cuarto comando de selección del modo de ejecución puede cambiar el ajuste del modo de un método y una instancia particular, y as� sucesivamente. Alternativamente, el usuario puede utilizar los comandos de selección del modo de ejecuci�n1036 para cambiar el ajuste del modo de 65 ejecución(es) de forma productor por productor, cambiando la estructura del grafo de productores 1060. Debido a que cada productor en la estructura del grafo de productores 1060 tiene un ajuste de modo de ejecución de
productor, los comandos de selección del modo de ejecución 1036 pueden proporcionar una clave de productor para identificar un productor y un ajuste de modo de ejecución deseado para el productor particular, para hacer que el entorno de ejecuci�n1004 cambie el ajuste de modo de ejecución para el productor particular, al ajuste de modo deseado.
5 El cliente en tiempo de ejecución 1002 también incluye comandos globales de ejecución 1035. El nuevo módulo de ejecución de grafo(s) de productores 1070 del entorno de ejecución 1004 ejecuta el grafo(s) del productor. El módulo de ejecución del productor 1070 puede ejecutar cada productor en el grafo(s) del productor basado en el modo de ejecución correspondiente del productor de la estructura de decisión configurable basada en los productores 1049. En algunas realizaciones, el módulo de ejecución del productor 1070 puede anular el modo de ejecución de un productor predeterminado de la estructura de decisión configurable basada en los productores 1049. Por ejemplo, si el modo de ejecución de la estructura de decisión configurable basada en los productores 1049 no est� soportado por el entorno de ejecución 1004, entonces el módulo de ejecución del productor 1070 puede anular tal modo de ejecución.
15 En algunas realizaciones, el entorno de ejecución 1004 soporta tres modos de ejecución: multiprocesamiento, multihilo y ejecución local. Por lo tanto, el módulo de ejecución del productor 1070 incluye un módulo de paralelizaci�n 1076, un módulo de multiprocesamiento 1077, un módulo de multihilo 1078, y un módulo de ejecución local 1079. Para cada productor, el módulo de generación automática de grafos de productores 1040 puede encontrar el modo de ejecución correspondiente a la estructura de decisión configurable basada en los productores 1049 y puede ajustar la configuración del modo de ejecución productor de acuerdo con la estructura de grafos de productores 1060 si el modo de ejecución correspondiente no es anulado por un ajuste en tiempo de ejecución de la estructura de ajustes del entorno entorno de ejecución 1048. Basado en el ajuste del modo de ejecución de productores en la estructura de grafos de productores 1060, el módulo de paralelizaci�n 1076 puede enviar el
25 productor al módulo de multiprocesamiento 1077, al módulo de multihilo 1078, o al módulo de ejecución local 1079 correspondiente. A continuación, una tarea puede ser instanciada por el productor en el módulo de multiprocesamiento 1077, el módulo de multihilo1078, y / o el módulo de ejecución local 1079. Una tarea es una sección discreta e independiente de alto nivel lógico de trabajo computacional. Una tarea es típicamente ejecutada como un programa por un procesador.
En algunas realizaciones, si el modo de ejecución es multiproceso, entonces el módulo de paralelizaci�n 1076 puede enviar al productor al módulo de multiprocesamiento 1077. El módulo de multiprocesamiento 1077 puede serializar la tarea correspondiente al productor, as� como las entradas para el productor, y agregar la tarea y entradas serializadas a un trabajo. Cuando las tareas correspondientes a todos los productores que est�n listos para
35 ser ejecutados y que tengan un modo de ejecución de multiprocesamiento se hayan añadido al trabajo, el módulo de multiprocesamiento 1077 puede enviar el trabajo a un despachador de grid 1081 que se transmitir� a un grid de procesadores. A continuación, todos o algunos de los procesadores en el grid puedan ejecutar las tareas en el trabajo distantemente. Si el modo de ejecución es multihilo, entonces el módulo de paralelizaci�n 1076 puede enviar el productor hasta el módulo de multihilo 1078. El módulo de multihilo 1078 puede iniciar un mecanismo de agrupación de hilos y alimentar un hilo disponible para ser ejecutado con la tarea del productor correspondiente. Si el modo de ejecución es ejecución local, el módulo de paralelizaci�n 1076 puede enviar al productor hasta el módulo local 1079. El módulo local 1079 puede entonces ejecutar la tarea en el hilo de ejecución actual.
En algunas realizaciones, el módulo de paralelizaci�n 1076 puede enviar un productor a otro predeterminado del
45 módulo de multiprocesamiento 1077, al módulo de multihilo 1078, y al módulo de ejecución local 1079 de forma predeterminada si el modo de ejecución no ha sido especificado por el productor. Por otro lado, si la definición de clase del productor 1010 incluye un ajuste al modo de ejecución 1015 para el productor, el módulo de paralelizaci�n 1076 puede enviar el productor de acuerdo con este ajuste a menos que el mismo (modo de ejecución 1015) haya sido anulado. El ajuste del modo de ejecución 1015 puede ser anulado de diversas maneras. En una realización, para anular el ajuste del modo de ejecución 1015, los comandos de selección del modo de ejecución 1036 cambian los ajustes del modo de ejecución en la estructura de decisión configurable basada en los productores 1049 en una clase base, un método base, una instancia base, o cualquier combinación de los anteriores. En una realización, los comandos de selección del modo de ejecución 1036 cambian los ajustes del modo de ejecución sobre una base productor-por-productor en la estructura de grafos de productores 1060 para anular el ajuste del modo de ejecución
55 determinado utilizando la estructura de decisión configurable basada en los productores 1049. En una realización, los comandos de selección del modo de ejecución 1036 cambian el ajuste del modo de ejecución a un nivel global en la estructura de ajuste de entorno de ejecuci�n1048 para anular el ajuste del modo de ejecución de la estructura de grafos de productores 1060.
Como tal, el módulo de ejecución de grafo de productor1070 modifica el cach� de salida del productor 1097 (en el caso de los productores de propiedad y productores de método), utiliza el marcado de ejecución incremental 1080 (si est� presente), y modifica los datos de las instancias 1052 (en el caso de los métodos de propiedad). En algunas realizaciones, el módulo de adquisición dem�tricas1082puedeadquirirm�tricasdurante la ejecución de los productores. Las métricas adquiridas se pueden almacenar en métricas 1083enla estructura del grafo(s) del
65 productor1060. Se debe tener en cuenta quelas métricas pueden ser adquiridas en una base productor, y desde un productor se incluye una combinación única de una clase, un método, y una instancia, las métricas pueden ser adquiridas en una base de clase-instancia-método. Por otra parte, las métricas pueden ser adquiridas en una tarea base y/ o en un trabajo base.
En algunas realizaciones, las métricas adquiridas incluyen diferentes tipos para diferentes usos, tales como para el
5 monitoreo del entorno inform�tico, el monitoreo del tiempo de ejecución distante, el monitoreo local de tiempo de ejecución, el monitoreo de flujos de datos, el monitoreo de tiempo total de ejecución, la evaluación comparativa diferente tipos de ejecución, etc. Por ejemplo, para controlar el entorno inform�tico, las métricas tales como el número de procesadores o motores disponibles en un grid distante utilizado en multiprocesamiento y dedicado a la ejecución de los productores y una relación empírica observada entre los tiempos de procesamientos locales y distantes pueden ser adquiridas. Por ejemplo, si el procesador local y el procesador distante no est�n sobrecargados con otras tareas, esta relación empírica puede estar cerca de la relación de frecuencia entre los dos procesadores. Para controlar el tiempo de ejecución distante, datos como el tiempo lejano de procesamiento, el tiempo deserializaci�n distante, y el tiempo de serializaci�n distantes pueden ser adquiridos. Para controlar el tiempo de ejecución local, las métricas como el tiempo de ejecución local, el tiempo deserializaci�n locales, y el tiempo de
15 serializaci�n locales pueden ser adquiridas. Para controlar los flujos de datos, las métricas como el tamaño de los objetos serializados de entrada y el tamaño de los objetos serializados de salida pueden ser adquiridas. Cuando los datos se est�n procesando en procesadores distantes, datos de entrada y de salida son intercambiados a través de una red. La eficiencia del procesamiento distante est� directamente relacionada con el volumen de datos que se intercambian. El monitoreo del tamaño de los flujos de datos puede proporcionar información útil para ayudar a reducir o evitar la sobrecarga de las estructuras de datos que se intercambian con información redundante o inútil. Para controlar el tiempo de ejecución general, las métricas tales como el tiempo total para ejecutar un productor específico pueden ser adquiridas. En algunas realizaciones, el tiempo total para ejecutar un productor específico puede ser la suma del tiempo de serializaci�n local, el tiempo deserializaci�n distante, el tiempo de procesamiento distante, el tiempo de serializaci�n distante, y el tiempo local de deserializaci�n. Este tiempo puede ser medido de
25 tarea en tarea, y puede ser bastante consistente (es decir, los tiempos son similares) a través de todas las tareas relacionadas con un solo trabajo. Para referencia de diferentes tipos de ejecución, las métricas de comparación, tales como aumento de velocidad y la eficiencia se pueden derivar de otras métricas adquiridas. El aumento de velocidad es una medida de cuan más rápido un algoritmo paralelo es con respecto al algoritmo secuencial correspondiente. El aumento de velocidad se define para un trabajo concreto como la suma de los tiempos de procesamiento locales de todas las tareas (si se ejecutan a nivel local) que se refieren al trabajo dividido por el tiempo de ejecución del trabajo (trabajo a tiempo total), utilizando un enfoque de ejecución en paralelo, como multiprocesamiento. Teóricamente, se llega a un aumento de velocidad ideal cuando un aumento de velocidad es sustancialmente proporcional al número de procesadores, es decir, cuando los tiempos de serializaci�n y los tiempos de deserializaci�n est�n cerca de cero, o compensado por un ratio de eficiencia/procesador favorables. La
35 eficiencia es igual a 100 * aumento de velocidad/ número de procesadores. Una vez más, en una situación teóricamente ideal, donde los procesadores locales y distantes son idénticos, la eficiencia ideal es cerca de 100%.
Diversas técnicas se han discutido previamente para la ejecución de los productores del grafode productor y son aplicables aquí. Por ejemplo, en las realizaciones en las que se implementa un registro de comandos, el registro de comandos se consume y, a continuación se ejecuta el grafo(s) de productor. Además, en realizaciones de la invención que soportan la posibilidad de dependencias sin resolver, el módulo de ejecución de grafo de productor1070 incluye el módulo de dependencia dinámica 1075, que puede invocar el módulo de generación de grafo de productor automatizado 1040.
45 La Figura 10 también muestra un módulo de visor grafo de productor opcional 1062 que proporciona un mecanismo (por ejemplo, una interfaz gráfica de usuario) mediante el cual un programador/usuario puede ver el grafo(s) de productor y salidas de los productores de la estructura de grafo(s) de productor. Además, la figura 10 muestra un módulo de interface de usuario gráfico de diseño de salida de productor interactivo configurable opcional1085 para proporcionar una interfaz gráfica de usuario (incluyendo la invocaci�n dinámica de los bloques 1030 y 1035) que representa el módulo de interfaz de usuario gráfico de diseño de salida de productor configurable interactiva 840.
En las realizaciones de la invención que utilizan un registro de comandos, activadores diferentes pueden utilizarse para activar acciones diferentes. Por ejemplo, los comandos de creación de instancias de productores pueden ser registrados y procesados por lotes en respuesta a un comando explícito (iniciar el registro y terminar registro), un
55 comando ejecutar explícito global (el registro se inicia automáticamente en el arranque y después de cada comando ejecutar explícito global, y cada registro se procesa en respuesta al siguiente comando ejecutar explícito global ejecución), un comando de preparación de datos explícito, etc. Del mismo modo, los comandos de preparación de datos pueden ser registrados y procesados por lotes en respuesta a un comando ejecutar explícito global, un primer comando obtener, cada comando obtener, etc.
Estructuras de seguimiento de ejemplo
Las figuras 11A-Gson diagramas de bloques que ilustran el contenido de ejemplo de las estructuras de datos de la figura 10 de acuerdo con una realización de la invención. Mientras que las figuras 11A-Gilustran estas estructuras de
65 datos como tablas, se debe entender que cualquier estructura de datos adecuada puede ser utilizada (por ejemplo, un mapa hash, un conjunto, una lista, etc.).
La figura 11A es un diagrama de bloques de un ejemplo de la estructura de seguimiento de clase 1092 de la figura 10 de acuerdo con una realización de la invención. En la figura 11A, una columna de clave de clase 1110 y una columna de referencia de clase 1115 se muestran para almacenar, respectivamente, las claves de clase y las
5 referencias correspondientes a las clases cargadas.
La figura 11B es un diagrama de bloques de un ejemplo de la estructura de seguimiento de instancia 1065 de la figura 10 de acuerdo con una realización de la invención. En la figura 11B, una columna clave de instancia 1120 y una columna de referencia de instancia 1125 se muestran para almacenar, respectivamente, las claves de instancia y las referencias correspondientes a los casos. En las realizaciones de la invención en la que las claves de instancia no tienen que ser únicas en todas las clases, la estructura de ejemplo de seguimiento también incluye la clave de clase o de referencia para la clase de la instancia.
La figura 11C es un diagrama de bloques de un ejemplo de la estructura de grafo(s) de productor 1060 de la figura
15 10 de acuerdo con una realización de la invención. En la figura 11C, una columna de referencia de la clase 1135, una columna de referencia de instancia 1140, y una columna de referencia de m�todo1145 se muestran para almacenar respectivamente referencias que componen los productores actuales de los grafo (s) de productor actuales. Estas referencias pueden tomar una variedad de formas. Por ejemplo, estas columnas, respectivamente, pueden almacenar referencias en las clases 1054 (o, alternativamente, 1092), instancias 1052 (o, alternativamente, 1065), y métodos 1056 (o, alternativamente, 1058). Mientras que en una realización de la invención estas columnas almacenan referencias, en una forma de realización alternativa de la invención una o más de estas columnas almacena claves.
Adem�s, la figura 11C incluye una columna de referencia(s) de productor(es) padre 1150 (incluyendo para cada
25 enlace una referencia de productor de padre, y una referencia del productor de determinación de la dependencia) y una columna de referencia(s) de productor(es) de descendiente1160 (incluyendo para cada enlace, la referencia(s) de productor de descendiente, una referencia del productor de determinación de la dependencia, un modo de enlace, y un indicador de enlace adherente). Cada productor puede tener cero o más enlaces de productores del descendiente en la columna 1160. Cada enlace de productor de descendiente en la columna 1160 incluye: 1) de referencia(s) del productor de descendiente que se son referencias a otras líneas de la estructura de grafo(s) de productor para representar de una dependencia del productor de acuerdo con la declaración de la dependencia del productor, 2) una referencia del productor de determinación de la dependencia que es una referencia a otra fila de la estructura de grafo(s) del productor y representa el productor de determinación de dependencia que ha creado el enlace descendiente, y 3) un modo de enlace con un tipo de dependencia de productor que identifica si la
35 dependencia del productor es un resultado de un argumento, un campo, o una dependencia de secuenciaci�n (véase la discusión respecto a las figuras 7A-F), y si un argumento, la ID de argumento de la dependencia del productor, y 4) un indicador adherente para indicar que el modo de enlace es el resultado de una dependencia declarada de manera ascendente (en las realizaciones de la invención que soporten, dependencias declaradas de manera ascendente) o el resultado de una suscripción adherente (en las realizaciones de la invención que soportan suscripciones adherentes) y no debe ser modificado a través de la declaración de dependencia de argumento del productor de este productor (es decir, el productor almacenado en la fila de la columna que contiene el indicador adherente). Cada productor puede tener cero o más enlaces de productores padres en la columna 1150. Cada enlace productor padre en la columna 1150 incluye: 1) una referencia productor padre que almacena de nuevo una referencia de acuerdo con un productor de referencia descendiente de otro productor (es decir, una referencia a otra
45 fila de la estructura de grafo(s) de productor para representar un padre productor dependiente del productor), y 2) una referencia de productor de determinación de la dependencia que es una referencia a otra fila de la estructura de grafo(s) del productor y representa el productor de determinación de dependencia que ha creado el enlace padre. Por lo tanto, cuando se crea un vínculo, la columna de enlace de productor padre de la fila del productor del descendiente y la columna de enlace del productor descendiente de la fila del productor padre se han modificado para representar el enlace (y la determinación de la dependencia de referencia del productor es la misma en ambos). En una realización de la invención, ya que rutas múltiples en un grafo de productor o grafos productores diferentes pueden incluir un productor determinado, puede haber múltiples enlaces de productor padre para un productor determinado.
55 Además, la figura 11C incluye una memoria cach� de salida y columna de modificación de la salida del productor de anulación 1170 para almacenar las salidas del productor actuales, as� como una indicación de si el productor se anula y el valor de salida anulado. Además, la figura 11C incluye una columna de marca de ejecución incremental 1180 para almacenar las marcas incrementales de ejecución tal como se ha descrito anteriormente.
En algunas realizaciones la figura 11Cincluyeuna columna desajuste del modo de ejecución del productor 1173 para almacenar el ajuste del modo de ejecución década productor en la estructura de grafos de productores1060.Por ejemplo, el ajuste del modo de ejecución puede ser uno de multiprocesamiento, multithilo y ejecución local.
Adem�s, la figura 11Cincluye una columna de métricas de productor1175para almacenar los parámetros de cada
65 productor en la estructura de grafos de productores1060.Las métricas de productor se adquieren de forma productor por productor para con el módulo de adquisición dem�tricas1082.Los detalles de algunas realizaciones del proceso
para adquirir métricas se discuten a continuación.
La figura 11D es un diagrama de bloques de un ejemplo de la estructura de seguimiento de método 1058 de la figura 10 de acuerdo con una realización de la invención. En la figura 11D, una columna de claves del método 1190 y una 5 columna de referencia del método 1192 que se muestran para almacenar, respectivamente, las claves de método y las referencias correspondientes a los métodos de las clases cargadas. Además, la figura 11D también incluye una columna ArgumentDependencies 1194, una columna FieldDependencies 1196, una columna Sequencing Dependencies 1195, una columna UpwardDependencies 1193, una columna WeaklyConstrainedDependencies 1199, una columna de la clase de salida 1197, y una columna de anotaciones opcionales adicional 1198 incluyendo un modo de ejecución por defecto. La columna ArgumentDependencies 1194, la columna SequencingDependencies 1195, la columna UpwardDependencies 1193, la columna WeaklyConstrainedDependencies 1199, y la columna FieldDependencies 1196 almacenan información de la dependencia del productor analizada a partir de la declaración de dependencia del productor del método (por ejemplo, ver 705 de la figura 7A), mientras que la columna de la clase de salida 1197 almacena información relativa a la clase de salida de la salida del método
15 (determinable por la firma del método -por ejemplo, véase 710 de la figura 7A). Ejemplos de contenido de la columna ArgumentDependencies 1194, la columna FieldDependencies 1196, la columna SequencingDependencies 1195, la columna UpwardDependency 1193, y la columna WeaklyConstrainedDependencies 1199, que se utilizan en algunas realizaciones de la invención se proporcionan más adelante en este documento.
La figura 11E es un diagrama de bloques de un ejemplo de un mapa local de forma serializada de acuerdo con una realización de la invención. El mapa local de forma serializada en la Figura 11E incluye un identificador de columna (ID) de forma serializada 1112, una columna de clave de productor de entrada 1113, una columna de clave de clase subyacente y clave de instancia 1114, una forma serializada 1116, un tamaño de la forma serializada 1117, y un tiempo de serializaci�n 1118. En algunas realizaciones, el ID de forma serializada, la clave de productor de entrada,
25 la clave de instancia subyacente, y la forma serializada se utilizan para implementarla paralelizaci�n por el entorno de ejecución 1004. Los detalles de la implementación se discuten a continuación. En algunas realizaciones, el entorno de ejecución 1004 implementa instrumentaci�n para adquirir métricas sobre un productor base. Por lo tanto, el entorno de ejecución 1004 puede almacenar el tamaño de la forma serializada y el tiempo deserializaci�n en las columna sindicadas por líneas de trazos en el mapa local de forma serializada. Detalles de la instrumentaci�n se discuten a continuación.
La figura 11F es un diagrama de bloques de un ejemplo de la estructura de ajuste de entorno de ejecución 1048 de la figura 10 según una realización de la invención. La tabla incluye una columna de modo de ejecución original 1121 y una columna de modo de ejecución final 1123. Si un modo de ejecución no es anulado en el nivel global del
35 entorno de ejecución, el modo de ejecución final es el mismo que el modo de ejecución original. Por otro lado, si el modo de ejecuciones anulado en el nivel global del entorno de ejecución, el modo de ejecución finales diferente al original. Por ejemplo, si el entorno de ejecución de 1004 no soporta multiprocesamiento, entonces multiprocesamiento puede ser anulado a nivel global del entorno de ejecución mediante la asignación de ejecución local como el modo de ejecución final de multiprocesamiento.
La figura11G es un diagrama de bloques de un ejemplo de la estructura de decisión configurable basada en los productores 1049 en la figura 10. La tabla incluye una columna con la clave de la clase 1182, una columna con la clave del método 1184, una columna con la clave de la instancia 1186 y una columna de ajuste del modo de ejecución 1188. Los comandos de selección del modo de ejecución 1036 pueden modificar el ajuste del modo de
45 ejecución en la estructura de decisión configurable basada en los productores sobre una clase base, un método, una instancia, o cualquier combinación delo anterior. Por lo tanto, una o más de la columna de clave de la clase 1182, la columna de clave del método 1184, y la columna de clave de la instancia 1186 pueden estar vacías en una fila particular de acuerdo con una realización de la invención.
Inform�tica a distancia
Como se ha descrito anteriormente, una realización de la invención soporta un modo de ejecución de multiprocesamiento. Para soportar multiprocesamiento, el entorno de ejecución puede interactuar con un grid de procesadores serializando las tareas de los productores, as� como también con las entradas y / o una instancia
55 subyacente de cada productor, y enviando la forma serializada al grid para ser procesados por los procesadores del grid.
La Figura 12A es un diagrama de bloques que ilustra detalles adicionales de la figura 10 para soportar multiprocesamiento de acuerdo con una realización de la invención. A la izquierda de la línea divisoria discontinua 1200 se encuentra el entorno de ejecución con el soporte orientado a grafo de productor 1004. A la derecha de la línea divisoria discontinua 1200 se encuentra un grid 1290. En el lado del entorno de ejecución 1004, la figura 12A incluye el módulo de ejecución de grafos de productores 1070 de la figura 10 (incluyendo el módulo de paralelizaci�n 1076, el módulo de multiprocesamiento 1077, el módulo de multihilo 1078, y el módulo de ejecución local 1079) y el despachador de grid 1081. Al lado del grid 1290, la figura 12A incluye un módulo de computación a distancia1270.
65 De acuerdo con una realización de la invención, si el modo de ejecución de un productores multiprocesamiento, el módulo de paralelizaci�n 1076 envía el productor hasta el módulo de multiprocesamiento 1077. El módulo de multiprocesamiento 1077 puede instanciar un trabajo, que puede incluir varias tareas. El módulo de multiprocesamiento 1077 puede instanciar una tarea para el productor. El módulo de multiprocesamiento 1077 puede serializarla tarea aún más, as� como las entradas al productor y/o una instancia subyacente del productor. A continuación, el módulo de multiprocesamiento 1077 puede agregar la forma serializada una tarea el trabajo. El
5 módulo de multiprocesamiento 1077 puede enviar el trabajo al despachador de grid 1081. A continuación, el despachador de grid 1081 puede enviar el trabajo al módulo de computación a distancia 1270 del grid 1290.Los detalles del procesamiento para el grid 1290 se discuten a continuación. Después de que el trabajo ha sido procesado, las salidas serializadas y /o las instancias de las tareas en el trabajo se devuelven al despachador de grid 1081.El despachador de grid 1081 puede reenviar las salidas serializadas y/o las instancias de las tareas dentro del trabajo a el módulo de multiprocesamiento 1077 para ser deserializadas.
Dependencias del productor dinámico
Tal como se ha descrito anteriormente, una realización de la invención soporta dependencias de productores no
15 dinámicos y dinámicos. Aunque diferentes realizaciones pueden soportar diferentes tipos de dependencias de productores dinámicos, una realización de la invención soporta contingentes y tipos de suscripción de las dependencias de los productores dinámicos. Por lo tanto, una dependencia (directo) no contingente (est�tica), sin suscripción, es una dependencia no dinámica.
La figura 12B es un diagrama de bloques que ilustra detalles adicionales de la figura 10 para soportar las dependencias de tipo contingente y de suscripción de productores dinámicos de acuerdo con una realización de la invención. La figura 12B incluye en la figura 10 la línea divisoria discontinua 1000, las definiciones de clase que incluyen la lógica de negocio 1010 (que incluyen los datos 1012, los métodos 1014, y las declaraciones de dependencia de los productores 1016), el módulo de clase nueva 1095, las clases 1054 (incluyendo los métodos y
25 declaraciones de dependencia de los productores 1056), el módulo de instancia nueva 1098, las instancias 1052, la estructura de ejemplo de seguimiento 1065, el módulo de generación automatizada del grafo de productor1040, la estructura del grafo(s) del productor 1060, y el módulo de ejecución del grafo de productor 1070 (incluida el módulo de dependencia dinámica 1075).
La figura 12B muestra que las declaraciones de dependencia de los productores 1016 incluyen opcionalmente dependencias contingentes 1210, dependencias de suscripción 1220, y productores múltiples 1215. Aquí, productores múltiples 1215 se refiere a la capacidad de una dependencia del productor para devolver una colección de productores. Además, la figura 12B incluye un módulo de suscripción 1240 y un módulo de contingencia 1230 en el módulo de generación automatizada del grafo de productor 1040 para procesar las dependencias contingentes
35 1210 y las dependencias de suscripción 1220. La figura 12B muestra también que el módulo de suscripción 1240 accede a un registro de suscripción 1250. Además, el módulo de dependencia dinámica 1075 incluye un módulo de contingencia 1260 y un módulo de suscripción 1265 para procesar las dependencias contingentes 1210 y las dependencias de suscripci�n1220. El módulo de suscripción 1265 accede al registro de suscripción 1250.
La siguiente descripción de las dependencias contingentes y de suscripción se realiza en el contexto de una realización de la invención que utiliza una DEP de clase (una abreviatura para la dependencia), que es devuelta por los productores de determinación de la dependencia y es analizada por el entorno de ejecución con el soporte de la programación orientada al grafo de productor. La DEP de clase incluye los siguientes campos: 1) TIPO que se puede ajustar a la suscripción, sin suscripción descendente declarada (productores descendientes que no son 45 suscripciones), o sin suscripción ascendente declarada (los productores padre que no son suscripciones), 2) PROD que se utiliza para dependencias sin suscripción descendentes declaradas y una colección de los productores descendientes (como tal, puede almacenar cero o más productores), 3) TIPO SUB que se utiliza para las dependencias de suscripción y se establece para indicar el tipo de dependencia de suscripción (utilizada en las realizaciones de la invención que soportan múltiples tipos de suscripción;mientras que la realización de la invención que se describe aquí puede soportar dos tipos: adherente y absorbente, realizaciones alternativas pueden soportar más, menos, y/o diferentes tipos de suscripción, 4) CRIT SUB, que se utiliza para las dependencias de suscripción y se establece para indicar los criterios de suscripción, 5) MODO DE ENLACE PAR que se utiliza para las dependencias de suscripción y dependencias sin suscripción adherentes declaradas y se establece para indicar cuál es el modo de enlace que debe ser el productor padre; 6) CLASE PAR que se utiliza para las dependencias de 55 suscripción y las dependencias sin suscripción adherentes ascendentes declaradas y se establece para indicar cuál debe ser la clase del productor padre (por ejemplo, la clave de clase); 7) MÉTODO PAR que se utiliza para las dependencias de suscripción adherentes y las dependencias sin suscripción ascendentes declaradas y se establece para indicar cuál debe ser el método del productor padre (por ejemplo, la clave de método), y 8) INSTANCIA PAR que se utiliza para las dependencias adherentes de suscripción y las dependencias sin suscripción ascendentes declaradas establecidas para indicar cuál debe ser la instancia del productor padre (por ejemplo, la clave de instancia) (si la instancia PAR se deja en blanco, la clave de instancia del productor descendiente se utiliza para el productor padre). Una realización alternativa podría utilizar una colección de productores padre (cada elemento de la colección soporta un PAR_CLASS, PAR_INSTANCE, PAR_METHOD, PAR_LINK MODE) en el caso de las dependencias de suscripción adherente y/o dependencias sin suscripción ascendentes declaradas. Por supuesto,
65 otras realizaciones alternativas de la invención podrían utilizar una estructura diferente para devolver dependencias.
Dependencias contingentes
En una realización de la invención, ambas dependencias de productores no contingentes y contingentes son compatibles. Un productor de dependencia no contingente es uno que es independiente de la salida de los otros
5 productores, mientras que una dependencia del productor contingente es una que es dependiente de la salida de otros productores. Si bien una realización de la invención soporta dependencias de productores no contingentes y contingentes, realizaciones alternativas sólo admiten no contingente o contingente (cuyas dependencias contingentes de los productores pueden ser inicialmente impulsadas por los valores por defecto).
Tal como se discutió previamente, un productor puede ser visto como un conjunto de identificadores múltiples, un identificador para cada nivel adicional de granularidad especificada. En una realización de la invención, una dependencia del productor contingente puede ser contingente en el sentido de que cualquiera o la totalidad del conjunto de identificadores pueden ser condicionalmente determinados en base a los valores de los datos actuales. Por ejemplo, una primera dependencia del productor contingente puede tener sólo el identificador de la instancia que
15 se determin� de forma condicional (los identificadores de clase y el método son fijos), mientras que una segunda dependencia del productor contingente pueden tener la clase, la instancia y el método de identificación que se determin� de forma condicional. Aunque en una realización de la invención toda la pluralidad de los identificadores de una dependencia del productor contingente pueden ser condicionales, realizaciones alternativas de la invención pueden implementarse de forma diferente (por ejemplo, sólo permiten un subconjunto de la pluralidad de identificadores para ser condicional).
Las figuras 13A-J son diagramas de bloques que ilustran el pseudo código y los productores de ejemplo de acuerdo con una realización de la invención. Además, las realizaciones mostradas en las figuras 13A-J utilizan el mismo mecanismo de determinación de la dependencia para dependencias tanto contingentes como no contingentes.
25 Como tal, con fines explicativos, algunos de los ejemplos de las figuras 13A-J son ejemplos de las dependencias no contingentes, mientras que los otros son ejemplos de las dependencias de productores contingentes. Una dependencia del productor no contingente es una en la que la dependencia es un productor de determinación de la dependencia que es un productor independiente (por ejemplo, en una realización de la invención, el tipo de dependencia es identificable porque su declaración de dependencia del productor est� vacía), mientras que una dependencia del productor contingente es una en la que la dependencia es un productor de determinación de la dependencia que es un productor dependiente (por ejemplo, en una realización de la invención, el tipo de dependencia es identificable porque su declaración de dependencia del productor no est� vacío).
Adem�s, en números y las letras en círculos se utilizan en las figuras 13A-J para ilustrar el orden en el que las
35 operaciones se realizan de acuerdo con una realización de la invención. Además, una notación X::Y::Z se utiliza en las figuras 13A-J para representar una clave del productor que se compone de una clave de clase (X), una clave de instancia (Y), y una clave de método (Z). Además círculos de trazos y líneas con flechas representan las operaciones que no se realizan en algunas realizaciones de la invención. En particular, cuando la ejecución de un productor de determinación de la dependencia independiente para una dependencia determinada siempre devolver� la misma dependencia (por ejemplo, un productor de determinación de la dependencia independiente), se ejecuta este productor de determinación de la dependencia en algunas realizaciones de la invención, pero no se instancia y se vinculadas en el grafo(s) del productor.
Productores de determinación de dependencia explícita
45 La figura 13A ilustra pseudo código de declaraciones de dependencia de los productores para los métodos que utilizan una dependencia de no acceso directo no dinámica (no contingente, sin suscripción) de acuerdo con una realización de la invención, mientras que la figura 13B es un diagrama de bloques de productores que ilustran una dependencia del productor de ejemplono acceso directo, no dinámica (no contingente, sin suscripción) de acuerdo con una realización de la invención. La figura 13A muestra: 1) una declaración de dependencia del productor 1300 de un método alfa 1305, donde la declaración de dependencia del productor 1300 incluye una dependencia del productor con el productor CW::IY::BETA, y 2) una declaración de dependencia del productor 1310 para un método beta 1315, donde la declaración de dependencia del productor 1310 est� vacía, y donde el método beta 1315 regresa como un argumento de una instancia de la clase DEP. El método beta 1315 incluye el código de declaración
55 de la dependencia del productor 1320 que establece DEP.TYPE en no suscripción declarada descendente, establece DEP.PROD en el productor 13, y regresa DEP.
En la figura 13A, un círculo 1 indica que la declaración de dependencia del productor 1300 es accedida (por ejemplo, como resultado de la designación de un productor basado en el método alfa 1305 como un productor de interés, como resultado de la detección automatizada de un productor basado en el método alfa 1305, como una progenie de un productor de interés, etc.). Un círculo 2 en la figura 13B muestra que un productor C0::I0::ALFA se instancia basado en el método alfa 1305. Un círculo 3 en la figura 13A indica que la dependencia del productor CW::IY::BETA se procesa para determinar la dependencia del productor, y como resultado, un círculo 4 indica que la declaración de dependencia del productor 1310 es accedida. Un círculo de trazos 5 en la figura 13B muestra que un productor 65 CW::IY::BETA se instancia como un productor de determinación de la dependencia 1380. Un círculo de trazos 6 en la figura 13 indica que el productor C0::I0::ALFA est� vinculado con el grafo de productor para indicar que el
productor CW::IY::BETA es un productor descendiente. Un círculo 7 en la figura 13B indica que el productor CW::IY::BETA se ejecuta y devuelve DEP para identificar al productor 13. Un círculo 8 indica que el productor 13 se instancias 13, mientras que un círculo 9 indica que el productor 13 est� vinculado como productor descendiente en el grafo de productor con el productor C0::I0::ALPHA. En la figura 13B, el productor C0::I0::ALFA y el productor 13
5 son productores estándar 1385 (que no son productores de determinación de la dependencia).
La figura 13C ilustra un pseudo código de declaraciones de dependencia de los productores de los métodos que utilizan una dependencia del productor de no acceso directo contingente sin suscripción de acuerdo con una realización de la invención, mientras que la figura 13D es un diagrama de bloques de productores que ilustran un ejemplo de dependencia del productor sin acceso directo, contingente, sin suscripción de acuerdo con una realización de la invención. Además, la figura 13D se refiere a los productores 5, 7A, 7B y la figura 5A y la resolución de la dependencia dinámica de productor 5 al productor 7A.
La figura 13C muestra: 1) una declaración de dependencia del productor 1300 para un método alfa 1305, donde la
15 declaración de dependencia del productor 1300 incluye una dependencia del productor con el productor CW::IY::BETA, 2) una declaración de dependencia del productor 1325 para un método beta 1315, donde la declaración de dependencia del productor 1325 incluye una dependencia del productor con el productor CU::IV::DELTA, y donde el método beta 1315 regresa como un argumento una instancia de la clase DEP; 3) una declaración de dependencia del productor 1332 para un método delta 1334, donde la declaración de dependencia del productor 1332 est� vacía, y donde el método delta 1334 regresa como un argumento de una instancia de clase DEP, y 4) una declaración de dependencia del productor 1338 para un método gamma 1340, donde la declaración de dependencia del productor 1338 est� vacía, y donde el método gamma 1340 regresa a la variable X (donde X es una fuente externa, un valor por defecto (explícito o constante en la clase). El método beta 1315 incluye el código de declaración de dependencia del productor 1330 que establece DEP.TYPE en no suscripción descendente declarada,
25 establece DEP.PROD al productor 7A o 7B en función de la salida del productor CX::IZ::GAMMA, y devuelve DEP. El método delta 1332 incluye el código de declaración de dependencia del productor 1336 que establece DEP.TYPE a no suscripción descendente declarada, establece DEP.PROD en el productor CX::IZ::GAMMA, y devuelve DEP.PROD.
En la figura 13C, un círculo 1 indica que la declaración de dependencia del productor 1300 es accedida (por ejemplo, como resultado de la designación de un productor basado en el método alfa 1305 como un productor de interés, como resultado de la detección automatizada de un productor basado en el método Alfa 1305 como una progenie de un productor de interés, etc.). Un círculo 2 en la figura 13D muestra que el productor 5 se instancia basado en el método alfa 1305. Un círculo 3 en la figura 13C indica que la dependencia del productor CW::IY::BETA se procesa
35 para determinar la dependencia del productor, y como resultado, un círculo 4 indica que la declaración de dependencia del productor 1325 es accedida. Un círculo 5 en la figura 13D muestra que un productor CW::IY::BETA se instancia como un productor de determinación de la dependencia 1380. Un círculo 6 en la figura 13D indica que el productor 5 est� ligado al grafo de productor para indicar que el productor CW::IY::BETA es un productor descendiente.
Un círculo 7 en la figura 13C indica que la dependencia del productor en el productor CU::IV::DELTA se procesa para determinar la dependencia del productor, y como resultado, un círculo 8 indica que la declaración de dependencia del productor 1332 es accedida. Un círculo de trazos 9 en la figura 13D muestra que un productor CU::IV::DELTA se instancia como un productor de determinación de la dependencia 1380. Un círculo de trazos 10
45 en la figura 13D indica que el productor CW::IY::BETA est� vinculado con el grafo de productor para indicar que el productor CU::IV::DELTA es un productor descendiente. Un círculo 11 en la figura 13D indica que el productor CU::IV::DELTA se ejecuta y devuelve DEP para identificar CX::IZ::GAMMA. Un círculo 12 indica que el productor CX::IZ::GAMMA se instancia, mientras que un círculo 13 indica que el productor CX::IZ::GAMMA est� vinculado como productor descendiente en el grafo de productor en el productor CW::IY::BETA.
En la figura 13D, un círculo A indica que el productor CX::IZ::GAMMA se ejecuta y devuelve X para el productor CW::IY::BETA, mientras que un círculo B indica que el productor CW::IY::BETA devuelve DEP para identificar el productor 7A; un círculo C indica que el resto no resuelto (método beta) 1390 se ha resuelto ahora y el productor 7A se instancia, mientras que un círculo D indica la vinculaci�n del productor 5 con el productor 7A. En la figura 13D, los
55 productores CX::IZ::GAMMA, 5 y 7A son productores estándar 1385.
Productores de determinación de la dependencia al vuelo
La figura 13E muestra el pseudo código de las declaraciones de dependencia de los productores de los métodos que utilizan una dependencia del productor deno acceso directo, contingente, sin suscripción y una dependencia del productor de acceso directo, contingente, sin suscripción de acuerdo con una realización de la invención, mientras que la figura 13F es un diagrama de bloques de productores que ilustran una dependencia del productor de no acceso directo, contingente, sin suscripción y una dependencia del productor de acceso directo, contingente, sin suscripción de acuerdo con una realización de la invención. Similar a la figura 13D, la figura 13F se refiere a los
65 productores 5, 7A, y 7B de la figura 5A y la resolución de la dependencia dinámica del productor 5 al productor 7A.
Las figuras 13E-F son las mismas que las figuras 13C-D, con las excepciones: 1) una declaración de dependencia del productor 1342 sustituye a la declaración de dependencia del productor 1325; 2) un método fly 1344 reemplaza el método delta 1334, y 3) un productor CW::IY::FLY reemplaza el productor CU::IV::DELTA. La declaración de dependencia del productor 1342 incluye una dependencia de acceso directo del productor CX::IZ::GAMMA. As�, el
5 círculo 4 en la figura 13E ahora indica que la declaración de la dependencia del productor 1342 es accedida. El círculo 7 en la figura 13E indica ahora que la dependencia de acceso directo del productor CX::IZ::GAMMA se procesa para determinar la dependencia del productor, y como resultado, el entorno de ejecución invoca el productor de determinación de la dependencia CW::IY::FLY sobre la marcha basado en el método fly 1344. El círculo 8 ahora indica que la declaración de dependencia del productor 1332 es accedida. El círculo de trazos 9 en la figura 13F muestra ahora que el productor CW::IY::FLY se instancia. El círculo de trazos 10 en la figura 13F indica que el productor CW::IY::BETA est� vinculado con el grafo de productor para indicar que el productor CW::IY::FLY es un productor descendiente. El círculo 11 en la figura 13F indica que el productor CW::IY::FLY se ejecuta y devuelve DEP para identificar CX::IZ::GAMMA. El resto de las figuras 13E-F son las mismas que las figuras 13C-D.
15 La generación al vuelo mediante el entorno de ejecución del productor de determinación de la dependencia CW::IY::FLY alivia al programador de la aplicación de tener que escribir el código de declaración de la dependencia explícita del productor y crear instancias de una determinación basada en la dependencia respecto al productor. Además, permite al programador de aplicaciones especificar directamente la dependencia del productor CX::IZ::GAMMA en la declaración de dependencia del productor para el método beta 1315, en lugar de especificar el productor de determinación de la dependencia CU::IV::DELTA.
La técnica de acceso directo puede ser utilizada en una variedad de situaciones, y adicionalmente pueden tener una variedad de formatos. Por ejemplo, aunque en las figuras 13E-F el acceso directo es no contingente (que identifica directamente el productor descendiente) y se encuentra en un estado declaración de dependencia del productor
25 para un método en el que se basa un productor padrede determinación de la dependencia, otras situaciones y formatos se muestran como sigue: 1) las figuras 13I-J ilustran el uso de un acceso directo que es no contingente y est� en una declaración de dependencia de productor para el método en el que est� basado un productor padre estándar; y 2) las figuras 13G-H ilustran el uso de dos accesos directos, donde uno es contingente y es parte de una declaración de dependencia del productor de un método en el que se basa un productor estándar y el otro es no contingente y es parte de una declaración de dependencia del productor de un método en el que est� basado un productor de determinación de la dependencia, y 2) las figuras I-J ilustran el uso de un acceso directo que no es contingente y que est� en un estado de declaración de dependencia del productor de un método en que se basa un productor estándar.
35 La figura 13G ilustra el pseudo código de las declaraciones de dependencia de los productores para los métodos que utilizan una dependencia del productor de acceso directo contingente sin suscripción y una dependencia del productor de acceso directo no contingente sin suscripción de acuerdo con una realización de la invención, mientras que la figura 13H es un diagrama de bloques de productores que ilustran un método abreviado de una dependencia del productor de ejemplo, contingente, sin suscripción y una dependencia del productor de acceso directo no contingente sin suscripción de acuerdo con una realización de la invención. La figura 13G muestra: 1) una declaración de dependencia del productor 1345 para el método alfa 1305, donde la declaración de dependencia del productor 1345 incluye una dependencia del productor de acceso directo contingente con un productor <P>GETC1::I1::M1; 2) una declaración de dependencia del productor 1350 en un método fly1 1355, donde la declaración de dependencia del productor 1350 incluye una dependencia del productor de acceso directo no
45 contingente en el productor C0::I0: GETC1, y donde el método fly1 1355 regresa como un argumento de una instancia de DEP, 3) la declaración de dependencia del productor 1332 de un método fly2 1362, donde el método fly2 1362 regresa como un argumento de una instancia de DEP, y 4) la declaración de dependencia del productor 1365 para un método getc1 1370, donde el método getc1 1370 vuelve a C1 con un valor de CX o CY.
El método FLY1 1355 y su declaración de dependencia del productor 1350 son proporcionados por el entorno de ejecuci�nen respuesta a la dependencia en el acceso directo <P>GETC1::I1::M1 (lo que indica que el acceso directo est� siendo utilizado para la clave de clase). El método fly1 1355 incluye el código de la declaración de dependencia del productor 1360 que establece DEP.TYPE a conjuntos declarados descendentes sin suscripción DEP.PROD al productor CX::I1::M1 o CY::I1::M1 en función del valor de la salida C1 por el productor de C0::I0::GETC1, y vuelve
55 DEP. Aunque en el ejemplo de la figura 13H, un <P> se utiliza para designar que es la clave de clase del productor que es contingente, realizaciones alternativas de la invención podrían utilizar otras sintaxis. Además, aunque en el ejemplo de la figura 13H, un <P> se utiliza para designar que es la clave de clase del productor que es contingente, una realización de la invención soporta que tenga más y/o diferentes de los identificadores que componen la clave del productor que se indicar� como contingente de esta manera.
En la figura 13G, un círculo 1 indica que la declaración de dependencia del productor 1345 es accedida (por ejemplo, como resultado de la designación de un productor basado en el método alfa 1305 como un productor de interés, como resultado de la detección automatizada de un productor basado en el método alfa 1305 como una progenie de un productor de interés, etc.). Un círculo 2 en la figura 13H muestra que el productor C0::I0::ALFA se 65 instancia basado en el método alfa 1305. Un círculo 3 en la figura 13G indica que la dependencia del productor de acceso directo se procesa para determinar la dependencia del productor y el entorno de ejecuci�nque proporciona el
m�todo fly1 1355, y como resultado, un círculo 4 indica que la declaración de dependencia del productor 1350 es accedida.
Un círculo con una 5 en la figura 13H muestra que un productor C0::I0::FLY1 se instancia como un productor de
5 determinación de la dependencia 1380. Un círculo 6 en la figura 13H indica que el productor C0::IO::ALFA est� vinculado en el grafo de productor para indicar que el productor C0::I0::FLY1 es un productor descendiente. Un círculo 7 en la figura 13G indica que la dependencia del productor del acceso directo en C0::I0::GETC1 se procesa para determinar la dependencia del productor y el entorno de ejecuci�nque proporciona el método fly2 1362, y como resultado, un círculo 8 indica que la declaración de dependencia del productor 1332 es accedida. Un círculo de trazos 9 en la figura 13H muestra que un productor C0::I0::FLY2 se instancia. Un círculo de trazos 10 en la figura 13H indica que el productor C0::I0::FLY1 est� vinculado en el grafo de productor para indicar que el productor C0::I0::FLY2 es un productor descendiente.
Un círculo 11 en la figura 13H indica que el productor C0::I0::FLY2 se ejecuta y se devuelve DEP para identificar el
15 productor C0::I0::GETC1. Un círculo 12 indica que el productor C0::I0::GETC1 se instancia, mientras que un círculo 13 indica que el productor C0::I0::GETC1 est� vinculado en el grafo de productor en el productor C0::I0::FLY1 como productor descendiente.
En la figura 13H, un círculo A indica que el productor C0::I0::GETC1 se ejecuta y vuelve C1 = CX al productor C0::I0::FLY1, mientras que un círculo B indica que el productor C0::I0::FLY1 devuelve DEP para identificar el productor CX::I1::M1, un círculo C indica que el resto no resuelto (método fly1) 1390 se ha resuelto ahora, y un círculo D indica la vinculaci�n del productor C0::I0::ALFA con el productor CX::I1::M1. En la figura 13H, los productores C0::I0::GETC1, C0::I0::Alfa, y CX::I1::M1 son los productores estándar 1385.
25 La generación fly mediante el tiempo de ejecución del productor de determinación de la dependencia C0::I0::FLY1 y C0::I0::FLY2 alivia al programador de la aplicación de tener que escribir el código de declaración de dependencia explícita del productor y de crear instancias de los productores de la determinación de la dependencia basados en el mismo. Además, permite que el programador de la aplicación especifique directamente la dependencia contingente en un productor **::I1::M1 a través del método getC1 en la declaración de dependencia del productor del método alfa 1305, en oposición a la especificación del productor de determinación de la dependencia CW::IY::BETA.
La figura 13I ilustra el pseudo código de las declaraciones de dependencia de los productores de los métodos que utilizan una dependencia del productor de acceso directo no dinámico (no contingente, sin suscripción) de acuerdo con una realización de la invención, mientras que la figura 13J es un diagrama de bloques de productores que
35 ilustran una dependencia del productor de acceso directo de ejemplo no dinámica de acuerdo con una realización de la invención. La figura 13I muestra: 1) una declaración de dependencia del productor 1372 de un método alfa 1305, donde la declaración de dependencia del productor de instrucción 1372 incluye una dependencia del productor de acceso directo a un productor 10, y 2) una declaración de dependencia del productor 1374 para un método fly 1376, donde la declaración de dependencia del productor 1374 est� vacía, y donde el método fly 1376 vuelve como argumento de una instancia de DEP. El método fly 1776 y su declaración de dependencia del productor 1374 son proporcionados por el entorno de ejecuci�nen respuesta a la dependencia de acceso directo. El método fly 1376 incluye el código de declaración de dependencia del productor 1378 que establece DEP.TYPE sin suscripción declarado, establece DEP.PROD al productor 10, y devuelve DEP.
45 En la figura 13I, un círculo 1 indica que la declaración de dependencia del productor 1372 es accedida (por ejemplo, como resultado de la designación de un productor basado en el método alfa 1305 como un productor de interés, como resultado de la detección automatizada de un productor basado en el método Alfa 1305 como una progenie de un productor de interés, etc.). Un círculo 2 en la figura 13J muestra que un productor C0::I0::ALFA se instancia basado en el método alfa 1305. Un círculo 3 en la figura 13I indica que una dependencia del productor de acceso directo se procesa para determinar la dependencia del productor y el entorno de ejecución proporcionada al método fly 1376, y como resultado, un círculo 4 indica que la declaración de dependencia del productor 1374 es accedida. Un círculo de trazos 5 en la figura 13J muestra que un productor C0::I0::FLY se instancia como un productor de determinación de la dependencia1380. Un círculo de trazos 6 en la figura 13J indica que el productor C0::I0::ALFA est� vinculado con el grafo de productor para indicar que el productor C0::I0::FLY es un productor descendiente.
55 Un círculo 7 en la figura 13J indica que el productor C0::I0::FLY se ejecuta y devuelve DEP para identificar el productor 10. Un círculo 8 indica que el productor 10 se instancia, mientras que un círculo 9 indica que el productor C0::I0::ALFA est� vinculado en el grafo de productor con el productor 10, indicando que es un productor descendiente. En la figura 13J, el productor C0::I0::ALFA y el productor 10 son productores estándar 1385.
Se debe entender que el programador delentorno de ejecución, en una realización de la invención, escribe un solo método fly para interpretar todas las sintaxis y las combinaciones soportadas (por ejemplo, el método fly 1334, el método fly1 1355, el método fly2 1362, el método fly 1376) y lo incluye en el entorno de ejecución. Esto no sólo permite a los programadores de aplicaciones evitar la escritura de código para los productores de determinación de 65 la dependencia donde un método fly puede ser utilizado, el programador delentorno de ejecución sólo necesita escribir el método fly genérico (el fly único para todas las situaciones soportadas) una sola vez. Además, se debe
entender que las dependencias de acceso directo para permitir un entorno de ejecución que utiliza los productores de determinación de la dependencia, mientras que al mismo tiempo permite que un programador de la aplicación indique los productores estándar en las declaraciones de dependencia de los productores (por ejemplo, las figuras 13G-J).
5
Estructura de seguimiento del método
Con referencia de nuevo a la estructura de seguimiento del método de la figura 11D, contenidos de ejemplo de la columna ArgumentDependencies 1194, columna FieldDependencies 1196, columna SequencingDependencies 1195, la columna UpwardDependencies 1193, y la columna WeaklyConstrainedDependencies 1199 utilizadas en algunas realizaciones de la invención se describirán ahora. En concreto, la columna ArgumentDependencies 1194 almacena una colección de artículos, uno por cada ArgumentDependency. En una realización de la invención, cada artículo incluye lo siguiente: 1) el argumento de Identificación, 2) un identificador de la naturaleza de la clave de clase, siendo uno de clase explícita, la misma clase y la clase contingente, 3) un identificador de la clave de clase 15 explícita de población, cuando el identificador de la clave de clase indica la naturaleza explícita de la clase, 4) el identificador de clave del método de determinación de la clase contingente poblada, cuando el identificador de la clave de clase indica la naturaleza de la clase contingente, 5) un identificador de la naturaleza de la clave de la instancia, siendo uno de de instancia explícita, la misma instancia y la instancia contingente; 6) un identificador de la clave de la instancia explícita poblada, cuando el identificador de la instancia clave indica la naturaleza de la instancia explícita; 7) el identificador de la clave del método de determinación de la instancia contingentes poblada, cuando el identificador de la naturaleza de la clave de la instancia indica instancia contingente, 8) un identificador de la naturaleza de la clave del método, siendo uno del método explícito, el mismo método, y el método contingente; 9) un identificador de clave del método explícito lleno cuando el identificador de clave de la naturaleza del método indica que método explícito; 10) el identificador de clave de determinación del método contingente poblado, cuando
25 el identificador de la naturaleza de la clave del método indica que método contingente; y 11) un identificador de acceso directo que indica si la declaración de la dependencia del productor para el argumento en la declaración de dependencia del productor contenía una indicación de acceso directo (es decir, la declaración de dependencia del productor identifica directamente un productor descendiente estándar en lugar de un productor de determinación de la dependencia).
La indicación “… explícita” de los varios identificadores de la naturaleza de la clave se utiliza cuando la clave explícita se proporciona para la dependencia del productor en la declaración de dependencia del productor. A modo de ejemplo, la dependencia del productor "CW:: IY::BETA" de la declaración de dependencia del productor 1300 de la figura 13A proporciona una clave de clase explícita, de ejemplo, y de método.
35 En algunas realizaciones de la invención, una técnica de enlace directo es compatible con las declaraciones de dependencia de los productores de tal manera que: 1) si una clase no est� prevista para una dependencia de un productor determinado, entonces se utiliza la misma clase que el productor padre, y 2) si una clase e instancia no se prevén para una dependencia de un productor determinado, entonces se utiliza la misma clase e instancia que el productor padre. En otras realizaciones de la invención, una sintaxis se utiliza para permitir cualquier combinación de clase, instancia, y método, para ser el mismo que el padre (con la excepción de que todos sean iguales) (por ejemplo, un separador se utiliza para designar cada clase, instancia, y método, y una ausencia de este separador indica el mismo como padre -a título de ejemplo específico, la sintaxis puede ser "# C:", "# I:", y "# M:", tal que una dependencia del productor en una declaración de dependencia del productor puede ser # C: "clave de clase"::# I:
45 "clave de instancia"::# M: "clave de método") (donde cuotas indican un marcador de posición para un valor o una variable). La indicación “... mismo” de la naturaleza de los distintos identificadores clave se utiliza en esta técnica de acceso directo se utiliza en el estado de declaración de la dependencia del productor.
Tal como se indicó anteriormente, en algunas realizaciones de la invención una indicación de una dependencia del productor contingente se soporte a través de una sintaxis (por ejemplo, <P>) utilizada en la propia declaración de dependencia del productor (véase 1345 de la figura 13G), y esta sintaxis se puede utilizar en una o más de la clase, la instancia, y el método de una dependencia del productor. La indicación "… contingente" de los varios identificadores de la naturaleza de la clave se utiliza para identificar cuándo se produce una dependencia del productor contingente, mientras que "identificador de la clave de método de determinación … contingente" indica la
55 clave del método del productor descendiente (la clase y la instancia son los mismos que el del productor padre). A modo de ejemplo, la dependencia del productor "<P> GETC1::I1::M1"para la declaración de dependencia del productor 1345 de la figura 13G proporciona una clase contingente (donde la clave del método de determinación de la clase contingente es GETC1), una clave de instancia explícita, y una clave de método explícito.
La columna SequencingDependencies 1195, la columna UpwardDependencies 1193, y la columna WeaklyConstrainedDependencies 1195 almacenan, cada una, una colección de elementos, uno para cada SequencingDependency, UpwardDependency y WeaklyConstrainedDependency. En una realización de la invención, cada elemento tiene la misma estructura que un elemento de la colección de ArgumentDependencies, excepto que no incluye un identificador de argumento. Además, aunque las figuras 13A-J ilustran dependencias sin suscripción 65 declaradas descendentes procedentes de los productores de determinación de la dependencia, se debe entender que en el caso de una dependencia declarada ascendente o dependencia débilmente limitada, el productor de
determinaci�n de la dependencia puede devolver las otras dependencias discutidas con referencia a las figuras 7F-
G.
La columna FieldDependencies 1196 almacena una colección de elementos, uno para cada FieldDependency.
5 Aunque en una realización de la invención, cada elemento incluye la clave del método de propiedad, en realizaciones alternativas de la invención pueden tener la misma estructura que un elemento de la colección de SequencingDependencies.
Dependencias de Suscripción
En una realización de la invención, ambas dependencias de productores de suscripción y sin suscripción son compatibles. Cuando una dependencia del productor de suscripción se declara para un método determinado y un productor se instancia desde ese método dado, el entorno de ejecución puede resolver durante el tiempo de ejecución (en base a la existencia de otros productores), el conjunto de cero o más productores que cumplen los
15 criterios de la suscripción. Si bien una realización de la invención es compatible con los productores de dependencia de suscripción y dependencia sin suscripción, realizaciones alternativas sólo soportan sin suscripción. Además, aunque en una realización de la invención dos tipos de dependencias de suscripción son compatibles (absorbentes y adherentes), las realizaciones alternativas de la invención soportan más, menos, y/o diferentes tipos de dependencias de productores de suscripción.
Las figuras 14A-C son diagramas de bloques que ilustran suscripciones absorbentes y adherentes de acuerdo con una realización de la invención. La figura 14A es un diagrama de bloques de un ejemplo del registro de suscripción 1250 de la figura 12B de acuerdo con una realización de la invención. Aunque la figura 14A ilustra esta estructura de registro como una tabla, se debe entender que cualquier estructura de datos adecuada puede ser utilizada (por
25 ejemplo, un mapa hash). La figura 14B es un diagrama de bloques de productores de ejemplo que ilustran una dependencia absorbente del productor de suscripción no contingente de acuerdo con una realización de la invención. La figura 14C es un diagrama de bloques de productores de ejemplo que ilustran una dependencia adherente del productor de suscripción no contingente de acuerdo con una realización de la invención. Dos filas se muestran en la tabla de la figura 14A llenas con contenido utilizado en los ejemplos de las figuras 14B-C. Los números rodeados con un círculo se utilizan en las figuras 14B-C para ilustrar el orden en que las operaciones se realizan de acuerdo con una realización de la invención.
En la figura 14A, una columna de claves del productor del suscriptor 1400, una columna del tipo de suscripción 1405, y un criterio de suscripción para la columna de los productores de activación 1410 se muestran para
35 almacenar, respectivamente, el contenido correspondiente al nombre de la columna. Además, la figura 14A muestra un columna de modo de enlace padre 1425 para almacenar el modo de enlace para el productor padre de la dependencia de suscripción; esta información se describir� con más detalle respecto a las figuras 14B-C.
La figura 14A muestra también una columna de productores coincidentes 1415 y una columna completada 1420 utilizada para las suscripciones de absorción. La columna de productores coincidentes 1415 se utiliza para almacenar las claves de producción de los productores de activación que cumplen los criterios de suscripción de la suscripción de absorción, mientras que la columna completa 1420 se utiliza para controlar si la suscripción de absorción se ha completado durante la ejecución dada de un conjunto actual de los grafos de los productores. Los productores coinciden con las columnas 1415 y la columna completa 1420 proporciona una optimización adicional
45 opcional que permite el trabajo de exploración de los productores instanciados que se dividen entre la generación automatizada del grafo de productor y la ejecución del grafo de productor tal como se describe más adelante.
La figura 14A muestra también una columna de clase padre 1430, una columna del método padre 1435, y una columna de instancia padre 1437 utilizada para suscripciones adherentes. La columna de clase padre 1430, la columna del método padre 1435, y la columna de instancia padre 1437, respectivamente, almacenar la clave de clase, la clave de método, y la clave de instancia del productor padre que se crear� para la suscripción adherente. Además, la figura 14A muestra una columna de referencia del productor de determinación de la dependencia 1421 que almacena una referencia para el productor de determinación de la dependencia que crea la suscripción.
55 Suscripción de Absorción
En una dependencia del productor de suscripción de absorción, la dependencia es la colección de todos los productores de la estructura del grafo actual del productor que cumple con los criterios de suscripción de absorción. Con referencia a la figura 14B, un círculo 1 indica un productor 1450 que se instancia (por ejemplo, como resultado de la designación del productor 1450 como un productor de interés, como resultado del descubrimiento automatizado del productor 1450 como una progenie de un productor de interés, etc.). El productor 1450 se basa en un método para el que la declaración de dependencia del productor incluye una dependencia del productor (por ejemplo, con ID de argumento X). Un círculo 2 indica la dependencia del productor del productor 1450 que se procesa para identificar un productor 1455.
65 Un círculo 3 indica que el productor 1450 est� ligado (en el ejemplo anterior, a través del argumento ID X) en el grafo de productor 1455 como un productor descendiente. Un círculo 4 indica la ejecución del productor 1455. El productor 1455 es un productor de determinación de la dependencia que incluye el código de declaración de dependencia del productor que indica una dependencia del productor de suscripción de absorción y que indique los criterios de suscripción de absorción. Como tal, la ejecución del productor 1455 resulta en rellenar el registro de suscripción.
5 Respecto al ejemplo en la primera fila de la figura 14A, la columna de claves del productor del suscriptor 1400, la columna del tipo de suscripción 1405, el criterio de suscripción para la columna de los productores de activación 1410, la columna del modo de enlace padre 1425, y la columna de referencia de determinación de la dependencia del productor 1421 est�n, respectivamente, llenas con la clave de productor del productor 1450, una indicación de que la suscripción es del tipo de absorción, los criterios de suscripción de absorción contenidos en el productor 1455, el modo de enlace del productor 1450 vinculado al productor 1455 (que, en el caso de una suscripción absorbente ser� una dependencia de argumento e incluyen un ID de argumento, pero cuyo indicador de adherencia se indicar� como no adherente -en el ejemplo anterior, Identificación del argumento de X), y una referencia al productor 1455 (el productor de determinación de la dependencia que créala suscripción).
15 Los círculos 5A-N indican la instanciaci�n de los productores 1460A-N. En este ejemplo, los productores 1460A-N cumplen los criterios de suscripción absorbentes, y por lo tanto son productores de activación. Como tal, un círculo 6A-N indica la vinculaci�n del productor 1450 con los productores 1460A-N (en el ejemplo anterior, a través del ID del argumento X). Un círculo 7 indica que la dependencia de la suscripción absorbente se completa para la ejecución actual del grafo(s) del productor, y el productor 1450 se ejecuta a continuación.
En una realización de la invención, los criterios de suscripción absorbentes pueden ser una o más de cualquiera de las claves que constituyen una clave del productor. As�, en realizaciones de la invención donde una clave del productor comprende una clave de clase, una clave de ejemplo, y una clave de método, los criterios de suscripción podrían ser una o más claves de este tipo. A modo de ejemplo con referencia a la figura 11C, una exploración a
25 través de los productores instanciados para aquellos que cumplen los criterios de suscripción es una exploración a través de una o más de las tres primeras columnas del grafo(s) del productor de la estructura para determinar si las claves de los productores instanciados coinciden con las claves de los criterios de suscripción de absorción. Aunque en una realización de la invención, los criterios de suscripción absorbentes pueden ser uno o más de cualquiera de las claves que constituyen una clave del productor, en realizaciones alternativas de la invención, los criterios de suscripción absorbentes se limitan a un subconjunto de las claves que constituyen una clave del productor.
Suscripci�n adherente
En una dependencia de la suscripción del productor adherente, la dependencia hace que un productor padre a
35 instanciar para cada productor que cumpla con los criterios de suscripción adherentes. Con referencia a la figura 14C, un círculo 1 indica un productor 1470 que se instancia (por ejemplo, como resultado de la designación del productor 1470 como un productor de interés, como resultado del descubrimiento automatizado del productor 1470 como una progenie de un productor de interés a través de una dependencia de secuenciaci�n (por ejemplo, como resultado de un SequencingDependency o WeaklyConstrainedDependency, etc.). El productor 1470 es un productor de determinación de la dependencia que incluye la dependencia del código de declaración del productor que indica una suscripción adherente, los criterios de suscripción adherentes para los productores de activación, y las características de suscripción adhesivas para el productor padre que se va a crear.
La ejecución del productor 1470 resulta en poblar el registro de suscripción. Respecto al ejemplo en la segunda fila
45 de la figura 14A, la columna de claves del productor del suscriptor 1400, la columna del tipo de suscripción 1405, y la columna de los productores de los criterios para la suscripción de activación 1410, respectivamente, se llenan con la clave de productor del productor 1470, una indicación de que la suscripción es del tipo adherente, y los criterios de suscripción adherentes para los productores de activación contenidos dentro del productor 1470. Además, la columna de la clase padre 1430, la columna del método padre 1435, la columna de instancia padre 1437, y la columna del modo de enlace 1425 del productor padre que a est� vinculado al productor de activación se llenan con las características de suscripción adherentes para el productor padre que se puede crear -en esta realización de la presente invención, respectivamente, la clase del productor padre a instanciar, el método del productor padre a instanciar, el productor padre de ejemplo a instanciar (si se deja en blanco, sería igual a la clave de instancia del productor de activación), el modo de enlace (que, en el caso de la suscripción adherente, puede ser: 1) dependencia
55 de argumento, campo, o secuenciaci�n, 2) el argumento de identidad si una dependencia de argumento -el ID de argumento del productor padre est� relacionada con el productor de activación (por ejemplo, el argumento de Identificación Y). Además, la columna de referencia del productor de determinación de dependencia 1421 se llena con una referencia para el productor de determinación de la dependencia que cre� la suscripción (en la figura 14C, el productor 1470).
Con referencia a la figura 14C, un círculo 2 indica un productor 1475 que se instancia (por ejemplo, como resultado de la designación del productor 1475 como un productor de interés, como resultado del descubrimiento automatizado del productor 1475 como una progenie de un productor de de interés, etc.). Además, se determina si el productor 1475 cumple los criterios de suscripción adherentes para un productor de activación. Un círculo 3 indica 65 que responde al productor de activación 1475, un productor 1480 se instancia basado en los criterios de suscripción adherentes para el productor padre a crear. Con referencia a la segunda fila de ejemplo de la figura 14C, la clave de
clase, la clave de método, la clave de ejemplo, y el modo enlace se accede desde la columna de clase padre 1430, la columna del método padre 1435, la columna de ejemplo 1437, y la columna del modo de enlace padre 1425, respectivamente. El productor padre tiene una clave del productor que comprende la clave de clase visitada, la clave de instancia visitada (si se deja en blanco, la clave de instancia del productor de activación (en la figura 14C, el
5 productor 1475)), y la clave del método accedido -en el ejemplo de la figura 14C, este es el primer productor 1480. Un círculo 4 indica que el productor padre instanciado 1480 est� vinculado con el grafo de productor al productor de activación descendiente 1475 a través del modo de enlace accedido (en el ejemplo anterior, el tipo del modo de enlace = dependencia del argumento, el argumento del modo de enlace ID = Y). También en el círculo 4, en el caso de una dependencia del argumento, el indicador adherente se establece para indicar adherente -cuya dependencia del productor en esa posición de la declaración de dependencia del productor para el método en que se basa el productor padre instanciado 1480 debería ser ignorado por el productor 1480 -esto evita que el enlace creado por la dependencia del productor de suscripción adherente que se sobrescriben mediante las operaciones posteriores de generación automatizada de grafos del productor.
15 En una realización de la invención, los criterios de suscripción adherente para los productores de activación pueden ser una o más de las claves que constituyen una clave del productor, con la excepción de la clave de instancia. As�, en realizaciones en las que una clave del productor comprende una clave de clase, una clave de instancia, y una clave de método, los criterios de suscripción adherentes de activación pueden ser una o más de las claves de clase, instancia, y método. A modo de ejemplo con referencia a la figura 11C, una exploración a través de los productores instanciados para aquellos que cumplen los criterios de suscripción adherentes para los productores de activación es una exploración a través de una o más de las columnas primera a tercera del grafo(s) del productor de la estructura para determinar si las claves de los productores instanciados coinciden con las claves de los criterios de suscripción adherentes para los productores de activación. Aunque en una realización de la invención, los criterios de suscripción adherentes para los productores de activación pueden ser una o más de las claves que constituyen
25 una clave del productor, en realizaciones alternativas de la invención, los criterios de suscripción absorbentes puede ser un número más limitado de las claves que constituyen una clave del productor.
Las figuras 14D-E ilustran la elección de un productor padre basado en un productor padre de determinación de la dependencia de acuerdo con una realización de la invención. Aunque las figuras 14D-E se describen con referencia a las dependencias de argumento, realizaciones de la invención pueden soportar el uso de las dependencias de secuenciaci�n y de campo.
La figura 14D ilustra la elección de un productor padre basada en un productor padre de determinación de la dependencia creada por una suscripción adherente de acuerdo con una realización de la invención. Al igual que la 35 figura 14C, la figura 14D muestra el productor de suscripción adherente 1470 y el productor de activación 1475, sin embargo, más que el productor 1480, la figura 14D muestra un productor de determinación de la dependencia 1480 creada mediante la suscripción adherente de un productor de suscripción adherente 1470. Además, la figura 14D muestra que el modo de enlace de la suscripción adherente es la dependencia de argumento, el argumento ID = X, y indicador adherente = adherente. Tal como se ilustra por la línea discontinua curvada desde el productor 1475 al productor de determinación de la dependencia 1480, el DEP devuelto por el productor de determinación de la dependencia puede estar basado en la propia salida del productor 1475 (el argumento del ID de argumento = X). En la figura 14D, el productor de determinación de la dependencia 1480 devuelve una productor de dependencia sin suscripción ascendente declarado en un productor 1482, con el modo de enlace indicando la dependencia de argumento y el argumento ID = Y. Aunque los identificadores de argumento X e Y se utilizan en la figura 14D para
45 demostrar que pueden variar, debe entenderse que pueden ser iguales.
La figura 14E ilustra la elección de un productor padre basada en un productor padre de determinación de la dependencia creada por un productor descendiente de determinación de la dependencia, que est� vinculado al productor de determinación de la dependencia descendiente mediante una dependencia de secuenciaci�n, de acuerdo con una realización de la invención. La figura 14E es similar en estructura a la figura 14D, en concreto, el productor 1475, 1480, y 1482 se sustituyen con los productores 1486, 1496 y 1498. Sin embargo, más que el productor de suscripción adherente 1470 que crea el vínculo entre los productores 1480 y 1475, el productor 1486 tiene una dependencia de secuenciaci�n de un productor de determinación de la dependencia 1494 (por ejemplo, creado a través de UpwardDependency o WeaklyConstrainedDependency a), que crea el productor de
55 determinación de la dependencia 1496 a través de una dependencia sin suscripción ascendente declarada.
Es destacable que las suscripciones adherentes y las dependencias declaradas sin suscripción ascendentes (por ejemplo, creadas a través de UpwardDependencies y/o WeaklyConstrainedDependencies) causan una construcción inferior de un grafo de productor (en oposición a la construcción superior hacia abajo que se ha descrito anteriormente en este documento). Además, esta construcción de abajo hacia arriba no se limita a la construcción de un solo nivel, sino que puede ser de varios niveles (por ejemplo, si debido a una suscripción adherente o sin suscripción ascendente de dependencia declarada, un productor padre se instancia, que el mismo productor padre también puede ser un productor de activación para una suscripción adherente o puede incluir una dependencia sin suscripción ascendente declarada y hacer que la instanciaci�n de otro productor padre, y as� sucesivamente). En
65 este sentido, las suscripciones adherentes, as� como las dependencias sin suscripción ascendentes declaradas, inversa a la construcción del grafo de productor.
Aunque en algunas realizaciones de la invención, los productores padre identificados por las características de suscripción adherentes son productores estándar (ver la figura 14C), realizaciones alternativas pueden implementarse para soportar la identificación de otros tipos de productores. Por ejemplo, en las realizaciones de la 5 invención que permiten las características de suscripción adherentes para identificar un productor de determinación de la dependencia (véase la figura 14D), este productor de determinación de la dependencia puede acceder a la salida del productor de activación y puede, sobre la base de esa salida, desencadenar la creación de un productor particular como productor padre que hay que adherir al descendiente (este productor padre ya podría existir o no, y si ya existe, simplemente est� vinculado, y el productor descendiente se agrega a su argumento; si no existe todavía, se crea). El caso en el que el productor de determinación de la dependencia devuelve un productor constante imita una suscripción absorbente. El caso en el que el productor de determinación de la dependencia devuelve un productor cuyo ejemplo clave es único para cada productor de activación (por ejemplo, devuelve un productor cuya clave de instancia es la clave del productor del productor de activación) se traduce en un productor padre separado del productor descendiente y se le conoce como una suscripción adherente pura. El caso en el que
15 el productor de determinación de la dependencia devuelve una clave de instancia que no es ni constante ni única para cada productor de activación, se pueden mezclar los comportamientos de las suscripciones adherentes puras y las suscripciones de absorción y se conoce como una suscripción adherente no pura.
Ventajas de ejemplo
Tal como se describió previamente, en una realización de la invención, las dependencias de los productores se declaran para métodos como una forma de especificar la invocaci�n de secuenciaci�n del método utilizando las instancias apropiadas (donde las instancias apropiadas incluyen las instancias a utilizar como argumentos, las instancias a utilizar por los métodos de instancia , y las instancias de la clase meta utilizadas por los métodos de
25 clase) sin necesidad de utilizar la invocaci�n manual del código de secuenciaci�n, efectivamente, el trabajo de generar parte o la totalidad del manual de invocaci�n del código de la secuencia se sustituye por: 1) el trabajo realizado por el programador de la aplicación para escribir las declaraciones de dependencia de los productores y 2) el trabajo realizado por el entorno de ejecución para descubrir y construir el grafo(s) del productor y ejecutar los productores de ese grafo(s) del productor. Aunque el esfuerzo de escribir el entorno de ejecución es relativamente grande, se necesita sólo ser escrito una vez porque puede utilizarse para ejecutar todas las aplicaciones orientadas a objetos escritos para el entorno de ejecución, en cambio, para una aplicación típica, el esfuerzo de escribir las declaraciones de dependencia del productor es relativamente bajo en comparación con la escritura manual del código de invocaci�n de la secuenciaci�n.
35 No dinámicos dependencias productores prevén una manera de especificar la invocaci�n de métodos de secuenciaci�n incondicional de código, y as� evitar la necesidad de escribir la invocaci�n incondicional de secuenciaci�n manual del código. Dependencias de contingentes de productores prevén una forma de especificar el procesamiento condicional, y por lo tanto evitarla necesidad de escribir código de invocaci�n condicional manual de secuenciaci�n. Soporte a las dependencias de productores que permitan una colección de los productores para ser devueltos prev� una forma de especificar el relleno de una colección antes de que se pasa como un parámetro, y as� evitar la necesidad de escribir varias llamadas en la invocaci�n manual de código de secuencia para rellenar una colección antes de que se pasa como un parámetro. Soporte a las suscripciones proporciona un entorno en el que un programador no tiene que escribir código específico de escucha para cada tipo de objeto a ser escuchado (por ejemplo, en una hoja de cálculo grafo de programación orientado a productores, una suscripción a la absorción
45 puede ser utilizado para calcular un promedio de un rango de celdas (cada célula es un productor) haciendo que los criterios de suscripción de absorción identificar las células dentro de la gama, y volver a calcular el promedio cada vez que un nuevo productor se agrega a la suscripción de la absorción, en una hoja de cálculo grafo de programación orientado a productores, una suscripción adherente puede ser utilizado como un conversor de divisas por tener los criterios de suscripción adherentes identificar las células mantiene el contenido de la moneda y las características adhesivas de suscripción del productor adherente (s) para crear una instancia que realizar la conversión de moneda (los productores (la celebración de los importes convertidos) creados por las suscripciones adherentes sería entonces disponible para su visualización en otras células).
Operaci�n
55 Nuevos comandos de instancia
La figura 15 es un diagrama de flujo para instanciar nuevas instancias de acuerdo con una realización de la invención. Tal como se ha descrito anteriormente con referencia a la figura 10, el módulo de clase nueva 1095 de la figura 10 puede ser implementado como parte del módulo de instancia nueva 1098. El diagrama de flujo de la figura 15 asume esta realización y se lleva a cabo por el módulo de instancia nueva 1098; la parte del diagrama de flujo de la figura 15 que representa el módulo de clase nueva 1095 se muestra como el bloque de trazos 1580, que incluye los bloques 1540 y 1550.
65 En respuesta a un comando de nueva instancia (bloque 1510), el control pasa al bloque 1520. En el bloque 1520, se determina si la instancia ya existe. Si no es as�, el control pasa al bloque 1530, de lo contrario, no es necesario crear una instancia y el control pasa al bloque 1570, en el que se termina el diagrama de flujo. En una realización que soporta claves de instancia, el bloque 1520 se realiza mediante el acceso a la estructura de seguimiento de instancia 1065 de la figura 10 para la clave de instancia (y la clave de clase si las claves de instancia no tienen que ser únicas a través de las clases) proporcionada como parte del nuevo comando de instancia.
5 En el bloque 1530, se determina si la definición de clase de la instancia ya est� cargada. Si no es as�, el control pasa al bloque 1540, de lo contrario, el control pasa al bloque 1560. En una realización que admite claves de clase, el bloque 1540 se realiza mediante el acceso a la estructura de seguimiento de clase 1092 de la figura 10 para la clave de clase proporcionada como parte del nuevo comando de instancia.
10 En el bloque 1540, la clase se carga y el control pasa al bloque 1550. En el bloque 1550, la definición de clase se almacena de acuerdo con la clave de clase y se realiza introspecci�n, incluyendo cualquier declaración de dependencia de los productores (almacenada por la clave del método dentro de la clase -ver la figura 11D). Desde el bloque 1550, el control pasa al bloque 1560. Con referencia a la figura 10, lo siguiente se realiza en bloques 1540
15 y 1550: 1) la clase se carga a partir de las definiciones de clase que incluyen la lógica de negocio 1010 en las clases 1054 (esta carga resulta carga en los métodos y las declaraciones de dependencia de los productores de la clase se almacenan en el método y las declaraciones de dependencia de los productores 1056), 2) la clase se añade a la estructura de seguimiento de la clase 1092, y 3) los métodos se añaden a la estructura del método de seguimiento 1058. Además, las clases de salida de los métodos se cargan.
20 En el bloque 1560, una instancia de la clase se instancia y se almacena de acuerdo con la clave de instancia. Con referencia a la figura 10, la instancia se instancia en las instancias 1052, y el ejemplo se añade a la estructura de seguimiento de instancias 1065. Desde el bloque 1550, el control pasa al bloque 1570 en el que el diagrama de flujo termina. En algunas realizaciones de la invención en las que se utiliza una técnica de asignación de objetos
25 relacional, los datos pueden ser cargados desde un origen de datos externo para llenar el campo de la instancia como parte del bloque 1560.
En algunas realizaciones de la invención, las clases y las instancias se pueden cargar/ejecutar en un modo en que el entorno de ejecución con el soporte de programación orientado al grafo de productor no es consciente (por ejemplo, 30 en la figura 9A, si elentorno de ejecución 915 carga/instancia sin que el entorno de ejecución 910 sea consciente). En tales casos, las realizaciones de la invención que también soportan la clave de instancia son un ejemplo de la clase InstanceKey (que tiene dos elementos: una naturaleza de clave de instancia indicando si el identificador de clave es una referencia a la instancia u otro objeto (tal como una cadena), y un identificador de clave que puede ser una referencia a la instancia, o a otro objeto (tal como una cadena)), los bloques 1520 y 1530 preguntarán a si la 35 instancia y la clase se instancian/cargan de una manera en la que el entorno de ejecución con el soporte de programación orientado al grafo de productor es consciente. En los casos en los que el entorno de ejecución con el soporte de programación orientada al grafo de productor no tiene conocimiento de una clase ya cargada, la clase no se puede cargar, pero la clase se añade a la estructura de seguimiento de la clase 1092 y los métodos se añaden a la estructura de seguimiento del método 1058. En los casos en los que el entorno de ejecución con el soporte de
40 programación orientado al grafo de productor no tiene conocimiento de una instancia ya creada, la instancia no se instancia, pero la instancia se agrega a la estructura de seguimiento de la instancia 1065.
Nuevo productor y Comandos Anulados
45 La figura 16A es un diagrama de flujo para instanciar nuevos productores y anular productores de acuerdo con una realización de la invención. Con referencia a la figura 10, los flujos de la figura 16Ase realizan mediante el módulo de generación del grafo de productor automatizado 1040 y el módulo del productor de anulación 1045 (o, tal como se ha descrito con referencia a realizaciones alternativas respecto a la figura 10, el módulo que se encarga de la anulación y la inversión de la anulación).
50 En respuesta a un nuevo comando del productor (bloque 1600), el control pasa al bloque 1605. En una realización de la invención, un nuevo comando del productor puede ejecutarse en respuesta a una variedad de situaciones. La tabla 2 a continuación identifica las diversas situaciones y los parámetros pasados de acuerdo con una realización de la invención.
55 TABLA 2 En el bloque 1605, se determina si el productor ya existe. Si no, el control pasa al bloque 1610, de lo contrario, el control pasa al bloque 1670. El bloque 1605 se lleva a cabo mediante el acceso a una clase, instancia, y al método identificado (por ejemplo, por la clave y/o la referencia) como parte del nuevo comando del productor. En una
- Situaciones
- Productor que llama Productor llamado (a ser creado si no existe) Tipo de llamada Modo de enlace Referencia del productor de determinación de la dependencia
- Productor de interés
- N/A Productor de interés que se crea De interés N/A N/A
- No suscripción declarada descendente
- Padre Descendiente No suscripción declarada descendente Modo de enlace del productor padre que llama Productor de determinación de la dependencia que proporciona la dependencia
- Situaciones
- Productor que llama Productor llamado (a ser creado si no existe) Tipo de llamada Modo de enlace Referencia del productor de determinación de la dependencia
- Suscripci�n adherente
- Descendiente Padre (clase padre, método y clave de instancia a partir de las características de suscripción adherentes para el productor padre a crear, si clave de instancia est� en blanco, la clave de instancia del productor descendiente que llama existente) Adherente Modo de enlace del productor padre llamado a partir de las características de suscripción adherentes para el productor padre a crear Productor de determinación de la dependencia que proporciona la dependencia
- Anulaci�n
- N/A Productor a anular Anulado N/A N/A
- No suscripción ascendente declarada
- Descendiente Padre No suscripción ascendente declarada Modo de enlace del productor padre llamado Productor de determinación de la dependencia que proporciona la dependencia
5 realización que soporta las claves de los productores, el bloque 1605 se realiza mediante el acceso al grafo(s)del productor de la estructura 1060 de la figura 10 para la clave del productor proporcionada como parte del nuevo comando del productor (la clave del productor en la columna del productor llamado de la Tabla 2).
En el bloque 1610, el nuevo módulo de instancia se llama con un nuevo comando de instancia y el control pasa al
10 bloque 1615. En una realización de la invención, el bloque 1610 se realiza mediante una llamada al diagrama de flujo de la figura 15 utilizando la clave de instancia de la clave del productor en la columna del productor llamado de la Tabla 2.
En el bloque 1615, se accede a la definición de clase de la instancia del productor y el control pasa al bloque 1620.
15 Con referencia a la figura 10, el bloque 1615 se realiza mediante el uso de la clave de clase de la clave del productor en la columna del productor llamado de la Tabla 2 para acceder a la apropiada de las clases 1054 de acuerdo con la estructura de seguimiento de la clase 1092.
En el bloque 1620, el método y la declaración de dependencia del productor del productor se acceden y el control
20 pasa al bloque 1623. Con referencia a la figura 10, el bloque 1620 se realiza usando la clave del productor de la clave del método en la columna del productor llamado de la Tabla 2 para acceder al apropiado de los métodos y las declaraciones de dependencia de los productores 1056 de la clase situada en el bloque 1615.
En el bloque 1623, el modo de ejecución del productor es determinado y el control pasa al bloque 1625. Los detalles
25 a manera de ejemplo en que bloque 1623 es ejecutado se discuten a continuación. En algunas realizaciones, un modo de ejecución predeterminado se define como una anotación en el nivel de código. El comportamiento puede ser anulado en tiempo de ejecución por el usuario final o por el código de cliente a través de una estructura de decisión configurable basada en los productores (por ejemplo, la estructura de decisión configurable basada en los productores1049 en la figura 10) en una clase base, un método base, una instancia base, o cualquier combinación
30 de lo anterior. Además, se pueden proporcionar los ajustes de tiempo de ejecución para permitir que entorno de ejecución pueda ignorar las anotaciones de programación o las configuraciones definidas por el usuario forzando la ejecución en el modo de ejecución predeterminado, dependiendo del ambiento computacional (Por ejemplo, disponibilidad de distintos procesadores en una maquina, disponibilidad de grid, cargador de procesos, etc.). Entorno de ejecución entorno de ejecución.
5 En el bloque 1625, el productor se añade al grafo de productor y el control pasa al bloque 1630. Con referencia a la realización de la invención en la figura 11C, las tres primeras columnas se rellenan.
En el bloque 1630, para cada suscripción registrada, el criterio de filtrado de la suscripción se procesa para determinar si el productor coincide. Con referencia a la realización de la invención en la figura 14A, una suscripción se considera registrada cuando se añade al registro de suscripción. Ejemplos de operaciones para registrar la suscripción se describen más adelante en este documento. El bloque 1630 es opcional, que permite la optimización de la labor de la exploración de los productores de instancias que se divide entre la generación automatizada del grafo de productor y la ejecución del grafo de productor. Como tal, una realización alternativa de la invención puede
15 no realizar el bloque 1630.
En el bloque 1635, el productor est� vinculado al grafo(s) del productor si es llamado debido a una dependencia. Desde el bloque 1635, el control pasa al bloque 1640. La manera de llevar a cabo el bloque 1635 depende de la situación que se tradujo en el nuevo comando del productor que se est� ejecutando. Por ejemplo, si la situación es que este es un productor de interés o un productor de suplantación, entonces no se llama debido a la dependencia y no se hace nada. En contraste, si la situación es directa, entonces se llama debido a una dependencia directa; y con referencia a la realización de la invención en la figura 11C, se realiza lo siguiente: 1) la columna de referencia(s) del productor(es) padre 1150 del productor descendiente llamado (columna del productor llamado de la tabla 2) se rellena con una referencia a la fila del productor padre que llama (la columna del productor que llama de la tabla 2);
25 2) la columna de referencia(s) del productor(es)descendiente 1160 de la fila del productor padre que llama (columna del productor que llama de la tabla 2) se rellenacon una referencia a la fila del productor descendiente llamado (la columna del productor llamado de la Tabla 2),as� como el modo de enlace se establece de acuerdo con la columna del modo de enlace de la Tabla 2.
En contraste, si la situación es una suscripción adherente, entonces se llama debido a un productor de activación que se identifica, y con referencia a la realización de la invención en la figura 11C, se realiza lo siguiente: 1) la columna de referencia(s) del productor padre 1150 del productor descendiente que llama (la columna del productor que llama de la tabla 2) se rellenacon una referencia a la fila del productor padre que llama (la columna del productor llamado de la tabla 2), as� como el modo de enlace es establecido de acuerdo con la columna del modo de enlace
35 de la tabla 2 y el identificador de argumento apropiado se establece para indicar la adherencia; y 2) la columna de referencia(s) del productor(es)descendiente 1160 de la fila del productor padre que llama (columna del productor que llama de la tabla 2) se rellena con una referencia a la fila del productora descendiente que llama (columna del productor que llama de la Tabla 2).
En el bloque 1640, el productor est� marcado como no ejecutado y el control pasa al bloque 1645. Con referencia a la realización de la invención en la figura 11C, la columna de marcado de la ejecución incremental 1180 de la fila correspondiente se rellena con una indicación no ejecutada.
En el bloque 1645, se determina si el productor tiene alguna dependencia y no est� anulada. Si es as�, el control
45 pasa al bloque 1650, de lo contrario, el control pasa al bloque 1665. El bloque 1645 se lleva a cabo mediante la comprobación de la declaración de dependencia en el bloque productor de acceso 1620 y la columna del tipo de llamada de la Tabla 2.
En el bloque 1650, para cada dependencia en la declaración de la dependencia del productor que se va a resolver ahora, se determina el número de productores y un nuevo comando del productor se invoca para cada uno. Desde el bloque 1650, el control pasa al bloque 1655. Diferentes realizaciones de la invención determinan los diferentes tipos de dependencia en diferentes momentos, la realización del bloque 1650 es una realización de ejemplo de la invención que se describir� más adelante en este documento.
55 En el bloque 1655, el productor se añade en el registro de inicio de ejecución si todos los productores que dependen existen y han sido ejecutados. Desde el bloque 1655, el control pasa al bloque 1660. Cuando, un productor instanciado dado como parte de la iteración actual de este flujo, el bloque 1655 se realiza, a continuación, la invocaci�n de otra iteración de este flujo para un productor dependiente devolver� el estado de ejecución del productor (véase el bloque 1660) (por ejemplo, respecto a la realización de la invención de la figura 11C, el estado de la columna de marcado de la ejecución incremental 1180 de la(s) fila(s) correspondiente (s)). Si todos los productores dependientes existen y el estado de ejecución de todos los productores dependientes se ejecuta, a continuación, el productor de la iteración actual se añade al registro de inicio de ejecución.
En el bloque 1660, el estado de ejecución del productor se devuelve como un parámetro.
65 En el bloque 1665, el productor se añade al registro de inicio de ejecución y el control pasa al bloque 1660.
En el bloque 1670, similar al bloque 1635, el productor est� vinculado al grafo(s) del productor si es llamado por una dependencia. Desde el bloque 1670, el control pasa al bloque 1675. El bloque 1670 puede ser alcanzado por una variedad de razones. Por ejemplo, el bloque 1670 se puede alcanzar debido a que el productor crea una instancia
5 que anteriormente responde a un comando de anulación del productor, pero no vinculado en el grafo de productor. Como otro ejemplo, el bloque 1670 se puede alcanzar porque el productor ya es parte de un grafo de productor y se añade a otro (por ejemplo, en respuesta con anterioridad a la instancia que es un productor de interés, una progenie de un productor de interés, etc.)
En el bloque 1675, se determina si el nuevo flujo del productor se llama debido a una anulación, a una dependencia de suscripción adherente, o una dependencia declarada ascendente sin suscripción. Si es as�, el control pasa al bloque 1680, de lo contrario, el control pasa al bloque 1660. El bloque 1675 lleva a cabo el control de la columna de tipo de llamada de la Tabla 2 para ver si es una llamada para un productor de anulación, una dependencia de suscripción adherente, o una dependencia sin suscripción declarada ascendente.
15 En el bloque 1680, similar al bloque 1640, el productor est� marcado como no ejecutado y el control pasa al bloque 1665. El bloque 1680 puede ser alcanzado por una variedad de razones.
En respuesta a un comando de anulación del productor (bloque 1690), el control pasa al bloque 1695. En el bloque 1695, el productor est� marcado como no anulado y el control pasa al bloque 1640. Con referencia a la realización de la invención de la figura 11C, el cach� del productor de salida y la columna de indicaciones de salida del productor de anulación 1170 de la fila del productor son accedidos y alterados para indicar que el productor ya no est� anulado. Continuando con este flujo, el bloque 1640 daría lugar al bloque 1645, y si el productor tenía cualquier dependencia, al bloque 1650, lo que provocaría que el grafo de productor bajo el productor que fuera descubierto y
25 construido, si no lo estaba ya. Si el grafo de productor bajo el productor ya est� descubierto y construido, a continuación, la invocaci�n del nuevo comando del productor dar� lugar a flujos que van de 1600 a 1605, a 1670, y as� sucesivamente, además, el regreso del estado de ejecución de los productores del grafo en el marco del productor en el bloque 1660 determinar� si el productor se añade en el registro de inicio de ejecución en el bloque 1655. Sin embargo, si el grafo de productor bajo el productor no se descubre y se construye, a continuación, la invocaci�n del nuevo comando del productor se traducir� en que se descubren y construyen los flujos que van de 1600, a 1605, a 1610, y as� sucesivamente.
La Figura16B es un diagrama de flujo del bloque 1623 de la Figura16A de acuerdo con una realización de la invención. Por lo tanto, el control se pasa del bloque 1620 hasta el bloque 16231 en el bloque 1623. En el bloque
35 16231, se comprueba una anulación del ajuste de entorno de ejecución.A continuación, se determina si la anulación del ajuste de entorno de ejecución se activa en el bloque 16233. Si se establece, entonces el modo de ejecución se establece de acuerdo al ajuste de entorno de ejecución en el bloque 16234. De lo contrario, la estructura de decisión configurable basada en los productores para la selección de modo de entorno de ejecución de usuario final se comprueba en el bloque 16235 y el control pasa al bloque 16236. En el bloque 16236, se determina si el usuario final ha hecho alguna selección del modo de ejecución. Si es as�, entonces el modo de ejecución se establece en función del ajuste en la estructura de decisión configurable basada en los productores en el bloque 16237. De lo contrario, la definición del método del productor se comprueba para el modo de ejecución definido como una anotación en el nivel de código el modo de ejecución se establece de acuerdo a la anotación en el bloque16238. Desde el bloque 16238 o 16237, el control pasa al bloque 16239 para terminar el proceso en el bloque 1623.
45 La figura 17 es un diagrama de flujo para el bloque 1650 de la figura 16 de acuerdo con una realización de la invención. Por lo tanto, los flujos de control del bloque 1645 al bloque 1700 en el bloque 1650. En 1700, por categorías, para cada dependencia en la declaración de dependencia del productor (uno por cada ArgumentDependency, FieldDependency, SequencingDependency, UpwardDependency y WeaklyConstrainedDependency), los siguientes bloques 1705-1745 se llevan a cabo. Con referencia a las figuras 10 y 11D, la estructura de seguimiento del método es accedida para determinar la información relativa a la dependencia del productor. También debe entenderse que los bloques 1715, 1725, 1730, 1740, 1745 y 1750 son una optimización cuando se realizan antes de la ejecución del grafo de productor.
55 En el bloque 1705, se determina si la dependencia es un argumento de dependencia vinculado ya debido a una dependencia adherente. Si es as�, el control pasa al bloque 1710 donde el flujo se completa para esta dependencia, de lo contrario, el control pasa al bloque 1715. Respecto a la realización de la invención que se muestra en la figura 11C, el identificador de argumentoadherente se comprueba para determinar si el ID del argumento de esta dependencia est� sujeto a una dependencia de argumento de suscripción adherente o a una dependencia de argumento declarado ascendente.
En el bloque 1715, se determina si la dependencia es una dependencia contingente. Si es as�, el control pasa al bloque 1720, de lo contrario, el control pasa al bloque 1725. El bloque 1715 se lleva a cabo mediante la comprobación de la declaración de dependencia del productor del productor descendiente identificado por la 65 dependencia para determinar si est� vacío (el productor descendiente es un productor independiente). Respecto a las figuras 13A-J, esto sería cierto para los productores con números rodeados con líneas de trazos (por ejemplo, en
la figura 13D, el productor CU::IV::DELTA), pero no es cierto para los otros productores (por ejemplo, en la figura 13D, el productor CW::IY::BETA). As�, con referencia a la figura 13D, el bloque 1715 est� representado por un círculo 1, 4, y 8. El bloque 1715 y el flujo desde el mismo a través de los bloques 1725-1750 es una optimización que evita la adición/vinculaci�n con los productores de los números rodeados con líneas de trazos del grafo de
5 productor, as� como dividir el trabajo de la ejecución de los productores y el prosamiento de las suscripciones entre la generación del grafo de productor automatizado y la ejecución del grafo de productor.
En el bloque 1720, un nuevo comando del productor para el productor de determinación de dependencia se invoca y termina el flujo. Por ejemplo, con la referencia de la figura 13D, el bloque 1720 causa lo que est� representado por un círculo 5, 6, y 7.
En el bloque 1725, el productor de determinación de la dependencia se ejecuta y el control pasa al bloque 1730. Por ejemplo, con referencia a la figura 13D, el bloque 1725 est� representado por un círculo 11 (por lo tanto, el flujo de la figura 17 ilustra la realización que se ha descrito previamente, en el que un círculo 9 y 10 de la figura 13D no se
15 realizan).
En el bloque 1730, se determina si la dependencia es una dependencia directa (sin suscripción). Si es as�, el control pasa al bloque 1750, de lo contrario el control pasa al bloque 1740. En otras palabras, en el bloque 1725, el código de determinación de la dependencia del productor en el método del productor de determinación de la dependencia, que es parte de la declaración de dependencia del productor del productor padre, es ejecutado. Una vez ejecutada este código de declaración de la dependencia del productor, cuyo código sería identificar si se determina que esta dependencia es una dependencia de suscripción, el tipo de dependencia del productor del productor padre. Respecto al ejemplo en la figura 13D, el círculo 11 se traduciría en el flujo de la figura 17 que pasa desde el bloque 1730 al bloque 1750.
25 En el bloque 1750, se determina el número de productores devueltos por la ejecución del productor de determinación de la dependencia en el bloque 1725 y un nuevo comando del productor se invoca para cada uno. Por ejemplo, con referencia a la figura 13D, el bloque 1750 causaría los círculos 12 y 13 y los círculos C y D.
Con referencia al ejemplo de suscripción absorbente de la figura 14B, el bloque 1725 representa un círculo 4; que hace que el flujo pase a través del bloque 1730 al bloque 1740.
En el bloque 1740, la suscripción se agrega al registro de suscripción, y si la suscripción se absorbe, se marcar� como incompleta. Desde el bloque 1740, el control pasa al bloque 1745. Con referencia a la realización de la
35 invención que se muestra en la figura 14A, el registro de suscripción se rellena con la suscripción tal como se describió previamente.
En el bloque 1745, todas las instancias de los productores se analizan para ver si coinciden con los criterios de la suscripción (y por lo tanto, es un productor de activación), y las coincidencias son procesadas.
La figura 18 es un diagrama de flujo para el bloque 1745 de la figura 17 de acuerdo con una realización de la invención. Por lo tanto, el control fluye desde el bloque 1740 al bloque 1800 al bloque 1745. En el bloque 1800, para cada productor instanciado, los siguientes bloques 1810-1830 se llevan a cabo.
45 En el bloque 1810, se determina si el productor cumple con los criterios de la suscripción. Si es as�, el control pasa al bloque 1815, de lo contrario, el control pasa al bloque 1830, donde el flujo termina para el productor que se est� procesando. Con referencia a las realizaciones de la invención que se muestran en las figuras 11C y 14A, el grafo(s) del productor se accede a determinar si se incluyen los productores que cumplen los criterios de la suscripción.
La manera de procesar un productor coincidente depende del tipo de suscripción que se est� procesando. Con referencia al bloque 1815, si la suscripción es del tipo de absorción, el control pasa al bloque 1825, de lo contrario, el control pasa al bloque 1820. El bloque 1815 se realiza sensible al tipo de llamada de la tabla 2.
En el bloque 1825, el productor coincidente se añade en el registro de suscripción y el productor con la suscripción
55 de la absorción est� relacionado con el productor correspondiente. Desde el bloque 1825, el control pasa al bloque 1830. Con referencia a las realizaciones de la invención mostradas en las figuras 11C y 14A-B, se realiza lo siguiente: 1) los criterios de suscripción a partir de los criterios de suscripción para la columna de los productores de activación 1410 se utiliza en el bloque 1810 y un productor coincidente fue localizado (por ejemplo, uno de los productores 1460A-N), 2) el productor coincidente se agrega a la columna del productor coincidente 1415 en la fila de la suscripción, y 3) el productor con la suscripción de absorción (por ejemplo, el productor 1450) est� vinculado al productor coincidente (por ejemplo, uno de los productores 1460A-N) en la estructura del grafo(s) de productor de la figura 11C.
En el bloque 1820, un nuevo comando del productor se invoca para el productor padre que se va a crear. Desde el
65 bloque 1820, el control pasa al bloque 1830 donde el diagrama de flujo termina para el productor actual seleccionado en el bloque 1800. Con referencia a las realizaciones de la invención que se muestran en las figuras 14A y 14C, se realiza lo siguiente: 1) los criterios de suscripción de los criterios de suscripción para la columna de los productores de activación 1410 se utilizó en el bloque 1810 y un productor coincidente fue localizado (por ejemplo, el productor 1475), y 2) un nuevo comando del productor se invoca con los parámetros de la tabla 2 ajustados como los siguientes: a) tipo de llamada es adherente, b) el productor de llamada es la clave del productor
5 del productor descendiente de llamada (por ejemplo, el productor 1475); c) productor llamado es la clave del productor del productor padre llamado a crear (por ejemplo, el productor 1480), estando formada la clave del productor usando la clase padre, y la clave del método a partir de los criterios de suscripción adherentes para el productor padre a crear (figura 14A, columnas1425 y 1430) y la clave de instancia del productor hijo de llamada; y d) el modo de enlace para el productor padre llamado, el modo de enlace formado utilizando el ID de argumento de la columna del ID de argumento del padre 1425 a la fila apropiada.
La figura 19 es un diagrama de flujo para el bloque 1630 de la figura 16 de acuerdo con una realización de la invención. Por lo tanto, el control fluye del bloque 1625 al bloque 1900 al bloque 1630. La figura 19 es muy similar a la figura 18. En concreto, los bloques 1910, 1915, 1920 y 1930 de la figura 19 son idénticos a los bloques 1810,
15 1815, 1820 y 1830, mientras que los bloques 1900 y 1925 difieren de los bloques 1800 y 1825. Como tal, sólo la diferencia se describir� aquí.
El bloque 1900 indica que el flujo se realiza para cada suscripción registrada, mientras que el bloque 1800 indica que el flujo se realiza para cada productor de instancia. As� pues, cuando el flujo de la figura 18 se centra en una sola suscripción y escanea todos los productores, el flujo de la figura 19 se centra en un solo productor y escanea todas las suscripciones.
El bloque 1925 es el mismo que el bloque 1825, con la excepción de que la suscripción absorbente est� marcada como incompleta. Con referencia a la realización de la invención mostrada en la figura 14A, la columna completada
25 1420 en la fila correspondiente se actualiza para indicar que es incompleta.
La figura 20 es un diagrama de flujo para los bloques 1635 y 1670 de la figura 16 de acuerdo con una realización de la invención. Por lo tanto, el control fluye del bloque 1605 y el bloque 1630 al bloque 2005 en los bloques 1635 y 1670. En el bloque 2005, se determina si esta iteración del diagrama de flujo de la figura 16 se invoca debido a una dependencia (por ejemplo, desde el bloque 1630 (bloque 1920) o 1650 (bloques 1720, 1750 � 1745/1820) de una iteración anterior). Si no, el control pasa al bloque 1640 � 1675 dependiendo de dónde el flujo se ha introducido (desde el bloque 1630 � 1605).
En el bloque 2010, se determina si el flujo fue llamado, debido a una suscripción adherente o situación declarada
35 ascendente sin suscripción. Si no es as�, el control pasa al bloque 2015, de lo contrario, el control pasa al bloque 2020. El bloque 2010 se realiza mediante la verificación del parámetro del tipo de llamada de la Tabla 2 (es decir, si el tipo de llamada es de suscripción adherente o sin suscripción ascendente declarada o no). Con referencia a las realizaciones de la invención que se muestran en las figuras 18 y 19, si el nuevo comando del productor se invoca desde los bloques 1820 � 1920.
En el bloque 2020, el productor padre actual est� vinculado al productor descendiente llamante. Con referencia a las realizaciones de la invención mostradas en las figuras 11C y 14C, el productor padre llamado (por ejemplo, el productor 1480) identificado por el parámetro desde la columna del productor llamado de la tabla 2 est� relacionado en el grafo(s) del productor de la estructura de la figura 11C al productor descendiente que llama (por ejemplo, el
45 productor 1475) identificado por el parámetro de la columna del productor llamado de la tabla 2, utilizando el modo de enlace identificado por el parámetro del modo de enlace de la tabla 2.
En el bloque 2015, el productor padre llamante est� relacionado con el productor descendiente llamado actual. Con referencia a la realización de la invención mostrada en la figura 11C, el productor padre llamante identificado por el parámetro de la columna del productor llamante de la tabla 2 est� relacionado en el grafo(s) del productor de la estructura de la figura 11C para el productor descendiente llamado identificado por el parámetro de la columna del productor llamado de la tabla 2. Desde los bloques 2015 y 2020, el control pasa al bloque 1640 � 1675 dependiendo de dónde se ha introducido el flujo (desde el bloque 1605 � 1630).
55 La figura 21A es un diagrama de flujo para anular los productores de acuerdo con una realización de la invención. Con referencia a la figura 10, el flujo de la figura 21A se lleva a cabo por el módulo del productor anulado 1045 (o, tal como se ha descrito con referencia a realizaciones alternativas respecto a la figura 10, el módulo maneja la anulación y la anulación inversa).
En respuesta a un comando de anulación del productor (bloque 2110), el control pasa al bloque 2120. En el bloque 2120, un nuevo comando del productor se invoca para el productor identificado por el comando del productor de anulación y pasa el control al bloque 2130. El bloque 2120 se lleva a cabo en una realización de la invención en caso de que el productor sea anulado aún no haya creado una instancia, as� como para marcar el productor como no ejecutado (bloque 1640 � 1680) y registrarlo en el registro de inicio de ejecución (bloque 1665). Una realización
65 alternativa de la invención que no permite la anulación de un productor que aún no est� instanciadono sería realizar el bloque 2120.
En el bloque 2130, la salida en el cach� de salida del productor (como en la instancia, si un campo) se establece y el productor est� marcado como anulado.
5 La figura 21B es un diagrama de flujo para la anulación de los modos de ejecución de productor de acuerdo con una realización de la invención. Con referencia a la figura 10, el flujo de la figura 21B se lleva a cabo por el módulo de paralelizaci�n 1076 (o, como se ha descrito con referencia a realizaciones alternativas con respecto a la figura 10, el módulo que se ocupa de la paralelizaci�n).
En respuesta a un comando de anulación del modo de ejecución (bloque 2150), el control pasa al bloque 2155. En el bloque 2155, el ajuste del modo de ejecución productor se anula en la estructura de grafos de productor 1060.
La Figura 21C es un diagrama de flujo para la anulación de los modos de ejecución de productores de acuerdo con una realización de la invención. Con referencia a la figura 10, el flujo de la figura 21C se lleva a cabo por el módulo
15 de paralelizaci�n 1076 (o, como se ha descrito con referencia a realizaciones alternativas con respecto a la figura 10, el módulo que se ocupa de la paralelizaci�n).
En respuesta a un comando de anulación del modo de ejecución de entorno de ejecución (bloque 2160), el control pasa al bloque 2165. En el bloque 2165, el ajuste del modo de ejecución del productor se anula globalmente en la estructura de ajuste de entorno de ejecución 1048.
La Figura 21D es un diagrama de flujo para la anulación de los modos de ejecución de productores de acuerdo con una realización de la invención. Con referencia a la figura 10, el flujo de la figura 21D se lleva a cabo por el módulo de paralelizaci�n 1076 (o, como se ha descrito con referencia a realizaciones alternativas con respecto a la figura
25 10, el módulo que se ocupa de la paralelizaci�n).
En respuesta a un comando de anulación de productor de la estructura de decisión configurable del modo de ejecución (bloque 2170), el control pasa al bloque 2175. En el bloque 2175, el ajuste del modo de ejecución del productor se anula globalmente en la estructura de decisión configurable de productores base sobre una clase base, un método base, una instancia base, o una combinación de cualquiera de las anteriores.
Comandos de ejecución globales
La figura 22A es una parte de un diagrama de flujo para la ejecución del grafo(s)del productor actual de acuerdo con
35 una realización de la invención, mientras que la figura 22B es otra parte de un diagrama de flujo para la ejecución del grafo(s) del productor actual de acuerdo con una realización de la invención. Con referencia a la figura 10, el flujo de la figura 22 se lleva a cabo mediante el módulo de ejecución del grafo de productor 1070.
En respuesta a un comando de ejecución global, el bloque 2200 muestra que un conjunto de productores candidatos se selecciona para ser ejecutados sobre la base de los productores en el registro de inicio de ejecución y el control pasa al bloque 2205. En una realización de la invención, los productores anulados est�n marcados como no ejecutados y su ejecución devuelve su resultado anulado (en oposición a causar que su método sea ejecutado), el conjunto actual de los productores candidatos son los productores en el registro de inicio de ejecución. Aunque una realización de la invención se ha descrito anteriormente en la que los productores anulados est�n marcados como
45 no ejecutados y su ejecución devuelve su resultado anulado (en oposición a causar que su método sea ejecutado), realizaciones alternativas pueden operar de forma diferente (por ejemplo, marcar los productores reemplazados como ejecutados y a la hora de seleccionar el conjunto actual de los productores candidatos, se seleccionan los productores independientes del registro de inicio de ejecución y los padres de los productores anulados en el registro de inicio de ejecución).
En el bloque 2205, un subconjunto de productores listos para su ejecución se selecciona del conjunto de los productores candidatos y el control pasa al bloque 2207. Una forma de ejemplo de realización del bloque 2205 se describe más adelante en este documento.
55 En el bloque 2207, los productores en el conjunto de productores listos correspondiente se ejecutan con paralelizaci�n si esta se encuentra habilitada. Una forma ejemplar de la realización de bloque 2207 se describe más adelante en este documento. El control después pasa del bloque 2207 al bloque 2208.
En el bloque 2208, una tarea es leída y retirada de las colas de tareas de resultado de los modos de ejecución soportados. En los ejemplos presentes, las colas de tareas de resultado incluyen MP_RESULT_TASK_QUEUE, MT_RESULT_TASK_QUEUE y LOCAL_RESULT_TASK_QUEUE. Desde el bloque 2208, el control pasa al bloque 2209.
En el bloque 2209, el entorno de ejecución determina si el post-tratamiento de los productores tiene que ser saltado.
65 Si la evaluación comparativa est� habilitada, los productores pueden ser ejecutados a nivel local, as� como también multiprocesados. Por lo tanto, el post-tratamiento de los productores se salta después de la ejecución local. Más detalles de la evaluación comparativa se discuten a continuación. Volviendo a la Figura 22A, si el post-tratamiento tiene que ser saltado, entonces el control pasa al bloque 2248 de la figura 22B. De lo contrario, el control pasa al bloque 2210.
5 En el bloque 2210, los productores del conjunto actual de los productores listos se ordenan por tipo -productores estándar vanal bloque 2220y los productores de determinación de la dependencia van al bloque 2235. En una realización de la invención, el bloque 2210 se realiza comprobando la clase de retorno del productor. Con referencia a las figuras 10 y 11D, se accede a la estructura de seguimiento del método para determinar si la clase de salida del productor es DEP, y por lo tanto, este productor es un productor de determinación de la dependencia.
En el bloque 2220, para esos padres, si los hay, que tienen una suscripción absorbente en cualquiera de estos productores ejecutados estándar, la suscripción se marca como incompleta. Con referencia a la figura 14A, la fila correspondiente de la columna completada 1420 se establece para indicar incompleta.
15 En el bloque 2235, un nuevo comando del productor es ejecutado por los productores descubiertos, y el registro de inscripción y se realiza el procesamiento de cualquiera delas suscripciones, entonces el control pasa al bloque 2240. La parte de comando del nuevo productor del bloque 2235 se realiza de forma similar al bloque 1750, mientras que el registro de suscripción y el procesamiento se realiza de manera similar a los bloques 1740 y 1745.
En el bloque 2240, se añade el conjunto de los productores de candidatos añadidos de nuevo en el registro de inicio de ejecución. Desde el bloque 2240, el control pasa al bloque 2245. El bloque 2240 se realiza de manera similar al bloque 2200, excepto los únicos productores recién añadidos en el registro de inicio de ejecución como resultado de que el bloque 2235 se añaden al conjunto de los productores candidatos.
25 En el bloque 2245, los productores que se han ejecutado se marcan como ejecutados, el cach� de resultados de producción (y el almacenamiento en cach� de instancia) se actualizan cuando sea necesario, las métricas de productores (si han sido adquiridas) se actualizan en la estructura de grafo de productor 1060 en la figura 10, cualquiera de los productores padre de los productores que se han ejecutado se añaden al conjunto actual de los productores candidatos, y los productores que fueron ejecutados se retiran del conjunto actual de candidatos y los productores listos. En algunas realizaciones, las métricas de productores pueden ser actualizadas mediante la lectura de las métricas de tareas y la referencia de trabajo correspondiente. Usando la referencia de trabajo, las métricas del trabajo se pueden leer de un mapa de métricas de trabajo. Por otra parte, las métricas pueden ser actualizadas mediante la lectura de las métricas de tarea y las métricas de trabajo en el caso de que el mapa de métricas de trabajo no se utilice. Más detalles de las métricas de tarea, las métricas de trabajo y el mapa de métricas
35 de trabajo se discuten a continuación. Desde el bloque 2245, el control pasa al bloque 2248.
En el bloque 2248, las colas de tareas de resultado se comprueban para determinar si se encuentran vacías. Si al menos una de las colas de tareas de resultado no se encuentra vacía, entonces el control pasa al bloque 2208 para continuar proces�ndolos resultados en las colas de tareas de resultado no vacía(s). De lo contrario, si todas las colas de tareas de resultado se encuentran vacías, entonces el control pasa al bloque 2250.
En el bloque 2250, se determina si el conjunto de los productores listosest� vacío. Si no, el control retorna al bloque 2205, de lo contrario, el control pasa al bloque 2255.
En el bloque 2255, se determina que todas las suscripciones se han completado. Si es as�, el control pasa al bloque
45 2265 donde el diagrama de flujo termina, de lo contrario, el control pasa al bloque 2260. Con referencia a la realización de la invención en la figura 14A, la columna del tipo de suscripción 1405 y la columna completa 1420 se escanean para cualquier suscripción absorbente que no est� terminada.
En el bloque 2260, las suscripciones incompletas absorbentes son procesadas y el control pasa de nuevo al bloque 2205. Una forma de ejemplo de realización del bloque 2260 se describe más adelante en este documento.
La figura 23 es un diagrama de flujo para el bloque 2205 de la figura 22 de acuerdo con una realización de la invención. Por lo tanto, el control fluye del bloque 2200 al bloque 2305 en el bloque 2205. En el bloque 2305, para cada productor en el conjunto de los productores candidatos, los siguientes bloques 2310-2325 se llevan a cabo.
55 En el bloque 2310, se determina si el productor tiene ninguna dependencia de suscripción absorbente que es incompleta. Si es as�, el control pasa al bloque 2325, de lo contrario, el control pasa al bloque 2315. Con referencia a la realización de la figura 14A, la columna de la clave del productor del suscriptor 1400 y la columna del tipo de suscripción 1405 se analizan para una coincidencia para el productor actualmente seleccionado y el tipo de suscripción de absorción, y si se encuentra una coincidencia, la columna completada 1420 en la fila correspondiente se comprueba para determinar el estado de esa dependencia de suscripción absorbente.
En el bloque 2315, se determina si se ejecutan los productores en los que depende el productor seleccionado. Si no es as�, el control pasa al bloque 2325, de lo contrario, el control pasa al bloque 2320. Respecto a la realización de la
65 invención que se muestra en la figura 11C, la columna de marcas de ejecución incrementales 1180 para las filas de las dependencias descendientes se comprueban para determinar el estado de ejecución de los descendientes del productor seleccionado actualmente.
En el bloque 2320, el productor candidato actualmente seleccionado se añade al conjunto actual de los productores 5 listos y el control pasa al bloque 2325.
En el bloque 2325, el flujo termina para el productor actual seleccionado en el bloque 2305.
La figura 24 es un diagrama de flujo del bloque 2260 de la figura 22B de acuerdo con una realización de la invención. As�, el control fluye desde el bloque 2255 al bloque 2505 en el bloque 2260. En el bloque 2505, para cada productor con una dependencia de absorción de suscripción incompleta, los siguientes bloques 2510-2525 se realizan.
En el bloque 2510, se determina si todos los productores coincidentes han sido ejecutados. Si es as�, el control pasa
15 al bloque 2515, de lo contrario, el control pasa al bloque 2525. Con referencia a las realizaciones de las figuras 11C y 14A, se accede a la columna de productores coincidente 1415 en la fila correspondiente para determinar los productores de comparación, y la columna de ejecución incremental 1180 en las filas apropiadas se comprueba para cada uno de los productores coincidentes.
En el bloque 2515, la suscripción absorbente est� marcada como completa y el control pasa al bloque 2520. Con referencia a las realizaciones de la figura 14A, la columna completa 1420 en la fila correspondiente se establece para indicar completa.
En el bloque 2520, el productor seleccionado en el bloque 2505 se añade al conjunto actual de los productores 25 candidatos y el control pasa al bloque 2525.
En el bloque 2525, el flujo termina para el productor seleccionado en el bloque 2505.
Las figuras 25 y 26 son diagramas de flujo para el bloque 2207 de la figura 22 de acuerdo con una realización de la invención. Por lo tanto, el control fluye desde el bloque 2205 al bloque 2610 en la figura 25. En el bloque 2610, se lleva a cabo la instanciaci�n de varias colas de tareas para multiprocesamiento, multithilo y ejecución local y un trabajo de multiprocesamiento. Un ejemplo acerca de la ejecución del bloque 2610 se describe más adelante en este documento. Desde el bloque 2610, el control pasa al bloque 2620.
35 En el bloque 2620, el conjunto de productores listos se escanea para procesar los productores uno por uno. Desde el bloque 2620, el control pasa al bloque 2622.
En el bloque 2622, un modo de ejecución de un productor es leído desde una estructura de grafos de productores,
tales como la estructura de grafo de la figura 11C. A continuación, el control pasa al bloque 2625.
En el bloque 2625, se crea una tarea que hace referencia al productor y a la salida de éste. Desde el bloque 2625, el control pasa al bloque 2630.
En el bloque 2630, se determina el modo de ejecución en el que se debe ejecutar el productor. En algunas
45 realizaciones, hay tres modos de ejecución soportados, multiprocesamiento, multihilo y ejecución local. Si se determina el modo de ejecución de ejecución local, el control pasa al bloque 2632. Si se determina el modo de ejecución multi-hilo, el control pasa al bloque 2634. Si se determina el modo de ejecución multiproceso, el control pasa al bloque 2635.
En el bloque 2632, la tarea del productor se introduce en la cola de tareas de ejecución para la ejecución local, es decir, LOCAL_EXECUTION_TASK_QUEUE. A continuación, el control pasa al bloque 2640.
En el bloque 2634, la tarea del productor se introduce en la cola de tareas de ejecución de multi-hilos, es decir,MT_EXECUTION_TASK_QUEUE. Luego el control pasa al bloque 2640.
55 En el bloque 2670, se determina si el tamaño actual de MT_RESULT_TASK_QUEUE es igual al tamaño inicial de MT_EXECUTION_TASK_QUEUE. Si no, el control se mantiene en el bloque 2670 porque el procesamiento multihilo aún no ha sido completado en todas las tareas de MT_EXECUTION_TASK_QUEUE. De lo contrario, el control pasa del bloque 2670 al bloque 2690 y el proceso en el bloque 2207 se termina. Aunque multihilo, multiprocesamiento, y ejecución local se realizan de forma secuencial en el flujo de ejemplo descrito anteriormente, se debe apreciar que cualquier combinación de multi-hilos, multiprocesamiento, y local de ejecución se puede realizar en paralelo en algunas realizaciones alternativas.
Las figuras 27A y 27B son diagramas de flujo para el bloque 2610 de la figura 26 de acuerdo con una realización de
65 la invención. Por lo tanto, los flujos de control entre el bloque 2205 al bloque 2710 se reflejan en la figura 27A. En el bloque 2710, se determina si MT_RESULT_TASK_QUEUE es instanciado. Si es as�, entonces MT_RESULT_TASK_QUEUE es limpiada en el bloque 2715. De lo contrario, MT_RESULT_TASK_QUEUE es instanciada en el bloque 2713. A continuación, el control pasa del bloque 2713 o el 2715 al bloque 2720.
En el bloque 2720, se determina si MT_EXECUTION_TASK_QUEUE es instanciada. Si es as�, entonces MT_EJECUCIÓN _TASK_QUEUE es vaciada en el bloque 2725. De lo contrario, MT_ EJECUCIÓN _TASK_QUEUE es instanciada en el bloque 2723. A continuación, el control pasa del bloque 2723 o el 2725 al bloque 2730.
En el bloque 2730, se determina si MP_RESULT_TASK_QUEUE es instanciada. Si es as�, entonces MP_RESULT_TASK_QUEUE es liampiada en el bloque 2735. De lo contrario, MP_RESULT_TASK_QUEUE es instanciada en el bloque 2733. A continuación, el control pasa del bloque 2733 o el 2735 al bloque 2740.
En el bloque 2740, se determina si MP_EXECUTION_TASK_QUEUE es instanciada. Si es as�, entonces MP_ EJECUCIÓN _TASK_QUEUE es limpiada en el bloque 2745. De lo contrario, MP_ EJECUCIÓN _TASK_QUEUE es instanciada en el bloque 2743. A continuación, el control pasa del bloque 2743 o el 2745 al bloque 2750 en la figura 27B.
En el bloque 2750, se determina si LOCAL_RESULT_TASK_QUEUE es instanciada. Si es as�, entonces _RESULT_TASK_QUEUE LOCAL es limpiada en el bloque 2755. De lo contrario, LOCAL_RESULT_TASK_QUEUE es instanciada en el bloque 2753. A continuación, el control pasa del bloque 2753 o el 2755 al bloque 2760.
En el bloque 2760, se determina si LOCAL_EXECUTION_TASK_QUEUE es instanciada. Si es as�, entonces _TASK_QUEUE LOCAL_EXECUTION es limpiada en el bloque 2765. De lo contrario, LOCAL_EXECUTION _TASK_QUEUE es instanciada en el bloque 2763. A continuación, el control pasa del bloque 2763 o el 2765 al bloque 2620.
La Figura 28A es un diagrama de flujo para un proceso para llevar a cabo el procesamiento multihilo de acuerdo con una realización de la invención. Como se mencion� anteriormente, un hilo separado es instanciado en el bloque 2650 de la figura 26 para realizar el procesamiento de multi-hilo.
En el bloque 2820, se determina si MT_EXECUTION_TASK_QUEUE est� vacía. Si el MT_EXECUTION_TASK_QUEUE est� vacía, es decir todas las tareas en MT_EXECUTION_TASK_QUEUE han recibido el subproceso de ejecución correspondiente, entonces el proceso termina. De lo contrario, hay al menos una tarea para ser alimentada por un hilo de ejecución, entonces el control pasa al bloque 2825 para determinar si hay algún hilo disponible en el grupo de hilos. Si no hay hilos disponible en el grupo, el control se mantiene en el bloque 2825 hasta que haya un hilo disponible. Cuando hay un hilo disponible, el control pasa al bloque 2830.
En el bloque 2830, una tarea es eliminada de MT_EXECUTION_TASK_QUEUE y es procesada por el hilo disponible. A continuación, el control pasa al bloque 2820 para repetir los bloques 2820, 2825 y 2830 hasta que todas las tareas sean eliminadas de MT_EXECUTION_TASK_QUEUE. Se debe tener en cuenta que el proceso en los bloques 2820, 2825, y 2830 puede ser realizado por un hilo instanciado con el fin de evitar el bloqueo del resto del flujo.
La Figura 28B es un diagrama de flujo que ilustra la ejecución de una tarea dentro de un hilo con la adquisición opcional de métricas. Si se solicita la instrumentaci�n, el entorno de ejecución comienza de medir el tiempo de ejecución de tareas en el bloque 2810. De lo contrario, el bloque 2810 es saltado. Desde el bloque 2810, el control pasa al bloque 2831. En el bloque 2831, una tarea dentro de un hilo se ejecuta mediante una llamada al método de la tarea con la instancia y las entradas apropiadas. Cuando se lleva a cabo la ejecución de la tarea, las salidas y / o la instancia modificada son retornadas por el método y el hilo se termina. Desde el bloque 2831, el control pasa al bloque 2815. Si se solicita la instrumentaci�n, el entorno de ejecución termina midiendo el tiempo de ejecución de la tarea en el bloque 2815. De lo contrario, el bloque 2815 es saltado.
La figura 28C es un diagrama de flujo para un proceso de respuesta a una retro llamada de terminación de hilo de acuerdo con una realización de la invención. En el bloque 2832, se recibe una retro llamada de terminación de hilo.
En el bloque 2834, la salida de la tarea dentro del subproceso finalizado y las métricas adquiridas (tales como el tiempo de ejecución de la tarea), en el caso de haber alguna, se almacena en la tarea ejecutada por el hilo terminado y la tarea con la salida y el métricas adquiridas, en caso de haber alguna, es empujada hacia el MT_RESULT_TASK_QUEUE. A continuación, el control pasa al bloque 2836. En el bloque 2836, el hilo terminado se marca como disponible en el grupo de subprocesos.
Las figuras 29A y 29B son diagramas de flujo para el bloque 2660 de la figura 26 de acuerdo con una realización de la invención. Por lo tanto, el control fluye desde el bloque 2650 al bloque 2910 en la figura 29A. Se debe tener en cuenta que los bloques que son ejecutados para la instrumentaci�n, pero no son utilizados para implementar la paralelizaci�n de la ejecución del productor, se ilustran con bloques que tienen límites de trazos rotos en las figuras 29A y 29B.
En el bloque 2910, se comprueba si MP_EXECUTION_TASK_QUEUE est� vacía. SiMP_EXECUTION_TASK_QUEUE est� vacía, no hay tareas para ser multiprocesadas y, por tanto, el control pasa al bloque 2670. De lo contrario, el control pasa al bloque 2915.
En el bloque 2915, un trabajo es instanciado y un identificador (ID) se asigna al trabajo. Por otra parte, un TASKS_LOCAL_MAP también es instanciado en el bloque 2915. A continuación, el control pasa al bloque 2918. Si se solicita la instrumentaci�n, el bloque 2918 es ejecutado para comenzar a medir el tiempo total de trabajo. De lo contrario, el bloque 2918 es saltado. A continuación, el control pasa al bloque 2920.
En el bloque 2920, una tarea es leída y removida del MP_EXECUTION_TASK_QUEUE. Después, el control pasa al bloque 2921. Si se solicita la instrumentaci�n, el bloque 2921 se ejecuta para comenzar a medir el tiempo total de trabajo. De lo contrario, el bloque 2921 es saltado. A continuación, el control pasa al bloque 2923.
En el bloque 2923, un identificador único de tarea (ID) es asignado a la tarea y se almacena con la referencia aTASKS_LOCAL_MAP. El control pasa al bloque 2925 para instanciar una tarea serializada y llenarla con el ID de la tarea, un nombre de clase, y un nombre de método del productor correspondiente a la tarea. A continuación, el control pasa al bloque 2930.
En el bloque 2930, una forma serializada de cada uno de los productores de entrada y la instancia subyacente es encontrada si ya ha sido creada. Alternativamente, si una forma serializada no ha sido creada, se crea en el bloque 2930. Un ejemplo para llevar a cabo el bloque 2930 se discute en este documento. Desde el bloque 2930, el control pasa al bloque 2960.
En el bloque 2960, la tarea de forma serializada se añade a la cola de trabajos de tareas serializadas, es decir, JOB_SERIALIZED_TASKS_EXECUTION_QUEUE. A continuación, el control pasa al bloque 2965.
En el bloque 2965, se determina si MP_EXECUTION_TASK_QUEUE est� vacía. Si MP_EXECUTION_TASK_QUEUE no est� vacía, el control pasa al bloque 2920 para continuar con el tratamiento de las tareas pendientes en MP_EXECUTION_TASK_QUEUE. De lo contrario, el control pasa al bloque 2970.
En el bloque 2970, el trabajo se envía al grid a un número de procesadores distantes. El grid de procesadores realiza el procesamiento distante para ejecutar el trabajo. Los detalles de un flujo de ejemplo del procesamiento distante se discuten en este documento. A continuación, el control pasa al bloque 2972 para llevar a cabo la ejecución local. Desde el bloque 2972, el control pasa al bloque 2973.
En el bloque 2973, se determina si el trabajo se ha terminado. Si no es as�, el control permanece en el bloque 2973 hasta que se termine el trabajo. Cuando el trabajo se termina, el control pasa al bloque 2975 en la figura 29B.
Con referencia a la figura 29B, el tiempo de procesamiento de trabajo local virtual se ajusta a cero en el bloque 2975. De acuerdo con un aspecto de la invención, el tiempo de procesamiento de trabajo local virtual es el tiempo que se han tomado todas las tareas del trabajo en ser ejecutadas localmente. Desde el bloque 2975, el control pasa al bloque 2977.
En el bloque 2977, una tarea es leída y eliminada de la cola de resultado del trabajo serializado, es decir, JOB.SERIALIZED_TASKS_RESULTS_QUEUE. A continuación se pasa el control al bloque 2979 para encontrar la referencia de tarea utilizando el ID de tarea almacenada en el TASKS_LOCAL_MAP. A continuación el control pasa al bloque 2980.
Si la instrumentaci�n es requerida, el bloque 2980 se lleva a cabo para determinar el tamaño de la forma serializada de la salida y para comenzar a medir el tiempo de deserializaci�n de la salida. De lo contrario, el bloque 2980 es saltado y el control pasa al bloque 2981. En el bloque 2981, la salida en la salida de tarea se deserializa. Desde el bloque 2981, el control pasa al bloque 2982. Una vez más, si se solicita la instrumentaci�n, el bloque 2982 se ejecuta para terminar la medición del tiempo de deserializaci�n local. Además, si se solicita la instrumentaci�n, los bloques 2984, 2985, 2957 y 1989 pueden ser ejecutados. De lo contrario, estos bloques ser�n saltados y el control pasa desde el bloque 2981 al bloque 2990.
En el bloque 2984, el entorno de ejecución termina la medición del tiempo total de la tarea y luego elimina el tiempo de ejecución local del tiempo total de la tarea. Desde el bloque 2984, el control pasa al bloque 2985.
En el bloque 2985, se determina si la evaluación comparativa ha sido solicitada. En el caso de que la evaluación comparativa haya sido solicitada, el control pasa al bloque 2987 y luego al bloque 2989. De lo contrario, el control pasa al bloque 2989 desde el bloque 2985 para saltar el bloque 2987.
Como se discutió anteriormente con referencia a las figuras 25 y 26, la evaluación comparativa se solicita para comparar los tiempos de ejecución local y distante. Por lo tanto, una tarea se ejecuta tanto de manera local como distante utilizando multiprocesamiento si la evaluación comparativa ha sido solicitada de acuerdo con una realización de la invención. Por lo tanto, si la evaluación comparativa ha sido solicitada, el entorno de ejecución puede encontrar una tarea correspondiente en LOCAL_RESULT_TASK_QUEUE en el bloque 2987. Además, el entorno de ejecución puede añadir el tiempo de procesamiento local almacenado en la tarea al tiempo de procesamiento local virtual. Como tal, el tiempo de procesamiento local virtual es igual a la suma de los tiempos de procesamientos local de todas las tareas en el trabajo cuando todas las tareas han sido ejecutadas. Del bloque 2987, el control pasa al bloque 2989.
En el bloque 2989, las métricas de tarea, tales como el tiempo total de la tarea, junto con el ID de la tarea se añaden a ésta. A continuación el flujo pasa al bloque 2990. Se debe tener en cuenta que los dos bloques 2987 y 2989 se llevan a cabo si la evaluación comparativa es solicitada. De lo contrario, los dos bloques 2987 y 2989 pueden ser saltados.
En el bloque 2990, la tarea es empujada en MP_RESULT_TASK_QUEUE. A continuación el control pasa al bloque 2991. En el bloque 2991, se determina si JOB_SERIALIZED_TASKS_RESULTS_QUEUE est� vacía. Si no es as�, el control regresa al bloque 2977 para seguir leyendo las tareas de la cola y deserializar las salidas. De lo contrario, el control pasa al bloque 2992 si se solicita la instrumentaci�n. Si no se solicita la instrumentaci�n, el control pasa del bloque 2991 al bloque 2670 en la figura 26B.
Si se solicita la instrumentaci�n, los bloques 2992, 2993, 2995, 2996 y 2997 se pueden llevar a cabo. De lo contrario, los estos bloques se pueden ser saltados. En el bloque 2992, la medición del tiempo total del trabajo se termina y el tiempo de ejecución local es retirado del tiempo total del trabajo. Del bloque 2992, el control pasa al bloque 2993.
En el bloque 2993, se determina si se solicita la evaluación comparativa. De ser afirmativo, el control pasa al bloque 2995. En el bloque 2995, el aumento de la velocidad de procesamiento del trabajo es calculado dividiendo el tiempo de ejecución local virtual del trabajo con el tiempo total del trabajo. A continuación el control pasa del bloque 2995 al bloque 2996. En el bloque 2996, la eficiencia es calculada dividiendo el aumento de la velocidad de procesamiento del trabajo con el número de procesadores disponibles y dedicados a la ejecución del trabajo en el grid. Del bloque 2996, el control pasa al bloque 2997. De lo contrario, si no se solicita la evaluación comparativa, el control pasa del bloque 2993 al bloque 2997 directamente.
En el bloque 2997, las métricas del trabajo (por ejemplo, el aumento de la velocidad de procesamiento del trabajo, el tiempo total del trabajo, etc.) se añaden para cada tarea en el trabajo. Desde el bloque 2997, el flujo pasa al bloque 2670 en la figura 26B.
La figura 30 muestra un diagrama de flujo para el bloque 2930 de la figura 29A de acuerdo con una realización de la invención. Por lo tanto, el control fluye del bloque 2925 al bloque 3010 en la figura 30. En el bloque 3010, se determina si una forma serializada de un productor de entrada o de la instancia subyacente se han creados ya en el SERIALIZED_FORM_LOCAL_MAP basado en la entrada de la clave del productor o en la clave de instancia. Si ya se ha creado la forma serializada, el control pasa al bloque 3015. Si no es as�, el control pasa al bloque 3020.
En el bloque 3015, el ID de forma serializada y la forma serializada se leen desde el SERIALIZED_FORM_LOCAL_MAP. A continuación el control pasa al bloque 3040.
En el bloque 3020, un identificador de forma serializada est� asignado al productor de entrada o a la instancia subyacente. A continuación el control pasa al bloque 3022.
En el bloque 3022, se inicia la medición del tiempo de serializaci�n local. A continuación el control pasa al bloque 3024.
En el bloque 3024, una forma serializada es creada para el productor de entrada o la instancia subyacente. A continuación el control pasa al bloque 3026.
En el bloque 3026, se termina la medición del tiempo local de serializaci�n. A continuación el control pasa al bloque 3028.
En el bloque 3028, se determina el tamaño de la forma serializada de entrada. A continuación el control pasa al bloque 3030.
En el bloque 3030, la clave del productor de entrada o la clave de la instancia subyacente, el ID de forma serializada, y la forma serializada se almacenan en el SERIALIZED_FORM_LOCAL_MAP. El SERIALIZED_FORM_LOCAL_MAP puede ser global o asignado y liberado de la forma trabajo por trabajo, en función de diversos factores, tales como los requisitos de memoria, requisitos de desempeño, etc. A continuación, el control pasa al bloque 3034.
En el bloque 3034, el tamaño de la forma serializada de entrada y el tiempo de serializaci�n se almacenan con un ID de la forma serializada en el SERIALIZED_FORM_LOCAL_MAP. A continuación el control pasa al bloque 3040. Se debe tener en cuenta que los bloques 3022, 3026, 3028, y 3034 descritos anteriormente se llevan a cabo si se solicita la instrumentaci�n. Estos bloques pueden ser saltados si no se solicita la instrumentaci�n.
En el bloque 3040, se determina si el ID de la forma serializada est� en el JOB_SERIALIZED_FORMS_MAP. Si es as�, el control pasa al bloque 3045. De lo contrario, el control pasa al bloque 3043.
En el bloque 3043, el ID de la forma serializada y la forma serializada son almacenadas en el JOB_SERIALIZED_FORMS_MAP. A continuación el control pasa al bloque 3045.
En el bloque 3045, el ID de la forma serializada se añada como una entrada o como una instancia subyacente a la forma de tarea serializada. Desde el bloque 3045, el control pasa al bloque 3050.
En el bloque 3050, se determina si hay más productores de entradas que no han sido procesados o si la instancia subyacente no ha sido procesada. En caso afirmativo, el control retorna al bloque 3010. De lo contrario, el control pasa al bloque 2960 en la figura 29A.
Las figuras 31A y 31B muestran diagramas de flujo de computación a distancia para multiprocesamiento de acuerdo con una realización de la invención. Una vez más, los bloques ilustrados con las líneas de trazos divisorias se llevan a cabo si se solicita la instrumentaci�n y se pueden ser saltados si no se solicita la instrumentaci�n. Como se discutió anteriormente, un trabajo que incluye un número de tareas correspondientes a los productores se envía a un grid de procesadores para ser ejecutado. Cada procesador en el grid, también denominado como un trabajador, puede almacenar en cach� el JOB_SERIALIZED_FORMS_MAP. Por ejemplo, si un trabajo tiene mil tareas y hay diez trabajadores que ejecutan estas tareas, el JOB_SERIALIZED_FORMS_MAP en enviado una vez por el mo tal, el productor 765 es referido como un prolmacena en cach� a nivel de trabajador. Cuándo el trabajo est� terminado, el despachador de grid envía un comando al trabajador para liberar la cach�. El flujo comienza en el bloque 3108.
En el bloque 3108, el JOB_SERIALIZED_FORMS_MAP y la forma serializada de tarea que incluye los IDs de entrada, el nombre de clase, y el nombre de método se reciben del despachador de grid. A continuación el control pasa al bloque 3110. En el bloque 3110, una clase es encontrada usando el nombre de clase y el nombre de método. La clase y el método se cargan para reconstituir una tarea. A continuación el control pasa al bloque 3112.
En el bloque 3112, un ID de entrada de tarea o el ID de instancia se buscan del JOB_SERIALIZED_FORMS_MAP. A continuación el control pasa al bloque 3120.
En el bloque 3120, se determina si el ID de entrada es encontrado. Si no es as�, el control pasa al bloque 3190 para devolver un error. De lo contrario, el control pasa al bloque 3130.
En el bloque 3130, se determina si la entrada al JOB_SERIALIZED_FORMS_MAP correspondiente al ID de entrada ya se encuentra deserializada. Si ya se deserializo, entonces el control pasa al bloque 3150. De lo contrario, el control pasa al bloque 3132.
En el bloque 3150, se extrae la forma deserializada de la entrada. A continuación el control pasa al bloque 3155.
En el bloque 3132, se comienza la medición del tiempo de deserializaci�n distante. A continuación el control pasa al bloque 3134 para deserializar la entrada del JOB_SERIALIZED_FORMS_MAP correspondiente al ID de entrada. Desde el bloque 3134, el control pasa al bloque 3136. En el bloque 3136, se termina la medición del tiempo de deserializaci�n distante. A continuación el control pasa al bloque 3138.
En el bloque 3138, la entrada correspondiente en el JOB_SERIALIZED_FORMS_MAP es enriquecida con la forma deserializada. A continuación el control pasa al bloque 3143.
En el bloque 3143, la instancia o la entrada estándar se añaden a la definición de la tarea. A continuación el control pasa al bloque 3155.
En el bloque 3155, se determina si todos los IDs de entrada (es decir, todas las entradas estándar junto con la instancia subyacente) han sido procesados. En otras palabras, se determina si la tarea ha sido completamente reconstruida o deserializada. Si es as�, el control pasa al bloque 3160 en la figura 31B. De lo contrario, el control pasa al bloque 3112 para hacer el procesamiento el siguiente ID.
Con referencia a la figura 31B, la medición del tiempo de procesamiento distante comienza en el bloque 3160. A continuación el control pasa al bloque 3162.
En el bloque 3162, el método con la instancia y las entradas apropiadas es llamado. Como consecuencia de la ejecución, el método puede devolver una salida y/o modificar la instancia del método. El entorno de ejecución recibe la salida de vuelta del método y/o la instancia modificada. El control pasa del bloque 3162 al bloque 3166.
En el bloque 3166, se termina la medición del tiempo de procesamiento distante. A continuación el control pasa al bloque 3170.
En el bloque 3170, se comienza la medición del tiempo de deserializaci�n. A continuación el control pasa al bloque 3172 para serializar la salida devuelta y/o la instancia modificada y adjuntar ésta salida serializada y/o la instancia modificada serializada a la tarea. A continuación el control pasa al bloque 3174. En el bloque 3174, se termina la medición del tiempo serializado distante. Del bloque 3174, el control pasa al bloque 3176.
En el bloque 3176, las métricas (por ejemplo, el tiempo de serializaci�n distante, el tiempo de deserializaci�n distante, etc.) se almacenan en la tarea. A continuación el control pasa al bloque 3180.
En el bloque 3180, la tarea es devuelta al despachador de grid del entorno de ejecución y el flujo se termina. Una vez más, los bloques ilustrados con las líneas de trazos divisorias son llevados a cabo si se solicita la instrumentaci�n y pueden ser saltados si la instrumentaci�n no es solicitada.
La figura 32 muestra un diagrama de flujo para el bloque 2972 de la figura 29A de acuerdo con una realización de la invención. Por lo tanto, el control fluye del bloque 2970 al bloque 3202 en la figura 32. Una vez más, los bloques ilustrados con las líneas de trazos divisorias se llevan a cabo si se solicita la instrumentaci�n y pueden ser saltados si la instrumentaci�n no es solicitada.
En el bloque 3202, la medición del tiempo de ejecución local se comienza. A continuación el control pasa al bloque 3210.
En el bloque 3210, una tarea se elimina de la cola LOCAL_EXECUTION_TASK_QUEUE y se ejecutada localmente llamando al método con la instancia y las entradas apropiadas. Cuando la ejecución se termina, el método devuelve salidas y/o la instancia modificada del método. A continuación el control pasa al bloque 3212.
En el bloque 3212, la medición del tiempo de ejecución local finaliza. A continuación el control pasa al bloque 3220.
En el bloque 3220, la salida de la tarea es almacenada en la misma. A continuación el control pasa al bloque 3223.
En el bloque 3223, las métricas (por ejemplo, el tiempo de ejecución local) también son almacenadas en la tarea. A continuación el control pasa al bloque 3230.
En el bloque 3230, la tarea es empujada en la cola LOCAL_RESULT_TASK_QUEUE. Desde el bloque 3230, el control pasa al bloque 3240.
En el bloque 3240, se determina si la cola LOCAL_EXECUTION_TASK_QUEUE est� vacía. Si la cola est� vacía, entonces el control pasa al bloque 2973 en la figura 29A. De lo contrario, el control retorna al bloque 3203 para repetir el proceso de ejecución de una tarea localmente.
Realizaciones alternativas
Aunque los diagramas de flujo en las figuras muestran un orden particular de las operaciones realizadas por ciertas realizaciones de la invención, debe entenderse que tal orden es de ejemplo (por ejemplo, realizaciones alternativas pueden realizar las operaciones en un orden diferente, combinar ciertas operaciones, superponer ciertas operaciones, etc.).
Aunque la invención ha sido descrita en términos de varias realizaciones, los expertos en la materia reconocerán que la invención no se limita a las realizaciones descritas, ya se puede practicar con modificaciones y alteraciones dentro del alcance de las reivindicaciones adjuntas. La descripción, por lo tanto, debe ser considerada como ilustrativa en lugar de limitativa.
Claims (28)
- REIVINDICACIONES1. Un método implementado por ordenador para ejecutar un programa de aplicación escrito en un código orientado a objetos, comprendiendo el método:instanciar un productor con una salida que es actualmente de interés como parte de un grafo de productor, donde el código orientado a objetos incluye métodos y declaraciones de dependencia del productor, donde la declaración de dependencia del productor para un método determinado es identificar en tiempo de ejecución un conjunto de cero o más productores, donde un productor es una construcción instanciada de tiempo de ejecución, donde cada productor se instancia a partir de una combinación respectiva de una instancia (108) específica de una clase y un método (104) específico de esa clase e identifica dicha instancia específica y dicho método específico, donde la ejecución de un productor da como resultado el método identificado por ese productor que se ejecuta en la instancia identificada por ese productor;intentar generar automáticamente, en respuesta a dicha instancia, un resto del grafo de productor a través de la vinculaci�n, y la instanciaci�n si es necesario, de otros productores en base a las declaraciones de dependencia del productor de los métodos identificados por los productores ya en el grafo de productor; yejecutar los productores en el grafo de productor para determinar la salida actual para el productor de interés,donde dicha ejecución comprendeparalelizar la ejecución de al menos dos de los productores en el grafo de productor, usando un tiempo de ejecución, en base a las dependencias entre los productores en el grafo de productor.
- 2. El método de la reivindicación 1, donde paralelizar la ejecución de los al menos dos de los productores en el grafo de productor comprende:identificar un conjunto de productores listos entre los productores en el grafo de productor;determinar un modo de ejecución de cada productor del conjunto de productores listos;hacer que cada productor del conjunto de productores listos se ejecute en un modo de ejecución correspondiente.
-
- 3.
- El método de la reivindicación 2, donde el modo de ejecución es uno de entre un modo local de ejecución, un modo de multiprocesamiento y un modo multihilo.
-
- 4.
- El método de la reivindicación 2, que comprende además:
crear una tarea para cada productor en el conjunto de los productores listos; yhacer que la tarea se ejecute en el modo de ejecución del productor correspondiente. -
- 5.
- El método de la reivindicación 4, donde la tarea de cada productor del conjunto de productores listos comprende una referencia a un productor correspondiente y una referencia a una salida del productor correspondiente.
-
- 6.
- El método de la reivindicación 2, donde determinar el modo de ejecución de cada productor del conjunto de productores listos comprende:
comprobar un ajuste del modo de ejecución de un método identificado por un productor correspondiente; anular el ajuste del modo de ejecución del productor correspondiente si un usuario final selecciona otro modo de ejecución en al menos una de entre una clase base, un método base y una instancia base;anular el ajuste del modo de ejecución del productor correspondiente en base a un productor por productor si un ajuste del modo de ejecución correspondiente del productor correspondiente se ha cambiado en el grafo de productor; yanular el ajuste del modo de ejecución correspondiente en el grafo de productor con un modo de ejecución predeterminado si el tiempo de ejecución se ha establecido para anular globalmente el modo de ejecución correspondiente con el modo de ejecución predeterminado. - 7. El método de la reivindicación 1, que comprende además:adquirir métricas relacionadas con la ejecución de los productores en el grafo de productor usando el tiempo de ejecución en base a un productor por productor en respuesta a una solicitud de instrumentaci�n, que comprende,medir el tiempo de ejecución de los productores en el grafo de productor en base a un productor por productor.
-
- 8.
- El método de la reivindicación 7, donde adquirir métricas comprende además:
medir el tiempo de ejecución de los productores en el grafo de productor en base a un trabajo, donde un trabajo comprende una pluralidad de productores que deben multiprocesarse. -
- 9.
- El método de la reivindicación 8, donde adquirir métricas comprende además:
evaluar por comparación la ejecución local con la ejecución distante del trabajo en respuesta a una solicitud de evaluación comparativa, que comprende,ejecutar la pluralidad de productores localmente;medir el tiempo de ejecución local de la pluralidad de productores;enviar el trabajo a un grid de procesadores, donde el grid de procesadores ejecuta la pluralidad de productores sustancialmente en paralelo;medir un tiempo de ejecución total del trabajo;comparar el tiempo de ejecución local con el tiempo de ejecución distante total; ymedir el tamaño de los flujos de entrada y el tamaño de los flujos de salida en base a un productor por productor. - 10. Un aparato que comprende:un tiempo de ejecución dispuesto para ejecutar un código orientado a objetos con declaraciones de dependencia del productor para métodos y ajustes del modo de ejecución de los métodos, donde un productor es una construcción instanciada de tiempo de ejecución, donde cada productor se instancia a partir de una combinación respectiva de una instancia (108) específica de una clase y un método (104) específico de esa clase e identifica dicha instancia específica y dicho método específico, donde la ejecución de un productor da como resultado el método identificado por ese productor que se ejecuta en la instancia identificada por ese productor, donde cada declaración de dependencia del productor para un método determinado es identificar en tiempo de ejecución un conjunto de cero o más productores, y donde dicho tiempo de ejecución incluye:un módulo de generación de grafos de productores automatizado para recibir una designación de un productor de interés, para añadir el productor de interés como parte de un grafo de productor, y para generar automáticamente un resto del grafo de productor a través de la vinculaci�n, y la instanciaci�n cuando sea necesario, de otros productores en base a las declaraciones de dependencia del productor de los métodos identificados por los productores que ya est�n en el grafo de productor; yun módulo de ejecución de grafo de productor automatizado para ejecutar los productores en el grafo de productor en el orden indicado por el grafo de productor para determinar una salida del productor de interés, y el módulo de ejecución de grafo de productor automatizado comprende,un módulo de paralelizaci�n dispuesto para hacer que al menos dos de la pluralidad de productores se ejecuten en paralelo.
-
- 11.
- El aparato de la reivindicación 10, donde el módulo de ejecución de grafo de productor automatizado comprende además:
un módulo de ejecución local acoplado al módulo de paralelizaci�n para hacer que un productor que tiene un modo de ejecución de la ejecución local se ejecute localmente. -
- 12.
- El aparato de la reivindicación 11, donde el módulo de ejecución de grafo de productor automatizado comprende además un módulo de adquisición de métricas para medir el tiempo de ejecución local del productor que tiene el modo de ejecución de la ejecución local si se solicita la instrumentaci�n.
-
- 13.
- El aparato de la reivindicación 10, donde el módulo de ejecución de grafo de productor automatizado comprende además:
un módulo multihilo acoplado al módulo de paralelizaci�n para iniciar un mecanismo de agrupación de hilos y para alimentar los hilos disponibles con tareas multihilo correspondientes a los productores que tienen un modo de ejecución de multihilo. -
- 14.
- El aparato de la reivindicación 13, donde el módulo de ejecución de grafo de productor automatizado comprende además un módulo de adquisición de métricas para medir el tiempo de ejecución de cada uno de los productores que tienen el modo de ejecución de multihilo si se solicita la instrumentaci�n.
-
- 15.
- El aparato de la reivindicación 10, donde el módulo de ejecución de grafo de productor automatizado comprende además:
un módulo de multiprocesamiento acoplado al módulo de paralelizaci�n para instanciar un trabajo, para serializar tareas de multiprocesamiento correspondientes a los productores que tienen un modo de ejecución de multiprocesamiento, para serializar las entradas y las instancias subyacentes de las tareas de multiprocesamiento, para añadir las tareas de multiprocesamiento serializadas y las entradas serializadas y las instancias subyacentes serializadas al trabajo, y para proporcionar el trabajo a un despachador de grid, despachando el despachador de grid el trabajo a un grid que tiene una pluralidad de procesadores para ejecutar las tareas de multiprocesamiento en el trabajo. -
- 16.
- El aparato de la reivindicación 15, donde el módulo de ejecución de grafo de productor automatizado comprende además un módulo de adquisición de métricas para medir el tiempo de ejecución de cada una de las tareas de multiprocesamiento correspondientes a los productores que tienen el modo de ejecución de multiprocesamiento, el tiempo y el tamaño de serializaci�n de las entradas, las salidas y las instancias de la tarea de multiprocesamiento dentro del trabajo, el tiempo y el tamaño de deserializaci�n de las entradas, las salidas y las instancias de la tarea de multiprocesamiento dentro del trabajo, y el tiempo de ejecución de las tareas de multiprocesamiento dentro del trabajo si se solicita la instrumentaci�n.
-
- 17.
- El aparato de la reivindicación 16, donde, en respuesta a una solicitud de evaluación comparativa, el módulo de adquisición de métricas debe medir el tiempo de ejecución local de las tareas de multiprocesamiento, para comparar el tiempo de ejecución local de las tareas de multiprocesamiento con el tiempo de ejecución del trabajo, y derivar las métricas de comparación.
-
- 18.
- El aparato de la reivindicación 10, donde el tiempo de ejecución comprende además:
una estructura 1049 de decisión configurable basada en un productor acoplada al módulo de paralelizaci�n para almacenar un modo de ejecución en base a una combinación de una o más de entre una clave de clase, una clave de instancia, y una clave de método de un cliente de tiempo de ejecución, donde el módulo de generación de grafo de productor automatizado puede funcionar para determinar el modo de ejecución en base a las selecciones del modo de ejecución, los ajustes del modo de ejecución, y un ajuste de anulación del tiempo de ejecución, si los hay. -
- 19.
- El aparato de la reivindicación 10, donde el tiempo de ejecución comprende además:
una estructura de grafo de productor acoplada al módulo de generación de grafo de productor automatizado y al módulo de ejecución de grafo de productor automatizado para almacenar las salidas de la pluralidad de productores, los ajustes del modo de ejecución, y las métricas adquiridas, si los hay. -
- 20.
- El aparato de la reivindicación 10, donde el tiempo de ejecución comprende además:
una estructura de ajuste del tiempo de ejecución para almacenar los ajustes de anulación del modo de ejecución global. -
- 21.
- Un medio legible por máquina que comprende una aplicación escrita en un código orientado a objetos, incluyendo el código orientado a objetos:
una pluralidad de definiciones de clases que incluye cada una un conjunto de uno o más métodos, yuna declaración de dependencia del productor para cada método de dicho conjunto de métodos,donde la declaración de dependencia del productor para uno dado de dichos métodos se usa por un tiempo de ejecución para identificar al tiempo de ejecución, con un conjunto de cero o más dependencias del productor, un conjunto de cero o más productores, y donde un productor es una construcción instanciada del tiempo de ejecución, donde cada productor se instancia a partir de una combinación respectiva de una instancia (108) específica de una clase y un método (104) específico de esa clase e identifica dicha instancia específica y dicho método específico, donde la ejecución de un productor da como resultado el método identificado por ese productor que se ejecuta en la instancia identificada por ese productor, donde las dependencias del productor representan una secuencia de ejecución de los productores para el tiempo de ejecución, de manera que las dependencias del productor permiten que se paralelice la ejecución de la aplicación usando el tiempo de ejecución. -
- 22.
- El medio legible por máquina de la reivindicación 21, donde el código fuente orientado a objetos incluye además:
un ajuste del modo de ejecución para cada método de dichos conjuntos de métodos. -
- 23.
- El medio legible por máquina de la reivindicación 22, donde el modo de ejecución es uno de entre un modo de ejecución local, un modo de multiprocesamiento, y un modo multihilos.
-
- 24.
- El medio legible por máquina de la reivindicación 22, donde uno o más de la pluralidad de las definiciones de clases incluyen además:
uno o más ajustes del modo de ejecución proporcionados en la anotación. -
- 25.
- El medio legible por máquina de la reivindicación 21, donde el código fuente orientado a objetos incluye además:
un comando de ajuste del modo de ejecución del tiempo de ejecución de anulación para anular el modo de ejecución a nivel del tiempo de ejecución. -
- 26.
- El medio legible por máquina de la reivindicación 21, donde el código fuente orientado a objetos incluye además:
un comando de ajuste del modo de ejecución del productor de anulación para anular el modo de ejecución en base a un productor por productor. -
- 27.
- El medio legible por máquina de la reivindicación 21, donde el código fuente orientado a objetos incluye además:
-
- 28.
- Un programa de ordenador que, cuando se ejecuta por un procesador, hace que el procesador realice un método de acuerdo con una cualquiera de las reivindicaciones 1 a 9.
un comando de ajuste del modo de ejecución del árbol de decisión configurable para anular el modo de ejecución en base a al menos uno de entre una clase, un método y una instancia.
Applications Claiming Priority (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US607196 | 1990-10-31 | ||
| US11/607,196 US8307337B2 (en) | 2006-12-01 | 2006-12-01 | Parallelization and instrumentation in a producer graph oriented programming framework |
| PCT/EP2007/010407 WO2008064899A2 (en) | 2006-12-01 | 2007-11-30 | Parallelization and instrumentation in a producer graph oriented programming framework |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| ES2473765T3 true ES2473765T3 (es) | 2014-07-07 |
Family
ID=39400444
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| ES07856310.3T Active ES2473765T3 (es) | 2006-12-01 | 2007-11-30 | Paralelizaci�n e instrumentaci�n en un marco de programación orientado a grafos de productor |
Country Status (7)
| Country | Link |
|---|---|
| US (2) | US8307337B2 (es) |
| EP (1) | EP2041655B1 (es) |
| JP (1) | JP5354601B2 (es) |
| CN (1) | CN101589366B (es) |
| ES (1) | ES2473765T3 (es) |
| RU (1) | RU2435201C2 (es) |
| WO (1) | WO2008064899A2 (es) |
Families Citing this family (71)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US8191052B2 (en) * | 2006-12-01 | 2012-05-29 | Murex S.A.S. | Producer graph oriented programming and execution |
| US8332827B2 (en) * | 2006-12-01 | 2012-12-11 | Murex S.A.S. | Produce graph oriented programming framework with scenario support |
| US7865872B2 (en) * | 2006-12-01 | 2011-01-04 | Murex S.A.S. | Producer graph oriented programming framework with undo, redo, and abort execution support |
| US8307337B2 (en) | 2006-12-01 | 2012-11-06 | Murex S.A.S. | Parallelization and instrumentation in a producer graph oriented programming framework |
| US8671412B2 (en) * | 2008-10-24 | 2014-03-11 | International Business Machines Corporation | Calculating and communicating level of carbon offsetting required to compensate for performing a computing task |
| WO2010064260A1 (en) * | 2008-12-01 | 2010-06-10 | Kpit Cummins Infosystems Ltd. | Method and system for parallelization of sequencial computer program codes |
| US8863093B1 (en) * | 2009-03-06 | 2014-10-14 | Coverity, Inc. | Load-time instrumentation of virtual machine program code |
| US20110016477A1 (en) * | 2009-07-14 | 2011-01-20 | Microsoft Corporation | Pre-calculation and caching of dependencies |
| US8843920B2 (en) * | 2009-09-15 | 2014-09-23 | Advanced Micro Devices, Inc. | Systems and methods for deferring software implementation decisions until load time |
| US9984327B2 (en) * | 2010-06-17 | 2018-05-29 | Palo Alto Research Center Incorporated | System and method for parallel graph searching utilizing parallel edge partitioning |
| US8607191B2 (en) * | 2010-06-30 | 2013-12-10 | International Business Machines Corporation | Automated discovery of programmatic resources |
| CN101964749A (zh) * | 2010-09-21 | 2011-02-02 | 北京网康科技有限公司 | 一种基于多核构架的报文转发方法及系统 |
| US20120102469A1 (en) * | 2010-10-22 | 2012-04-26 | International Business Machines Corporation | Deterministic application breakpoint halting by logically relating breakpoints in a graph |
| US20120117537A1 (en) * | 2010-11-02 | 2012-05-10 | Velocio Networks, Inc. | Flow Chart Programming Platform for Testers and Simulators |
| US9519561B2 (en) * | 2011-04-15 | 2016-12-13 | Webtrends Inc. | Method and system for configuration-controlled instrumentation of application programs |
| GB2529074A (en) | 2011-06-16 | 2016-02-10 | Imagination Tech Ltd | Graphics processor with non-blocking concurrent architecture |
| US8825861B2 (en) * | 2011-06-26 | 2014-09-02 | International Business Machines Corporation | System management operational workflow templates |
| US8849916B2 (en) * | 2011-06-26 | 2014-09-30 | International Business Machines Corporation | Infrastructure management operational workflows |
| US9003362B2 (en) * | 2011-09-02 | 2015-04-07 | Vu Lam | Systems and methods for processing software application metadata associated with a software application |
| US9003383B2 (en) * | 2011-09-15 | 2015-04-07 | You Know Solutions, LLC | Analytic engine to parallelize serial code |
| US9038033B1 (en) * | 2011-12-09 | 2015-05-19 | Sencha, Inc. | Techniques and mechanisms for web application minification |
| KR101373550B1 (ko) * | 2012-01-11 | 2014-03-13 | (주)마상소프트 | 네트워크 기반의 플랫폼 시스템 |
| CN103677789B (zh) * | 2012-09-25 | 2017-11-24 | 深圳市金正方科技股份有限公司 | 基于grid组件的列表数据展现方法及系统 |
| US10387293B2 (en) * | 2012-10-09 | 2019-08-20 | Securboration, Inc. | Systems and methods for automatically parallelizing sequential code |
| US10725897B2 (en) | 2012-10-09 | 2020-07-28 | Securboration, Inc. | Systems and methods for automatically parallelizing sequential code |
| US10333820B1 (en) | 2012-10-23 | 2019-06-25 | Quest Software Inc. | System for inferring dependencies among computing systems |
| US10313433B2 (en) | 2013-03-14 | 2019-06-04 | Thoughtwire Holdings Corp. | Method and system for registering software systems and data-sharing sessions |
| US9742843B2 (en) | 2013-03-14 | 2017-08-22 | Thoughtwire Holdings Corp. | Method and system for enabling data sharing between software systems |
| US10372442B2 (en) * | 2013-03-14 | 2019-08-06 | Thoughtwire Holdings Corp. | Method and system for generating a view incorporating semantically resolved data values |
| US9164740B2 (en) | 2013-05-16 | 2015-10-20 | Toshiba Global Commerce Solutions Holdings Corporation | System and method for replacing java beans |
| EP3025227A1 (en) * | 2013-07-23 | 2016-06-01 | Huawei Technologies Co., Ltd. | Method for constructing a graph-based intermediate representation in a compiler |
| US11005738B1 (en) | 2014-04-09 | 2021-05-11 | Quest Software Inc. | System and method for end-to-end response-time analysis |
| CN105335230A (zh) * | 2014-07-30 | 2016-02-17 | 阿里巴巴集团控股有限公司 | 一种服务处理方法及装置 |
| CN104281478B (zh) * | 2014-10-28 | 2018-07-20 | 小米科技有限责任公司 | 更新应用程序的方法及装置 |
| US10291493B1 (en) | 2014-12-05 | 2019-05-14 | Quest Software Inc. | System and method for determining relevant computer performance events |
| US9678790B2 (en) * | 2015-01-07 | 2017-06-13 | Qualcomm Incorporated | Devices and methods implementing operations for selective enforcement of task dependencies |
| US10325014B2 (en) | 2015-04-30 | 2019-06-18 | Workiva Inc. | System and method for convergent document collaboration |
| US10255263B2 (en) | 2015-05-18 | 2019-04-09 | Workiva Inc. | Data storage and retrieval system and method for storing cell coordinates in a computer memory |
| US9158832B1 (en) | 2015-05-18 | 2015-10-13 | Workiva Inc. | Method and computing device for maintaining dependencies among reference elements |
| US10187260B1 (en) | 2015-05-29 | 2019-01-22 | Quest Software Inc. | Systems and methods for multilayer monitoring of network function virtualization architectures |
| CN106663011B (zh) * | 2015-07-24 | 2021-08-24 | 甲骨文国际公司 | 桥接模块系统和非模块系统 |
| US10078497B2 (en) | 2015-07-24 | 2018-09-18 | Oracle International Corporation | Bridging a module system and a non-module system |
| US9626171B2 (en) | 2015-07-24 | 2017-04-18 | Oracle International Corporation | Composing a module system and a non-module system |
| US10158647B2 (en) * | 2015-08-25 | 2018-12-18 | Oracle International Corporation | Permissive access control for modular reflection |
| US10200252B1 (en) | 2015-09-18 | 2019-02-05 | Quest Software Inc. | Systems and methods for integrated modeling of monitored virtual desktop infrastructure systems |
| US9823913B2 (en) * | 2015-12-03 | 2017-11-21 | International Business Machines Corporation | Method of adding local variables in place of global in JavaScript |
| CN105512304B (zh) * | 2015-12-11 | 2019-03-26 | 西安道同信息科技有限公司 | 在线生成互联网应用方法和系统集成方法及支撑平台 |
| US10394528B2 (en) | 2016-03-30 | 2019-08-27 | Oracle International Corporation | Returning a runtime type loaded from an archive in a module system |
| US10191753B2 (en) | 2016-03-30 | 2019-01-29 | Oracle International Corporation | Generating verification metadata and verifying a runtime type based on verification metadata |
| US10230601B1 (en) * | 2016-07-05 | 2019-03-12 | Quest Software Inc. | Systems and methods for integrated modeling and performance measurements of monitored virtual desktop infrastructure systems |
| US10360008B2 (en) | 2016-09-16 | 2019-07-23 | Oracle International Corporation | Metadata application constraints within a module system based on modular encapsulation |
| US10387142B2 (en) | 2016-09-16 | 2019-08-20 | Oracle International Corporation | Using annotation processors defined by modules with annotation processors defined by non-module code |
| US10642589B2 (en) * | 2017-03-13 | 2020-05-05 | Memsql, Inc. | Extensibility in a database system |
| US10846417B2 (en) * | 2017-03-17 | 2020-11-24 | Oracle International Corporation | Identifying permitted illegal access operations in a module system |
| US10848410B2 (en) | 2017-03-29 | 2020-11-24 | Oracle International Corporation | Ranking service implementations for a service interface |
| US11010361B1 (en) * | 2017-03-30 | 2021-05-18 | Amazon Technologies, Inc. | Executing code associated with objects in a hierarchial data structure |
| US10120777B1 (en) * | 2017-09-29 | 2018-11-06 | Oracle International Corporation | Remediating serialization incompatibilities |
| US12061954B2 (en) * | 2017-10-27 | 2024-08-13 | Intuit Inc. | Methods, systems, and computer program product for dynamically modifying a dynamic flow of a software application |
| CN109388542B (zh) * | 2018-10-26 | 2022-02-22 | 北京百悟科技有限公司 | 一种监控方法及装置、计算机可读存储介质 |
| US11070377B1 (en) * | 2019-02-14 | 2021-07-20 | Bank Of America Corporation | Blended virtual machine approach for flexible production delivery of intelligent business workflow rules |
| US11755825B2 (en) | 2019-09-12 | 2023-09-12 | Workiva Inc. | Method, system, and computing device for facilitating private drafting |
| US11188309B2 (en) * | 2019-09-27 | 2021-11-30 | Adp, Llc | User interface engine for miniapp development |
| WO2022013887A1 (en) * | 2020-07-16 | 2022-01-20 | Morphing Machines Pvt. Ltd | Apparatus for implementing dynamic, data-dependent parallelism for task execution based on an execution model |
| US11443108B2 (en) | 2020-08-17 | 2022-09-13 | Workiva Inc. | System and method for document management using branching |
| US11100281B1 (en) | 2020-08-17 | 2021-08-24 | Workiva Inc. | System and method for maintaining links and revisions |
| US11494333B2 (en) * | 2020-12-02 | 2022-11-08 | Adp, Inc. | File tree structure |
| US11100277B1 (en) | 2021-02-15 | 2021-08-24 | Workiva Inc. | Systems, methods, and computer-readable media for flow-through formatting for links |
| US11354362B1 (en) | 2021-05-06 | 2022-06-07 | Workiva Inc. | System and method for copying linked documents |
| CN113590134B (zh) * | 2021-08-16 | 2024-08-06 | 抖音视界有限公司 | 一种项目生成方法及装置 |
| US11640495B1 (en) | 2021-10-15 | 2023-05-02 | Workiva Inc. | Systems and methods for translation comments flowback |
| US20250181333A1 (en) * | 2023-11-30 | 2025-06-05 | Sap Se | Java source code and bytecode comparison via an intermediate representation |
Family Cites Families (109)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US73892A (en) * | 1868-01-28 | Improved cbable | ||
| US4558413A (en) | 1983-11-21 | 1985-12-10 | Xerox Corporation | Software version management system |
| US5497500A (en) | 1986-04-14 | 1996-03-05 | National Instruments Corporation | Method and apparatus for more efficient function synchronization in a data flow program |
| US5481741A (en) | 1986-04-14 | 1996-01-02 | National Instruments Corporation | Method and apparatus for providing attribute nodes in a graphical data flow environment |
| US5504917A (en) | 1986-04-14 | 1996-04-02 | National Instruments Corporation | Method and apparatus for providing picture generation and control features in a graphical data flow environment |
| US5481740A (en) | 1986-04-14 | 1996-01-02 | National Instruments Corporation | Method and apparatus for providing autoprobe features in a graphical data flow diagram |
| US5155836A (en) | 1987-01-27 | 1992-10-13 | Jordan Dale A | Block diagram system and method for controlling electronic instruments with simulated graphic display |
| JPS6432337A (en) | 1987-07-29 | 1989-02-02 | Hitachi Ltd | Method for instructing influence of program change |
| US5371851A (en) | 1989-04-26 | 1994-12-06 | Credence Systems Corporation | Graphical data base editor |
| US5313387A (en) | 1989-06-30 | 1994-05-17 | Digital Equipment Corporation | Re-execution of edit-compile-run cycles for changed lines of source code, with storage of associated data in buffers |
| DE69126066T2 (de) | 1990-06-29 | 1997-09-25 | Oracle Corp | Verfahren und Gerät zur Optimierung des Logbuchaufhebungsgebrauchs |
| EP0528631B1 (en) | 1991-08-13 | 1998-05-20 | Xerox Corporation | Electronic image generation |
| JPH05265975A (ja) | 1992-03-16 | 1993-10-15 | Hitachi Ltd | 並列計算処理装置 |
| US5416895A (en) | 1992-04-08 | 1995-05-16 | Borland International, Inc. | System and methods for improved spreadsheet interface with user-familiar objects |
| US5659747A (en) | 1993-04-22 | 1997-08-19 | Microsoft Corporation | Multiple level undo/redo mechanism |
| JPH06332785A (ja) | 1993-05-25 | 1994-12-02 | Fujitsu Ltd | オブジェクト指向データ処理システム |
| JPH0713766A (ja) * | 1993-06-14 | 1995-01-17 | Internatl Business Mach Corp <Ibm> | オブジェクト指向コンピュータ・システムおよびオブジェクト・クラス管理方法 |
| US5758160A (en) * | 1993-06-28 | 1998-05-26 | Object Technology Licensing Corporation | Method and apparatus for building a software program using dependencies derived from software component interfaces |
| US5893123A (en) | 1995-06-22 | 1999-04-06 | Tuinenga; Paul W. | System and method of integrating a spreadsheet and external program having output data calculated automatically in response to input data from the spreadsheet |
| US6003037A (en) | 1995-11-14 | 1999-12-14 | Progress Software Corporation | Smart objects for development of object oriented software |
| US5838976A (en) | 1995-11-28 | 1998-11-17 | Hewlett-Packard Co. | System and method for profiling code on symmetric multiprocessor architectures |
| US6067415A (en) | 1995-12-26 | 2000-05-23 | Kabushiki Kaisha Toshiba | System for assisting a programmer find errors in concurrent programs |
| US7987427B1 (en) | 1996-05-10 | 2011-07-26 | Apple Inc. | Graphical editor for program files |
| US5819293A (en) | 1996-06-06 | 1998-10-06 | Microsoft Corporation | Automatic Spreadsheet forms |
| US5966072A (en) * | 1996-07-02 | 1999-10-12 | Ab Initio Software Corporation | Executing computations expressed as graphs |
| US5822593A (en) | 1996-12-06 | 1998-10-13 | Xerox Corporation | High-level loop fusion |
| JP3730740B2 (ja) * | 1997-02-24 | 2006-01-05 | 株式会社日立製作所 | 並列ジョブ多重スケジューリング方法 |
| US6145121A (en) | 1997-04-17 | 2000-11-07 | University Of Washington | Trace based method for the analysis, benchmarking and tuning of object oriented databases and applications |
| US6026235A (en) | 1997-05-20 | 2000-02-15 | Inprise Corporation | System and methods for monitoring functions in natively compiled software programs |
| US6209125B1 (en) | 1997-06-03 | 2001-03-27 | Sun Microsystems, Inc. | Method and apparatus for software component analysis |
| US5990906A (en) | 1997-06-25 | 1999-11-23 | National Instruments Corporation | Undo feature for a graphical programming system |
| US6233733B1 (en) | 1997-09-30 | 2001-05-15 | Sun Microsystems, Inc. | Method for generating a Java bytecode data flow graph |
| US6704927B1 (en) * | 1998-03-24 | 2004-03-09 | Sun Microsystems, Inc. | Static binding of dynamically-dispatched calls in the presence of dynamic linking and loading |
| US6427234B1 (en) * | 1998-06-11 | 2002-07-30 | University Of Washington | System and method for performing selective dynamic compilation using run-time information |
| US6223171B1 (en) | 1998-08-25 | 2001-04-24 | Microsoft Corporation | What-if index analysis utility for database systems |
| US6111575A (en) | 1998-09-24 | 2000-08-29 | International Business Machines Corporation | Graphical undo/redo manager and method |
| US6493868B1 (en) | 1998-11-02 | 2002-12-10 | Texas Instruments Incorporated | Integrated development tool |
| US6826752B1 (en) * | 1998-12-17 | 2004-11-30 | California Institute Of Technology | Programming system and thread synchronization mechanisms for the development of selectively sequential and multithreaded computer programs |
| JP2000207223A (ja) | 1999-01-12 | 2000-07-28 | Matsushita Electric Ind Co Ltd | 並列処理向けのプログラム処理方法および装置、並びに並列処理向けのプログラム処理を実行するプログラムを記録した記録媒体および並列処理向けの命令列を記録した記録媒体 |
| US6385770B1 (en) | 1999-01-29 | 2002-05-07 | Telefonaktiebolaget Lm Ericsson (Publ) | Software upgrade |
| US6957191B1 (en) | 1999-02-05 | 2005-10-18 | Babcock & Brown Lp | Automated financial scenario modeling and analysis tool having an intelligent graphical user interface |
| US6571388B1 (en) | 1999-03-09 | 2003-05-27 | Hewlett-Packard Development Company, L.P. | Building a custom software environment including pre-loaded classes |
| US6407753B1 (en) | 1999-05-04 | 2002-06-18 | International Business Machines Corporation | System and method for integrating entities via user-interactive rule-based matching and difference reconciliation |
| US6665866B1 (en) | 1999-05-28 | 2003-12-16 | Microsoft Corporation | Extensible compiler utilizing a plurality of question handlers |
| JP2001005678A (ja) * | 1999-06-18 | 2001-01-12 | Fujitsu Ltd | ネットワーク型情報処理装置及び方法 |
| WO2001001206A2 (en) | 1999-06-30 | 2001-01-04 | Strategic Simulation Systems, Inc. | System dynamics model builder and simulator |
| US6618851B1 (en) | 1999-08-31 | 2003-09-09 | Autodesk, Inc. | Method and apparatus for state-reversion |
| AU2001253712A1 (en) * | 2000-04-21 | 2001-11-07 | Togethersoft Corporation | Methods and systems for identifying dependencies between object-oriented elements |
| CA2346231A1 (en) | 2000-05-08 | 2001-11-08 | Internet Number Corporation | Method and system for accessing information on a network using message aliasing functions having shadow callback functions |
| US6959429B1 (en) | 2000-05-16 | 2005-10-25 | Watterson-Prime Software, Inc. | System for developing data collection software applications |
| US6763515B1 (en) | 2000-06-05 | 2004-07-13 | National Instruments Corporation | System and method for automatically generating a graphical program to perform an image processing algorithm |
| US20030005407A1 (en) | 2000-06-23 | 2003-01-02 | Hines Kenneth J. | System and method for coordination-centric design of software systems |
| US6889227B1 (en) | 2000-07-21 | 2005-05-03 | Sun Microsystems, Inc. | Database access bridge system and process |
| RU2206119C2 (ru) | 2000-09-22 | 2003-06-10 | Закрытое акционерное общество "МЦСТ" | Способ получения объектного кода |
| US7047518B2 (en) | 2000-10-04 | 2006-05-16 | Bea Systems, Inc. | System for software application development and modeling |
| WO2002046916A2 (en) | 2000-10-20 | 2002-06-13 | Polexis, Inc. | Extensible information system (xis) |
| US6826523B1 (en) | 2000-11-01 | 2004-11-30 | Sony Computer Entertainment America Inc. | Application development interface for multi-user applications executable over communication networks |
| US6829572B2 (en) | 2000-12-07 | 2004-12-07 | Internatinal Business Machines Corporation | Method and system for efficiently overriding array net values in a logic simulator machine |
| US6820256B2 (en) | 2000-12-13 | 2004-11-16 | Microsoft Corporation | System and method for whole-system program analysis |
| US7200838B2 (en) | 2000-12-20 | 2007-04-03 | National Instruments Corporation | System and method for automatically generating a graphical program in response to a state diagram |
| US6836884B1 (en) | 2001-06-04 | 2004-12-28 | Microsoft Corporation | Method and system for editing software programs |
| US20020188616A1 (en) | 2001-06-07 | 2002-12-12 | Chinnici Roberto R. | Database access bridge system and process |
| US7051339B2 (en) | 2001-06-29 | 2006-05-23 | Goldman, Sachs & Co. | System and method to measure latency of transaction information flowing through a computer system |
| US6995765B2 (en) | 2001-07-13 | 2006-02-07 | Vicarious Visions, Inc. | System, method, and computer program product for optimization of a scene graph |
| US6966013B2 (en) | 2001-07-21 | 2005-11-15 | International Business Machines Corporation | Method and system for performing automated regression tests in a state-dependent data processing system |
| US7236915B2 (en) | 2001-08-09 | 2007-06-26 | Hewlett-Packard Development Company, L.P. | Technique and interface for computer system resource assignment |
| US20040205524A1 (en) | 2001-08-15 | 2004-10-14 | F1F9 | Spreadsheet data processing system |
| US7010779B2 (en) | 2001-08-16 | 2006-03-07 | Knowledge Dynamics, Inc. | Parser, code generator, and data calculation and transformation engine for spreadsheet calculations |
| US7017084B2 (en) * | 2001-09-07 | 2006-03-21 | Network Appliance Inc. | Tracing method and apparatus for distributed environments |
| US8473922B2 (en) | 2001-09-19 | 2013-06-25 | Hewlett-Packard Development Company, L.P. | Runtime monitoring in component-based systems |
| US7194475B2 (en) | 2001-10-30 | 2007-03-20 | International Business Machines Corporation | Method, system, and program for performing an impact analysis of program statements in at least one source code file |
| US7069547B2 (en) | 2001-10-30 | 2006-06-27 | International Business Machines Corporation | Method, system, and program for utilizing impact analysis metadata of program statements in a development environment |
| CA2360650A1 (en) | 2001-10-31 | 2003-04-30 | Ibm Canada Limited-Ibm Canada Limitee | Algorithm to create and compare debug scenarios of a computer process |
| JP2003157185A (ja) | 2001-11-19 | 2003-05-30 | Nec Corp | 計算機の動作の解析・表示装置とその解析・表示方法及びコンピュータプログラム |
| US7203743B2 (en) | 2001-12-28 | 2007-04-10 | Nortel Networks Limited | Hierarchical tree-based protection scheme for mesh networks |
| US7039923B2 (en) | 2002-04-19 | 2006-05-02 | Sun Microsystems, Inc. | Class dependency graph-based class loading and reloading |
| US7159211B2 (en) | 2002-08-29 | 2007-01-02 | Indian Institute Of Information Technology | Method for executing a sequential program in parallel with automatic fault tolerance |
| US7210128B2 (en) | 2002-10-14 | 2007-04-24 | Fujitsu Limited | Event-driven observability enhanced coverage analysis |
| US7272820B2 (en) * | 2002-12-12 | 2007-09-18 | Extrapoles Pty Limited | Graphical development of fully executable transactional workflow applications with adaptive high-performance capacity |
| TWI262383B (en) | 2003-01-10 | 2006-09-21 | Univ Nat Cheng Kung | A generic software testing system and method |
| US7571431B2 (en) | 2003-04-29 | 2009-08-04 | Microsoft Corporation | Processing macro information and displaying via GUI in different tools |
| US7299450B2 (en) | 2003-06-17 | 2007-11-20 | Microsoft Corporation | Undoing changes in a software configuration management system |
| KR100513385B1 (ko) | 2003-06-19 | 2005-09-07 | 삼성전자주식회사 | 선형 위상 검출기를 이용한 클럭 및 데이터 복원 장치 및 그 방법 |
| US7559050B2 (en) | 2003-06-30 | 2009-07-07 | Microsoft Corporation | Generating software development tools via target architecture specification |
| US7739252B2 (en) | 2003-07-14 | 2010-06-15 | Oracle America, Inc. | Read/write lock transaction manager freezing |
| US7818718B2 (en) | 2003-09-30 | 2010-10-19 | Sap Ag | Undoing user actions in a client program |
| US7454701B2 (en) | 2003-10-30 | 2008-11-18 | Sap Ag | Systems and methods for implementing formulas |
| US7536678B2 (en) | 2003-12-04 | 2009-05-19 | International Business Machines Corporation | System and method for determining the possibility of adverse effect arising from a code change in a computer program |
| US7792824B2 (en) | 2004-01-08 | 2010-09-07 | International Business Machines Corporation | Apparatus and method for enabling parallel processing of a computer program using existing database parallelism |
| KR100643268B1 (ko) | 2004-01-17 | 2006-11-10 | 삼성전자주식회사 | 자바 가상 머신의 성능을 향상시키는 방법 및 상기 방법에의해 동작되는 시스템 |
| US7917898B2 (en) | 2004-02-02 | 2011-03-29 | Intel Corporation | Methods and apparatus to provide a modular native method invocation system |
| US7316001B2 (en) * | 2004-06-05 | 2008-01-01 | Graphlogic Inc. | Object process graph system |
| US7493335B2 (en) | 2004-07-02 | 2009-02-17 | Graphlogic Inc. | Object process graph relational database interface |
| US7360209B2 (en) | 2004-07-16 | 2008-04-15 | Graphlogic Inc. | Object process graph application controller-viewer |
| US7506320B2 (en) | 2004-09-09 | 2009-03-17 | International Business Machines Corporation | Generating sequence diagrams using call trees |
| WO2006031640A2 (en) | 2004-09-10 | 2006-03-23 | Graphlogic Inc. | Object process graph application development system |
| US7933862B2 (en) | 2004-09-27 | 2011-04-26 | Microsoft Corporation | One click conditional formatting method and system for software programs |
| CN1755722A (zh) * | 2004-10-01 | 2006-04-05 | 微软公司 | 可扩展工作流模型的声明性表示 |
| US7458072B2 (en) | 2004-10-06 | 2008-11-25 | Microsoft Corporation | Execution context infrastructure |
| US20060080660A1 (en) * | 2004-10-07 | 2006-04-13 | Dell Products L.P. | System and method for disabling the use of hyper-threading in the processor of a computer system |
| US7831956B2 (en) * | 2005-09-13 | 2010-11-09 | Microsoft Corporation | Using attributes to identify and filter pluggable functionality |
| US7904892B2 (en) | 2006-01-06 | 2011-03-08 | Northrop Grumman Corporation | Systems and methods for identifying and displaying dependencies |
| US7882498B2 (en) * | 2006-03-31 | 2011-02-01 | Intel Corporation | Method, system, and program of a compiler to parallelize source code |
| US7844959B2 (en) * | 2006-09-29 | 2010-11-30 | Microsoft Corporation | Runtime optimization of distributed execution graph |
| US8902231B2 (en) | 2006-10-20 | 2014-12-02 | Alcatel Lucent | Method and apparatus for displaying graphical representations of graph layouts |
| US8191052B2 (en) | 2006-12-01 | 2012-05-29 | Murex S.A.S. | Producer graph oriented programming and execution |
| US8332827B2 (en) | 2006-12-01 | 2012-12-11 | Murex S.A.S. | Produce graph oriented programming framework with scenario support |
| US7865872B2 (en) | 2006-12-01 | 2011-01-04 | Murex S.A.S. | Producer graph oriented programming framework with undo, redo, and abort execution support |
| US8307337B2 (en) | 2006-12-01 | 2012-11-06 | Murex S.A.S. | Parallelization and instrumentation in a producer graph oriented programming framework |
-
2006
- 2006-12-01 US US11/607,196 patent/US8307337B2/en active Active
-
2007
- 2007-11-30 RU RU2009125050/08A patent/RU2435201C2/ru active
- 2007-11-30 EP EP07856310.3A patent/EP2041655B1/en active Active
- 2007-11-30 WO PCT/EP2007/010407 patent/WO2008064899A2/en not_active Ceased
- 2007-11-30 ES ES07856310.3T patent/ES2473765T3/es active Active
- 2007-11-30 CN CN2007800504497A patent/CN101589366B/zh active Active
- 2007-11-30 JP JP2009538644A patent/JP5354601B2/ja active Active
-
2012
- 2012-11-06 US US13/669,837 patent/US9424050B2/en active Active
Also Published As
| Publication number | Publication date |
|---|---|
| JP2010511233A (ja) | 2010-04-08 |
| JP5354601B2 (ja) | 2013-11-27 |
| RU2435201C2 (ru) | 2011-11-27 |
| CN101589366A (zh) | 2009-11-25 |
| EP2041655A2 (en) | 2009-04-01 |
| US8307337B2 (en) | 2012-11-06 |
| US9424050B2 (en) | 2016-08-23 |
| CN101589366B (zh) | 2013-11-13 |
| RU2009125050A (ru) | 2011-01-10 |
| US20130061207A1 (en) | 2013-03-07 |
| WO2008064899A3 (en) | 2008-12-18 |
| EP2041655B1 (en) | 2014-03-19 |
| US20080134207A1 (en) | 2008-06-05 |
| WO2008064899A2 (en) | 2008-06-05 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| ES2473765T3 (es) | Paralelizaci�n e instrumentaci�n en un marco de programación orientado a grafos de productor | |
| ES2381373T3 (es) | Programación y ejecución orientadas por gráficos de productor | |
| ES2327797T3 (es) | Soporte de programacion orientado a graficos de productores con soporte de escenario. | |
| De Kergommeaux et al. | Pajé, an interactive visualization tool for tuning multi-threaded parallel applications | |
| EP1952216B1 (en) | Producer graph oriented programming framework with undo, redo, and abort execution support | |
| Talia et al. | A novel data-centric programming model for large-scale parallel systems | |
| Hespe et al. | Kamping: Flexible and (near) zero-overhead c++ bindings for mpi | |
| HK1139216B (en) | Producer graph oriented programming and execution | |
| Banerjee | Integration of functional parallelism and data parallelism for dynamic data structures in a graphical parallel programming environment |