C # против C ++ в кроссплатформенном проекте - PullRequest
25 голосов
/ 10 августа 2009

Моя команда планирует разработать приложение, которое изначально предназначено для Windows, но в конечном итоге будет развернуто кроссплатформенно (Mac, Linux и потенциально встроенные устройства). Наше решение - использовать C # / .NET или универсальный C ++ (с Qt в качестве библиотеки пользовательского интерфейса). Мы прогнозируем, что с помощью C # мы сможем разрабатывать наш продукт быстрее и с меньшими затратами из-за повышения производительности по сравнению с C ++, но мы решаем вопрос о том, будут ли кроссплатформенные реализации C # достаточно зрелыми в время, когда мы хотим перейти на другие платформы.

Какие-нибудь предложения от кого-либо из вас, кто был в подобной ситуации?

Ответы [ 18 ]

40 голосов
/ 10 августа 2009

Несмотря на все потенциальные кроссплатформенные возможности Mono, сегодня C ++ / Qt является просто более зрелым вариантом, чем C # / WinForms или C # / Gtk # для кроссплатформенных целей. Любой прирост производительности, который вы получите, используя язык более высокого уровня, скорее всего, будет компенсирован ограничениями Mono.

15 голосов
/ 19 августа 2009

Джен, меня беспокоит формулировка вашего вопроса.

"Моя команда планирует разработать приложение, которое изначально предназначено для Windows, но в конечном итоге будет развернуто кроссплатформенно (Mac, Linux и потенциально встроенные устройства)."

Планируется ли кроссплатформенность или нет? Я могу сделать вывод, что код будет изначально написан для Windows, а затем, может быть, через некоторое время будут потрачены усилия на изменение проекта для межплатформенных возможностей. Это не будет полезно для вашего здоровья или здоровья вашей команды! Определенное деловое решение должно быть принято здесь. Одно из золотых правил кроссплатформенной разработки - относиться ко всем целевым платформам с абсолютным равенством.

Можете ли вы использовать C # для встроенных сред? Это уже сделано коммерчески? Просто любопытно.

«Мы прогнозируем, что с помощью C # мы сможем разрабатывать наш продукт быстрее и с меньшими затратами благодаря повышению производительности по сравнению с C ++» Что вы имеете в виду «проектирование»? На какие факты и цифры вы делаете этот прогноз? Не забывайте, что усилия по написанию кода в некоторых проектах составляют всего около 20% от общего усилия, необходимого для вывода продукта на рынок. Так что вопрос сравнения производительности компьютерных языков может быть не таким значительным. По моему опыту нецелесообразно выбирать компьютерный язык по так называемым критериям производительности.

«Мы играем в азартные игры» Я согласен с этим, и азартные игры, кажется, противоречат смыслу планирования. Вопрос в том, каковы риски?

Рассматривали ли вы интернационализацию?

Да, я критичен, но тот, кто платит деньги за этот проект, вполне может быть более сомнительным.

Книга: Кроссплатформенная разработка на C ++: создание приложений для Mac OS X, Linux и Windows от Syd Logan - ISBN 032124642X Дает представление о проблемах.

Я работал над кроссплатформенными и интернационализированными проектами для Windows, Mac и Linux с использованием C ++ / Qt. Последнее хорошо подходит для обеих проблем. Одна неприятность, которую я испытываю к Qt, это то, что она не является современным C ++ в идиоме и не поощряет использование современных идиом C ++. Так же, как MFC.

14 голосов
/ 11 августа 2009

Я разрабатываю кроссплатформенные программы на C ++ / Qt.
Я настоятельно рекомендую это решение для вашей разработки.
Такое решение повышает производительность на ВСЕХ платформах!
Более того, Qt - это не только платформа с графическим интерфейсом, но и полная инфраструктура для работы с сетью, БД, ввода-вывода, отличной поддержки и очень оригинальной системы интернационализации! Наконец, Qt обеспечивает нативный взгляд на всех платформах, которые он поддерживает.

А что касается производительности, является ли Mono / C # эквивалентом C ++ / Qt?

12 голосов
/ 10 августа 2009

Опять вопрос, где ответ: это зависит! (Навыки ваших программистов на C # и C ++ и действительно ли они намного быстрее в C # и т. Д.).

Просто замечание:
Mono Project предоставляет платформу (версия 2.0 поддерживает до .NET 3.0), которая может использоваться на системах Mac или Linux. Включая кодовый сахар Microsoft, такой как LINQ.

8 голосов
/ 10 августа 2009

Подход, который я использовал для многих кроссплатформенных проектов, состоит в том, чтобы написать «ядро» проекта на очень переносимом языке (C ++), а затем реализовать пользовательский интерфейс (и все остальное, зависящее от ОС, например типы доступа к данным) на языке, который был эффективен для этой задачи на различных платформах.

Просто хотел отметить, что вы не застряли с выбором только одного языка.

6 голосов
/ 10 августа 2009

Вы настроены на использование только одного набора кода пользовательского интерфейса на всех платформах? Я бы посоветовал вам рассмотреть два отдельных пользовательского интерфейса с общим ядром, на самом деле нет замены для собственного пользовательского интерфейса.

В этом случае вы можете использовать Winforms / WPF в C # для пользовательского интерфейса Windows, Cocoa в ObjC для пользовательского интерфейса OS X, GTK в C # для пользовательского интерфейса Linux. Все они будут использовать общее ядро ​​C #, способное работать в Mono и .NET. Mono делает его относительно безболезненным с ObjC.

5 голосов
/ 10 августа 2009

Если вы хотите перейти на кроссплатформенность, C ++ - определенно правильный путь.

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

У Марка Маслара есть и хороший момент: в зависимости от приложения, которое вы хотите разработать, веб-приложение будет полностью независимым от платформы.

4 голосов
/ 10 августа 2009

Потенциально, какие встраиваемые устройства? Если они не будут работать с .NET или Mono, у вас будет возможность отказаться от использования C #. (Это не должно быть проблемой ОС; некоторые встроенные устройства имеют строгие ограничения памяти или производительности, которые могут превышать .NET / Mono.)

Если это не критично, нужно учитывать множество факторов. Использует ли ваш проект какие-либо стандартные функции .NET, или вы, вероятно, напрягаете Mono? Это тот случай, когда вы знаете C #, а не C ++, или у вас просто лучший опыт работы с C #? (Если вы лучше работаете с C ++, чем с C #, то C # вряд ли даст преимущества в производительности для одного проекта, и вам нужно просто перейти на C ++ и получить опыт C # на чем-то менее кросс-платформенном.) Насколько важно быстро выпустить версию на винде? (Может быть жизненно важно получить преимущество первопроходца или незначительное, если вы делаете что-то менее критичное по времени.) Сколько вы выиграете от версий Mac и Linux (обычно это больше, чем указывает их доля на рынке, так как конкуренция меньше )

4 голосов
/ 10 августа 2009

Если вы используете C ++ и графический интерфейс важен, wxWidgets выглядит "родным" на всех платформах. На это стоит взглянуть.

Если у вас все хорошо с C #, я бы определенно подумал - для производительности.

3 голосов
/ 09 апреля 2011

Похоже, вы пытаетесь создавать кроссплатформенные приложения для толстых клиентов с вариантами Си. Вы должны полностью отбросить это и использовать jQuery.

Нет, серьезно, html5-функции могут работать с прерывистой связью , и вы получаете хорошо Поддержка пользовательского интерфейса не только в Win / Mac / Linux, но и мобильные платформы и все.

Да ладно, с 90-х! Это не так сложно или плохо, и вы становитесь все самодовольными, когда люди говорят «облако».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...