JavaScript中的生成器在功能上是否等效于其他语言中的协程?

5 javascript generator coroutine ecmascript-6

在ECMAScript 6中,正在实现一个称为“生成器”的功能。

“生成器”在功能上似乎等效于其他编程语言中的“协程”。JavaScript甚至使用与yield这些生成器中相同的关键字。

如果它们的功能完全相同,或者至少具有相同的概念,为什么在JavaScript中将它们称为“生成器”而在其他语言中将它们称为“协程”?

我能想到的唯一可能原因是,由于生成器在功能上有所不同,因此它们使用了不同的名称,但是在检查了一些代码之后,我不太确定。

这是两个在Python和JavaScript中使用协程/生成器的函数,以便您进行比较。

(来自Python文档中的Tasks和协程

import asyncio
import datetime

@asyncio.coroutine
def display_date(loop):
    end_time = loop.time() + 5.0
    while True:
        print(datetime.datetime.now())
        if (loop.time() + 1.0) >= end_time:
            break
        yield from asyncio.sleep(1)

loop = asyncio.get_event_loop()
# Blocking call which returns when the display_date() coroutine is done
loop.run_until_complete(display_date(loop))
loop.close()
Run Code Online (Sandbox Code Playgroud)

(来自MDN文档中的迭代器和生成器

function* idMaker(){
  var index = 0;
  while(true)
    yield index++;
}

var gen = idMaker();

console.log(gen.next().value); // 0
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
Run Code Online (Sandbox Code Playgroud)

我想补充一点,我的编程知识在JavaScript之外没有多大用处。

我已经使用JavaScript超过4年了。也许这是我所学的空白,这就是为什么我在这里问。