A nova sintaxe MQL4

 

Já faz um tempo desde que o Beta foi lançado, e eu vi uma nota em algum lugar, que a liberação regular poderia aparecer em meados de janeiro. Embora duvide que isso aconteça, talvez alguns codificadores possam sentir interesse em compartilhar idéias e problemas que aprenderam com o Beta.

Já é significativo iniciar uma discussão sobre a nova sintaxe da fonte MQL4, editor, compilador, padrões, OOP, ou qualquer coisa relacionada?

Por favor, sem relatórios de erros, sem gritos, apenas uma discussão construtiva neste tópico.

 

Eu revelei que a diretiva #include é ignorada se repetida, ou seja

int OnStart() {
#include <dummy.mqh>
#include <dummy.mqh>
#include <dummy.mqh>
#include <dummy.mqh>
}

funciona da mesma forma que

int OnStart() {
#include <dummy.mqh>
}

Embora seja um comportamento muito bem-vindo se você tiver declarações de classe em arquivos separados, isso não é mencionado no arquivo de ajuda.

 

A nova versão parece ser um pouco mais rápida.

As arrays dinâmicas set-as-series parecem mudar automaticamente.

A sobrecarga dafunção proporciona uma melhor interface do que os Switches.

 
Eu apreciaria uma dica de como localizar a causa da "memória vazada". Existe alguma boa prática?
 
Ovo: Eu apreciaria uma dica de como localizar a causa da "memória vazada". Existe alguma boa prática?
Você está fazendo uma pergunta geral de programação como "apagar a memória alocada dinamicamente" || "limitar o uso de funções recursivas". Ou você está se referindo a um bug de vazamento de memória dentro da memória beta?
 
ubzen:
Você está fazendo uma pergunta geral de programação como "apagar memória alocada dinamicamente" || "limitar o uso de funções recursivas". Ou você está se referindo a um bug de vazamento de memória dentro do beta?


Definitivamente, a primeira. Não tenho nenhuma experiência em cuidar de referências de objetos não utilizados, pois minha formação vem da JAVA. Portanto, estou falando sério, que aprecio uma dica para encontrar objetos vazados após receber a mensagem de aviso genérica (se tal dica existir). Neste momento estou tentando identificar a classe do objeto vazado a partir do número de bytes que o aviso imprime.

 
Ovo: Definitivamente, a primeira. Não tenho nenhuma experiência em cuidar de referências a objetos não utilizados, pois minha formação vem de JAVA. Portanto, estou falando sério, que agradeço uma dica para encontrar objetos vazados depois de receber a mensagem de aviso genérica (se tal dica existir). Neste momento estou tentando identificar a classe do objeto vazado a partir do número de bytes que o aviso imprime.

É incompleto em comparação com o mt5. Deve haver outra linha que diz o nome da Classe. Esperemos que eles acrescentem isto em breve.

 

Bem, a caça ao vazamento se tornou realmente irritante... mais do que eu esperava.

Eu gastei algum esforço para criar uma ferramenta, mas não tive sucesso algum. Embora eu descobrisse que podia redefinir as declarações de novo/eliminação, percebi que não tinha nada com que substituí-las. Se fossem funções com parênteses, então seria muito simples, mas infelizmente são declarações. Eu poderia criar um invólucro em torno das declarações novas/apagadas para registrá-las, mas seria uma solução muito dolorosa que não tem futuro.

Se alguém tiver alguma experiência em como detectar a fonte do vazamento, por favor, largue uma nota.

 
Ovo:<br / translate="no">

Bem, a caça ao vazamento se tornou realmente irritante... mais do que eu esperava.

Eu gastei algum esforço para criar uma ferramenta, mas não tive sucesso algum. Embora eu descobrisse que podia redefinir as declarações de novo/eliminação, percebi que não tinha nada com que substituí-las. Se fossem funções com parênteses, então seria muito simples, mas infelizmente são declarações. Eu poderia criar um invólucro em torno das declarações novas/apagadas para registrá-las, mas seria uma solução muito dolorosa que não tem futuro.

Se alguém tiver alguma experiência em como detectar a fonte do vazamento, por favor, largue uma nota.

Talvez estes artigos (para mql5, mas o mesmo se aplica ao novo mql4) possam ajudá-lo a encontrar uma solução :

A Ordem de Criação e Destruição de Objetos na MQL5

Usando os Ponteiros de Objeto na MQL5
 
angevoyageur:

Talvez estes artigos (para mql5 mas o mesmo se aplica ao novo mql4) possam ajudá-lo a encontrar uma solução :

A Ordem de Criação e Destruição de Objetos na MQL5

Usando os Ponteiros de Objeto na MQL5



Obrigado por sua nota.

Infelizmente não parece ajudar no tratamento de vazamentos, isso só explica porque eles acontecem.

A única solução que tenho usado até agora é codificar um teste unitário para cada código que eu crio, e executar testes unitários com freqüência durante o desenvolvimento. Portanto, se o vazamento aparecer, posso tentar isolar o caso de teste que o causou. No entanto, alguns testes são bastante complexos, portanto não é uma solução fácil para o propósito. E o editor é uma verdadeira dor.

 

Como distinguir a nova sintaxe?

Sinto que preciso de uma palavra diferente para fazer referência à sintaxe "próxima" e à sintaxe "original". Parece que a MQ não se importa com os nomes oficiais e continua fingindo que eles são compatíveis.

Portanto, parece que nós mesmos temos que encontrar nomes apropriados. Alguma sugestão? MQL4 V2, OMQL4 (ou seja, Objeto), MQL4.1 ...?