nestoklon писал(а):
Как там у .NET с кроссплатформенностью?
Ну как сказать...
Mono-то конечно есть под никсы (недавно даже под Солярис заточили), да есть ещё .GNU Portable.NET, и, вроде как, все должны быть счастливы - .NET стал платформонезависимым. Однако ситуация примерно эквивалентна той, когда вы используете cygwin в Windows для эмуляции никсов - да, вроде вот он, любимый bash и прочие особенности никс-систем, но почти все согласятся, что всё равно этой эмуляции далеко до полноценной никс-платформы (гну/линукс, например), сказываются и принципиальные особенности архитектуры.
И как, если не секрет, разработчики того же Mono планируют по-быстрому обновляться, чтобы соответствовать новым .Net'ам от M$? Очевидно, что это процесс довольно длительный, а задержки (да и время в целом) - штука очень дорогостоящая, особенно в коммерции. Даже сейчас API там, к сожалению, имеет достаточно узких мест (System.Windows.Forms, например).
Даже у самой MS есть некоторые проблемы с .Net, в числе которых, например, характерная несовместимость "снизу вверх" (и наоборот). Скажем, приложения под .Net 2.0 очень и очень часто отказываются работать под .Net 3.0, а в результате у пользователя на компьютере оказывается уйма семантически однотипного мусора - 1 нет, 1.1, 2.0, 2.1, 3.0, 3.5, 4.0 и т.д... Демонстрирует ли это продуманность и зрелость архитектуры? Едва ли.
Разработчики Mono, кстати, для себя эту проблему решили посредством модульной архитектуры проекта, да и вообще проект необходим, как воздух (особенно учитывая появление сайтов с .Net'ом, которые, естественно, под тем же линуксом работают не вполне корректно), но моё настроение насчёт собственного будущего всего этого - всё-таки немного скептическое.
Какие цели .Net вообще преследует? Чем эта технология лучше, скажем, чем Java? И то, и другое вроде как построено на схожих принципах, вроде как обе технологии работают и для веб, и для "настольных" приложений, да и обе, вроде как, весьма хороши для быстрой, порой даже шаблонной, и довольно простой разработки.
Осознав эту небольшую ошибку и то, что Java всё-таки более производительная, MS начали кампанию о том, что ".Net - языконезависимая технология! Здесь вы сможете одновременно работать и с C#, и с Delphi, и с C++ (от себя: под C++ подразумевается его реализация под .Net, т.н. Managed C++), и с VB!". На первый взгляд это больше походит на увлекательную игрушку-конструктор - соедини кусочек корабля с кусочком машины и ты получишь новую прикольную штучку.
Впрочем, в этом есть смысл - он в минимизации затрат. Каким образом? Всё просто - в компанию можно нанять таких программистов, которые умеют писать только на каком-то одном языке и пересесть на другой вследствие отсутствия фундаментальных знаний не могут. А зачем? ~90% производственных задач запросто решаются родным фреймворком, а недостающие ~10% попробуем найти в интернете как компоненты. И стоят такие кодеры, понятное дело, меньше (хотя неподготовленный работодатель наоборот зачастую считает, что нанимая человека с надписью C# в анкете он получает настоящего профессионала, так как слово вроде новое и модное, а значит и платить готов больше). Один такой мастер напишет компонент на Дельфи, другой на C#, а третий ещё и на VB... И всё это вместе будет работать - красота! Жаль только, что медленная, а значит не очень подходящая под действительно серьёзные проекты. Но натыкать кучку красивых окошек, на ивенты навешать кучу "крутых" методов, предоставляемых фреймворком чуть ли не из разряда "CalculateEverything" - это всегда пожалуйста, и для многих заказов это 99,9% оправдано.
И если бы MS так открыто и говорила бы - всё было бы прилично, но, например, чего стоит статья MS о том, что производить научные вычисления лучше всего с применением C# и .Net... Вот это уже перебор, поскольку надо помнить, что есть много лекарств от разных болезней, но нет ни одного из них, помогающего "от всего", так и технологии имеют свою вполне конкретную направленность на какие-то цели, и всемогущество им приписывать НЕ надо.
Например, если тот же Firefox или Evolution написать на C#, то разница, которая якобы "пренебрежимо мизерна" стократно помножится, и перерастёт в такие вещи, которые пользователь как раз заметит. Поэтому не стоит отвёрткой, лобзиком и напильником делать рамку для фотографий, когда её можно купить и отдекорировать как душе угодно, но и не стоит изготавливать мебель при помощи кисточки и заранее данных блоков-фигурок, которые надо ещё и таскать с собой, то в обоих случаях получим либо ерунду, либо неоправданно большую затрату ресурсов.
з.ы.: Сорри за оффтоп, накипело.
Firarika, что касается C++ под винду и под амд/интел - всеми конечностями согласен, MSVC++ действительно очень хорош как компилятор. Как IDE - судить не берусь, не так уж я с ним много работал, но отладка и прочие прелести там удобны и порой более просты в настройках, чем аналогичные в Eclipse.
Eclipse в основном берёт своей расширяемостью и широтой возможностей, но чтобы их применить - надо изрядно покопаться. Потенциал у Eclipse, безусловно, просто огромнейший. Скажем, на её основе сделаны и среда для Java, и Zend Studio и многие другие. Кстати Zend Studio использую активно и часто, и готов сказать с полной уверенностью, что это крайне удобная среда для веб-программирования, сочетающая в себе очень удобную работу с проектами, написанными главным образом на php, js и подмножествами html. Лично для меня более удобная, чем Adobe Dreamweaver, который всё-таки гораздо больше ориентирован на вёрстку. Впрочем, обе платны (хотя кого у нас это сильно волнует?
).
Что бы кто ни говорил про MS Visual Studio, а MSVC++ всё-таки очень хорошо оптимизирует код, и это один из продуктов, которые у MS получились действительно хорошо. Как это не прискорбно для меня, любителя GNU и всего смежного, но зачастую код, генерируемый MSVC++ ненамного, но эффективнее, чем такой же под GCC.
Однако GCC имеет в кармане несколько тузов - он действительно платформонезависим. Ему почти всё равно, под какой системой и под каким процессором и оборудованием работать, чего не скажешь ни об Intel C++ Compiler, ни о MS VC++.
И в этом одна из его величайших сил.
з.ы.: "Первая доза - бесплатно". Студент, всю свою жизнь проработавший с MS VS, будет очень и очень нелюбовно относится к любой другой IDE.
M$ видимо ожидают, что такие новоиспечённые программисты армией придут к работодателям с лозунгом "Даёшь MSVS программистам!"...
И ведь отчасти они правы, хотя моё имхо - обучаться по началу лучше всего в "простеньких", но при этом мощных системах (например, GCC + gdb + emacs, либо тот же компилятор от MSVS, но в режиме командной строки, + notepad++ или что-то такое, чтобы была подсветка синтаксиса, но не более), которые не так сильно абстрагированы от оборудования, а потом - пожалуйста.
Забыл сказать:Но несмотря на все плюсы, у MSVC++ действительно плохо с собственной стандартизацией и поддержкой стандартов в целом. Особо сильного соответствия ни старому, ни новому ANSI C++ я у него не вижу.
Про Си под ним я вообще молчу, не для того MSVC++ всё же делали, что, правда, и заметно...
Си он может компилировать чисто как подмножество С++ (т.е. только унаследованные от С89 элементы), но не как собственно Си, что, разумеется, накладывает свои ограничения и "особенности" (в простонародье - баги).
Так что если Си стандарта С89 ещё хоть как-то поддерживается, то о С99 остаётся только мечтать...