在V8发动机中直接使用1/0

时间:2015-11-24 17:53:57

标签: javascript python v8 pyv8

我首先认为它是python,因为该文件名为macros.py。但有些人说不是。

在另一次讨论中,

This v8引擎的一部分出现了。

# Constants.  The compiler constant folds them.
define INFINITY = (1/0);

我还没有用另一种语言看过这样的事情。这种语言的机制是什么(py?/ js?)允许这样的表达式?

1 个答案:

答案 0 :(得分:2)

这行不是有效的Python语法。 Python语言没有const类型的概念,也没有任何macro语法。

该文件的.py扩展名具有高度误导性;只有一行可能包含或不包含实际的Python语法:

# Macros implemented in Python.
python macro CHAR_CODE(str) = ord(str[1]);

该文件实际上由Python script解析,因此它最多只是一种自定义域特定语言。未标记为python macro的Python代码的宏似乎用于将 JavaScript 代码转换为字符数组,从顶部的注释判断:

# This is a utility for converting JavaScript source code into C-style
# char arrays. It is used for embedded JavaScript code in the V8
# library.

JavaScript 代码中,(1/0)生成浮点无穷大:

> (1/0)
Infinity

在Python代码中,这引发了一个异常:

>>> 1/0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero

但是你不需要这样的技巧,因为如果你真的需要引用无穷大,你可以使用float('inf')