Ayuda con la POO - página 4

 
Vasiliy Sokolov #:

Oficialmente, sí. Extraoficialmente, muchas cosas indican que existe:

  • No hay punteros en MQL. En cambio, son sustituidos por algo que se parece mucho a ellos.
  • En MQL no hay asignación directa de memoria, como en C por ejemplo;
  • Los programas en MQL son ejecutados por una determinada máquina virtual. Renat escribió sobre ello brevemente y ni una sola vez;
  • La instancia de la clase puede ser definida y luego será liberada automáticamente. Por lo tanto, hay algún mecanismo que supervisa estas instancias y las libera cuando es necesario. ¿Qué es eso sino un recolector de basura?
  • Cualquier instancia inicializada a través de un puntero y no liberada adecuadamente será marcada como objeto filtrado al salir. Se imprimirá su número y el tamaño total de la memoria perdida. Un programa con fugas de memoria ni siquiera será validado en Market. De este modo, todos los objetos, incluso los asignados manualmente, se contabilizan, se conocen y son conocidos por el sistema. Esta es una de las tareas clásicas que resuelve el recolector de basura.

Hay una indicación suficiente y completa de que no hay un recolector de basura en emcool - la eliminación es obligatoria después de nuevo.

 
Dmitry Fedoseev #:

Hay un indicio suficiente y suficiente de que no hay un recolector de basura en emcool - borrar es obligatorio después de nuevo.

Por lo que recuerdo, uno de los promotores reconoció que hay un recolector de basura. Pero para el usuario "como que no existe".

En cuanto a la pareja nueva-borrada, estoy a favor. En general, los objetos que solicitan recursos deben ser responsables de ellos. Hay excepciones, como la "fábrica de objetos" - pero allí se asume específicamente que la responsabilidad de los objetos creados recae en quien solicitó estos objetos a la fábrica.

No me gusta la situación de los idiomas en los que está presente lo nuevo, pero no es necesario borrarlo, ya que "el sistema eliminará las cosas innecesarias". Esto no sólo reduce potencialmente el rendimiento (cuando no se eliminan los objetos innecesarios), sino que también relaja al codificador, permitiéndole no preocuparse por las consecuencias de sus acciones.

 
Georgiy Merts #:

Realmente no me gusta la situación de los idiomas en los que lo nuevo está ahí, pero la eliminación no es necesaria, diciendo que "el sistema eliminará lo innecesario". Esto no sólo reduce potencialmente el rendimiento (cuando no se eliminan los objetos innecesarios), sino que también relaja al codificador, permitiéndole no preocuparse por las consecuencias de sus acciones.

Por otro lado, la productividad suele mejorar. La eliminación manual lleva mucho tiempo en el hilo principal. + la eliminación se hace elemento por elemento. Compara las dos versiones del guión en este hilo, por ejemplo. La diferencia de velocidad es de varias veces. La eficiencia de la memoria también aumenta. Porque el recolector de basura mueve objetos compactados entre sí. Si lo gestionas manualmente, se crean agujeros de memoria libres que no son tan fáciles de reutilizar. Además, el recolector de basura trabaja en un hilo diferente. El tiempo básico no se pierde. En definitiva, un plus.

 
Vasiliy Sokolov #:

Por el contrario, la productividad suele aumentar. La eliminación manual lleva una cantidad de tiempo considerable en la corriente principal. + la eliminación se hace elemento por elemento. Compara dos versiones del guión en este hilo, por ejemplo. La diferencia de velocidad es de varias veces. La eficiencia de la memoria también aumenta. Porque el recolector de basura mueve objetos compactados entre sí. Si lo gestionas manualmente, se crean agujeros de memoria libres que no son tan fáciles de reutilizar. Además, el recolector de basura trabaja en un hilo diferente. El tiempo básico no se pierde. En definitiva, es una ventaja.

Vasily, lo siento, pero no entiendes en absoluto de lo que intentas hablar. En absoluto y de ninguna manera.

Al menos lee en Wikipedia lo que es un recolector de basura. Su principal peculiaridad es que elimina los objetos con los que se ha perdido la comunicación.

Sólo que en este caso se llamaría recolector de basura. Esos dos guiones son de una historia diferente. No hay que confundir el regalo de Dios con un huevo.

¿Y por qué un recolector de basura aumentaría de repente la productividad? Es un acolchado más entre el código útil y el hardware, y no uno débil.

 
Georgiy Merts #:

Por lo que recuerdo, uno de los promotores admitió que hay un recolector de basura. Pero para el usuario es "como si se hubiera ido".

///

Este debe ser el "recolector de basura" que da un mensaje sobre la pérdida de memoria al final del trabajo.

Tal vez incluso borre los objetos abandonados. Pero aunque los elimine, hay una gran

diferencia: sólo los borra al final del trabajo. ¿Y si en un ciclo de varios miles se crean nuevos objetos?

¿nuevos objetos? El programa será inoperable, no hay suficiente memoria.

Un verdadero ensamblador borra los objetos perdidos durante la operación del programa, no

sólo al final del programa. Por eso se permite un estilo de programación especial.

podemos multiplicar los objetos en cualquier condición y en cualquier cantidad.

 
Vasiliy Sokolov #:

Por el contrario, la productividad suele aumentar. La eliminación manual lleva una cantidad de tiempo considerable en la corriente principal. + la eliminación se hace elemento por elemento. Compara dos versiones del guión en este hilo, por ejemplo. La diferencia de velocidad es de varias veces. La eficiencia de la memoria también aumenta. Porque el recolector de basura mueve objetos compactados entre sí. Si lo gestionas manualmente, se crean agujeros de memoria libres que no son tan fáciles de reutilizar. Además, el recolector de basura trabaja en un hilo diferente. El tiempo básico no se pierde. En definitiva, un plus.

Hmm... ¿Y en un recolector de basura, el borrado no es elemental? Por no hablar de que otro hilo, cuando no hay núcleos libres, es realizado por el mismo núcleo, y ralentiza el hilo principal.

En mi opinión, en general, con una cuidadosa consideración, la eliminación de la basura por parte del usuario es siempre más eficiente que la eliminación por parte del recolector de basura. Sin embargo, si no te importa, el recolector de basura ciertamente gana.

Por eso no me gusta el recolector de basura, porque fomenta este tratamiento tan indiferente de los recursos.

 
Dmitry Fedoseev #:

Este debe ser el "ensamblador" que da el mensaje sobre las fugas de memoria cuando el trabajo está terminado.

Probablemente incluso borre los objetos sobrantes. Pero aunque los borre, hay un gran

diferencia: sólo los borra al final del trabajo. ¿Y si en un ciclo de varios miles se crean nuevos objetos?

¿nuevos objetos? El programa será inoperable, no hay suficiente memoria.

Un verdadero ensamblador borra los objetos perdidos durante la operación del programa, no

sólo al final del programa. Por eso se permite un estilo de programación especial.

podemos multiplicar los objetos en cualquier condición y en cualquier cantidad.

Así es. Por eso no me gusta trabajar con ensamblador - el usuario no presta atención, cuántos objetos ha creado y dónde.

Básicamente, incluso simplifica el desarrollo de alguna manera: no tienes que recordar borrar el ocupado. El constructor encuentra el momento en que el objeto ya no es referenciado, y lo elimina. Pero esta posición me disgusta. Es por esta posición que tenemos programas que se ejecutan cada vez más lentamente, que necesitan recursos de hardware cada vez más potentes para tareas de similar complejidad.

 
Dmitry Fedoseev #:

Vasily, lo siento, pero no entiendes nada de lo que intentas argumentar. Nada en absoluto y de ninguna manera.

Dmitry, perdona, ¿conoces algún otro lenguaje de programación que no sea mukl? No, no es así. Y todavía no has aprendido a trabajar con objetos y punteros, se ve claramente en esos pocos códigos e incluso artículos que has publicado. Por eso ni siquiera puedo responder seriamente a este comentario sin talento y francamente estúpido. Lee por fin la wikipedia, aprende lo que es un recolector de basura y cómo se organiza, por último lee al menos una vez a lo que te quieres referir. Hasta ahora, todo parece un perro ladrando a una caravana: sin sentido y sin piedad.
 
Georgiy Merts #:

Hmmm... ¿Y en el recolector de basura el borrado no es elemental? Por no hablar de que otro hilo, cuando no hay núcleos libres - se hace por el mismo núcleo, y ralentiza el hilo principal.

En mi opinión, en general, con una cuidadosa consideración, la eliminación de la basura por parte del usuario es siempre más eficiente que la eliminación por parte del recolector de basura. Sin embargo, si no te importa, el recolector de basura ciertamente gana.

Por eso no me gusta el recolector de basura, fomenta este mismo tratamiento indiferente de los recursos.

En lugar de hacer suposiciones sobre el funcionamiento de un recolector de basura, basta con comparar la velocidad de eliminación automática de objetos con la eliminación manual. Todas las fantasías se desvanecerán de inmediato.

 
Vasiliy Sokolov #:

comparar la velocidad de la eliminación automática de objetos y la eliminación manual de objetos.

La respuesta es preferiblemente inmediata. No siempre hay tiempo para hacer experimentos.