Пытался объяснить начинающим инженерам, что такое байткод (в рамках пояснения принципов выполнения Java программ). Так вот, я пытаюсь стандартно объяснить, мол это что то между компиляцией и интерпретацией, типа каждая команда джавовского байт кода, это как несколько ассемблеровских комманд, но они смотрят на меня и говорят - не понятноооо! Они не программисты, не знают что такое ни компиляция, ни интерпретация, ни ассемблер, это я попытался на пальцах им объяснить, и вроде до них что-то дошло, а как можно на пальцах используя жизненные примеры объяснит принцип работы байткода?
А нужно объяснять очень просто. Используя их положение. Для начала показываем этим инженерам программу на Java. Например, классический HelloWorld. И спрашиваем - понятно ли? Скорее всего они скажут нет. Объясняем, что и специальной программе, которая исполняет жава код, тоже не понятно. Для этого нужно "разобрать по косточкам".
Теперь делаем "псевдотрасляцию" - как для машинистки (секретарши). Для HelloWorld'а она будет такая.
Формально - это и есть простой байткод. Только это человеческий байткод. А если в нем стандартизировать все операции и занумеровать, то все может быть сведено к набору чисел. Теперь к реальному байткоду перейти просто.
Легко будет объяснить и переносимость. Если человек (секретарша) выучит все коды операций, то она сможет выполнить любую работу, главное, что бы была последовательность кодов. А инженеры могут попробовать спаять-сконструировать устройство, которое будет это исполнять.
@vanyamelikov по-моему вы сами не понимаете что такое байткод Java :)
Байткод Java это машинные инструкции для несуществующей Java машины, которую часто называют Java Virtual Machine.
В чем сила брат? А сила брат в том, что вы пишете для некоей Java машины (когда-нибудь кто-нибудь сделает таки физическую Java машину). Что такое портабельность Java кода: это всего лишь вопрос реализации Java машины на какой-то реальной машине ну и т.д.
Я бы попытался объяснить как-то так:
Компьютеры "думают" простейшими инструкциями, и когда вы пишете программу допустим на С то она преобразуется в набор примитивных машинных инструкций. Например было выражение на языке программирования
a = 42 * spam
Оно грубо говоря преобразуется в последовательность инструкций
достать значение из spam
умножить его с 42
положить результат в a
Так как компьютеры бывают разные то и инструкции которые они используют тоже не всегда одни и те же.
Поэтому придумали прослойку над этими самыми машинными инструкциями - байт код. Ваш код написанный на таких языках как например java и python преобразуется сначала в него а потом уже в машинные инструкции. Зачем это нужно? Один и тот же байт код будет одинакого работать на разных компьютерах. Грубо говоря байт код это "обвёртка" над машинными инструкциями, повышающая переносимость программ.
Буду рад услашать критику по поводу подобного объяснения^_^
Я так понимаю, вопрос в том, как объяснить, что такое байт-код, не прибегая к объяснению остального контекста. Мне кажется, что не получится объяснить, что такое байт-код, не объяснив, что такое машинный язык и язык программирования, потому что он ведь не сам по себе, он прослойка между ними — т.е. чтобы понять, что делает прослойка, нужно понять, между чем она лежит.
Байткод это система команд некоего процессора. Они знают, что у каждого процессора есть система команд? Программу на ассемблере для х86 видели? Если нет, то покажите. Затем, программу в любой системе команд можно исполнить аппаратно, можно программно (интерпретатором), а можно перевести в другую систему команд, и далее исполнить аппаратно, программно, или ... Так сложилось, что java-байткод интерпретируют или переводят, а х86 исполняют аппаратно. Но причины здесь экономические, а не принципиальные. Java-процессоры существуют, но мало распространены. На других планетах, может быть, все наоборот.
Самый лучший способ практический:
машинный код
вашей виртуальной ЭВМ
, который у вас хранится в массиве PROM -- и есть байт-код: все его отличие от машинного кода только то, что он выполняется не настоящим процессором, а вашей программой-интерпретатором. Ваша программа-интерпретатор -- виртуальная машина
. Если вам интересно, в книге [DragonBook] вы можете найти алгоритмы и методы, как преобразовать ваш байт-код в настоящий машинный код и выполнить его на реальном процессоре -- этим занимается JIT-компилятор
Java."промежуточным представлением программы
[DragonBook] -- между программой на ЯВУ и машинным кодом. Так как при разработке языка Java предполагалось что Java-программы должны исполняться на любом компьютере с заранее неизвестным типом процессора, вместо компиляции (в машинный код) был выбран формат распространения программ в виде файлов с байт-кодом. Формат этого байт-кода, система команд и организация памяти стандартизированы, и описаны в спецификации виртуальной машины JVM
. Также были написаны реализации JVM
для распространенных компьютеров, например для ПК, и мобильных телефонов -- это программы, которые делают то же что делали вы: интерпретируют байт-код, а некоторые реализации умеют его компилировать в ОЗУ прямо в процессе выполнения байт-кода (JIT), что сильно повышает скорость выполнения программы. Зачем придумали байт-код? В начале были интерпретаторы которые просто выполняли код из текста, но так как эффективность в постоянном разборе строк не есть хорошо, придумали работать с байтами, а не как с исходным кодом строк, то есть программа преобразует исходный синтаксис ЯП-а в байт-код где есть инструкции и метки и т.п. почти как в ASM, отсюда и происходит название виртуальная машина, а не интерпретатор, к примеру в Java это JVM. Так что тут всё просто, виртуальная машина при загрузке байт-кода исполняет его. Но это ещё не всё, для большей производительности ввели JIT, то есть компиляции байт-кода в нативный код на ходу исполнения, тем самым не много получаем конкурентоспособность программ к компилируемым ЯП-ам.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Всем приветОбъясните пожалуйста, как добавить один односвязный список в другой
Почему, когда я считываю текст из BoxEditor диалогового окна, или же вызываю диалог открытия/сохранения файла, то текст у меня сохраняется в элементы...
Уважаемые профи! Написал программу записи нескольких потоков аудио данных с АЦП(специальная плата PCI)Программа работает, но при прослушивании...
Подкиньте литературки по поводу общения клиент - сервер - клиентОтправка текстовой информации