170 похожих чатов

Всем привет. Как в CPython отрабатывает следующий код: 100500 +

12.34? В какой момент и на основе чего оно приводит всё к числам с плавающей точкой?

25 ответов

15 просмотров
林檎- Автор вопроса

Ну то есть, там по идее будет опкод BINARY_ADD

ну так один флоат. значит надо все в флоат

林檎- Автор вопроса
👑OGURCHIK🖤
ну так один флоат. значит надо все в флоат

На каком этапе? (: К моменту разбора байт-кода, первый агрумент уже приведён к float'у?

林檎- Автор вопроса
林檎
Мне интересно нутро, да.

братек я с тобой, я теперь тоже заинтересовался

林檎- Автор вопроса
👑OGURCHIK🖤
так отследи

Я вот немношк непонял: >>> 12302 + 23406.0 OpCode LOAD_GLOBAL 0 | 1 LOAD_GLOBAL 0 | 1: 'codecs' => <module 'codecs' from '/home/dbukanov/code/my/cpython/Lib/codecs.pyc'> (global) OpCode LOAD_ATTR 1 | 4 OpCode LOAD_FAST 0 | 7 OpCode LOAD_FAST 1 | 10 OpCode LOAD_GLOBAL 2 | 13 OpCode CALL_FUNCTION 3 | 16 CALL_FUNCTION 3 | 16:, True, 'strict', <read-only buffer ptr 0x560202f5b3e0, size 16 at 0x7f212b99c7b0>, <built-in function utf_8_decode>) -> (u'12302 + 23406.0\n', 16) [16] OpCode RETURN_VALUE | 19 OpCode LOAD_CONST 3 | 1 LOAD_CONST 3 | 1: 35708.0 OpCode PRINT_EXPR | 4 35708.0

林檎
Я вот немношк непонял: >>> 12302 + 23406.0 OpCode ...

В какой программе дизассемблировал?

林檎- Автор вопроса
evgeniy
В какой программе дизассемблировал?

Добавил отладочный вывод в CPython

林檎- Автор вопроса
evgeniy
Как это делается?

Берёшь сорцы CPython, правишь, собираешь, запускаешь.

林檎
Берёшь сорцы CPython, правишь, собираешь, запускае...

Понятно. Я думал можно опцию добавить при вызове python в интерактивном режиме.

Про это я знаю, пользуюсь постоянно.

林檎- Автор вопроса
evgeniy
Понятно. Я думал можно опцию добавить при вызове p...

Так-то у него есть некоторый дебаг, но мне мало было

Люблю заглянуть под капот, чтобы посмотреть, как всё работает :). Ещё постоянно дебажу CPython с помощью gdb.

Возникает вопрос - "как складывается 12 + 5.7?", включаешь gdb и смотришь. 😎

林檎- Автор вопроса
evgeniy
Люблю заглянуть под капот, чтобы посмотреть, как в...

Для вывода опкодов достаточно поправить TARGET-макросы, которые используются в свитче в PyEval_EvalFrameEx

林檎- Автор вопроса
evgeniy
А почему не dis модуль?

Потому что он только мнемоники выводит, но не показывает, что за ними скрывается + он не рекурсивен же. Т.е. CALL_FUNCTION будет просто CALL_FUNCTION

林檎
Потому что он только мнемоники выводит, но не пока...

Интересно, надо попробовать. Здесь надо менять? Это где-то описано или ты сам придумал? P. S. Я пользуюсь таким скриптиком для дизассемблирования модуля.

林檎- Автор вопроса
evgeniy
Интересно, надо попробовать. Здесь надо менять? Эт...

Похоже на то, я на 2.7 эксперементировал

林檎
Похоже на то, я на 2.7 эксперементировал

А что там надо добавить, можешь скопировать?

林檎- Автор вопроса
evgeniy
А что там надо добавить, можешь скопировать?

Что-то в духе printf("OpCode %s\n", #op);\ после op: \

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта