Напиши один раз, беги везде - Но как долго? - PullRequest
4 голосов
/ 24 ноября 2010

Java придумала: «Пиши, беги везде».

Как сделать трюк со всеми фреймворками в долгосрочной перспективе?

Несколько лет назад я написал приложение для JSF и richfaces. Браузеры развивались и вводили новые функции и, конечно, новые ошибки. Теперь приложение все еще работает, и иногда оно показывает ошибки JavaScript из базовых библиотек.

Действительно ли нам нужно переопределить законченное приложение (нет вариантов использования для добавления) из-за технических «улучшений»?

РЕДАКТИРОВАТЬ: приложение, которое я упомянул, было только примером. Такие же вещи легко происходят, если поставщики меняют лицензии. (Oracle может взимать плату за виртуальную машину, а открытая виртуальная машина несовместима с вашим стеком приложений и т. Д.)

Ответы [ 4 ]

4 голосов
/ 24 ноября 2010

Даже если мы верим «пиши один раз, беги куда угодно», это не совсем то же самое, что вечная обратная совместимость. Прагматично, вы должны ожидать, что будущие версии фреймворков изменят некоторые вещи. Иногда это будет удаление того, что раньше было гарантированным поведением (худшее изменение), в других случаях ошибки в вашем коде будут оставаться незамеченными, пока в какой-то будущей версии библиотеки не обнаружится, что вы полагались на детали реализации, которые не были гарантировано. Реже ваш старый код обнаружит новую ошибку в последней версии.

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

Для совместимости, чтобы победить в споре, исходный API должен быть достаточно сильным и достаточно стабильным, чтобы выжить без разрушительных изменений. Если это не так, то будут внесены несовместимые изменения, иначе API будет полностью отменен. В любом случае, ваша программа больше не будет работать, если у вас не спрятана старая версия, чтобы запустить ее.

Вы спрашиваете, как сделать трюк - в первую очередь требуется либо действительно хороший и несколько удачный дизайн интерфейса, чтобы позволить все расширения, которые вы придумали позже, либо же твердое обязательство и «бизнес-кейс» (или не - бизнес-мотив) поддерживать «старую» версию на неопределенный срок. Например, Python 3 не совместим с Python 2, но Python 2 по-прежнему активно поддерживается обновлениями, поэтому старый код Python по-прежнему работает. C99 удаляет только некоторые функции C89, и если ничего не помогает, компиляторы C89 по-прежнему активно поддерживаются. Браузеры поддерживают тысячу и одну старую версию и нестандартные особенности HTML. Я не знаю, как JSF и richfaces сравниваются с ними, или сколько они выводят страниц, которые полагаются на поддержку «старого» (или странного) поведения HTML / CSS / Javascript от клиента.

Так что это может произойти, по крайней мере, на некоторое время. Но есть функции IE6, которые больше не доступны ни в одном браузере, которые можно безопасно выпускать в Интернете (я думаю, вы можете запустить IE6 в изолированной виртуальной машине или на машине, которая вас не волнует), так что это вопрос от чего вы зависели в первую очередь. Могло ли быть предсказано, что проприетарные расширения браузера будут отброшены как камень в будущих версиях? Возможно, но могли ли те разработчики приложений IE6 достичь того, чего хотели, используя надлежащие стандарты, доступные в то время? Не всегда. Даже для тех, кто не связывался с IE6, если ваше приложение попадает в подобную ловушку, вам не повезло.

1 голос
/ 24 ноября 2010

Не думаю, что кто-то может всерьез пообещать «беги куда угодно, навсегда». Рано или поздно Linux, Windows и MacOS устареют, появятся новые ОС, и никто не потрудится написать для них JVM, поэтому ни одно из ваших Java-приложений больше не будет работать. (У меня есть старая игра для MS DOS, которая, на мой взгляд, была крутой, но она не будет работать под Windows DOS. Компания выпустила версию для Windows, но они серьезно переработали игру и, по моему скромному мнению, уничтожили все, что сделал это весело. Облом человек.)

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

0 голосов
/ 24 ноября 2010

Языки программирования и технологии развиваются.Говоря в целом, если веб-приложение довольно простое, оно может принимать обновления, не требуя большого количества изменений.

Языки на основе Java, по-видимому, обновляются реже, чем языки в стеке Microsoft.Однако в JSF 2 внесены некоторые существенные изменения по сравнению с предыдущими версиями, и приложения Richfaces 3.x потребуют переноса, если вы хотите использовать Richfaces 4.x.

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

0 голосов
/ 24 ноября 2010

Похоже, вы говорите не о приложении, а об апплете (потому что вы упомянули java-скрипт). Более того, это апплет, который вызывает javascript со страницы, где он развернут. В данном случае это не совсем чистая Java. Звучит как вызов зависимой от платформы командной строки с помощью Runtime.exec (), затем смените ОС и жалуйтесь, что приложение не работает.

Или, возможно, я не правильно понял ваш вариант использования?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...