Delphi против C++ Builder - что лучше для Java-программиста, использующего Win32

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

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

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

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

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

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

Я программирую довольно сложную надстройку для Excel, поэтому малый размер загружаемого файла и простая установка являются первоочередными задачами. Как бы мне ни нравился внешний вид C#, и я немного изучил его, я думаю, что мне было бы лучше с чем-то, что компилируется в собственный код для этого проекта.

MB. 08.10.2008 01:09

Предположительно вы уже рассматривали возможность написания надстройки с использованием VBA? Я понимаю, что это довольно отвратительный язык / среда для разработки, но есть ли другие причины, по которым вы не могли реализовать надстройку с помощью VBA?

Dónal 11.10.2008 01:54

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

MB. 11.10.2008 15:01
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
16
3
14 111
12
Перейти к ответу Данный вопрос помечен как решенный

Ответы 12

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

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

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

Спасибо Джакомо. Этот документ выглядит довольно полезным, хотя последний раз он обновлялся в 1997 году, поэтому мне интересно, сильно ли что-то изменилось с тех пор? Что касается Boost, например для C++ ... Я очень мало знаю о Boost, но я видел, как люди говорили о нем как о «краеугольном камне нового C++» или что-то в этом роде.

MB. 08.10.2008 01:13

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

MyObj = TMyObj.Create;

try
  MyObj.DoSomething;
finally
  MyObj.Free;
end

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

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

Я думаю, что у меня все в порядке с пониманием освобождения объектов, мне просто немного больно думать о том, какой объект будет владеть чем и т. д., Когда я проектирую вещи. Имеется ли в последней версии C++ Builder достойный сборщик мусора, делающий ручную очистку ненужной?

MB. 08.10.2008 01:18

Нет, C++ Builder не имеет встроенного сборщика мусора, я думаю, что есть некоторые сторонние решения, но, честно говоря, вам гораздо лучше сначала узнать, как управлять своей памятью на любом языке, который создает собственный код, прежде чем начинать надстройка сборщика мусора.

Tim Jarvis 09.10.2008 04:31

Ура, Тим Дж. - Я слышал, что сборка мусора скоро станет частью стандарта C++, но что это означает на самом деле, я не знаю (немного не разбираясь в C++).

MB. 09.10.2008 20:54

>> Если ты его создаешь, ты его освобождаешь. Если он не является производным от интерфейсного класса. Затем он освобождается в конце созданной области. И если это не запись типа. Затем вы можете вызвать для него Create, и он будет помещен в стек.

nurettin 15.06.2016 13:29

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

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

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

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

MB. 08.10.2008 01:26

Это очень информативный подкаст. Я бы посоветовал послушать всех, кто интересуется этим сборщиком мусора.

MB. 09.10.2008 20:45

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

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

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

LOL - отличный ответ, спасибо Дону. Я очень рад по возможности избегать указателей, так что это несомненный плюс для Delphi. Но я думаю, что создание графического интерфейса для C++ Builder такое же, как и для Delphi (хотя я на самом деле не пробовал это в C++ Builder).

MB. 08.10.2008 02:47

@Don: «Я был бы удивлен, если бы у него был такой же красивый конструктор графического интерфейса, как Delphi». Быть удивленным. Он идентичен, за исключением того, что вместо него генерирует код C++. Вы можете использовать большинство сторонних компонентов Delphi, повторно использовать формы Delphi в приложениях C++ и т. д. Вы даже можете добавлять файлы Delphi .pas в свои проекты C++.

Roddy 13.10.2008 22:26

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

На самом деле редактор графического интерфейса C++ Builder - это точно такой же редактор и работает точно так же. Это фантастически.

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

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

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

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

Ответ принят как подходящий

Delphi или C++ Builder - выбор непростой!

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

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

Delphi:

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

C++ Builder

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

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

Большое спасибо, Родди - это похоже на хорошее сбалансированное сравнение. Идиома RAII для меня в новинку, но после небольшого прочтения мне кажется, что она может работать только потому, что C++ автоматически уничтожает объекты, размещенные в стеке. Выглядит намного лучше, чем Create / try / finally / free для каждого объекта стека Delphi

MB. 11.10.2008 15:15

Кстати, пробовали ли вы когда-нибудь использовать сборщик мусора с C++ Builder?

MB. 11.10.2008 15:17

@MB: Нет, я не пробовал GC Барри с C++ Builder. Управление кучей с помощью Delphi по сравнению с C++ может быть сложной задачей, поэтому я ожидаю, что для работы могут потребоваться некоторые настройки.

Roddy 13.10.2008 12:27

Ура, Родди, у меня тоже такое впечатление.

MB. 13.10.2008 15:21

вы забыли упомянуть небольшую деталь: Delphi (паскаль) ПУТЬ легче изучать, чем C++

Gravity 11.06.2018 23:14

Я много лет являюсь разработчиком C / C++, в основном на VC в Windows или Linux, однако я начал разработку программного обеспечения на Delphi. Я столько раз пытался переключиться с Delphi на C++ Builder, но всегда терпел неудачу. Не потому, что сам язык C++ Builder, на самом деле язык C++ Builder - это C++, и в нем есть кое-что еще, чего не хватает Delphi. Причина не позволила мне переключиться: 1. IDE: C++ Builder имеет гораздо более низкую скорость синтаксического анализа, компиляция также медленная, IDE довольно часто дает сбой. 2. В самом C++ Builder слишком много ошибок.

Jack Wu 16.01.2019 21:44

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

Ура, Фабрицио! Я не буду спорить с вашим мнением по поводу сборщика мусора, но после многих лет без проблем с Java я лично их обожаю ;-)

MB. 15.10.2008 00:36

Механика владения VCL сослужила мне хорошую службу на протяжении многих лет и не подводила. Прямые манипуляции с памятью всегда вызывают затруднения (поскольку иногда это необходимо при обращении к WinAPI). У меня есть претензия к .NET gc - это отсутствие автоматической вызываемой ловушки при окончательном уничтожении объекта.

Fabricio Araujo 14.11.2008 20:51

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

С точки зрения затрат вам не нужно выбирать необходимость. Купите пакет РАД Студия, и за небольшую дополнительную плату по сравнению с одним отдельным языком вы получите обе индивидуальности Delphi и C++ Builder в одной среде IDE.

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

О боже, я понял, что облажался и купил только один пакет Delphi 2009, когда подумал, что с ним в комплекте идет C++ Builder ... Теперь я протестирую команду поддержки клиентов Embarcadero и посмотрю, "тоже извините" поздно напарник »или« мы рады вам помочь ».

MB. 15.10.2008 00:29

Помогите мне оплатить разницу и собрать и то, и другое вместе. Надеюсь, им это нравится!

MB. 15.10.2008 00:33

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

MB. 20.10.2008 19:06

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

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

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

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

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

Принц Райли, я приму это как голосование за Дельфи. Особенно полезно, так как похоже, что вы довольно часто использовали и то, и другое. Спасибо!

MB. 15.10.2008 00:34

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

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

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

Другие вопросы по теме