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 PDF

Info

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
Application number
BR112016024522-9A
Other languages
English (en)
Other versions
BR112016024522A2 (pt
Inventor
Brian Goetz
John R. Rose
Alexander R. Buckley
Original Assignee
Oracle International Corporation
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Oracle International Corporation filed Critical Oracle International Corporation
Publication of BR112016024522A2 publication Critical patent/BR112016024522A2/pt
Publication of BR112016024522B1 publication Critical patent/BR112016024522B1/pt

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/4492Inheritance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • G06F8/24Object-oriented
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/436Semantic checking
    • G06F8/437Type checking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/76Adapting program code to run in a different environment; Porting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/449Object-oriented method invocation or resolution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4498Finite state machines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime 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

FUNDAMENTOS
[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.
SUMÁRIO
[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.
BREVE DESCRIÇÃO DOS DESENHOS
[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.
DESCRIÇÃO DETALHADA DE MODALIDADES
[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.
BR112016024522-9A 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 BR112016024522B1 (pt)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

Also Published As

Publication number Publication date
CN106462414B (zh) 2020-05-19
EP3134806A1 (en) 2017-03-01
EP3134809B1 (en) 2020-06-03
CN106415488A (zh) 2017-02-15
BR112016024522A2 (pt) 2017-08-15
CN106233251A (zh) 2016-12-14
CN111813389A (zh) 2020-10-23
US9678729B2 (en) 2017-06-13
US9524152B2 (en) 2016-12-20
JP6592009B2 (ja) 2019-10-16
US9910680B2 (en) 2018-03-06
US9477450B2 (en) 2016-10-25
WO2015191165A1 (en) 2015-12-17
US20160202961A1 (en) 2016-07-14
WO2015164438A1 (en) 2015-10-29
EP3134809A1 (en) 2017-03-01
CN106462414A (zh) 2017-02-22
EP3134810A1 (en) 2017-03-01
US20150301840A1 (en) 2015-10-22
EP3134811A1 (en) 2017-03-01
US20150301825A1 (en) 2015-10-22
US20150301807A1 (en) 2015-10-22
US20150301837A1 (en) 2015-10-22
CN106462412B (zh) 2020-07-07
US9891900B2 (en) 2018-02-13
WO2015164436A1 (en) 2015-10-29
US20150301808A1 (en) 2015-10-22
US20150301809A1 (en) 2015-10-22
US20180024844A1 (en) 2018-01-25
CN106415488B (zh) 2020-02-14
EP3134811B1 (en) 2024-03-13
CN106462412A (zh) 2017-02-22
WO2015164439A1 (en) 2015-10-29
US10740115B2 (en) 2020-08-11
EP3134808B1 (en) 2020-06-10
US9772828B2 (en) 2017-09-26
WO2015164426A1 (en) 2015-10-29
US20170364339A9 (en) 2017-12-21
US9785456B2 (en) 2017-10-10
US20150301812A1 (en) 2015-10-22
US9483242B2 (en) 2016-11-01
EP3134810B1 (en) 2020-06-10
CN106233251B (zh) 2019-12-31
EP3134808A1 (en) 2017-03-01
CN106716349A (zh) 2017-05-24
EP3134806B1 (en) 2021-12-29
CN106716349B (zh) 2020-08-11
JP2017516210A (ja) 2017-06-15

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