Автор вопроса: Павел | Web-сайт:www.vbnet.ru | ICQ: 326066673
Сегодня я убедился, что .NET действительно рулит...
В бета-тестирование кто-то прислал долбаную игрушку... Что там в
инсталляхе лежал msvbvm60, это ещё ничего... Скачал. Установил.
Потом запускаю прогу, юзающую mscomctl.ocx и ничерта понять не могу:
не загружается, выдаёт ошибку "Out of memory". Открываю VB, он тоже
сразу кучу ошибок вываливает...
Потом оказалось, что эта долбаная игрушка зарегистрировала
mscomctl.ocx, который таскала с собой (в папке, куда установилась), и,
видмо версия кривая попалась, что всё посыпалось...
Я, конечно, исправил. Но неприятен сам факт.
Если бы её установил неопытный юзер, а потом бы стал критиковать, что
"видна опять глючит", потому что другие проги, юзающие mscomctl.ocx не
запускаются...
А про язык я вот по какому поводу: ActiveX требует обязательной
регистрации, причём в системе одновременно может быть зарегистрирована
только одна версия ActiveX'а. Это приводит к "кошмару DLL".
А в .NET этого нет, потому что .NET библиотеки не требуют регистрации,
однвоременно может в одной системе храниться несколько версий
библиотек, и каждая программа работает с той вресией, какая ей нужна.
И вообще там всё сделано так, чтобы таких глюков не было.
К сожалению, действием CLR на таком низком уровне я не интересовался.
Да и собственно инфы по этому поводу нет, и все механизмы меняются в
разных версиях для обеспечения большего быстродействия.
Заодно здесь же на другие твой вопросы постараюсь ответить...
> Alex: VB .NET - это не VB! Это можно сказать, что впринципе C# .NET, но с синтаксисом VB
> CyRax (04:24 AM) : Это как?
> CyRax (04:24 AM) : Неужели С# тоже требует 20 метров библу? Тогда это уже не Си
Все языки .NET равны между собой. Отличны они только синтаксисом, ну и
так, по мелочам, некоторыми возможностями.
Существует множество программ, "перегоняющих" код из одного языка в
другой, например, тулза от MS позволяет в точности переводить код из
C# в VB и наоборот.
Код .NET компилируется в единый для всех язык IL (Intermediate
Language), который хранится в exe. А уже при первом запуске программы
этот код компилируется в машинный код.
Собственно, то, что программы компилируются в IL, позволяет
декомпилировать этот код также в любой .NET язык. Сам пользуюсь
отличным декомпилером Spices .NET, которым вот, буквально вчера,
смотрел внутренности библиотек .NET Framework в коде VB .NET!
И все .NET-приложения (за исключением Unmanaged VC++, если он не
использует Managed extensions, только тут такой вопрос - нахрена
вообще такой язык нужен? ) требуют для запуска .NET Framework, без
разницы, на каком языке они написаны.
> CyRax (04:56 AM) : Насколько я понял существует специальная библиотека, которая переводит или интерпритирует Managed в машинный? Или он существует только в процессе разработки .NET программы.
> Alex (04:57 AM) : Да, такая библиотека есть, и насколько я понимаю - это и есть CLR.
Нет, это называется JIT Compiler (Just-In-Time Compiler).
> CyRax (05:02 AM) : Ну, а ОС то всё равно на машинном коде работает. Значит в любой Win32/64 компилятор может сделать экзешник.
> Да, но потребуется другая CLR. Экзешник под винду (PE) тоже по идее переносим на другие платформы. Эта идея не нова у Микрософта. Только она не имеет практического применения.
Собственно, об этом вряд ли стоит говорить. Мультисистемность (или как
там это называется) - не главное, чего хочет MS от .NET.
Ещё нет нормальных реализаций .NET Framework для других платформ, хотя
попытки имеются (см. Mono и dotGNU).
> CyRax (05:14 AM) : Теперь понятно. Это прототип новой модели, одной из функций которых является переносимость на другие платформы. Но это актуально только для Visual программистов. Понял наконец что я хочу сказать. Эти все фичи актуальны только для Visual Studio. Это они улучшают так свои IDE. Микрософт всегда славился хорошим IDE.
Тут я не понял, к чему ты клонишь... Причём здесь вообще VS? Могу тебе
привести ссылки на другие IDE для .NET, не от Microsoft (даже
бесплатные). Да и создавать приложения .NET можно вообще без IDE,
многие так и делают.
> CyRax: Любой компилятор сможет сделать экзешник под .NET платформу.
У exe'шников .NET так сказать, немного другой формат...
Конечно, он совместим с PE, но расширен, так сказать.
Там идёт сразу передача управления CLR (это, ИМХО, библиотека
mscoree.dll), а CLR уже разбирает всё, что ей надо - ресурсы, IL и всё
прочее, что хранится в манифесте.
> CyRax (05:19 AM) : Ну давай я тебе задам вопрос почему у типа LONG диапазон -+ 2 млрд. Хотя ты может и ответишь, но другие могут и не ответить.
А ты не прав У Long (если он со знаком, других я не видел) диапозон
от -9223372036854775807 до 9223372036854775808.
Это потому, что Long теперь - 64 бита, а не 32.
> CyRax (05:21 AM) : А ты залазил в C#. Неужели там исчесзли указатели и встроенный АСМ?
Да. Указатели остались только с Unmanaged VC++. В остальных языках за
ненадобностью их прибили, да и в VC++ оставили, ИМХО, только для
совместимости.
> CyRax (05:24 AM) : Так VB.NET - это и есть VB
Вы немного не о том спорите... VB .NET, как и VB - просто язык, набор
ключевых слов, конструкций, операторов...
А вобщем, CyRax, ты бы хоть одним глазком на VB .NET глянул: это не
VB6, совсем не VB6!
> Alex: но эта технология совсем не относится к VB. Они скорее была сделана для прогеров на C, а добавили синтакси VB, что бы быстрее внедрить .NET в массы
Вот здесь Alex прав, как никто другой! Сейчас в .NET-сообществе
большинство программирует на C#, а не на VB. Хотя в принципе, между
ними почти нет различий.
О API vs .NET ничего не сказал, потому что в этом, мягко говоря, не
совсем разбираюсь.
После коментариев Павла и беглого просмотра CLR-расширений PE-файла картина начала немного проясняться. Налицо явные признаки помешательства большого Била. Программирование под "Visual Office.NET" осуществляется под лозунгом "Ещё Больше Интерпритации" (аббревиатуру сложите сами). Если для программистского мира не является новостью, что экзешник для VB6 не соответствует установленным правилам конструирования PE EXE файла (по правилам использована только секция кода, основной функцией которой является управление виртуальной машиной), то в .NET-приложении теперь даже и этот код является виртуальным. Ну прямо сказка какая-то. Получился действительно монстр - в 15 раз раздутая виртуальная машина под управлением интерпритируемого кода. Старая песня в новой оранжировке. И скорее всего больше для неё подходит название GatesWilliam-Basic.NET (GW-BASIC.NET) GW-BASIC вышел на новую ступень спирали (есть такая тема в философии). И кто теперь скажет что VB.NET не интерпритатор? Я первый брошу в него камень Если не понятна суть моего высказывания, то немного из истории. GW-BASIC - личная заслуга Б.Гейтса. Имеется оболочка под ДОС и все BAS-программы работают только внутри этой оболочки и не могут существовать в виде самостоятельной программы в кодах Intel-процессоров. Конечно реализация изменилась, но принцип остался - управление виртуальной машины виртуальными командами. Но дядя Били был тогда немного скромнее и вызовы системных и BIOS-функций всё таки позволял через прерывания. Да и к памяти милостиво разрешал обращаться в ограниченном виде (1 байт) через POKE и PEEK. Теперь даже и этого нельзя сделать. Это выглядит немного пугающим. Потому как кроме GW-BASIC'а ещё существовали компиляторы Бейсика(кто вам сказал что он ОБЯЗАТЕЛЬНО должен быть интерпритатором), АСМ, Си, Фортан и Паскаль. А теперь все языки являются GW-BASIC.NET.
Не знаю заслуга это или преступление Била Гейтса, но он вывел новую породу программистов - виртуальные программисты. Отсюда вытекает два угрожающих программистам следствия - они могут перестать быть программистами и они все будут программировать под GW-BASIC.
Вам остаётся только выбрать к какой генерации вы себя относите. Или к Новой Геперации или к Старой. --- Достоинства старой генерации описывать здесь не будем. Отметим только её узкую специализированность, необходимость продолжительного обучения и низкую скорость создания программ за счёт незначительного прироста в скорости. --- "Новая генерация несомненно круче, по тому как она новая и не может быть хуже старой!". Вот основной девиз генерации. Продолжим описание достоинств Новой Генерации. Ещё плюс для всупления в Новую генерацию то, что её поддерживает величайший программист мира - Вильям Гейтс. А так же в 100-ни и 1000-и раз возрастает скорость написания программы. "Удобства и комфорт". Откиньтесь на спинку кресла и подождите пока загрузится виртуальная машина, которая будет направлять все ваши дальнейшие действия. "Доступно каждому" и "Специальные Возможности". Теперь каждый ребёнок, умственно отсталый или инвалид может уверенно разрабатывать новые программы. Улучшеный интерфейc позволяет без труда составлять программы людям с ослабленным зрением и слухом. "Игры теперь работают лучше и быстрее". Да, по сравнению с другими версиями GW-BASIC. Там они вообще никак не работали. Теперь они не работают лучше и быстрее. "Регистрация". Скорее вступайте в Новую Генерацию программистов. При наличии отсутствия мозгов вы можете вступить в неё прямо сейчас.
Заеметьте, что все языки программирования (от MS) стали NET, но мелкософты не стали трогать C, я не имею ввиду с#, у него имеется и нормальный компилятор...
Видимо они решили поэкспериментировать... а на ком же ставить злостные эксперименты, как не на VB'шниках ... Может пройдет нек. кол-во времени, и будет нормальный компиллер под это все дело ? Иль даже и ждать я думаю не стоит Если так пойдет VB программеры вымрут и останутся только VB.NET программеры... вероятно с таким же лозунгом : VB - Net
Нормального компилятора быть не может. Потому что CLR - это и есть API. Только API второго уровня на современных платформах. Возможно в будущем оно может стать и первого.
Но пока идёт так
Документ.NET->CLR->API->МашинныеКоды.
Скорее всего в будущих ОС прославленной компании API отомрёт, а его место займёт CLR.
Возможно так
Программа->CLR->МашинныеКоды.
Обычный PE экзешник скорее всего будет поддерживаться как сейчас поддерживаются NE, Win16 API и эмуляция DOS/BIOS.
Т.е. произойдёт просто подмена API. Ну и соответственно прийдётся переделывать компиляторы ЯВУ, под новый формат экзешника. Свой Визуал Офис Микрософт наверное сам переделает, ну и остальные тоже.
To Павел: Когда в форуме по .NET в топике VB.Net - ОТКАЗАТЬСЯ или СМИРИТЬСЯ? я пытался сказать то, что здесь сказал CyRax, только немного другим языком, получилось, что народ не понял, о чём это я. Вплоть до того, что были фразы такого типа: "Да вы посмотрите на него! Ни разу не запустив .NET, он ещё смеет высказывать своё мнение!". Думаю, что теперь будет немного понятнее. А что касается кривого OCX, который попался с игрушкой, то вероятность того, что к тебе попадёт кривой CLR, выше ровно в 20 раз (соотношение размеров CLR и mscomctl). Это законы статистики.
Есть конечно люди типа Воронкова, которые сразу подумают: - Что за бред написал этот тупой CyRax?
На это я могу ответить. Хм, я отнюдь не тупой, а тупой как раз вы. Почему? Сейчас расскажу.
Может кто помнит (или знает) был у Микрософт одно время отличный продукт. Назывался Microsoft Macro Assembler. Но он исчез. Чем он стал неугоден Билу остаётся загадкой. Я думаю что если бы у него была бы IDE как у VB, то он был бы популярен не меньше VC. Кто то говорил о заботливости парней из Микрософт?
Вот тут то и проявляется главный лозунг Microsoft - всё для домохозяек. И это вошло в политику компании. Visual Office .NET - это может быть и отличный с точки зрения качества продукт (в чём я сильно сомневаюсь), но он ориентирован совсем не на программистов. Он расчитан на обычного, среднестатистического обывателя. Микрософт может и сделала правильно с точки зрения защиты своих продуктов. Она отобрала у обывателя оружие, способное навредить своему детищу (тем самым оболванив человечество в целом). Может это плохо, а может и нет. Не мне судить - история сама рассудит. Но факт остаётся фактом. Тот кто желает программировать исключительно на VB и есть тот среднестатистический обыватель. Зачем ему собственно указатели и регистры. Ему достаточно лишь открыть API-Viewer и скопировать готовый код с исходника. А как, зачем, почему вдруг не сработало? На это же есть служба поддержки Microsoft.
Как говорится Кесареву кесарево. А конкретнее программистам - языки программирования, ну а обывателю Microsoft Office .NET.
CyRax, а почему ты не прогарммируешь на ассемблере, раз уж тебе так
хочется низкоуровневого программирования?
И причём здесь интерпретируемость? Интерпретатор - это когда команды
исполняются виртуальной машиной. Но .NET код КОМПИЛИРУЕТСЯ! Он не
интерпретируется, как, например, Javascript.
А зачем тебе доступ к памяти? К прерываниям?
> всё для домохозяек
CyRax, ИМХО, ты говоришь, сам не понимая предмета разговора.
Домохозяйки явно не смогут программировать под .NET.
По крайней мере, этой домохозяке придётся накодить немало и перечитать
кучу книжек, чтобы написать более-менее стоящую программу.
Я сужу по себе: VB6 я изучил без книг, методом тыка. А .NET - только с
кучей книжек, бесчисленными расспросами специалистов, и то ещё нужно
постичь многое...
Насчёт ассемблера: на чём ты быстрее напишешь нормальную прогу под
заказ (допустим, проект для управлением контентом веб-сайта), на
ассемблере, или на ЯВУ?