C vs Delphi
Натуральный Mortal Combat среди кодеров
Horrific (smirnandr@mail.ru) TanaT (tanat@yes.ru)
Уже долгое время идет борьба между двумя кланами С/С++ и Delphi. Каждый из них пытается доказать, что его язык кодинга лучше и что все должны кодить именно на нем. Сегодня мы решили провести эксперимент и посадить напротив друг друга по одному представителю из каждого клана и устроить битву титанов. Итак, клан С/С++ защищает TanaT. Клан Delphi защищает Horrific.
Правила боя следующие:
1. Битва происходит до первой пущенной капли крови.
2. Холодное оружие в ход не пускать. Зубы и половые органы холодным оружием не считаются.
3. Сзади и ниже пояса не бить, особенно половыми органами.
4. Обсуждать только Си и Delphi. Галлюцинации участников боя в битве не участвуют.
5. Покемонов не применять. Бой идет только собственными силами.
Итак...
Леди-и-и и джентльмены! Сегодня... На арене ][... Состоится битва титанов кодинга.
В правом углу в красных трусах: заслуженный мастер спорта по художественному кодингу программы «Hello World», трижды чемпион мира по версии ХЗ... Великолепный TanaT!!!
В левом углу в белых рейтузах с мишками и телепузиками: заслуженный мастер спорта по скоростному исправлению собственных багов, чемпион вселенной по версии Х, шаман и предводитель секты «VR-Online»... Мистер Horrific!!!
Бойцы, выйдите на центр ринга и покажите друг другу язык. ФАС!!!
РАУНД ПЕРВЫЙ
TanaT: Язык Си является стандартом, поэтому он существует практически во всех ОС, а Delphi только для Windows и Linux, и то Linux поддерживается только последними версиями. Старые ОС просто позабыты и позаброшены (проступают капли слез на глазах
).
HORRIFIC: Ничего, все еще впереди. Delphi - быстро развивающийся язык, и когда он получит должную распространенность, его варианты будут на всех ОС.
TanaT: Благодаря стандартизации Си каждый, кто захочет создать свой компилятор, обязан как минимум придерживаться установленных норм. А вот с Delphi каждый может делать все что захочет.
HORRIFIC: Стандарт - это круто. А ты не думал, что языки программирования развиваются слишком быстро, и в них постоянно что-то меняется. Производителям компиляторов Си приходится тащить за собой ворох старья, которое стандартизировано еще в 70-е годы, а в Delphi просто обрубили все это дело и создали новый язык, отдаленно похожий на Pascal. Точно так же дядя Борман поступил и с C++ Builder, который обладает той же визуальностью и мощью, что и Delphi, но в большинстве своем нарушает стандарт на язык Си. Благодаря отказу от стандарта компиляторы от дяди Бормана смогли получить свою полную визуальность и при этом удобство разработки.
TanaT: Знаю я вашу визуальность!!! Сидишь как полный лам и расставляешь пимпочки по формам!!! А где же сам процесс кодинга? Расставлять фигурки можно научить и обезьяну, а вот кодить как настоящий мужик дано не каждому.
HORRIFIC: Ты че меня за ламера пингуешь
? Если такой крутой, то пиши на ассемблере или лучше в машинных кодах. Вот тут тебе будет процесс кодинга и соединение с космосом в одном флаконе
. Только не забудь пивом запастись на ближайшую пятилетку, потому что даже простейшую утилу написать в машинных кодах - это тебе не красотку чмокнуть
. В Delphi тоже есть кодинг. Визуально ты создаешь только интерфейс будущей проги, а всю логику и вычисления приходится выбивать на клаве ручками. Вот я как раз таки и занимаюсь кодингом, не тратя времени на создание визуального интерфейса. А ты занимаешься геморроем.
TanaT: Ты давно у зубного был?
HORRIFIC: Да я как-то на зубы не жалуюсь.
TanaT: Сейчас пожалуешься
!!! Возьмем, например, Visual C++. У него есть достаточно удобные мастера, которые могут создать тебе шаблоны будущих прог. Ты просто выбираешь, что тебе надо, и Visual C++ без проблем генерирует тебе нужный код. После этого ты только добавляешь то, что нужно, и прога готова.
HORRIFIC: Знаю я твоих мастеров. Только и успеваешь кликать дальше, дальше, дальше, а в итоге глупейшее окно. И все равно все необходимые элементы управления приходится создавать вручную.
TanaT: А ты ни разу не слышал про редакторы ресурсов? Или ты с детства глухой на оба уха
? В Visual C++ любое диалоговое окно можно создать, визуально расставляя все необходимые элементы управления!!!
HORRIFIC: Ну-ну. Я такую визуальность проходил в первом классе. В Visual C++ при визуальном проектировании диалогов ты можешь использовать только чуть больше десятка стандартных компонентов. Все остальное - это будут OCX компоненты, которые требуют регистрации в системе, а это тебе грозит:
1. Настоящим гемором при переносе кода на другую машину.
2. Приходится писать инсталлятор, который будет устанавливать прогу, устанавливать OCX файлы и регистрировать все это.
3. Количество файлов увеличивается, и уже невозможно создать программу из одного файла.
4. OCX компоненты могут потребовать у пользователя перезагрузку компа, а это не многим понравится.
В Delphi у тебя всегда под рукой есть больше 30 компонентов. В инете можно затариться еще миллионом различных вариантов. Все эти компоненты компилируются в код проги и не требуют регистрации при переносе. Ну а самое главное, что исходный код половины этих компонентов доступен для тебя.
TanaT: Ну и пускай прога тянет за собой вагон дополнительных файлов, зато запускной файл получается меньше. А если у тебя руки выросли из заднего прохода и ты не можешь написать инсталлятор, то это твои проблемы, и Си не виноват, что ты родился с ошибкой в коде ДНК
. Попробуй сдаться ученым, и пускай они попробуют расшифровать твою ДНК. Из-за грубейшей ошибки они не смогут расшифровать ее даже за 100 лет
.
HORRIFIC: Ой, как смешно!!! Ты че мне решил порты просканировать? Если мне надо будет уменьшить код проги, я все лишние компоненты могу убрать в DLL файл и потом обращаться к ним. И я так же получу вагон файлов и минимальный запускной файл. А инсталляторы писать мы умеем. Для Delphi хорошо адаптирован Install Shield, который без проблем умеет регистрировать в системе любые OCX компоненты и все остальное фуфло.
TanaT: Стоять Мурка, вот тут мы подошли к хорошей теме. На Delphi невозможно создать прогу очень маленького размера, даже если абсолютно все выкинуть в DLL.
HORRIFIC: Приплыли!!! Ты где был последние пять лет? Тебя случайно зовут не Маугли или Тарзан? На Delphi возможно практически все, и мизерный код не исключение. Ты просто отказываешься от визуальности и не используешь объектную библиотеку VCL, а пишешь на чистом API. Точно так же и в Си. Если хочешь получить маленький код, то откажись от MFC и ощути все прелести кодинга на чистом WinAPI. Вот тут уже гемора получишь и ты.
TanaT: Вот я как раз таки и не получу. У меня есть мастера, которые хоть чуть-чуть да помогают.
HORRIFIC: Ну и что этот мастер может? Все его варианты минимальных приложений сводятся к двум или трем разным видам. Просто создай такие шаблоны на Delphi и используй.
TanaT: Так вот тебе еще создавать надо, а у меня все уже готово. Только пару раз кликни, и готовый шаблон перед глазами.
HORRIFIC: Я не понял. Ты же сам кричал, что это круто - создавать код руками. Вот и создавай его в Delphi. А-а-а, схавал
?
TanaT: Ну а ты же говорил про визуальность, какая она крутая!!! Что же ты будешь ручками, бедный, работать, локти пачкать? А-а-а, подавился
?
HORRIFIC: Но потребность в мизерных прогах возникает очень редко. Чаще приходится создавать проги с каким-то интерфейсом, где размер кода не так важен?
РЕФЕРИ (в лице Центнера): Брейк!!! Первый раунд можно считать оконченным. И тут нужно подвести одну маленькую черту. При кодинге программ, напичканных окнами и разными элементами управления, Delphi становится наиболее удобным. Программы можно создать быстрей, чем даже при использовании мастеров на Visual C++. Но при кодинге маленьких утил, которые должны незаметно сидеть в памяти и занимать мало места, все преимущества визуального кодинга исчезают. Даже можно сказать, что у Visual C++ появляется небольшое преимущество в удобстве. Пусть оно маленькое, но оно все же есть.
Ну, конечно же, если создать некоторые шаблоны разных вариантов минимальных прог, то Delphi может даже догнать Си. Но именно только догнать, потому что нужно создавать все самому. Мы должны признаться, что создать эти шаблоны не сложно и дело одного дня даже с учетом затрат на заправку кодера пивом.
РАУНД ВТОРОЙ
TanaT: Нас, кодеров на Си, всегда будет больше, чем вас! Знаешь - почему? Потому что за нас еще дядя Билл. Хотя почти все его системы немного страдают на голову
, его языки, входящие в состав Visual Studio, является основным средством разработки.
HORRIFIC: Уау!!! Нашел чем гордиться. Если ты будешь кодить на Visual C++, то ты лишаешься всех прелестей демократии. Придется использовать только то, что навязывает M$, а попытки воспользоваться чем-то другим будут встречены таким гемором, что пожалеешь о том, что тебя мама родила.
Корпорация Borland как бы является независимым разработчиком. Чем это грозит? Давай взглянем на ту же технологию CORBA, которая предназначена для организации распределенных вычислений. CORBA великолепно работает как на UNIX, так и на оконных системах, а значит, ты из своих окошек сможешь в полном объеме использовать вычислительную мощь *nix. Ты думаешь, это нравится Microsoft? Ну, конечно же, нет. У нее есть своя технология COM+, которая работает только под Windows (попытки перенести ее под *nix пока что неудачны). Так что если ты работаешь под Visual C++, то ты не сможешь использовать CORBA, и для распределенных вычислений придется ставить только оконные сервера. А тут ты уже должен догадаться, чем все это грозит.
TanaT: Благодаря дяде Гейтсу, ненавидящему Delphi, все описания системных Win API функций идут с синтаксисом и примерами на Си. Ты посмотри сейчас, что творится в любой виртуальной библиотеке или обычной книжке: все с названием "Азбука Win API" или "Системное программирование под Win32" связано отнюдь не с Delphi! DDK и SDK взаимодействуют тоже не с этим, как его, а, черт, вот Delphi!
HORRIFIC: Во-первых, Билл с удовольствием полюбил бы Delphi, но он просто очень сильно любит Basic. Ты, наверно, слышал о существовании этого выкидыша? Так вот, Билл и дядя Борман в свое время заключили соглашение, по которому Borland отказывается от разработок своих компиляторов Basic, а MS не трогает Pascal.
Во-вторых, описания API функций действительно идет с синтаксисом Си. Мне трудно признаться, но помощь по Delphi идет в нормальном варианте, а помощь по WinAPI - просто копия из Си. Дядя Борман просто получил разрешение на поставку со своими средами разработки этой помощи. Возможно, что он переписал бы ее с учетом синтаксиса Delphi, но он этого не делает. Возможно, тут действует какое-то очередное давление со стороны Билла или еще одно негласное соглашение. Но мы привыкли. Не так уж сложно смотреть на Си и писать все то же самое на Delphi. Просто нужно запомнить, что тип int в Си равен типу Integer в Delphi, ну и еще пару отличий.
TanaT: Че ты меня флудишь
? Ты, вообще, слышал про новый язык С#, связавший лучшее от С++ и Java, являющийся самым новым и перспективным средством разработки приложений технологии .NET, продолжающий линию С++. И при этом Microsoft не забросила разработку Visual C++, основной рабочей лошадки любого серьезного
кодера.
HORRIFIC: Я вижу, что ты решил меня забрутфорсить. Вот тут как раз и сказываются недостатки стандарта Си. Просто MS задолбалась тянуть старье и решила поступить как дядя Борман - отбросить все старое и создать новый язык. А вот про технологию .NET флудить меня не надо. Что там есть такого нового и революционного? А нового там только реклама. Очередной трюк Билла и чемодан громких слов, а не технология .NET.
TanaT: Неправда! Неправда! Технология .NET от Microsoft включает в себя, помимо всякого хлама, еще и мощнейшую связку: C# и Visual Java++, которая в ближайшем будущем будет заменена на мощнейшую Visual Java#. Язык Delphi с самого начала не разрабатывался как средство WEB программирования! Конечно, в него потом вошли мощные средства разработки, но их не сравнить с Java! А Си-кодер как раз и использует мощь всей Visual Studio. А основное - это Java, альтернативы которой у Бормана нет и никогда не будет. А Си, и тем более С#, дружат с Java в отличие от Delphi.
HORRIFIC: Java не может дружить с C#, если не нарушать все правила виртуальной машины Java. Заметь, что ты говоришь про Visual Java#, а не чистую Java, которую создала Sun. Я больше чем уверен, что Java# потеряет переносимость и универсальность, а значит, что ей грош цена. Ну ладо, это пока только наметки. Посмотрим, что получится на деле. Мы можем долго спорить о том, чего еще нет. Вот когда появится Visual Studio .NET, вот тогда и вернемся к разговору.
Ну, я понимаю, что ты рад хоть какому-то обновлению, потому что Visual C++ не обновлялась уже с 1998 года, а последняя версия Delphi датируется 2001-м годом. Чувствуешь разницу в три года? Visual Studio не изменялся уже около 4 лет. А теперь прочувствуй, сколько всего изменилось за это время? Вот именно. В Delphi 6 уже есть многое из того, чего нет в Visual Studio. Так что если захочешь использовать новинки в VC++, то придется искать/скачивать обновления. А в Delphi все это уже интегрировано.
TanaT: Я согласен, действительно давно не было новых версий этого дистрибутива, но недавно Мелкомягкая пригласила Стенли Лимпмана (он участвовал в создании оригинального С++) в компанию разработчиков Visual C++. Вот выйдет новый релиз Visual C++, посмотрю, как вы все запоете!
HORRIFIC: Жду и разминаю горло. Вот только думаю, какую бы песню выучить к этому моменту? Наверно, что-нибудь из серии "Ты ж мэнэ спидманула"
.
А что ты скажешь по поводу надежности твоих проектов. Во-первых, в прогах на Delphi количество кода во много раз меньше, чем на Visual C++. Это значит, что нужно намного меньше времени на отладку программы и вероятность ошибок в самых простых местах практически ничтожна.
TanaT: В принципе ты прав, но в Visual Studio существует собственный мощнейший отладчик. По этому отладчику существует туева хуча документации, а также любая книжка, типа "Отладка Windows-приложений", повествует именно об этом отладчике. К тому же не стоит забывать и помощь со стороны дяди Билла, а именно Visual Studio, DDK и SDK. В SDK есть прекрасный ядровый отладчик, по-моему, он называется windebug. К тому же и в DDK, и в SDK есть огромное количество средств отладки, всяких инспекторов и еще куча такого хлама. Так что про отладку я бы на твоем месте не заикался.
HORRIFIC: В Delphi возможности исключительных ситуаций значительно превосходят те же возможности в Visual С++. Это значит, что ты можешь ограничить сомнительные участки, чтобы они не привели к краху всей системы. В Visual С++ исключительные ситуации выполнены коряво.
TanaT: И в чем же корявость Visual С++? Там тоже есть исключительные ситуации?
HORRIFIC: Да, в Visual С++ они есть, и ты можешь их использовать. Только вот твой любимый Билл не использует их. Да и внутри самой библиотеки MFC не используется эта возможность. То есть если ошибка произойдет внутри MFC из-за неправильно переданных пользователем параметров, то крах неизбежен. А это значит, что перед каждым использованием возможностей MFC ты должен проверить на корректность введенную пользователем инфу.
В Delphi библиотека VCL уже защищена от таких проблем, и я могу не заниматься лишними проверками. Поэтому приложения на Delphi вылетают, а окошки не трогают. А если вылетит прога, написанная на Visual C++, то Windows может полететь следом.
РЕФЕРИ: Надежность окошек мы тут не обсуждаем. За нарушение правил битвы Horrific наказывается одним годом исправительных работ в компьютерном клубе с компьютерами на базе процессора Wintel 95
.
TanaT: Давай вернемся к DDK. Что-то я не слышал, чтоб на Delphi драйвера писали! Может, ты что знаешь? Нет. Не так, типа:
BEGIN
ASM
.....
END
END.
Так ты писал про асм-вставки в статье "Супер возможности Delphi" Х за ноябрь 2001 г. Ты там, кстати, рассказал, как отказаться от использования VCL, тоже мне супер возможности. Так вот, на чем я остановился? Ах, да. На Visual C++ вполне можно создавать, например, VxD драйвера, без асм-вставок вообще. Про это было написано в "Компьютер Пресс", по-моему, в феврале 2001 г. Каково?
HORRIFIC: То, что на Delphi не пишут драйверы, так это не значит, что это нереально. Зайди сюда
http://www.adwin.ru/dinfo/materials/vxd.phtml и почитай, как все это просто. Правда, там действительно используются вставки на asm, но для настоящего кодера это не страшно. В статье описан очень хороший шаблончик, который можно написать только один раз и потом использовать без проблем в любых драйверах.
TanaT: Кстати, наш дядя Билл (наш потому, что ненавидит Delphi) выступает "законодателем моды". Недавно взял вот и создал WinXP. А система та не простая (и не золотая, слава богу), а 64-битная. И доки сразу в MSDN появились, мол 64-битные приложения это круто - потому-то, потому-то (и звучит все убедительно), а программировать эти 64-битники надо так-то. И опять все на Си.
И среда разработки и средства отладки, и примеры кода, и вся теория по 64-битному кодингу - все на Си. Вообще, почти вся вселенная вокруг Си вращается. Кстати, я забыл сказать, про Delphi в документах MSDN не упоминается!
И что ты, Horrific, будешь делать, когда все юзеры поменяют свою Windows 2000 на Win XP Professional? Надеешься на новый релиз от своего Бормана?
Такими темпами скоро версии Delphi превысят наше летоисчесление! Прикольно тебе будет кодить, к примеру, на Delphi 2136!
HORRIFIC: Ну я же тебе сказал, что есть такое соглашение, по которому дядя Билл не лезет в душу в Delphi. Поэтому и нет никаких упоминаний. А про 64 бита - так это ты торопишься. WinXP пока что еще 32-х битный. Остальные 32 появятся позже. А доки действительно появляются раньше и заранее вешают лапшу на уши бедных кодеров.
А теперь вспомним недавнее заявление Билла, что он отказывается от технологии MDI (Multiple Document Interface). Теперь Word и Excel будут построены по новой технологии, которую и советуют использовать. А в Win2000, мол, не будет больше многодокументных приложений. А вот теперь запусти в Win2000 консоль MMC. Посмотри, по какой технологии она построена? Вас причесали как маленьких, а вы довольны, что расческа не нужна. MDI жила, живет и будет жить, потому что она удобна!!!
Вопрос: "Зачем Билл делал такое заявление?". Все очень просто. Он же законодатель моды (супермодель, которой только в кино сниматься), и все ему верят. После этой лапши все конкуренты бросились переделывать свои проги, отказываясь от MDI, а Билл в это время движется дальше. Так что из Билла модница никудышная.
TanaT: Но дядя Борман, он-то ведь тоже не против Си. Он за меня, так же как и за тебя. А его Borland C++ Builder отнял у тебя почти все козыри. Теперь хочешь - создавай мелкие приложения, не критичные к размерам, на Borland C++ Builder; хочешь - программь на Visual C++ драйвера или DLL-ки.
HORRIFIC: В C++ Builder от чистого Си остались только рожки да ножки. И дядя Борман больше за меня, потому что C++ Builder всегда выходит, как минимум, на 3 месяца позже, чем Delphi. И это не потому, что компилятор Си сложнее и требует больше времени, а потому что дядя Борман сам же и душит Си. Его козырь это Delphi. А C++ Builder - это всего лишь копия Delphi c синтаксисом Си. И направлена она только на тех, кто хочет ощутить мощь Delphi, но кого причесали Си-шники в корявости языка Pascal.
На мой взгляд, C++ Builder - это всего лишь промежуточное звено для перехода от Си к Delphi, и я как раз по этому пути и прошел (о чем не жалею). Благодаря C++ Builder я ощутил всю мощь Delphi.
TanaT: Перебежчик! Ренегат! Я тебе сейчас покажу!
РЕФЕРИ: TanaT! Перестань!
TanaT: Все, все. Сижу. Никого не трогаю, примус починяю
.
РЕФЕРИ: В какой-то степени Horrific прав. Корпорация Borland действительно слишком мало внимания уделяет C++ Builder. Если бы она немного потопталась, то могла бы продвинуть его. Ведь эта среда могла бы стать золотой серединой для кодеров на Си и Delphi. Но об этом позже.
TanaT: Си намного лучше интегрирован с ассемблером. Во-первых, TASM загнулся на версии 5 и уже давно, а MASM развился уже до 6.15 версии и является помощнее последнего TASM'а раз в 5 минимум. Во-вторых, используя асм в Delphi, ты используешь только асм от дяди Бормана. А используя в Си, хочешь - от Бормана, хочешь - от Гейтса. А от последнего он явно покруче. В Inline процедурах качество ассемблера очень важно. Таким образом, разработка низкоуровневого ПО остается только за Си.
РЕФЕРИ: Протестую!!! Какой asm круче - это очень спорный вопрос и к нашей теме не относится. Поэтому эта претензия с обсуждения снимается. Еще одно нарушение правил, и TanaT будет посажен на пожизненное программирование под MS-DOS.
HORRIFIC: Зайка моя, я твой тазик. К проектам на Delphi можно подключать не только модули на MASM, но и на Си. А вот к Си подключить модули на Delphi проблематично. Так что любую твою работу я могу использовать, а то, что сделаю я, к Visual C++ не пришпандолишь
.
TanaT: При разработке приложений для WEB программист, использующий Visual C++ 7, входящий в состав пакета для разработки приложений технологии .NET, имеет намного больше преимуществ перед Delphi-кодером, так как на него работает почти весь состав Visual Studio 7, а на Delphi - только компилятор Бормана
HORRIFIC: Не вижу преимущества. Точно так же я могу перефразировать, что когда я пишу на Delphi, то на меня работает почти весь состав среды разработки Delphi, а на Си-шника работает только Visual Studio 7. Если ты имеешь ввиду, что ты можешь в C# подключать модули из Visual Studio, то это, конечно же, круто. Только я тебе напоминаю, что я могу подключать и твои модули на Си. А это значит, что на Delphi кодера работает не только Delphi, но и любой Си-шник. А вот на Си-шника дельфист работать никогда не будет
.
ИТОГИ МАТЧА!!!
Как видишь, у каждого языка есть свои преимущества. И если хотя бы один из языков ушел в значительное отставание, то он бы умер. Тут проблема в другом, просто они направлены на решение различных задач. Оболочка Delphi больше подходит для написания офисных приложений, утилит и любых программ, использующих окна и элементы управления. Язык Си удобнее там, где визуального интерфейса нет. Если ты программируешь игры, драйвера или какие-нибудь сервисы без окон, но выполняющие какие-то задачи, то твой выбор - Visual C++.
Говоря о том, что какой-то язык больше подходит для решения определенной задачи, нельзя сказать, что на нем нельзя делать что-то другое. На Delphi так же можно создавать игры (и есть реальные примеры), драйвера и маленькие утилиты. Просто тут он не так удобен. Точно так же дело обстоит и с Visual C++, который так же можно использовать для написания простых утилит и офисных приложений. Просто тут расходы будут больше как умственные, так и временные
.
Какой выбор сделать тебе? Скорей всего, выбирать придется из того, что чаще придется писать.
Идеального языка программирования нет и не может быть. У каждого есть свои преимущества и недостатки.
Многие кодеры надеялись, что споры прекратятся с выходом C++ Builder от фирмы Borland, но переход на него почему-то слишком тормознутый. Те, кто сделал это, оказались в большом преимуществе, потому что они используют самый распространенный язык Си и самую мощную визуальность от Borland. Но и у этого языка есть недостатки - на нем еще слишком мало кодят, и достать под него модули или компоненты немного сложнее. Да и очередные версии выходят немного позже, чем у Delphi. Но если кодеры обратят свой взгляд на C++ Builder, то наступит время примирения, потому что эта оболочка может воспринимать в одном проекте модули на С++ и модули, написанные на Delphi. То есть мы получаем два языка под одной оболочкой. Круто!!!
З.Ы. Несмотря на такой кровавый бой, оба представителя после матча поблагодарили друг друга за беседу. Так и должно быть, ведь, несмотря на разногласия в языках программирования, у них очень много общего - ПИВО
.