C# по сравнению с C++ в межплатформенном проекте

"Взгляды в C++" Bruce Eckel

25
задан Tony the Pony 10 August 2009 в 16:45
поделиться

17 ответов

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

40
ответ дан 28 November 2019 в 17:36
поделиться

Если вы не возражаете против неродного внешнего вида в Windows (что очевидно даже с оболочкой "windows", которую использует GIMP), вы можете использовать Gtk # и Mono. Что касается UI, я обнаружил, что Gtk # проще и интуитивно понятнее (с точки зрения программирования), чем .NET framework. С другой стороны, отладка, вероятно, будет проще, если вы используете .NET.

1
ответ дан 28 November 2019 в 17:36
поделиться

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

2
ответ дан 28 November 2019 в 17:36
поделиться

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

2
ответ дан 28 November 2019 в 17:36
поделиться

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

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

3
ответ дан 28 November 2019 в 17:36
поделиться

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

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

4
ответ дан 28 November 2019 в 17:36
поделиться

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

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

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

5
ответ дан 28 November 2019 в 17:36
поделиться

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

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

6
ответ дан 28 November 2019 в 17:36
поделиться

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

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

8
ответ дан 28 November 2019 в 17:36
поделиться

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

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

4
ответ дан 28 November 2019 в 17:36
поделиться

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

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

12
ответ дан 28 November 2019 в 17:36
поделиться

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

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

14
ответ дан 28 November 2019 в 17:36
поделиться

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

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

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

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

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

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

Вы рассматривали возможность интернационализации?

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

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

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

15
ответ дан 28 November 2019 в 17:36
поделиться

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

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

3
ответ дан 28 November 2019 в 17:36
поделиться

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

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

3
ответ дан 28 November 2019 в 17:36
поделиться

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

Теперь мне трудно найти программиста на C ++, а также любого опытного программиста на php. У меня много программистов на C #

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

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

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

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

Вы можете посмотреть мой тип проекта на сайте ashnah dot com

3
ответ дан 28 November 2019 в 17:36
поделиться

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

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

3
ответ дан 28 November 2019 в 17:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: