O que é "tempo de execução"?


404

Ouvi falar de coisas como "C Runtime", "Visual C ++ 2008 Runtime", ".NET Common Language Runtime", etc.

  • O que é exatamente " tempo de execução "?
  • Do que isso é feito?
  • Como ele interage com meu código? Ou talvez mais precisamente, como meu código é controlado por ele?

Ao codificar a linguagem assembly no Linux, eu poderia usar a instrução INT para fazer a chamada do sistema. Então, o tempo de execução nada mais é do que um monte de funções pré-fabricadas que agrupam a função de baixo nível em funções mais abstratas e de alto nível? Mas isso não parece mais a definição da biblioteca, não do tempo de execução?

O "tempo de execução" e a " biblioteca de tempo de execução " são duas coisas diferentes?

ADICIONAR 1

Hoje em dia, acho que talvez o Runtime tenha algo em comum com a chamada Máquina Virtual , como a JVM. Aqui está a citação que leva a esse pensamento:

Esse processo de compilação é suficientemente complexo para ser dividido em várias camadas de abstração, e geralmente envolve três tradutores: um compilador, uma implementação de máquina virtual e um montador. --- Os elementos dos sistemas de computação (introdução, o caminho até a terra do hardware)

ADICIONAR 2

O livro Expert C Programming: Deep C Secrets . O Capítulo 6 Estruturas de dados de tempo de execução é uma referência útil a esta pergunta.


O tempo de execução contém o runtime librarycódigo de controle mais e algum estado (fornecido pelo sistema operacional).
Martin York

43
Ótima pergunta, sempre questionei isso.
contactmatt

Eu não chamaria INT de função. Consulte stackoverflow.com/questions/1817577/… para obter mais detalhes.
Koray Tugay

2
Encontrei outro post em um site irmão que pode ser útil: programmers.stackexchange.com/questions/294346/…
CloudyTrees

Eu sempre penso nisso como uma sandbox para uma infraestrutura de nível inferior. Você possui os processos Gerenciador de tarefas / Ou no kit Unix, todas as bibliotecas GUI de baixo nível, etc. Tudo isso faz parte do tempo de execução. Os fundamentos sobre os quais as coisas são construídas.
JGFMK 27/03

Respostas:


262

O tempo de execução descreve o software / instruções que são executadas enquanto o programa está sendo executado, especialmente as instruções que você não escreveu explicitamente, mas são necessárias para a execução correta do seu código.

Linguagens de baixo nível, como C, têm muito pequeno (se houver) tempo de execução. Linguagens mais complexas, como o Objective-C, que permite a passagem dinâmica de mensagens, têm um tempo de execução muito mais extenso.

Você está certo de que o código de tempo de execução é um código de biblioteca, mas o código de biblioteca é um termo mais geral, descrevendo o código produzido por qualquer biblioteca. O código de tempo de execução é especificamente o código necessário para implementar os recursos do próprio idioma.


103

Tempo de execução é um termo geral que se refere a qualquer biblioteca, estrutura ou plataforma na qual seu código é executado.

Os tempos de execução C e C ++ são coleções de funções.

O tempo de execução do .NET contém um interpretador de idioma intermediário , um coletor de lixo e muito mais.


4
A biblioteca padrão C ++ não contém apenas funções e, referindo-se a Matt Ball, o "runtime" C e C ++ são bibliotecas de runtime, o .NET runtime é uma biblioteca de runtime e um sistema de runtime.
Smarlin10 /

11
Minha pergunta é que as bibliotecas estáticas também são em tempo de execução? Eu acho que o termo é usado principalmente para objetos compartilhados, não é? considere libc no linux. E o que dizer de plataformas e estruturas? eles também são divididos em bibliotecas?
Amir Zadeh

3
Mas como meu código pode ser executado em qualquer " biblioteca, estrutura ou plataforma "? Ele deve ser executado na CPU ou em outra unidade de processamento. Você poderia fornecer um nível adicional de detalhes para obter mais esclarecimentos?
N611x007

Os tempos de execução C e C ++ são coleções de funções. -> Quais funções?
Koray Tugay

3
@KorayTugay: As funções na biblioteca padrão, como coutou printf.
SLaks

80

Conforme Wikipedia: biblioteca de tempo de execução / sistema de tempo de execução .

Na programação de computadores, uma biblioteca de tempo de execução é uma biblioteca de programas especial usada por um compilador para implementar funções incorporadas a uma linguagem de programação durante o tempo de execução (execução) de um programa de computador. Isso geralmente inclui funções para entrada e saída ou para gerenciamento de memória.


Um sistema de tempo de execução (também chamado de sistema de tempo de execução ou apenas tempo de execução) é um software projetado para suportar a execução de programas de computador escritos em alguma linguagem de computador. O sistema de tempo de execução contém implementações de comandos básicos de baixo nível e também pode implementar comandos de nível superior e pode suportar verificação de tipo, depuração e até geração e otimização de código. Alguns serviços do sistema de tempo de execução são acessíveis ao programador por meio de uma interface de programação de aplicativos, mas outros serviços (como agendamento de tarefas e gerenciamento de recursos) podem estar inacessíveis.


Re: sua edição , "runtime" e "runtime library" são dois nomes diferentes para a mesma coisa.


69
A Wikipedia não é uma boa fonte de citações. É um bom local para começar a procurar fontes autorizadas, mas ele próprio não deve ser considerado autoritário e, como tal, não é confiável. (De acordo com as declarações do Sr. Wales, o criador da Wikipedia).
Martin York

5
A que "durante o tempo de execução" na primeira citação (supostamente sobre a biblioteca de tempo de execução) se refere? Uma interpretação [mis] fácil pode ser a seguinte: "enquanto o programa está sendo executado, o compilador, em paralelo, usa uma biblioteca (por si só) para implementar (ou seja, gerar código adicional em tempo de execução)" prometido "(pelas especificações de idioma ) funções para o programa ". Isso pode ser falso e / ou facilmente dobrado com a definição de um sistema de tempo de execução.
N611x007

2
Para continuar de onde Loki esquerda, especialmente quando nenhum dos artigos fornecem qualquer referência (que não é uma citação, é apenas algo que eu pensei que diria melhor)
arsaKasra

11
@MartinYork, não apenas uma enciclopédia não é autorizada, mas também se concentra na documentação e não na explicação. Aqueles podem ser muito diferentes.
Roy Prins

59

O ambiente de tempo de execução ou execução é parte de uma implementação de linguagem que executa código e está presente no tempo de execução ; a parte em tempo de compilação da implementação é chamada de ambiente de tradução no padrão C.

Exemplos:

  • o Java Runtime consiste na máquina virtual e na biblioteca padrão

  • um tempo de execução C comum consiste no carregador (que faz parte do sistema operacional) e na biblioteca de tempo de execução, que implementa as partes da linguagem C que não são incorporadas ao executável pelo compilador; em ambientes hospedados, isso inclui a maioria das partes da biblioteca padrão


2
Obrigado, acho que esta é a melhor resposta neste tópico.
precisa saber é o seguinte

11
Aprecio nomear "ambiente de execução", mas acho que usar apenas "tempo de execução" como alias para o primeiro é uma má idéia (que é das minhas observações o que muitos programadores fazem), "ambiente de tempo de execução" é mais preciso. Concordo com o @ MichałTrybus que "tempo de execução" significa "o horário em que o programa é executado".
WloHu 4/06/19

32

No meu entendimento, tempo de execução é exatamente o que isso significa - o momento em que o programa é executado. Você pode dizer que algo acontece em tempo de execução / tempo de execução ou em tempo de compilação.

Eu acho que o tempo de execução e a biblioteca de tempo de execução devem ser (se não forem) duas coisas separadas. "C runtime" não parece certo para mim. Eu chamo de "biblioteca de tempo de execução C".

Respostas para suas outras perguntas: Eu acho que o termo tempo de execução pode ser estendido para incluir também o ambiente e o contexto do programa quando ele é executado, portanto:

  • consiste em tudo o que pode ser chamado de "ambiente" durante o tempo em que o programa é executado, por exemplo, outros processos, estado do sistema operacional e bibliotecas usadas, estado de outros processos, etc.
  • ele não interage com seu código em um sentido geral, apenas define em que circunstâncias seu código funciona, o que está disponível durante a execução.

Esta resposta é, de certa forma, estender apenas minha opinião, não um fato ou definição.


29

Matt Ball respondeu corretamente. Eu diria sobre isso com exemplos.

Considere executar um programa compilado no compilador Turbo-Borland C / C ++ (versão 3.1 do ano 1991) e deixe-o executar em uma versão de 32 bits do Windows, como o Windows 98/2000 etc.

É um compilador de 16 bits. E você verá que todos os seus programas têm ponteiros de 16 bits. Por que é assim quando o sistema operacional é de 32 bits? Como seu compilador configurou o ambiente de execução de 16 bits e a versão de 32 bits do SO o suportou.

O que é comumente chamado de JRE (Java Runtime Environment) fornece a um programa Java todos os recursos que pode ser necessário para executar.

Na verdade, o ambiente de tempo de execução é um produto cerebral da ideia de Máquinas Virtuais. Uma máquina virtual implementa a interface bruta entre o hardware e o que um programa pode precisar executar. O ambiente de tempo de execução adota essas interfaces e as apresenta para o uso do programador. Um desenvolvedor de compilador precisaria dessas instalações para fornecer um ambiente de execução para seus programas.


Uma máquina virtual implementa a interface "bruta" entre o hardware e o que um programa pode precisar executar. -> Não tenho certeza disso.
Koray Tugay

7

Tempo de execução exatamente onde seu código entra em funcionamento e você pode ver muita coisa importante que seu código faz.

O tempo de execução tem a responsabilidade de alocar memória, liberar memória, usar o subsistema do sistema operacional como (Serviços de arquivo, Serviços de IO .. Serviços de rede etc.)

Seu código será chamado "TRABALHANDO EM TEORIA" até você praticamente executar o seu código. e o Runtime é um amigo que ajuda a conseguir isso.


3

um tempo de execução pode indicar a fase atual da vida do programa (tempo de execução / tempo de compilação / tempo de carregamento / tempo de link) ou pode significar uma biblioteca de tempo de execução, que forma as ações básicas de baixo nível que fazem interface com o ambiente de execução. ou pode significar um sistema de tempo de execução, que é o mesmo que um ambiente de execução.

no caso de programas C, o tempo de execução é o código que configura a pilha, a pilha etc., que é um requisito esperado pelo ambiente C. essencialmente configura o ambiente prometido pelo idioma. (poderia ter um componente da biblioteca de tempo de execução, crt0.lib ou algo parecido no caso de C)


3

Descobri que a seguinte estrutura de pastas cria um contexto muito esclarecedor para entender o que runtimeé:

Tempo de execução do Mozilla XulRunner

Você pode ver que existe a ' fonte ', existe o ' SDK ' ou 'Software Development Kit' e, em seguida, existe o Runtime, por exemplo. o material que é executado - em tempo de execução. Seu conteúdo é como:

conteúdo da pasta dos tempos de execução

O zip do win32 contém .exe -s e .dll -s.

Então, por exemplo. o tempo de execução C seriam os arquivos como este - bibliotecas de tempo de execução C, .so-s ou .dll -s - você executa em tempo de execução, tornados especiais por sua inclusão (ou pelo conteúdo ou finalidades) na definição de Linguagem C (em 'papel'), implementada pela sua implementação C de sua escolha. E então você obtém o tempo de execução dessa implementação, para usá-lo e desenvolver sobre ele.

Ou seja, com um pouco de polarização, os arquivos executáveis ​​que os usuários do seu novo programa baseado em C precisarão. Como desenvolvedor de um programa baseado em C, você também precisa, mas também precisa do compilador C e dos cabeçalhos da biblioteca C; os usuários não precisam deles.


11
outro para runtime contextualizar, é este alheios artigo python mitos seção de mito 's 6, onde você pode ver a distinção entre tempo de execução e linguagem de programação , no primeiro parágrafo do mito 6.
n611x007

3

Tempo de execução significa basicamente quando o programa interage com o hardware e o sistema operacional de uma máquina. O C não possui seu próprio tempo de execução, mas, em vez disso, solicita que o tempo de execução de um sistema operacional (que é basicamente parte do RAM) se execute.


1

Se meu entendimento da leitura das respostas acima estiver correto, o tempo de execução é basicamente 'processos em segundo plano', como coleta de lixo, alocação de memória, basicamente quaisquer processos invocados indiretamente, pelas bibliotecas / estruturas em que seu código está escrito, e especificamente aqueles processos que ocorrem após a compilação, enquanto o aplicativo está em execução.


-1

Estas seções da documentação do MSDN lidam com a maioria das suas perguntas: http://msdn.microsoft.com/en-us/library/8bs2ecf4(VS.71).aspx

Eu espero que isso ajude.

Obrigado Damian


3
Na verdade, não faz; ele não está apenas perguntando sobre .Net.
SLaks

@ Matt: Certo novamente. No entanto, 2/3 de seus tempos de execução foram suportados pelo .Net, metade de suas tags lidam com o .Net e eu apenas achei que os links seriam úteis.
Damian Schenkelman 10/10

Eu chamaria de "3/4 das línguas suportam o .NET". O .NET não suporta muito, ele foi projetado para manter a diferença entre o unix e o Windows no nível do middleware.
Matt Joiner

@MattJoiner - Isso pode ter sido verdade em 2010, mas é-monumentalmente-un verdadeiro hoje com .NET padrão e implementações de código aberto como .NET Core, etc.
rory.ap

-2

O tempo de execução é a instância em que você não sabe sobre que tipo de objetos cria durante sua execução, a criação de objetos se baseia em determinadas condições ou em algum trabalho de computação. Por outro lado, o tempo de compilação é a instância em que os objetos necessários são definidos por você antes de suas execuções.


-3

O tempo de execução é um pouco oposto ao tempo de design e tempo de compilação / tempo de link. Historicamente, ele vem de um ambiente lento de mainframe, onde o tempo da máquina era caro.


11
Isso não responde à pergunta e a complica ainda mais.
Cglotr 6/12/19
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.