Введение
Точка в компьютерной программе, с которой начинается выполнение инструкций. Другие значения терминов "Точка входа" и "Точка начала выполнения".
other uses of "Entry Point" and "Point of Entry"
В компьютерном программировании точка входа — это место в программе, где начинается выполнение программы и где программа получает доступ к аргументам командной строки. Для запуска программы загрузчик или операционная система передает управление точке входа. (Во время загрузки операционной системы сама операционная система является программой). Это знаменует переход от времени загрузки (и времени динамической линковки, если она присутствует) к времени выполнения. Для некоторых операционных систем и языков программирования точка входа находится в библиотеке времени выполнения — наборе вспомогательных функций для языка. Код библиотеки инициализирует программу, а затем передает управление самой программе. В других случаях программа может инициализировать библиотеку времени выполнения самостоятельно. В простых системах выполнение начинается с первого оператора, что характерно для интерпретируемых языков, простых исполняемых форматов и загрузчиков. В других случаях точка входа находится по другому известному адресу памяти, который может быть абсолютным или относительным адресом (смещением). Кроме того, выполнение программы может начинаться с именованной точки, либо с общепринятого имени, определенного языком программирования или операционной системой, либо с имени, указанного вызывающей стороной. Во многих языках семейства C это функция с именем main; в результате точка входа часто называется функцией main. В JVM-языках, таких как Java, точкой входа является статический метод main; в CLI-языках, таких как C#, точкой входа является статический метод Main.
Использование
Точки входа применяются как к исходному коду, так и к исполняемым файлам. Однако в повседневной разработке программного обеспечения программисты указывают точки входа только в исходном коде, что делает их гораздо более известными. Точки входа в исполняемые файлы зависят от интерфейса бинарного приложения (ABI) конкретной операционной системы и генерируются компилятором или компоновщиком (если ABI их не фиксирует). Другие связанные объектные файлы также могут иметь точки входа, которые компоновщик использует позднее при создании точек входа исполняемого файла. Точки входа могут передавать аргументы командной строки, переменные или другую информацию в виде локальной переменной, используемой методом Main. Таким образом, при запуске программы можно задавать определенные параметры, которые затем интерпретируются программой. Многие программы используют этот механизм как альтернативный способ настройки различных параметров или выполнения множества действий с помощью одной программы.
Современный
В большинстве современных популярных языков программирования и операционных систем компьютерная программа обычно имеет только одну точку входа. В программах на C, C++, D, Zig, Rust и Kotlin это функция с именем main; в Java — статический метод с именем main (хотя класс должен быть указан во время вызова), а в C# — статический метод с именем Main. Во многих основных операционных системах стандартный исполняемый формат имеет одну точку входа. В исполняемом и компонуемом формате (ELF), используемом в Unix и Unix-подобных системах, таких как Linux, точка входа указывается в поле e_entry заголовка ELF. В GNU Compiler Collection (gcc) точкой входа, используемой компоновщиком, является символ start. Аналогично, в формате Portable Executable, используемом в Microsoft Windows, точка входа указывается полем AddressOfEntryPoint, унаследованным от COFF. В COM-файлах точка входа находится по фиксированному смещению 0100h. Одним из исключений из парадигмы единой точки входа является Android. Приложения для Android не имеют единой точки входа — нет специальной функции main. Вместо этого они имеют основные компоненты (активности и сервисы), которые система может загружать и запускать по мере необходимости. Иногда используется техника создания "толстых" бинарных файлов (fat binary), которые состоят из нескольких исполняемых файлов для разных целевых платформ, упакованных в один файл. Чаще всего это реализуется с помощью единой общей точки входа, совместимой со всеми целевыми платформами, которая перенаправляет выполнение в точку входа, специфичную для целевой платформы. Альтернативные методы включают хранение отдельных исполняемых файлов в отдельных процессах (forks), каждый из которых имеет свою собственную точку входа, которую затем выбирает операционная система.
Исторические
Исторически, и в некоторых современных устаревших системах, таких как VMS и OS/400, компьютерные программы имеют множество точек входа, каждая из которых соответствует различным функциям программы. Общепринятый способ обозначения точек входа, используемый повсеместно в VMS, а также в программах PL/I и MACRO, заключается в добавлении их в конец имени исполняемого файла, разделенных знаком доллара ($), например, directory.exe$make. Компьютер Apple I также в некоторой степени использовал подобный подход. Например, альтернативная точка входа в BASIC для Apple I позволяла сохранить работоспособность программы BASIC при случайном нажатии кнопки сброса.
Точка выхода
В общем, программы могут завершить работу в любой момент, вернув управление операционной системе или завершившись с ошибкой. Программы, написанные на интерпретируемых языках, возвращают управление интерпретатору, а программы, написанные на компилируемых языках, должны возвращать управление операционной системе, иначе процессор просто продолжит выполнение за пределами конца программы, что приведет к неопределенному поведению. Как правило, в программе не задается единая точка выхода. Однако в других случаях среда выполнения обеспечивает всегда структурированное завершение программы через единственную точку выхода, что гарантируется, если сама среда выполнения не завершится с ошибкой; это позволяет выполнять код очистки, например, обработчики atexit. Это может быть реализовано либо путем требования, чтобы программы завершались возвратом из главной функции, либо путем вызова специальной функции выхода, либо путем перехвата исключений средой выполнения или сигналов операционной системы.
АПЛ
В APL при загрузке рабочей области содержимое переменной "quad LX" (скрытое выражение) интерпретируется как выражение APL и выполняется.
ГНАТ
Используя GNAT, программисту не требуется писать функцию с именем main; исходный файл, содержащий единственную подпрограмму, может быть скомпилирован в исполняемый файл. Однако компоновщик создаст пакет ada main, который будет содержать и экспортировать функцию main в стиле C.
Перл
В Perl нет главной функции. Операторы выполняются сверху вниз, хотя операторы в блоке BEGIN выполняются перед обычными операторами. Аргументы командной строки доступны в специальном массиве @ARGV. В отличие от C, @ARGV не содержит имя программы, которое хранится в переменной $0.
PHP (англ.)
PHP не имеет "главной" функции. Начиная с первой строки PHP-скрипта, любой код, не заключенный в определение функции, выполняется сразу же при его обнаружении.
Ходжо
В Xojo существует два различных типа проектов, каждый из которых имеет разную основную точку входа. Настольные (GUI) приложения запускаются с события App.Open объекта Application проекта. Консольные приложения запускаются с события App.Run объекта ConsoleApplication проекта. В обоих случаях главная функция генерируется автоматически и не может быть удалена из проекта.