.NET C++\CLI

Пишу на c++. Изучил Qt, и .NET, и вот подумал, Qt только для KDE(linux), а на windows чистая .NET программа. Решил для этого сделать свои классы кроссплатформенными так, чтобы один и тот же код выдавал или чистый .NET(то есть все классы управляемые) код или чистый Qt\С++ код, то есть почти полностью отказаться от стандартной библиотеки. Но плата за кроссплатформенность высока, иногда даже не знаешь как будет вести себя код. Приходится тщательно рассматривать множество мелочей.
Вопрос: имеет ли смысл в .NET(C++\CLI) делать классы управляемыми, или просто делать управляемые обертки на обычные неуправляемые классы(модель программы)? Но в таком случае компилятор выдаст managed и unmanaged код. Где вызовы между ними будут медленными, и вообще, чистота кода испортится. Также там будут внешние зависимости, отличные от dll'ок .NET'а
Рассмотрим две программы: одна будет использовать некую свою библиотеку для расчётов, а в другой будет мало своего кода, но будет много вызовов .NET фреймворка. Где выгоднее использовать чистый .NET и где смешанный? Может .NET и Qt использовать чисто для интерфейса, а саму логику на крестах делать? Но тогда придется тащить за собой всякие библиотеки типа boost и тому подобных, да и размер программы увеличится.
По поводу Qt для windows и linux: в втором всё хорошо, но в первом приходится тащить за собой Qt библиотеки на несколько метров, и вообще, зачем отвергать инструмент, созданный специально для ОС,- .NET?
upd: у вас парсер порвался от ++ :)



Views: 1 389

alexprey #1 - 6 years ago 2
Голосов: +2 / -0
Не надо мешать и то и другое. Обе штуки кроссплатформенные, юзай что-то одно.
Под линух есть mono для запуска .net приложений. В целом штука интересная, поддерживает стандарт 3.5 + дополнительные плюшки из 4.0. Либо использовать Xamarian, но он платный.
Под QT можно закомпилится под винду, но достаточно сложно, но сделав это один раз, дальше проблем не будет (я не справился, сдался)
Есть слухи, что .NET 6.0 будет кросплатформенным (будет оффициальная сборка ядра, как под винду, так и под линукс и мак)
BrEd Pitt #2 - 6 years ago 0
Голосов: +0 / -0
Не стоит. Ты сам себе ответил на вопрос, упомянув множество мелочей, что нужно рассматривать.
J64_ #3 - 6 years ago (изм. ) 0
Голосов: +0 / -0
alexprey:
Не надо мешать и то и другое. Обе штуки кроссплатформенные, юзай что-то одно.
Под линух есть mono для запуска .net приложений. В целом штука интересная, поддерживает стандарт 3.5 + дополнительные плюшки из 4.0. Либо использовать Xamarian, но он платный.
То есть для каждого писать отдельный код? Mono, как я считаю, для извращенцев.
Под QT можно закомпилится под винду, но достаточно сложно, но сделав это один раз, дальше проблем не будет (я не справился, сдался)
Есть слухи, что .NET 6.0 будет кросплатформенным (будет оффициальная сборка ядра, как под винду, так и под линукс и мак)
Qt под винду компилируется, это легко. Но там, как я говорил, будут зависимости от dll'ок Qt(а они весят-так много), если линковаться динамически. Но как же
инструмент, созданный специально для ОС,- .NET
?
BrEd Pitt:
Не стоит. Ты сам себе ответил на вопрос, упомянув множество мелочей, что нужно рассматривать.
То есть для каждого писать отдельный код?
Или может вовсю отказаться от поддержки Qt? Но когда-нибудь, когда будет нужно, с ужасом обнаружу что надо переписать чуть-ли не полностью весь написанный код
alexprey #4 - 6 years ago 0
Голосов: +0 / -0
J64_, нет. Зависимости в любом случае будут от левых dll'ок. Только в случае дот нета, они в основном бывают предустановлены, но не всегда, и поэтому приходится обычно тащить еще и установочник среды исполнения .NET. Это как с java.
Выбери то, что тебе больше нравится, на том и пиши. Mono не для извращенцев, просто он старенький и не поддерживается (потому что они перешли на комерцию). Unity3D использует mono для запуска на линуксе