Существует три очень разных типа "исполняемых" файлов:
"Бинарные" файлы
"Двоичный" - это неправильное имя, но чаще всего используется. Обычно они имеют расширение .exe
в Windows и, как правило, не имеют расширения в Unix/Linux (но иногда можно увидеть .bin
). Эти файлы содержат код, непосредственно исполняемый процессором, будут напрямую использовать службы операционной системы (например, для чтения / записи файлов или отображения объектов пользователю) и должны быть в определенном формате, чтобы операционная система загружала и выполняла их. Поэтому они разные для каждой операционной системы. Они обычно написаны на C или C++. На практике вам не нужно знать ...
"Интерпретированные" файлы
Исполняемые файлы - это просто текстовые файлы (их можно создавать / редактировать с помощью простого текстового редактора). Для выполнения они должны быть загружены и интерпретированы программой, называемой "интерпретатор" (этот интерпретатор попадает в категорию "бинарных" выше). У вас могут быть определенные версии интерпретатора для каждой операционной системы, поэтому вы можете запускать эти файлы в любой операционной системе, для которой существует реализация интерпретатора. Типичные языки: Python (.py
), Perl (.pl
), JavaScript (.js
).
Файлы "байт-код"
Эти файлы находятся где-то между двумя другими. Вместо создания программы для конкретного типа машины или операционной системы, создается "двоичная" программа для некоторой гипотетической "виртуальной машины". Для его выполнения вы используете другую "бинарную" программу, которая имитирует / эмулирует эту виртуальную машину в вашей операционной системе. Код, написанный таким образом, может работать в любой операционной системе, для которой существует реализация виртуальной машины. Типичным языком, использующим это, является Java (.jar
).
Хотя "интерпретированные" и "байткодовые" файлы теоретически могут работать везде, чтобы иметь возможность делать это, они должны быть написаны с осторожностью - чтобы не полагаться на какое-либо поведение / функциональность, которая существует только в определенной операционной системе. Не все из них идеально независимы от операционной системы.