Учитывая, что я могу скомпилировать 300 классов за считанные секунды, для реализации Java можно просто предоставить исходные файлы Java вместо байт-кода в качестве входных данных, затем скомпилировать и кэшировать исходный код ввода и никогда не компилировать его снова (например, python делает это, и множество языковых реализаций делают то же самое, за исключением того, что вы даже не пытаетесь кэшировать):
- Этот первоначальный опыт компиляции будет эквивалентен процессу установки, который пользователи уже используют для
- Это устранило бы необходимость реализации нетривиальной задачи проверки в интерпретаторе байт-кода (который действительно просто переопределяет части компиляции временные проверки), что снижает сложность реализации.
- Java, как она есть сейчас, проверяет входной байт-код каждый раз, когда он запускается, даже если он уже проверял его раньше. Точка 2, конечно, уменьшит время запуска, поскольку устраняет этот шаг (хотя текущая платформа Java также может кэшировать "проверенный" статус где-то, чтобы уменьшить время запуска, я не уверен, что он это делает)
- Это позволит реализовать компиляцию, но они хотят (или вообще не нужны), например, для производительности. Android даже не использует байт-код Java, он использует байт-код dalvik, потому что он утверждает, что он более подходит для их нужд (например, более эффективен на своем оборудовании). Если байт-код не существует, это дизайнерское решение, сделанное Google, было бы полностью прозрачным.
- Это будет способствовать открытому исходному коду
Единственное оставшееся обоснование, которое я могу придумать, - это обфускация, но...
- способ компиляции текущих компиляторов, код может быть механически декомпилирован довольно точно
- Исходный код также может быть запутан.
... так что эта точка сводится к тому, что интуиция скажет, что байт-код более сложный, чем исходный код, поэтому наличие формата распространения байткода позволяет обмануть бизнесменов за то, что они думают, что их IP защищен (т.е. байт-код будет "добавлять ценность" ", но для этого нет никаких технических причин).
Почему платформа Java предназначена для распространения байт-кода для пользователя, а не для распространения исходного кода для пользователя? Я не мог найти объяснения этого в любом месте в Интернете. Есть ли большая причина, по которой я здесь отсутствую?
Если вы даете причину, вы, вероятно, должны указать, была ли это причина, по которой первоначально были созданы разработчики языка, или причина, которая по-прежнему действует сегодня.