2010-07-06 9 views
8

Actualmente me estoy preparando para un examen. Una de las preguntas que he encontrado en un examen de edad es:
"¿Por qué la mayoría de los lenguajes orientados a objetos no son compatibles con corrutinas? (Pista: No es porque apoyan hilos)"

El problema es que no puedo encuentra una buena respuesta Por supuesto que no necesita coroutines si tiene orientación de objeto, pero aún sería muy útil tenerlos en algunos casos.¿Por qué la mayoría de los lenguajes orientados a objetos no admiten corutinas?

+1

* Por supuesto que no necesita coroutines si tiene orientación de objeto. * False. Los objetos simplemente agrupan datos con funcionalidad. – mcandre

Respuesta

6

Creo que es por razones ideológicas. En la entidad principal OOP que representa el estado es el objeto. Nada más debería tener estado. En el mundo de las corutinas se convierten en un portador de estado más y eso contradice ligeramente con OOP. En C# hay una versión menor de coroutine: declaración de rendimiento, pero es puramente una característica de C#, no de CLR y .net en sí, mientras que todas las variables de estado compiladas se convierten en campos de clase oculta. Es porque nada excepto objeto puede tener un estado en .net.

+2

... a menos que la corutina misma sea un objeto. – Felixyz

2

esto es sólo una conjetura:

A corrutina utiliza el estado de la subrutinapara alterar su valor de retorno, mientras que a un método en un objeto puede utilizar el estado objeto para alterar su valor de retorno.

0

Esto me suena como una pregunta pésima para un examen - es muy subjetivo, y no hay una respuesta correcta o incluso la mejor respuesta. Para resumir, no creo que nadie pueda hacer mucho más que adivinar esto.

Supongo que es principalmente porque los lenguajes que han incluido corutinas (por ejemplo, Concurrent Pascal, Concurrent C (que en realidad admitía el C++ de la época) y Ada Tasks también son similares), nunca ser particularmente popular Desde un punto de vista técnico, estos diseños ya son extremadamente bueno, pero nunca se han vuelto especialmente populares. Hasta cierto punto, eso es probablemente una cuestión de tiempo tanto como cualquier otra cosa. Cuando las computadoras con multiprocesador estuvieron disponibles para hacer de la computación paralela un objetivo real para la mayoría de los programadores, estos lenguajes ya habían sido olvidados.

Desde un punto de vista técnico, no estoy seguro de que alguien tenga algo nuevo que agregar: lo que se necesita es un buen "argumento de venta" para hacer que Concurrent C o Ada 95 (etc.) suenen como algo nuevo e innovador lo suficiente como para hacer que la gente al menos los pruebe. Por supuesto, las implementaciones de décadas atrás a menudo tenían un único hilo bajo el capó, que necesitarían actualización. Por ejemplo, sin embargo, estoy seguro de que las implementaciones de Ada 95 se han actualizado para que puedan usar múltiples núcleos bastante bien. Sin embargo, eso no parece haber hecho mucha popularidad (por ejemplo, aquí en SO, la etiqueta ada se ha usado actualmente solo 90 veces).

4

El propósito de una pregunta como esta en un examen no es ver si conoce la respuesta. (No es necesario que sea una respuesta correcta) Más bien, es para determinar si el alumno ha desarrollado la capacidad de pensar y razonar dentro del dominio de la materia.

Si tuviera que responder esta pregunta, observaría: a) Un actor-modelo es una gran fusión de orientación a objetos con corutinas, en el sentido de que los actores (agentes) podrían recibir y procesar mensajes al mismo tiempo. b) La verdadera razón por la que las corutinas no se encuentran a menudo en los lenguajes de programación orientada a objetos es la misma que la razón por la que las corutinas no se encuentran a menudo en ningún lenguaje general, a saber. Las corutinas son difíciles de implementar en presencia de una pila convencional.

Mi respuesta es, casi con seguridad, demasiado tarde para ayudar al cartel original. Pensé que respondería de todos modos, ya que las corrutinas y otras formas de concurrencia son actualmente un tema popular.

0

La idea de un objeto es aislar el estado. Todo lo que necesita debe estar presente en ese objeto. Una corutina 'romperá' esta idea porque ahora un objeto ya no es un estado aislado, sino que depende de otro objeto.

0

Bueno, en realidad tanto Simula 67 como Smalltalk 80 - los lenguajes OO definitivos y definitivos - soportaron coroutines perfectamente. Así que dudo que la idea de corutinas sea fundamentalmente incompatible con OOP per se. Es más probable que sea una coincidencia, ese tipo de pregunta como "¿por qué lo bueno no es compatible con X en los lenguajes principales/sistemas operativos/etc".

Cuestiones relacionadas