Здравствуйте, Evgeniy Skvortsov, Вы писали:
ES>Ключевое отличие — это то, что C++ имеет компиляторы практически на всех популярных платформах, а C# — это только windows.
Здравствуйте, Alexey.Os, Вы писали:
AO>Но какая польза от Кьют? AO>Т.к. мы планируем средства разработки от MS. Visual C..
Ну, положим Qt ничуть не препятствует работе в Visual C++. Хочется компилируйте nmake, я лишь предложил лучшее на мой взгляд решение хотя бы по части цены, да и технологии тоже.
AO>Да, основное ПО под Windows. AO>Но, какую выгоду дает .NET(это как бы прослойка)?
С учётом существования Qt особой выгоды дотнет не даёт. Ведь в Qt есть не только формошлёпство с базами, сетями и прочим. Так же имеется рефлексия, интроспекция, да и в целом метапрограммная система, которая открывает возможность к таким вещам как кроссплатформенные плагины. Понятно вам хватит и винды, по крайне мере пока, но даже так можно зашивать в них сразу кроссплатформенный код, ну и сами плагины естественно тоже лишними не будут.
AO>Например, C++ не требует прослойки, и работает с чистой виндой. AO>Это хорошо и ли плохо?
В дотнете плохо то, что мало готовых библиотек алгоритмов, в этом плане больше всего их на C/C++, то есть С++ покрывает весь диапазон. Я, к примеру, могу задействовать в С++ алгоритмы, которые мне в жизнь не написать, а для дотнета их просто нет.
Re[3]: Visual C# vs C++. Надо сравнить перспективы.
Здравствуйте, velkin, Вы писали:
V>Между прочим да, у Qt и прочих лицензия LGPL или бывает даже ещё лучше MIT, а вот Visual Studio нужно покупать. А там ведь вместо Postgres подтянется какой-нибудь MS SQL сервер, а он ведь при тех же возможностях стоит денег. Какая тут перспектива, когда придётся каждую копию у микрософта покупать.
Бюджет будет и будут лицензии от MS.
Т.е. выбор технологий (.NET или Win32) — это не финансовый вопрос, идеологический ...
Re[5]: Visual C# vs C++. Надо сравнить перспективы.
Здравствуйте, Alexey.Os, Вы писали:
V>>Мне можешь верить Если нужен гуй бери QT, C++ (mingw) это ООП. Если нужен простенький сервер бери QT, C++ (mingw) это ООП. Если нужен продвинутый сервер или ещё какая битомолка на шаблонах С++, то boost. AO>Т.е. еще нужен Кьют? Возможностей MS Visual C++ из студии не достаточно?
Вообще-то .NET это набор библиотек алгоритмов, такое обычно зовётся фреймворком, а C# это язык программирования. Если вам нужен язык программирования C++, то понадобится и фреймворк, а лучший из них это как раз Qt. Плюс есть ещё компиляторы, тот же Qt можно компилировать компиляторами Microsoft, а можно и другими. Нетрудно догадаться какие компиляторы входят в состав Visual Studio по умолчанию.
Здравствуйте, Alexey.Os, Вы писали:
AO>Я пытаюсь собрать информацию, оценить ”минусы” и “плюсы” и сравнить перспективу.
Если нужен кроссплатформенный GUI, то C++ и Qt. Но по времени выйдет в 3 раза дольше, чем на WPF.
Если ПО не завязано на супермегавычисления, то однозначно C#. В разы больше вещей, которые за Вас делает компилятор и .Net runtime и о которых не надо думать.
Если супермегавычисления (и хитрая оптимизация по памяти) нужны, то я бы сделал ядро на C++, а GUI и некритичные по ресурсам вещи — на C#. По трудозатратам выйдет огромная экономия.
AO>Например, C# требует .NET. Что здесь хорошего, а что плохого? AO>Какие еще ключевые отличия C++ от C# ?
Плюсы плюсов:
* Кроссплатформенность (в т.ч. GUI с Qt). C# сносно работает на Linux и Mac, но с GUI там большие проблемы.
* При желании можно выжать из железа максимум производительности. Скажем, поиск по многогигабайтной хэш-таблице, сохраненной в файле, без чтения всего файла в память, элементарно делается на C++ и жутко коряво выглядит на C# (с десятками вызовов BitConverter-а). Можно альтернативно использовать unsafe, но там есть свои тонкости.
* Требует существенно меньше памяти
Минусы плюсов:
* Нет нормального garbage collector-а. Поэтому нужно постоянно держать в голове, что и когда удаляется. Всякие shared_ptr и т.п. частично эту проблему решают, но держать это в голове все равно придется. Простейший пример на C#:
2 объекта, первый делает что-то в фоне, второй подписан на его события. Оба удалятся автоматически, когда станут не нужны.
На C++ вы тут же упретесь в то, что:
а) Нельзя просто так взять указатель на метод и автоматически увеличить reference count для объекта. Можно, используя шаблонную магию, но вы замучаетесь.
б) Если myHandler держит ссылку на myEventSource, то получается circular reference. Надо разруливать руками: или делать weak reference, или shutdown() который сбросит (опять же руками) всякие вспомогательные smart-указатели.
* Меньше синтаксического сахара. К примеру, вот такая строчка в C#
if (!m_Something || !m_Something->SomethingElse || !m_Something->SomethingElse->SubSomething)
return "empty";
return m_Something->SomethingElse->SubSomething;
и таких примеров много. Соответственно, одинаковый по функционалу код получается более громоздким и дорогим в поддержке.
* Нет reflection. В C# я могу объявить вот такую структуру:
Это позволяет эффективно разделять алгоритмы и данные, сохраняя всякие настройки, policy, и т.п. в легкочитаемой форме, которую можно зачекинить в git. Более того, форма не привязана к порядку и размеру полей внутри структур, т.е. добавив в середину новое поле, я не сломаю сохраненные файлы.
* Нет yield return, async/await, LINQ и прочих вещей, которые часто экономят сотни строк кода.
* Существенно дольше компиляция, если Вы часто редактируете header-ы. Можно частично побороть через precompiled headers, но все равно будет медленно.
Как-то так.
Re[4]: Visual C# vs C++. Надо сравнить перспективы.
Здравствуйте, velkin, Вы писали:
V>В дотнете плохо то, что мало готовых библиотек алгоритмов, в этом плане больше всего их на C/C++, то есть С++ покрывает весь диапазон. Я, к примеру, могу задействовать в С++ алгоритмы, которые мне в жизнь не написать, а для дотнета их просто нет.
Чего за алгоритмы?
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
Здравствуйте, Evgeniy Skvortsov, Вы писали:
ES>C++ не завязан на платформу никак.
А на ОС завязан? Т.е. Windows как платформа?
Я в "Cи" плохо разбираюсь...
ES>Писать современные приложения с "чистой виндой" (WIN API) — это Адъ и Израиль!
Но, где Адъ приятнее, в .NET или Win ?
ES>Поэтому для получения более правильных советов следует ответить на этот вопрос
ПО будет разного типа (и десктопное, и клиентское, и презентационное, и например модель обсчитать)...
Т.е. если есть зависимость от типа ПО, то хотелось бы этот вопрос понять.
Re[4]: Visual C# vs C++. Надо сравнить перспективы.
Здравствуйте, velkin, Вы писали: V>Visual Studio нужно покупать.
Она бесплатна
V>А там ведь вместо Postgres подтянется какой-нибудь MS SQL сервер
Что значит "подтянется"? Можно использовать любую СУБД на свой выбор.
Re[2]: Visual C# vs C++. Надо сравнить перспективы.
Здравствуйте, velkin, Вы писали: V>А у дотнета нет отдалённой перспективы, то есть на десятки лет как у С++, но пока майкрософт его не убил и ладно.
Майкрософт переписал его под линукс/мак-ос, выложил в опенсорс и активно развивает.
Re[5]: Visual C# vs C++. Надо сравнить перспективы.
Здравствуйте, Alexey.Os, Вы писали:
AO>Бюджет будет и будут лицензии от MS. AO>Т.е. выбор технологий (.NET или Win32) — это не финансовый вопрос, идеологический ...
Вряд ли в наше время будете использовать Windows API, это с высокой вероятностью будет Qt. И это не просто идеологический вопрос, в том то и дело, что с точки зрения технологий на .NET будет жёсткое ограничение. На чём, к примеру, написаны физические движки, а компьютерное зрение, системы автоматизированного проектирования. Для .NET просто не будет нужных библиотек или это будет обёртка над библиотекой C++. Так что в первую очередь это вопрос технологий, и тем удивительнее, что получая многократно больше возможностей ничего за это не платишь.
Re[3]: Visual C# vs C++. Надо сравнить перспективы.
Здравствуйте, Alexey.Os, Вы писали:
AO>Кроссплатформенность в планах НЕ стоит. AO>Хотя, интересно было бы понять, если вдруг встанет задача, действительно ли эта "Кроссплатформенность" помогает?
Кроссплатформенность может помочь в случае если у вас frontend будет от backend отделен.
А будет это написано на c++ или c# не важно — c++ в этом плане даже более кроссплатформенным оказаться может...
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[5]: Visual C# vs C++. Надо сравнить перспективы.
Здравствуйте, AndrewVK, Вы писали:
V>>В дотнете плохо то, что мало готовых библиотек алгоритмов, в этом плане больше всего их на C/C++, то есть С++ покрывает весь диапазон. Я, к примеру, могу задействовать в С++ алгоритмы, которые мне в жизнь не написать, а для дотнета их просто нет. AVK>Чего за алгоритмы?
Тот же OpenCV ещё можно частично сварганить самому, хотя это будет очень трудно и так долго, что проще сразу повеситься. Но вот тот же OpenCASCADE выше моего разумения, хотя всё что нужно запускается и работает, но внутри там просто бешеная математика.
Re[4]: Visual C# vs C++. Надо сравнить перспективы.
Здравствуйте, Слава, Вы писали:
С>Давайте вы немного расскажете о себе и о проекте, чтобы можно было понять, на каком уровне вам следует объяснять. А то всё, что вы пока что написали, напоминает какую-то странную шутку.
Девелоперская команда(в мск) увеличится до 30 чел.(дочка крупной немецкой компании).
Владельцы дали добро(бюджет) на новый проект в следующем году. Плотные обсуждения начнутся уже в середине января.
Я системный аналитик(буду претендовать на роль архитектора). Мне нужно подготовить рекомендации по выбору средств разработки (не только я над этим работаю)
Основная ориентировка продукты — MS. Язык C.
Wrappers in other languages such as C#, Perl, Ch, Haskell and Ruby have been developed to encourage adoption by a wider audience.
V>Но вот тот же OpenCASCADE выше моего разумения, хотя всё что нужно запускается и работает, но внутри там просто бешеная математика.
The set of Advanced Tools includes the following components:
C# Wrapper — a tool for wrapping Open CASCADE Technology C++ classes to C# language, to allow their use from within .NET applications.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>