我正在准备考试.我在旧考试中发现的问题之一是:
"为什么大多数面向对象的语言不支持协同程序?(提示:这不是因为它们支持线程)"
问题是,我找不到一个好的答案.当然,如果你有面向对象的话你不需要协同程序,但在某些情况下使用它们仍然非常有用.
我认为这是出于意识形态的原因.在OOP中,表示状态的主体是对象.没有别的东西应该有州.在协程世界中,它们成为国家的另一个载体,与OOP略有矛盾.在C#中有一个次要版本的coroutine:yield语句,但它纯粹是C#的特性,而不是CLR和.net本身,而编译时所有状态变量都成为隐藏类的字段.这是因为除了对象之外什么都不能在.net中有状态.