Форт и Java
июнь 1996
Java - сверхновая звезда на небосклоне компьютерной отрасли, причем настолько яркая, что почти каждый из пишущих на компьютерную тематику не преминул слегка "погреть руки" у этого сияния. Похоже не избежать этого и мне. Чтобы быть более оригинальным, я не буду подливать масла в и без того яркий огонь, а всего лишь попытаюсь провести по возможности объективный сравнительный анализ этой "новой технологии" с древними языками (Форт, Лисп, Смолток) и со старым здравым смыслом :-) Вообще говоря, полностью доверять моей объективности нельзя, так как я фортер (форт-программист) в самом плохом смысле этого слова ;)
Беру белые страницы языка Java (The Java Language Environment. A White Paper.) и вставляю свои комментарии [в скобках].
Начнем со страницы 11 (простите за нелитературный перевод).
"Представьте себе, если можете, этот мир разработки..." [ага, так это только воображаемое!, причем такое я вообразить может и не в силах...]
"Ваш язык программирования _объектно-ориентирован_, но при этом предельно _прост_." [Ну, еще бы, на неОО-язык сейчас никто бы и не взглянул. Модно и удобно. Прост, говорите? Можно пример? Лезу на страницу 19 за самым простым примером:
class HelloWorld { static public void main(String args[]) { System.out.println("Hello world!"); } }
Ужас какой. Это называют простым языком! По-моему, это сложнее, чем на любом языке, включая сложных предков Java. На Форте это программируется так:
.( Hello world!)
Может и не очень сложен их пример, но уж явно не предельно прост. Ладно, не будем делать преждевременных выводов. Читаем дальше.]
"Ваш цикл разработки намного более быстр так как Java интерпретируется. Цикл компиляция-линковка-загрузка-тест-развал-отладка устарел - теперь вы просто компилируете и запускаете." [Ух ты! Видимо программистов, которые могут делать ошибки, к этой Джаве не допускают. Нужны такие программисты, у которых все работает с первого раза... Согласен, что интерпретируемая природа виртуальной машины кардинально ускоряет цикл разработки. Это истина общеизвестна с 1960 года, когда появился язык Lisp. Да и нелюбимый всеми Бейсик столь же стар и известен. Первые интерпретаторы Форта появились в 1971 году. А сколько досталось бедному Smalltalk-80 за его интерпретирующую природу. А от кого? От тех же последователей языка "С"! Сейчас они признали поражение своей религии C/C++ и преподносят это как очередную победу!]
"Ваши приложения _переносимы_ между платформами. Написав приложения, вам не нужно будет их портировать - они будут работать на многих операционных системах и аппаратных архитектурах." [Ну, конечно. Это тоже модно и полезно, как объекты. И тоже реализовано для всех существующих языков. Smalltalk сможет посчитать "5+5" даже на IBM PC XT. А Форт даст правильный ответ "5 5 +" даже на доисторических ПК IBM/360 и на "первом советском ПК" РК-86. А Java? :) Насколько мне известно, ни на одной 16-разрядной платформе, включая Windows 3.1 без Win32s, Java-приложения не исполняются. Другое дело, двоичная совместимость на уровне скомпилированного кода (это потребовалось скорее из-за того что компилятор в новоявленном языке столь же неповоротлив, как и в его предках, и передачу исходного текста с мгновенной трансляцией на клиентской машине, осуществить просто невозможно). И вообще вопрос высокой портируемости - это вопрос процесса стандартизации, а не языка. Java полностью переносим, лишь покуда другие производители не придумали своих расширений языка и во всем слушаются Sun. Поддерживать полную совместимость всех реализаций одного языка не проще, чем клонировать процессоры, и сегодняшняя безоблачная ситуация с Java - это, я уверен, временное явление. Либо совместимость будет нарушена, либо Java умрет, как умер Intel 8080...]
"Ваши приложения _надежны_, потому что система времени выполнения Java управляет памятью за вас." [Полезная вещь, безусловно. Реализовано также в Lisp'е и Smalltalk'е. Автоматическая сборка мусора - одна из причин их низкой производительности, которая и предопределила проигрыш этих языков более эффективному языку "C". Ручная оптимизация использования памяти эффективнее, но более сложна и потенциально менее надежна, если делать это кое как. Наконец, через 35 лет (после Лиспа) это дошло и до наших новых героев. Теперь гордятся, так как своим умом наверное дошли :)]
"Ваши интерактивные графические приложения имеют высокую производительность, так как множественные конкурирующие потоки в вашем приложении поддерживаются _многопоточностью_, встроенной в Java-среду." [Ну прямо открытие за открытием :) Многопоточность, привнесенная на уровень языка? Было даже в первых реализациях Форта и в Smalltalk'а... Очень любопытно, как они могут гарантировать высокую производительность ваших приложений независимо от целевой платформы и от вашего умения программировать? Совершенно несерьезный тезис получился у них.]
"Ваши приложения _адаптируются_ к изменяющемуся окружению, потому что вы можете динамически загружать модули с кодом из любого места сети." [Единственная настоящая новинка: большинство языков появилось до нынешнего сетевого бума, и поэтому об URL, HTTP и т.п. не знают. Но большинство совеременных языков могут использовать новые средства базовых ОС, которые сейчас обзавелись всеми необходимыми сетевыми средствами, и в результате любому языку могут быть доступны сетевые ресурсы. В чем конкретные преимущества Java - в том что он соответствует текущему состоянию сети (и неизвестно как будет дальше, ведь Java не может использовать особенности конкретной целевой платформы, даже если она самая продвинутая сетевая платформа в мире...).]
"Конечные пользователи могут доверять безопасности ваших приложений, даже если они загружают код со всех концов Интернета; система времени исполнения Java имеет встроенную защиту от вирусов и вмешательства." [Антивирусы пришили? Не успели еще вирус для Джавы сочинить, а антивирус уже есть :) Думают, если урезали в Java средства работы с файлами, то уже и вирус в исполняемый файл не запишешь... Тех же результатов можно достичь обычными средствами защиты файловой системы в современной ОС, зачем язык калечить? И разве смысл понятия "вирус" столь узок, как его понимают разработчики Java? По-моему, вирус - это нечто (некто), кто производит в системе некие действия, о которых вы не подозреваете, и которые возможно не разрешили бы, если бы знали. При такой терминологии любое Java-приложение можно считать опасным вирусом - оно загружается в вашу машину неизвестно откуда в двоичном коде (исходник на предмет благонадежности не посмотришь), грузит дополнительные модули со всех концов Интернета (само не знает, что получит). Ненадежность растет пропорционально количеству сетевых связей (вдруг один "Java-центр" забастует не по плану :). И если это допустимо при просмотре Интернета (помните сообщения "узел не найден", "файл не найден"?), то при работе с сетевым приложением это мягко говоря странно. А где гарантия, что сын автора самой популярной сетевой апплетки в один прекрасный день не подложит на сервер вместо папиного произведения "новую версию", которая кроме всего прочего запустит на вашем ПК длииииинный цикл заполнения динамического массива данными, пока виртуальная память виртуальной Java-машины не расползется на весь ваш диск, в лучшем случае застопорив Java-машину, а в худшем приведет к потере текущих данных? Да, они смогли предотвратить самокопирование программы-вируса, но мыслят при этом слишком узко. В сетевых условиях вирусу совершенно не нужно копироваться куда-либо - его ведь можно запускать теперь со всех концов Интернета, достаточно иметь его URL. А если не знаете этого адреса - пожалуйста, апплетки (в том числе злые) могут сделать для вас HTML-страничку с любыми адресами. Зачем копировать вирус? - можно копировать ссылочки на него. За что боролись, на то и напоролись. Java поднимет развитие вирусов на новую ступень! :)]
"Вам не нужно мечтать об этих возможностях. Они уже здесь. Java..." [и т.д. Насчет "не нужно мечтать, они уже здесь" - чистая правда. Только Java тут не при чем :) Описанные полезные возможности существуют не год с 1995 года, а лет 16-36. Исключая сетевые и графические возможности, к которым старые языки адаптируются только в последние пятилетки.]
Язык Java появился вовремя, и для пишущих на C/C++ действительно является приемлемой альтернативой. Но Java далеко не так революционен, как это пытаются нам преподать. Как говорится, "все это уже было". И если уж обращаться к положительным чертам других языковых сред, то почему бы не взять стройный, лаконичный, простой и гибкий язык Smalltalk (именно ему Java пытается подражать в наибольшей степени), либо спроектировать действительно хороший язык "с нуля". Зачем очередной раз модернизировать "С", от которого один язык уже изрядно пострадал (С++)? Слишком велик осадок С/С++ в мозгах нынешнего поколения программистов? Им только клоны "С" подавай? Плюрализма и демократии не хватает, обидно.
Ответить
|