Настільки ж різноманітні, як вони є, існує декілька загальних концепцій, якими поділяються всі серйозні, сучасні мови програмування. Два з них є основою відповіді на ваші запитання вище.
Які дії трапляються між моїм натисканням кнопки Enter і машинним кодом, сформованим з мого коду python, який виконується на моєму процесорі?
Код аналізується, аналізується та подається в інтерпретатор. Це все про дуже важливу область інформатики, відому як теорія компілятора . Компілятор - це програма, яка переводить код з однієї мови (ваш вихідний код) на іншу (зазвичай машинний код, хоча існують "транспілятори", які перекладаються з однієї мови високого рівня на іншу). Це дійсно масштабна тема, на яку можна витратити роки на дослідження, але ось основна версія:
Компілятор починається з аналізатора , підпрограми, яка зчитує ваш вихідний код і застосовує до нього правила синтаксису мови, щоб визначити, чи має сенс дійсний код Python (у вашому випадку). Якщо цього не відбувається, аналізатор видалить помилку, і компілятор випустить, але якщо це станеться, аналізатор виводить те, що відомо як дерево абстрактного синтаксису або коротко AST. AST - це структура даних дерев, у всіх вузлах яких міститься елемент синтаксису. Наприклад, якщо ви скажете x = 5
, у вас може виникнути BinaryExpression
вузол зі operator
значенням =
, Left
значенням ReferenceExpression(x)
і Right
значенням IntegerLiteralExpression(5)
. Усю вашу програму можна представити великим деревом, як це.
Як тільки аналізатор виробляє AST, другий етап - це семантичний аналіз . У звичайній англійській мові це означає "зрозуміти, що означає цей AST". Він перевіряє AST, щоб визначити, чи зробили ви щось незаконне, навіть якщо це дійсний синтаксичний аналіз (наприклад, намагаючись викликати функцію 1-аргументу з 3-ма аргументами) та викликає помилки, якщо це зробити. В іншому випадку він аналізує AST і виконує зміни до нього, щоб зробити його простішим для розуміння машини.
Третя фаза - генерація коду. Після того, як у вас повністю проаналізований, спрощений, дійсний AST, ви подаєте його в генератор, який проходить AST і виробляє код на мові виводу. Це ваш готовий продукт.
З Python він використовує інтерпретатор, а не компілятор. Інтерпретатор працює точно так само, як і компілятор, з однією різницею: замість генерації коду він завантажує вихідну пам'ять і виконує її безпосередньо у вашій системі. (Точні деталі того, як це відбувається, можуть різко відрізнятися між різними мовами та різними перекладачами.)
І як це стосується системи виконання і / або бібліотеки Python?
Усі, крім найпростіших мов, мають набір заздалегідь визначених функцій, важливих для великого відсотка користувачів, і користувачам буде важко реалізувати самостійно з тих чи інших причин. Їх код може використовувати ці функції, не потребуючи сторонніх бібліотек. (Наприклад, у вас є Python print
, який надсилає вихід stdout
. Вдало реалізуйте це самостійно!) Цей набір функцій зазвичай збирається у спільній бібліотеці, до якої може запускатись код під час виконання, і тому це відомо як мовна бібліотека часу виконання, або просто "час виконання" ненадовго.