Я не знаю справжніх причин, не беручи жодної участі у впровадженні СВМ, але я можу придумати деякі правдоподібні:
- Ідея Java - це бути мовою, що записується коли-небудь, і введення попередньо складених матеріалів у файл класу є таким чином, що це порушує (лише "вид", оскільки, звичайно, фактичний байт-код все ще буде)
- Це збільшило б розміри файлів класу, тому що ви мали б один і той же код там кілька разів, особливо якщо вам трапляється запускати одну і ту ж програму під декількома різними JVM (що насправді не рідкість, коли ви вважаєте різні версії різними JVM, які ви справді треба робити)
- Файли класів самі по собі можуть бути недоступними для запису (хоча це було б досить легко перевірити)
- Оптимізації JVM частково базуються на інформації про час виконання, а в інших програмах вони можуть бути непридатними (хоча вони все-таки повинні забезпечити певну користь)
Але я справді здогадуюсь, і як ви бачите, я не думаю, що будь-яка з моїх причин - це фактичні зупинки шоу. Я вважаю, що Sun просто не вважає цю підтримку пріоритетною, і, можливо, моя перша причина близька до істини, оскільки це звичайно може також привести людей до думки, що файли класу Java справді потребують окремої версії для кожного віртуального комп'ютера, а не крос-платформа.
Мій кращий спосіб насправді полягав би в тому, щоб мати окремий перекладач байт-коду до рідного, який ви могли використовувати заздалегідь, щоб зробити щось подібне, явно створюючи файли класів, які явно побудовані для певного VM, можливо, оригінальний байт-код у них, щоб ви може працювати також і з різними віртуальними машинами. Але це, мабуть, випливає з мого досвіду: я в основному займався Java ME, де дуже боляче, що компілятор Java не спритніший щодо компіляції.