Первый взгляд на Java Паскаль программиста
Я решил написать эту статью по той простой причине, что все таки мир работает не только на Си и Си-подобных языках - все таки как ни крути еще существуют программисты, никак упорно не желающие перелазить на Си и самозабвенно программирующие на многочисленных разновидностях Паскаля и Обьектного-Паскаля (Turbo Pascal, Delphi (Object-Pascal), Modula-2, Oberon и т.д.). Естественно появление нового языка Java в мире Паскаля не прошло незамеченным - народ интересуется, что это и насколько похоже на Си. Чтобы помочь разобраться в этом, я и решил написать эту статью.
Для понятия сначала расскажу о себе - программирую с 1989 года - причем именно на Паскале (начинал с Turbo Pascal 3.0). Сейчас преимущественно занимаюсь профессиональной разработкой компонент в среде программирования Delphi версии 5.0 (естественно на языке Object Pascal). Вопрос о том, почему в свое время я выбрал Паскаль, а не Си поднимать не буду - и так всех достали многомегабайтные конференции типа "Си/Паскаль рулез". Скажу только, что Паскаль меня привлек из за своей простоты в изучении, строгих правил, приучающих программиста к аналитическому и последовательному стилю программирования и быстрым компилятором (в те времена все таки на ЕС 1841 разогнаться сложновато было). Вот тут то меня и можно подловить вопросом - "Если все так хорошо в Пасакале - то на кой ты залез на сайт, посвященный Jave, про которую говорят, что она наследует многие качества от Си ?" . Однако как мне кажется ответ на этот вопрос довольно таки не простой и делится на 2 ответа: во первых - мало ли что говорят, а во вторых - никто и не говорил, что на данный момент развития Обьектный Паскаль решает весь необходимый круг задач. Начнем с этого пункта:
(Для облегчения сравнения я буду говорить о среде программирования Delphi с встроенным языком Object Pascal, как наиболее продвинутой среди Паскаль-систем в Windows с довольно навороченной библиотекой компонентов. Чтобы программисты, знающие Java не обвинили меня в полном невежестве, я также хочу заметить, что написал я эту статью изучив именно концепцию Java и ее технологии, а не ее синтаксис, так как любому Паскаль программисту Си синтаксис иногда очень неприятен и эти впечатления могли бы исказить мою оценку Java - как говорится - у меня еще все впереди по части отвыкания от begin ... end и привыкания к { ... })
Что можно сказать на данный момент о Delphi - мне кажется, что к сожалению Borland сбилась с верного пути и в целях выживания фактически начала искажать собственные же концепции, заложенные Delphi. Грустно - но это факт - начиная с версии Delphi 4.0 компания стала буквально впихивать новые технологии в этот продукт, махнув рукой при этом на 3 главных качества, всегда присущих Паскалю, то есть это простота, надежность и скорость. Паскаль в ней стал все более и более приближаться к Си, надежность программ в результате постоянных переделок компонентых библиотек самой Borland стала постепенно сползать к нулю, а про скорость компиляции и требования к аппаратной части я могу лишь грустно умолчать. Да простят меня поклонники Delphi - но от этих фактов никуда не скрыться - все мы получаем многочисленные Access Violation, глюки самой VCL и BDE и все подолгу ждем, пока Delphi прокрутит компилятор на 64 мегабайтах памяти. Не думаю, что Си в этом плане чем то лучше - это наглядно доказывают нам программы, выпущенный самой Microsoft, да и сторонних производителей программы просто пестрят разноцветными ошибками. По моему опыту я считаю, что все эти процесы можно смело назвать "снежным комом" - что Си, что Паскаль - оба языка ведут свое начало из тех глубоких Досовских и Юниковских времен, когда все играли по своим правилам и каждая программа чувствовала себя хозяином компьютера и работала по принципу - "Что хочу, то ворочу". Поэтому я и не удивляюсь, что многие программисты так и не смогли с Си перелезть на Си++, проповедующий концепции обьектно-ориентированного программирования. В этом плане нам, работающим на Паскале, повезло больше - уже начиная с Turbo Pascal 5.5 мы попали в мир обьектно-ориентированных программ - помню свои радостные чувства, когда изучив этот замечательный продукт я накатал собственную библиотеку работы с базами данных в виде обьектов и смог спокойненько забросить куда подальше DBase. Что и говорить - много утекло воды с тех времен, а вот проблемы не только остались, но и стали побольше. Говорить, что мне нравится в Delphi я не буду, об этом можно спросить любого Паскаль-программиста, а лучше я расскажу о том, что в Delphi меня на данный момент не устраивает:
- В самых главных меня не устраивает позиция Borland, фактически забросившая работы по развитию Delphi и наверное поставившая на нем крест - все разговоры о Delphi 6.0 и о ее работе на Linux у меня вызывают только смех сквозь слезы - для Windows версию до ума не довели, а теперь вот их понесло на Linux - можно подумать там все лучше работать будет. К слову сказать я слышал, что разработчики Delphi, можно сказать те люди, которые сделали чудо, перебрались в команду разработчиков Borland Java Builder и именно поэтому я ее недавно установил на своей машине в ознакомительных целях. Не даром же Орлик теперь пишет книги и статьи не про Delphi, а про Java - что то наверное в этом есть.
- Как наследник концепций старых языков Object Pascal, как и Си допускает много потенциальных ошибок (ошибки при работе с выделенной памятью, обьектами и т.д.)
- Всегда славящаяся своей мощной библиотекой визуальных компонент Delphi фактически зашла в тупик - постоянные хаотические ее переделки в целях довстраивания в нее сверху новых технологий, возможностей и компонент превратилась из четкой иеархической системы наследования классов в хаотическую: многие компоненты, похожие по идеологии и назначению, оказались по разную сторону барикад и имееют общим предком разве что сам класс-родитель всех компонентов TComponent. Причем этот относится не только к визуальным компонентам, но и к невизуальным - особенно горестно это видеть на компонентах доступа к базам данных, которые фактически полностью друг от друга самостоятельные и не имеют общих предков, а это означает, что к таким компонентам свой не напишешь - придеться для каждого по отдельности делать.
- Не устраивает меня и жесткая ориентация на Windows-платформы - пусть клиенты, работающие на моих программах и работают на ней, а вот себе бы я бы поставил что-нибудь получше и понадежнее (типа OS/2 или BeOS). Ну не нравится мне принцип - "На чем работает клиент, на том придется работать и мне".
- Многопоточность в Delphi есть, можно сказать, что это самый простой, но не самый удобный и правильный способ реализации многопоточности процессов приложения.
- Хоть Object Pascal и можно считать модульным языком, однако модульность эта довольно относительная - можно сказать она больше работает в пределах одного приложения, чем для многих - коллективная разработка программ на Delphi все таки вызывает головную боль - хотя конечно при строгом соблюдении правил проектирования проекта и выполнении всех обязательств разработчики могут коллективно разрабатывать проекты.
- Delphi позволяет приложение разбить на отдельно компилируемые независимые пакеты BPL. Это хорошо, когда приложение распостраняется среди удаленных клиентов и при изменении в нем достаточно разослать только изменившийся пакет. Однако этот способ имеет ряд существенных недостатков - во первых пакеты взаимосвязанны и если один пакет обращается к классу другого пакета, то придется переносить на клиента весь этот пакет (фактически это выливается сразу в перенос на клиента всех пакетов VCL мегабайт этак на 15). Плюс ко всему прочему, так как приложение собирается посредством компиляции, то приложение не может знать, какие пакеты и когда понадобятся - поэтому они грузятся сразу все вместе с запустившимся приложением - так небольшой довесок для быстрого забивания оперативной памяти, из которого может реально и используется в приложении всего то один класс.
- В Delphi реализована поддержка интерфейсов, что могло бы значительно облегчить жизнь программистов и сделать разработку компонент и приложений более удобным и приятным занятием. К сожалению сама Borland никак не хочет реагировать на эту технологию и продолжает катать компонентную библиотеку в своем старом добром иеархическом наследовании классов, что и приводит к множественному накоплению ошибок и ее разрастанию из за все более расхождения между базовыми классами и невозможности использовать одновременно все их возможности в сторонних компонентах (так же я считаю, что множественное наследование введенное в С++ тоже не является верным решением этой проблемы).
- Delphi на заре своего появления прекрасно доказало, что наиболее удобная среда для программиста, эта та среда которую программист способен дописать до необходимого уровня. На данный момент для Delphi создано огромное количество компонент, обеспечивающих круг очень широких задач. К сожалению из за отсутствия надежности как в Обьектном Паскале, так и на уровне VCL такие компоненты не возможно использовать в серьезных проектах, потому что нет гарантии, что они правильно работают и что при повторном очередном изменении стандартной библиотеки компонентов их авторы доработают и выпустят новую версию компонент. Получается парадоксальная ситуация - среда для разработки компонент есть, а вот пользоваться чужими страшно - в итоге нет ничего удивительного, что каждый программист на Delphi имеет собственную довольно обширную библиотеку компонент и каждый раз при решении нетривиальной задачи изобретает новый велосипед.
- Очень удивляет, что разработчики Delphi никак не хотят полностью перестроить VCL на обьектно-ориентированный уровень - исходные тексты библиотек пестрят обращениями к динамической памяти, указателям, служебные классы, такие как TList реализованны криво, и навевают мысли, что программисты Borland никак не могут забыть Turbo Pascal и Дос со своими ограничениями в 64 кб.
- Очень не хватает встроенной возможности документации компонент - к сожалению собственная библиотека компонент растет довольно таки быстро, а вот писать на нее Help времени не хватает - гораздо было бы проще комментировать необходимые обьекты прямо в программе и потом по ним собирать помощь.
- Почти остановилось обновление драйверов для BDE - MS SQL 7 вышел уже давно, а вот нормального драйвера под него Borland так и не сделала.
И что еще я хочу сказать моим коллегам:
Ребята - Java как раз по духу и концепциям ближе именно к Паскалю, а не к Си, вот они (программисты на Си) и хают Java и плюются на все стороны. А то что синтаксис на Си похож - ну ничего ... привыкнем и к { } и к другим странностям - это ведь не главное в языке. До встречи в сообществе Java ... думаю наше будующее в этом хорошо продуманном настоящим обьектно-ориентированном языке.
Источник: lib.juga.ru