ты ничего не понял о планах развития виндов. многое из того, что будет в длиннороге, будет сделано на .NET. Это будут разные технологии, типа Avalon, Indigo, ... но они будут на .NET. А Win32 перейдет в статус Legacy, как сейчас Win16.
> Похоже с жабой повторится история OS/2.
Выигрывает та платформа, под которую больше софта, пусть
даже она хуже - этот закон все мы видели в действии, и не раз.
Все так, только в роли OS/2 - дотнет котрый только голимая MS и любит. Пусть .NET как карлик на плечах гиганта повыше да получше выглядит, будущее за пределами win32 у него в тумане ибо Java - реальный монстр и к тому же постоянно развивается.
пусть дотнет и красивше в чем то, imho за пределами винды продвигать его недальновидно и некрасиво, а делать ставку на сырые проявления дотнета вроде Моно похоже на пионерство.. Если M$ так хочет успеха своему исчадию - пусть выпускает халявные девкиты, либсы, компилеры и студии под все платформы, тогда еще посмотрим, стоит ли эта хренотень внимания, а бежать впереди Билли с голым задом похоже на половое извращение
История научила тому, что на всякое "новое" от MS всегда найдётся толпа лохов-горлопанов, на которых MS и имеет свой бизнес... главное почаще объявлять о "суперновых MS-технологиях":)
MFC, ActiveX, COM, .NET... Что следущее?:) Готов спорить, что через 3 года будет опять что-то "революционное" и всех попросят "заплатить и обновится":)
Не задавался такой целью. А сравнение было навеяно аргументами сторонников жабы (Всеми двумями - "это есть везде" и "у-у-у, знаешь сколько всякого золота под это говно написано"). DOS похожими словами защищали.
Двоичные коды программ - это революция софтостроения,
в виде динамических библиотек и объектных файлов
, они позволяют создавать приложения с использованием множества Языков, например,
C, C++, Pascal, Assembler и.т.д.
для этого нужны всего-лишь соотвектствующие компиляторы
> Угу, в функции есть несколько повторов операций, специфичных только
> для этой функции (например, очистка памяти при выходе, и несколько
> точек выхода)
В данном случае лучше использовать goto и одну точку выхода.
>Считаю, что .NET чуждая линуксу и идеологии open-source технология
Заметим, что Java - тоже "чуждая идеологии open-source технология" - ибо "байт-код" нужен в основном для того, чтобы совместить требования "секретности" исходников и переносимости. Причем первично первое.
А если исходники не прятать - байт-код не нужен, ибо достаточно поставлять компилятор для платформы вместо "виртуальной машины". Что сильно упростило бы технологию.
>А если исходники не прятать - байт-код не нужен, ибо достаточно поставлять компилятор для платформы вместо "виртуальной машины". Что сильно упростило бы технологию.
class Test
{
public static void Main()
{
System.Console.WriteLine("Test");
int illegalValue = 666;
AnEnum shouldBeIllegal = (AnEnum)illegalValue;
System.Console.WriteLine(string.Format("Value is : {0}", shouldBeIllegal));
System.Console.WriteLine(string.Format("Type is : {0}", shouldBeIllegal.GetType()));
}
}
Будет там 666, поскольку 21-ой главе 2-ой спецификации это никак не противоречит. So what?
В том же посте есть ответ от Eric Gunnerson. Для справки, Eric Gunnerson is a Program Manager on the C# team. He is also a member of the C# Language Design Team.
Вот, что он пишет по поводу enum:
There are two reasons we do this:
The first is that, as another poster noted, enums function both as enums and bit sets. One could conceive of a language where they were two discrete items, though it would be less C-like (one of our targets), and would require a bit more syntax. And also, runtime support, and support in all the other .NET languages, so we elected not to go there.
We did elect to change the C behavior of enums being the same as ints - they are separate types, and while you can convert between an int and an enum with an explicit cast, the use of an explicit cast is generally a "I know what I'm doing here" indication.
The second issue is around the values you can put into an enum. We don't validate that an enum value is equal to one of the predefined values, both because they are used for bit-sets, and because it would impose a performance penalty. You can easily add the check yourself, but it is somewhat unfortunate that you have to do so.
Every language design has its tradeoffs.
Posted by: Eric Gunnerson on January 23, 2004 12:28 AM
Сечеш? Энумы могут быть битсэтами. А еще провека значения на допустимость снижает перформанс.
А что с ними? Новая аппаратура - новый компилятор(или, скорее, кодогенератор) - и заливай, что нужно. К тому же я не вижу широкого распространения аппаратных реализаций java. Не туда смотрю?
AFAIR сан рекламировал picojava, или как он там, некоторое время. AFAIR это был простой стековый процессор, одинаково применимый для других языков(был бы компилятор), коды операций которого совпадали с java байт-кодом - что несущественно. И это все как-то тихо закончилось.
enum AnEnum
{
ONE = 1,
TWO = 2
}
class Test
{
public static void Main()
{
System.Console.WriteLine("Test");
int illegalValue = 666;
AnEnum shouldBeIllegal = (AnEnum)illegalValue;
System.Console.WriteLine(string.Format("Value is : {0}", shouldBeIllegal));
System.Console.WriteLine(string.Format("Type is : {0}", shouldBeIllegal.GetType()));
}
}
$ msc my.cs
$ cp my.exe my :)
$ mono my
Test
Value is : 666
Type is : AnEnum
Sorry
C# developer
Вот серебряная пуля:
...
System.Console.WriteLine(string.Format("Is defined: {0}", System.Enum.IsDefined(typeof(AnEnum), shouldBeIllegal)));
my.exe
Test
Value is : 666
Type is : AnEnum
Is defined: False
>Сечеш? Энумы могут быть битсэтами. А еще провека значения на
>допустимость снижает перформанс.
а нахрена они тогда вообще нужны если в них можно пихать все, что угодно?
>Если ты умееш пользоваться типом Enum, безопасность не пострадает.
>http://blogs.msdn.com/brada/archive/2003/11/29/50903.aspx возможно если себя ограничивать, то можно с некоторой вероятностью считать безопасными, но если это групповой проект и имеет открытую часть (public API), то становится не по себе. Примеров когда это встанет боком море. Думаю сам догадаешься.
> Заметим, что Java - тоже "чуждая идеологии open-source технология" -
> ибо "байт-код" нужен в основном для того, чтобы совместить требования
> "секретности" исходников и переносимости. Причем первично первое.
> А если исходники не прятать - байт-код не нужен, ибо достаточно
> поставлять компилятор для платформы вместо "виртуальной машины".
> Что сильно упростило бы технологию.
Причина было вовсе не в этом, а в том что первоначально планировалось создавать процессоры для выполнения байт-кода. А потом это все вылилось в девиз "Написано однажды – работает везде" (имелось в виду написал, скомпилировал, засунул в jar и запускай где хочешь).
PS: исходники из байт-кода получить очень просто (другое дело, что если байт-код обфускированный, то читать декомпиляцию будет проблематично).
>>Сечеш? Энумы могут быть битсэтами. А еще провека значения на
>>допустимость снижает перформанс.
>а нахрена они тогда вообще нужны если в них можно пихать все, что угодно?
Ну я не знаю, как тебе еще объяснить. Вот давай сравним с Java (ехидно ухмыляясь :-)):
В джаве нет энумов, поэтому используются константы. Вот например:
class VerySecureApplication {
public static final int FIRST = 1;
public static final int SECOND = 1;
private int _verySecureValue;
public void setVerySecureValue(int verySecureValue) {
_verySecureValue = verySecureValue;
}
...
}
Какое значение можно передать методу setSecureValue? Абсолютно любое, и необязательно FIRST или SECOND.
Так как же с безопасностью?
>Причина было вовсе не в этом, а в том что первоначально планировалось создавать процессоры для выполнения байт-кода
Процессоры всегда выполняли (байт или нет) код. И разработка _нового_самого_правильного_ процессора - ничем не оправдана - код одного процессора ничем не лучше кода другого процессора.
>А потом это все вылилось в девиз "Написано однажды – работает везде"
На самом деле у явы другой лозунг: "Скомпилировано однажды - работает везде". В нем выражена действительная "closed-source" сущность java. Но Сан предпочел его скрыть (почему?).
А "Написано однажды - работает везде" - применимо к очень многим языкам. Нужен только кодогенератор и набор библиотек, реализующий общий для платформ API.
>исходники из байт-кода получить очень просто
И в некоторых странах потом придется за это платить. По высоким ценам.
> Какое значение можно передать методу setSecureValue? Абсолютно любое,
> и необязательно FIRST или SECOND.
> Так как же с безопасностью?
А так, что пример не правильный. Нужно так:
class SuperEnum {
public static final SuperEnum FIRST=new SuperEnum(1);
public static final SuperEnum SECOND=new SuperEnum(2);
private int value;
protected SuperEnum( int value ) {
this.value=value;
}
public int getValue() {
return value;
}
}
>Проверять всякий раз значение энума на допустимость - снижать
>перформанс приложения. Проверку надо выполнять по необходимости.
Ну-ну. Давай также кучу других проверок снимим нафиг. Они ведь только перфоманс снижают. И будут у нас indexoutofbound и переполнение стека и проч. Так что ли?
>И хватит уже про Enum!!! Нашли к чему прицепитьса.
Значит как выставлять enum в качестве супер-пупер-аргумента можно, а вот цепляться к его реализации нельзя? Мдас...
> Процессоры всегда выполняли (байт или нет) код. И разработка
> _нового_самого_правильного_ процессора - ничем не оправдана - код
> одного процессора ничем не лучше кода другого процессора.
>>А потом это все вылилось в девиз "Написано однажды – работает везде"
> На самом деле у явы другой лозунг: "Скомпилировано однажды - работает
> везде". В нем выражена действительная "closed-source" сущность java.
> Но Сан предпочел его скрыть (почему?).
Лозунг такой: "Write once, run anywhere", и никто ничего не скрывал.
Исходники есть исходники, их можно открыть (например jakarta.apache.org), можно закрыть (например www.bea.com). Но java намного ближе к open-source нем другие т.к. приемлемого качества исходники можно получить даже из сервера от BEA. К тому-же для бОльшей части платформы Java можно получить оригинальные исходники от SUN совершенно бесплатно (хоть и не под GNU/GPL).
> А "Написано однажды - работает везде" - применимо к очень многим
> языкам. Нужен только кодогенератор и набор библиотек, реализующий
> общий для платформ API.
Например C? Только если взять большую кроссплатформенную программу на C, то можно будет увидеть, что многие куски по нескольку раз переписаны для каждой платформы и разделены ifdef'ами. Зашибись. Тогда уж можно написать для кажной платформы свой вариант и тоже говорить - написано однажды - работает везде, потому что написано однажды, только десять раз подряд.
>> исходники из байт-кода получить очень просто
>И в некоторых странах потом придется за это платить. По высоким ценам.
Платить не за что не надо, если ты это на прямую не используешь у себя и не распространяешь.
>>Проверять всякий раз значение энума на допустимость - снижать
>>перформанс приложения. Проверку надо выполнять по необходимости.
>Ну-ну. Давай также кучу других проверок снимим нафиг. Они ведь только >перфоманс снижают. И будут у нас indexoutofbound и переполнение стека и >проч. Так что ли?
Не надо перегибать палку. Enum не гарант безопасности. Это удобный способ групирования констант в одном месте. По _РАЗУМНЫМ_ причинам проверка значений на допустимость не выполняется.
>>И хватит уже про Enum!!! Нашли к чему прицепитьса.
>Значит как выставлять enum в качестве супер-пупер-аргумента можно,
>а вот цепляться к его реализации нельзя? Мдас...
Еnum это не супер-пупер-аргумент, у него _НОРМАЛЬНАЯ_ реализация, а вы цеплетесь к пустому месту.
Я все равно не понимаю, какая связь между "closed-source сущностью" Java и байткодом. Возьмем, к примеру, Python. Позволяет компилировать в байткод. Следует ли из этого, что сущность Python "closed-source"? Не уверен.
Апплеты. Грузить из сети исходники и компилировать на клиенте?
>Не знают они, что и в Тайгере будет (у меня бета дженериксов да-а-а-авно есть) енум. Подтормаживают как джава. :))))))))
Отлично знаю про JDK1.5 (сodename Tiger). Пробовал устанавливать, как узнал что бета, потерял интерес. Если не ошибаюсь, Tiger летом выйдет. К тому времени будет и .NET 2.0, с теми же самыми generics, которые тоже есть уже сейчас в бета версии.
Я сначала изучил .NET, потом Java. До этого писал на C/C++. Работал в реальных проектах на и на .NET, и на Java. Может быть я не самый большой специалист (но очень хочю быть им), но могу судить о вещах более объективно, чем упертые фанаты, ненавидящие Microsoft. Разговор от энумах выеденого яйца не стоит. Как язык C# лучше чем Java. Обе платформы имеют свои преимущества друг перед другом. Интерпретируемый байткод хорошо, компилируемый в инструкции процессора еще лучше. Разговор об исходниках тоже выеденого яйца не стоит.