C# (программистское)
Feb. 5th, 2004 12:04 amРасскажите мне, пожалуйста, что вы думаете о C#/.NET и прочих смежных темах (в частности, Mono — если я захочу поиграться с C#, то, видимо, будут делать это в Линуксе под Mono). Насколько это хороший/чистый/многообещающий язык? А среда/CLR насколько хороши? Я ничего не знаю о них (C#/.NET сотоварищи), но достаточно хорошо знаю Java/C++/Perl/Smalltalk, так что сравнения с этими (или другими) языками приветствуются — равно как и любые другие мнения, в том числе пристрастные.
Посоветуйте также, ежели кто знает, хорошую книгу/сетевое пособие на эту тему, так чтобы было кратко и одновременно умно, для тех, кто ловит на лету.
Посоветуйте также, ежели кто знает, хорошую книгу/сетевое пособие на эту тему, так чтобы было кратко и одновременно умно, для тех, кто ловит на лету.
no subject
C# сосет!
no subject
Date: 2004-02-04 02:39 pm (UTC)Язык довольно чистый, немного чище, чем Джава (которая уже была довольно чистым языком).
Что ты подразумеваешь под средой?
.NET с точки зрения имеющихся APIs сильно напоминает J2EE, но лучше оного за счет:
1. Будучи более поздним изобретением, не наступает на те же грабли. Например, все, что нужно для работы с XML - уже внутри.
2. Нормальная security model, а не джавовское безумие, когда есть три модели: J2EE, JVM и операционки, и работают они как лебедь рак и щука.
3. Нет жуткого количества deprecated APIs, в которых тонешь поначалу.
Идеей CLR я не проникся. На кой хрен кому-то писать проект на пяти языках одновременно... Почему недостаточно было надстроить DCOM, чтобы совместимость была исключительно на уровне интерфейсов - не понимаю. Впрочем, я сейчас как раз работаю над проектом, где большая часть кода - на До-диез, а меньшая - на VB.NET, так что может и проникнусь.
Насчет хорошей книги - могу порекомендовать "Inside C#", сам ею пользуюсь. Она дает достаточно полное введение в CLR и в C#, но, к сожалению, не покрывает .Net Framework.
Да, тебе, возможно, будет любопытно почитать про ASP.NET. Лично у меня впечатление, что это воплощение wet dreams всех веб-программистов. Посильнее Гете Фауста вещица! Не понял пока, правда, как на ней писать scalable web applications, но если можно - это писк.
no subject
Date: 2004-02-04 05:09 pm (UTC)А на самом деле?
Re:
From:Re:
Date: 2004-02-04 07:04 pm (UTC)а если есть legacy code на C++ или java, и переписывать его (пока) очень не хочется?
> Почему недостаточно было надстроить DCOM
потому что хочется, чтобы совместимость интерфейсов была не бинарная, а логическая, что, при нынешнем разнообразии процессорных архитектур, влияет даже на производительность, не говоря об удобстве / расширяемости / ошибкоустойчивости.
Re:
From:no subject
Date: 2004-02-04 02:49 pm (UTC)Не желая обидеть, просто забавно: что-то типа этого (http://www.ozon.ru/context/detail/name/book_catalog/id/942529/)?
А что касабельно субъективного мнения о С-шарп, так от лукавого это все.
no subject
Date: 2004-02-04 03:04 pm (UTC)На мой взгляд, ничего интересного. C# - это "java лучше чем java", улучшено заметно относительно java, но не настолько, чтобы было интересно смотреть. Если припрет программировать на C# - можно, для удовольствия - вряд ли.
no subject
Date: 2004-02-04 03:48 pm (UTC)2. С# очень хорош, в том смысле, что очень много есть технологий в Java, которые требуют поиска и осмысления (нужны ли они, поддерживаютися ли и т.д.), чего не нужно в изделиях майскрософт. (они просто есть, причем волне неплохи)
3. документация в Java намного лучше, чем в С#. (Javadoc - forever!:)))
4. Mono - (к сожалению, приходилось работать) во многих вопросах сильно недоработанная штуковина. хотя, в принципе, надежды есть.
Re:
Date: 2004-02-08 09:02 am (UTC)Кратенько так...
Date: 2004-02-04 03:53 pm (UTC)Далее буду говорить и о .NET, и о C#, потому что C# - это базовый язык для .NET (VB.NET тоже базовый, но по-другому)
1) .NET - это будущее разработки под Windows. Факт, который можно даже не обсуждать.
2) На .NET можно писать все приложения под Windows (кроме драйверов).
Обычные оконные, игры, веб-серверы или серверы приложений, системные службы - все пишется на любимом языке в одной среде с использованием единой базовой библиотеки.
Конечно, отличия есть: в веб-приложениях нет GUI-окон, но можно пользоваться классами рисования (есть пример, где ASP-страничка генерирует и возвращает картинку).
Но коллекции (массивы, списки), работа с файлами, работа с многопоточностью - она везде одинаковая.
3) Безумная безопасность.
Пример: по-умолчанию, система настроена таким образом, что доступ к файлам возможен только для программ, которые запускаются с локального диска. Как только запускаешь этот же ".exe" с сетевого диска, так сразу же возникают исключения (exceptions).
Пример: прямо в описании метода можно указать, что его имеют право вызывать только администраторы или пользователь "Вася". После этого система автоматически начинает проверять "а кто же его вызывает". Правда, я это дело не изучал и слабо представляю, как оно работает в модели своей авторизации и так далее.
4) Remoting
Жестокая штука (не знаю, как переводится на русский).
Разрабатываешь приложение - оно работает локально. Потом изменяешь определенные настройки в конфиг-файле, после чегообъекты указанных класов начинают создаваться не локально, а удаленно. Причем взаимодействие происходит через сериализацию поверх TCP или HTTP. Естественно, подобную возможность надо закладывать в приложение изначально (поддерживать сериализацию, делать компоненты, ...)
5) Огромадная библиотека классов
Согласно легендам, в .NET около 3,800 классов. Есть его родные классы, есть просто обертки вокруг каких-нибудь Windows-функций/COM-серверов.
Основная сложность - это не просто 3,800 классов, сваленных в одну кучу, а очень тесно взаимодействующих между собой.
Например: можно разработать свой компонент (и продавать его), который в самой Visual Studio будет выглядеть как родной. Он будет вытаскиваться и бросаться на формы или другие компоненты, у него будут свои редакторы свойств и так далее.
Другой пример: в оконном приложении можно связать контрол (edit-box) и какую-либо переменную - система автоматически будет отображать или обновлять значения (из переменной в контрол и из контрола в переменную).
Найти подобные связи - занятие не для слабонервных.
Там есть классы для генерации кода. Просто создаются объекты типа "условие", "выражение", ..., потом они объединяются и либо вызывается генератор на каком-нибудь языке (C#/VB.NET точно есть, остальные - не знаю), либо компилируются в код для виртуальной машины, который можно практически сразу же выполнить.
6) Отладка
Это сказка. Есть большой проект, он весь модульный и все такое. В отладчике можно ходить-бродить по этим модулям взад-вперед, как хочется.
Удобные средства логирования: написал код с логированием, посмотрел его в отладчике, а в релизе продукта указал, что логирование производится "вот в этот файл".
7) Reflection
Любой класс/структура сохраняется с описанием - какие поля, функции, какие типы, видимости элементов и так далее. Более того, к этой информации можно получить доступ во время выполнения программы.
Особый плюс - эту метаинформацию можно расширять. Например, придумать свою дополнительную информацию для классов-методов и реализовать сложную систему плагинов.
Кстати, о плагинах - если разрабатывается приложение с поддержкой плагинов, то их можно ограничивать по безопасности. С коде основного приложения так и писать - "в доступе к файловой системе отказать, в доступе к сети отказать", а плагину предоставить свои (приложения) методы для получения необходимой информации.
................
Re: Кратенько так...
Date: 2004-02-04 03:53 pm (UTC)И хотя все эти вкусности выглядят невероятными (или смешными - кому как), у них есть несколько минусов.
Оно требует достаточно серьезной подготовки, как в теоретическом, так и в практическом плане. Те, кто просто запускает VS.NET, создает приложение, вытаскивает на форму две кнопки и прямо в обработчиках нажатия на эти кнопки начинает выполнять нехилые действия, тех людей ожидает разочарование.
Будет очень полезно продумать архитектуру приложения еще до начала его кодирования. Потому что именно в .NET появилась возможность (для меня, по крайней мере) разработки компонентных приложений.
Пример: сидел я и на работе игрался - делал веб-сервис для доступа к Ораклиной базе. И что-то оно у меня не работало - где-то падало, где-то ошибку возвращало. Долго я думал, очень долго. А потом вдруг прояснилось и я всю работу с базой вынес в отдельную библиотеку, каковую и стал использовать и в веб-сервисе, и в обычном оконном приложении-тесте. Одна библиотека - один код. Многоуровневые приложения становятся реальностью.
Но знать здесь надо очень и очень много. Потому что то же самое простое вынесение сразу же подняло вопрос "как узнать, кто меня выполняет". Для оконного приложения и для веб-сервиса это можно определяться и инициироваться по-разному.
9) C# и прочие языки под .NET
Язык чудесный. После долгих мытарств на C++ очень радуюсь, что он есть. Писать на нем просто, не надо заморачивать себе голову вопросами, которые не являются важными при разработке обычных приложений.
Еще есть так называемый Managed C++ - это когда код на C++ компилируется под .NET. Использовать этот режим крайне не рекомендую. Слишком велика разница между просто C++ и самой платформой .NET. Когда наблюдаешь эту разницу в двух разных языках (C++ и C#), то все нормально. Но если видишь один C++ в обоих ипостасях, то можно запутаться даже в базовых конструкциях...
************
В общем еще можно рассказывать много-много. Из-за своей громадности и эдакой всеобъемности одной книги по нему не хватит. А разных книг не очень много.
Рекомендую прочитать Рихтера - кое-что рассказано хорошо. Но одного его точно не хватит.
Еще можно читать MSDN Lib и MSDN Magazine - там есть много как вводных статей, так и достаточно хитрых (как можно реализовать AOP).
***********
рома
Re: Кратенько так...
From:Re: Кратенько так...
From:Re: Кратенько так...
From:Re: Кратенько так...
From:Re: Кратенько так...
From:Re: Кратенько так...
From:Re: Кратенько так...
From:Re: Кратенько так...
From: (Anonymous) - Date: 2004-02-04 04:35 pm (UTC) - ExpandRe: Кратенько так...
From: (Anonymous) - Date: 2004-02-04 04:52 pm (UTC) - ExpandRe: Кратенько так...
From:Re: Кратенько так...
From: (Anonymous) - Date: 2004-02-04 07:26 pm (UTC) - ExpandRe: Кратенько так...
From:Re: Кратенько так...
From: (Anonymous) - Date: 2004-02-04 07:44 pm (UTC) - ExpandRe: Кратенько так...
From:no subject
Date: 2004-02-04 05:01 pm (UTC)Совершенно не рекомендую пробовать левые имплементации типа Mono. Чем .NET качественно отличается от Java/J2EE, так это единой (понятное дело) и крайне удобной средой разработки - VS.NET. С визуальной поддержкой всего на свете - в т. ч. очень удобно работать с веб-сервисами, на что как раз особенно напирал их маркетинг, и с чем у явы по сей день очень по-разному.
А так ничего нового, конечно.
Re:
Date: 2004-02-04 05:37 pm (UTC)Кто-нибудь может рекомендовать нормальную книжку по Ява? Не такую, где "вызовите эту функцию для того, а вот вам пример кода на 20 страниц...", а по основам, по языку, по самой платформе?
*sgt* абсолютно прав - в .NET нет ничего нового. Все элементы .NET существовали уже начиная с 70х годов (виртуальные машины, объектность, ...), но вот собрать их в такой удачной и удобной пропорции еще никому не удавалось.
*************
Я в Яве не разбираюсь, но никогда не слышал, чтобы в ней можно было вызывать функции из DLL. Или использовать существующие COM-сервера.
А .NET предоставляет очень сильную поддержку существующего кода (вызовы DLL и COM). Более того, на .NET можно делать обычные COM-сервера.
.NET - он, в общем, предназначен для Windows. Слишком много вещей берутся именно из него, а не реализуются в библиотеках самого .NET.
*************
Поддержка "enum" мне очень нравится. Их можно чудесно преобразовывать в строки и обратно (стандартными методами).
А вот скоро, когда-нибудь, будет .NET 2.0 и C# 2.0. Анонимные методы - это непросто. Особенно с их доступом к локальным переменным метода, в котором они объявлены.
*************
Есть легенда, что в свое время MS ислледовала концептуальное программирование (или программирование в ограничениях). Более того, они собирались воплотить это в жизнь. Возможно, многое в .NET растет именно из этой области.
********
рома
Этот вопрос как никогда продемонстрировал...
Date: 2004-02-04 05:16 pm (UTC)От себя добавлю:
1) Для Вас может не слишком актуально, но для мира Windows эта платформа станет, похоже, реальностью уже года через 2. Вы знаете, что Microsoft планирует заменить api на .NET, и нынешний апи будет эмулироваться примерно как когда-то эмулировался 16-битный апи для совместимости? А планы Microsoft на счет NET грандиозны: Yukon (новый SQL сервер) на .NET уже почти здесь. Причем очень заманчивые перспективы открывает в этом случае как раз CLR: для Юкона свои функции (эквивалент UDF (User's Defined Functions)) можно писать на любом языке поддерживающем "писанину" для CLR - это ответ на вопрос про то "кто же будет писать проект на нескольких языках?" А вот Вам пожалуйста - у нас теперь есть унифицированный интерфейс на порядок облегчающий написание плагинов и UDF.
2) Авва, если Вы поддадитесь этому соблазну (а для меня например .NET пока серьезной НЕОБХОДИМОСТИ не представляет), отпишите потом нам о совместимости программ под .NET написаных в Windows и Linux. А то шуму-то много на этот счет, а вот услышать о результатах из первых уст...
3) Выше прозвучавший вопрос про возможности обойтись DCOM двойственен: .NET (CLR, в первую очередь) - продолжение той же идеи, только на новом уровне, т.е. большая часть старых граблей преодолена, действительно, но за счет того что отбросили DCOM и сделали все поновой.
4) Я бы посоветовал почитать Рихтера (могу выложить в электронном виде (AppliedNet.pdf)).
5) Я-то согласен с Ромой высказавшемся выше, но хотелось бы еще слышать противников .NET. Хотя я все равно уже .NET.
no subject
Date: 2004-02-04 08:13 pm (UTC)легко найду, но если нет, то оставлю ещё один коммент здесь и попрошу Вас
выложить.
Re: Рихтер
From:Re: Рихтер
From:Re: Рихтер
From:Re: Рихтер
From:Re: Рихтер
From:Re: Рихтер
From:no subject
Date: 2004-02-04 09:24 pm (UTC)Неплохая реализация машины. По крайней мере майкрософтовский mcs.exe под ней запускается и работает :)
Ссылки на учебники по C# есть на сайте Mono.
no subject
Date: 2004-02-04 10:04 pm (UTC)2) .NET значительно (раза в 2-2.5) быстрее Явы, на эту тему есть отчет подготовленный Doculabs.com. Мы у себя повторили тесты -- получили те же результаты: на 2-х процессорном Xeon-е .NET может сходить в Oracle где-то 600-700 раз в секунду.
3) Скорость зависит от наличия "живых" объектов в generation 0 после окночания исполнения запроса. Если "живых" объектов нет, то ничего не надо компактировать в generation 1. Т.е. повторять memcached на .NET-е не стоит :)
4) .NET компилирует в нейтивный код на лету в runtime и компилирует весьма достойно, что удивительно для runite-компилятора. Посмотреть получившийся код можно в дебаггере.
5) Mono не обладает двумя основными вещами: хорошим сборщиком мусора и хорошим runtime-компилятором, т.е. по скорости проигрывает в разы. Ну и наличие HTTP-сервера, как драйвера, позволяет Микрософту избегать двойного переключения процессов нак каждый запрос.
Резюме: красивый язык с четкой структурой (не С++), быстрее Явы/Perl/Smalltalk, ориентирован на создание stateless веб-сервисов. Для похода в базу использует стандартную модель с query и dataset-ом, встроенный connection pooling. Для многопоточных приложений имеет смысл использовать пул рабочих потоков и синхронную модель, асинхронная модель очень дорогая и теряет весь смысл.
Re:
Date: 2004-02-05 03:02 am (UTC)Это больше на тест Oracle похоже.
>наличие HTTP-сервера, как драйвера, позволяет Микрософту избегать двойного переключения процессов нак каждый запрос.
inetinfo(IIS) и aspnet_wp(ASP.NET) два различных процесса. Я вообще-то думал что обмен идет через межпроцессное взаимодействие. HTTP-сервер, как драйвер это интересно, не подскажете где можно об этом почитать?
Re:
From:Re:
From:Re:
From:Re:
From:no subject
Date: 2004-02-04 11:17 pm (UTC)Насколько им удалось сделать что-то полнофункциональное?
Re:
Date: 2004-02-05 12:25 pm (UTC)Re:
From:Пишу на нём уже третий год...
Date: 2004-02-05 12:05 am (UTC)А литературы очень много в Инете. Просто полно, и на инглише, и на руссише.
Вот только несколько линков, по которым я шарилась, когда начинала -
http://www.gotdotnet.ru/DotNet/FAQ/default.aspx
http://www.aspnetmania.com/?tabindex=1&tabid=2
http://www.dotsite.spb.ru/
Для схватывающих на лету
Date: 2004-02-05 01:28 am (UTC)самый быстрый путь,
всего нет, но сжато и по делу
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csref/html/vcoricsharptutorials.asp
no subject
Date: 2004-02-09 06:21 pm (UTC)no subject
Date: 2004-02-05 01:34 am (UTC)Достоинства:
* в ней есть почти все объекты для любой цели
* очень неплохой сборщик мусора
* приличная скорость
* переносимость приложений (но лишь тогда, когда на всех ПК появится .NET Runtime Library в 23 МБ)
* мощная многопоточность
Недостатки:
* встроенный дизассемблер приложений (параноикам .NET не нравится)
* GC, хоть и умён, может дуриться объектами-Маклаудами, из-за особенностей удаления объектов с деструкторами/финализаторами
2) ASP .NET — похоже, Microsoft выжала из HTML всё, что только можно. Следующий этап — Интернет целиком на веб-службах.
Достоинства:
* зверские модели безопасности (включая заимствование прав)
* удобная связь с БД (ADO .NET)
* возможность делать codebehind (весь скрипт — в dll, в *.aspx — лишь интерфейс)
Недостатки:
* непристойно долго компилируется (к счастью, всего один раз)
3) C# .NET. Очень похож на VB .NET (правда), но чуть-чуть почище (повбывав бы тех, кто убедил MS, что 7 And 8 = False), потому что писался с нуля. Managed C++ — вот это совсем страшная вещь. Не см.
no subject
Date: 2004-02-05 02:29 am (UTC)Ну и конечно следует прочитать "Applied Microsoft .NET Framework Programming" Рихтера.
Недавно вышла бета .Net 1.2 и C# 2.0 с кучей новых возможностей. Самые главные из ни ИМХО шаблоны и итераторы. Так что скоро придется читать новые книги.
no subject
Date: 2004-02-05 03:47 am (UTC)(почитав тред)
могу добавить, что по сравнению с явой - это хотя бы стандартизованная вещь.
Re:
Date: 2004-02-05 12:27 pm (UTC)Re:
From:интересная дискуссия
Date: 2004-02-06 12:55 pm (UTC)Во первых .NET это в основном маркетинговый термин. под ним обычно имеют ввиду очень много разных вещей. Определимся с некоторыми :)
C# - ООР язык программирования по форме и по содержанию от Явы практически не отличающийся. просто еще один язык со своими достоинствами и недостатками.
- Основной набор уже имплементированной функциональности
Virtual Machine (VM) - Собственно платформа на которой бегут уже скомпилированные
программы.
Собственно в VM и C# Class libraries и находятся основные отличия между Явой и C#.
В Яве VM мплементирован как ассемблер высокого уровня который ориентирован исключительно на Яву. Практически невозможно скомпилировать другой язык на этот конкретный ассемблер
С другой стороны в .NET ассемблер уже изначально был спроектирован как универсальный что дает возможность компиляции в него других языков.
что касается Class libraries и Windows API, то для привлечения большего числа разработчиков М-софт сделало доступным большую ( не всю) часть API своих операционок для разработчиков C#. Теоретически никто не мешает сделать для Явы тоже самое. Но в этот момент сразу потеряется портативность которая позиционируется как достоинство Явы. Поясню на примере: Если вы для записи в файл скажете write() то это скорее всего сработает на любой операционке, а если Win32SuperDuperUltraFastNonPortableWrite() сами понимаете. Собственно в этом и главная проблема Моно. Более или менее стандартные вещи она имплементирует, но шаг вправо или влево в сторону М-фта уже не будет работать или будет медленно сэмулирован. История учит что на виндовозных платформах ооочень трудно писать портативный код.
Пользоваться всем этим делом или нет все зависит от того, какая у вас собственно цель.
Если вам интересно какой-нибудь язык интересный поучить.. для себя
то могу порекомендовать Оберон http://www.oberon.ethz.ch
no subject
Date: 2004-02-09 06:15 pm (UTC)На Oberon я посмотрел как-то пару лет назад, интересная штука. Но если у
меня будет время для изучения чего-то "для души", то, наверное, попробую
закрыть частично зияющую дыру, которая есть у меня в области
функциональных языков.
no subject
Date: 2004-02-06 02:36 pm (UTC)Добавлю только вот что
Я ... достаточно хорошо знаю Java/C++/Perl/Smalltalk ...
Хм, тогда вы можете писать на J#/Managed C++/Perl .Net (он, правда, сырой и медленный)/S# ;)
Хотя обычно говорится, что C#/VB .Net наболее заточены под .Net Framework - есть ещё огромное количество других .Net языков. Haskell, Mercury, F# (OCaml), Eiffel#, Oberon, Component Pascal ...
Mono серьёзно недоработан. Программа, спокойно работающие и на .Net Framework и на .Net Compact Framework на Mono вылетала с внутренним exception.
Кроме книжек могу посоветовать блоги разработчиков CLR/C#, там попадаются очень нетривиальные вещи. Кроме того, очень советую прочитать Design Guidelines For Class Library Developers (http://msdn.microsoft.com/library/en-us/cpgenref/html/cpconnetframeworkdesignguidelines.asp) - это насчёт чистоты, и посмотреть утилиту FxCop (не помню точной ссылки). Есть ещё такая замечательная штука - Reflector (http://www.aisto.com/roeder/dotnet/), который декомпилирует .Net код обратно в C#. Сложно сказать, пойдёт ли он на Mono, но для изучения базовой библиотеки классов - незаменим.
no subject
Date: 2004-02-06 03:34 pm (UTC)Microsoft Goes Bonkers
или перевод на русский:
У Microsoft поехала крыша
no subject
Date: 2004-02-08 03:40 pm (UTC)Вот сколько твердят, что Java - чудесный язык. Но используете ли вы приложения, которые написаны на Java? Нет же! Windows/Linux, Internet Explorer/Netscape Navigator/Opera, AIM/ICQ/Bat, Word/Excel/Access, SQL Server/Oracle/DB2, Photoshop/Corel Draw/Painter/3DMax, игрушки всякие - ну все без исключения сколько-либо серьёзные и популярные программы пишутся на C++ (или на C) - при том, что Жабе уже 7 лет! То же самое с C#: я пытался найти сколько-либо серьезные программы, написанные на нём, но то, что я видел, вселяло печаль и уныние. Как когда-то с Java-апплетами: все признавали, что технология крута, все её изучали и пытались сделать хоть что-то (тупые игры, часы, рисовалки), но никто не понимал, а нафига она нужна на самом деле. Потому что хороших идей, как технологию использовать, практически не было, и она почила в бозе. Совсем наоборот произошло с Flash: Action Script очень неудобен для программиста, однако результат превосходит все ожидания - и Флэш победным маршем шагает по интернету (обещают, что в новой флэшке язык будет почти как Джава - даст Бог, но только если клиент останется таким же шустрым и маленьким).
В общем, я тогда поверю в перспективы .NET, когда увижу, что на нём работает хоть парочка серьёзных приложений. Например, тот же Internet Explorer. Вот пусть они его перепишут на .NET. Тогда будет о чём говорить. А пока даже Visual Studio .NET (весьма, кстати, удобная среда) написан совсем не на CLR, а на обычном С++ - а поэтому и работает не тормознуто, и удобен.
А пока что C# и Java популярны потому только, что бизнес-миру нужно гнать миллиарды строк тупого бизнес-кода, для которого не столь важно удобство и скорость работы. И тут C# и Java вполне оправдывают себя: их нетрудно изучить, их просто использовать. И миллионы "негров" от программирования строчат, строчат на этих удобных, но ограниченных языках километры кода. "Написано однажды - используется однажды"...
Re:
Date: 2004-02-08 04:26 pm (UTC)1) А в чем именно тормознутость?
То, что рисование в .NET медленнее, чем в GDI, - это понятно. Потому что .NET использует GDI+.
С другой стороны, .NET достаточно сильно завязан на Windows, особенно в работе с окнами. Если знать основы GDI/GDI+ программирования на C++, то (а) графика программируется на ура, (б) никаких замедлений нет.
Странно, если вдруг вызовы GDI+ начнут тормозить так же, как Java....
Конечно, когда я начинаю перерисовывать текст на экране 6 раз в секунду,то моя система начинает тормозить (в игрушечном приложении). Потому что небыстрое это дело - рисовать текст на весь экран в разрешении 1280*1024.
Как-то я игрался с подсветкой квадратиков и на каждое движение мыши делал "Invalidate()", то загрузка системы вырастала до 100%. Но легкое изменение алгоритма - вызов "Invalidate" только в том случае, если это необходимо и только для тех кусочков экрана, где оно необходимо, - сразу же решило эту проблему.
2) О приложениях
Когда у нас есть мегабайт 20 исходного кода, который уже работает, то переписывать его с нуля не очень-то и хочется. Да и ресурсов обычно нет - потому что программисты на проекте занимаются выпуском новых версий да ошибки исправляют.
Подозреваю, что размеры кодов IE, Windows, MS Office, Oracle, Coral Draw и иже с ними несколько превосходят 20 Мб...
Просто в качестве примера - я использую "Putty" (telnet-клиент). И захотелось мне добавить к нему парочку специфичных Windows-штук - кнопочки на экране и еще кое-что по мелочи. Забрал я код, развернул его - всего-то 3.6 Мб. А вот как заглянул внутрь... Ооооо.. Ууууу... До сих пор тыкаюсь иногда и раздумываю - а как туда можно прикрутить градиентную заливку фона (для интереса)???
3) Серьезные приложения
Чтобы разработать серьезное приложение, нужна серьезная идея. А также разработчики и все такое. Поэтому сложных приложений на .NET мы еще не увидим некоторое время.
Ведь менеджеры думают очень просто - "у нас есть 20 программистов, они знают MFC/C++/Delphi, вот пускай на них и пишут". А изучение .NET - оно ведь времени требует.
Если разработчик писал на C++ лет 5, то егойный переход на C# может занять до одного года - потому что платформа другая. Другие классы, другие техники разработки/кодирования, разбиение на модули можно сделать иначе - все это за один месяц изменить сложно.
Также следует учитывать, что количество всяких хитрых библиотек для MFC/Delphi/etc. значительно превышает количество подобных библиотек под .NET. Даже если не учитывать, что развитые компании могут использовать свои внутренние библиотеки.
мысльвслух: немного я новых серьезных приложений видел в последнее время. Обычно этим приложениям от 4-5 лет и выше. Причем и разрабатывались они не за один день.
4) О "тупом бизнес-коде, для которого не важно удобство"
Понимаю это как метафору.
***************
Резюме:
.NET - это сложная платформа. Родная среда для нее - Windows (особенно модельный ряд WinNT). Сделано оно с умом и достаточно добротно. Язык C# и вправду удобнее C++ для решения обычных, повседневных задач (если не забираться глубоко внутрь, как однажды Авва делал свой кэш данных на 12 Гб ОЗУ).
Серьезных приложений под .NET в ближайшее время не появится - в этом нет необходимости.
Лично у меня складывается впечатление, что текущий .NET - это просто переходное звено к Longhorn. Чтобы в 2006/2007 годах миллионы программистов не закричали во весь голос "АААА!!! Гадкий MS!!! Он все изменил!!! Он ввел новый язык!!! Новые классы!!! Новые модели приложений!!!! ААААА......" и всем скопом не ушли в Linux/Unix/...
Сейчас есть инструменты и время для освоения будущего. Потому что разработка приложений под Longhorn будет значительно отличаться от приложений под текущий Windows. И вот тогда и Офис, и Photoshop, и CorelDraw будут переделывать на новый лад. Но чтобы сделать это через 3 года, обучаться надо уже сейчас.
примечание: то, что на чем-то новом можно использовать старые техники/приемы/библиотеки/подходы/... еще не говорит, что отличий нет.
********
рома
P.S. Согласно другим легендам, в Longhorn будет около 7,500 классов.
Re:
From:Bloody hell
Date: 2004-02-09 06:17 pm (UTC)Microsoft попытался присвоить Java, введя зависящие от платформы расширения, и сделав их достаточно незаметными, чтобы программисты их вставляли как бы сами собой.
Sun Microsystems судил Microsoft. Последний решил сделать свою собственную Java, тем убив (или по крайней мере ослабив) Сановскую: "C#"
Вот так и надо относиться к этой инициативе: не как к ЯЗЫКУ (все буквы с большой), а как к проекту для убийства конкурента.
Прежде чем начинать учить всякое коммерческое говно, надо прикинуть: приживется ли, сколько лет продержится, какой может быть спрос, дороже или дешевле сделать и поддерживать те же проекты на уже известных языках и т.д.
Для меня вообще противоестественно, когда коммерческий закрытый продукт, который производитель будет менять нарочно, чтобы заставить покупать новые версии, который не проверен на наличие дыр (и производитель будет их скрывать) - предпочитается основанному на опубликованных стандартах и/или полностью открытому.
Какой мудак будет писать сайты на C# и MS серверах, когда есть открытый, вечный (нет давления переустанавливать), стабильный, быстрый Linux ?
Госслужбы Китая перешли на linux чтобы не быть зависимыми от продукта Штатовской корпорации (со встроенными backdoors) - зачем и какой мудак должен делать сетевые вещи на Форточках??!
Re: Bloody hell
Date: 2004-03-20 12:37 pm (UTC)no subject
Date: 2004-02-11 08:27 am (UTC)http://www.artima.com/intv/
no subject
Date: 2004-02-26 06:46 am (UTC)