BR112016024522B1 - Meio de armazenamento legível por computador não transitório, e, método para especializar uma classe genérica - Google Patents
Meio de armazenamento legível por computador não transitório, e, método para especializar uma classe genérica Download PDFInfo
- Publication number
- BR112016024522B1 BR112016024522B1 BR112016024522-9A BR112016024522A BR112016024522B1 BR 112016024522 B1 BR112016024522 B1 BR 112016024522B1 BR 112016024522 A BR112016024522 A BR 112016024522A BR 112016024522 B1 BR112016024522 B1 BR 112016024522B1
- Authority
- BR
- Brazil
- Prior art keywords
- class
- type
- metadata
- program element
- declaration
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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
- G06F9/4492—Inheritance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
- G06F8/24—Object-oriented
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/436—Semantic checking
- G06F8/437—Type checking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/76—Adapting program code to run in a different environment; Porting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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; CALCULATING OR 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
- G06F9/449—Object-oriented method invocation or resolution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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/4498—Finite state machines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
Abstract
MEIO DE ARMAZENAMENTO LEGÍVEL POR COMPUTADOR NÃO TRANSITÓRIO, E, MÉTODO. Trata-se de especialização dinâmica acionada por metadados que pode incluir aplicar uma operação de eliminação de tipo a um conjunto de instruções em uma classe genérica ou a uma declaração de método que inclui variáveis tipadas com o uso de uma forma codificada de uma instrução ou um argumento para uma instrução. A instrução pode operar em valores dos tipos de referência e o argumento pode ser uma assinatura que indica os tipos de referência. A forma codificada pode ser anotada para incluir metadados que indicam que variáveis de tipo foram apagados e que tipos de referência são as eliminações de variáveis de tipo. Adicionalmente, os metadados podem indicar que a instrução opera em valores de, e que o argumento indica tipos de referência que são eliminações das variáveis de tipo da declaração de classe (ou método). Além disso, a forma codificada da instrução ou argumento pode ser usada diretamente sem especialização ou transformação.
Description
[001] A presente invenção refere-se, em geral, a um desenvolvimento de software e, mais especificamente, a diversos aspectos de desenvolvimento de linguagem dentro de qualquer uma dentre diversas linguagens de programação, como uma linguagem de programação independente de plataforma, orientada por objeto, por exemplo.
[002] Em diversas linguagens de programação, polimorfismo paramétrico (por exemplo, genéricos) pode ser considerado como uma maneira de tornar uma linguagem mais expressiva, enquanto ainda mantém segurança de tipo estático completa. O polimorfismo paramétrico pode permitir que uma função ou um tipo de dados sejam escritos em um modo genérico, de modo que o mesmo possa lidar com diversos tipos de dados da mesma maneira, independentemente de seus tipos diferentes. Tais funções e tipos de dados podem ser chamados de funções genéricas e tipos de dados genéricos. Por exemplo, uma classe de lista genérica pode ser escrita List<T>, o que significa que a mesma pode ser uma lista de elementos de qualquer tipo T, em que T é especificado separadamente da especificação de Lista.
[003] Tradicionalmente, quando se usa uma linguagem independente de plataforma orientada por objeto, um indivíduo não pode generalizar tipos primitivos sem conversão boxing (por exemplo, converter automaticamente um valor de um tipo primitivo como função de arredondamento em um objeto de uma classe wrapper correspondente como número inteiro).
[004] O polimorfismo paramétrico (genéricos) também pode envolver uma compensação entre tamanho de código, custos de geração e especificidade de tipo. Por exemplo, uma linguagem de programação pode sustentar genéricos especializados primitivos, mas pode gerar classes especializadas de modo estatístico, através disso, em custo potencialmente aumentado para codificar área ocupada e custo de compilação. Outra linguagem de programação pode gerar uma instanciação especializada de modelos para cada instanciação usada pelo programa, o que pode resultar em uma área ocupada estática grande. Uma terceira linguagem pode usar, ainda, um formato de código de byte de modelos, apenas instigando a realização de especialização para tempo de execução, o que pode exigir uma etapa adicional antes de usar um arquivo de classe genérico, prejudicando, desse modo, potencialmente o desempenho de tempo de execução.
[005] A especialização dinâmica acionada por metadados, como pode ser aplicada a uma linguagem de programação orientada por objeto, independente de plataforma, pode incluir gerar um arquivo de classe anotado usável diretamente como um arquivo de classe e que também pode ser um modelo usável para especialização. Uma operação de eliminação de tipo pode ser aplicada com o uso de uma forma codificada (ou anotada) de um elemento de programa em uma classe genérica. O elemento de programa pode representar uma assinatura ou declaração de classe, uma assinatura ou declaração de método, uma instrução, um argumento para uma instrução, bem como virtualmente qualquer elemento de programa que representa, movimenta ou manipula dados.
[006] A forma codificada do elemento de programa pode incluir metadados que indicam que variáveis de tipo da declaração de classe (ou método) foram apagados e que tipos são as eliminações de variáveis de tipo. Adicionalmente, os metadados podem incluir diversos tipos de informações relacionadas a especialização. Por exemplo, os metadados podem indicar que uma instrução opera em valores das variáveis de tipo de uma classe (ou declaração de método). De modo similar, os metadados podem indicar que um argumento indica tipos que são eliminações das variáveis de tipo da classe ou declaração de método.
[007] Além disso, o arquivo de classe anotado pode ser usável diretamente (por exemplo, para carregar a classe) e como um modelo para realizar especialização da classe (ou outros elementos dentro do arquivo de classe). Em outras palavras, os metadados na forma codificada podem não impedir a instrução e/ou argumento de serem usados diretamente.
[008] A Figura 1 é um diagrama de blocos lógico que ilustra um componente de um sistema que implanta especialização dinâmica acionada por metadados de acordo com uma modalidade.
[009] A Figura 2 é um diagrama de blocos lógico que ilustra o uso de um arquivo de classe anotado de acordo com especialização dinâmica acionada por metadados de acordo com uma modalidade.
[0010] A Figura 3 é um fluxograma que ilustra uma modalidade de um método para gerar um arquivo de classe anotado como parte da especialização dinâmica acionada por metadados.
[0011] A Figura 4 é um diagrama de blocos lógico que ilustra um exemplo de geração de um arquivo de classe anotado como parte da especialização dinâmica acionada por metadados de acordo com uma modalidade.
[0012] A Figura 5 é um fluxograma que ilustra uma modalidade de um método para especialização com o uso de especialização dinâmica acionada por metadados.
[0013] A Figura 6 é um diagrama de blocos lógico que ilustra um exemplo de especialização com o uso de um arquivo de classe anotado de acordo com especialização dinâmica acionada por metadados, de acordo com uma modalidade.
[0014] A Figura 7 é um diagrama de blocos lógico que ilustra um sistema de computador exemplificativo adequado para implantar especialização dinâmica acionada por metadados de acordo com uma modalidade.
[0015] São diversas modalidades descritas no presente documento de melhoramentos para o desenvolvimento de software com o uso de uma linguagem independente de plataforma, orientada por objeto, como a linguagem de programação Java™, para sustentar diversos recursos, como (por exemplo) especialização dinâmica acionada por metadados. A especialização dinâmica acionada por metadados pode incluir gerar um arquivo de classe anotado que pode ser usado de múltiplas maneiras, de acordo com modalidades diferentes. Por exemplo, um arquivo de classe anotado pode ser usável diretamente como um arquivo de classe, mas também pode ser usado como um modelo durante a especialização. Um compilador pode incluir informações de eliminação de tipo, como informações de especialização em um arquivo de classe anotado. Por exemplo, um ou mais elementos de programa que podem precisar ser ajustados durante especialização podem ser marcados (por exemplo, anotados, decorados, etc.) para criar formas codificadas dos elementos de programa. Desse modo, uma operação de eliminação de tipo pode ser aplicada com o uso de uma forma codificada de um elemento de programa em uma classe genérica.
[0016] Os metadados em um arquivo de classe anotado podem incluir informações de especialização que indicam que tipo de variáveis foi apagado e que tipos são as eliminações de variáveis de tipo, de acordo com algumas modalidades. O tipo de eliminação pertence ao uso de genéricos dentro de uma linguagem de programação (por exemplo, a linguagem Java). Quando realiza uma operação de eliminação de tipo, um compilador pode ser configurado para substituir todos os parâmetros de tipos em tipos genéricos com suas ligações ou com um tipo de Objeto se os parâmetros de tipo forem não ligados. O código de byte gerado pode, desse modo, conter apenas classes ordinárias, interfaces e métodos. Adicionalmente, um compilador que realiza uma operação de eliminação de tipo pode preservar segurança de tipo, como por meio de inserções de conversões de tipos, se necessário, e pode gerar métodos de ponte para preservar polimorfismo em tipos genéricos estendidos. Desse modo, em algumas modalidades, a eliminação pode ser pensada como realizar verificação de tipo em tempo de compilação enquanto executa em um sistema do tipo mais fraco, como para uso com um sistema de execução eficaz, mas do tipo fraco.
[0017] Adicionalmente, a eliminação de tipo pode ser usada para outras situações além de com genéricos. Por exemplo, um sistema de tempo de execução pode não incluir um conjunto completo de códigos de byte separados para todos os tipos. Em vez disso, alguns tipos podem ser codificados com o uso de um código de byte correspondente para um tipo compatível (possibilidade após o compilador verifica as propriedades de sistema de tipo de operações para esses tipos). Por exemplo, um sistema de tempo de execução pode não incluir um conjunto completo de códigos de byte separados para byte e/ou booleano curtos, mas pode, em vez disso, usar os códigos de byte correspondentes para função de arredondamento após verificar as propriedades de sistema de tipo de operações em bytes e/ou booleanos curtos.
[0018] Além disso, os metadados no arquivo de classe anotado podem não impedir que o arquivo de classe anotado seja usado diretamente (por exemplo, usado para carregar a classe diretamente). Desse modo, conforme descrito no presente documento de acordo com diversas modalidades, um parâmetro de tipo genérico pode ser permitido para estar na faixa sobre o conjunto não ligado de virtualmente todos os tipos (por exemplo, ou sobre um conjunto ligado de tipos que incluem pelo menos um tipo que não é uma referência, como int).
[0019] Desse modo, a especialização dinâmica acionada por metadados pode permitir arquivos de classe para realizar trabalho duplo como classes diretamente usáveis (por exemplo, quando instanciadas com tipos de referência - promover carregamento e compartilhamento de classe rápido) e especialização sob demanda quando instanciadas com tipos primitivos, enquanto, ao mesmo tempo, minimiza o trabalho de tempo de execução de especialização mediante a pré-computação transformadas de especialização e que armazena as mesmas como metadados no arquivo de classe.
[0020] Na descrição detalhada a seguir, diversos detalhes específicos são apresentados para fornecer um entendimento completo de matéria reivindicada. No entanto, será compreendido que aqueles versados na técnica que reivindicaram a matéria podem ter praticado sem esses detalhes específicos. Em outros exemplos, métodos, aparelhos ou sistemas não são descritos em maiores detalhes abaixo devido ao fato de que os mesmos são conhecidos por um indivíduo de habilidade comum na técnica a fim de não obscurecer matéria reivindicada.
[0021] Embora diversas modalidades sejam descritas no presente documento a título de exemplificação para diversas modalidades e desenhos ilustrativos, aqueles versados na técnica irão reconhecer que as modalidades não são limitadas às modalidades ou desenhos descritos. Deve ser entendido que os desenhos e a descrição detalhada nas mesmas não se destinam a limitar as modalidades à forma particular revelada, mas ao contrário, a intenção é cobrir todas as modificações, equivalentes e alternativas que são abrangidas dentro do espírito e do escopo da revelação. Quaisquer categorias usadas no presente documento são para propósitos organizacionais apenas e não se destinam a ser usadas para limitar o escopo da descrição. Conforme usado durante todo este pedido, a palavra "pode" é usada em um sentido permissivo (isto é, significa que tem o potencial para), em vez do sentido mandatório (isto é, significa deve). De modo similar, as palavras “inclui”, “incluir” e “que inclui” significam incluir, mas sem limitação.
[0022] Algumas porções da descrição detalhada a seguir são apresentadas em termos de algoritmos ou representações simbólicas de operações em sinais digitais binários armazenados dentro de uma memória de um aparelho específico ou dispositivo de computação ou plataforma de propósito especial. No contexto deste relatório descritivo particular, o termo aparelho específico ou similares inclui um computador de propósito geral uma vez que o mesmo é programado para realizar funções particulares referentes às instruções de software de programa. As descrições algorítmicas ou representações simbólicas são exemplos de técnicas usadas por aqueles de habilidade comum no processamento de sinal ou técnicas relacionadas para transportar a substância de seu trabalho para outros indivíduos versados na técnica. Um algoritmo é no presente documento e é, em geral, considerado como sendo uma sequência autoconsistente de operações ou processamento de sinal que leva a um resultado desejado. Nesse contexto, as operações ou o processamento envolvem a manipulação física de quantidades físicas. Tipicamente, embora não necessariamente, tais quantidades podem tomar a forma de sinais magnéticos ou elétricos com capacidade de serem armazenados, transferidos, combinados, comparados ou, de outro modo, manipulados. Provou-se conveniente em determinados momentos, principalmente por razões de uso comum, para se referir a tais sinais como bits, dados, valores, elementos, símbolos, caracteres, termos, números, numerais ou similares. Deve-se compreender, no entanto, que todos esses termos ou termos similares devem ser associados às quantidades físicas adequadas e são rótulos meramente convenientes. A menos que especificamente indicado de outro modo, conforme evidente a partir da discussão a seguir, é verificado que durante toda essa discussão do relatório descritivo que utiliza termos como “processamento”, “computação”, “cálculo”, “determinação” ou similares se referem a ações ou processos de um aparelho específico, como um computador de propósito especial ou a dispositivo de computação eletrônico de propósito especial similar. No contexto deste relatório descritivo, portanto, um computador de propósito especial ou um dispositivo de computação eletrônico de propósito especial similar tem capacidade para manipular ou transformar sinais, tipicamente representados como quantidades eletrônicas ou magnéticas físicas dentro de memórias, registros ou outros dispositivos de armazenamento de informações, dispositivos de transmissão ou dispositivos de exibição do computador de propósito especial ou dispositivo de computação eletrônico de propósito especial similar.
[0023] Agora, em relação à Figura. 1 que ilustra um fluxo de trabalho para compilar e executar um programa de computador especificado em uma linguagem de independente de plataforma, orientada por objeto de alto nível que sustenta tipos de dados primitivos e de referência, e diversos métodos, recursos e aperfeiçoamentos relacionados à especialização dinâmica acionada por metadados conforme descrito no presente documento, de acordo com diversas modalidades. Para propósitos de ilustração, a descrição a seguir é fornecida amplamente no contexto com o uso da linguagem de programação JavaTM. No entanto, é verificado que as técnicas descritas podem ser usadas com virtualmente qualquer linguagem de programação orientada por objeto que sustenta múltiplas espécies de tipos (como tipos primitivos, tipos de referência, tipos de gravação, tipos de união, etc.) e especialização dos mesmos em contextos apropriados.
[0024] De acordo com a modalidade ilustrada, o fluxo de trabalho pode começar quando um compilador, como compilador 120, pode ser implantado em um ou mais dispositivos de computação e pode receber código-fonte para um programa de computador, como código-fonte 110. Em diversas modalidades, o código-fonte 110 pode ser especificado em diversas linguagens de programação independentes de plataforma, orientadas por objeto e/ou de alto nível, como JavaTM e/ou outras linguagens. Por exemplo, o código-fonte pode ser fornecido como um conjunto de arquivos .java em modalidades em que JavaTM está sendo usada. Em algumas modalidades, o código-fonte 110 pode ser especificado com o uso de uma combinação de linguagens, que podem incluir um ou mais linguagens intermediárias e/ou de baixo nível (por exemplo, montagem). Em algumas modalidades, pelo menos alguns dos códigos-fonte podem inicialmente ser escritos em uma linguagem de alto nível dinamicamente tipificada, como Python ou Ruby, enquanto em outras modalidades, todos os códigos-fonte podem estar em uma linguagem estaticamente tipificada como JavaTM. Em geral, uma classe pode ser considerada um tipo definido por usuário ou estrutura de dados que podem incluir dados, variáveis, funções, métodos e/ou outros atributos como membros e que representam uma definição, plano gráfico, ou modelo, para criar objetos de programação de um tipo específico. Uma classe pode fornecer valores iniciais para membros e implantações de dados para funções e métodos de membro. As classes são frequentemente incluídas em livrarias. Uma livraria pode ser considerada uma coleção de recursos usados por programas ou aplicativos de software. Uma livraria pode incluir qualquer um de diversos tipos de recursos que incluem, porém, sem limitação, dados, documentação, classes, sub-rotinas e/ou especificações de tipo, de acordo com algumas modalidades. Uma livraria pode ser organizada de modo a ser utilizada por mais de um aplicativo (possibilidade ao mesmo tempo) e pode promover reutilização fornecendo-se recursos de modo que os aplicativos não tenham que implantar (ou reimplantar) o mesmo comportamento.
[0025] O compilador 120 pode analisar o código-fonte 110 para produzir uma versão executável do programa ou arquivos de código de byte, como arquivo(s) de classe anotado(s) 130 (por exemplo, arquivos de .classe ou arquivos .jar no caso de JavaTM) na modalidade representada. Tipos diferentes de formatos de código executável podem ser usados em diversas modalidades; por exemplo, linguagem de máquina binária pode ser usada em vez de códigos de byte. Em alguns cenários, partes do código executável (por exemplo, arquivos de classe anotados 130) podem estar em código de byte enquanto outras estão em uma linguagem de máquina binária nativa.
[0026] Como parte de compilar código-fonte de programa 110 em código executável (por exemplo, arquivos de classe anotados 130), o compilador 120 pode realizar uma sequência de operações de análise e gerar diversas estruturas de dados intermediários antes de gerar a versão executável, como aplicar ou implantar especialização dinâmica acionada por metadados, de acordo com algumas modalidades. Por exemplo, o compilador pode aplicar uma operação de eliminação de tipo com o uso de uma forma codificada (anotada ou decorada) de um elemento de programa em uma classe genérica, desse modo, arquivo de classe anotado criado 130. Conforme verificado acima, a forma codificada do elemento de programa pode incluir metadados que indicam que tipo de variáveis da declaração de classe (ou método) foi apagado e de que tipos são as eliminações de variáveis de tipo.
[0027] Adicionalmente, os metadados podem incluir diversos tipos de informações relacionadas a especialização. Por exemplo, em algumas modalidades, a especialização dinâmica acionada por metadados pode envolver a especialização de diversos elementos que incluem, porém, sem limitação, interfaces de método, interfaces de classe, descrições de dados (por exemplo, campos de dados) e/ou instruções de máquina (por exemplo, códigos de byte). Desse modo, em um exemplo, os metadados podem indicar que uma instrução opera sobre valores de variáveis de tipo, valores de tipos de referência e/ou declarações de classe ou método. De modo similar, os metadados podem indicar que um argumento indica tipos que são eliminações das variáveis de tipo da classe ou declaração de método. Adicionalmente, os metadados podem indicar que um ou mais tipos são a eliminação de tipos parametrizados que usam variáveis de tipo da declaração de classe, como argumentos de tipo. Desse modo, metadados (por exemplo, a forma codificada) podem indicar qualquer um de diversos tipos de informações relacionadas à especialização, de acordo com modalidades diferentes.
[0028] Em algumas modalidades, um compilador, como compilador 120, que é configurado para implantar especialização dinâmica acionada por metadados, pode reter determinados tipos de informações que, tradicionalmente, podem não ter sido retidas durante o processo de compilação. Por exemplo, em uma modalidade, o compilador 120 pode reter informações utilizadas como parte de realizar uma eliminação. O compilador pode incluir (pelo menos parte de) tais informações no arquivo de classe anotado 130, como metadados relacionados à especialização.
[0029] Conforme ilustrado na Figura 1, o arquivo de classe anotado 130 pode ser passado para um ambiente de execução, como ambiente de tempo de execução virtualizado 140, que executa o código em uma plataforma de execução 102 criando, desse modo, diversos dados de saída e/ou comportamento. O ambiente de tempo de execução virtualizado 140 pode, por sua vez, compreender diversos componentes diferentes, como um gerenciamento de memória 160, um verificador de código de byte 170 (por exemplo, para verificar a validade do código executável) e/ou um interpretador e/ou um compilador just-in-time (JIT) 180, de acordo com diversas modalidades. O compilador JIT pode, em algumas modalidades, ser responsável por traduzir alguns ou todos os códigos de byte (por exemplo, porções de código de byte amplamente usadas) em código máquina de plataforma específica para aprimorar desempenho da execução de programa. Um ambiente de tempo de execução virtualizado 140 também pode incluir código para implantar diversas livrarias de interface de programação de aplicativo (API) 190 em algumas modalidades. O ambiente de tempo de execução virtualizado 140 pode ser executado no topo de software de nível inferior, como um sistema operacional 192 em algumas modalidades.
[0030] Em modalidades diferentes, a saída ou comportamento produzido como resultado da execução do código compilado pode incluir dados armazenados em diversos níveis de memória de sistema (por exemplo, objetos na memória e/ou estruturas de dados), em armazenamento persistente (por exemplo, arquivos em um sistema de arquivo), etc. O comportamento também pode incluir diversas funcionalidades de programa, como exibir saída em uma tela, enviar mensagens através de uma rede e/ou interagir de outro modo com diversos usuários e/ou componentes.
[0031] Em algumas modalidades, o ambiente de tempo de execução virtualizado 140 pode implantar especialização dinâmica acionada por metadados com o uso do(s) arquivo(s) de classe anotado(s) 130 gerados por compilador 120. De acordo com algumas modalidades, o ambiente de tempo de execução virtualizado 140 que implanta especialização dinâmica acionada por metadados pode, quando carregar uma classe a ser especializada com uma parametrização particular, usar arquivo de classe anotado 130 como um modelo (junto com os parâmetros com os quais se especializa) e pode produzir uma nova classe que é a especialização particular da classe que é especializada. Por exemplo, quando especializa uma classe, um conjunto de parâmetros de tipo pode ser parte da entrada para a especialização (por exemplo, List<anyT> pode ser especializada com o uso de T=int de arredondamento como um parâmetro para obter List<int>). Em geral, um arquivo de classe anotado 130 pode ser considerado um arquivo de classe marcado com metadados relacionados à especialização. Além disso, um arquivo de classe anotado 130 pode ser tornado em uma nova classe que é uma especialização da classe anotada, de acordo com diversas modalidades.
[0032] Conforme verificado acima, o arquivo de classe anotado pode ser usável diretamente (por exemplo, para carregar a classe em situações nas quais suas variáveis de tipo são apagadas) e como um modelo para realizar especialização da classe (ou outros elementos dentro do arquivo de classe). A Figura 2 é um diagrama de blocos lógico que ilustra o uso de um arquivo de classe anotado de acordo com especialização dinâmica acionada por metadados, como em uma modalidade. Em algumas modalidades, o arquivo de classe anotado 130 pode incluir um único artefato, como declaração de classe 200, que pode ser usado como uma classe executável (por exemplo, uma classe que pode ser carregada e usada como é), mas que também pode ser anotada de modo adequado, como por meio da inclusão de metadados 210, de modo que o mesmo possa ser usado como um modelo para gerar versões especializadas daquela classe. De modo similar, uma declaração de método em um arquivo de classe também pode ser anotada de modo que a mesma possa ser usada diretamente e/ou usada como um modelo para gerar versões especializadas da declaração de método.
[0033] Em algumas modalidades, um arquivo de classe anotado 130 pode ser usável por ambientes de tempo de execução virtualizados herdados (por exemplo, aqueles que não utilizam especialização dinâmica acionada por metadados, conforme descrito no presente documento), bem como por ambiente de tempo de execução virtualizado que utilizam especialização dinâmica acionada por metadados, conforme descrito no presente documento. Conforme ilustrado na Figura 2, um arquivo de classe anotado 130 pode incluir uma forma codificada de um elemento de programa, como declaração de classe anotada 200. A declaração de classe 200 pode incluir metadados 210 usáveis por ambiente de tempo de execução virtualizado 140 para gerar uma ou mais classe(es) especializada(s) 270, de acordo com uma modalidade.
[0034] Adicionalmente, arquivo de classe anotado 130 e declaração de classe 200 (que incluem metadados 210) também podem ser diretamente usáveis (por exemplo, carregáveis) por ambiente de tempo de execução herdado 250 (por exemplo, um ambiente de tempo de execução não configurado para implantar especialização dinâmica acionada por metadados), para carregar classe 260, de acordo com algumas modalidades. Por exemplo, o arquivo de classe anotado 130 e/ou a declaração de classe 200 podem incluir metadados 210 estruturados de modo que ambiente de tempo de execução herdado 250 possa não reconhecer e, desse modo, pode ter capacidade de ignorar, as anotações (por exemplo, os metadados 210), mas ambiente de tempo de execução herdado 250 pode ter capacidade de usar o arquivo de classe da maneira tradicional (por exemplo, não utilizar especialização dinâmica acionada por metadados) para carregar classe 260 da declaração de classe 200.
[0035] Por exemplo, um arquivo de classe anotado de acordo com especialização dinâmica acionada por metadados pode incluir uma instrução de aload anotada. Um ambiente de tempo de execução virtualizado herdado pode identificar a carga a anotada como uma instrução de aload tradicional e executar a mesmas no modo normal. No entanto, um ambiente de tempo de execução virtualizado configurado para utilizar especialização dinâmica acionada por metadados pode reconhecer e utilizar a instrução anotada para realizar especialização. Por exemplo, em uma modalidade, o ambiente de tempo de execução virtualizado 140 pode reconhecer uma instrução de aload anotada e realizar uma especialização de tipo particular substituindo-se a instrução de aload com outra instrução mais apropriada para a especialização de tipo particular.
[0036] Desse modo, em algumas modalidades, em vez de gerar apenas um modelo que pode não ser diretamente usável como um arquivo de classe (por exemplo, é executável como) ou gerar diversas classes antecipadas (por exemplo, uma para cada instanciação), um único arquivo de classe pode ser gerado que é diretamente usável, mas que também pode ser marcado (por exemplo, anotado) com informações extras que permitem que o mesmo seja usado como um modelo para gerar especializações (por exemplo, no tempo de execução).
[0037] A Figura 3 é um fluxograma que ilustra uma modalidade de um método para gerar um arquivo de classe anotado como parte de especialização dinâmica acionada por metadados, de acordo com uma modalidade. Conforme ilustrado pelo bloco 300, a compilador, como compilador 120, pode analisar um fluxo de código-fonte para produzir um arquivo de classe anotado com base em uma declaração de classe definida no código-fonte, de acordo com uma modalidade. Por exemplo, o compilador 120 pode analisar código-fonte 110 para gerar arquivo(s) de classe anotado(s) 130, de acordo com uma modalidade. Embora a Figura 2 descreva especialização dinâmica acionada por metadados em relação a uma declaração de classe, conforme verificado acima, especialização dinâmica acionada por metadados pode ser usada com diversos outros tipos de elementos de programa, como declarações de método, instruções, argumentos e virtualmente qualquer elemento de programa que mova ou manipule dados e/ou tipos de dados.
[0038] Adicionalmente, o compilador 120 pode aplicar uma operação de eliminação de tipo a um fluxo de instruções no código-fonte, em que o fluxo de instruções se destina à execução por um ambiente de execução virtualizado, conforme ilustrado pelo bloco 310. Por exemplo, em uma modalidade, o código-fonte 110 pode incluir uma definição de classe que pode precisar ser especializada de acordo com uma parametrização de tipo particular. Adicionalmente, compilador 120 pode criar uma forma codificada (por exemplo, anotada) de um elemento de programa da declaração de classe, em que a forma codificada do elemento de programa inclui informações de especialização de especificação de metadados relacionadas ao elemento de programa, conforme mostrado no bloco 320. Desse modo, em algumas modalidades, instruções de código de byte tipificadas podem ser especializadas com base em metadados, como por meio da marcação (por exemplo, anotando) de alguns códigos de byte como sendo derivados da eliminação de uma variável de tipo particular T, de modo que na especialização, as mesmas possam se tornar especializadas por meio de uma transformação mecânica e verificável. Por exemplo, algumas instruções de código de byte tipificadas podem ser especializadas com base em códigos de byte de “aload” de marcação de metadados como "Eu sou aload devido ao fato de que sou derivado da eliminação de variável de tipo T", de modo que na especialização, as mesmas possam se tornar códigos de byte de iload (como um exemplo) por meio de uma transformação mecânica e verificável. Em algumas modalidades, as informações de especialização podem ser, ou podem ser consideradas, o resultado da captura de informações de tipo compiladas no tempo, apagadas de outro modo que podem ser usadas para reconstruir tipos no tempo de execução.
[0039] Por exemplo, a Figura 4 é um diagrama de blocos lógico que ilustra uma operação de eliminação de tipo aplicada a um fluxo de instruções, de acordo com uma modalidade. Conforme mostrado na Figura 4, o compilador 120 pode analisar código-fonte 110 e pode aplicar um tipo de eliminação em um ou mais elementos de programa, como definição de classe 400 ou um ou mais elementos de definição de classe 400.
[0040] A especialização dinâmica acionada por metadados de classes genéricas pode envolver especialização dinâmica acionada por metadados de assinaturas de membro. Por sua vez, a especialização dinâmica acionada por metadados de assinaturas de membro pode envolver marcar (por exemplo, anotar ou pode ser criada de uma forma codificada de) algumas ocorrências de tipos de referências em assinaturas de método/campo como sendo a eliminação de variável de tipo T, de modo que na especialização, a mesma possa de tornar I, de acordo com algumas modalidades. Em algumas modalidades, usos de tipos apagados em assinaturas de membro ou usos de outro tipo (por exemplo, supertipos, conversões, instanceof) podem ser anotados como sendo derivados da eliminação de alguma variável de tipo T, de modo que na especialização, os mesmos possam ser substituídos com uma descrição apropriada de um tipo especializado enquanto, ao mesmo tempo, minimiza o trabalho de tempo de execução de especialização mediante as transformadas de especialização de pré-computação e que armazena as mesmas como parte dos metadados no arquivo de classe anotado 130.
[0041] Por exemplo, o compilador 120 pode aplicar uma operação de eliminação de tipo na definição de classe 400. Conforme mostrado na Figura 4, a definição de classe 400 pode incluir o exemplo a seguir de classe de Box, de acordo com uma modalidade exemplificativa: class Box<T> { private final T t; public Box(T t) { this.t = t; } public T get() { return t; } }
[0042] Compilar essa classe com um compilador tradicional (por exemplo, aquele não configurado para implantar especialização dinâmica acionada por metadados) pode render o código de byte a seguir: class Box extends java.lang.Object{ private final java.lang.Object t; public Box(java.lang.Object); Código: 0: aload_0 1: invokespecial #1; //Method java/lang/Object."<init>":()V 4: aload_0 5: aload_1 6: putfield #2; //Field t:Ljava/lang/Object*; 9: return public java.lang.Object get(); Código: 0: aload_0 1: getfield #2; //Field t:Ljava/lang/Object; 4: areturn }
[0043] Diversas abordagens podem ser usadas para representar as informações genéricas necessárias no código de byte, de acordo com diversas modalidades. Por exemplo, em uma modalidade, uma representação completamente genética no nível de código de byte pode ser usada. Em outra modalidade, tipos e códigos de byte podem ser rotulados (por exemplo, marcados ou anotados) para indicar se aquele tipo ou código de byte está diretamente relacionado a um tipo daquele que foi apresentado no arquivo de fonte ou na eliminação de alguma variável de tipo. Em algumas modalidades, a especialização com o uso de especialização dinâmica acionada por metadados, pode ser considerada e mecânica (por exemplo, automática e/ou direta), sem qualquer análise ou verificação de tipo de fluxo de dados adicional no tempo de execução além da verificação de código de byte. Desse modo, em algumas modalidades, o resultado de especialização pode ser verificável com o uso de regras de verificação existentes. Em conformidade, as informações de conversão podem ser incluídas nos metadados do arquivo de classe anotado que, por sua vez, podem simplificar a complexidade de componentes que realizam especialização. Desse modo, em algumas modalidades, o código de byte resultante pode ser verificado como normal (por exemplo, com processos de verificador herdados).
[0044] O compilador 120 pode especializar a classe Box de exemplo precedente com T=int de arredondamento, como uma ilustração exemplificativa de aplicação de uma operação de eliminação de tipo, conforme descrito acima em relação aos blocos 310 e 320 da Figura 3. Desse modo, no código de byte exemplificativo acima (por exemplo, a versão compilada de classe Box), algumas ocorrências de Objeto podem realmente significar Objeto, mas algumas podem significar erasure(T). De acordo com algumas modalidades, se essa classe tivesse que ser especializada para T=int de arredondamento, a assinatura de get() pode retornar int.
[0045] A declaração de classe anotada 410 na Figura 4 (e na listagem a seguir) mostra o mesmo código de byte marcado para preservar informações de eliminação, de acordo com algumas modalidades de especialização dinâmica acionada por metadados. Em algumas modalidades, um arquivo de classe pode ser anotado com metadados que podem incluir um ou mais caracteres ou símbolos (por exemplo, um asterisco) que indica assinaturas, instruções, referências, tipos, etc., que podem precisar ser ajustados durante a especialização. Conforme mostrado na declaração de classe anotada 410, um ‘*’ próximo a um tipo de nome ou código de byte pode indicar qual o tipo no arquivo de classe é derivado da eliminação de T e, portanto, pode ser ajustado durante a especialização, de acordo com algumas modalidades. Essa representação exemplificativa é específica a uma única variável de tipo e é apenas para propósitos de ilustração. class Box extends java.lang.Object{ private final java.lang.Object* t; public Box(java.lang.Object*); Código: 0: aload_0 1: invokespecial #1; //Method java/lang/Object."<init>":()V 4: aload_0 5: aload_1* 6: putfield #2; //Field t:Ljava/lang/Object*; 9: return public java.lang.Object* get(); Código: 0: aload_0 1: getfield #2; //Field t:Ljava/lang/Object*; 4: areturn* }
[0046] Desse modo, conforme mostrado na declaração de classe anotada 410, diversos elementos de programa, como instrução de código de byte aload_1, bem como tipo de dados declaração java.lang.Object podem ser anotados com “*” para indicar que os mesmos são derivados da eliminação de T e, portanto, podem ser ajustados durante a especialização, de acordo com algumas modalidades.
[0047] Embora os exemplos acima incluam anotações utilizar um asterisco, outras formas de anotação podem ser usadas em outras modalidades. Por exemplo, em outras modalidades, outros símbolos e/ou caracteres podem ser usados para indicar diversos tipos de informações de especialização dentro de um arquivo de classe anotado. Adicionalmente, em ainda outras modalidades, metadados que indicam informações de especialização podem ser incluídos em estruturas específicas, separadas dentro do arquivo de classe. Por exemplo, em uma modalidade, um arquivo de classe anotado pode incluir uma ou mais estruturas de dados que listam ou que indicam de outro modo quais elementos de programa podem precisar ser ajustados durante a especialização.
[0048] Por exemplo, a declaração de classe anotada 410 pode incluir metadados que indicam uma instrução de aload_1 adotada. Um ambiente de tempo de execução virtualizado herdado pode identificar a aload anotada como uma instrução de carga a tradicional e simplesmente usar uma aload. No entanto, o ambiente de tempo de execução virtualizado 140 pode reconhecer e utilizar a instrução anotada para realizar especialização. Desse modo, em uma modalidade, o ambiente de tempo de execução virtualizado 140 pode realizar uma especialização de tipo particular substituindo-se a instrução de aload_1 por outra instrução mais apropriada para a especialização de tipo particular.
[0049] O exemplo discutido acima inclui apenas um conjunto simplificado de elementos de programa a ser especializado e, consequentemente, ser anotado. Em outras modalidades, no entanto, mais elementos de programa e/ou elementos de programa diferentes podem precisar ser transformados durante a especialização e, portanto, podem ser anotados pelo compilador 120. Além dos bytes “tipificados” nos quais a instrução de aload acima é um exemplo (outros exemplos incluem areturn e aastore), outros códigos de byte (como dup) também podem ser anotados. Em geral, qualquer código de byte que assume um operando de “classe” (por exemplo, new, checkcast, load-class-literal, gfield, putfield, invoke, etc.) também pode ser anotado pelo compilador 120, de acordo com diversas modalidades.
[0050] Por exemplo, continuando no exemplo de classe Box, qualquer instrução que realize: getfield Box, “t”
[0051] pode precisar ser ajustada quando T é especializada para int, (por exemplo, devido ao nome da classe para Box<int> poder ser diferente do nome da classe para Box apagada). Desse modo, em algumas modalidades, qualquer instrução que se refira a um tipo de por nome pode preciso ter aquele operando ajustado durante a especialização se a especialização puder fazer com que o nome seja alterado e, consequentemente, que a instrução (e/ou o operando) possa ser anotada.
[0052] Adicionalmente, em algumas modalidades, alguns códigos de byte podem ser anotados para incluir múltiplos tipos de informações de especialização. Por exemplo, os metadados associados a um código de byte anotado particular podem especificar tanto a classe envolvida (por exemplo, um receptor para uma chamada de método, uma classe de hospedagem para uma operação de campo, etc.), bem como o tipo de dados que são manipulados (por exemplo, o tipo do campo, o tipo de retorno de uma invocação de método, etc.).
[0053] Novamente agora com referência à Figura 3, o compilador 120 também pode incluir o codificado para o elemento de programa na declaração de classe no arquivo de classe anotado, conforme ilustrado pelo bloco 330. Conforme verificado acima, o arquivo de classe anotado pode ser usável diretamente (por exemplo, para carregar a classe) e como um modelo para realizar a especialização da classe (ou outros elementos dentro do arquivo de classe). Conforme verificado acima, em algumas modalidades, um compilador configurado para implantar especialização dinâmica acionada por metadados, como compilador 120, pode reter determinados tipos de informações que, tradicionalmente, podem não ter sido retidos durante o processo de compilação. Por exemplo, compilador 120 pode reter informações utilizadas como parte de realizar uma operação de eliminação e incluir tais informações no arquivo de classe anotado 130 como metadados 210 que especificam diversos tipos de informações de especialização.
[0054] Em algumas modalidades, os metadados podem ser utilizados de mais de uma maneira. Por exemplo, os metadados podem ser usados para especializar assinaturas de membros de classe (por exemplo, assinaturas de classe ou método). Adicionalmente, os metadados podem ser usados para especializar o próprio byte código (por exemplo, para especializar códigos de byte ou códigos de operação individuais). Por exemplo, os códigos de byte gerados para um ambiente de tempo de execução virtualizado particular podem ser amplamente tipificados e, portanto, instruções diferentes podem precisar ser usadas com base no tipo (por exemplo, o tipo especializado) que é manipulado (por exemplo, uma instrução diferente pode ser usada para mover ou copiar um número inteiro que pode ser usado para mover ou copiar um objeto).
[0055] Desse modo, os metadados usados para anotar um arquivo de classe podem incluir informações sobre qual tipo de dados é esperado para uma instrução particular e quando aquela instrução é especializada para um tipo particular, algumas instruções (por exemplo, códigos de byte) podem ter que ser ajustadas (por exemplo, alteradas) a fim de usar uma instrução apropriada para o tipo particular (por exemplo, especializado) que é manipulado. Por exemplo, uma instrução que espera manipular (por exemplo, mover, copiar, etc.) um objeto pode ser ajustada (por exemplo, alterada para uma versão diferente daquela instrução) a fim de lidar de modo apropriado com um tipo diferente (especializado) (por exemplo, uma int, double, float, etc.).
[0056] Em algumas modalidades, especialização dinâmica acionada por metadados pode ser considerada uma maneira para utilizar genéricos de modo que um arquivo de classe possa ser gerado, mas que pode ser especializada de modo dinâmico no tempo de execução. Por exemplo, o arquivo de classe pode ser usado (ou interpretado) diretamente com nenhuma transformação, mas também pode ser usado como um modelo para especialização no tempo de execução. A fim de permitir que o arquivo de classe anotado gerado como parte de especialização dinâmica acionada por metadados seja usado diretamente, o arquivo de classe pode ser gerado com o uso de eliminação de tipo para as informações de tipo mais comuns. No entanto, o arquivo de classe pode ser anotado com informações adicionais que permitem especialização de tipo no tempo de execução.
[0057] Em algumas modalidades, a(s) interpretação(ões) mais comum(s) pode(m) ser pré-instanciada(s) - desse modo, evitando potencialmente uma etapa de tradução extra no tempo de execução (por exemplo, para a interpretação mais comum). Por exemplo, em uma modalidade, ArrayList<int> e ArrayList<long> pode ser pré-instanciada para ArrayList.
[0058] Conforme verificado acima, dentro de um arquivo de classe anotado 130, um ou mais elementos de programa (por exemplo, assinaturas de classe e/ou método) podem incluir metadados 210 que descrevem como modificar o elemento de programa para especialização, de acordo com diversas modalidades. Em outras palavras, os metadados 210 podem incluir informações que descrevem quais porções do elemento de programa (por exemplo, quais instruções, declaração, argumentos, etc.) podem ter que ser ajustadas durante a especialização. Por exemplo, um arquivo de classe pode incluir uma assinatura de classe que, por padrão, define uma lista de objetos, mas que pode ser anotada para incluir metadados que identificam uma ou mais porções (por exemplo, instruções, referências, etc.) que podem ter que ser ajustadas quando especializam a assinatura de classe para definir uma lista de derivações (como um exemplo).
[0059] Em algumas modalidades, um arquivo de classe anotado pode ser usável por ambientes de tempo de execução virtualizados herdados (por exemplo, aqueles que não utilizam especialização dinâmica acionada por metadados, conforme descrito no presente documento), bem como por ambiente de tempo de execução virtualizado que utilizam especialização dinâmica acionada por metadados, conforme descrito no presente documento. Por exemplo, o arquivo de classe anotado pode incluir metadados estruturados de modo que um ambiente de tempo de execução virtualizado herdado possa ter capacidade de ignorar as anotações (por exemplo, os metadados) que não reconhecer, mas o ambiente de tempo de execução virtualizado herdado pode ter capacidade para usar o arquivo de classe da maneira tradicional (por exemplo, não utilizar especialização dinâmica acionada por metadados).
[0060] Por exemplo, um arquivo de classe anotado de acordo com especialização dinâmica acionada por metadados pode incluir uma instrução de aload anotada. Um ambiente de tempo de execução virtualizado herdado pode identificar a aload anotada como uma instrução de aload tradicional e simplesmente usar uma aload. No entanto, um ambiente de tempo de execução virtualizado configurado para utilizar especialização dinâmica acionada por metadados pode reconhecer e utilizar a instrução anotada para realizar especialização. Por exemplo, em uma modalidade, o ambiente de tempo de execução virtualizado 140 pode reconhecer uma instrução de aload anotada e realizar uma especialização de tipo particular substituindo-se a instrução de aload com outra instrução mais apropriada para a especialização de tipo particular.
[0061] Embora descrita no presente documento principalmente em relação às assinaturas e instruções de classe, a especialização dinâmica acionada por metadados também pode ser aplicada às assinaturas de método, assinaturas de classe e/ou assinaturas de dados, de acordo com algumas modalidades.
[0062] Por exemplo, se fornecida para a definição de classe a seguir: class ArrayList<T> implanta ListOf<T>
[0063] Se T for especializado com função de arredondamento, aquela especialização também pode ter que ser propagada para a classe super, resultando, desse modo, na assinatura de classe a seguir: class ArrayList<função de arredondamento> estende ListOf<função de arredondamento>
[0064] De modo similar, se um método voltar para T, o mesmo pode ser escrito novamente para retornar para a função de arredondamento e um campo que é de tipo ArrayList<T> pode ser escrito novamente para ser do tipo ArrayList<função de arredondamento>, de acordo com algumas modalidades. Desse modo, virtualmente, qualquer coisa que pode ser considerada como tendo um tipo de ou ser associada a (por exemplo, que pode fazer referência, mover, manipular, etc.) um tipo de (por exemplo, variáveis locais, valores de coluna, etc.) pode ser anotada em um arquivo de classe e ajustada mediante a especialização.
[0065] Em geral, a especialização dinâmica acionada por metadados pode ser aplicada a virtualmente qualquer coisa que transporta informações de tipo (por exemplo, código, assinaturas, tabelas laterais usadas por depuração, criadores de perfis, coleta de lixo, etc.), de acordo com diversas modalidades. Por exemplo, ambientes de execução diferentes podem exigir dados diferentes seus respectivos formatos de entrada, mas a especialização dinâmica acionada por metadados pode se aplicar a todos os componentes do arquivo de classe particular que um ambiente de execução exige. Dois exemplos específicos de componentes de arquivo de classe aos quais a especialização dinâmica acionada por metadados se aplica podem ser assinaturas e instruções tipificadas. No entanto, em algumas modalidades, o mesmo processo de especialização pode ser aplicado a outras coisas, como tabelas de mapa de coluna usadas para verificação ou tabelas de tipo usadas para depuração, etc.
[0066] A Figura 5 é um fluxograma que ilustra uma modalidade de um método para especialização com o uso de especialização dinâmica acionada por metadados. Aspectos do método ilustrado na Figura 5 podem ser discutidos com o uso de um exemplo ilustrado pela Figura 6, que é um diagrama de blocos lógico que ilustra um exemplo de especialização com o uso de um arquivo de classe anotado de acordo com especialização dinâmica acionada por metadados, como em uma modalidade.
[0067] Conforme mostrado na Figura 5, um ambiente de tempo de execução virtualizado pode (por exemplo, no tempo de execução) determinar que um elemento de programa dentro de uma classe precisa ser especializado de acordo com uma parametrização de tipo particular, conforme mostrado no bloco 510. O ambiente de tempo de execução virtualizado pode, então, carregar um arquivo de classe que compreende uma forma codificada (por exemplo, anotada) do elemento de programa como um modelo, como no bloco 520 e, então, transformar o modelo de acordo com metadados no arquivo de classe para gerar uma nova classe que é especializada de acordo com a parametrização de tipo particular, como no bloco 530, de acordo com algumas modalidades. Ao carregar uma classe a ser especializada com um ambiente de tempo de execução virtualizado de parametrização particular 140 pode usar o arquivo de classe anotado como um modelo junto com diversos parâmetros com os quais se especializam para produzir uma nova classe que é a especialização particular daquela classe. Desse modo, um arquivo de classe anotado (por exemplo, uma classe marcada com metadados relacionados à especialização) pode ser tornado em uma nova classe que é uma especialização da classe anotada, de acordo com algumas modalidades.
[0068] Por exemplo, conforme mostrado na Figura 6, o ambiente de tempo de execução virtualizado 140 pode ser configurado para determinar que uma instância da classe Box precisa ser especializada de acordo com a parametrização de tipo particular, como com int. De acordo com uma modalidade, quando se especializa para T=int, instâncias de Objeto podem ser substituídas com função de arredondamento e códigos de byte a substituídos com aqueles i correspondentes. De modo similar, alguns dos códigos de byte " aload " podem se tornar códigos de byte " iload ".
[0069] Desse modo, como um exemplo, o ambiente de tempo de execução virtualizado 140 pode especializar a declaração de classe anotada 410, resultando em uma nova classe, ilustrada por declaração de classe especializada 600, mostrada na Figura 6 e abaixo: classe Box$T=int extends java.lang.Object{ private final int t; public Box$T=int(int); Código: 0: aload_0 1: invokespecial #1; //Method java/lang/Object."<init>":()V 4: aload_0 5: iload_1 6: putfield #2; //Field t:int; 9: return public função de arredondamento get(); Código: 0: aload_0 1: getfield #2; //Field t:int; 4: ireturn }
[0070] Desse modo, a instrução aload_1 anotada da declaração de classe anotada 410 pode ser transformada em uma instrução iload_1, visto que nesse exemplo, a classe Box está sendo especializada para int.
[0071] Novamente agora com referência à Figura 5, após transformar o modelo de acordo com os metadados para gerar a nova classe especializada, o ambiente de tempo de execução virtualizado 140 pode, então, carregar a nova classe para uso, como no bloco 540.
[0072] Adicionalmente, se nenhuma especialização for necessária, o arquivo de classe anotado também pode ser usado como é. Além disso, de acordo com algumas modalidades, a classe anotada (por exemplo, o modelo classe) pode verificar (por exemplo, de acordo com um verificador programático, como verificador de código de byte 170, que pode ser parte de um ambiente de tempo de execução virtualizado 140) como uma classe de eliminação. Adicionalmente, a especialização resultante também pode verificar corretamente. Em outras palavras, em algumas modalidades, a especialização dinâmica acionada por metadados pode não envolver qualquer alteração à maneira na qual um verificador trabalha. Adicionalmente, visto que a transformação de especialização pode ser mecânica, em algumas modalidades, pode ser possível eliminar a verificação do resultado da transformação de especialização, como por meio da verificação do algoritmo de transformação em vez das transformações de especialização individual reduzindo, desse modo, potencialmente o custo de tempo de execução de especialização.
[0073] Embora descritas acima em relação à implantação de especialização dinâmica acionada por metadados no tempo de execução, em algumas modalidades, uma ou mais das etapas descritas acima relacionadas à Figura 5 podem ser realizadas antes do tempo de execução. Por exemplo, em uma modalidade, a classe (ou outra assinatura) pode ser especializada no tempo de compilação e simplesmente carregada no tempo de execução, conforme descrito acima. Além disso, algumas classes podem ser especializadas no tempo de compilação, enquanto outras podem ser especializadas no tempo de execução, de acordo com modalidades diferentes.
[0074] A abordagem ilustrada acima e descrita no presente documento, pode ser direcionada para os genéricos apagados existentes. O código de byte para Box.class já pode ser apagado e adequado para uso direto com instanciações de referência. De acordo com algumas modalidades, os metadados podem ser adicionados de que modo que habilite os mesmos a também serem usados como um modelo para especialização de tempo de execução de instanciações primitivas.
[0075] Conforme mostrado no exemplo acima, códigos de byte de referência específica a serem adaptados de “areturn” para suas contrapartes de função de arredondamento específica, como “ireturn” (ou outros tipos primitivos ou tipos de valor) também pode ser marcado. De modo similar, em algumas modalidades, os componentes de assinaturas de campo ou método que precisam ser adaptados também podem ser marcados. Adicionalmente, atributos que indicam no atributo de código para identificar quais códigos de byte podem ser ajustados para cada variável de tipo especializável, e atributos que anotam quais componentes de assinaturas de campo ou método no agrupamento constante podem ser ajustados de modo similar. Isso pode, em algumas modalidades, tomar a forma de novos atributos de arquivo de classe e/ou novos tipos de agrupamento constante.
[0076] A abordagem descrita no presente documento representa meramente uma de muitas escolhas possíveis e que outras maneiras de anotação podem ser usadas em outras modalidades. Conforme verificado acima, embora os exemplos no presente documento usem um símbolo “*” para representar os metadados usados para comunicar informações relacionadas à especialização de instanciações primitivas, símbolos e/ou mecanismos diferentes também podem ser usados para o mesmo propósito, de acordo com diversas modalidades.
[0077] De acordo com diversas modalidades, a especialização pode ser considerada um componente da cadeia de ferramenta de compilação/execução. Em outras palavras, os sistemas que implantam especialização dinâmica acionada por metadados podem ter latitude para realizar especialização ou sob demanda no tempo de execução (por exemplo, se o ambiente de tempo de execução virtualizado desejar/tiver capacidade para realizar o mesmo), ou antecipado (por exemplo, antes do tempo de execução). Desse modo, em algumas modalidades, a especialização dinâmica acionada por metadados pode ser implantada de modo a iniciar (e/ou se especializar) no tempo de execução apenas em classes (ou métodos, referências, etc.) que são usadas. Em outras modalidades, no entanto, a especialização dinâmica acionada por metadados pode ser implantada de modo a gerar múltiplas especializações possíveis no tempo de compilação (por exemplo, antes do tempo de execução), de acordo com algumas modalidades.
[0078] Desse modo, a especialização dinâmica acionada por metadados pode envolver a capacidade para se especializar e/ou iniciar tão poucas ou quantas classes/métodos conforme desejado no tempo de compilação (por exemplo, antes do tempo de execução) e para se especializar e/ou iniciar de modo dinâmico quaisquer classes/métodos adicionais, conforme exigido no tempo de execução, de acordo com diversas modalidades. Em outras palavras, a especialização dinâmica acionada por metadados pode fornecer flexibilidade para determinar e ter vantagem sobre compensações, como entre tempo de início de aplicação (por exemplo, especialização/instanciação antes do tempo de execução) e tamanho de área ocupada (por exemplo, especialização/instanciação no tempo de execução).
[0079] A flexibilidade para especialização de atraso tão longa quanto o tempo de execução ou tão precoce quanto o tempo de compilação (por exemplo, com base em diversas preocupações de engenharia) - enquanto ainda usa o mesmo formato e o mesmo processo (por exemplo, as mesmas transformações de especialização) - pode ser considerado um recurso de especialização dinâmica acionada por metadados, de acordo com algumas modalidades.
[0080] Se for para especializar uma classe (ou outra assinatura) no tempo de compilação ou um tempo de execução, a mesma pode ser determinada com base em diversos critérios, de acordo com diversas modalidades. Por exemplo em uma modalidade, um compilador 120 (ou outra ferramenta de desenvolvimento de software) pode ser configurado para determinar quais classes (por exemplo, quais especializações) podem ser mais prováveis de serem usadas com base no código-fonte e pode especializar aquelas classes no tempo de compilação enquanto permite que outras classes (por exemplo, outras especializações) sejam especializadas no tempo de execução. Em outra modalidade, o número de classes a serem especializadas no tempo de compilação pode ter como base, pelo menos parcialmente, valores-alvo particulares relacionados ao tamanho de área ocupada de aplicativo e/ou velocidade de inicialização de aplicativo. Em ainda outras modalidades, um compilador pode utilizar uma combinação de uso de classes esperado, tamanho de área ocupada e/ou velocidade de inicialização quando determinar se as classes devem ser especializadas no tempo de compilação ou no tempo de execução.
[0081] Em geral, os critérios particulares usados para determinar se para especializar qualquer particular classe no tempo de compilação ou tempo de execução também pode ter como base, pelo menos em parte, na entrada de usuário (por exemplo, programador) - ou diretamente no código-fonte ou, de modo alternativo, por meio de um ou mais módulos de interface de usuário (por exemplo, de software de compilação de aplicativo), de acordo com uma modalidade.
[0082] Desse modo, os sistemas que implantam especialização dinâmica acionada por metadados podem realizar especialização antes (por exemplo, antes do tempo de execução) para gerar classes que são conhecidas por serem necessárias e, portanto, permitem que o aplicativo inicie mais rápido (por exemplo, enquanto possivelmente não gera cada especialização possível), enquanto também especializa de modo dinâmico classes no tempo de execução que não foram especializadas anteriormente.
[0083] Embora descrita acima relação à especialização de códigos de byte de tipo específico, a especialização dinâmica acionada por metadados também pode ser utilizada para instruções (por exemplo, códigos de byte) que manipulam diversos tipos de dados. Por exemplo, em um exemplo com base em Java, a especialização dinâmica acionada por metadados também pode ser utilizada em conjunto com, por exemplo, a duplicação, invocação, códigos de byte de getfield, bem como com estruturas de mapa de coluna, mapas de tipo variável locais, etc.
[0084] Adicionalmente, a especialização dinâmica acionada por metadados também pode ser utilizada por outros componentes e/ou serviços (ou autônomos ou parte de um ambiente de tempo de execução virtualizado), de acordo com algumas modalidades. Por exemplo, depuração, criação de perfil, tabelas de tipo variável locais, coleta de lixo, etc., também podem ter vantagem de especialização dinâmica acionada por metadados, conforme descrito no presente documento. Em geral, virtualmente qualquer aspecto de desenvolvimento de software, execução e/ou depuração que envolve manipular tipos de dados podem ter vantagem sobre e/ou implantar especialização dinâmica acionada por metadados. Desse modo, em algumas modalidades, as informações de especialização (por exemplo, conforme definido pela especialização dinâmica acionada por metadados) podem ser propagadas para um ou mais componentes, como para permitir que esses componentes determinem especificidades sobre os tipos de dados que estão sendo especializados e relacionados às versões especializadas de assinaturas que são usadas. Em outras palavras, as informações de tipo anotadas (por exemplo, os metadados) que estão no arquivo de classe anotado podem informar múltiplos componentes/serviços (por exemplo, execução de aplicativo, depuração, coleta de lixo, criação de perfil, etc.).
[0085] Um arquivo de classe anotado também pode conter outros atributos que descrevem os tipos de dados que são usados por componentes (por exemplo, depurador, criador de perfil, etc.) e algumas transformações de acordo com a especialização dinâmica acionada por metadados também podem ser aplicadas àqueles atributos, de acordo com diversas modalidades. Por exemplo, um arquivo de classe anotado pode incluir metadados que descrevem informações de especialização em relação a uma ou mais tabelas de tipo usadas durante a depuração, de acordo com uma modalidade. De modo similar, um arquivo de classe anotado pode incluir metadados que descrevem informações de especialização em relação a um ou mais tabelas de mapa de coluna a serem usadas durante a verificação.
[0086] Em algumas modalidades, um método para especialização dinâmica acionada por metadados pode incluir gerar, por um compilador, um arquivo de classe com base em uma declaração de classe. Gerar o arquivo de classe pode incluir aplicar uma operação de eliminação de tipo para um fluxo de instruções que incluem a declaração de classe na qual o fluxo de instruções se destina a execução por um ambiente de execução virtualizado. A declaração de classe pode incluir uma ou mais variáveis de tipo.
[0087] Adicionalmente, em algumas modalidades, aplicar o tipo operação de eliminação pode incluir criar uma forma codificada de um elemento de programa da declaração de classe. A forma codificada do elemento de programa pode incluir informações de especialização de especificação de metadados em relação ao elemento de programa de modo que a forma codificada possa ser especializada pelo ambiente de execução virtualizado de acordo com uma parametrização de tipo particular.
[0088] Aplicar o tipo operação de eliminação pode envolver incluir a forma codificada do elemento de programa no arquivo de classe, em que o elemento de programa é usável pelo ambiente de execução virtualizado para carregar o elemento de programa sem relação com a presença dos metadados na forma codificada, de acordo com algumas modalidades.
[0089] Em algumas modalidades, um método para especialização dinâmica acionada por metadados pode incluir determinar, por um componente de um ambiente de tempo de execução virtualizado, que um elemento de programa dentro de uma classe precisa ser especializado de acordo com uma parametrização de tipo particular. Em resposta à determinação de que um elemento de programa precisa ser especializado, o método também pode incluir carregar um arquivo de classe que inclui uma forma codificada do elemento de programa, em que a forma codificada deve ser transformada para gerar uma versão especializada do elemento de programa de acordo com a parametrização de tipo particular. Adicionalmente, a forma codificada pode incluir informações de metadados que permitem que a forma codificada seja especializada de acordo com a parametrização de tipo particular. Em algumas modalidades, a forma codificada do elemento de programa pode ser usável sem relação com a presença dos metadados na forma codificada. Adicionalmente, o método pode incluir transformar o elemento de programa com base na forma codificada para gerar a versão especializada do elemento de programa, de acordo com algumas modalidades.
[0090] Em pelo menos algumas modalidades, um sistema de computador que implanta uma porção ou todas dentre uma ou mais das tecnologias descritas no presente documento pode incluir um sistema de computador de propósito geral que inclui ou é configurado para acessar um ou mais meios legíveis por computador. A Figura 7 ilustra tal dispositivo de computação de propósito geral 3000 adequado para implantar o método, os recursos e os aperfeiçoamentos descritos no presente documento. Na modalidade ilustrada, o dispositivo de computação 3000 inclui um ou mais processadores 3010 acoplados a uma memória de sistema 3020 por meio de uma interface de entrada/saída (I/O) 3030. O dispositivo de computação 3000 inclui adicionalmente uma interface de rede 3040 acoplada à interface de I/O 3030.
[0091] Em diversas modalidades, o dispositivo de computação 3000 pode ser um sistema de processador único que inclui um processador 3010 ou um sistema de múltiplos processadores que inclui diversos processadores 3010 (por exemplo, dois, quatro, oito ou outro número adequado). Os processadores 3010 podem incluir quaisquer processadores adequados com capacidade para executar instruções. Por exemplo, em diversas modalidades, processadores 3010 podem ser processadores de propósito geral ou integrados que implantam qualquer uma dentre uma variedade de arquiteturas de conjunto de instruções (ISAs), como a x86, PowerPC, SPARC, ou MIPS ISAs, ou qualquer outra ISA adequada. Em sistemas de múltiplos processadores, cada um dos processadores 3010 pode comumente, mas não necessariamente, implantar a mesma ISA.
[0092] A memória de sistema 3020 pode ser configurada para armazenar instruções de programa e dados acessíveis por processador(es) 3010. Em diversas modalidades, a memória de sistema 3020 pode ser implantada com o uso de qualquer tecnologia de memória adequada, como memória de acesso aleatório estática (SRAM), RAM dinâmica síncrona (SDRAM), memória do tipo não volátil/Flash ou qualquer outro tipo de memória. Na modalidade ilustrada, instruções de programa e dados que implantam uma ou mais funções desejadas, como aqueles métodos, técnicas e dados descritos acima, são mostrados armazenados dentro de memória de sistema 3020 como código (isto é, instruções de programa) 3025 e dados 3026. Por exemplo, a memória 3020 e também o código 3025 e os dados 3026 podem armazenar, em uma modalidade, instruções de programa e dados para implantar compilador 120 e/ou ambiente de tempo de execução virtualizado 140, descritos acima.
[0093] Em diversas modalidades, o compilador 120 e/ou o ambiente de tempo de execução virtualizado 140 (e/ou quaisquer submódulos individuais dos mesmos) podem, cada um, ser implantados em qualquer uma dentre diversas linguagens de programação ou métodos. Por exemplo, em uma modalidade, o compilador 120 e/ou o ambiente de tempo de execução virtualizado 140 podem ser escritos em qualquer um dentre a C, C++, montagem, JAVA ou outras linguagens de programação de propósito geral, enquanto em outra modalidade, uma ou mais das mesmas podem ser escritas com o uso de uma linguagem de programação diferente, mais especializada. Além disso, em algumas modalidades, o compilador 120 e/ou o ambiente de tempo de execução virtualizado 140 (e/ou diversos submódulos dos mesmos) podem não ser implantados com o uso da mesma linguagem de programação.
[0094] Em uma modalidade, a interface de I/O 3030 pode ser configurada para coordenar tráfego de I/O entre processador 3010, memória de sistema 3020 e quaisquer dispositivos periféricos no dispositivo, que incluem interface de rede 3040 ou outras interfaces periféricas. Em algumas modalidades, a interface de I/O 3030 pode realizar qualquer protocolo necessário, temporização ou outras transformações de dados para converter sinais de dados de um componente (por exemplo, memória de sistema 3020) para um formato adequado para uso por outro componente (por exemplo, processador 3010). Em algumas modalidades, a interface de I/O 3030 pode incluir suporte para dispositivos fixados através de diversos tipos de barramentos periféricos, como uma variante do barramento de Interconexão de Componente Periférico (PCI) ou o padrão de Barramento Serial Universal (USB), por exemplo. Além disso, em algumas modalidades, algumas ou todas as funcionalidades de interface de I/O 3030, como uma interface para memória de sistema 3020, podem ser incorporadas diretamente no processador 3010.
[0095] A interface de rede 3040 pode ser configurada para permitir que os dados sejam trocados entre o dispositivo de computação 3000 e outros dispositivos 3060 fixados a uma rede ou redes 3050. Em diversas modalidades, a interface de rede 3040 pode sustentar comunicação por meio de quaisquer redes de dados gerais com fio ou sem fio adequadas, como tipos de rede Ethernet, por exemplo.
[0096] Em algumas modalidades, a memória de sistema 3020 pode ser uma modalidade de um meio legível por computador (por exemplo, acessível por computador) configurado para armazenar instruções de programa e dados conforme descrito acima em relação às Figuras 1 a 6 para implantar modalidades dos métodos e aparelho correspondentes. No entanto, em outras modalidades, as instruções de programa e/ou dados podem ser recebidas, enviadas ou armazenadas em tipos diferentes de meio legível por computador. De modo geral, um meio legível por computador pode incluir meio de armazenamento não transitório ou meio de memória, como meio magnético ou óptico, por exemplo, disco ou DVD/CD acoplado ao dispositivo de computação 3000 por meio da interface de I/O 3030. Um meio de armazenamento legível por computador não transitório também pode incluir qualquer meio volátil ou não volátil, como RAM (por exemplo SDRAM, DDR SDRAM, RDRAM, SRAM, etc.), ROM, etc., que pode ser incluído em algumas modalidades de dispositivo de computação 3000 como a memória de sistema 3020 ou outro tipo de memória.
[0097] Adicionalmente, um meio legível por computador pode incluir meio de transmissão ou sinais como sinais elétricos, eletromagnéticos ou digitais, transportados por meio de um meio de comunicação como uma rede e/ou um enlace sem fio, como pode ser implantado por meio de interface de rede 3040. As porções ou todos os múltiplos dispositivos de computação como aquele ilustrado na Figura 7 podem ser usados para implantar a funcionalidade descrita em diversas modalidades; por exemplo, componentes de software executados em uma variedade de dispositivos e servidores diferentes podem colaborar para fornecer a funcionalidade. Em algumas modalidades, as porções da funcionalidade descrita podem ser implantadas com o uso de dispositivos de armazenamento, dispositivos de rede ou sistemas de computador de propósito especial, além de ou em vez de serem implantadas com o uso de sistemas de computador de propósito geral. O termo “dispositivo de computação”, conforme usado no presente documento, se refere a pelo menos todos esses tipos de dispositivos e não é limitado a esses tipos de dispositivos.
[0098] Diversas modalidades podem inclui adicionalmente receber, enviar ou armazenar instruções e/ou dados implantados de acordo com a descrição anterior mediante um meio legível por computador. De modo geral, um meio legível por computador pode incluir meio de armazenamento ou meio de memória como meio magnético ou óptico, por exemplo, disco ou DVD/CD-ROM, meio volátil ou não volátil como RAM (por exemplo SDRAM, DDR, RDRAM, SRAM, etc.), ROM, etc. Em algumas modalidades, um meio legível por computador também pode incluir meio de transmissão ou sinais como sinais elétricos, eletromagnéticos ou digitais, transportados por meio de um meio de comunicação como rede e/ou um enlace sem fio.
[0099] Os diversos métodos, conforme ilustrado nas Figuras e descrito no presente documento, representam modalidades exemplificativas de métodos. Os métodos podem ser implantados em software, hardware ou uma combinação dos mesmos. Em diversos dos métodos, a ordem das etapas pode ser alterada e diversos elementos podem ser adicionados, reordenados, combinados, omitidos, modificados, etc. Diversas das etapas podem ser realizadas automaticamente (por exemplo, sem ser diretamente avisadas por entrada de usuário) e/ou de modo programado (por exemplo, de acordo com instruções de programa).
[00100] Embora diversos sistemas e métodos tenham sido descritos no presente documento com referência a, e no contexto de, modalidades específicas, será entendido que essas modalidades são ilustrativas e que o escopo da revelação não é limitado a essas modalidades específicas. Muitas variações, modificações, adições e aprimoramentos são possíveis. Por exemplo, os blocos e unidades lógicas identificados na descrição são para o entendimento das modalidades descritas e não se destinam a limitar a revelação. Por exemplo, ações, processos, métodos, tarefas ou funções descritos no presente documento como sendo realizados pelo compilador 120 podem, em algumas modalidades, ser realizados pelo ambiente de tempo de execução virtualizado 140 e vice-versa. Adicionalmente, a funcionalidade pode ser separada ou combinada em blocos de modo diferente em diversas realizações dos sistemas e métodos descritos no presente documento ou descritos com terminologia diferente.
[00101] Essas modalidades se destinam a ser ilustrativas e não limitantes. Em conformidade, instâncias plurais podem ser fornecidas para componentes descritos no presente documento como uma única instância. Os limites entre diversos componentes, operações e armazenamentos de dados são, de algum modo, arbitrários e operações particulares são ilustradas no contexto de configurações ilustrativas específicas. Outras alocações de funcionalidade são previstas e podem ser abrangidas dentro do escopo dos exemplos seguintes. Finalmente, as estruturas e a funcionalidade apresentadas como componentes distintos nas configurações exemplificativas podem ser implantadas como uma estrutura ou componente combinados.
[00102] Embora as modalidades acima tenham descrito em detalhes, diversas variações e modificações serão evidentes uma vez que a revelação acima é completamente verificada. Pretende-se que as reivindicações a seguir sejam interpretadas como abrangendo todas tais variações e modificações.
Claims (20)
1. Meio de armazenamento legível por computador não transitório, caracterizado pelo fato de que armazena instruções legíveis por computador que, quando executadas em um dispositivo de computação, fazem com que o dispositivo de computação realize as ações de: gerar, por um compilador (120), um arquivo de classe anotado (130) com base em uma declaração de classe (200), em que a geração compreende: aplicar uma operação de eliminação de tipo para um fluxo de instruções na declaração de classe, em que o fluxo de instruções é executado por um ambiente de execução virtualizado (140), e em que a declaração de classe inclui uma ou mais variáveis de tipo; em que aplicar a operação de eliminação de tipo compreende: codificar um elemento de programa da declaração de classe com metadados para criar uma forma codificada do elemento de programa para fornecer tipo de especialização, as informações de especialização de especificação de metadados (210) em relação ao elemento de programa indicando quais variáveis de tipo foram apagadas; e incluir a forma codificada do elemento de programa no arquivo de classe anotado, em que o elemento de programa, quando especializado para um tipo particular pelo ambiente de execução virtualizado, é transformado com base nos metadados para gerar uma versão especializada do elemento de programa de acordo com uma parametrização particular para o tipo particular, em que a forma codificada do elemento de programa também é executável sem transformação pelo ambiente de execução virtualizado.
2. Meio de armazenamento legível por computador não transitório de acordo com a reivindicação 1, caracterizado pelo fato de que o elemento de programa compreende uma instrução no fluxo de instruções, em que a instrução indica que o mesmo opera em um ou mais valores de tipos de referências.
3. Meio de armazenamento legível por computador não transitório de acordo com a reivindicação 2, caracterizado pelo fato de que os metadados indicam que os um ou mais tipos de referência são uma eliminação de uma ou mais variáveis de tipo da declaração de classe.
4. Meio de armazenamento legível por computador não transitório de acordo com a reivindicação 2, caracterizado pelo fato de que os metadados indicam que os um ou mais tipos de referência são uma eliminação de um ou mais tipos parametrizados que usam uma ou mais variáveis de tipo da declaração de classe como argumentos de tipo.
5. Meio de armazenamento legível por computador não transitório de acordo com a reivindicação 1, caracterizado pelo fato de que o elemento de programa compreende um argumento para uma instrução no fluxo de instruções, em que o argumento é uma assinatura que indica um ou mais tipos de referência.
6. Meio de armazenamento legível por computador não transitório de acordo com a reivindicação 5, caracterizado pelo fato de que os metadados indicam que os um ou mais tipos de referência são uma eliminação de uma ou mais variáveis de tipo da declaração de classe.
7. Meio de armazenamento legível por computador não transitório de acordo com a reivindicação 5, caracterizado pelo fato de que os metadados indicam que os um ou mais tipos de referência são uma eliminação de um ou mais tipos parametrizados que usam uma ou mais variáveis de tipo da declaração de classe como argumentos de tipo.
8. Meio de armazenamento legível por computador não transitório de acordo com a reivindicação 1, caracterizado pelo fato de que o fluxo de instruções ocorre dentro de um ou mais dentre: um corpo de uma declaração de método na declaração de classe, em que a declaração de classe é uma declaração de classe genérica, ou um corpo de uma declaração de método genérica em uma declaração de classe.
9. Meio de armazenamento legível por computador não transitório de acordo com a reivindicação 1, caracterizado pelo fato de que a forma codificada do elemento de programa compreende uma versão de código de byte do fluxo de instruções, e em que os metadados na forma codificada identificam um ou mais códigos de byte a serem ajustados para gerar uma versão especializada de uma classe com base na declaração de classe.
10. Método para especializar uma classe genérica, caracterizado pelo fato de que compreende: gerar, por um compilador implantado em um ou mais dispositivos de computação, um arquivo de classe anotado com base em uma declaração de classe, em que a dita geração compreende: aplicar (310) uma operação de eliminação de tipo a um fluxo de instruções para a declaração de classe, em que o fluxo de instruções é executado por um ambiente de execução virtualizado, e em que a declaração de classe inclui uma ou mais variáveis de tipo; em que aplicar a operação de eliminação de tipo compreende: codificar (320) um elemento de programa da declaração de classe com metadados para criar uma forma codificada do elemento de programa para fornecer tipo de especialização, as informações de especialização de especificação de metadados em relação ao elemento de programa indicando quais variáveis de tipo foram apagadas; e incluir (330) a forma codificada do elemento de programa no arquivo de classe anotado, em que o elemento de programa, quando especializado para um tipo particular pelo ambiente de execução virtualizado, é transformado com base nos metadados para gerar uma versão especializada do elemento de programa de acordo com uma parametrização particular para o tipo particular, em que a forma codificada do elemento de programa também é executável sem transformação pelo ambiente de execução virtualizado.
11. Método de acordo com a reivindicação 10, caracterizado pelo fato de que o elemento de programa compreende uma instrução no fluxo de instruções, e em que a aplicação da operação de eliminação de tipo compreende adicionalmente: determinar que a instrução indica que a mesma opera em um ou mais valores de um ou mais tipos de referências; e com base, pelo menos em parte, na determinação, incluir na forma codificada do elemento de programa uma indicação de que a instrução opera nos um ou mais valores dos um ou mais tipos de referência.
12. Método de acordo com a reivindicação 11, caracterizado pelo fato de que a criação de uma forma codificada compreende: incluir nos metadados uma indicação de que os um ou mais tipos de referência são uma eliminação de uma ou mais variáveis de tipo da declaração de classe.
13. Método de acordo com a reivindicação 11, caracterizado pelo fato de que a criação de uma forma codificada compreende: incluir nos metadados uma indicação de que os um ou mais tipos de referência são uma eliminação de um ou mais tipos parametrizados que usam uma ou mais variáveis de tipo da declaração de classe como argumentos de tipo.
14. Método de acordo com a reivindicação 10, caracterizado pelo fato de que o elemento de programa compreende um argumento para uma instrução no fluxo de instruções, em que o argumento é uma assinatura que indica um ou mais tipos de referência, e em que a aplicação da operação de eliminação de tipo compreende adicionalmente: incluir, na forma codificada do elemento de programa, uma indicação de que a assinatura indica os um ou mais tipos de referência.
15. Método de acordo com a reivindicação 14, caracterizado pelo fato de que a criação de uma forma codificada compreende: incluir nos metadados uma indicação de que os um ou mais tipos de referência são uma eliminação de uma ou mais variáveis de tipo da declaração de classe.
16. Método de acordo com a reivindicação 14, caracterizado pelo fato de que a criação de uma forma codificada compreende: incluir nos metadados uma indicação de que os um ou mais tipos de referência são uma eliminação de um ou mais tipos parametrizados que usam uma ou mais variáveis de tipo da declaração de classe como argumentos de tipo.
17. Método de acordo com a reivindicação 10, caracterizado pelo fato de que o fluxo de instruções ocorre dentro de um ou mais dentre: um corpo de uma declaração de método na declaração de classe, em que a declaração de classe é uma declaração de classe genérica, ou um corpo de uma declaração de método genérica em uma declaração de classe.
18. Método de acordo com a reivindicação 10, caracterizado pelo fato de que a criação de uma forma codificada compreende: incluir uma versão de código de byte do fluxo de instruções na forma codificada do elemento de programa; e incluir, nos metadados na forma codificada, informações que identificam um ou mais códigos de byte que precisam ser ajustados a fim de gerar uma versão especializada de uma classe com base na declaração de classe.
19. Meio de armazenamento legível por computador não transitório caracterizado pelo fato de que armazena instruções legíveis por computador que, quando executadas em um dispositivo de computação, fazem com que o dispositivo de computação realize as ações de: determinar (510), por um componente de um ambiente de tempo de execução virtualizado, que um elemento de programa dentro de uma classe precisa ser especializado de acordo com uma parametrização de tipo particular; carregar (520), em resposta à dita determinação, um arquivo de classe, gerado de acordo com o método como definido na reivindicação 10, que compreende uma forma codificada do elemento de programa da classe, em que a forma codificada deve ser transformada para gerar uma versão especializada do elemento de programa de acordo com a parametrização de tipo particular, em que a forma codificada compreende informações de metadados especificando informações de especialização sobre o elemento de programa, indicando quais das variáveis de tipo da classe foram apagadas e permitindo que a forma codificada seja especializada de acordo com a parametrização de tipo particular; e transformar (530) o elemento de programa com base na forma codificada para gerar a versão especializada do elemento de programa de acordo com a parametrização de tipo particular.
20. Meio de armazenamento legível por computador não transitório de acordo com a reivindicação 19, caracterizado pelo fato de que o elemento de programa compreende um ou mais dentre: uma assinatura de classe; uma assinatura de método; uma instrução; ou um argumento para uma instrução.
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201461982802P | 2014-04-22 | 2014-04-22 | |
US61/982,802 | 2014-04-22 | ||
US14/660,143 | 2015-03-17 | ||
US14/660,143 US9785456B2 (en) | 2014-04-22 | 2015-03-17 | Metadata-driven dynamic specialization |
PCT/US2015/026947 WO2015164426A1 (en) | 2014-04-22 | 2015-04-21 | Metadata-driven dynamic specialization |
Publications (2)
Publication Number | Publication Date |
---|---|
BR112016024522A2 BR112016024522A2 (pt) | 2017-08-15 |
BR112016024522B1 true BR112016024522B1 (pt) | 2023-02-23 |
Family
ID=53059453
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
BR112016024522-9A BR112016024522B1 (pt) | 2014-04-22 | 2015-04-21 | Meio de armazenamento legível por computador não transitório, e, método para especializar uma classe genérica |
Country Status (6)
Country | Link |
---|---|
US (9) | US9910680B2 (pt) |
EP (5) | EP3134808B1 (pt) |
JP (1) | JP6592009B2 (pt) |
CN (6) | CN106233251B (pt) |
BR (1) | BR112016024522B1 (pt) |
WO (5) | WO2015164436A1 (pt) |
Families Citing this family (43)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9910680B2 (en) | 2014-04-22 | 2018-03-06 | Oracle International Corporation | Decomposing a generic class into layers |
US9792094B2 (en) * | 2014-09-04 | 2017-10-17 | Home Box Office, Inc. | Factory identification system |
JP6621470B2 (ja) | 2014-09-25 | 2019-12-18 | オラクル・インターナショナル・コーポレイション | 分散コンピューティング環境において実行可能コードの動的配置をサポートするシステムおよび方法 |
US9575750B2 (en) * | 2014-12-11 | 2017-02-21 | Successfactors, Inc. | Generic annotation seeker |
US9921859B2 (en) * | 2014-12-12 | 2018-03-20 | The Regents Of The University Of Michigan | Runtime compiler environment with dynamic co-located code execution |
US10146515B1 (en) * | 2015-03-10 | 2018-12-04 | Twitter, Inc. | Live code updates |
US9594904B1 (en) * | 2015-04-23 | 2017-03-14 | Fireeye, Inc. | Detecting malware based on reflection |
US10129361B2 (en) * | 2015-07-01 | 2018-11-13 | Oracle International Corporation | System and method for multi-version remote function execution control in a distributed computing environment |
US9471285B1 (en) * | 2015-07-09 | 2016-10-18 | Synopsys, Inc. | Identifying software components in a software codebase |
US10120661B2 (en) * | 2015-07-16 | 2018-11-06 | Sugarcrm Inc. | Multi-flavored software execution from a singular code base |
US10055208B2 (en) * | 2015-08-09 | 2018-08-21 | Oracle International Corporation | Extending a virtual machine instruction set architecture |
US10083014B2 (en) * | 2015-09-08 | 2018-09-25 | Oracle International Corporation | Generating dynamic modular proxies |
US10466975B2 (en) | 2015-10-23 | 2019-11-05 | Oracle International Corporation | Execution of parameterized classes on legacy virtual machines to generate instantiation metadata |
US9904543B2 (en) * | 2015-10-26 | 2018-02-27 | Hewlett-Packard Development Company, L.P. | Setting a build indicator to enable or disable a feature |
US10853380B1 (en) | 2016-07-31 | 2020-12-01 | Splunk Inc. | Framework for displaying interactive visualizations of event data |
US10459939B1 (en) | 2016-07-31 | 2019-10-29 | Splunk Inc. | Parallel coordinates chart visualization for machine data search and analysis system |
US10459938B1 (en) | 2016-07-31 | 2019-10-29 | Splunk Inc. | Punchcard chart visualization for machine data search and analysis system |
US11037342B1 (en) * | 2016-07-31 | 2021-06-15 | Splunk Inc. | Visualization modules for use within a framework for displaying interactive visualizations of event data |
US10861202B1 (en) | 2016-07-31 | 2020-12-08 | Splunk Inc. | Sankey graph visualization for machine data search and analysis system |
US20180074797A1 (en) * | 2016-09-09 | 2018-03-15 | Hewlett Packard Enterprise Development Lp | Transform a data object in a meta model based on a generic type |
US10083029B2 (en) * | 2016-11-09 | 2018-09-25 | Red Hat, Inc. | Detect application defects by correlating contracts in application dependencies |
KR102471221B1 (ko) * | 2016-11-14 | 2022-11-28 | 삼성에스디에스 주식회사 | 애플리케이션 변환 장치 및 방법 |
US10228957B2 (en) * | 2017-01-20 | 2019-03-12 | International Business Machines Corporation | Online method handle deduplication |
US10417036B2 (en) * | 2017-02-24 | 2019-09-17 | Oracle International Corporation | Evaluation techniques for fast access to structured, semi-structured and unstructured data using a virtual machine that provides support for dynamic code generation |
US10572275B2 (en) | 2017-06-15 | 2020-02-25 | Microsoft Technology Licensing, Llc | Compatible dictionary layout |
US11360976B2 (en) | 2017-08-31 | 2022-06-14 | Oracle International Corporation | Deployment of javascript and typescript stored procedures and user-defined functions into database management systems |
US11662719B2 (en) * | 2017-09-29 | 2023-05-30 | Rockwell Automation Technologies, Inc. | Classification modeling for monitoring, diagnostics optimization and control |
WO2019071601A1 (zh) * | 2017-10-09 | 2019-04-18 | 华为技术有限公司 | 一种类卸载方法及电子设备 |
CN110119274A (zh) * | 2018-02-05 | 2019-08-13 | 北京智明星通科技股份有限公司 | 一种数据编译的方法、装置以及电子终端、计算机可读存储介质 |
CN108446113B (zh) * | 2018-03-28 | 2021-06-15 | 武汉斗鱼网络科技有限公司 | 类名称获取方法、装置及电子设备 |
CN110347372B (zh) * | 2018-04-08 | 2022-07-05 | 福建省天奕网络科技有限公司 | 一种遍历数据的方法及终端 |
CN109117142B (zh) * | 2018-07-19 | 2020-11-24 | 北京理工大学 | 一种基于变量关联树的基本类型重构方法 |
US11425002B1 (en) * | 2018-11-26 | 2022-08-23 | Amazon Technologies, Inc. | Infrastructure managing framework for serverless architecture |
CN114153521A (zh) * | 2019-03-25 | 2022-03-08 | 华为技术有限公司 | 类加载方法和装置 |
US11068543B2 (en) * | 2019-06-11 | 2021-07-20 | Dell Products L.P. | Component and object management of information handling systems |
US11030066B2 (en) * | 2019-10-30 | 2021-06-08 | EMC IP Holding Company LLC | Dynamic application decomposition for execution in a computing environment |
US20210405982A1 (en) * | 2020-06-25 | 2021-12-30 | Red Hat, Inc. | Bytecode transformations using virtual artifacts |
CN111857662B (zh) * | 2020-07-15 | 2023-06-30 | 曹蕤 | 基于map和接口来描述对象特定构成的程序设计方法 |
US20220134222A1 (en) * | 2020-11-03 | 2022-05-05 | Nvidia Corporation | Delta propagation in cloud-centric platforms for collaboration and connectivity |
CN114706619A (zh) * | 2020-12-16 | 2022-07-05 | 武汉斗鱼鱼乐网络科技有限公司 | 配置信息的处理方法、装置、电子设备及存储介质 |
US20220300352A1 (en) | 2021-03-19 | 2022-09-22 | Oracle International Corporation | Determining a resolution state of an anchor constant associated with an application programming interface (api) point |
US11947931B2 (en) * | 2021-10-12 | 2024-04-02 | Sap Se | Generic factory class |
US20240045669A1 (en) * | 2022-08-08 | 2024-02-08 | Capital One Services, Llc | Computer-based systems configured to decouple delivery of product configuration changes associated with continuous integration/continuous delivery programming pipelines and methods of use thereof |
Family Cites Families (126)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5421016A (en) * | 1991-12-12 | 1995-05-30 | International Business Machines Corporation | System and method for dynamically invoking object methods from an application designed for static method invocation |
WO1994005289A1 (en) | 1992-09-09 | 1994-03-17 | Vanderbilt University | Method and compositions for maintaining glomerular filtration rate while inhibition extracellular matrix accumulation |
US6378003B1 (en) * | 1993-04-05 | 2002-04-23 | International Business Machines Corporation | Method and system for deriving metaclasses in an object oriented system |
US5379432A (en) * | 1993-07-19 | 1995-01-03 | Taligent, Inc. | Object-oriented interface for a procedural operating system |
US5628016A (en) | 1994-06-15 | 1997-05-06 | Borland International, Inc. | Systems and methods and implementing exception handling using exception registration records stored in stack memory |
US5630131A (en) * | 1994-11-14 | 1997-05-13 | Object Technology Licensing Corp. | Method and apparatus for importing and exporting archive files for a graphical user interface |
US6360360B1 (en) | 1996-02-08 | 2002-03-19 | International Business Machines Corporation | Object-oriented compiler mechanism for automatically selecting among multiple implementations of objects |
US5940616A (en) * | 1996-05-31 | 1999-08-17 | International Business Machines Corporation | Tracker class for object-oriented programming environments |
US6067577A (en) * | 1996-09-30 | 2000-05-23 | Apple Computer, Inc. | Dynamic method resolution for native methods in a dynamic object-oriented programming language |
US5923878A (en) | 1996-11-13 | 1999-07-13 | Sun Microsystems, Inc. | System, method and apparatus of directly executing an architecture-independent binary program |
US6513152B1 (en) * | 1997-07-23 | 2003-01-28 | International Business Machines Corporation | Object oriented framework mechanism for customization of object oriented frameworks |
US6230314B1 (en) * | 1997-10-02 | 2001-05-08 | International Business Machines Corporation | Method and device for program transformation using class hierarchy transformation based upon type constraint analysis |
US5966702A (en) * | 1997-10-31 | 1999-10-12 | Sun Microsystems, Inc. | Method and apparatus for pre-processing and packaging class files |
US6279008B1 (en) | 1998-06-29 | 2001-08-21 | Sun Microsystems, Inc. | Integrated graphical user interface method and apparatus for mapping between objects and databases |
US6138269A (en) * | 1998-05-20 | 2000-10-24 | Sun Microsystems, Inc. | Determining the actual class of an object at run time |
US6018628A (en) * | 1998-06-16 | 2000-01-25 | Sun Microsystems, Inc. | Method of implementing parameterized types to be compatible with existing unparameterized libraries |
US6769124B1 (en) * | 1998-07-22 | 2004-07-27 | Cisco Technology, Inc. | Persistent storage of information objects |
US6226788B1 (en) * | 1998-07-22 | 2001-05-01 | Cisco Technology, Inc. | Extensible network management system |
US8418131B2 (en) * | 1998-11-25 | 2013-04-09 | Helmut Emmelmann | Interactive server side components |
AU5025600A (en) * | 1999-05-17 | 2000-12-05 | Foxboro Company, The | Process control configuration system with parameterized objects |
US7089530B1 (en) * | 1999-05-17 | 2006-08-08 | Invensys Systems, Inc. | Process control configuration system with connection validation and configuration |
US6484313B1 (en) * | 1999-06-30 | 2002-11-19 | Microsoft Corporation | Compiling and persisting of intermediate language code |
US6560774B1 (en) * | 1999-09-01 | 2003-05-06 | Microsoft Corporation | Verifier to check intermediate language |
US6484276B1 (en) * | 1999-10-25 | 2002-11-19 | Lucent Technologies Inc. | Method and apparatus for providing extensible object-oriented fault injection |
US6907546B1 (en) | 2000-03-27 | 2005-06-14 | Accenture Llp | Language-driven interface for an automated testing framework |
US7334216B2 (en) * | 2000-04-04 | 2008-02-19 | Sosy, Inc. | Method and apparatus for automatic generation of information system user interfaces |
US6901588B1 (en) * | 2000-04-17 | 2005-05-31 | Codemesh, Inc. | Sharing components between programming languages by use of polymorphic proxy |
AU2001259108A1 (en) * | 2000-04-21 | 2001-11-07 | Togethersoft Corporation | Methods and systems for generating source code for object-oriented elements |
US7577834B1 (en) * | 2000-05-09 | 2009-08-18 | Sun Microsystems, Inc. | Message authentication using message gates in a distributed computing environment |
GB0011954D0 (en) * | 2000-05-17 | 2000-07-05 | Univ Surrey | Protocol stacks |
JP4662657B2 (ja) * | 2000-07-10 | 2011-03-30 | マイクロソフト コーポレーション | 統一データ型システムおよび方法 |
DE60011479T2 (de) * | 2000-08-02 | 2005-06-09 | Philipp Kutter | Xml-roboter |
US6701501B2 (en) * | 2000-10-16 | 2004-03-02 | Simon Joshua Waters | Structured algorithmic programming language approach to system design |
US6968540B2 (en) * | 2000-10-25 | 2005-11-22 | Opnet Technologies Inc. | Software instrumentation method and apparatus |
WO2002037261A2 (en) | 2000-11-03 | 2002-05-10 | Wilde Technologies Limited | A software development process |
US6757890B1 (en) | 2000-12-28 | 2004-06-29 | Sun Microsystems, Inc. | Methods and apparatus for enabling local Java object allocation and collection |
US7277836B2 (en) * | 2000-12-29 | 2007-10-02 | Exxonmobil Upstream Research Company | Computer system and method having a facility network architecture |
US7761270B2 (en) * | 2000-12-29 | 2010-07-20 | Exxonmobil Upstream Research Co. | Computer system and method having a facility management logic architecture |
US7243346B1 (en) * | 2001-05-21 | 2007-07-10 | Microsoft Corporation | Customized library management system |
US7162716B2 (en) | 2001-06-08 | 2007-01-09 | Nvidia Corporation | Software emulator for optimizing application-programmable vertex processing |
US7117489B2 (en) | 2001-06-20 | 2006-10-03 | Sun Microsystems, Inc. | Optional attribute generator for customized Java programming environments |
US7149734B2 (en) * | 2001-07-06 | 2006-12-12 | Logic Library, Inc. | Managing reusable software assets |
US7017162B2 (en) * | 2001-07-10 | 2006-03-21 | Microsoft Corporation | Application program interface for network software platform |
US7853933B2 (en) * | 2001-09-29 | 2010-12-14 | Siebel Systems, Inc. | Computing system and method to perform compile-time extension for world wide web application |
US6948156B2 (en) | 2001-10-24 | 2005-09-20 | Sun Microsystems, Inc. | Type checking in java computing environments |
US6961933B2 (en) | 2001-10-24 | 2005-11-01 | Sun Microsystems, Inc. | Representation of Java data types in virtual machines |
US7353502B2 (en) | 2002-07-03 | 2008-04-01 | The Mathworks, Inc. | System and method for creation of software components |
US7127709B2 (en) * | 2002-09-25 | 2006-10-24 | Microsoft Corporation | System and method for jointly managing dynamically generated code and data |
US8032860B2 (en) * | 2003-02-26 | 2011-10-04 | Oracle International Corporation | Methods for type-independent source code editing |
US20040221228A1 (en) | 2003-04-30 | 2004-11-04 | International Business Machines Corporation | Method and apparatus for domain specialization in a document type definition |
US7496892B2 (en) * | 2003-05-06 | 2009-02-24 | Andrew Nuss | Polymorphic regular expressions |
US7380242B2 (en) | 2003-05-14 | 2008-05-27 | Mainsoft Israel Ltd. | Compiler and software product for compiling intermediate language bytecodes into Java bytecodes |
US7240327B2 (en) * | 2003-06-04 | 2007-07-03 | Sap Ag | Cross-platform development for devices with heterogeneous capabilities |
US7219330B2 (en) * | 2003-06-26 | 2007-05-15 | Microsoft Corporation | Extensible metadata |
US7707566B2 (en) * | 2003-06-26 | 2010-04-27 | Microsoft Corporation | Software development infrastructure |
US7086041B2 (en) * | 2003-06-27 | 2006-08-01 | Microsoft Corporation | Extensible type system for representing and checking consistency of program components during the process of compilation |
US7634763B2 (en) * | 2003-07-15 | 2009-12-15 | Microsoft Corporation | Extensible multi-language compilation |
US7890928B2 (en) * | 2003-07-26 | 2011-02-15 | Pilla Gurumurty Patrudu | Mechanism and system for representing and processing rules |
US20050055682A1 (en) | 2003-09-08 | 2005-03-10 | Microsoft Corporation | Authoring and using generic classes in JAVA language code |
US7318216B2 (en) * | 2003-09-24 | 2008-01-08 | Tablecode Software Corporation | Software application development environment facilitating development of a software application |
US7669193B1 (en) * | 2003-09-25 | 2010-02-23 | Lantronix, Inc. | Program transformation using flow-sensitive type constraint analysis |
US7496908B2 (en) * | 2004-01-14 | 2009-02-24 | International Business Machines Corporation | Method and apparatus for optimizing code execution using annotated trace information having performance indicator and counter information |
US7448022B1 (en) * | 2004-02-10 | 2008-11-04 | Prasad Ram | Dynamic software composition in a component-based software system |
US7644402B1 (en) * | 2004-03-17 | 2010-01-05 | Sun Microsystems, Inc. | Method for sharing runtime representation of software components across component loaders |
US8677312B1 (en) | 2004-03-30 | 2014-03-18 | Synopsys, Inc. | Generation of compiler description from architecture description |
US7343379B2 (en) * | 2004-05-21 | 2008-03-11 | Bea Systems, Inc. | System and method for controls |
US7665062B1 (en) * | 2004-07-02 | 2010-02-16 | Borland Software Corporation | System and methodology for design-time dynamic class type construction |
JP4745238B2 (ja) * | 2004-08-12 | 2011-08-10 | 富士通株式会社 | Javaアプレット、JARファイル生成方法、JARファイル生成プログラム、JARファイル生成装置 |
US7657874B2 (en) * | 2004-08-24 | 2010-02-02 | Microsoft Corporation | Pattern types as constraints on generic type parameters |
US7676476B2 (en) * | 2004-08-25 | 2010-03-09 | Microsoft Corporation | Data types with incorporated collation information |
US7475150B2 (en) * | 2004-09-07 | 2009-01-06 | International Business Machines Corporation | Method of generating a common event format representation of information from a plurality of messages using rule-based directives and computer keys |
US7614045B2 (en) * | 2004-09-24 | 2009-11-03 | Sap (Ag) | Sharing classes and class loaders |
US7530051B1 (en) * | 2004-10-21 | 2009-05-05 | Sun Microsystems, Inc. | Method and apparatus for dimensional analysis encoded in metatypes and generics |
DE102004057490B4 (de) * | 2004-11-29 | 2007-02-22 | Infineon Technologies Ag | Vorrichtung und Verfahren zum Verarbeiten eines Programmcodes |
US8250528B2 (en) | 2004-12-15 | 2012-08-21 | Microsoft Corporation | Static inheritance systems and methods |
US7493605B2 (en) * | 2004-12-29 | 2009-02-17 | Mainsoft R&D Ltd | Method and a software product for adapting a .Net framework compliant reflection mechanism to a java environment |
US7571430B2 (en) * | 2005-01-24 | 2009-08-04 | Lsi Logic Corporation | Adaptive dispatch table based on templates |
US7844958B2 (en) * | 2005-03-11 | 2010-11-30 | Aptana, Inc. | System and method for creating target byte code |
CA2504333A1 (en) * | 2005-04-15 | 2006-10-15 | Symbium Corporation | Programming and development infrastructure for an autonomic element |
US7983209B2 (en) * | 2005-04-18 | 2011-07-19 | Research In Motion Limited | System and method for producing notification based web services |
EP1910920A4 (en) | 2005-06-27 | 2011-03-09 | Quipoz Pty Ltd | CODE TRANSFORMATION |
US7716630B2 (en) * | 2005-06-27 | 2010-05-11 | Ab Initio Technology Llc | Managing parameters for graph-based computations |
US7992140B2 (en) * | 2005-07-29 | 2011-08-02 | Microsoft Corporation | Compiler supporting programs as data objects |
EP1934782A4 (en) * | 2005-09-15 | 2009-01-07 | Invixa Llc | APPARATUS, METHOD AND SYSTEM FOR CONSTRUCTING SOFTWARE BY THE COMPOSITION |
US8121985B2 (en) * | 2005-10-24 | 2012-02-21 | Sap Aktiengesellschaft | Delta versioning for learning objects |
US20070168926A1 (en) * | 2005-12-16 | 2007-07-19 | Raghuram Rajah | Software customization framework |
US7966602B1 (en) * | 2006-03-16 | 2011-06-21 | Oracle America, Inc. | Incremental modification detector, and methods, systems, and apparatus for implementing the same |
US8572138B2 (en) * | 2006-03-30 | 2013-10-29 | Ca, Inc. | Distributed computing system having autonomic deployment of virtual machine disk images |
US8225294B2 (en) * | 2006-04-27 | 2012-07-17 | Oracle America, Inc. | Method and apparatus for expressing and checking relationships between types |
US7836440B2 (en) * | 2006-04-27 | 2010-11-16 | Oracle America, Inc. | Dependency-based grouping to establish class identity |
US20080033968A1 (en) | 2006-08-07 | 2008-02-07 | Quan Dennis A | Methods and apparatus for input specialization |
US20080040360A1 (en) | 2006-08-14 | 2008-02-14 | Microsoft Corporation | Design pattern for choice types in object oriented languages |
US8370818B2 (en) * | 2006-12-02 | 2013-02-05 | Time Warner Cable Inc. | Methods and apparatus for analyzing software interface usage |
US20080154950A1 (en) * | 2006-12-21 | 2008-06-26 | Sap Ag | Object constructors for generic frameworks |
WO2008115553A1 (en) * | 2007-03-20 | 2008-09-25 | The University Of North Carolina At Chapel Hill | Methods, systems, and computer readable media for automatically generating customizable user interfaces using proagramming patterns |
US8079023B2 (en) | 2007-03-22 | 2011-12-13 | Microsoft Corporation | Typed intermediate language support for existing compilers |
US7654413B2 (en) | 2007-04-17 | 2010-02-02 | Kuei-Tang Chang | Supporting device for package water dispenser |
US8806324B2 (en) * | 2007-08-03 | 2014-08-12 | Sap Ag | Annotation data filtering of computer files |
CN101251795A (zh) * | 2007-11-01 | 2008-08-27 | 中国地质大学(武汉) | 泛型空间网络分析模型及其算法 |
US8615734B2 (en) * | 2007-11-09 | 2013-12-24 | Oracle International Corporation | System and method for dynamically redefining class files in an application server environment |
CN101520733B (zh) * | 2008-02-27 | 2014-04-16 | 国际商业机器公司 | 装载类的方法和装置及重组类存档文件方法 |
US9063765B2 (en) | 2008-04-28 | 2015-06-23 | Kaazing Corporation | System and methods for distributed execution of computer executable programs utilizing asymmetric translation |
US8935293B2 (en) | 2009-03-02 | 2015-01-13 | Oracle International Corporation | Framework for dynamically generating tuple and page classes |
US9075667B2 (en) * | 2009-05-21 | 2015-07-07 | Microsoft Technology Licensing, Llc | Dynamic binding directed by static types |
US8484614B2 (en) * | 2009-05-29 | 2013-07-09 | Red Hat, Inc. | Fast late binding of object methods |
US8843920B2 (en) | 2009-09-15 | 2014-09-23 | Advanced Micro Devices, Inc. | Systems and methods for deferring software implementation decisions until load time |
CA2678095C (en) * | 2009-09-25 | 2012-05-01 | Ibm Canada Limited - Ibm Canada Limitee | Object level compatibility and class resizing utilizing semantic values |
WO2011042228A1 (en) * | 2009-10-06 | 2011-04-14 | International Business Machines Corporation | Method and system to handle java class versioning |
US8549506B2 (en) * | 2010-04-27 | 2013-10-01 | Microsoft Corporation | Resumable methods |
US8645490B2 (en) * | 2010-06-08 | 2014-02-04 | Microsoft Corporation | Web site implementation by mapping expression evaluation |
US8813049B2 (en) | 2010-06-30 | 2014-08-19 | Oracle International Corporation | Type inference of partially-specified parameterized types |
US8533695B2 (en) * | 2010-09-28 | 2013-09-10 | Microsoft Corporation | Compile-time bounds checking for user-defined types |
US8959501B2 (en) * | 2010-12-14 | 2015-02-17 | Microsoft Corporation | Type and length abstraction for data types |
US9207935B2 (en) * | 2011-04-07 | 2015-12-08 | Infosys Limited | Early analysis of software design diagrams |
US8997070B2 (en) * | 2011-12-15 | 2015-03-31 | Sap Se | Extension mechanism for scripting language compiler |
US9411560B2 (en) * | 2012-01-26 | 2016-08-09 | Oracle International Corporation | Error propagation |
JP2013235386A (ja) | 2012-05-08 | 2013-11-21 | Internatl Business Mach Corp <Ibm> | 最適化装置、最適化方法、及び最適化プログラム |
CN103491111B (zh) * | 2012-06-08 | 2016-12-14 | 阿里巴巴集团控股有限公司 | 无线应用发布、实现方法与装置 |
US8863079B2 (en) | 2012-07-31 | 2014-10-14 | Oracle International Corporation | Efficient and expansive conversions between reference and primitive |
US8776031B1 (en) * | 2012-08-09 | 2014-07-08 | Noble Systems Corporation | Manipulating resources embedded in a dynamic-link library |
US8893082B2 (en) * | 2012-08-31 | 2014-11-18 | Oracle International Corporation | Type inference of generic type parameters in overloaded functions using type intervals and inference directions |
US9170908B2 (en) * | 2012-12-14 | 2015-10-27 | Salesforce.Com, Inc. | System and method for dynamic analysis bytecode injection for application dataflow |
US9817804B2 (en) * | 2013-09-12 | 2017-11-14 | Wix.Com Ltd. | System for comparison and merging of versions in edited websites and interactive applications |
US9606783B2 (en) * | 2013-10-14 | 2017-03-28 | International Business Machines Corporation | Dynamic code selection based on data policies |
US9329985B1 (en) * | 2014-04-04 | 2016-05-03 | Xoom Corporation | Using emulation to disassociate verification from stimulus in functional test |
US9910680B2 (en) | 2014-04-22 | 2018-03-06 | Oracle International Corporation | Decomposing a generic class into layers |
-
2015
- 2015-03-17 US US14/660,604 patent/US9910680B2/en active Active
- 2015-03-17 US US14/660,177 patent/US9772828B2/en active Active
- 2015-03-17 US US14/660,143 patent/US9785456B2/en active Active
- 2015-04-21 US US14/692,601 patent/US9483242B2/en active Active
- 2015-04-21 US US14/692,592 patent/US9524152B2/en active Active
- 2015-04-21 CN CN201580020873.1A patent/CN106233251B/zh active Active
- 2015-04-21 WO PCT/US2015/026962 patent/WO2015164436A1/en active Application Filing
- 2015-04-21 EP EP15721427.1A patent/EP3134808B1/en active Active
- 2015-04-21 US US14/692,593 patent/US9477450B2/en active Active
- 2015-04-21 EP EP15721428.9A patent/EP3134809B1/en active Active
- 2015-04-21 CN CN201580028725.4A patent/CN106716349B/zh active Active
- 2015-04-21 BR BR112016024522-9A patent/BR112016024522B1/pt active IP Right Grant
- 2015-04-21 US US14/692,590 patent/US9678729B2/en active Active
- 2015-04-21 WO PCT/US2015/026947 patent/WO2015164426A1/en active Application Filing
- 2015-04-21 CN CN202010673980.7A patent/CN111813389A/zh active Pending
- 2015-04-22 WO PCT/US2015/026966 patent/WO2015164439A1/en active Application Filing
- 2015-04-22 WO PCT/US2015/026965 patent/WO2015191165A1/en active Application Filing
- 2015-04-22 CN CN201580029282.0A patent/CN106462414B/zh active Active
- 2015-04-22 WO PCT/US2015/026964 patent/WO2015164438A1/en active Application Filing
- 2015-04-22 EP EP15721429.7A patent/EP3134810B1/en active Active
- 2015-04-22 JP JP2016564078A patent/JP6592009B2/ja active Active
- 2015-04-22 CN CN201580028016.6A patent/CN106415488B/zh active Active
- 2015-04-22 EP EP15771741.4A patent/EP3134811B1/en active Active
- 2015-04-22 CN CN201580028400.6A patent/CN106462412B/zh active Active
- 2015-04-22 EP EP15721430.5A patent/EP3134806B1/en active Active
-
2016
- 2016-02-26 US US15/055,469 patent/US9891900B2/en active Active
-
2017
- 2017-09-25 US US15/714,836 patent/US10740115B2/en active Active
Also Published As
Similar Documents
Publication | Publication Date | Title |
---|---|---|
BR112016024522B1 (pt) | Meio de armazenamento legível por computador não transitório, e, método para especializar uma classe genérica | |
US9459986B2 (en) | Automatic generation of analysis-equivalent application constructs | |
Weinberger et al. | Google C++ style guide | |
Bagnara et al. | C-rusted: The Advantages of Rust, in C, without the Disadvantages | |
Kastinger | Piero Ploner (pploner@ cosy. sbg. ac. at), Michael Wallner (mwallner@ cosy. sbg. ac. at) University of Salzburg, Department of Computer Sciences |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
B15K | Others concerning applications: alteration of classification |
Ipc: G06F 9/00 (2018.01) |
|
B06U | Preliminary requirement: requests with searches performed by other patent offices: procedure suspended [chapter 6.21 patent gazette] | ||
B350 | Update of information on the portal [chapter 15.35 patent gazette] | ||
B09A | Decision: intention to grant [chapter 9.1 patent gazette] | ||
B16A | Patent or certificate of addition of invention granted [chapter 16.1 patent gazette] |
Free format text: PRAZO DE VALIDADE: 20 (VINTE) ANOS CONTADOS A PARTIR DE 21/04/2015, OBSERVADAS AS CONDICOES LEGAIS |