Подтвердить что ты не робот

С# против С++ в кросс-платформенном проекте

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

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

"Проецировали, что с помощью С# мы можем быстрее и дешевле разрабатывать наш продукт из-за увеличения производительности по сравнению с С++" Что значит "проецирование"? На каких фактах и ​​цифрах вы делаете эту проекцию? Не забывайте, что усилия по кодированию некоторых проектов низки, как ~ 20% от общего объема усилий, необходимых для выхода продукта на рынок. Поэтому вопрос сравнения производительности компьютерных языков может быть не столь значительным. По моему опыту, нелегко выбрать компьютерный язык по так называемым критериям производительности.

"занимались азартной игрой" Я согласен с этим, и азартные игры, похоже, противоречат смыслу планирования. Вопрос в том, каковы риски?

Вы считали интернационализацию?

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

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

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

Ответ 3

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

Более того, Qt является не только графическим интерфейсом, но и дает вам полную основу для создания сетей, DB, ввода/вывода, отличной поддержки и очень изобретательной системы интернационализации!
Наконец, Qt обеспечивает внешний вид на всех поддерживаемых платформах.

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

Ответ 4

Снова вопрос, где ответ: это зависит! (Умение ваших программистов на С# и С++, и если они действительно намного быстрее на С# и т.д.).

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

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

Если вы хотите перейти на межплатформенную платформу, С++ - это, безусловно, путь.

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

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

Ответ 8

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

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

Ответ 9

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

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

Ответ 10

Чувство моего чувства здесь было бы полным и полным развитием С#. Если и когда вы столкнетесь с проблемами перекрестной совместимости, перепишите необходимые разделы в библиотеки C/С++ DLL/shared. Очевидно, что Mono действительно может обрабатывать общие библиотеки на основе конкретной платформы.

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

Ответ 11

Вы рассматривали использование python/С++/QT?

просто посмотри на него

Ответ 12

Просто добавьте эту дискуссию. Я разработал программное обеспечение с С++. Я единственный разработчик и его 80% отделка.

Теперь мне трудно найти программиста на С++, а также любого программиста PHP. Geting много программистов С#.

Я знаю С#. Может потребоваться один месяц два конвертировать С++ в С# (оставляя некоторые функции, которые я чувствую слишком много, чтобы поддерживать).

Моя неприязнь - это .net размер. Я тоже посмотрел на моно. Лично это не проблема для меня, так как я очень хорош в С++. Но получить программиста, который может выполнить сложный проект с PHP, становится трудно. Это просто базовый веб-разработчик (место, где я ищу программиста и мой бюджет).

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

Я должен принять решение по месячному времени, так как мне нужно начать этот проект.

У вас может быть вид моего типа проекта на ashnah dot com

Ответ 13

Если вы согласны с многоплатформенным подходом, я думаю, что это зависит от того, насколько UI-тяжело ваше приложение. Если мясо приложения находится в задней части, то возможность не упоминается, чтобы перейти на смесь С++ и С++/CLI. С++/CLI дает вам доступ к обширным .NET BCL (включая компоненты пользовательского интерфейса), поэтому вы можете быстро выйти на рынок в Windows, и вы можете придерживаться ванильного С++, где это не нужно. Затем, чтобы переносить на другую платформу, вам нужно только настроить таргетинг на части С++/CLI.

С другой стороны, вы хотите серьезно подвергнуть сомнению "окончательную" часть плана перехода на другие платформы. Концентрация исключительно на Windows и использование .NET с С# или VB.NET дает вам более простой путь разработки с точки зрения компетенции программиста, который вам потребуется.

Ответ 14

Почему бы не использовать несколько языков. Используйте С++ для базовой структуры, которая будет основной (самой необходимой работой) вашего приложения и независимой от платформы. Затем вы можете создать пользовательский интерфейс в С# для своей версии Windows, и если позже вы решите установить порт на Mac или что-то еще, вы можете написать его на Java или Qt или на любом другом языке /API, который вы решите использовать. Я думаю, что это нормально, если пользовательский интерфейс зависит от платформы, если ядром вашего приложения не является.

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

Ответ 15

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

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

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

Ответ 16

Возьмем Java/ Scala. Один из самых замечательных разработчиков IDE IntelliJ IDEA написан на Java - посмотрите.

Ответ 17

У меня нет опыта в этом сценарии, так что это стоит того, что стоит... Я бы, вероятно, использовал .Net, но всегда был бы нацелен на Mono. Это будет означать гораздо меньший риск использования MS-реализации .Net и непреднамеренно зависящего от некоторой функции, еще не реализованной в Mono, что приведет к разрушению вашей переносимости на другие платформы, кроме Windows.

Ответ 18

Если вы не возражаете против не-родного взгляда в Windows (что очевидно даже при использовании "окна", который использует GIMP), вы можете использовать Gtk # и Mono. Когда дело доходит до материала UI, я обнаружил, что Gtk # будет проще и интуитивно понятным (от программирования PoV), чем .NET Framework. С другой стороны, отладка, вероятно, будет проще, если вы используете .NET.