Delphi против С++ Builder - лучший выбор для Java-программиста Doing Win32

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

Я провел месяц или около того, играя с Delphi 2009. Мне нравится материал VCL GUI, Delphi кажется более подходящим для вызовов Windows API, чем VB6, мне очень нравится, что он намного лучше в OO, чем VB6, и я как блок тестирования, который поставляется с IDE.

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

Я могу обрабатывать Delphi, но мне интересно, может ли С++ Builder 2009 быть лучшим выбором для меня. Я очень мало знаю о С++ Builder и С++, но потом я тоже очень мало знаю о Delphi. Я много знаю язык С++, но я подозреваю, что только нужно знать его подмножество, чтобы сделать что-то полезное... Я слышал, что С++ сегодня гораздо более эффективен для программирования, чем С++ 10 лет назад.

Я буду заниматься новой разработкой, поэтому мне не нужно будет осваивать все аспекты языка С++ - если я смогу найти эквивалент для каждой из функций языка Java, я буду достаточно доволен, и по мере того, как я продвигаюсь вперед может начать смотреть на более продвинутые вещи немного больше. (Извините, если это звучит мучительно наивно - если да, пожалуйста, задайте мне прямо!)

Итак, для программиста Java, который является новым как для Delphi, так и для С++ Builder, который вы считаете лучшим выбором для продуктивной разработки Win32 exes и dlls и почему? Что вы видите в плюсах и минусах каждого?

Ответы

Ответ 1

Delphi или С++ Builder - это сложный выбор!

Как вы знаете, они в основном очень похожи, с точки зрения IDE и RAD.

Плюсы и минусы каждого - независимо от фона - немного похожи на это. Оба имеют большой 2-сторонний RAD-конструктор и структуру (VCL), которые идеально подходят для разработки на родной Windows.

Delphi:

  • ДЛЯ: Большое, активное, энтузиастское сообщество.
  • FOR: Delphi 2009 - лучшая версия на протяжении многих лет.
  • FOR: Delphi "units" делает пары файлов исходных/заголовочных файлов кажущимися архаичными.
  • ПРОТИВ: Нет автоматического уничтожения, поскольку объекты оставляют область видимости, следовательно, много "наконец-то в вашем коде"
  • ПРОТИВ: Язык может быть "многословным", что является вопросом вкуса.
  • ПРОТИВ: использование сторонних библиотек DLL или библиотек на других языках (например, C) требует, чтобы файлы заголовков Delphi записывались

С++ Builder

  • FOR: С++ Builder 2009, вероятно, самая лучшая версия когда-либо
  • FOR: Идиома RAII упрощает управление памятью
  • FOR: Шаблоны невероятно полезны и мощны, даже если реализация С++ Builder содержит некоторые ошибки.
  • FOR: поддержка BOOST и других современных шаблонных библиотек (хотя поддержка Boost не на 100%)
  • FOR: Великое взаимодействие с Delphi означает, что большинство компонентов Delphi могут быть легко использованы.
  • FOR: Простота использования с DLL-библиотеками третьих сторон/библиотеками с заголовками C/С++.
  • FOR: С++ может выглядеть лучше на CV, чем Delphi.
  • ПРОТИВ: CB2009 "только для юникода" - последствия этого для переносимости кода различны и менее продуманны, чем для Delphi
  • ПРОТИВ: пользовательская база С++ Builder намного меньше, чем Delphi. Может быть, 20% или меньше.
  • ПРОТИВ: Borland/Inprise чуть не убили BCB несколько лет назад, и он был воскрешен только после крупных усилий со стороны сообщества. (Тем не менее, приверженность Codegear/Embarcadero действительно впечатляет)
  • ПРОТИВ: С++ Builder не является вершиной кучи внутри Codegear.
  • ПРОТИВ: сторонние поставщики компонентов не всегда понимают/поддерживают С++ Builder

Что об этом. Чтобы заявить о своей позиции, я счастливый пользователь BCB2007/2009 (с BCB5), и я также редко использую Delphi. Несколько лет назад я рассматривал переход от С++ к Delphi, но отсутствие идиомы RAII было единственной вещью, с которой мне трудно было смириться.

Ответ 2

Перейдите в Delphi, и вы можете использовать API-интерфейс Boomm Garbage Collector, написанный Barry Kelly, чтобы вы могли собрать мусор в Delphi. Барри написал это, прежде чем он отправился работать на CodeGear в качестве архитектора компилятора. У этого есть проблемы с действительно большими приложениями, и, скорее всего, он не будет работать с 64-битным Delphi. Он довольно подробно рассказывает об этом интервью подкаста.

Даже если вы не используете этот менеджер памяти для сбора мусора, я бы по-прежнему рекомендовал Delphi над С++. Единственное преимущество, которое С++ дает вам для общего развития, - это фигурный синтаксис привязки. Если вы не против синтаксиса Delphi, то для большинства вещей вы найдете это лучше. Предоставленный С++ Builder имеет весь Delphi VCL и RTL, так что это не так плохо, как Visual С++, но я все же считаю, что Delphi будет лучшим выбором.

Для надстроек Excel (как вы упомянули в своем комментарии) я бы рекомендовал Delphi над компоновщиком С++, потому что он имеет лучшую поддержку COM (что, я считаю, вам нужно для надстроек Excel).

Ответ 3

Delphi будет намного легче для вас договориться, конечно, вам нужно управлять своей памятью, но очень просто

MyObj = TMyObj.Create;

try
  MyObj.DoSomething;
finally
  MyObj.Free;
end

В Delphi все ваши объекты выделены в куче, поэтому правило очень просто, если вы создадите его, вы освободите его.

С++ с его стеком и основанием на основе кучи означает, что у вас есть немного больше возможностей для изучения и больше возможностей для попадания в неприятности.

Ответ 4

После работы с компиляторами Borland C и С++ с BCC 4.1/DOS и Delphi с 3.0 по 2007 год я могу сказать вам честно, что вы находитесь в отличном приключении в любом случае. Перемещение с C/С++ на Borland Builder и RAD IDE - это существенный сдвиг парадигмы (и кривая обучения) от Microsoft VС++, С++ и .NET(использовали VC из первой версии MS-DOS - бежевые три кольцевые мини-вставки).

Выбор между С++ и Delphi - это тот, который я предлагаю вам сделать после того, как ваши ноги станут влажными в нескольких проектах с небольшим или средним размером на обоих языках. Я начал программист на C и примерно через пять лет переключился на Delphi (V3.0), когда VCL просто сделал программирование Windows намного проще и продуктивнее.

Будьте осторожны, Delphi - соблазнительный язык для программистов, поступающих с других языков, таких как COBOL, FORTRAN, VisualBasic, потому что его синтаксис и правила кода применяют некую дисциплину, которая препятствует одному из неприятностей. Сложность и сырая металлическая мощь C делают его отличным языком системного программирования (драйверы устройств, код O/S, встроенное программирование в реальном времени), но в неопытных руках он может вас укусить.

Borland С++ Builder (Delphi VCL добавлен в компилятор С++) берет много острых краев С++ и является моим вторым любимым языком. Поскольку Borland добавила поддержку .NET на оба языка есть веский аргумент в пользу использования Builder вместо VС++ для программирования в среде MS. Хотя С# имеет большое количество "дружелюбия", встроенного по сравнению с С++, если я его нажал, я все равно буду придерживаться Delphi или Builder, если бы я только начинал.

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

Ответ 5

Лично я считаю, что помимо различий между языками существуют другие важные соображения. Например, Delphi IDE полностью поражает воображение для создания GUI в стиле WYSIWYG. Я не использовал С++ Builder IDE, но я был бы очень удивлен, если у него есть построитель GUI, который так же хорош, как Delphi.

Хотя внешне синтаксис С++ больше похож на синтаксис Java, объектная модель Delphi фактически ближе к Java. Хотя указатели существуют в Delphi, на практике ссылки на объекты (например, на Java) используются в 99% случаев. Даже в современном С++ я не думаю, что можно избежать указателей. Не то, чтобы что-то не так с указателями, но на практике....

В свое время я в основном являюсь Java-парнем, но два года работал с Delphi и возвращался к нему в одно мгновение. Напротив, у меня есть только очень ограниченный опыт работы с С++ и вы предпочитаете чистить туалеты, а не возвращаться на этот язык:)

Ответ 6

Конечно, java sintax больше похож на С++, чем на delphi, но я думаю, что объектная модель больше похожа на delphi:

  • одиночное наследование. Интерфейсы существуют, но больше похожи на COM, чем на интерфейсы Java.
  • объекты выделяются в куче и доступны по ссылке

вы можете найти документ, сравнивающий три языка здесь

Ответ 7

Я ничего не смог сделать в С++ VCL, который я не мог сделать с Delphi VCL, и почти все компоненты Delphi отлично работают в С++ Builder. Поскольку я программирую как для Windows, так и для UNIX, С++ более портативен.

Если вы используете С++ STL или другой хорошо разработана библиотека для контейнеров, вывоз мусора вроде становится спорным, и в противном случае руководство GC не сложно (один быстро учится хорошие привычки - которые вы должны практиковать в любом случае, независимо от ГХ). Пока вы используете RAII там, где это возможно, держите управление памятью инкапсулированным в контейнеры, ясность в отношении владения объектами и используйте только указатели как ничтожные ссылки (все из которых вы также должны делать независимо от языка), GC действительно не должен быть проблема.

Ответ 8

"Например, Delphi IDE абсолютно интересен для создания GUI в стиле WYSIWYG. Я не использовал среду разработки С++, но я был бы очень удивлен, если бы у нее был построитель GUI, который так же хорош, как Delphi".

На самом деле редактор С++ Builder GUI - это точно тот же редактор и работает таким же образом. Это фантастика.

.Net имеет огромное количество классов, подобно Java. С# имеет аналогичный синтаксис для Java и из-за огромной библиотеки классов работает довольно точно. И это совершенно адекватная среда для программирования. Но, откровенно говоря, Delphi - это гораздо более приятный язык, IDE и общая среда для работы. С# был разработан тем же человеком, который разработал Delphi и "чувствует" очень похожи во многих отношениях, поэтому не предполагайте, что, поскольку Delphi компилируется в собственный код (хотя вы также можете использовать Delphi.Net), это в корне сложнее использовать. Это совсем не так.

Моя личная рекомендация будет для Delphi, потому что это классный язык. Однако, если вы заинтересованы в изучении С++, С++ Builder, вероятно, самый приятный способ сделать это.

Ответ 9

Я думаю, что если вы поедете с Delphi, вы найдете его более легким после нескольких раз использования, также он имеет больше поддержки сторонних разработчиков и некоторые функции, представленные в Delphi перед С++ Builder

также читал этот блог с экс-Java и теперь парень, стоящий за большей частью базы данных и datasnap, работал в Delphi Steve Shaughnessy, о своем опыте программирования Delphi после 10 лет Java:-) http://blogs.codegear.com/steveshaughnessy/2006/12/03/30193

Ответ 10

Я программирую профессионализм в Delphi за последние 10 лет и хорошо разбираюсь в С++. Я бы пошел на путь Дельфы. Синтаксис намного проще и управление памятью. Этот GC для родного Delphi я еще не слышал... Хотя мне не понравилось много ловушек на коде Delphi.Net, введенных из-за .NET gc, я не очень люблю gcs; -)

Ответ 11

Одна вещь, о которой я забыл упомянуть раньше:

С точки зрения затрат вам не нужно выбирать. Купите пакет RAD Studio, а для скромной дополнительной стоимости на одном отдельном языке вы получите как персонажи Delphi, так и С++ Builder в той же среде IDE.

И стоит упомянуть, что пакет С++ Builder включает компилятор Delphi, и вы можете писать/добавлять файлы Delphi.pas и включать их как часть ваших проектов на С++.

Ответ 12

Если вы собираетесь делать много программ для Windows, изучите С++. Вы изучили бы немецкий язык в рамках подготовки к поездке во Францию? C/С++ является родным языком Windows API. Работа с структурами и вызовами данных WinAPI намного проще в C/С++. Что касается RAD, я использовал MSVC в течение примерно 13 лет, и я могу использовать приложение графического интерфейса так же быстро, как и любой редактор графического интерфейса Visual Studio.