цель: выбор среды разработки и языка программирования
задача: определить целесообразность их использования
требования: кросплатформенность, и желательно бесплатно
вопросы:
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 как основа разработки кроссплатформенных приложений
Если есть в задаче 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 как основа разработки кроссплатформенных приложе
Здравствуйте, 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 как основа разработки кроссплатформенных приложе
С поддержкой 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 как основа разработки кроссплатформенных приложе
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 как основа разработки кроссплатформенных приложе
Недавно. Надеяться не стоит.
Б>мм. понятно.. а давно проверяли? сейчас там уже 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 как основа разработки кроссплатформенных приложе
Нет. Это разные языки. Но есть дотнетовский язык C++/CLI, который включает в себя C++ как подмножество (??). Наверное, какие-то части Qt можно скомпилировать под .NET. Но смысл? В линуксе это никак не поможет.
Б>да, забыл спросить! C# вроде поддерживает обычный С++ ? если да, то можно ли в в C# использовать библиотеки из Qt ?
Re[6]: .NET как основа разработки кроссплатформенных приложе
D>Нет. Это разные языки. Но есть дотнетовский язык C++/CLI, который включает в себя C++ как подмножество (??). Наверное, какие-то части Qt можно скомпилировать под .NET. Но смысл? В линуксе это никак не поможет.
а что, в линуксовском C# нет C++/CLI ?
Re[7]: .NET как основа разработки кроссплатформенных приложе
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 как основа разработки кроссплатформенных приложе
Теперь мои ответы снизу
Б>ну как.. надо же к единому интерфейсу прийти но... как я понял смысла нету)) тогда нужно чтобы 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 решениям. Если нужна истинная кроссплатформенность, то выбирайте что-то другое. А так, они, конечно, молодцы. Мне нравится то, что они делают для своей системы. Но ведь кормятся они с продаж виндоус. Это тоже нужно понимать.