TransWikia.com

Se C/C++ são linguagens nativas então por que precisam de runtimes?

Stack Overflow em Português Asked by Samuel Ives on November 25, 2021

Geralmente a primeira coisa que vinha a minha mente quando ouvia o termo linguagem nativa, era um programa que executasse independente de sistema operacional, se comunicando direto com o hardware, eu sempre desenvolvi em modo debug, quando soltei uma release pela primeira vez notei que compiladores até como MinGW precisavam de uma runtime, se fosse uma aplicação que utilizasse Windows API por exemplo seria totalmente compreensível pois depende de bibliotecas do sistema operacional Windows. Mas se há a necessidade de uma runtime então por que chamar de linguagem nativa?

Imagino um hobista desenvolvendo um computador bem simples (algo como um chip-8) então ele começa a desenvolver seu kernel para o sistema operacional, em algum momento ele vai ter que deixar de lado o Assembly e usar C/C++, então como o programa vai lidar com algo de tão baixo nível sem uma runtime?

One Answer

Geralmente a primeira coisa que vinha a minha mente quando ouvia o termo linguagem nativa, era um programa que executasse independente de sistema operacional, se comunicando direto com o hardware

Errado, uma linguagem nativa depende do sistema operacional. Pelo menos não há a exigência que não precise de um sistema operacional, e se não tiver um, então o runtime passa ser fundamental, afinal a linguagem sozinha (o código gerado por ela) só pode dar instruções para o processador. O acesso direto ao hardware é possível, mas não é simples.

eu sempre desenvolvi em modo debug, quando soltei um release pela primeira vez notei que compiladores até como MinGW precisavam de uma runtime, se fosse uma aplicação que utilizasse Windows API por exemplo seria totalmente compreensível pois depende de bibliotecas do sistema operacional Windows.

Acho que falta entendimento do que é um runtime. Ele é código necessário para executar certas tarefas de uma forma mais fácil e segura.

Você não precisa de um runtime em Assembly, em C também, ou quase. De certa forma em C++. Só que na prática dará trabalho, você terá que fazer tudo na mão e provavelmente está reinventando a roda de uma forma pior. Raramente estará se livrando do código necessário para funcionar corretamente, apenas está fazendo na mão.

Bibliotecas contam como runtime ou não? Na prática sem elas não dá para fazer nada útil, a não ser as reescrevendo. O que talvez esteja chamando de runtime são as bibliotecas. Não é errado dizer isso, mas é possível deixar isso de fora. Você terá pouca vantagem em relação ao Assembly, provavelmente apenas portabilidade de arquitetura.

O runtime tem mecanismos para facilitar sua vida, se você os usar. Ou para resolver um problema da implementação ou da plataforma, não da linguagem.

Mas se há a necessidade de um runtime então por que chamar de linguagem nativa?

Já que isso é uma premissa equivocada você deveria fornecer um motivo porque uma linguagem nativa não poderia ter um runtime.

Linguagem nativa significa que o código roda diretamente no processador, só isso, que não tem um processo intermediário de interpretação.

Na verdade o termo já está errado. Não existe linguagem nativa, existe implementação nativa. Podemos dizer que toda linguagem pode ser nativa ou não. Algumas tendem mais ser uma coisa ou outra, mas, salvo algo na especificação que exija exclusivamente um desses sentidos, e nem C, nem C++ tem esta exigência, você pode fazer uma implementação não nativa.

Imagino um hobista desenvolvendo um computador bem simples (Algo como um chip-8) então ele começa a desenvolver seu kernel para o sistema operacional, em algum momento ele vai ter que deixar de lado o Assembly e usar C/C++

Não, ele pode continuar usando Assembly.

então como o programa vai lidar com algo de tão baixo nível sem um runtime?

Não sei como essa pergunta faz sentido, muito menos qual a dúvida aqui. Se entendi certo essa pergunta invalida os pressupostos originais da questão.

Conclusão

Acho que está confundindo termos e conceitos. Não há relação entre essas coisas.

Answered by Maniero on November 25, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP