.NET как основа разработки кроссплатформенных приложений
От: Бориска  
Дата: 14.09.09 01:37
Оценка:
цель: выбор среды разработки и языка программирования
задача: определить целесообразность их использования
требования: кросплатформенность, и желательно бесплатно

вопросы:

1) хороший претендент Qt и c++, но в связи с появлением .NET становится неактуальным в данное время. правильно ли я думаю?

2) взгляд пал на .net FrameWork и с#. какую среду разработки под него выбрать? т.к. кросплатформенность зависит от развития mono(т.к. .NET далеко впереди), то использовать MonoDevelop, а не Visual studio и .NET чтобы не накодить того, что нет ещё в моно. Eclipse здесь не в теме?

3) моно достиг уже приемлимого уровня чтобы делать серьёзные проекты на нём? на сколько я понял, то сейчас mono уже достиг уровня .net 2.0 и сейчас движется к 3.5. из роадмэпа на сайте я не понял какая версия моно будет соответствоать .net 3.5 ?

4) Много ли существует GUI кросплатформенных контролов ? например DevExpress на сколько я понял, он будет работать только под виндовс..

5) какую систему групповой разработки выбрать для этого всего? (SVN etc.)

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

и вообще на сколько я понял, то моно позволяет запускать exe в в линуксе, а так же можно сразу под линукс откомпилировать??
Re: .NET как основа разработки кроссплатформенных приложений
От: dsorokin Россия  
Дата: 14.09.09 07:14
Оценка: 3 (1)
Если есть в задаче GUI, то mono нисколько не кроссплатформенное. Там делается упор на Gtk# и Cocoa#.

Лично я бы выбирал между C++ (Qt) и Java (Swing).

Б>цель: выбор среды разработки и языка программирования

Б>задача: определить целесообразность их использования
Б>требования: кросплатформенность, и желательно бесплатно

Подойдет обычный текстовый редактор. Например, мне нравится jEdit. Система сборки — msbuild. Но при желании можно make или nant. Но msbuild нравится больше. В каком-то виде mono реализует msbuild.

Б>2) взгляд пал на .net FrameWork и с#. какую среду разработки под него выбрать? т.к. кросплатформенность зависит от развития mono(т.к. .NET далеко впереди), то использовать MonoDevelop, а не Visual studio и .NET чтобы не накодить того, что нет ещё в моно. Eclipse здесь не в теме?


Никто не обещал, что WPF и WCF будут в mono. Возможно, что никогда не будут. А WinForms там так себе реализован...

Б>3) моно достиг уже приемлимого уровня чтобы делать серьёзные проекты на нём? на сколько я понял, то сейчас mono уже достиг уровня .net 2.0 и сейчас движется к 3.5. из роадмэпа на сайте я не понял какая версия моно будет соответствоать .net 3.5 ?


Основной GUI тулкит для mono — это Gtk#. Увы.

Б>4) Много ли существует GUI кросплатформенных контролов ? например DevExpress на сколько я понял, он будет работать только под виндовс..


Можно любую. Это никак не связано с программированием. В линуксе большой выбор.

Б>5) какую систему групповой разработки выбрать для этого всего? (SVN etc.)


Кроссплатформенным является сам язык C#. Но библиотеки — нет. Хотя у меня бывало и так, что mono'вский компилятор генерил код с ошибками.

Б>в заключении прошу полезные ссылки по этой теме, касающиеся .net, mono, кросплатформенных контролов и вообще про кросплатформенность.


Перекомпилировать не надо. Но библиотеки нужны, а их может и не быть вовсе. Особенно, если это GUI контролы, которые используют внутри себя Win32.

Б>и вообще на сколько я понял, то моно позволяет запускать exe в в линуксе, а так же можно сразу под линукс откомпилировать??
Re[2]: .NET как основа разработки кроссплатформенных приложе
От: Бориска  
Дата: 14.09.09 09:43
Оценка: :)
Здравствуйте, dsorokin, Вы писали:

D>Никто не обещал, что WPF и WCF будут в mono. Возможно, что никогда не будут. А WinForms там так себе реализован...

WinForms 2.0 вроде минимальный набор контролов будед обеспечен. если пользоваться только ими, всё ок будет?

D>Основной GUI тулкит для mono — это Gtk#. Увы.


контрол из WinForms будет соответствовать контролу из Gtk# ? т.е. если его в Gtk например нет, то небудет работать?
если я правильно думаю, и если использовать сторонний контрол интерфейса, то он должен быть реализован под все платформы?

Б>>4) Много ли существует GUI кросплатформенных контролов ? например DevExpress на сколько я понял, он будет работать только под виндовс..


D>Можно любую. Это никак не связано с программированием. В линуксе большой выбор.


непонял... вопрос выше написал)


D>Перекомпилировать не надо. Но библиотеки нужны, а их может и не быть вовсе. Особенно, если это GUI контролы, которые используют внутри себя Win32.

т.е. не обязательно, но можно откомпилировать под нужную ОС? а то помоему как-то неочень будет смотреться если в линуксе exe запускать...
Re[3]: .NET как основа разработки кроссплатформенных приложе
От: dsorokin Россия  
Дата: 14.09.09 10:33
Оценка: 10 (3)
С поддержкой WinForms в mono все обстоит криво, очень криво. Шаг в сторону, и нет больше никакой совместимости с виндой... Проверял несколько раз, и каждый раз — разочарование, хотя и ожидаемое.

Какие-то базовые вещи действительно работают. Но уж очень базовые. К тому же, WinForms-приложение смотрится в гноме чужеродным. В KDE оно будет таковым и подавно. Как я уже писал, добиться консистентности с гномьим окружением — это использование Gtk#, совсем другой библиотеки отличной от WinForms.

Б>WinForms 2.0 вроде минимальный набор контролов будед обеспечен. если пользоваться только ими, всё ок будет?


Нет. Контрол из WinForms работать в Gtk# не будет. Сооветствовать тоже не будет. Установите MonoDevelop. Задайте вид проекта: Gtk# приложение. Все увидите сами. Gtk# и WinForms — совершенно разные библиотеки, хотя и решают одну задачу.

Сторонний контрол должен быть реализован под каждую платформу отдельно. Причем, многие производители контролов грешат тем, что используют Win32, а это — прямая завязка на windows-only решение.

Б>контрол из WinForms будет соответствовать контролу из Gtk# ? т.е. если его в Gtk например нет, то небудет работать?

Б>если я правильно думаю, и если использовать сторонний контрол интерфейса, то он должен быть реализован под все платформы?

Очень сомневаюсь, что DevExpress продает свои компоненты для Gtk#, или хотя бы поддерживает то подобие WinForms, что есть в mono. Я бы на это не расчитывал.

Вообще, все WinForms-контролы, с которыми я работал, были завязаны исключительно на винду, точнее на Win32.

Б>>>4) Много ли существует GUI кросплатформенных контролов ? например DevExpress на сколько я понял, он будет работать только под виндовс..

Б>непонял... вопрос выше написал)

Именно файл exe там и запускается Но опосредованно через запуск mono, и не в любом линукcе. Чтобы работало всегда, обычно пишут простенький bash-скрипт, который уже запускает mono и передает последнему имя нужной программы в качестве аргумента. Стандартный способ.

Дотнетовский файл exe — это просто байт-код для виртуальной машины. Перекомпилировать его не надо. Он будет одинаково запускаться и под виндой, и под линуксом. Но если нет нужной библиотеки, то облом...

Б>т.е. не обязательно, но можно откомпилировать под нужную ОС? а то помоему как-то неочень будет смотреться если в линуксе exe запускать...


В общем, если у вас небольшой опыт программирования и действительно нужно написать кроссплатформенное приложение, то очень рекомендую посмотреть в сторону Java. Тем более, .NET создавался по образу и подобию Java. Найдете много общего.

Но если вы — истинный мастер программирования, то можете использовать C++ и, например, Qt. Но это — тяжелый и тернистый путь. Далеко не каждый осилит

Что касается .NET, то он является кроссплатформенным для небольшого круга задач, в число которых GUI не входит. Только если не Silverlight (Moonlight в линуксах), но это уже немного другая история. Да и там тоже не все так гладко.
Re[4]: .NET как основа разработки кроссплатформенных приложе
От: Бориска  
Дата: 14.09.09 11:12
Оценка:
D>С поддержкой WinForms в mono все обстоит криво, очень криво. Шаг в сторону, и нет больше никакой совместимости с виндой... Проверял несколько раз, и каждый раз — разочарование, хотя и ожидаемое.

мм. понятно.. а давно проверяли? сейчас там уже 2.4 версия моно, может глюки исправлены уже?

D>Какие-то базовые вещи действительно работают. Но уж очень базовые. К тому же, WinForms-приложение смотрится в гноме чужеродным. В KDE оно будет таковым и подавно. Как я уже писал, добиться консистентности с гномьим окружением — это использование Gtk#, совсем другой библиотеки отличной от WinForms.


я что-то фишку не всекаю)) если я буду использовать Gtk# то и интерфейс будет везде соответсвующий? я просто думал что оно потом в каждой ос свой GUI использует..

значит например если я буду делать GUI используя Gtk#, то в виндовсе у меня должны быть библиотеки mono(в .net же её нет ?)? если да, то можно ли откомпилировать так, чтобы код из библиотек был в исполняемом файле и не требовал библиотек GUI?


D>Нет. Контрол из WinForms работать в Gtk# не будет. Сооветствовать тоже не будет. Установите MonoDevelop. Задайте вид проекта: Gtk# приложение. Все увидите сами. Gtk# и WinForms — совершенно разные библиотеки, хотя и решают одну задачу.


понял.. значит для каждой OS можно просто GUI переделывать? это ведь не очень трудная задача если не 1000 форм а 10 например? или может я чего-то непонимаю?

D>Сторонний контрол должен быть реализован под каждую платформу отдельно. Причем, многие производители контролов грешат тем, что используют Win32, а это — прямая завязка на windows-only решение.


понял.. а существуют ли такие контролы? а то про mono ничего найти немогу на русском. даже в программерских форумах нету раздела про mono.



D>Именно файл exe там и запускается Но опосредованно через запуск mono, и не в любом линукcе. Чтобы работало всегда, обычно пишут простенький bash-скрипт, который уже запускает mono и передает последнему имя нужной программы в качестве аргумента. Стандартный способ.


а если под линуксом писать и компилировать? тоже exe чтоли получится?


D>В общем, если у вас небольшой опыт программирования и действительно нужно написать кроссплатформенное приложение, то очень рекомендую посмотреть в сторону Java. Тем более, .NET создавался по образу и подобию Java. Найдете много общего.


D>Но если вы — истинный мастер программирования, то можете использовать C++ и, например, Qt. Но это — тяжелый и тернистый путь. Далеко не каждый осилит


опыт программирования у меня только на Delphi. в остльном по чуть-чуть, можно сказать что и нет. но делфи как и другие помоему отходят на задний план при появлении .net и mono. ну это если прицеливаться на будущее)) ИМХО

D>Что касается .NET, то он является кроссплатформенным для небольшого круга задач, в число которых GUI не входит. Только если не Silverlight (Moonlight в линуксах), но это уже немного другая история. Да и там тоже не все так гладко.


допустим... если переделывать GUI под каждую OS, то много шансов что будет работать? да и помоему это логично, т.к. GUI чужих ОС будут плоховато в каждой ос смотреться) приложение будет работать с базами, использовать дерева и гриды, вкладки... несколько форм (3-6) вроде не оч много переделывать, учитывая то что интерфейс уже разработан и нужно просто повторить его на других ос. правильно я думаю?

ps. спасибо что отвечатете на мои вопросы, в русском интернете очень мало по этой теме почему-то.. ?!?!
за всю жизнь наверное раз 5й захожу на форумы что-то спросить, а тут найти ничего не получается...))
Re[4]: .NET как основа разработки кроссплатформенных приложе
От: Бориска  
Дата: 14.09.09 11:15
Оценка:
да, забыл спросить! C# вроде поддерживает обычный С++ ? если да, то можно ли в в C# использовать библиотеки из Qt ?
Re[5]: .NET как основа разработки кроссплатформенных приложе
От: dsorokin Россия  
Дата: 14.09.09 12:15
Оценка: 3 (1)
Недавно. Надеяться не стоит.

Б>мм. понятно.. а давно проверяли? сейчас там уже 2.4 версия моно, может глюки исправлены уже?


Интерфейс будет от Gtk. Отличается от стандартного виндового (от XP и Aero тоже). Правда, я не знаю, есть ли Gtk# под винду. Может быть, и есть. Но смысл?

Б>я что-то фишку не всекаю)) если я буду использовать Gtk# то и интерфейс будет везде соответсвующий? я просто думал что оно потом в каждой ос свой GUI использует..


Нужно mono. Нужны библиотеки Gtk#. Может быть, как-то можно положить их в локальный каталог и исхитриться, но так не делают — слишком много надо тащить. Это не путь джедая.

В линуксе с этим проще. Там указываешь зависимости, и пакетный менеджер сам все вытащит из интернета и установит, если надо. В винде не так.

Б>значит например если я буду делать GUI используя Gtk#, то в виндовсе у меня должны быть библиотеки mono(в .net же её нет ?)? если да, то можно ли откомпилировать так, чтобы код из библиотек был в исполняемом файле и не требовал библиотек GUI?


Можно и так. Зависит от задачи. Но ведь совместимость и некоторых стандартных библиотек .NET тоже под вопросом. Далеко не все реализовано в mono.

Б>понял.. значит для каждой OS можно просто GUI переделывать? это ведь не очень трудная задача если не 1000 форм а 10 например? или может я чего-то непонимаю?


Честно говоря, mono не в почете среди многих программистов. Многое либо недоделано, либо отсутствует вовсе. Хотя некоторые вещи работают.

Б>понял.. а существуют ли такие контролы? а то про mono ничего найти немогу на русском. даже в программерских форумах нету раздела про mono.


Под mono — да. На выходе получается дотнетовский exe с байт-кодом. Просто exe бывает разным. Бывает нативным, смешанным и из чистого байт-кода. Моновский компилятор gmcs генерит чистый байт-код.

Б>а если под линуксом писать и компилировать? тоже exe чтоли получится?


Тогда рекоммендую Qt. Он ближе к Delphi.

Кстати, object pascal есть и для линукса. Lazarus, кажется. Но я не знаю, как там с GUI.

Б>опыт программирования у меня только на Delphi. в остльном по чуть-чуть, можно сказать что и нет. но делфи как и другие помоему отходят на задний план при появлении .net и mono. ну это если прицеливаться на будущее)) ИМХО


Еще нужно помнить, что проблемы с кроссплатформенностью не ограничиваются только областью GUI.
Re[5]: .NET как основа разработки кроссплатформенных приложе
От: dsorokin Россия  
Дата: 14.09.09 12:18
Оценка:
Нет. Это разные языки. Но есть дотнетовский язык C++/CLI, который включает в себя C++ как подмножество (??). Наверное, какие-то части Qt можно скомпилировать под .NET. Но смысл? В линуксе это никак не поможет.

Б>да, забыл спросить! C# вроде поддерживает обычный С++ ? если да, то можно ли в в C# использовать библиотеки из Qt ?
Re[6]: .NET как основа разработки кроссплатформенных приложе
От: Бориска  
Дата: 14.09.09 12:33
Оценка: :)
D>Нет. Это разные языки. Но есть дотнетовский язык C++/CLI, который включает в себя C++ как подмножество (??). Наверное, какие-то части Qt можно скомпилировать под .NET. Но смысл? В линуксе это никак не поможет.


а что, в линуксовском C# нет C++/CLI ?
Re[7]: .NET как основа разработки кроссплатформенных приложе
От: dsorokin Россия  
Дата: 14.09.09 12:57
Оценка:
Это — разные языки. Написанное звучит как ерунда какая-то.

Б>а что, в линуксовском C# нет C++/CLI ?
Re[6]: .NET как основа разработки кроссплатформенных приложе
От: Бориска  
Дата: 14.09.09 13:39
Оценка:
D>Интерфейс будет от Gtk. Отличается от стандартного виндового (от XP и Aero тоже). Правда, я не знаю, есть ли Gtk# под винду. Может быть, и есть. Но смысл?

D>Нужно mono. Нужны библиотеки Gtk#. Может быть, как-то можно положить их в локальный каталог и исхитриться, но так не делают — слишком много надо тащить. Это не путь джедая.


ну как.. надо же к единому интерфейсу прийти но... как я понял смысла нету)) тогда нужно чтобы mono поддерживало winforms, которые в других ос будет смотреться коряво — можно тогда по этой причине исключить этот вариант.. тогда нормальным вариантом остаётся только под каждую ОС гуи делать...

D>Можно и так. Зависит от задачи. Но ведь совместимость и некоторых стандартных библиотек .NET тоже под вопросом. Далеко не все реализовано в mono.


знаю что далеко не всё. но говорят что с 2.0 совместимо и более некоторые функции. LINQ например, который мне и нужен для БД )не врут что .net 2.0 совместимо? ну винформс небудем брать в расчёт, т.к. толку мало от него...


D>Под mono — да. На выходе получается дотнетовский exe с байт-кодом. Просто exe бывает разным. Бывает нативным, смешанным и из чистого байт-кода. Моновский компилятор gmcs генерит чистый байт-код.


т.е. есть возможность использовать интерфейсные контролы под разные ОС ?



D>Тогда рекоммендую Qt. Он ближе к Delphi.

мм.. надо присмотреться, а то я толком впринципе ничего о нём и не знаю.. по сравнени с wxWidgets он лучше?
но в моём случае смысл такой, что нужно выбрать среду и компилятор раз и на всегда(как можно на дольше). т.к. это будет основой на долгое время..
поэтому и тянусь к C# и .net, mono, потому что думаю что это перспективнее

D>Кстати, object pascal есть и для линукса. Lazarus, кажется. Но я не знаю, как там с GUI.

та я вот тоже незнаю, в википедии написано что есть проблемы. и говорят что Carbon поддерживает а про Cocoa ничего не написано. незнаю можно ли Carbon GUI использовать в последнем макосе? да и компоненты под него часто не подходят от делфи т.е. не делают просто под него некоторые компоненты. а в делфи фишка как раз в них)) ну впринципе можно и стандартными как-нибудь попробовать

D>Еще нужно помнить, что проблемы с кроссплатформенностью не ограничиваются только областью GUI.

ну это наверное естестныенные вещи, которые присутсвуют в любой среде разработки кроссплатформенных приложений?
Re[6]: .NET как основа разработки кроссплатформенных приложе
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 14.09.09 15:26
Оценка: 8 (1) +3 :))) :)))
Здравствуйте, dsorokin.

неудобно?
а то уж больно читать
а не над ними,
ответы под вопросами,
ли Вас писать
А не затруднит
Re[7]: .NET как основа разработки кроссплатформенных приложе
От: dsorokin Россия  
Дата: 15.09.09 05:21
Оценка:
Теперь мои ответы снизу

Б>ну как.. надо же к единому интерфейсу прийти но... как я понял смысла нету)) тогда нужно чтобы mono поддерживало winforms, которые в других ос будет смотреться коряво — можно тогда по этой причине исключить этот вариант.. тогда нормальным вариантом остаётся только под каждую ОС гуи делать...


Это вариант — писать свой гуи для каждой платформы. Но зачем заморачиваться, когда Java и Qt работают везде, где поддерживаются?! Хотя если гуи небольшой и простой, то вполне можно использовать mono и .net.

Б>знаю что далеко не всё. но говорят что с 2.0 совместимо и более некоторые функции. LINQ например, который мне и нужен для БД )не врут что .net 2.0 совместимо? ну винформс небудем брать в расчёт, т.к. толку мало от него...


gmcs поддерживает частично .net 3.0. Как там обстоят дела с linq не знаю. Но есть сомнения. (а чем jdbc не устраивает? )

Б>т.е. есть возможность использовать интерфейсные контролы под разные ОС ?


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

Б>мм.. надо присмотреться, а то я толком впринципе ничего о нём и не знаю.. по сравнени с wxWidgets он лучше?

Б>но в моём случае смысл такой, что нужно выбрать среду и компилятор раз и на всегда(как можно на дольше). т.к. это будет основой на долгое время..
Б>поэтому и тянусь к C# и .net, mono, потому что думаю что это перспективнее

Про Qt лучше спросить в другой ветке "Прикладные вопросы C++". Для Java тоже есть своя ветка форума.

Что касается "перспективности" .NET. На мой взгляд есть большая перспектива привязаться к windows-only решениям. Если нужна истинная кроссплатформенность, то выбирайте что-то другое. А так, они, конечно, молодцы. Мне нравится то, что они делают для своей системы. Но ведь кормятся они с продаж виндоус. Это тоже нужно понимать.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.