0

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

v8 引擎的这一部分是在另一个讨论的中间点。

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

我还没有在其他语言中看到过类似的东西。这种语言(py?/js?)允许这种表达的机制是什么?

4

1 回答 1

2

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

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

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

该文件实际上是由Python 脚本解析的,因此它充其量是一种自定义的特定于域的语言。从顶部的注释来看,未标记为 Python 代码的宏python macro似乎用于将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')如果你真的需要引用无穷大,你可以使用这些技巧。

于 2015-11-24T18:02:12.767 回答