2015-11-24 2 views
0

Сначала я думал, что это python, так как файл называется macros.py. Но некоторые говорят, что это не так.Прямое использование 1/0 в двигателе V8

This часть двигателя v8 дошла до точки в середине другого обсуждения.

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

Я не видел ничего подобного на другом языке. Каков механизм этого языка (py?/Js?), Чтобы позволить такое выражение?

+3

Это не Python. – interjay

+1

Python не имеет операторов 'define'. У вас есть * не код Python *. –

+0

Это файл macros.py, но, похоже, он не имеет ничего общего с Python. Это действительно вопрос о движке рендеринга V8. –

ответ

1

Строка не действительна Синтаксис Python. Язык Python не имеет понятия типа const, а также не существует синтаксиса macro.

Расширение .py на этот файл сильно вводит в заблуждение; есть только одна строка, которая может содержать или не содержать фактический синтаксис Python:

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

Файл фактически анализируется с помощью Python script, поэтому, в лучшем случае, пользовательский предметно-ориентированный язык. Макросы, которые не отмечены как код 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'), если вам действительно нужно обратиться к бесконечности.

+0

Последнее предложение имеет большой смысл. Некоторое время я буду держать вопрос открытым, прежде чем выбирать ответ. –