Вторая пара углублённого курса: компиляция и интерпретация, байт-код и виртуальная машина, трассировочная таблица и три сломанные программы
| компилятор | интерпретатор | |
|---|---|---|
| когда переводит | всю заранее, до запуска | по ходу, строка за строкой |
| что остаётся | готовый файл (.exe) | ничего, результат сразу |
| когда видно ошибку | до запуска, все сразу | когда до неё дошло выполнение |
| языки | C, C++, Pascal | Python, JavaScript |
У Python дорога длиннее: текст переводится в байт-код (папка
__pycache__), а выполняет его виртуальная машина.
Байт-код одинаков везде, машины написаны под каждую систему — поэтому
программа переезжает с Windows на Linux без единой правки. Плата —
скорость. Так же устроены Java (JVM) и C# (.NET).
| не запускается | красный текст, SyntaxError, ValueError — читать последнюю строку сообщения: там что и где |
|---|---|
| работает, но врёт | ошибок нет, ответ неправильный — трассировка, отладочный вывод, отладчик |
print там, где
надо увидеть, что происходит. Убрать перед сдачей: забытая
строка — уже другой ответ.>>>;Точка останова: правой кнопкой по строке → Set Breakpoint, строка станет жёлтой. Go домчит до неё и остановится. В цикле незаменима — не нужно жать Step по сто раз.
Ctrl+C в окне Shell: Python напечатает KeyboardInterrupt и покажет строку, на которой прервали, — она внутри вечного цикла. Дальше смотреть переменную из условия цикла: меняется ли она внутри? Не меняется — условие останется истинным навсегда.
Вторая пара углублённого курса: компиляция и интерпретация, байт-код и виртуальная машина, трассировочная таблица и три сломанные программы
| компилятор | интерпретатор | |
|---|---|---|
| когда переводит | всю заранее, до запуска | по ходу, строка за строкой |
| что остаётся | готовый файл (.exe) | ничего, результат сразу |
| когда видно ошибку | до запуска, все сразу | когда до неё дошло выполнение |
| языки | C, C++, Pascal | Python, JavaScript |
У Python дорога длиннее: текст переводится в байт-код (папка
__pycache__), а выполняет его виртуальная машина.
Байт-код одинаков везде, машины написаны под каждую систему — поэтому
программа переезжает с Windows на Linux без единой правки. Плата —
скорость. Так же устроены Java (JVM) и C# (.NET).
| не запускается | красный текст, SyntaxError, ValueError — читать последнюю строку сообщения: там что и где |
|---|---|
| работает, но врёт | ошибок нет, ответ неправильный — трассировка, отладочный вывод, отладчик |
print там, где
надо увидеть, что происходит. Убрать перед сдачей: забытая
строка — уже другой ответ.>>>;Точка останова: правой кнопкой по строке → Set Breakpoint, строка станет жёлтой. Go домчит до неё и остановится. В цикле незаменима — не нужно жать Step по сто раз.
Ctrl+C в окне Shell: Python напечатает KeyboardInterrupt и покажет строку, на которой прервали, — она внутри вечного цикла. Дальше смотреть переменную из условия цикла: меняется ли она внутри? Не меняется — условие останется истинным навсегда.