La nueva sintaxis de MQL4

 

Ha pasado un tiempo desde que se lanzó la Beta, y he visto una nota en algún lugar, que la versión regular podría aparecer a mediados de enero. Aunque dudo que ocurra, tal vez algunos codificadores pueden sentir interés en compartir ideas y problemas que aprendieron con la Beta.

¿Tiene ya sentido iniciar una discusión sobre la nueva sintaxis del código fuente de MQL4, el editor, el compilador, los patrones, la POO o cualquier otra cosa relacionada?

Por favor, nada de informes de errores, ni llantos, sólo discusión constructiva en este tema.

 

He revelado que la directiva #include se ignora si se repite, es decir

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

funciona igual que

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

Aunque es un comportamiento muy bienvenido si tienes declaraciones de clases en archivos separados, no se menciona en el archivo de ayuda.

 

La nueva versión parece ser un poco más rápida.

Las matrices dinámicas establecidas como series parecen desplazarse automáticamente.

La sobrecarga defunciones proporciona una mejor interconexión que los conmutadores.

 
Agradecería una pista de cómo localizar la causa de la "fuga de memoria". ¿Hay alguna buena práctica?
 
Ovo: Agradecería una pista de cómo localizar la causa de la "fuga de memoria". ¿Hay alguna buena práctica?
¿Estás haciendo una pregunta de programación general como asegurarte de "borrar la memoria asignada dinámicamente" || "limitar el uso de funciones rec ursivas". ¿O te refieres a un fallo de fuga de memoria dentro de la beta?
 
ubzen:
¿Está haciendo una pregunta de programación general como asegurarse de "borrar la memoria asignada dinámicamente" || "limitar el uso de funciones recursivas". ¿O te refieres a un fallo de fuga de memoria dentro de la beta?


Definitivamente a lo primero. No tengo ninguna experiencia con el cuidado de las referencias a objetos no utilizados, ya que mis antecedentes provienen de JAVA. Así que me refiero a que agradezco una pista para encontrar objetos filtrados después de recibir el mensaje de advertencia genérico (si es que existe tal pista). Ahora mismo estoy intentando identificar la clase del objeto filtrado a partir del número de bytes que imprime la advertencia.

 
Ovo: Definitivamente la primera. No tengo ninguna experiencia en el cuidado de las referencias a objetos no utilizados, ya que mi formación proviene de JAVA. Así que me refiero a que agradezco una pista para encontrar los objetos filtrados después de recibir el mensaje de advertencia genérico (si es que existe tal pista). Ahora mismo estoy intentando identificar la clase del objeto filtrado a partir del número de bytes que imprime la advertencia.

Está incompleto en comparación con mt5. Debería haber otra línea que diga el nombre de la clase. Esperemos que añadan esto pronto.

 

Bueno, la búsqueda de fugas resultó ser realmente molesta... más de lo que esperaba.

Me esforcé en crear una herramienta pero no lo conseguí en absoluto. Aunque descubrí que podía redefinir las sentencias new/delete, me di cuenta de que no tenía nada con lo que sustituirlas. Si fueran funciones con paréntesis, entonces sería bastante sencillo, pero desafortunadamente son sentencias. Podría crear una envoltura alrededor de las sentencias new/delete para registrarlas, pero sería una solución muy dolorosa que no tiene futuro.

Si alguien tiene alguna experiencia de cómo detectar el origen de la fuga, por favor, deje una nota.

 
Ovo:<br / translate="no">

Bueno, la búsqueda de fugas resultó ser realmente molesta... más de lo que esperaba.

Me esforcé en crear una herramienta pero no lo conseguí en absoluto. Aunque descubrí que podía redefinir las sentencias new/delete, me di cuenta de que no tenía nada con lo que sustituirlas. Si fueran funciones con paréntesis, entonces sería bastante sencillo, pero desafortunadamente son sentencias. Podría crear un wrapper alrededor de las sentencias new/delete para registrarlas, pero sería una solución muy dolorosa que no tiene futuro.

Si alguien tiene alguna experiencia de cómo detectar el origen de la fuga, por favor, deje una nota.

Tal vez estos artículos (para mql5 pero los mismos se aplican a los nuevos mql4) pueden ayudar a encontrar una solución :

El orden de creación y destrucción de objetos en MQL5

El uso de los punteros de los objetos en MQL5
 
angevoyageur:

Tal vez estos artículos (para mql5 pero los mismos se aplican al nuevo mql4) puedan ayudarte a encontrar una solución :

El orden de creación y destrucción de objetos en MQL5

Uso de los punteros a objetos en MQL5



Gracias por su nota.

Lamentablemente no parece ayudar a tratar las fugas, sólo explica por qué se producen.

La única solución que he estado utilizando hasta ahora es codificar una prueba de unidad para cada pieza de código que creo, y ejecutar pruebas de unidad con frecuencia durante el desarrollo. Así, si la fuga aparece, puedo intentar aislar el testcase que la ha causado. Sin embargo, algunas pruebas son bastante complejas, por lo que no es una solución fácil para el propósito. Y el editor es un verdadero dolor.

 

¿Cómo distinguir la nueva sintaxis?

Creo que necesito una palabra diferente para referirme a la "próxima" sintaxis y a la "original". Parece que a MQ no le importan los nombres oficiales y sigue fingiendo que son compatibles.

Así que parece que tenemos que encontrar nombres apropiados nosotros mismos. ¿Alguna sugerencia? ¿MQL4 V2, OMQL4 (es decir, Object-), MQL4.1 ...?

Razón de la queja: