pergunta para #define experts - página 3

 
Alexandr Andreev:


Todos parecem entender.....

Portanto, isto é para aqueles que estão apenas começando o seu caminho....

Podemos embrulhar tudo em uma classe stat e retornar uma referência, que depois iguala o resto, já que este método tem um menos quando se trabalha com if (a!=5) Print(a); não vai funcionar, você deve sempre escrever if (a!=5) {Print(a);}, nas aulas podemos corrigir este momento, mas eu sou muito preguiçoso)) e em geral, parece que tudo está nos arquivos de história

o caminho com as classes, inicializar nossos dados via método estático e combinar o operador chamar nossa impressão.... entãose (a!=5) Imprimir(a); , ele funcionará

Tudo isso é por preguiça. Eu me deixei levar, mas desisti. Reduziu algo, mas a um razoável. Além das impressões, escrever em arquivo ou é coletar dados, ou trabalhar o algoritmo, a configuração. E se você marcar tangas pré-determinadas na impressão, as vírgulas serão impressas. Tudo isso, naturalmente, treina o cérebro, mas não mostra nem mesmo o caminho.

 
Alexandr Andreev:



Dmitry Fedoseev:


Vladimir Simakov:


Por acaso, posso lhe fazer uma pergunta? Como uma definição difere de uma chamada de função para o compilador? Cheguei à conclusão de que não é. Estou enganado?

 
Valeriy Yastremskiy:

Por acaso, posso lhe fazer uma pergunta? Qual é a diferença entre uma definição e uma chamada de função para o compilador? Cheguei à conclusão de que não é. Estou enganado?

Definir é uma substituição durante a compilação ANTES, assim __LINE__ torna-se exatamente como deveria ser, você pode substituir um fragmento de código incompleto.

E função é referência de código (goto) em muitos idiomas e em outros código de substituição (desdobramento de todas as funções) em tempo de execução.

E desafiar é meio maligno porque torna mais difícil encontrar insetos, então um bom desafio é quando não há desafio.
 
Alexandr Andreev:

Definir - substituição em tempo de compilação, assim __LINE__ torna-se exatamente como deve ser, você pode substituir o código incompleto do snippet

E função é referência de código (goto) em muitos idiomas e em outros código de substituição (desdobramento de todas as funções) em tempo de execução.

Pergunta sobre a MKL. Entendo corretamente que não há goto no executável, exceto para loops. A questão surgiu a partir das peculiaridades da compilação. Estritamente de cima para baixo. E se uma variável for declarada na parte inferior do corpo do laço, e chamada nas condições do laço, haverá um aviso. A saída é verificada de cima para baixo. E o executável é gerado pela substituição de funções como uma definição, não por referências degoto.

 
Alexandr Andreev:

Definir - substituição em tempo de compilação, assim __LINE__ torna-se exatamente como deve ser, você pode substituir o código incompleto do snippet

Uma função em muitos idiomas é uma referência ao código (goto), enquanto em outros o código é substituído (desdobrando todas as funções) em tempo de execução.

Então a substituição afeta apenas a velocidade de compilação em tempo de compilação?
É razoável apenas para a construção de grandes projetos?
Ou o código defunto será executado mais rapidamente no executável?

 
Valeriy Yastremskiy:

A questão está em relação à MKL. Entendo corretamente que não há goto no executável, exceto para loops. A questão surgiu a partir das peculiaridades da compilação. Estritamente de cima para baixo. E se uma variável for declarada na parte inferior do corpo do laço, e for chamada nas condições do laço, haverá um aviso. A saída é verificada de cima para baixo. E o executável é gerado pela substituição de funções como uma definição, não por referências degoto.

Não, a mcl usou definitivamente o método de referência do código em 2008.

Se o desenrolamento completo é usado agora não é óbvio.

Hoje em dia, escrever seu próprio compilador é 3-4 anos em qualquer departamento de informática,

Lá tudo pode ser bastante complicado - há referências e desdobramento, portanto, pode-se escrever seu código da maneira que se quiser.

Muito provavelmente, eles revelam o que podem, mas não tudo. É claro que operadores como para, etc. são uma história diferente.

 
Roman:

Então a substituição só afeta a velocidade de construção em tempo de compilação?
É razoável apenas para a construção de grandes projetos?
Ou o código defunto ainda funcionará mais rápido no executável?

A implantação das funções habituais é por si só

i.e. por exemplo para (int i=0; i<ArraiSize(max); i++)

aqui ArraiSize(max); será expandido e obterá algo como endereço para o tamanho de determinada matriz (se olharmos para matriz, ela tem seu tamanho em uma variável, e aqui obtemos a substituição para esta variável "endereço na memória"), ou seja, não faz sentido mudá-la para uma variável por si só, de forma alguma

para (int i=0; i<ArraiSize(max); i++)

и

para (int i=0; i<tamanho; i++)

Neste caso ArraiSize(max) e tamanho têm os mesmos tempos para determinar o valor do tamanho da matriz

 
Alexandr Andreev:

Não, μl usou definitivamente o método de referência do código em 2008.

Se o desenrolamento completo é usado agora não é óbvio.

Hoje em dia, escrever seu próprio compilador é o 3º-4º ano de qualquer departamento de informática,

Lá tudo pode ser bastante complicado - há referências e desdobramento, portanto, pode-se escrever seu código da maneira que se quiser.

Muito provavelmente, eles revelam o que podem, mas não tudo. É claro que operadores como para etc. são uma história totalmente diferente.

Obrigado. A julgar pelo tópico Erros e Erros, a otimização é tudo.... bem, tipo de maldade que leva à luz)))) reparação eterna se o carro também estiver indo por este caminho)

 
Roman:

Então a substituição só afeta a velocidade de construção em tempo de compilação?
É razoável apenas para a construção de grandes projetos?
Ou o código defunto será executado mais rapidamente no executável?

1 - talvez sim, mas em microssegundos =)

2 - muito provavelmente pelo contrário - você precisa usar as definições mais curtas e o mínimo.

3 - em 2008, esta afirmação seria válida para µl4. Mas agora a velocidade será a mesma

 
Alexandr Andreev:

A implantação de funções normais é uma questão natural

i.e. por exemplo para (int i=0; i<ArraiSize(max); i++)

aqui ArraiSize(max); será expandido e obterá algo como endereço para o tamanho de determinado array (se olharmos para array, ele tem seu tamanho em uma variável, e aqui temos a substituição desta variável "endereço na memória"), ou seja, não faz sentido mudá-lo para uma variável, de forma alguma

para (int i=0; i<ArraiSize(max); i++)

и

para (int i=0; i<tamanho; i++)

Neste caso o ArraiSize(max) e o tamanho têm os mesmos tempos para determinar o valor do tamanho da matriz

Não concordo com os tempos neste loop de amostragem.
Pelo contrário, recomenda-se obter o resultado em variável de tamanho, e utilizá-lo na condição.
A razão é que a cada iteração para oArraiSize(max), o loop se desenrola desnecessariamente, retardando a execução do loop.
Estas são instruções desnecessárias no código do montador.

Razão: