• Исходный, Машинный и Объектный коды - Разница?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Исходный - исходный текст программы
    Объектный - промежуточные модули для сборки и компоновки в машинный код
    Машинный - собранные объектные в исполняемые инструкции
    220px-Linker.svg.png
    Ответ написан
    Комментировать
  • Исходный, Машинный и Объектный коды - Разница?

    @stul5tul
    Исходный код или исходный текст - текст на языке программирования, который пишет человек (как правило, человек). Это обычный текстовый файл (как правило).

    Но процессоры в компьютера/смартфонах и пр. - довольно тупые устройства, способные понимать только чрезвычайно простой машинный код.
    Поэтому любая программа прямо или косвенно превращается из исходного кода в машинный и только после этого исполняется компьютером/смартфоном и пр.

    Объектный код - это промежуточное представление кода. Еще не машинный, но уже не исходный. Используется на этапе сборки программы из нескольких кусков (возможно, написанных в исходном коде разными людьми и в разное время).

    Машинный код - уже готов для исполнения. То есть просто берете его, ничего не нужно более. Делаете двойной щелчок мыши, к примеру, и программа запускается.

    Пример исходного кода - легко:
    package example
    
    func Add(p int) int {
       return p + p
    }


    Пример объектного кода и машинного кода - бессмысленен. Что объектный, что машинный коды этой программы
    не предназначены для чтения человеком.

    Это для вас будет выглядеть как абракадабра.
    !<arch>
    __.PKGDEF       0           0     0     644     30328     `
    go object windows 386 go1.11 X:framepointer
    build id "ZKpaYf_Flzmm6jns9NJp/RbNW-F32vdlI8SgqpfEX"
    ----
    
    
    $$B
    i

    И это еще не весь объектный код - там большой файл.

    Машинный код - еще бОльшая абракадабра, я его сюда даже вставить не смог. Текстовый редактор не пропускает эту кучу спецсимволов и т.п.

    Упомянутая вами цепочка (исходный - объектный - машинный) касается языков программирования, компилируемых в машинный код:
    C/С++/Go/Rust/Pascal.

    Некоторые языки предназначены для компиляции в байт-код. Его нельзя назвать ни машинный ни объектным. Это Java/Kotlin/C#. Если бы этот код выполнялся непосредственно процессором (CPU) его можно было бы назвать машинным. Но он выполняется только через специальную программу.

    Языки Ruby/Python/JavaScript ничего похожего на машинный код не генерят.
    Ответ написан
    1 комментарий