KrafT escreveu:Então... Tava lendo que muito aplicativos e jogos pesados, se não todos, tem seu core programado numa linguagem decente tipo C++ e depois o resto é feito com scripts...
Como programação nesse nível não é coisa do meu dia a dia, fico curioso. Por exemplo, houve um tempo que a linguagem de script do Autocad era o Autolisp e dava para fazer coisas legais nele, mas como a própria suite do Autocad pode fazer uso do Autolisp?
Vejo que tem jogos que usam LUA, ou suas próprias linguagens de script. É evidente que tem vantagens nisso, se não não seria feito, mas minha mente de programador assembly tende à pensar que em vez de criar a linguagem e seu interpretador, tudo poderia estar no código do programa "principal".
Quanto ao caso dos jogos, imagine o seguinte script em pseudo-código que recebe um evento em um jogo:
EventoDeTiro(Player atirador, Coord viewpoint) {
Objects affected = CalculaColisao(atirador, viewpoint);
for (i : affected) {
NotificaAlvejado(i, CalculaImpacto(viewpoint, i));
}
}
Com fragmentos simples de código como este dá pra fazer toda a lógica de um jogo. A questão neste caso é bem simples: fazer esta lógica em uma linguagem de nivel mais baixo requer escrever mais código. As vezes quem faz isso é um artista gráfico, usando por exemplo, Lua. E o básico de Lua, ele vai aprender a chamar métodos, talvez não precise nem fazer objetos compostos.
A *implementação* dos métodos chamados em uma linguagem de mais alto nível, por outro lado, pode requerer muito mais trabalho de cpu, supondo que o interpretador não consiga otimizar isso. Então estes métodos podem estar implementados em uma linguagem de baixo nível, ou alguma maluquice como mandar uma mensagem para um diversos nanoprogramas que rodam dentro do processador gráfico da unidade, que vão fazer um calculo monstruoso e devolver um "verdadeiro ou falso". Você não ia fazer isso no teu programa de qualquer forma, ia delegar: considerando que o cérebro começa a interpretar o delay percepivel a partir de mais ou menos 200ms, importa para o jogador se teu programa usa 100000 instruções a mais para delegar em uma rotina de alto nível, do que faria em uma de baixo otimizada à mão? faça as contas de quanto tempo leva 100000 instruções numa cpu de 2ghz, versus quanto tempo o cara (que não sabe programar) levaria para aprender uma linguagem de baixo nível e se tornar suficientemente bom nela a ponto de começar a otimizar coisas?

A idéia de "scriptar" um programa tem sido usada desta forma há décadas já: permitir que rotinas abstratas possam ser escritas numa linguagem mais abstrata, e a implementação é feita - quando isto é gargalo - em linguagem de nível mais baixo.
Essa tua dúvida é uma das razões pelas quais programadores via de regra são péssimos para prever o desempenho de aplicações concretas: eles imaginam que determinados trechos de código precisam reagir de forma otimizada e passam semanas otimizando-os, depois quando resolvem colocar no profiler observam que 90% do tempo de cpu está sendo gasto no código que ele achou que era a coisa mais bonita que já tinha visto na vida

Um exemplo clássico: um programador PIC considera uma rotina pra copiar a memória que seja um loop apertado (um loop com poucas instruções) que copia byte a byte quase tão bonito quanto a mãe dele acha que ele (o programador) é; E não deixa de ser (o código), mas não tem nada menos eficiente numa cpu moderna com predição de branching do que um loop apertado, especialmente se ele for copiar byte a byte e o barramento para o cache for de 16 bytes

Otimização prematura é um vício terrível. Compiladores existem para te ajudar a focar na interface e deixar o ajuste fino da implementação para o que o resultado dos benchmarks informarem.
Tudo bem que temos maus exemplos do lado da "desotimização" total e do desperdício de recursos, mas exceção não deveria virar regra. Avisem a microsoft.