23

我刚刚偶然发现了一个众所周知的compsci关键字“emit”。但是我在一般计算机科学术语中找不到任何明确的定义,也找不到任何特定编程语言中“emit()”函数或关键字的具体定义。

我在这里找到它,阅读 MapReduce:

https://en.wikipedia.org/wiki/MapReduce

我的额外搜索的上下文表明它与信号和/或事件有关。但似乎只是假设读者会知道“发射”是什么以及做什么。例如,这篇关于 MapReduce 模式的文章:

https://highlyscalable.wordpress.com/2012/02/01/mapreduce-patterns/

没有提到“emit”实际上在做什么,只有调用它。但是,它必须不同于其他形式的返回数据,例如“return”或简单的“printf”或等效的,否则对“emit”的调用将是对“return”的调用。

进一步搜索,我发现很多次在 MapReduce 的上下文中出现了一些“emit”的伪代码形式。在 Node.js 中。在 Qt 中。但仅此而已。

背景:我是(主要是)自学成才的网络程序员和系统管理员。我确定 compsci 101(或 201?)中涵盖了这个问题,但我没有参加那门课程。

4

4 回答 4

8

我只见过在学术界构建简单编译器时使用的 emit() 。

在分析程序的语法后,您将其内容标记化并发出(推出)汇编指令。(实际上编写的编译器程序甚至包含一个名为 emit 的内部函数,以反映它的理论/逻辑方面。)

语法分析完成后,汇编器将获取汇编指令并生成二进制代码(也称为机器代码)。

所以,我不认为emit有一个通用的 CS 定义;但是,我确实知道它在伪代码(有时是实际代码)中用于编写编译器程序。这就是美国的本科水平计算机科学教育。

于 2015-09-30T17:33:30.703 回答
8

在网络和网络编程的背景下:

当我们调用一个函数时,该函数可能会返回一个值。当我们调用一个函数并且该函数应该将这些结果发送到另一个函数时,我们将不再用户返回。相反,我们使用emit。我们期望该函数通过我们的调用将结果发送给另一个函数。

函数可以返回结果并发出事件。

于 2018-04-22T05:23:36.870 回答
5

我可以想到使用它的三种情况:

  • Map/Reduce 函数,其中某些输入值导致 0 个或多个输出值进入 Reduce 函数
  • 标记器,其中处理文本流,并以不同的时间间隔发出标记
  • 消息系统

我认为共同点是“零或更多”。Areturn只提供一个从函数返回的值,而“emit”是一个可能发生零次或多次的函数调用。

于 2016-12-08T10:08:24.110 回答
0

在 MapReduce 编程模型的上下文中,据说映射性质的操作接受输入值并发出结果,这无非是输入的转换。

于 2020-08-28T03:46:34.430 回答