Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JAVA или .NET ? обсуждаем достоинства и недостатки 
:(
    Опции темы
Allexx
Дата 3.2.2004, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 16.12.2003

Репутация: нет
Всего: нет




M
mr.DUDA
Вопросы, мнения и просто свои мысли по поводу особенностей платформы .NET в сравнении с JAVA можно обсудить в этой теме. В любых других темах замечания типа "JAVA (или .NET) круче!" будут являться оффтопом, даже в том случае, если они аргументированы :).

P.S. аналогичная тема есть в разделе по JAVA.

PM MAIL   Вверх
AntonSaburov
Дата 3.2.2004, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 6
Всего: 118



Цитата
Как вы считаете, что является более перспективным для использования в разработке web-приложений: технология .NET или технология Java?

Если подходить ответственно к данному вопросу, а не просто кричать "маст дай" не важно по поводу какой-то платформе, то необходимо выбрать критерии, по которым мы можем оценивать ту или иную платформу.

1. Если мы возьмем критерием скорость работы, то тут скорее всего выигрывает .NET
2. Если мы возьмем критерием возможность работать на разных платформах, то тут несомненно выигрывает JAVA.
3. Если мы возьмем критерием распространенность ОС, под которую все это будет работать, то здесь опять же выиграет скорее всего .NET
4. Если берем скорость разработки, то для небольших проектов .NET тоже скорее всего выигрывает. Потому как скорость разработки сложных проектов уже определяются не кто сколько кнопочек быстрее накидает, а поддерживаемыми технологиями, а в этом системы в принципе равны.
5. Если мы говорим о зрелости и устойчивости платформы, то пока лидирует J2EE
6. Если мы берем количество компонент, то здесь выигрышь пока никому не принадлежит. Обе платформы имеют очень большой набор всевозможных компонентов.
7. Если мы говорим о таком явлении, как аплет, то в .NET что-то такое пока отсутствует (Я не говорю об ActiveX компонентах, т.к. это работает только в IE и не может рассматриваться как полная альтернатива аплетам). Хотя при распространенности IE это достаточно маленький выигрышь.

В принципе я склонен согласится с одним исследованием, по которому через небольшое время (2-3 года) около 40% рынка будет занимать .NET, другие 40% - JAVA, остальное будет распределено по специализированным системам (SQL на .NET или JAVA писать вы не будете - скорость все-таки нужна).
Рынок имеется в виду не количество проектов, а количество денег, вложенных в них. Понятно, что IIS очень сильно распространен потому как идет вместе с ОС. Но если смотреть на дорогой и крупный корпоративный рынок, то там пока Apache недосягаем. (Я не говорю и фирмах в 15-20 человек, где администратора-то часто не бывает).

Если смотреть на это как разработчик, то я уверен в том, что и те, и другие специалисты будут востребованы еще долгое время. Можно конечно прикрепится к монстру MS, но лично мне импонирует Java, хотя я стараюсь поддерживать свои знания на обеих платформах.

PM MAIL WWW ICQ   Вверх
Kurt
Дата 6.2.2004, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: 20
Всего: 36



Цитата
2. Если мы возьмем критерием возможность работать на разных платформах, то тут несомненно выигрывает JAVA.

Наверняка, это чистый флейм (сорри), но немного сомнительно (ИМХО!!!) будущность этого высказывания.
Останется ли Java кроссплатформенной, при хороших показателях, естесственно?
1) Насколько я знаю, лицензия от Sun на использование JavaVM у Microsoft только до сентября 2004г. Потом - только Sun's JVM.
2) Все последующие версии Windows будут основываться на технологии .NET (пока еще что-нибудь не придумают..) - т.е. все программы будут исполняться через Microsoft's VM, а Win32-приложения будут считаться устаревшими (как ныне DOS-программы) и выполняться медленне .NET-программ (из "публичных" выступлений Microsoft.. может, я не так понимаю ситуацию?) и потреблять больше ресурсов. Вся дальнейшая разработка - только под .NET. Замечательно.. Но JavaVM на Windows - не более чем просто программа. Win32-приложение! => Если не изменять реализацию виртуальной машины - она просто устареет, будет сильно отставать по всем показателям.. Ее надо будет переписывать.. На чем?! На .NET? Виртуальная машина на виртуальной машине?! Тогда опять же Microsoft обойдет Java..
Хотя.. может, есть еще какой выход..
3) Просто дополнение - последние разработки SUN реализованы под Solaris, Linux'ы, по-моему под MacOS, но не под Windows! (судя по их официальным сайтам).. Конечно, тут играет роль профиль конторы и обыденная политика фирм.. Но так, чисто как дополнение, настораживает..

Итого, мое ЛИЧНОЕ мнение - "хорошая" кроссплатформенность Java в будущем сомнительна..

З.Ы. Все это лишь ИМХО. Ничего более..



--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
C'hoosen++
Дата 12.2.2004, 03:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 21.1.2004

Репутация: нет
Всего: нет



Мне кажется, что, хотя Java во многих местах используется, она все-таки
начинает потихоньку устаривать, а вот .NET, наоборот, сильно развивается.
И через этот срок (2-3 года), если ничего нового не появиться, то .NET
заваюет около 55-65% всего рынка продукции. MS сейчас мощно совер-
шеннствует свою технологию и пытается внедрять ее во многих системах,
поэтому, если серьезно взяться за обучение и накопления опыта по .NET,
то можно стать сильно востебованным специалистом!
PM MAIL   Вверх
__vi
Дата 12.2.2004, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 21.1.2004

Репутация: нет
Всего: -1



Нет java не устаривает а наоборот развивается. И всё зависит от того что ты хочеш. Если ты ориентируешся тока на виду, то бери .NET на нём писать... легко. Java мощнее.

Это сообщение отредактировал(а) __vi - 12.2.2004, 11:36
PM MAIL   Вверх
AntonSaburov
Дата 12.2.2004, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 6
Всего: 118



Цитата
MS сейчас мощно совершеннствует свою технологию и пытается внедрять ее во многих системах,
поэтому, если серьезно взяться за обучение и накопления опыта по .NET, то можно стать сильно востебованным специалистом!

Вполне допускаю. Недавно Vit опубликовывал востребованность программистов в Чикаго. Пока Java там впереди с огромным отрывом.
Достаточно хорошо представляя построение JAVA и .NET могу сказать - сегодня JAVA более продуманная платформа, более зрелая. Пока единственный недостаток JAVA - она медленная. Более чем в 3 раза медленнее чем .NET. Это объясняется и тем, что сама JVM будучи более универсальной замедляет исполнение. И построение классов тоже более универсальное, и отсюда медленное. Увы, пока никто не смог сделать более универсальное более быстрым.
Хотя говорят, что Java 1.5 (Tiger) хорошо прибавила в скорости. Думаю, что за счет типизация коллекций вполне такое возможно.

А теперь IMHO

.NET для меня ассоциируется с баньяном (Дерево, у которого корни могут вырастать прямо из веток и просрастать в землю. Может получится огромный лес, но как бы из одного дерева). Вот точно такая же картинка - какую-либо понятную систему построения отследить крайне сложно. Понапихано всякого, все это причудливо может переплетаться. Но садовники что-то там пытаются. Гулять пока получается только с большим мачете или с хорошим проводником.

JAVA - хорошо спланированный парк, в котором есть четкие указатели, постриженные газоны, дорожки. Приятно гулять и очень удобно.

PM MAIL WWW ICQ   Вверх
ElectricalStorm
Дата 12.2.2004, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 547
Регистрация: 22.1.2004

Репутация: нет
Всего: 9



Цитата

Мне кажется, что, хотя Java во многих местах используется, она все-таки
начинает потихоньку устаривать, а вот .NET, наоборот, сильно развивается.
И через этот срок (2-3 года), если ничего нового не появиться, то .NET
заваюет около 55-65% всего рынка продукции. MS сейчас мощно совер-
шеннствует свою технологию и пытается внедрять ее во многих системах,
поэтому, если серьезно взяться за обучение и накопления опыта по .NET,
то можно стать сильно востебованным специалистом!


чистый пиар Микрософт !!!

и обсалютная неправда !




--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
ElectricalStorm
Дата 12.2.2004, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 547
Регистрация: 22.1.2004

Репутация: нет
Всего: 9



Люди пишите на java не бойтесь вы не будет cплошного Мелкософта никогда
если мы все будем писатьна java .NET вообще умрет !!!
ура да здравстует java ........... smile.gif)))

я пиарщик тоже smile.gif


--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
C'hoosen++
Дата 12.2.2004, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 21.1.2004

Репутация: нет
Всего: нет



to AntonSaburov:
Цитата
Недавно Vit опубликовывал востребованность программистов в Чикаго. Пока Java там впереди с огромным отрывом.

Это в Чикаго, а у нас то как ?

to __vi:
Цитата

бери .NET на нём писать... легко. Java мощнее.

Это врятли! (но .NET возьму)

to ElectricalStorm:
Никакого пиара! Просто .NET действительно мощная платформа. Пусть
пока молодая, с ошибками и недоработками, но через некоторое время
она обгонит Java (это точно!).
Цитата

Люди пишите на java не бойтесь вы, не будет cплошного Мелкософта никогда
если мы все будем писатьна java .NET вообще умрет !!!

Кто кого боится, а? Хватит играть в эти монопольные игры, пиши на чем
хочем и не думай о том кто его создал!
Лично я за .NET! wink.gif

Это сообщение отредактировал(а) C'hoosen++ - 12.2.2004, 14:28
PM MAIL   Вверх
ElectricalStorm
Дата 12.2.2004, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 547
Регистрация: 22.1.2004

Репутация: нет
Всего: 9



Цитата
Лично я за .NET!


Ok !
А я за Java


--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
AntonSaburov
Дата 12.2.2004, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 6
Всего: 118



Цитата
Это в Чикаго, а у нас то как ?

А у нас пока никак smile.gif Наш рынок ПО по сравнению с США - это просто капля в море.
У нас пока только базы данных для России пишут. Т.е. всем интересен Oracle, MS SQL. И средства разработки, причем типа "плюх энд плюй" - т.е. Delphi, VB. Теперь еще .NET. Можно быстро накидать всякого барахла на форму, обработать кнопочки. И готово. Если говорить за Россию, то из-за полной бесплатности .NET и Винды для нас это удобно. Но вообщем хотелось бы как-то ближе к цивилизованному рынку подвигаться.

PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 7.4.2005, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



По поводу делегатов (.NET) vs. листенеры (JAVA), специально для Domestic Cat:

Делегат инкапсулирует в себе ссылку на объект и метод класса объекта (мультикаст-делегаты инкапсулируют несколько ссылок), за счёт этого можно в одном объекте публиковать несколько событий (именованных делегатов), чего нельзя достичь используя один "плоский" список, хранящий ссылки на листенеры.

Другое достоинство делегатов vs. листенеры: насколько я понял, класс поддерживающий события в JAVA, наследуется от некоего базового класса, поправьте меня если я не прав. В .net наследоваться ни от чего не нужно: подписать можно любой класс на события любого другого класса.


--------------------
user posted image
PM MAIL WWW   Вверх
batigoal
Дата 7.4.2005, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Цитата(mr @ 7.4.2005, 09:55)
класс поддерживающий события в JAVA, наследуется от некоего базового класса, поправьте меня если я не прав

Не совсем. Для реализации листенера нужно не наследовать, а реализовать интерфейс. Это не одно и тоже. Любой класс (унаследованный от чего угодно) декларирует, что он имеет определенные методы для обработки событий определенного типа.

Это сообщение отредактировал(а) Lamer George - 7.4.2005, 10:07


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
mr.DUDA
Дата 7.4.2005, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(Lamer @ 7.4.2005, 10:06)
Не совсем. Для реализации листенера нужно не наследовать, а реализовать интерфейс. Это не одно и тоже. Любой класс (унаследованный от чего угодно) декларирует, что он имеет определенные методы для обработки событий определенного типа.


Наследование или реализация интерфейса у листенера - в любом случае, это "надстройка" над собственным интерфейсом объекта, а в случае с делегатами ВСЯ логика (список подписчиков, вызов их методов) спрятана внутри делегата.


--------------------
user posted image
PM MAIL WWW   Вверх
Domestic Cat
Дата 7.4.2005, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



http://forum.vingrad.ru/index.php?act=ST&f...=47926&unread=1


Цитата(mr @ 7.4.2005, 00:55)
Делегат инкапсулирует в себе ссылку на объект и метод класса объекта (мультикаст-делегаты инкапсулируют несколько ссылок), за счёт этого можно в одном объекте публиковать несколько событий (именованных делегатов), чего нельзя достичь используя один "плоский" список, хранящий ссылки на листенеры.

Тут я не совсем понял. Ты делаешь несколько делегатов, при при наступлении определенного события можешь вызвать все методы. Только это скрыто от тебя.
В Java регистрируются листенеры, при наступлении события на каждом вызывается определенный метод. Вроде то же самое.


Цитата(mr @ 7.4.2005, 00:55)
Другое достоинство делегатов vs. листенеры: насколько я понял, класс поддерживающий события в JAVA, наследуется от некоего базового класса, поправьте меня если я не прав. В .net наследоваться ни от чего не нужно: подписать можно любой класс на события любого другого класса.


Происходит вот что: делается интерфейс, например, ValueChangeListener, с методом, например, valueChanged(). Класс, который хочет слушать такие ивенты, обязан наследовать от этого интерфейса и имплементировать этот метод.
Тот, кого должны слушать, имеет обычно методы типа addValueChangeListener(ValueChangeListener v), removeValueChangeListener(ValueChangeListener v). Все листенеры хранятся в коллекции, если наступает ивент, на каждом вызывается метод valueChanged.
Естественно, стандартные ГУИ и проч листенер-интерфейсы уже существыют, потому с ними так же просто, как и со стандартными .НЕТ делегатами.
Для юзер-дефайнед листенеров - можно написать самому (это дольше, чем пользовать делегат), или воспользоваться одним из стандартных "общих" листенеров.
Для меня отличие в том, что я понимаю листенеры полностью; а вот что же передается делегату - загадка smile То есть, все-таки это не Питон, где можно определить функцию function , а потом писать x = function, в .НЕТ же явно указатели на методы нельзя пользовать.

Но : для меня разницы особой нет, что там, что тут пользую одинаково, особых сложностей нигде не вижу.



--------------------

PM   Вверх
mr.DUDA
Дата 7.4.2005, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(Domestic @ 7.4.2005, 10:20)
Для меня отличие в том, что я понимаю листенеры полностью; а вот что же передается делегату - загадка  То есть, все-таки это не Питон, где можно определить функцию function , а потом писать x = function, в .НЕТ же явно указатели на методы нельзя пользовать.


Делегату (как методу) передаётся вызов с заданными аргументами. Внутри себя делегат (как класс) перечисляет подписчиков и вызывает каждого из них, передавая им эти же аргументы.

Кстати, а как в JAVA добавить обработчик события, если метод-обработчик является статическим ? smile
В .net такое возможно за счёт того, что делегат (как класс) хранит в списке подписчиков не только указатель на метод, но и указатель на объект, а для статических обработчиков - только указатель на статический метод класса.


--------------------
user posted image
PM MAIL WWW   Вверх
Domestic Cat
Дата 7.4.2005, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Цитата(mr @ 7.4.2005, 01:28)
Кстати, а как в JAVA добавить обработчик события, если метод-обработчик является статическим ?


Никак, нельзя реализовывать методы интерфейса как статики smile
Но я большой разницы не вижу - ну, можно делегатом сделать статик метод. Вопрос - зачем?


--------------------

PM   Вверх
mr.DUDA
Дата 7.4.2005, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(Domestic @ 7.4.2005, 10:39)
Но я большой разницы не вижу - ну, можно делегатом сделать статик метод. Вопрос - зачем?


Может быть класс-утилита, обрабатывающая события. Его методы реализуются как public static, и всем доступны всем классам из любой точки. К примеру, класс, сохраняющий сообщения в лог-файл. Можно сделать то же самое с пом. синглетона, но если по какой-либо причине это не подходит (ну например, мне нужно чтобы файл был открыт статическим конструктором класса, а не при обращении к Instance) - то всё делается статическими методами.


--------------------
user posted image
PM MAIL WWW   Вверх
Domestic Cat
Дата 7.4.2005, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Можно, но возможных реализаций всегда можно много выискать. Того же можно достичь, реализовав методы как инстанс методы, и из них менять статик поля - вот поля и будут доступны всем. Правда, нужно создавать объект класса; но ведь любой делегат озбначает, что будет "за кулисами" создан целый класс.





--------------------

PM   Вверх
mr.DUDA
Дата 7.4.2005, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(Domestic @ 7.4.2005, 10:50)
но ведь любой делегат озбначает, что будет "за кулисами" создан целый класс.

"За кулисами" (в классе делегата) создаётся только список подписавшихся методов, и список этот размещается "публикаторе" события (делегата). Никаких требований к подписчикам не выставляется - пусть они будут хоть статическими, хоть методами объекта класса. Это я к тому, что без делегатов приходится идти окольным путём для статиков:
Цитата(Domestic @ 7.4.2005, 10:50)
Того же можно достичь, реализовав методы как инстанс методы, и из них менять статик поля - вот поля и будут доступны всем. Правда, нужно создавать объект класса




--------------------
user posted image
PM MAIL WWW   Вверх
mr.DUDA
Дата 7.4.2005, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Насчёт кроссплатформенности.

Есть в инете такая библиотека GTK+, которую портировали на C#. Вкратце, это полноценная замена System.Windows.Forms. Вместе с GTK# можно разрабатывать любые приложения для Mono, Win и любых других платформ, на которые будет переведён .NET Framework.

Теперь про JAVA... smile
Мобильники у всех есть? Игры скачивали, устанавливали? Ага, вот то-то и оно smile, оказывается J2ME-приложение может и не заработать на модели, на которую оно не было расчитано. Малочисленные "кроссплатформенные" J2ME-игры на самом деле содержат в себе кучу "примочек" для наиболее распространённых платформ, что снимает с них ярлык "кроссплатформенное приложение". Что скажут по этому поводу оппоненты из лагеря JAVA ?
smile


--------------------
user posted image
PM MAIL WWW   Вверх
batigoal
Дата 7.4.2005, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Цитата(mr @ 7.4.2005, 11:35)
на которые будет переведён .NET Framework

Я бы выделил слово БУДЕТ большими буквами smile

Цитата(mr @ 7.4.2005, 11:35)
Что скажут по этому поводу оппоненты из лагеря JAVA

Мне кажется, это недостаток производителей телефонов - плохая реализация исполняющей системы.

Это сообщение отредактировал(а) Lamer George - 7.4.2005, 11:42


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
mr.DUDA
Дата 7.4.2005, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(Lamer @ 7.4.2005, 11:41)
Мне кажется, это недостаток производителей телефонов - плохая реализация исполняющей системы.

То есть, если так рассуждать, то проблема сводится к плохой реализации JVM в данном телефоне ? Байт-код, что ли, криво выполняется ? Тогда причём тут высокоуровневые заточки, когда программеру нужно избегать использовать какие-то классы из фреймворка J2ME ?


--------------------
user posted image
PM MAIL WWW   Вверх
batigoal
Дата 7.4.2005, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Цитата(mr @ 7.4.2005, 11:47)
когда программеру нужно избегать использовать какие-то классы из фреймворка J2ME

Так не программеру нужно избегать, а производителю мобилы бороться за то, чтобы его JVM полностью соотвтствовала стандарту. Не знаю, кто пишет исполняющую среду Java для win, linux и прочих осей - разработчики операционки или Sun'овцы - но для мобильников-то наверняка производитель делает это сам. Значит, он ответственен за точное соответствие спецификации виртуальной машины.

P.S. А .NET на мобилы разве ставят?


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
mr.DUDA
Дата 7.4.2005, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(Lamer @ 7.4.2005, 11:52)
А .NET на мобилы разве ставят?

ставят, на смартфоны.


--------------------
user posted image
PM MAIL WWW   Вверх
NotGonnaGetUs
Дата 7.4.2005, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 25.2.2005
Где: Москва

Репутация: нет
Всего: 12



C мобилами есть другая проблема.
Каждый производитель создаёт собственный библиотеки, что бы предоставить те или иные доп. функции.
Естественно, если написать приложение используещее "фичи" конкретного телефона, на другом телефоне оно не заработает.

А с байт кодом всё впорядке smile

Пройдёт ещё не много времени и на телефонах можно будет смело ставить "обычную" j2se %)
PM MAIL   Вверх
arilou
Дата 7.4.2005, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Вот вы спорите-спорите, а никто так и не сказал, что обе среды просто по разному реализуют паттерн Observer. Лично мне по душе ближе реализация .NET, потому что она более слабосвязанная - на классы-публикаторы или потребители событий не накладывается никаких ограничений, т.е не надо создавать и тем более реализовывать никаких интерфейсов.



--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Domestic Cat
Дата 7.4.2005, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Цитата
на классы-публикаторы или потребители событий не накладывается никаких ограничений, т.е не надо создавать и тем более реализовывать никаких интерфейсов.


А разве интерфейс - это ограничение? smile Вот наследование - да, а имплементация интерфейса приводит лишь к тому, что нужно написать некий метод(ы), стандартно названный, ну так в любом случае и с делегатами нужен метод какой-то. Мне нравится, что методы названы стандартно, скажем, если я вижу баттон в коде, я знаю что будет метод actionPerformed. С делегатами этот метод можно назвать хоть PrivetVasjaPupkin() smile


--------------------

PM   Вверх
arilou
Дата 7.4.2005, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Понял, повторяя сказанное, такая вещь, как анонимные методы будет в .NET 2.0 и уже есть в Mono 1.1.6. Это будет аналог того, о чем ты говоришь.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
stab
Дата 8.4.2005, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



Цитата
Мне нравится, что методы названы стандартно, скажем, если я вижу баттон в коде, я знаю что будет метод actionPerformed. С делегатами этот метод можно назвать хоть PrivetVasjaPupkin()


С другой стороны, методу можно дать хорошее описательное имя, например closeButton_Click, а в Java так и останется actionPerformed. Вообще, я так понимаю из этого кода:

Код

JButton b = new JButton("Name");    
//обьевляем событие    
 ActionListener listener = new ActionListener()    
  {    
            public void actionPerformed(ActionEvent event)    
            {    
                /* действия */    
            }    
 };    
//добавляем событие объекту    
b.addActionListener(listener);


что коментарий /* действия */, если его заменить на код, разворачивается в блок switch... эммм, если это так, то очень уж это смахивает на древний подход обработки сообщений из Win32 API. Читабельность у такого блока нулевая.


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
Domestic Cat
Дата 8.4.2005, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Цитата(cully @ 8.4.2005, 01:41)
что коментарий /* действия */, если его заменить на код, разворачивается в блок switch... эммм, если это так, то очень уж это смахивает на замшелый подход обработки сообщений из Win32 API. Читабельность у такого блока нулевая.

Ну да, сразу вдруг и нулевая? smile Во-первых, листенерами на разные кнопки можно ставить разные объекты - что не самый лучший вариант, конечно, Во-вторых, никто не мешает писать
Код

public void actionPerformed(ActionEvent e)    
{    
        if (e.getSource() == closeButton)
              closeButton_Click();
         if (e.getSource() == openButton)
             openButton_Click();
}   

При небольшом количестве кода можно и без ифов.


--------------------

PM   Вверх
Kurt
Дата 8.4.2005, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: 20
Всего: 36



smile
И в чем крутизна такого кода? Изини, но выглядит уж как-то слишком искусственно.
В чем преимущество таких изворотов?


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
arilou
Дата 8.4.2005, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(Kurt @ 8.4.2005, 12:04)
И в чем крутизна такого кода?

Клево ты сформулировал мою мысль. А я сижу и думаю, что тут такого написать smile


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
batigoal
Дата 8.4.2005, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Цитата(Kurt @ 8.4.2005, 12:04)
В чем преимущество таких изворотов?

Не понял - каких?


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
alir
Дата 8.4.2005, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 19.3.2005

Репутация: 2
Всего: 4



Цитата
А .NET на мобилы разве ставят?

Скоро будет! С каждой новой серией увеличевается память мобильных телефонов - сейчас уже 80 мб (не смартфоны!). Т.е. скоро, надеюсь, .net войдет и в эту среду. Хотя может будущее за смартфонами.
PM MAIL ICQ   Вверх
Ch0bits
Дата 8.4.2005, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: 9
Всего: 62



Цитата(alir @ 8.4.2005, 16:42)
Скоро будет!

Приколист, .НЕТ ведь только под виндуза заточет, а в простой мобиле(не смартфоны!) даже операционной системы нет.

Цитата(alir @ 8.4.2005, 16:42)
сейчас уже 80 мб

smile smile Оперативки чтоли? smile smile
Если постояной, то только через флешки наращивают.

Цитата(alir @ 8.4.2005, 16:42)
надеюсь, .net войдет и в эту среду

Упаси Бог! Хотя этого и так не будет... smile
Вот на виндузовых КПК он пашет, но это уже другая история...
PM WWW   Вверх
Domestic Cat
Дата 8.4.2005, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Цитата
И в чем крутизна такого кода? Изини, но выглядит уж как-то слишком искусственно.
В чем преимущество таких изворотов?


Не понял, может ты вообще без ифов или свитчей код пишешь? smile Код как код, все равно, как любой код в слое презентации, на реюзабилити не претендует, написали - забыли. Точно также я могу делегаты назвать "изворотами" - ну и? smile



--------------------

PM   Вверх
arilou
Дата 8.4.2005, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(Domestic @ 8.4.2005, 17:56)
Не понял, может ты вообще без ифов или свитчей код пишешь?


А в Java можно так сделать:
Код

public class classBase
{
}

public class classA : classBase
{
}

public class classB: classBase
{
}

public class App
{
  public static void Main()
  {
     string className = Console.ReadLine();
     classBase obj = Activator.CreateInstance(Type.GetType(className, true, true));
  }
}


Я думаю, идею ты понял.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
batigoal
Дата 8.4.2005, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Цитата(arilou @ 8.4.2005, 18:06)
Я думаю, идею ты понял

Объясни, пожалуйста, здесь ведь не только он. Я не понял smile
Динамически получаем имя класса, и создаем его объект? Это мы магем с помощью механизма отражения. Но зачем тут тогда классы A и B?..


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Domestic Cat
Дата 8.4.2005, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



В смысле, есть ли рефлекшн? smile А откуда ж микрософту было его взять? (шутка)

Код


public class A 
{   
    public static void main(String [] args) throws Exception
    {   
        B b = (B) Class.forName("B").newInstance();
        C c = (C) Class.forName("C").newInstance();
        System.out.println(b + "  " + c);
    }
}

class B
{}

class C extends B
{}



--------------------

PM   Вверх
arilou
Дата 8.4.2005, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



А атрибуты есть в Java?


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Domestic Cat
Дата 8.4.2005, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Есть мета-теги, суть та же, что и у аттрибутов, самому можно создавать. Пример:
Код

import java.lang.annotation.*;
import java.lang.reflect.*;
                                                                                
@Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @interface debug  {
    boolean  devbuild() default false;
    int counter();
}
                                                                                
public class MetaTest {
    final boolean production=true;

    @debug(devbuild=production,counter=1) public void testMethod()  {
    }
 
                                                                               
    public static void main(String[] args) {
                                                                                
        MetaTest mt = new MetaTest();
        try {
            Annotation[] a = mt.getClass().getMethod("testMethod").getAnnotations();
            for (int i=0; i<a.length ; i++)  { 
                 System.out.println("a["+i+"]="+a[i]+" "); 
             } 
         } catch(NoSuchMethodException e) { 
             System.out.println(e); 
         } 
     } 
 }



--------------------

PM   Вверх
arilou
Дата 8.4.2005, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Еще один "ламерский" вопрос: возможна ли:
1) динамическая кодогенерация, как Reflection.Emit в .NET?
2) догрузка кода "по требованию"


Это сообщение отредактировал(а) arilou - 8.4.2005, 19:19


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Domestic Cat
Дата 8.4.2005, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



В Java нет ассемблей, нет метаданных, ПЕ хедеров. Но код можно генерить, есть класс com.sun.tools.javac.Main. есть и более серьезные вещи, типа BCEL.
Добавлено @ 19:23
Цитата(arilou @ 8.4.2005, 10:10)
догрузка кода "по требованию"

http://java.sun.com/j2se/1.5.0/docs/api/ja...lassLoader.html



--------------------

PM   Вверх
batigoal
Дата 8.4.2005, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Domestic Cat Не кинешь ссылочку про метатеги? Я о таком не знал...


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Domestic Cat
Дата 8.4.2005, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172





--------------------

PM   Вверх
stab
Дата 9.4.2005, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



И так, обобщая по обработке событий в .NET и Java.

1. Java.

1.1 Событие.

На уровне языка понятие события отсутсвует, его вынесли на прикладной уровень или не внесли оттуда smile Каждый класс\объект, который заявляет о желании опубликовать событие, должен:

а. Самостоятельно поддерживать внутренний список всех подписавшихся на событие объектов.
b. Реализовать методы для добавления\удаления подписчиков из внутреннего списка подписавшихся.
c. Опубликовать соответствующий интерфейс, который должен быть реализован каждым из объектов-подписчиков.

Каких-то строгих требований к реализации, судя по всему, нет.

1.2 Обработчик события (подписчик).

Объект реализующий соответствующий интерфейс обрабатываемого им события. По логике, для каждого такого объекта нужен отдельный класс для того, что бы обеспечить различное поведение объектов.

1.3 Код.

Прошу знатоков Java привести полный код класса публикующего событие и пример работы с ним.



2. .NET (C#)

2.1 Событие.

Понятие события введено на уровне языка. Каждый класс\объект, который заявляет о желании опубликовать событие, должен:

а. Объявить соответствующий класс-делегат с требуемой сигнатурой.
b. Объявить соответствующий член-событие.

Этот член-событие, по сути, является объектом-списком (System.MulticastDelegate) объектов-делегатов (System.Delegate), который реализует всю функциональность по поддержанию списка, добавлению\удалению подписчиков и по оповещению о наступлении события.

2.2 Обработчик события (подписчик).

Обработчиком события может быть любой метод с подходящей сигнатурой. Для добавления в список подписчиков информация о методе инкапсулируется в объекте класса System.Delegate.

2.3 Код. (C# 2.0)

Класс с событием:
Код

using System;
...

public delegate void SampleEventHandler();

public class ClassWithEvent
{
    public event SampleEventHandler SampleEvent;

    public void DoSampleEvent()
    {
        if (SampleEvent != null) SampleEvent();
    }
}


Пример работы:
Код

using System;
...

class Program
{
    static public void Main()
    {
        ClassWithEvent testObject = new ClassWithEvent();
        testObject.SampleEvent += FirstHandler;
        testObject.SampleEvent += SecondHandler;
        testObject.DoSampleEvent();
    }

    static private void FirstHandler()
    {
        Console.WriteLine("FirstHandler");
    }

    static private void SecondHandler()
    {
        Console.WriteLine("SecondHandler");
    }
}


или так:
Код

using System;
...

class Program
{
    static public void Main()
    {
        ClassWithEvent testObject = new ClassWithEvent();
        testObject.SampleEvent += delegate
        {
            Console.WriteLine("FirstHandler");
        };

        testObject.SampleEvent += delegate
        {
            Console.WriteLine("SecondHandler");
        };

        testObject.DoSampleEvent();
    }
}



--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
Domestic Cat
Дата 9.4.2005, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Код

interface Listener
{
    void stateChanged();    
}

class SomeClass
{
    int state;
    ArrayList<Listener> listeners = new ArrayList<Listener>();

    public void setState(int state)
    {
        this.state = state;
        fireStateChanged();    
    }    
    
    protected fireStateChanged()
    {
        for(Listener l : listeners)
            l.stateChanged();    
    }
    
    public void addListener(Listener l)
    {
        listeners.add(l);
    }
}

class MyClass implements Listener
{
    MyClass()
    {
        SomeClass some = new SomeClass();
        some.addListener(this);
        some.addListener(this);    
    }
    
    public void stateChanged()
    {
        // do something;    
    }    



Несколько замечаний.
1. За все время мне пришлось самому реализовывать такую вещь один единственный раз. И J2SE, и J2EE содержат достаточное количество листенеров на все случаи жизни. В таких случаях все сводится к
Код

class MyClass implements StateListener
{
    MyClass()
    {
        SomeClass some = new SomeClass();
        some.addStateListener(this);
    }
    
    public void stateChanged()
    {
        // do something;    
    }    


что никак не сложнее делегатов.
Если говорить о самой системе листенеров (см. пример выше)
Недостаток - писать больше, реально - не намного.
Недостатки делегатов, имо:
1. Отсутствие соглашения об именовании делегатов и методов. Можно назвать как хочешь, причем даже осмысленное название часто трудно отличить от названия метода/класса/поля.
2. Делегаты скрывают в себе много автогенерированного кода, внутренний механизм их действия труднее понять.
3. Делегаты, помимо введения двух кейвордов, вводят лишнюю сущность в языке - ссылку на метод, которая более нигде не используется.
4. "Извне" трудно понять, что такое делегат - метод или класс. С одной стороны, это класс, объект которого можно создать через new, с другой стороны, вызывается он как метод.
5. Делегат не может иметь больше одного метода. Часто же нужно несколько методов, сгруппированных по к-л признаку. Например, Java интерфейс MouseListener содержит 5 методов, тогда как в C# требуется 5 делегатов (и, следовательно, 5 классов).
6. Java листенеры более гибки, если я реализую такой листенер сам, у меня есть выбор - как хранить листенеры, в каком порядке вызывать методы, реализовать другие, вспомогательные методы.


--------------------

PM   Вверх
batigoal
Дата 9.4.2005, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Цитата(Domestic @ 9.4.2005, 20:17)
Например, Java интерфейс MouseListener содержит 5 методов, тогда как в C# требуется 5 делегатов (и, следовательно, 5 классов).

Вдогонку - если нам нужно, скажем, только два метода из этих пяти, можно воспользоваться классом-адаптером и переопределить только нужные нам методы. Для остальных будет использована пустая реализация. Мелочь, а приятно.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
mr.DUDA
Дата 10.4.2005, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(Domestic @ 9.4.2005, 20:17)
Java листенеры более гибки, если я реализую такой листенер сам, у меня есть выбор - как хранить листенеры, в каком порядке вызывать методы, реализовать другие, вспомогательные методы

В общем, всё сводится к "напишу-ка я всё сам". Т.е. по сути дела, листенеры вообще не нужны, ведь можно обойтись и без них.

"Лишний" автогенерируемый код, на самом деле, весь лежит в базовом классе Delegate. Если взять и дизассемблировать сборку, содержащую делегат, в его коде будет всего 3 перекрытых типизированных метода базового класса и конструктор.

Возможности, предоставляемые делегатами:
1) Имея объект "делегат", можно получить ссылку на объект содержащий метод (свойство Target), reflection-описание метода (Method);
2) Можно перечислить список всех объектов и их методов, подписанных на делегат (GetInvokeList);
3) Можно вызвать метод(ы), подписанные на делегат, асинхронно!!! Примеры - в MSDN. Умеют ли это листенеры?
4) Можно вызывать метод-подписчик с использованием позднего связывания (late-bound) - метод DynamicInvoke;
5) Можно комбинировать делегаты (метод Combine).

Наконец, в листенерах приходится пользоваться switch-ем, а это уже напоминает подход WinAPI.


--------------------
user posted image
PM MAIL WWW   Вверх
Domestic Cat
Дата 10.4.2005, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Цитата(mr @ 9.4.2005, 23:14)
1) Имея объект "делегат", можно получить ссылку на объект содержащий метод (свойство Target), reflection-описание метода (Method);


Но ведь то же можно делать и с листенером.
Цитата(mr @ 9.4.2005, 23:14)
2) Можно перечислить список всех объектов и их методов, подписанных на делегат (GetInvokeList);

Все классы в Java, поддерживающие слушателей, имеют методы get<...>Listeners()

Цитата(mr @ 9.4.2005, 23:14)
3) Можно вызвать метод(ы), подписанные на делегат, асинхронно!!! Примеры - в MSDN. Умеют ли это листенеры?

Это свойство не делегатов, а фича языка. В Java есть асинхронный вызов методов, см http://java.sun.com/j2se/1.5.0/docs/api/ja...FutureTask.html

Цитата
4) Можно вызывать метод-подписчик с использованием позднего связывания (late-bound) - метод DynamicInvoke;

Вот с этим я не разбирался, можно пример, чтобы знать о чем речь?

Цитата(mr @ 9.4.2005, 23:14)
5) Можно комбинировать делегаты (метод Combine).

Ну, это то же самое что и +=, и то же самое что просто добавление еще одного листенера в Java.

Цитата(mr @ 9.4.2005, 23:14)

Наконец, в листенерах приходится пользоваться switch-ем, а это уже напоминает подход WinAPI.

Сильно сказано; во-первых это не такое уж супер частое явление, во-вторых та же Простая Фабрика пользует свич, но это не значит, что паттерн является чисто процедурным и пришел из винапи smile


--------------------

PM   Вверх
mr.DUDA
Дата 10.4.2005, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(Domestic @ 10.4.2005, 08:25)
5) Можно комбинировать делегаты (метод Combine).

Ну, это то же самое что и +=, и то же самое что просто добавление еще одного листенера в Java.

Нет, это не то же самое. Комбинирование производится из двух и более делегатов (а не методов), и результирующий делегат будет иметь список подписчиков из всех перечисленный делегатов.


Цитата(Domestic @ 10.4.2005, 08:25)
Вот с этим я не разбирался, можно пример, чтобы знать о чем речь?

Вот пример:
Код

    public delegate string MyDelegate(string a, int c);

    public class Test
    {
        // этот метод будем вызывать асинхронно
        string Function(string a, int b)
        {
            /* какие-то действия */
            System.Threading.Thread.Sleep(5000);

            return "Результат метода";
        }

        // Можно так
        public void DoSomeAsyncronously()
        {
            MyDelegate deleg = new MyDelegate(this.Function);

            // вызываем метод "Function" асинхронно
            IAsyncResult ar = deleg.BeginInvoke(
                "111", 123, // это - аргументы метода
                null, null // а это - доп. параметры
                );

            // ждём не более 10 секунд
            ar.AsyncWaitHandle.WaitOne(10000, false);

            // если завершился за 10 секунд - получим результат
            if(ar.IsCompleted)
            {
                string result = deleg.EndInvoke(ar);
            }
        }

        // А можно и вот так
        public void StartAsyncMethod()
        {
            MyDelegate deleg = new MyDelegate(this.Function);
            deleg.BeginInvoke("123", 456, new AsyncCallback(this.OnAsyncMethodFinished), deleg);
        }
        public void OnAsyncMethodFinished(IAsyncResult ar)
        {
            MyDelegate deleg = (MyDelegate) ar.AsyncState;
            string result = deleg.EndInvoke(ar);
        }
    }

Добавлено @ 08:51
З.Ы. неужели, кроме делегатов, никаких принципиальных отличий .NET от JAVA нету ?


--------------------
user posted image
PM MAIL WWW   Вверх
Domestic Cat
Дата 10.4.2005, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Цитата(mr @ 9.4.2005, 23:49)
З.Ы. неужели, кроме делегатов, никаких принципиальных отличий .NET от JAVA нету ?


Есть конечно, но пока из делегатов выбраться не можем smile


Цитата(mr @ 9.4.2005, 23:49)
Вот пример:

Я пропустил там цитату
Цитата
4) Можно вызывать метод-подписчик с использованием позднего связывания (late-bound) - метод DynamicInvoke;

то есть вопрос был о DynamicInvoke, не об асинхронном вызове..
Но все равно спасибо.


--------------------

PM   Вверх
mr.DUDA
Дата 10.4.2005, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(Domestic @ 10.4.2005, 09:24)
вопрос был о DynamicInvoke, не об асинхронном вызове..

Здесь всё просто. Так как все делегаты наследуются от базового класса Delegate, можно хранить и передавать объекты Delegate вместо "конкретных" (типизированных) делегатов. Чтобы вызывать методы, подписанные на такой делегат, и используется DynamicInvoke. Другими словами, можно вызвать любой делегат с любым кол-вом и типом аргументов, используя одну и ту же функцию DynamicInvoke.

Термин "late binding" здесь означает позднее связывание (конкретные типы объектов неизвестны на этапе компиляции кода).


--------------------
user posted image
PM MAIL WWW   Вверх
Domestic Cat
Дата 10.4.2005, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Проще говоря, использовать рефлекшн для вызова метода? В Java рефлекшн есть, потому не проблема.


--------------------

PM   Вверх
mr.DUDA
Дата 10.4.2005, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Кстати, а в JAVA можно передать в метод переменное количество аргументов ? Без рефлекшн, конечно.


--------------------
user posted image
PM MAIL WWW   Вверх
Domestic Cat
Дата 10.4.2005, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Можно:
Код


class Hello
{
      public static void main(String... args)
      {
            for(String s : args)
                System.out.println(s);
      }
}




--------------------

PM   Вверх
alir
Дата 10.4.2005, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 19.3.2005

Репутация: 2
Всего: 4



Цитата
Приколист, .НЕТ ведь только под виндуза заточет, а в простой мобиле(не смартфоны!) даже операционной системы нет.

Я смотрю это ты приколист! .NET вначале проектировался как работающий на любой os, а не только под win. Пока еще есть под freeBSD - и это только начало. И что на счет os? .NET также построен на независимых средствах VM - так что встроить .net в мобилы в будущем тоже реально!

Цитата
оперативки чтоли?  Если постояной, то только через флешки наращивают.

Но ведь раньше и этого не было - примерно год назад (я имею ввиду Россию) вообще за 5 мб не переходило. А сейчас в 16 раз больше + еще карты!

Цитата
Упаси Бог! Хотя этого и так не будет...

Ты не бойся - как-нить разберутся.

p.s. Хотя еще раз повторюсь:
скорее всего скоро мобилы уйдут - они полностью перейдут смартофоны. Вот там то .net возьмет свое.
PM MAIL ICQ   Вверх
stab
Дата 12.4.2005, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



Цитата
1. Отсутствие соглашения об именовании делегатов и методов. Можно назвать как хочешь, причем даже осмысленное название часто трудно отличить от названия метода/класса/поля.


Соглашение есть:

Класс-делегат: XxxEventHandler
Событие: Xxx
Обработчик: ИмяОбъекта_Xxx

Удобно то, что вся работа с событием сгруппирована минимум в одном члене, в Java же требуется минимум 1 приватный член плюс 2 публичных.

Цитата
2. Делегаты скрывают в себе много автогенерированного кода, внутренний механизм их действия труднее понять.


Это называется инкапсуляция. Сомневаюсь, что Java-разработчики имеют исходный код всех классов с которыми работают, вроде на понимании это не сильно сказалось, правда? ;)

Цитата
3. Делегаты, помимо введения двух кейвордов, вводят лишнюю сущность в языке - ссылку на метод, которая более нигде не используется.


А где она (сущность) еще должна использоваться? Понятие "ссылки на метод" присутствует практически во всех современных языках, кроме Java, уж в C++ и Delphi точно есть.

Цитата
4. "Извне" трудно понять, что такое делегат - метод или класс. С одной стороны, это класс, объект которого можно создать через new, с другой стороны, вызывается он как метод.


Можно работать полностью как с объектом, если это требуется. Напоминает спор о свойствах, многие сишники говорят, что это тоже лишний элемент. Им не нравится то, что обращение к свойству не возможно отличить от обращения к полю. Им по душе использовать пару методов getXxx, setXxx, а в это время все языки обзавелись свойствами smile

Цитата
5. Делегат не может иметь больше одного метода. Часто же нужно несколько методов, сгруппированных по к-л признаку. Например, Java интерфейс MouseListener содержит 5 методов, тогда как в C# требуется 5 делегатов (и, следовательно, 5 классов).


Но в тоже время, на каждый обработчик в Java требуется отдельный класс. И еще, представим такую картину: нам нужно обработать только событие MouseDown, в C# назначем обработчик и все. В Java нужно реализовать все пять методов, т.к. требуется реализовать интерфейс, получаем четыри совершенно ненужных и пустых метода.

Цитата
6. Java листенеры более гибки, если я реализую такой листенер сам, у меня есть выбор - как хранить листенеры, в каком порядке вызывать методы, реализовать другие, вспомогательные методы.


Имеется возможность ручками обрабатывать добавление\удаление обработчиков:

Код

public event MyDelegate MyEvent
{
    add 
    {
        // добавляем как хотим и куда хотим
    }

    remove
    {
        // удалем как хотим и откуда хотим
    }
}


и ручками вызывать обработчики в каком угодно порядке:

Код

public delegate void SampleEventHandler();

public class ClassWithEvent
{
    public event SampleEventHandler SampleEvent;

    public void DoSampleEvent()
    {
        if (SampleEvent != null)
        {
            Delegate[] invocationList = SampleEvent.GetInvocationList();
            foreach (SampleEventHandler handler in invocationList)
            {
                handler();
            }
        }
    }
}



--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
batigoal
Дата 12.4.2005, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Цитата(cully @ 12.4.2005, 12:31)
Но в тоже время, на каждый обработчик в Java требуется отдельный класс

Отнюдь. Зачем же? Один объект может слушать неограниченное количество событий одинакового или разного типа.
Код

class Listener implements xxxListener, yyyListener{...}
...
Listener obj = new Listener();
a.addXXXListener(obj);
b.addYYYListener(obj);

Цитата(cully @ 12.4.2005, 12:31)
В Java нужно реализовать все пять методов

Я уже упоминал - для этого предназначены классы-адаптеры.

Давайте уже выйдем, наконец, за пределы обработки событий. Я не знаком с .NET, мне интересно, какие еще есть различия. smile


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
stab
Дата 12.4.2005, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



Цитата(Lamer @ 12.4.2005, 09:43)
Отнюдь. Зачем же? Один объект может слушать неограниченное количество событий одинакового или разного типа.


А ежели требуется разную функциональность по работе с каждым объектом реализовать? Это же очень распространеный сценарий, тогда видима if (sender == button1)? А если кнопок 30 штук (toolbar)?
Добавлено @ 12:57
Цитата(Lamer @ 12.4.2005, 09:43)
Давайте уже выйдем, наконец, за пределы обработки событий. Я не знаком с .NET, мне интересно, какие еще есть различия.


Кстати, а в Java есть шаблоны классов (Generics)?


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
batigoal
Дата 12.4.2005, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Цитата(cully @ 12.4.2005, 12:55)
Кстати, а в Java есть шаблоны классов (Generics)?

Теперь есть (в пятой версии). Правда, пока еще не использовал.

Цитата(cully @ 12.4.2005, 12:55)
А ежели требуется разную функциональность по работе с каждым объектом реализовать? Это же очень распространеный сценарий

Да, тогда нужна проверка условия. Но, как правило, все же используется подход с безымянными внутренними классами:
Код

list.addListSelectionListener(new ListSelectionListener()
{
    public void valueChanged(ListSelectionEvent e)
    {
         ... // действия по обработке
    }
});



--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
arilou
Дата 12.4.2005, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Вот в этом форуме написано, что еще есть в Java. На данном этапе, я думаю, пожно сделать промежуточный вывод в том, что касается бизнес приложений:

1) Там где нужна кроссплатформенность (т.е. клиенты должны работать под разными ОС), Java подходит лучше
2) Там, где среда обусловлена применением Windows, .NET - более оптимальный выбор, т.к. эта технология намного "ближе" к сервисам, предоставляемым ОС (например, Active Directory или COM+).

Вот и все, на мой взгляд smile

Это сообщение отредактировал(а) arilou - 12.4.2005, 13:26


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
batigoal
Дата 12.4.2005, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Цитата(arilou @ 12.4.2005, 13:25)
2) Там, где среда обусловлена применением Windows, .NET - более оптимальный выбор, т.к. эта технология намного "ближе" к сервисам, предоставляемым ОС (например, Active Directory или COM+).

Не мог бы ты в двух словах объяснить суть и выгоды того и другого? Термин Active Directory мне совсем не знаком... smile


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
arilou
Дата 12.4.2005, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(Lamer @ 12.4.2005, 13:31)
Не мог бы ты в двух словах объяснить суть и выгоды того и другого?

Конечно. COM+ - это развитие Distributed Transaction Coordinator из Windows NT (правда, ему уже уготована замена на Indigo в следующей версии Винды). Позволяет координировать и управлять транзакциями на уровне объектов, ведет глобальный каталог объектов (типа репозитория), поддерживает пулы, диспенсеры ресурсов, и т.д.
На примере, дает возможность откатывать не только транзакции в БД, например SQL Server, а также на уровне объектов. Похожее, по-моему, входит в состав Enterprise Java Beans.

Active Directory - централизованное хранилище разнородной информации в рамках сети предприятия. Это развитие доменов из Windows NT. Позволяет получать информацию, опубликованную там другими приложениями (например, о пользователях, о конфигурации Exchange, о SQL Server'e) и ей оперировать.

Я мог в чем-то ошибиться, т.к. вполотную с этими вещами не работал, только на уровне знакомства.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
batigoal
Дата 12.4.2005, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Идеи здравые и интересные. Аналоги в Java мне не знакомы, однако я уверен, что они есть - просто я еще с ним не сталкивался.
Вопрос к Доместику и остальным джавистам - есть ли подобные технологии в j2ee?


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
stab
Дата 12.4.2005, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



Честно говоря как-то странно смотреть на новинки JDK 5 (http://java.sun.com/j2se/1.5.0/docs/guide/language/index.html) и на разговоры на тему .NET vs Java.

Generics -- есть в .NET, сейчас в бета-тестировании.
Enhanced for Loop -- есть в .NET начиная с первой версии.
Autoboxing/Unboxing -- есть в .NET начиная с первой версии.
Typesafe Enums -- есть в .NET начиная с первой версии.
Varargs -- есть в .NET начиная с первой версии.
Static Import -- нет в .NET.
Annotations -- есть в .NET начиная с первой версии.

Из семи новинок только одна является действительно уникальной и довольно спорной. Причем, как я понял, Generics и Autoboxing/Unboxing реализованы на уровне компилятора, а не на уровне JVM, т.е. имеем что-то вроде старого доброго препроцессора. Java скорее догоняет .NET по языковым возможностям, а не задает направление движения.


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
batigoal
Дата 12.4.2005, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Цитата(cully @ 12.4.2005, 17:10)
Java скорее догоняет .NET по языковым возможностям, а не задает направление движения.

Скорее, Java стремится за Си++, который в .NET, разумеется, уже присутствует (в смысле влияния). Но ты же не будешь утверждать, что это Java родилась как ответ дотНету? smile
Эти новинки призваны лишь немного дополнить язык, а не кардинально переработать его. К сожалению, я не знаю .NET, поэтому не могу перечислить то, что отсутствует в нем, но имеется в Java.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
arilou
Дата 12.4.2005, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(Lamer @ 12.4.2005, 17:28)
Скорее, Java стремится за Си++,

Не-а, судя по всему, она стремится за C#, потому что именно он - флагманский язык .NET, и появление тех же дженериков (кстати, в C++ они называются "шаблонные классы, template classes", а название "generic" идет именно из C#) это доказывает.

Оказывается, что метаданные только-только появились в Java, значит тут был первым .NET? Вобщем, гонка вооружений какая-то smile


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
batigoal
Дата 12.4.2005, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



О будущем введении generics говорил еще Эккель в третьем издании, так что это было довольно давно. Впрочем, возможно это было уже после появления .NET.
Цитата(arilou @ 12.4.2005, 17:34)
она стремится за C#

Теперь уже, наверное в первую очередь за ним. Но все-таки обратная ситуация тоже имеет место. Получилось так, что разработчики Java посмотрели на С++ и взяли от него все лучшее + добавили своего. Потом разработчики дотНета посмотрели на Java, взяли все лучшее + добавили своего. Что дальше? smile
Цитата(arilou @ 12.4.2005, 17:34)
Вобщем, гонка вооружений какая-то

Мы-то от этого только выиграем. smile


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Ch0bits
Дата 12.4.2005, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: 9
Всего: 62



Цитата(alir @ 10.4.2005, 10:25)
.NET вначале проектировался как работающий на любой os

smile smile smile // Упал со стула // smile smile smile

Цитата(alir @ 10.4.2005, 10:25)
полностью перейдут смартофоны. Вот там то .net возьмет свое.

1. J2ME уже полностью обосновался на мобильных устройствах.
2. И как это НЕТ возьмёт своё? Не вижу ни одной причины сейчас и в ближайшее время.
3. Может ты не заметил, но КПК с Win работают под Intel XScale(x86). А какие проци у смартфонов?
PM WWW   Вверх
Domestic Cat
Дата 12.4.2005, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Цитата
Это называется инкапсуляция. Сомневаюсь, что Java-разработчики имеют исходный код всех классов с которыми работают, вроде на понимании это не сильно сказалось, правда? ;)


Инкапсуляция бывает хороша, а бывает и не хороша - особенно если онa реализованa на уровне языка.

Цитата
А где она (сущность) еще должна использоваться? Понятие "ссылки на метод" присутствует практически во всех современных языках, кроме Java, уж в C++ и Delphi точно есть.


А можешь ли тy использовaть ссылку на метод так, как в С++ например?

Цитата
Можно работать полностью как с объектом, если это требуется. Напоминает спор о свойствах, многие сишники говорят, что это тоже лишний элемент. Им не нравится то, что обращение к свойству не возможно отличить от обращения к полю. Им по душе использовать пару методов getXxx, setXxx, а в это время все языки обзавелись свойствами


Можнo кak с объектом, но возможость работy как с методом не уберешь.

Цитата
Но в тоже время, на каждый обработчик в Java требуется отдельный класс. И еще, представим такую картину: нам нужно обработать только событие MouseDown, в C# назначем обработчик и все.


Цитата
А ежели требуется разную функциональность по работе с каждым объектом реализовать? Это же очень распространеный сценарий, тогда видима if (sender == button1)? А если кнопок 30 штук (toolbar)?

Тогда я могу использовать например Command паттерн, который встроен в Java в видe Actionов.
Или анонимные классy есть. Или теm же свичем.

Цитата
есть ли подобные технологии в j2ee?

Есть.

Цитата
Java скорее догоняет .NET по языковым возможностям, а не задает направление движения.


Учти, что шарп поставили на плечи Java, когда егo создали. Многое в нем основано нa ней, вплоть дo странных совпадений, например есть Monitor.Enter() / Monitor.Exit(), тогдa как в Java нa уровне байткода есть команды monitorenter, monitorexit.
Некоторые перечисленные тобой фичи - не более чем фичи. Улучшенный for ? Ну превратится он все равно в код с эньюмератором. Автобоксинг? Простое удобство, все равно за кулисами ничего не изменилось.
Енумы и аннотации - это действительно хорошо, но разговор о них шел давно.

Цитата
Autoboxing/Unboxing реализованы на уровне компилятора, а не на уровне JVM

Большой разницы нет - что так, что эдак. Тот же автобоксинг есть создание объекта под примитив - ну так он в любом случае создается.




--------------------

PM   Вверх
Domestic Cat
Дата 12.4.2005, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Цитата
Эти новинки призваны лишь немного дополнить язык, а не кардинально переработать его. К сожалению, я не знаю .NET, поэтому не могу перечислить то, что отсутствует в нем, но имеется в Java.


1. На уровне языка - отсутствие необходимости декларировать throws и ловить иксепшны. С одной стороны, это облегчает жизнь, с другой - забудешь отловить иксепшн, и он вылезет в релизе.

2. В Java не нужно пользовать virtual/override/new; ИМХО это удобнее.

В целом же на уровне языка выходит 50 на 50 - по моим личным ощущениям.

3. FCL сыра. В простой программе, в которой я и не думал ничего особо крутого делать, я уже использовал винапи 2 раза + чужую библиотеку. Вот с чем я столкнулся: 1. Нет работы со звуком 2. Нельзя спрятать курсор в ричтекстбоксе 3. В меню нельзя вставлять рисунки - то есть, нужно все делать с нуля
4. В тулбар нельзя помещать свои компоненты - только особые тулбоксовские, причем выглядит это плохо.

Это конечно все будет исправлено, но на данный момент я уже привязан к винапи.

Есть ряд других моментов, например .НЕТ приложение завязывается на АДО провайдера (SqlConnection/OleDbConnection) тогда как Java позволяет переходить с одной дб на другую без проблем.

Буду дополнять smile


--------------------

PM   Вверх
arilou
Дата 12.4.2005, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(Domestic @ 12.4.2005, 18:03)
А можешь ли тy использовaть ссылку на метод так, как в С++ например?


Конечно можешь. Как именно использовать? Можно:
1) вызвать метод, на который она ссылается smile
2) передать куда-нить, для того, чтобы сделать п.1 smile
3) получить метаданные о методе, на который указывает ссылка
4) получить класс, объявляющий данный метод

Больше пока ничего не приходит в голову.

Цитата(Vadim999 @ 12.4.2005, 18:01)
// Упал со стула //

Легкий намек на флейм появился? smile Поясняю:

Технология .NET проектировалась как платформенно-независимая. Доказательством этому служит то, что присутствует JIT-компиляция, которая дает возможность скомпилировать код при запуске на конкретной платформе учитывая её особенности.
То, что MS не сделали других реализаций технологии, кроме как под Винду - всего лишь следствие их маркетинговой политики и не нам их за это судить.
За них это сделала команда Mono. Под Mono ты можешь запустить в Linux'е код, скомпилированный в IL под Виндой с помощью MS.NET и наоборот (есеесно, с некоторыми оговорками, о которых я писал в соотв. теме в форуме Java - Общие вопросы.



--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Domestic Cat
Дата 12.4.2005, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Цитата

Конечно можешь. Как именно использовать? Можно:
1) вызвать метод, на который она ссылается
2) передать куда-нить, для того, чтобы сделать п.1 
3) получить метаданные о методе, на который указывает ссылка
4) получить класс, объявляющий данный метод

Больше пока ничего не приходит в голову.



Эээ, нет smile Все это привязано к делегату, и более нигде не используется. Или приводи пример.




--------------------

PM   Вверх
arilou
Дата 12.4.2005, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(Domestic @ 12.4.2005, 18:16)
Есть ряд других моментов, например .НЕТ приложение завязывается на АДО провайдера (SqlConnection/OleDbConnection) тогда как Java позволяет переходить с одной дб на другую без проблем.

Если ты будешь использовать не конкретные классы из System.Data.OleDb или System.Data.SqlClient, а интерфейсы из System.Data (например, IDbCommand, IDataProvider, IConnection, ITransaction, etc), то тоже можешь благополучно сменять БД (конечно, при условии, что твой SQL SQL-92 compliant).


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
batigoal
Дата 12.4.2005, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Цитата(Domestic @ 12.4.2005, 18:16)
virtual/override/new
- это чего? Какие-то спецификаторы (абстрактный, перегруженный, новый)?
Цитата(Domestic @ 12.4.2005, 18:16)
На уровне языка - отсутствие необходимости декларировать throws и ловить иксепшны

Явное объявление исключений, бросаемых методом, считаю одним из лучших свойств языка Java. Имхо.
Цитата(Domestic @ 12.4.2005, 18:16)
Есть ряд других моментов, например .НЕТ приложение завязывается на АДО провайдера

Мда, это действительно нехорошо.




--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Domestic Cat
Дата 12.4.2005, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Цитата
Если ты будешь использовать не конкретные классы из System.Data.OleDb или System.Data.SqlClient, а интерфейсы из System.Data (например, IDbCommand, IDataProvider, IConnection, ITransaction, etc), то тоже можешь благополучно сменять БД (конечно, при условии, что твой SQL SQL-92 compliant).


Как это? - мне ведь эtи интерфейсы реализовать нужно, так ведь? Откуда в ниh функциональность возьмется?

К тому ж Студия слишом упростила работу с АДО, так что малo кто будет будet подобнoe делать.

Цитата
- это чего? Какие-то спецификаторы (абстрактный, перегруженный, новый)?


это как в с++, только new еще добавлен.


--------------------

PM   Вверх
mr.DUDA
Дата 12.4.2005, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(Domestic @ 12.4.2005, 18:16)
2. В Java не нужно пользовать virtual/override/new; ИМХО это удобнее.

Цитата(Lamer @ 12.4.2005, 18:21)
это чего? Какие-то спецификаторы (абстрактный, перегруженный, новый)?

Если кому-то что-то кажется необоснованным, то сначала надо ознакомиться с теорией (зачем это нужно и что это даёт), а уж затем говорить о "кривизне" подхода.
1) virtual - декларирует виртуальный метод;
2) override - перекрывает реализацию вирт.метода в производном классе. В С++ зачастую не было ясно, что откуда унаследовано и перекрыто, в то время как читая шарповский код - сразу понимаешь:что, как и почему;
3) new - позволяет ввести в класс невиртуальный метод с той же сигнатурой что и виртуальный в базовом классе. При этом, в классе остаётся и виртуальный метод, его тоже можно вызывать если привести тип к базовому. В С++ такой возможности не было. Если нужны примеры, для чего это может применяться - приведу.

Цитата(Lamer @ 12.4.2005, 18:21)
Явное объявление исключений, бросаемых методом, считаю одним из лучших свойств языка Java. Имхо.

Откуда я могу заранее узнать обо всех исключениях, которые может выкинуть метод?
С другой стороны, если НУЖНО знать, какие СПЕЦИФИЧНЫЕ исключения может выкинуть метод или свойство - всегда можно задокументировать их в XML-комментариях (там есть специальный тэг для этого).


--------------------
user posted image
PM MAIL WWW   Вверх
batigoal
Дата 12.4.2005, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Цитата(mr @ 12.4.2005, 18:38)
Откуда я могу заранее узнать обо всех исключениях, которые может выкинуть метод?

Они объявлены в описании тех методов, которые ты вызываешь в своем smile .
Цитата(mr @ 12.4.2005, 18:38)
1) virtual - декларирует виртуальный метод;
2) override - перекрывает реализацию вирт.метода в производном классе. В С++ зачастую не было ясно, что откуда унаследовано и перекрыто, в то время как читая шарповский код - сразу понимаешь:что, как и почему;
3) new - позволяет ввести в класс невиртуальный метод с той же сигнатурой что и виртуальный в базовом классе. При этом, в классе остаётся и виртуальный метод, его тоже можно вызывать если привести тип к базовому. В С++ такой возможности не было. Если нужны примеры, для чего это может применяться - приведу.

Разумно. Мне нравится. Приведи, пожалуйста, пример.

P.S. Если ты не указываешь override, но при этом осуществляешь переопределение, это вызовет оштбку компиляции?


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
arilou
Дата 12.4.2005, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(Domestic @ 12.4.2005, 18:20)
Или приводи пример.

Накропал небольшой пример. Если чего-то еще продемнострировать, скажите, допишу.

Код

using System;
using System.Collections;
using System.Reflection;

namespace Tests
{
    /// <summary>
    /// Делегат (тип). 
    /// string param1 - сигнатура метода
    /// </summary>
    public delegate void TestDelegateType(string param1);

    /// <summary>
    /// Данный атрибут можно связать только с методом
    /// </summary>
    [AttributeUsage(AttributeTargets.Method)]
    public class TestAttrAttribute : Attribute
    {
        private string _param1 = string.Empty;
        public string Param1 { get { return _param1; } }

        public TestAttrAttribute(string param1) : base()
        {
            _param1 = param1;
        }
    }

    public class TestClass
    {
        /// <summary>
        /// Поле типа TestDelegateType (факт. ссылка на метод)
        /// </summary>
        TestDelegateType delegateObject;

        public void Test()
        {
            // привязываем метод к полю
            delegateObject = new TestDelegateType(delegateMethod);

            // понеслось :)
            Console.WriteLine("Вызываем метод по ссылке");
            delegateObject("hello world!");
            Console.WriteLine("или через Reflection");
            delegateObject.DynamicInvoke(new object[]{"hello world from Reflection"});

            Console.WriteLine("Получаем метаданные, связанные с методом, на который указывает delegateObject");
            MethodInfo minfo = delegateObject.Method;

            // получаем все атрибуты
            object[] attrs = minfo.GetCustomAttributes(false);

            foreach(object attr in attrs)
                if(attr.GetType() == typeof(TestAttrAttribute))
                {
                    TestAttrAttribute tattr = attr as TestAttrAttribute;
                    Console.WriteLine("Нашли наш атрибут. Параметр param1 = " + tattr.Param1);
                }
                else
                    Console.WriteLine("Нашли какой-то атрибут. Тип - " + attr.GetType().FullName);
        }

        /// <summary>
        /// Метод, соотв. сигнатуре типа TestDelegateType
        /// </summary>
        /// <param name="param1"></param>
        [TestAttr("delegateMethod with attribute")]
        [MTAThread()]
        private void delegateMethod(string param1)
        {
            Console.WriteLine("delegateMethod: " + param1);
        }
    }

    class Program
    {
        static void Main()
        {
            TestClass obj = new TestClass();
            obj.Test();
            Console.ReadLine();
        }
    }
}


Цитата(Domestic @ 12.4.2005, 18:33)
Как это? - мне ведь эtи интерфейсы реализовать нужно, так ведь? Откуда в ниh функциональность возьмется?


Код

IDbConnection conn = new System.Data.SqlClient.SqlConnection() as IDbConnection;


Т.е. все провайдеры в ADO.NET реализуют один общий набор интерфейсов. В своем коде ты можешь работать с объектами типа интерфейса. Могу пояснить, как указать в рантайме, с каким провайдером работать, если нужно.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
arilou
Дата 12.4.2005, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Добавление про ссылки на методы: компилятор не даст прицепить метод к переменной-делегату, если сигнатура (кол-во и типы параметров) не совпадает


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Domestic Cat
Дата 12.4.2005, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Цитата
Если кому-то что-то кажется необоснованным, то сначала надо ознакомиться с теорией (зачем это нужно и что это даёт), а уж затем говорить о "кривизне" подхода.
1) virtual - декларирует виртуальный метод;
2) override - перекрывает реализацию вирт.метода в производном классе. В С++ зачастую не было ясно, что откуда унаследовано и перекрыто, в то время как читая шарповский код - сразу понимаешь:что, как и почему;
3) new - позволяет ввести в класс невиртуальный метод с той же сигнатурой что и виртуальный в базовом классе. При этом, в классе остаётся и виртуальный метод, его тоже можно вызывать если привести тип к базовому. В С++ такой возможности не было. Если нужны примеры, для чего это может применяться - приведу.


чтo -то разговор переходит в нехорошее русло.
Я прекрасно знаю для чего это нужно. В Java все (кроме статик) методы по умолчанию виртуальны, все методы сабклассов с такой же сигнатурой по умолчанию override, добиться невозможность перегрузки можнос помощью final.
Единственный аргмент, который я встречаю в пользу override/new/virtual - это versioning. Например, разработчик использует библиотеку, наследуя от класса А , и декларирует метод М . Если в следующей версии в библиотеку будет включен метод М, то в Java получится что разработчик делает override этого метода, хотя скорее всего он этого делать не хотел. Вроде бы тут и нужны new и проч.
Но у такого подхода есть свой недостаток: если ты не объявляешь метод виртуальным, его нельзя перегрузить. Если разработчик не объявил метод А виртуальным, а наследующему классу нужно сдеелать оверрайд метода - этого сделать уже никак нельзя.
Ситуация номер 2: Есть класс с методом virtual A. Есть наследник, с методом new virtual A. Если теперь кто-то наследует от этого класса и не заметит что он new, получим хороший баг.

Цитата
Накропал небольшой пример. Если чего-то еще продемнострировать, скажите, допишу.


Дык опять делегаты?

Цитата

Т.е. все провайдеры в ADO.NET реализуют один общий набор интерфейсов. В своем коде ты можешь работать с объектами типа интерфейса. Могу пояснить, как указать в рантайме, с каким провайдером работать, если нужно.


в твоем примере ты пользуешь System.Data.SqlClient.SqlConnection() - для МСДЕ пойдет, а что если мне нужен Oracle?


--------------------

PM   Вверх
mr.DUDA
Дата 12.4.2005, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(Lamer @ 12.4.2005, 18:43)
Разумно. Мне нравится. Приведи, пожалуйста, пример.

Пожалуйста. Вот задача.

Имеется абстрактный базовый класс Base (или интерфейс, как будет угодно). В нём есть виртуальный (или переопределяемый, не знаю как в JAVA это называется) метод Action().

Нужно унаследоваться от Base таким образом, чтобы класс Derived перекрывал метод Action() и "запечатывал" его (т.е. запрещал для дальнейшего перекрытия).

З.Ы. это называется member names hiding.
Добавлено @ 19:18
Цитата(Domestic @ 12.4.2005, 19:12)
Но у такого подхода есть свой недостаток: если ты не объявляешь метод виртуальным, его нельзя перегрузить. Если разработчик не объявил метод А виртуальным, а наследующему классу нужно сдеелать оверрайд метода - этого сделать уже никак нельзя.

Согласен.


Цитата
Если кому-то что-то кажется необоснованным, то сначала надо ознакомиться с теорией (зачем это нужно и что это даёт), а уж затем говорить о "кривизне" подхода.

Цитата(Domestic @ 12.4.2005, 19:12)
чтo -то разговор переходит в нехорошее русло.

Это я к тому, что ИМХО, с virtual/new удобнее smile, а на вкус и цвет - все фломастеры одинаковые.


--------------------
user posted image
PM MAIL WWW   Вверх
Domestic Cat
Дата 12.4.2005, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172




Цитата
Имеется абстрактный базовый класс Base (или интерфейс, как будет угодно). В нём есть виртуальный (или переопределяемый, не знаю как в JAVA это называется) метод Action().


Во-первых скажу так: это уж совсем "высший пилотаж", то есть я допускаю что такоe иногда нужно, но такжe допускаю и тo, что всегда можно обойтись без этого.
Пример:
Код

abstract class X
{
    public abstract void Y();
}

public class A extends X
{   
    public final void Y()
    {}
}

// Primer
public class B extends A
{   
    public void Y()
    {}
}

Результat
[quote]
A.java:16: Y() in B cannot override Y() in A; overridden method is final
public void Y()
^
1 error

Добавлено @ 19:22
Цитата
а на вкус и цвет - все фломастеры одинаковые.


smile smile smile


--------------------

PM   Вверх
arilou
Дата 12.4.2005, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(Domestic @ 12.4.2005, 19:12)
Дык опять делегаты?

Похоже, возникло непонимание по поводу делегатов и с чем их едят. Поясняю:

Делегаты решают проблему, которая в других языках решалась с помощью указателей на функции. В отличии от последних, делегаты типизированы. Это означает, что
Цитата(arilou @ 12.4.2005, 19:03)
компилятор не даст прицепить метод к переменной-делегату, если сигнатура (кол-во и типы параметров) не совпадает

(Сам себя цитирую smile дожился...)

Понятие делегата содержит в себе 2 вещи. По-моему, они именуются одним и тем же словом "делегат", по крайней мере, в моей речи. Из-за этого могут возникать непонятки. Поэтому существуют:

1) Делегат-тип. Описывает сигнатуру с помощью заразервированного слова delegate:
Код

public delegate void TestDelegateType(string param1, int param2);

Этот код объявляет тип TestDelegateType, который описывает ссылку на метод, не возвращающий значения (void), и требующий параметров string и int именно в таком порядке.

2) Переменную типа делегат. Описывает фактическую ссылку на метод.
Код

TestDelegateType delegateObject = null;

Т.о. переменная delegateObject будет испольоваться для того, чтобы "подцепить" к ней метод, и делать с ним всякие непотребные вещи, например, вызывать smile
Код

delegateObject = new TestDelegateType(delegateMethod);
// ........
void delegateMethod(string param1, int param2)
{
  // ......
}

Этот код записывает в delegateObject ссылку (читай, type-safe pointer) на метод delegateMethod. Обратите внимание, что типы параметров данного метода соответствуют типам параметров, указанных в определении TestDelegateType.

Таким образом, делегаты реализуют то, что в C++ называлось указателем на функцию, но не выносилось в отдельное понятие языка. В отличии от C++, делегаты являются type-safe языковыми конструкциями.

Одним из применений делегатов являются события.

Код

public event TestDelegateType TestDelegateEvent;


Если упростить, то это практически равнозначно определению TestDelegateEvent, как переменной типа TestDelegateType.

Надеюсь, что я развеял непонятки по поводу делегатов.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
mr.DUDA
Дата 12.4.2005, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Аналогично на шарпе:
Код
public abstract class X
    {
        public virtual void Do()
        {
        }
    }

    public class Y : X
    {
        public new void Do()
        {
        }
    }

    // Primer
    public class Z : Y
    {
        public override void Do()
        {
        }
    }


Два класса (X и Y) - вырожденный пример, на самом деле их бывает больше.

Практическая польза от new может быть извлечена не только в плане возможности "запечатать" полиморфный метод, но и в случае, если нужно ввести "новый" метод, который никак не связан с методом базового класса но имеет ту же сигнатуру.


--------------------
user posted image
PM MAIL WWW   Вверх
Domestic Cat
Дата 12.4.2005, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Видимо мы немного недопоняли друг друга.
Я указывал вот на что:
Код

delegateObject = new TestDelegateType(delegateMethod);



То есть, что такое delegateMethod? Ссылка на метод. Но можно ли ее использовать где -нибудь еще, например, как в Питоне написать
Код

a = delegateMethod;
b = delegateMethod;
a("q", 1);
b("c", 2);


Я понимаю- всe это отсутствует, вместo используется делегат, что по сути тo ж самое. Так чо ладно, забудем прo delegateMethod - в конце концов этo неважно.
Добавлено @ 19:57
Цитата
Практическая польза от new может быть извлечена не только в плане возможности "запечатать" полиморфный метод, но и в случае, если нужно ввести "новый" метод, который никак не связан с методом базового класса но имеет ту же сигнатуру.


Как говорится, палка о двух концах - я уже говорил что это для использующих такой меод нетривиальная вещь, можно легкo забыть (положить объект в контейнер с типом суперкласса например) и потом искать отчего непонятно что проишодит.
С другой стороны, посмотри на это с точкi зрения ООП: есть класс Машина, с методом Ехать.
Ктo-тo наследовал от нее класс БМВ и сделал метод Ехать new; так что теперь БМВ не едет а летит.
Получается теперь, что если смотреть на такоj объект как нa БМВ, тo он летит; нo как только оn рассматривается как Машинa, - он едет smile


--------------------

PM   Вверх
arilou
Дата 12.4.2005, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(Domestic @ 12.4.2005, 19:49)
Так чо ладно, забудем прo delegateMethod

ОК. Давай вернемся к ADO.NET.

Ты спрашивал, как использовать Oracle через ADO.NET. Я не знаю, есть ли managed реализация провайдера для Оракла, совместимая с .NET 1.1, но знаю, что в NET 2.0 она будет (System.Data.OracleClient).

Теперь об интерфейсах ADO.NET и их использовании. Допустим, тебе надо в своем приложении реализовать работу с MS Access и SQL Server. Естественно, ты захочешь работать с базами унифицированно. Для этого применяются вышеописанные интерфейсы.

В своей проге я указываю, какой провайдер мне нужен, в конфигурационном файле. У меня есть класс Configuration:
Код

// мой интерфейс доступа к данным
public interface IDataProvider
{
   IDbCommand GetCommand(string commandText, object[] paramList);
   IDbConnection GetConnection();
}

// реализация для SQL Server. Находится в отдельной сборке
public class SqlDataProvider : IDataProvider
{
   public IDbCommand GetCommand(string commandText, object[] paramList)
  {
        SqlCommand cmd = new SqlCommand();
        // создаем команду .....................
        return cmd as IDbCommand;
  }
   public IDbConnection GetConnection()
   {
        return new SqlConnection(Configuration.ConnectionString) as IDbConnection;
   }
}

public class Configuration
{
   public static readonly IDataProvider Provider = null;
   // ..............
   
   public static void ReadConfiguration()
   {
      // ............
      Provider = Activator.CreateInstance(providerType);
   }
}


Во всей программе используется Configuration.Provider для доступа к данным:
Код

IDbConnection conn = Configuration.Provider.GetConnection();
conn.Open();
// ...................
conn.Close();


Я думаю, что почти ничего нового в этом подходе ты не увидишь, кроме того, как сделать, чтобы не заморачиваться с разными ADO.NET провайдерами.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Domestic Cat
Дата 12.4.2005, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Согласен, но JDBC вообще изначально не зависит ни от какого провайдера. Все что ей нужно - драйвер, предоставляемый провайдером; если ты хочеш сменить базу данных, ты меняешь драйвер.
Точно так же Java работает с Naming and Directory Services, Authentification and Authorization Services и т п - предоставлят интерфейс, единый для всех. Поэому я могу написать Java приложение, для использования которого нужнa аутентификация, причем оно не поменяется, если я сменю Виндовс аутентификацию на Керберос.



--------------------

PM   Вверх
arilou
Дата 12.4.2005, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(Domestic @ 12.4.2005, 20:15)
Поэому я могу написать Java приложение, для использования которого нужнa аутентификация, причем оно не поменяется, если я сменю Виндовс аутентификацию на Керберос.

Ну с этим и в дотНете все в порядке smile
Цитата(Domestic @ 12.4.2005, 20:15)
Согласен, но JDBC вообще изначально не зависит ни от какого провайдера.

Вероятно, тут используется более высокий уровень абстракции. Но реализация ADO.NET дает возможность использовать навороты того же SQL Server'а, а не только то подмножество, которое общее для всех.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Domestic Cat
Дата 12.4.2005, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Цитата
Вероятно, тут используется более высокий уровень абстракции. Но реализация ADO.NET дает возможность использовать навороты того же SQL Server'а, а не только то подмножество, которое общее для всех.


Тоже верно, приложение можно оптимизировать под конкретную БД. Зато при переходе на другую БД возникнут проблемы. Для энтерпрайз приложений на разных ОС вещь не такая уж редкая.


--------------------

PM   Вверх
arilou
Дата 12.4.2005, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(Domestic @ 12.4.2005, 20:25)
Зато при переходе на другую БД возникнут проблемы.

Согласен. Но это уже лирика, правда?


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Domestic Cat
Дата 12.4.2005, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



По сути, да smile


--------------------

PM   Вверх
mr.DUDA
Дата 13.4.2005, 07:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Да, раз уж заговорили о базах данных, хочется спросить: а есть ли среди стандартных классов JAVA (в том же JDBC) что-то хоть отдалённо похожее на DataSet, DataTable, DataRow и DataRelation ? ИМХО, самые удобные средства для detached-работы с базой данных из всех существующих. Плюс, типизированные датасеты, которые генерируются на основании XML-схемы.


--------------------
user posted image
PM MAIL WWW   Вверх
Domestic Cat
Дата 13.4.2005, 07:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



JDBC построена на интерфейсе ResultSet и его сабинтерфейсах: CachedRowSet, FilteredRowSet, JdbcRowSet, JoinRowSet, RowSet, SyncResolver, WebRowSet. Реально модель довольно близка к ADO.NET; АДО в этом смысле более "наворочен", хотя JDBC может делать все то же, что и АДО, за исключением релейшншипов.
Кстати, здесь сравнивать сложно, т.к.языки идут своими путями. В Java широко используется Object-Relational Mapping, фреймворки типа Hibernate, JDO. Грубо говоря, можно набор объектов сохранять в БД, причем учитываются такие вещи как наследование (- вот и релейшншипы).
Enterprise Java Beans в некотором смысле ложат АДО.НЕТ одним левым мизинцем, поскольку там вообще программисту никакой БД логики писать не надо - один файл конфигурации, и то в простых случах он займет меньше, чем твой пост. Но EJB ограничены серьезными приложениями, конечно, для простых штук типа складского учета они никак не пойдут.


--------------------

PM   Вверх
mr.DUDA
Дата 13.4.2005, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(Domestic @ 13.4.2005, 07:30)
Кстати, здесь сравнивать сложно, т.к.языки идут своими путями. В Java широко используется Object-Relational Mapping, фреймворки типа Hibernate, JDO. Грубо говоря, можно набор объектов сохранять в БД, причем учитываются такие вещи как наследование (- вот и релейшншипы).

ORM - это, другими словами, persistence, так? Microsoft предложат свой вариант такого решения в новом продукте Microsoft Business Framework.

Датасеты - незаменимая вещь при работе с табличными данными, будь то информация полученная из БД, или сформированная в рантайме, полученная от веб-сервиса, зачитанная из XML-файла. Кстати, рульная весч: можно взять XML-файл, прочитать его в датасет, и работать с ним как с таблицей БД !!! Поработав, сохранить обратно в файл, поток, http-стрим и т.п.

А если к тому же не полениться и сформировать XML-схему, тогда можно сформировать типизированный датасет, который на порядок удобнее использовать, добавляется возможность проверки корректности структуры данных по заранее сформированным ограничениям (unique key, foreign key, constraint).

Кроме всего прочего, датасеты предоставляют богатые возможности по отслеживанию изменений в данных (версионность каждой записи в любой таблице), а используя DiffGram можно пересылать в БД только сделанные изменения, а не весь датасет.


--------------------
user posted image
PM MAIL WWW   Вверх
arilou
Дата 13.4.2005, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Взято отсюда. Кто хочет прокомментировать?

Цитата
Сравнение скорости выполнения кода, генерируемого компиляторами C#, Java, VC6, Intel C++, Delphi.
Из статьи "Кто сегодня самый шустрый?"
Владислав Чистяков

Вызов метода объекта (Mehod call)

  PIII 800 AMD 1400
в секундах
C# (.Net) 2.51 2.16
Java3 8.90 4.20
VC 61 13.89 0 / 5.78
Intel C++1 0.00 0 / 6.32
Delphi 17.58 6.50
VB 62 493.97 204.00



Intel C++ compiler в режиме максимальной оптимизации (/O3 /QaxK или /O3 /QaxM) интерпретировал пустые или содержащие мало кода функции как inline-функции. В результате этого метод Test и его вызовы были полностью соптимизированы, то есть выброшены из программы и заменены на конечный результат. Надо признать, что если в VC-варианте реализацию методов оставить в теле класса (даже без пометки их как inline) VC начинает делать то же самое (так как таким образом объявленные методы считаются inline по умолчанию). Но качество оптимизации у VC оказалось несколько лучше, и он смог больше кода привести к статическим расчетам. В VC есть также и отдельная опция (/Ob2), заставляющая интерпретировать все (по выбору компилятора) вызовы как inline. Ее установка тоже приводит к тому, что этот тест полностью оптимизируется в статическое вычисление. Однако для чистоты эксперимента мы приводим время, которое требуется для вызова метода. На практике есть смысл включать эту опцию, поскольку объем кода при этом увеличивается не так радикально, а производительность может вырасти значительно.
VB 6 не может создавать классов в полном понимании ООП. Вместо этого он создает COM-объекты. Вызов метода COM-объекта медленней, чем fastcall, применяемый в других языках, но даже это не может оправдать таких "зверских" накладных расходов. VB-программистам можно посоветовать побыстрее перейти на VB.Net, а пока этого не произошло, избегать частых вызовов функций (особенно из отдельных классов) и реализовывать критичные к скорости алгоритмы на C++ (запаковывая их в методы COM-объектов и DLL-библиотек).
Для оптимизации теста в Java к классу был применен модификатор final. По умолчанию все методы в Java являются виртуальными. Причем, в отличие от C++ и C#, Java от Sun не пытается вычислить, что метод можно вызывать без виртуальной таблицы. Это приводит к замедлению работы. Методы, помеченные как final, становятся не виртуальными. Мне кажется, идеология C++ (принятая в C# и Delphi) более практична, но это сугубо личное мнение. К сожалению (несмотря на вкусы), final приводит к некоторым нежелательным последствиям. Так, метод, помеченный этим модификатором, не может быть "перебит" в классе-наследнике, а если помечен класс, то от него вообще нельзя порождать потомков. Конечно, можно забыть про final, но как показывают наши испытания, если закомментировать final в описании класса CTest1, скорость вызова метода падает с 4.13 до 14.47, т.е. почти в три раза. Что же поделаешь - расплата за универсальность. Надо заметить, что остальные языки этого обзора по умолчанию создают обычные (не виртуальные) методы. Чтобы сделать метод виртуальным, необходимо пометить его специальным ключевым словом (обычно virtual). Исключением является VB 6. Он вообще не поддерживает наследования, и, как следствие, виртуальных методов. Однако, по иронии судьбы, так как классы VB 6 являются COM-объектами, вызовы все равно делаются через виртуальную таблицу (необходимую для реализации COM-интерфейса).
Вызов виртуального метода объекта (virtual mehod call)

  PIII 800 AMD 1400
в секундах
VC 61 15.10 5.8 / 6.49
Intel C++ 15.08 6.50
Delphi 21.35 7.01
C# (.Net) 15.66 7.22
Java3 29.15 14.48
VB 62  204.00



Первый результат VC - это результат, полученный при установленной опции, позволяющей компилятору автоматически делать inline-подстановки функций.
У VB 6 нет понятия наследования, а значит, нет и виртуальных методов. Однако, как уже говорилось, все методы объектов в VB являются методами COM-интерфейса, а значит пользуются техникой виртуальных таблиц. Т.е. любой метод в VB является виртуальным. Однако, повторюсь, таких тормозов это не объясняет.
Лидер нашего первого теста оказался в аутсайдерах в этом тесте. Но не это больше всего огорчает, а огорчает тот факт, что в Java все методы по умолчанию являются виртуальными. На практике это может привести к тому, что Java-приложение окажется медленнее, чем приложения на других языках, и виной тому будет не слабость JIT-компилятора, а просто невнимательность или незнание программиста. Мне кажется не очень правильным перекладывать вопросы производительности на программиста. Ему ведь и так достанется. Но многие Ява-программисты считают по-другому. Так, что вам решать хорошо это или плохо. smile
Доступ к членам класса

  PIII 800 AMD 1400
в секундах
C# (.Net) 3.99 3.54
Java 7.55 4.85
VC 61 8.84 1.44 / 5.06
Intel C++ 8.80 5.04
Delphi 8.79 4.34
VB 6 118.69 76.53



Первая цифра в тесте VC была получена с включенной опцией "inline-подстановки (раскрытия) функций в любом подходящем случае".
Quick Sort (быстрая сортировка)

  PIII 800 AMD 1400
в секундах
C# (.Net)2 16.73 9.50 / 9.17
Java 24.49 12.50
VC 61 16.61 8.58/ 8.70
Intel C++ 17.63 9.20
Delphi3 16.77 13.59 / 9.60
VB 6 27.01 14.07



Первый результат VC - это результат, полученный при установленной опции позволяющей компилятору автоматически делать inline-подстановки функций.
Тест C# был сделан в двух видах - нормальном и "unsafe". Как вы наверно уже догадались, первая цифра - это время в нормальном, а вторая в unsafe-режиме. В нормальном режиме компилятор C# вставляет проверки выхода за границы массива. Отключить такие проверки невозможно, но C# поддерживает unsafe-режим. В этом режиме C# превращается в старый добрый C, позволяя пользоваться указателями. Причем C# имеет конструкцию fixed позволяющую превратить в указатель любой тип C#. При этом в следующем выражении (в одном или в блоке) можно безопасно пользоваться указателем. Вам гарантируется, что сборщик мусора не переместит или освободит память, занятую объектом. После выхода из области действия конструкции fixed указатель становится не действительным, а памятью снова начинает управлять сборщик мусора. Именно этим мы и воспользовались чтобы выяснить на, что способен C#, если программист не боится сложностей и готов на все.
В Delphi runtime-проверки выхода за пределы массива и переполнения можно включать или отключать в свойствах проекта. Первое число в таблице - результат с отключенными runtime-проверками, а вторая - с включенными. Если же проверки включить, Delphi начинает делить последнее место с VB 6, проигрывая всем остальным участникам, выполняя этот тест за 13.59 на AMD1400. Хочется сделать еще одно замечание. Мы наступили на забавные, но потенциально очень неприятные грабли. Дело в том, что все современные языки умеют передавать параметры методов как по значению, так и по ссылке. В Delphi для этого используется ключевое слово var. Его необходимо указывать перед параметрами. Все это понятно, но Delphi оказалась единственным компилятором требующим указания модификатора передачи параметра по ссылке для массивов. Оказалось, что Delphi с упорством, достойным лучшего применения, запихивает массив в стек. Думаю, не надо разъяснять, как такая "забота о программисте" отражается на производительности. Но производительность страдает при относительно небольших размерах массивов, в нашем же случае один из массивов имел размер немногим менее ста мегабайт... Получив сообщение об ошибке, мы попробовали трассировать программу под отладчиком, но не тут то было. Пару раз Delphi попросту зависло, еще пару выдало загадочное сообщение. Да и сама ситуация сбивала с толку. Ну, да ладно... Через пару минут тупого разглядывания кода мы поняли, в чем проблема, и устранили ее. Мы понимаем, что сами виноваты, но надо было слышать те слова, которыми мы вспоминали в эти минуты Borland и все компьютеры вместе взятые.
Пузырьковая сортировка

  PIII 800 AMD 1400
в секундах
C# (.Net)2 8.16 6.20 / 5.29
Java 20.63 10.37
VC 63 7.20 5.02
Intel C++3 7.23 4.85
Delphi1 9.53 12.31 / 5.33
VB 61 14.48 21.76 / 8.46



Цифра, приведенная перед результатами тестов Delphi и VB 6 - это время выполнения этого теста с включенной проверкой выхода за границы массивов. Она приведена не для того, чтобы как-то унизить эти средства разработки, а чтобы вы могли оценить качество реализации алгоритма проверки выхода за границы массива в Java и C# (в остальных языках такие проверки не реализованы). Заметьте, время Java, языка, который мы считаем интерпретируемым, оказалось вдвое меньшим, чем у VB 6, и на 20% меньшим, чем у Delphi, которая без этих проверок показала результат близкий к лучшему. C# вообще был вне конкуренции в этой области. 6.2 - это результат, достойный компилятора, не выполняющих никаких runtime-проверок. Но, похоже, это результат не предел. Господа из Microsoft уже поговаривали о верификации кода. Правда, эти разговоры были связаны с безопасностью, но кто мешает вместо выполнения runtime-проверок заняться интеллектуальной деятельностью? Конечно, из-за того, что не вся информация доступна во время компиляции, нельзя заменить все runtime-проверки на статический анализ, но можно же вынести проверки из тел циклов и рекурсивных функций.
Как и в прошлом тесте, в этом приводятся результаты работы теста C# в обычном и "unsafe" режиме. Выигрыш составил примерно 10%. Оптимист скажет: есть поле для маневра и ручной оптимизации. Пессимист: можно было бы и пограмотней проверки вставлять. smile Но как бы то ни было, C# занял первое место в подпольном тесте на лучшую организацию runtime-проверок. Однако в варианте с runtime-проверками C# проиграл лидеру почти 30%. Так что Microsoft есть над чем работать. Ведь тест в unsafe-режиме показал, что разрыв (в 10%) есть и без runtime-проверок.
Разрыв между VC и Intel C++ был настолько мал, что на разных платформах они заняли разные места. Делая скидку на неточность вычислений можно даже сказать, что они поделили первое место.
Подсчет p (целочисленные вычисления)

  PIII 800 AMD 1400
в секундах
C# (.Net) 10.35 6.90
Java 10.99 7.56
VC 6 10.76 7.17
Intel C++ 10.08 6.84
Delphi 10.34 6.80
VB 6 20.49 8.74


Tree sort

  PIII 800 AMD 1400
в секундах
C# (.Net)5 33.66 23.60
Java4 22.91 16.20
VC 61 14.75 11.85
Intel C++1 14.67 12.31
Delphi2 13.96 11.40
VB 63   



При повторном тесте время составило около 35 секунд (что на VC 6, что на Intel C++) - это при тестировании на AMD, на PIII 800 повторный тест занял 39.34 секунды. При этом компиляция производилась с многопоточной версией MFC, а стало быть, и с блокировками при выделении и освобождении памяти. После перекомпиляции проекта с однопоточной версией MFC повторное выполнение не приводило к заметному снижению быстродействия. Замедление при повторных тестах вызвано неоптимальной работой стандартных (Win 32 API) функций работы с хипом (HeapAlloce/HeapFree) в W2k. По большому счету, ни VC, ни Intel C++ к этому отношения не имеют. Но тестовое приложение писалось с использованием библиотеки MFC, которая в release-версии пользуется функциями HeapAlloce/HeapFree. Мы попытались создать отдельный хип, заменив методы new и delete. Но это ничего не дало. Единственное, что повлияло - это пересоздание (уничтожение и последующее создание) хипа перед каждым тестом. При этом время выполнение теста было одинаковым. К сожалению, в реальных приложениях такие фокусы проходят с трудом. Но если скорость выделения памяти (а именно она в основном влияет на скорость создания объектов в нашем тесте) критична для вашего приложения, и в вашем приложении используется многопоточная библиотека, можно обратиться к библиотекам сторонних разработчиков. Например, к библиотеке выпускаемой компанией MicroQuill (www.microquill.com). Судя по рекламе, они не только используют более быстрые алгоритмы, но и приводят к хорошему масштабированию на мультипроцессорных системах. Можно также попытаться создать свою реализацию (вот только не факт, что она окажется более качественной, чем аналог от Microsoft), попытаться найти бесплатную реализацию или плюнуть, ведь подобного экстрима не так-то просто добиться в реальной жизни. Надо отметить, что производительность тестов C++ может резко подняться, если Microsoft перепишет функции управления хипом в будущих версиях Windows. Проводя эксперименты, мы выявили некоторую информацию, которая может показаться вам интересной. Реальное время создания дерева заняло 10 секунд (в тесте на PIII 800). Т.е. 4 секунды производится освобождение занятой памяти. Освобождение заняло почти половину (!) времени теста, и это при нефрагментированной памяти. При втором проходе результаты были вообще плачевны. Мы не будем их приводить, так как не уделили этой проблеме должного внимания.
Delphi стала победителем и этого теста. Но это не главное, в конце концов она не намного опередила своих соперников. Главное, что время теста Delphi почти не увеличилось (!) при повторном проходе! Это говорит, что функции работы с хипом в Delphi действительно хороши. И это без дополнительных библиотек и хитростей. Мы провели препарирование победителя и выявили, что в Delphi полностью переписана работа с хипом. Для больших кусков памяти используется прямая работа с VirtualAlloc (и т.п.), а для небольших блоков памяти создана хитрая структура, группирующая блоки одинакового размера и хранящая их в отдельных буферах. Чтобы серьезно разобраться в том, как в Delphi сделаны функции работы с хипом, потребовалось бы слишком много времени, да и задача эта в наши планы не входила. Тем же, кто хочет знать больше, мы советуем обратиться к исходникам, прилагающимся к Delphi, благо их никто не скрывает. Правда, они (как и большая, системная часть кода VCL) не документированы, так что придется ползти на животе.
VB 6, как известно, об объектной ориентации вообще слышал мало. Он не поддерживает наследования, а стало быть, наш тест в полной мере выполнить не может. Не будем домысливать, но шансы на серьезные позиции в этом тесте у него не велики.
Java отказалась работать с настройками по умолчанию еще при попытке загрузки 100 МБ массива, выдав сообщение о нехватке памяти (и это, как вы помните, при 384 МБ RAM на одной машине, и 512 - на другой). Чтобы заставить ее поверить, что на машине есть еще оперативная память, нам пришлось применить не шибко стандартную опцию -Xmx256m, тем самым объясняя Java, что на машине есть минимум 256 MB RAM, которые она может использовать. Но для данного теста и этого параметра оказалось недостаточно, и пришлось уверить Java в том, что на машине есть 400 МБ (с помощью опции -Xmx400m), после чего она-таки уверовала, что памяти достаточно и смогла выполнить тест. Остальные подопытные не сомневались в количестве оперативной памяти, но расходовали ее более экономно. Наличие такой опции само по себе не проблема, но то, что ее значение по умолчанию не завис от объема оперативной памяти - это плохо.
В новые языки/платформы типа C# и Java встроены модные ныне "сборщики мусора". Это программные сущности, призванные радикально ускорить выделение и освобождение небольших кусков памяти (так присущих ООЯ). Нам говорят примерно следующее: GC (сокращение от Garbage Collector) вообще не занимается лишним освобождением памяти. Вернее, он пытается отложить этот неприятный (для него) момент на как можно более поздний срок. Т.е. пока есть свободная память, ее будут занимать, занимать и занимать, а когда память иссякнет, или когда процессор будет менее загружен, начнется процесс сборки мусора. При этом процессе выявляются и освобождаются неиспользуемые области памяти. Используемые области памяти при этом могут передвигаться, наподобие того, как это происходило в Windows 3x. Красота, да и только! Но, что характерно, чем громче реклама, тем менее стоящая идея (или реализация) за ней скрывается. Увы, в случае с GC это правило работает стопроцентно. Ни C#, ни Java не показали достойного результата. Java была лучше в абсолютном первенстве на чемпионате для калек, показав относительно неплохой результат в 16.2 секунд, но при повторном тесте ее производительность могла изменяться в пределах от одной до пятидесяти (50!) секунд. C# показал хотя и стабильный, но самый низкий результат. Правда, C# (а вместе с ним и вся платформа .Net) пока еще находится в beta-версии, и к release-версии все может измениться. Но пока C# - явный аутсайдер. Хочется предостеречь читателей от попытки делать далеко идущие выводи о GC как таковом и их реализациях в Java/.Net. Данный тест далек от реальных условий и не учитывает некоторых тонкостей (типа различных стратегий GС в Java).
String-тест

  PIII 800 AMD 1400
в секундах
C# (.Net) 7.18 3.38
Java 7.55 3.48
VC 6 15.40 6.08
Intel C++ 14.40 3.39
Delphi 22.28 10.97
VB 6 22.30 10.20


Float-Тест

  PIII 800 AMD 1400
в секундах
C# (.Net) 39.28 12.24
Java 39.05 12.98
VC 6 39.08 12.26
Intel C++ 0.50 0.29
Delphi 39.35 12.24
VB 6 46.54 15.13


Выводы.
...Можно с уверенностью сказать, что C#/VC.Net и Java - это языки/среды, на которых можно создавать высокопроизводительные приложения. Особенно это касается C#. Интересно, что p-код (из которого состоят выполняемые файлы) обоих сред не только не является недостатком, но и наоборот является преимуществом. Дело в том, что оптимизация производится в момент компиляции, причем под конкретный процессор. Это значит, что все среды, создающие машинный код, могут производить оптимизацию только под один известный им процессор (В VC использовалась оптимизация под Pentium Pro, в Intel C++ под PIII, Delphi не сообщила о своих планах по этому поводу). P-код ориентированные платформы (VC.Net и Java) производят компиляцию в машинный код перед запуском или во время исполнения программы (.Net-приложения могут быть прекомпилированы в момент инсталяции или вручную с помощью утилиты ngen (что, собственно, мы и делали). Но не следует забывать, что в .Net p-код никогда не выполняется в режиме интерпретации, т.е. даже без применения ngen будет производится компиляция, но при каждом запуске исполняемого модуля.). Естественно, в этот момент уже известен процессор и другие характеристики системы, на которой должен будет выполняться компилируемый код. Теоретически это должно давать p-код ориентированным платформам фору, за счет использования более производительных инструкций. Но как показывают наши тесты, пока это только теория. По всей видимости дело в том, что большинство кода попросту не использует новые высоко производительные команды процессоров, а во вторых они пока не избавились от "детских болезней" присущих всем новым продуктам. Однако потенциал велик. C# отчетливо доказал, что язык нового поколения способен создавать код не только сравнимый по скорости с лучшими образцами старого мира, но и превосходящий их! А так как Microsoft и Sun готовы вкладывать поистине невообразимые деньги в развитие своих детищ, то у этих языков/платформ большое будущее. Так что, похоже, появившиеся в СМИ заявления о том, что Microsoft планирует заморозить развитие Win32 API, языка C++ и COM, и перевести всё и вся на новую технологию .Net, являются правдой. Но как показало наше тестирование, для нас с вами это не представляет угрозы.



--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
batigoal
Дата 13.4.2005, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Цитата(arilou @ 13.4.2005, 15:46)
В результате этого метод Test и его вызовы были полностью соптимизированы,

Уже частный случай.
Остальное вроде прилично, но как-то перестал верить я этим тестам. Кто платит, тот заказывает музыку...
Интересно также было бы узнать, во-первых, какие версии были протестированы, а главное - на какой платформе?


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
arilou
Дата 13.4.2005, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(mr @ 13.4.2005, 11:08)
Датасеты - незаменимая вещь при работе с табличными данными,

Это спорное утверждение smile

С точки зрения сложного бизнес-приложения, программисту намного удобнее оперировать понятиями предметной области, нежели записями из таблицы (например, объектами Клиент, вместо отдельных записей из таблицы Клиенты). Как известно, существует 2 основных подхода к работе с реляционными данными в приложении.

1) Table Mapping. Его суть заключается в том, что для каждой таблицы в БД, в программе используется один класс. Данный подход всегда пропагандировался MS начиная с DAO. Были resultsets, recordsets. Теперь - datasets, причем последние реализуют disconnected-модель работы с БД.

2) Domain Model. Смысл в том, что для каждого типа записи в таблицах БД создается отдельный класс, т.е. программа оперирует объектами этого типа как отдельными сущностями, т.е. понятиями своей предметной области. Реализация данного подхода называется O/R mapping. Для .NET уже существуют ORM-проекты. Даже я свой написал smile

Оба подхода имеют преимущества и недостатки. Table Mapping хорошо вписывается там, где не много таблиц, и операции над реляционными данными сводятся к CRUD. В .NET типизированные датасеты позволяют реализовать проверку соответствия типов на этапе компиляции (что есть хорошо). К сожалению, типизированные датасеты не очень хорошо подходят на роль базовых классов для бизнес-сущностей, потому что содержать очень много автосгенерированного кода, усложняющего понимание.

Domain Model хорошо подходит, когда необходимо программировать бизнес-процессы, которые оперируют несколькими сущностями. Например, проводка финансовой транзакции, как минимум, затронет такие сущности, как Счет, Клиент, Приход, Расход и т.д. В данном сценарии программисту намного проще реализовать бизнес-операцию, если он будет брать из репозитория экземпляры нужных ему сущностей, модифицировать их, и commit'ить изменения в хранилище. Хорошие ORM пакеты выполнят всё, что связано с БД, сами (откроют-закроют транзакцию, обеспечат блокировку и т.д.).

К сожалению, пока .NET не содержит встроенных средств для поддержки ORM. Говорят, будет Object Spaces. Сейчас уже есть сторонние разработки - DeKlarit, OpenAccess.NET, NHibernate, и т.д.



--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
batigoal
Дата 13.4.2005, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Цитата(arilou @ 13.4.2005, 16:04)
NHibernate

Даже не буду спрашивать, откуда появилось smile

Вообще, я слышал больше негативных отзывов о подобных механизмах отображения, чем позитивных. В большинстве случаев, если база спроектирована грамотно и адаптирована под твою задачу (при непосредственном участии твоих коллег или твоем лично), вполне можно обойтись JDBC и прочими стандартизирующими надстройками. Но я согласен, что в серьезных приложениях такой подход должен быть удобнее.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
arilou
Дата 13.4.2005, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(Lamer @ 13.4.2005, 16:26)
Вообще, я слышал больше негативных отзывов о подобных механизмах отображения, чем позитивных

А какие именно приводились "негативные" отзывы?


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
batigoal
Дата 13.4.2005, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Тяжело отслеживать производительность и находить ошибки, сложность настройки и т.д. Многи сходятся во мнении, что пока объектно-ориентрованные БД не заменят реляционные, популярность и эффективность подобных систем будет невысока.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Domestic Cat
Дата 13.4.2005, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172




Цитата
Взято отсюда. Кто хочет прокомментировать?


По-моему, это 2002 год, то есть, Java 1.5 еще не было smile Потом непонятно, что сравнивали, скажем, банальная вещь : был ли включн флаг -server при запуске jvm? Вообще же результаты говоря сами за себя: пиште на том, что нравится smile




--------------------

PM   Вверх
mr.DUDA
Дата 14.4.2005, 07:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(arilou @ 13.4.2005, 16:04)
Цитата
Датасеты - незаменимая вещь при работе с табличными данными


Это спорное утверждение

С точки зрения сложного бизнес-приложения, программисту намного удобнее оперировать понятиями предметной области, нежели записями из таблицы (например, объектами Клиент, вместо отдельных записей из таблицы Клиенты). Как известно, существует 2 основных подхода к работе с реляционными данными в приложении.


Я подчеркнул бы слова "табличные данные". Ведь речь не идёт об объектах, а именно о упорядоченном наборе данных, организованном в виде структуры определённого вида, со средствами для доступа, управления и анализа данных. Датасет - это более низкий уровень, чем объект, маппированный, на БД. Но в то же время, с датасетом легко работать и точно знаешь, что происходит в любой момент времени, в то время как при ORM-подходе приходится терпеть "накладные расходы" на содержание объектов в транзакциях, на создание и отслеживание связей между объектами, поддержку маппирования (съедающую иногда больше процессорного времени, чем выполнение запроса к БД)...

Я считаю, что датасеты .NET (aka ADO) - полезная вещь, и при умелом обращении могут заменить маппированные на БД объекты.


--------------------
user posted image
PM MAIL WWW   Вверх
Domestic Cat
Дата 14.4.2005, 08:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Цитата(mr @ 13.4.2005, 22:49)
на содержание объектов в транзакциях

Это совсем необязательно в ОРМ.


Цитата(mr @ 13.4.2005, 22:49)
на создание и отслеживание связей между объектами

Ну это тоже необязательно, кто мешает хранить "простые" объекты.


Цитата(mr @ 13.4.2005, 22:49)
и при умелом обращении могут заменить маппированные на БД объекты.

Вещь то полезная, но скорее ОРМ потеснит обычную работу с БД, чем наоборот. С ними проще работать.


--------------------

PM   Вверх
alir
Дата 25.4.2005, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 19.3.2005

Репутация: 2
Всего: 4



Народ, расскажите как в .net организована переносимость. Т.е., например, в java после компиляции получаем байт-код, исполняемый после JMV (все знают), но в .net получаютя *.exe под win'ду, которые естесвенно не переносятся. Так какая же должна получаться сущность, которая могла бы переносится и исполнятся на CLR? Как организовано это в FreeBSD? Что дает Mono?

Знающие люди, просветите плз по этой проблеме.
PM MAIL ICQ   Вверх
Ch0bits
Дата 25.4.2005, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: 9
Всего: 62



.NET only for Windows!

PS: В mono даже Windows.Forms не реализовано, не говоря уж об остальном. Не вижу смысла в таком переносе.

PS/2: ИМХО Мелкософт никогда не сделает .NET кроссплатформенным.

Это сообщение отредактировал(а) Vadim999 - 25.4.2005, 21:25
PM WWW   Вверх
Gazon
Дата 25.4.2005, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 9.1.2005

Репутация: 3
Всего: 8



Цитата
Мелкософт никогда не сделает .NET кроссплатформенным

Мелкософт да, но другие компании сделают. И уже очень много сделано.
Цитата
Т.е., например, в java после компиляции получаем байт-код, исполняемый после JMV (все знают), но в .net получаютя *.exe под win'ду, которые естесвенно не переносятся.

В .NET получается IL код, который исполняется под CLR, которая и написана под винду.
Но проекты Mono и GNU как раз сделали CLR под *.nix.

Цитата
В mono даже Windows.Forms не реализовано, не говоря уж об остальном

Как раз все остальное там реализовано достаточно в полном объеме. И WinForms там реализован, и в GNU он тоже реализован, правда пока не очень хорошо, но это только альфа версии, поэтому есть основания полагать, что все будет улучшено.

http://www.gnu.org/projects/dotgnu/screenshots.html
http://www.mono-project.com/WinForms

--------------------
Чем больше узнаешь, тем больше не знаешь, но до истины всегда можно добраться.
PM MAIL   Вверх
Ch0bits
  Дата 25.4.2005, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: 9
Всего: 62



Gazon
Ух! Мать его за ногу... так он ~40mb уже весит!
Нет. Качать не буду.
Он будет что-то значить если его в какой-нибудь дистрибутив включат, а я пока подожду...

Это сообщение отредактировал(а) Vadim999 - 25.4.2005, 22:31
PM WWW   Вверх
AntonSaburov
Дата 26.4.2005, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 6
Всего: 118



Не будет нормального NET под другие платформы. Никогда. Майкрософт в этом совсем не заинтересована. А бежать за MS пытаясь реализовать все прибамбасы не получиться. Mono уже какой год пишут - а даже графики нет. А без графики кому это надо. Берем ту же JAVA и спокойно работаем - там гораздо более надежная система.
PM MAIL WWW ICQ   Вверх
Ch0bits
Дата 26.4.2005, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: 9
Всего: 62



Во-во! Фигня это всё! Мало ли что у них за скриншоты на сайте показаны.
.NET only for Windows!
PM WWW   Вверх
Kurt
Дата 26.4.2005, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: 20
Всего: 36



Vadim999
Твои посты в данном топике, да и еще в некторых в разделе не несут никакой смысловой нагрузки. Делаю тебе официальное устное замечание.
Не стоит кричать "Фу! Фигня! Microsoft сакс" и т.п. Постарайся лучше более глубоко изучить .NET-технологию или просто не пиши на ней вовсе! smile

Цитата(Vadim999)
.NET only for Windows!

Спорно. Очень спорно. Все-таки, mono существует. Какой-никакой, но это попытка переноса .NET под Linux, и сейчас рановато говорить об успешности или провале данного проекта.
Тем более, насколько я знаю, mono поддерживает ASP.NET . Следовательно, serverside-приложения уже можно пробовать. А учитывая, что Linux в основном используется как СЕРВЕРНАЯ платформа - это очень и очень неплохое достижение. А там видно будет. Можь, Microsoft втихаря пишет VM под *.nix.



--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
alir
Дата 26.4.2005, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 19.3.2005

Репутация: 2
Всего: 4



Цитата
там гораздо более надежная система

Почему же надежная? Уж этот вопрос в сравнении java c .net здесь не уместен.

Цитата
Можь, Microsoft втихаря пишет VM под *.nix.

Ну не знаю ms или не ms, но уже такой с 2000 года существует - только сегодня на занятиях в универе по ТП запускал из win'ды mandrake через VM - все нормально пашет, как и в всем известном обратном варианте (только сорри - забыл название это vm, кому интересно - могу позже сообщить). smile
PM MAIL ICQ   Вверх
Domestic Cat
Дата 27.4.2005, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Цитата(Kurt @ 26.4.2005, 08:29)
Спорно. Очень спорно. Все-таки, mono существует. Какой-никакой, но это попытка переноса .NET под Linux, и сейчас рановато говорить об успешности или провале данного проекта.
Тем более, насколько я знаю, mono поддерживает ASP.NET . Следовательно, serverside-приложения уже можно пробовать. А учитывая, что Linux в основном используется как СЕРВЕРНАЯ платформа - это очень и очень неплохое достижение. А там видно будет. Можь, Microsoft втихаря пишет VM под *.nix.


Курт, дело не в моно как таковом, а в том, что компания, разрабатывающая один (скажем так, не маленький) фреймворк, должна обеспечить совместимость. Но когда она этого не делает, а другие пытаются угнаться за ней, имея гораздо меньше средств и сил, это уже не кроссплатформенность. То есть, если я сейчас начну писать в моно, я не уверен когда будут реализованы какие-то фичи, будут ли они реализованы, и т п.

Цитата(Kurt @ 26.4.2005, 08:29)
Можь, Microsoft втихаря пишет VM под *.nix.

Не пишет. Знаешь, откуда у МС доходы? От винды. Если я беру лаптоп или ПС - вот я и заплатил 200 - 400 баксов МС. Она продается миллионами экземпляров.
Что еще - конечно оффис и прочая дребедень. Ее берут меньше, но берут. В МС все рассчитано под винду и для нее. И .НЕТ был создан чтобы привлечь девелоперов к винде, чтобы девелоперы давали больше софта и тем самым стимулириовали винду. Сам .НЕТ бесплатный, все его преимущество - в студии, более супер отличий от Java нет. Ну стоит студия скажем $900. Девелоперов в мире гораздо меньше пользовател;ей винды, потому непосредственная прибыль от .НЕТ / студии мизерна по сравнению с доходом от форточек. Зато они стимулируют винду.
Теперь представь, что МС создала .НЕТ для Линуха/Мака/Соляриса. Она тратит деньги на туеву хучу разработчиков, и все для того, чтобы другие разработчики пересели на линуха/маки/солярисы и стали писать софт и тем самым уменьшать доходы МС, потому что если будет много хорошего софта под Линух - какой смысл покупать Виндовс? Получится, что МС сама себе выкопает если не могилу, то хотя бы ямку.

Кроме того, подумай сам - Сан сделал Java за сколько лет, причем для нескольких ос сразу. МС, основываясь на Java, имея гораздо большие ресурсы, за 5 лет ничего кроме .НЕТ для виндовс не делает. При этом все активно пользуют виндозные неймспейсы и винапи. Так что не будет .НЕТ(с)Микрософт для линуха, не потому что МС этого не может сделать, а потому что это ей невыгодно...

Добавлено @ 00:41
Цитата(alir @ 26.4.2005, 14:44)
Почему же надежная? Уж этот вопрос в сравнении java c .net здесь не уместен.

Более надежна, т.к. более проверена.


--------------------

PM   Вверх
alir
Дата 27.4.2005, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 19.3.2005

Репутация: 2
Всего: 4



Цитата
Более надежна, т.к. более проверена.

Ну насчет проверенности - это лишь из твоих личных исследований.

Цитата
Так что не будет .НЕТ(с)Микрософт для линуха, не потому что МС этого не может сделать, а потому что это ей невыгодно...

Конечно невыгодно, это все понимают. Но, я слышал про какую-ту реализацую под FreeBSD (не mono). Кто-нить знает?

Цитата
Кроме того, подумай сам - Сан сделал Java за сколько лет, причем для нескольких ос сразу. МС, основываясь на Java, имея гораздо большие ресурсы, за 5 лет ничего кроме .НЕТ для виндовс не делает.

MS сделала .net - и это уже много. Причем тут win'да? И зачем, когда есть xp и делатеся longhorn.
А вот я не вижу прогресса со стороны linux - в последнее время лишь bluetooth и поддержка беспроводных сетей, что в винде уже есть давно. Кстати, есть еща такая штука, как Media Center.

Это сообщение отредактировал(а) alir - 27.4.2005, 10:38
PM MAIL ICQ   Вверх
Domestic Cat
Дата 27.4.2005, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Цитата(alir @ 27.4.2005, 01:33)
Ну насчет проверенности - это лишь из твоих личных исследований.

С какого года на рынке Java и какой процент рынка занимает она сейчас? Не сочтите за холивор, просто это очевидная вещь.




--------------------

PM   Вверх
alir
Дата 27.4.2005, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 19.3.2005

Репутация: 2
Всего: 4



Цитата
С какого года на рынке Java и какой процент рынка занимает она сейчас? Не сочтите за холивор, просто это очевидная вещь.

Ну с 95 года и что? Еще бы! Ведь как-никак 10 лет прошло. smile А .net еще 4. Вот только 2.0 выходит.
PM MAIL ICQ   Вверх
Domestic Cat
Дата 27.4.2005, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Цитата(alir @ 27.4.2005, 01:40)
Ну с 95 года и что? Еще бы! Ведь как-никак 10 лет прошло. smile А .net еще 4. Вот только 2.0 выходит.

Ну так то, что она в два раза старше .НЕТ и сейчас она в пятой версии. Соответственно она в два раза дольше используется.


--------------------

PM   Вверх
alir
Дата 27.4.2005, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 19.3.2005

Репутация: 2
Всего: 4



Цитата
Ну так то, что она в два раза старше .НЕТ и сейчас она в пятой версии. Соответственно она в два раза дольше используется.

Ну так в этом то и дело: все говорят в java есть то се - да потому что 10 лет срок развития продукта приличный. А .net только вышла из начального уровня развития.
PM MAIL ICQ   Вверх
arilou
Дата 27.4.2005, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(alir @ 25.4.2005, 21:13)
Народ, расскажите как в .net организована переносимость. Т.е., например, в java после компиляции получаем байт-код, исполняемый после JMV (все знают), но в .net получаютя *.exe под win'ду, которые естесвенно не переносятся.


Интересно то, что никто так и не ответил на первоначальный вопрос, поэтому я возьму на себя такую смелость smile

Фишка .NET в общем, и Моно в данном случае, заключается как раз в том, что EXE-файлы, скомпилированные под Microsoft .NET framework под Виндой, запускаются в Linux при помощи Моно без перекомпиляции. Я не слишком силен в линуксовой терминологии, но реализуется это с помощью:
1) Запуска EXE приложения из командной строки с помощью mono <path to exe>
2) Включением загрузчика PE-файлов в ядро Линукса. Вроде как можно либо перекомпилить ядро с поддержкой PE-загрузчика, либо включить его как модуль.

Таким образом, переносимость реализуется, так как и Mono и MS.NET C# компиляторы производят IL-код, а компилируется в машинный он в момент запуска. Если же вы используете утилиту ngen для создания предкомпилированного image'a, то уже, естественно, в других ОСях он не пойдет.

Вот.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
redrick
Дата 27.4.2005, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 547
Регистрация: 7.1.2004
Где: Москва

Репутация: нет
Всего: 5



alir
Цитата

Цитата 
Так что не будет .НЕТ(с)Микрософт для линуха, не потому что МС этого не может сделать, а потому что это ей невыгодно...


Конечно невыгодно, это все понимают. Но, я слышал про какую-ту реализацую под FreeBSD (не mono). Кто-нить знает?


http://www.microsoft.com/downloads/details...&displaylang=en

- бай МС, заметьте. Ну и что что писали его в HP по заказу МС =)




--------------------
Имею Мнение Хрен Оспоришь   
PM MAIL ICQ   Вверх
AntonSaburov
Дата 27.4.2005, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 6
Всего: 118



Цитата(arilou @ 27.4.2005, 14:39)
Таким образом, переносимость реализуется, так как и Mono и MS.NET C# компиляторы производят IL-код, а компилируется в машинный он в момент запуска.

А библиотеки тоже все реализованы ?
Фишка как раз не в том, чтобы сделать виртуальную машину - это как раз не так уж и сложно имея спецификацию. Парси байт-код, выбирай команды и аргументы и делай под них нативный код. Т.к. команд не так уж и много (базовых) то вообщем-то это не проблема.

А вот библиотеки все портировать - это вам не фунт изюма. Тот же Delphi (да даже VC) имел ИСХОДНИКИ. А где вы видели исходники для .NET ? Значит все на собственном энтузазизме. А значит будет всегда отставание. А значит при выборе платформы всегда будет отдаваться предпочтение NET под Винду, как более полной и тестированной системе.

Да, несомненно можно будет Mono использовать, но это будет что-то вроде J2SE и J2ME - вообщем-то одинаково JAVA но реализовано не все во втором случае.
И я не удивлюсь, если тот же MS как-то спонсирует Mono - только для того, чтобы все даже под Юниксом перешли на .NET а потом, когда аппетит вырастет появилось желание перейти на Винду. Вот вам и результат.
PM MAIL WWW ICQ   Вверх
arilou
Дата 27.4.2005, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(AntonSaburov @ 27.4.2005, 15:56)
А библиотеки тоже все реализованы ?

не все, но благополучно редиректятся вызова на System.* в Mono.*


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Exception
Дата 27.4.2005, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Цитата(AntonSaburov @ 27.4.2005, 16:56)
А где вы видели исходники для .NET ?

А ты рефлектора чтоли не видел(?)
PM   Вверх
redrick
Дата 27.4.2005, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 547
Регистрация: 7.1.2004
Где: Москва

Репутация: нет
Всего: 5



Run-time error
Цитата

Цитата (AntonSaburov @ 27.4.2005, 16:56)
А где вы видели исходники для .NET ?

А ты рефлектора чтоли не видел(?)


ну рефлектор это мягко говоря не исходники...

а вот проигнорированный (или я млость туплю ??? ) ротор - самый что ни на есть исходник, правда не самого MS Framework конечно - но всё по спецификации


--------------------
Имею Мнение Хрен Оспоришь   
PM MAIL ICQ   Вверх
alir
Дата 27.4.2005, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 19.3.2005

Репутация: 2
Всего: 4



Цитата
А ты рефлектора чтоли не видел(?)

Там только исходники библиотеки.

Ксати, если MS делали .net только под винду (а так и есть), то смысл было разрабатывать виртуальную машину и лишь уменьшать производительность, а не на прямую. По-моему этим они добились лишь двух вещей:
1) многоязычность (но сами знаете, что кроме C# все остально лишь реклама)
2) написание программ с защитным кодом (но это опытным прграммистам вообще не нужно).

И все... Зачем тогда все эти трудности? IL, JIT и т.д. - насоздавали всякого, нафиг...
PM MAIL ICQ   Вверх
mr.DUDA
Дата 28.4.2005, 07:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Модератор: последние 2 страницы были перемещены из темы "Как организована переносимость в .net" сюда, т.к. все ответы свелись к сравнению JAVA vs .NET. Ещё раз обращаю внимание всех участников на первое сообщение данной темы:

"В любых других темах замечания типа "JAVA (или .NET) круче!" будут являться оффтопом, даже в том случае, если они аргументированы и приведены доказательства этой "крутости""



--------------------
user posted image
PM MAIL WWW   Вверх
batigoal
Дата 17.5.2005, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Господа, Domestic Cat в параллельном топике в разделе Java дал линки на пару статей по поводу Java и .NET. Прошу помочь разобраться с некоторыми моментами.

http://forum.vingrad.ru/index.php?showtopi...ndpost&p=412669


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
mr.DUDA
Дата 22.8.2005, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Вот, недавно начата работа над портом движка OGRE под .NET: вот одна ветка форума и вот другая ветка.
Это всё работает, и показывает мощь .NET в плане переноса существующих C++'нутых исходников под платформонезависимую оболочку, позволяющую программить как под C++, так и под C#, VB, и кучу других языков, с минимальными затратами по производительности и времени разработки. smile


--------------------
user posted image
PM MAIL WWW   Вверх
nerezus
Дата 23.8.2005, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 1
Всего: 43



Цитата
JAVA или .NET ?

а почему или
J# - не выход? (ногами не бить, спросил, чтобы узнать побольше про J#)


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
arilou
Дата 23.8.2005, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(nerezus @ 23.8.2005, 17:28)
J# - не выход?

Чессно скажу, у нас в Минске я не встречал НИ разу, чтобы кому-то был нужен специалист по J#, а на .NETчиков спрос большой. Или C#, или VB.NET. Так что делайте свой выбор smile smile


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
nerezus
Дата 23.8.2005, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 1
Всего: 43



arilou
Цитата
а на .NETчиков спрос большой.

а разве J# - не .NET?


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
batigoal
Дата 23.8.2005, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Цитата(nerezus @ 23.8.2005, 19:36)
а разве J# - не .NET?

А разве он реально используется? smile


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
mr.DUDA
Дата 25.8.2005, 08:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(Lamer @ 23.8.2005, 21:41)
А разве он реально используется?

Используется, если есть либа, целиком написанная на Java, и нужен порт на .NET.


--------------------
user posted image
PM MAIL WWW   Вверх
batigoal
Дата 25.8.2005, 08:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Я пока не сталкивался. Правда, я не кручусь среди дотНетчиков.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
mr.DUDA
Дата 26.8.2005, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



NUnit был изначально портирован с JUnit, и только в последних версиях - полностью переписан на C#. Другой пример: в одном из наших .NET-проектов используется библиотека синтаксического анализатора JFlex, причём ни одной строчки кода не переделано - все Java-исходники перенесены в проект J#.

Цитата(Lamer @ 25.8.2005, 08:18)
Я пока не сталкивался. Правда, я не кручусь среди дотНетчиков.

Если когда-нибудь столкнёшься, другого способа решить проблему, кроме как с пом. J#, ты вряд ли найдёшь.


--------------------
user posted image
PM MAIL WWW   Вверх
Madferit
Дата 7.9.2005, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 11.7.2005
Где: Запорожье

Репутация: 1
Всего: 1



Предложили, в качестве темы дипломной работы, тему "Сравнительная характеристика и реализация технологий разработки корпоративных WEB-приложений J2EE и Microsoft.NET "

J2EE я знаю довольно поверхностно, с .NET не знаком вовсе. Пока есть возможность спрыгнуть с темы и переиграть, хочу поинтересоваться:

Насколько принципиальны различия этих 2-х технологий, чтобы написать нормальный сравнительный анализ? Насколько реально подобрать практические примеры, чтобы эти различия были видны (а не только на пальцах)?

Заранее спасибо.
PM MAIL   Вверх
arilou
Дата 7.9.2005, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Запросто можно написать сравнительный анализ. Причем выводы можно сделать как в пользу j2ee, так и .net.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
batigoal
Дата 7.9.2005, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Различия есть, они существенны... но вопрос представляется мне весьма сложным. Он требует глубоко погружения и знаний, опыта использования в промышленных масштабах и т.д. Я бы не взялся.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
mr.DUDA
Дата 7.9.2005, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Наведи справки, какая из технологий более приветствуется на основной кафедре вашего факультета, и работай в этом направлении smile. ИМХО, везде всё по-разному. А расхвалить можно как одну так и другую платформы, так что выбор за тобой. Если нравится тебе open source и линух - значит более близким будет JAVA. Если нравится устоявшийся "мэйнстрим" типа виндовз, бери .NET; кстати, это наиболее очевидный выбор для Win-разработчиков smile .

[edit]

Цитата
Насколько реально подобрать практические примеры, чтобы эти различия были видны (а не только на пальцах)?

Кстати, различия в любом случае можно показать на реальных примерах. Дело в том, что "в какую сторону" будут направлены дифирамбы - зависит только от тебя.

[/edit]


--------------------
user posted image
PM MAIL WWW   Вверх
Medved
Дата 14.9.2005, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 3
Всего: 154



Суть не в том, на каком языке программирования пишешь. Суть в том, чтобы правильно думать.
Если правильно мыслишь, то хоть с помощью VB6 можно написать довольно таки хорошую программу. Вопрос только в том, что с использованием платформ Java или NET это будет быстрее и удобнее.

Java поддерживает многоплатформенность, а платформа NET - многоязыковость. Это их основное различие на сегодняшний момент. ИМХО именно благодаря этому факту, с точки зрения корпоративного бизнесса гораздо привлекательней выглядит платформа NET.

А если снисходить до самомго языка, то сразу видно, что C# и Java очень похожи (что не удивительноsmile. Научившись синемантике одного языка, без труда можно освоить другой.
Уже давно, на передний план вышло знание не столкьо самого языка, сколько знание самих библиотек платформы.



--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
onsh76
Дата 9.10.2005, 09:12 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Pegas @ 14.9.2005, 16:23)
Java поддерживает многоплатформенность, а платформа NET - многоязыковость.

Ага, точно... smile
Спросите любого кто лабал на VB6, а затем был вынужден перейти на VB.NET, про схожести в двух версиях. Народ смотрел на "этот, усовершенствованный" VB как баран на новые ворота и нихрена ни чего не догонял.

В конечном итоге, все .NET-овские языки стали кастрированными в силу того, чтобы соблюдать общий интерфейс - быть MSIL-compatible. Т.е. больших шагов влево и вправо сделать не получится, смотри вроде как старший брат С# делает и старайся подстроиться под него.

Нe проще и надежнее иметь дело с C#?
  Вверх
alir
Дата 16.10.2005, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 19.3.2005

Репутация: 2
Всего: 4



Цитата
В конечном итоге, все .NET-овские языки стали кастрированными в силу того,

Ну очень спорное мнение! smile Для одних языков переход на .net стал расширением своих внутренних возможностей, а для других - изменение их концеции в пользу новых.
Например, в C++.NET можно писать на обычном C++, VB стал просто объектно ориентрованным и еще пару фитч докрутили.
Цитата
Народ смотрел на "этот, усовершенствованный" VB как баран на новые ворота и нихрена ни чего не догонял.

Бред, ничего там сложного.
PM MAIL ICQ   Вверх
Exception
Дата 21.10.2005, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Цитата(onsh76 @ 9.10.2005, 10:12)

Спросите любого кто лабал на VB6, а затем был вынужден перейти на VB.NET, про схожести в двух версиях. Народ смотрел на "этот, усовершенствованный" VB как баран на новые ворота и нихрена ни чего не догонял.

отчасти. я тоже так делал. и мне очень помогла книга Дэна Эпплмана "Переход на VB .NET: стратегии, концепции, код". Гениальный автор...
PM   Вверх
02077461
Дата 12.12.2005, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 13.7.2005

Репутация: нет
Всего: 0



Почему никто не оперирует цифрами и фактами?
При использовании аргументов можно было бы обойтись двумя - тремя страницами.
Ну хоть кто-нибудь проводил сравнительный тест, или всем хватает собственных убеждений?
И еще: почему все фирмы работающие на .NETe -- американские, в то время как например в Германии ценят программистов на Java?
PM   Вверх
batigoal
Дата 12.12.2005, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Цитата(02077461 @ 12.12.2005, 11:42)
Ну хоть кто-нибудь проводил сравнительный тест

На предмет чего?


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
mr.DUDA
Дата 12.12.2005, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Да много тестов уже проводили, результаты сильно зависят от решаемой задачи.


--------------------
user posted image
PM MAIL WWW   Вверх
Exception
Дата 12.12.2005, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Цитата(mr @ 12.12.2005, 14:16)
результаты сильно зависят от решаемой задачи

И от того, кто их проводит -- явец или дотнетовец smile
PM   Вверх
Medved
Дата 20.12.2005, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 3
Всего: 154





--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
kondr
Дата 31.1.2006, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 24.11.2005

Репутация: нет
Всего: 1



Мне кажется серьезным преимуществом .NET является многоязыковость, т.е. пиши сборки на любом языке поддерживающем .NET собирай все это в одно приложение и все будет работать. Для больших приложений это важно. К примеру я как начал учить С# был приятно удивлен такой возможностью как межьязыковое наследование - класс написан на VB.NET а производный класс можно написать на чем хочешь (только ссылку добавь на сборку с базовым классом)
PM MAIL   Вверх
02077461
Дата 1.2.2006, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 13.7.2005

Репутация: нет
Всего: 0



Назови реальный пример использования этого удобства. Кстати, наследоваться ты будеш от какого-то abstract language, которому даже имя приличного не дали, а не от VB класса.
PM   Вверх
Exception
Дата 1.2.2006, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Цитата(02077461 @ 1.2.2006, 11:08 Найти цитируемый пост)

Назови реальный пример использования этого удобства

В одном проекте люди могут работать на разных языках. Также благодаря многоязыковости существует J#, а значит конвертация исходников с Java довольно проста.
Цитата(02077461 @ 1.2.2006, 11:08 Найти цитируемый пост)

Кстати, наследоваться ты будеш от какого-то abstract language, которому даже имя приличного не дали, а не от VB класса.

Не понял. Все отлично работает, о чем ты?
PM   Вверх
arilou
Дата 1.2.2006, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



kondr
Правильно говоришь. Я работал в проекте, где VB.NET и C# были совмещены примерно в отношении 60 на 40.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Domestic Cat
Дата 2.2.2006, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Я сейчас работаю и кроме неудобств и траты времени на миграцию с ВБ на шарп ничего от этого не видел.



--------------------

PM   Вверх
Exception
Дата 2.2.2006, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Одна сборка может быть написана на разных языках и миграции не нужно.
P.S. Помнится, кто-то говорил, что непонятно, когда юзать св-ва, а когда методы. Вот, что пишет MS:
Цитата
Methods are preferable to properties in the following situations: the operation is conversion, is expensive or has an observable side-effect; the order of execution is important; calling the member twice in succession creates different results; a member is static but returns a mutable value; or the member returns an array.

PM   Вверх
mr.DUDA
Дата 2.2.2006, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Domestic Cat, если бы вы заколбасили GUI-приложение на дотнете с нуля, это как говорится была бы совсем другая тема smile...


--------------------
user posted image
PM MAIL WWW   Вверх
arilou
Дата 3.2.2006, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(Domestic Cat @ 2.2.2006, 20:10 Найти цитируемый пост)

миграцию с ВБ на шарп ничего от этого не видел

Ну причем тут миграция? Речь идет о взаимодействии в рамках одного продукта. И не надо говорить "зачем? кому это надо? одни неудобства....". Есть люди, которым это надо и кто этим отлично пользуется.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
mr.DUDA
Дата 3.2.2006, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(arilou @ 3.2.2006, 00:01 Найти цитируемый пост)
Ну причем тут миграция? Речь идет о взаимодействии в рамках одного продукта. И не надо говорить "зачем? кому это надо? одни неудобства....". Есть люди, которым это надо и кто этим отлично пользуется.

Кот говорил про миграцию со старого бейсика на шарп, ИМХО...


--------------------
user posted image
PM MAIL WWW   Вверх
Domestic Cat
Дата 4.2.2006, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Ну вообще-то речь шла о миграции с VB.NET на шарп... Заказчик так захотел.



--------------------

PM   Вверх
Exception
Дата 4.2.2006, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Цитата(Domestic Cat @ 4.2.2006, 11:29 Найти цитируемый пост)
Заказчик так захотел.

Не пойму, а как он отличит exe-шник на VB .NET от exe-шника на C#? smile
Или ему исходники нужны? Существует куча тулз для перевода кода VB .NET -> C# и наоборот.
PM   Вверх
arilou
Дата 6.2.2006, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(Exception @ 4.2.2006, 15:01 Найти цитируемый пост)

Или ему исходники нужны? Существует куча тулз для перевода кода VB .NET -> C# и наоборот.

Они глюкают. А заказчики, FYI, почти всегда код покупают, а не exeшник smile

Кот, поделись тем, что тебе мешало с VB.NET на C# мигрировать. В чем трабла была?


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Domestic Cat
Дата 6.2.2006, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Собственно перегонкой кода занимался не я, но в целом были огромные траблы в коде юзающем ком. Добавились баги из-за перегонки. Да и изначально вбшный код был плохим, так что проще было бы его с нуля написать...


--------------------

PM   Вверх
VectorMan
Дата 9.4.2006, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antihero
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 9.4.2006

Репутация: нет
Всего: 4



преимущество Java в том что он поддерживаестся большим количеством платформ, .NET пока ещё стабильно живёт только на продуктах майкрософт, субъективно GUI-приложения написанные под .NET работают быстрее, чем написанные на Java (я имею ввиду только скорость реакции пользовательского интерфейса), но я думаю эта скорость достигнута за счёт оптимизации архитектуры платформы .NET под интерфейсы WinAPI, а значит на других операционных системах, возможно всё не будет так безоблачно
PM   Вверх
mr.DUDA
Дата 9.4.2006, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(VectorMan @ 9.4.2006, 07:31 Найти цитируемый пост)
а значит на других операционных системах, возможно всё не будет так безоблачно

Дело в самом подходе: Java - интерпретируемый язык, а .NET (C#, VB.NET) - компилируемый. Поэтому по определению дотнетовский код (будь то оконное приложение, или консольное) будет работать быстрее при хорошо оптимизирующем код компиляторе. То есть, и под линукс и под Mac можно сделать оконное приложение быстрее чем аналог на Java, используя к примеру GTK# вместо WinForms.


--------------------
user posted image
PM MAIL WWW   Вверх
VectorMan
Дата 9.4.2006, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antihero
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 9.4.2006

Репутация: нет
Всего: 4



Цитата(mr.DUDA @ 9.4.2006, 11:08)
Дело в самом подходе: Java - интерпретируемый язык, а .NET (C#, VB.NET) - компилируемый.

разве под яву нет JIT-компиляторов?

Цитата(mr.DUDA @ 9.4.2006, 11:08)
То есть, и под линукс и под Mac можно сделать оконное приложение быстрее чем аналог на Java, используя к примеру GTK# вместо WinForms.

согласен что можно, только это обёртка для GTK, также как WinForms обёртка для WinAPI

Это сообщение отредактировал(а) VectorMan - 9.4.2006, 11:30
PM   Вверх
Ch0bits
Дата 9.4.2006, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: 9
Всего: 62



Цитата(VectorMan @ 9.4.2006, 11:22 Найти цитируемый пост)
также как WinForms обёртка для WinAPI

Ну нет. WinForms - это полноценная библиотека, а WinAPI это основа всему что под Windows. JVM под Win тоже через WinAPI работает.
И вообще, если так рассуждать, то всё что ни возьми будет под что-то обёрткой. smile

Это сообщение отредактировал(а) Ch0bits - 9.4.2006, 11:43
PM WWW   Вверх
VectorMan
Дата 9.4.2006, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antihero
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 9.4.2006

Репутация: нет
Всего: 4



Цитата(Ch0bits @ 9.4.2006, 11:41)
И вообще, если так рассуждать, то всё что ни возьми будет под что-то обёрткой.  smile

я не совсем точно выразился. WinForms заточен под платформу Windows, а хотелось бы иметь библиотеку которая бы обеспечивала, примерно одинаковую скорость работы под виндой и никсами, и одинаковый внешний вид приложения, но наверное это мечта идиота :-)
PM   Вверх
Exception
Дата 9.4.2006, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Цитата(VectorMan @ 9.4.2006, 12:49 Найти цитируемый пост)
а хотелось бы иметь библиотеку которая бы обеспечивала, примерно одинаковую скорость работы под виндой и никсами, и одинаковый внешний вид приложения, но наверное это мечта идиота :-)

Я так и не понял, чем плоха GTK#? Для Win, конечно же, она заточена под WinAPI, а для остальных - под соответствующие тулкиты. Что непонятно?
PM   Вверх
VectorMan
Дата 9.4.2006, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antihero
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 9.4.2006

Репутация: нет
Всего: 4



Цитата(Exception @ 9.4.2006, 12:01)
Я так и не понял, чем плоха GTK#?

не знаю, я с не работал с этой библиотекой, наверное это то что мне нужно.
а в чем она лучше/хуже java/swing ?
PM   Вверх
Exception
Дата 9.4.2006, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Цитата(VectorMan @ 9.4.2006, 13:15 Найти цитируемый пост)
не знаю, я с не работал с этой библиотекой, наверное это то что мне нужно.
а в чем она лучше/хуже java/swing ?


Я тоже с ней не работал, так что объективно судить не берусь. А зачем тебе кроссплатформенность?
Добавлено @ 12:36
Цитата(Domestic Cat @ 6.2.2006, 10:11 Найти цитируемый пост)
Собственно перегонкой кода занимался не я, но в целом были огромные траблы в коде юзающем ком.

Эээ... Вообще-то, VB .NET и C# используют один и тот же COM Interop smile
PM   Вверх
VectorMan
Дата 9.4.2006, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antihero
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 9.4.2006

Репутация: нет
Всего: 4



Цитата(Exception @ 9.4.2006, 12:31)
А зачем тебе кроссплатформенность?

пока сильной необходимости нет, потому что я только изучаю платформу .NET, но есть кое-какие задумки насчет некоммерческого проекта, где бы кросплатформенность не помешала, быть может к тому моменту WinForms будет нормально реализован под никс-системы и тогда мне не о чем беспокоиться smile
PM   Вверх
batigoal
Дата 11.4.2006, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Цитата(VectorMan @ 9.4.2006, 12:22 Найти цитируемый пост)
разве под яву нет JIT-компиляторов?

Есть. Собственно, он встроен в исполняющую среду.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
FatherFrost
Дата 12.4.2006, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почетный Мороз
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 27.4.2005
Где: Крайний север

Репутация: нет
Всего: 6



Lamer George, а как в JAVA реализована работа с принтером? А то я столкнулся, что в C# оно не особо прямо сделано smile))) Просто интересно. Сорри, если оффтоп.


--------------------
Задаю много глупых вопросов....
PM MAIL ICQ   Вверх
batigoal
Дата 12.4.2006, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Цитата(FatherFrost @ 12.4.2006, 22:03 Найти цитируемый пост)
Lamer George, а как в JAVA реализована работа с принтером?

Сам не пробовал. Посмотреть примеры можно тут:
Java Print Service
Printing in Java


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Exception
Дата 12.4.2006, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Цитата(FatherFrost @ 12.4.2006, 22:03 Найти цитируемый пост)
А то я столкнулся, что в C# оно не особо прямо сделано smile)))


Да ладно? Оффтопик прямо. А сделано нормально, вроде как... Чего тебя не устроило?
PM   Вверх
danilsl
Дата 28.4.2006, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 15.3.2006

Репутация: нет
Всего: нет



Почитал что такое .NET, возник вопрос, может лучше сразу Java. С другой стороны если JVM будет выполнятся в среде .NET, а на сколько я понял в новых версиях винды так и будет, то получается Java приложения будут интерпретироваться на интерпретируемой JVM. Это насколько же станет тормозить Java? 
PM MAIL   Вверх
02077461
Дата 28.4.2006, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 13.7.2005

Репутация: нет
Всего: 0



А кто мешает оставить прежнюю ЖВМ, не уповая на милость корыстолюбов?.. 
PM   Вверх
Exception
Дата 28.4.2006, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Цитата(danilsl @  28.4.2006,  12:48 Найти цитируемый пост)
Почитал что такое .NET, возник вопрос, может лучше сразу Java.


Очень содержательный вопрос. А главное - на него можно найти два ответа.

Цитата(danilsl @  28.4.2006,  12:48 Найти цитируемый пост)
С другой стороны если JVM будет выполнятся в среде .NET, а на сколько я понял в новых версиях винды так и будет, то получается Java приложения будут интерпретироваться на интерпретируемой JVM. Это насколько же станет тормозить Java?  


Это внушает опасения... 
PM   Вверх
danilsl
Дата 29.4.2006, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 15.3.2006

Репутация: нет
Всего: нет



Цитата(Exception @ 28.4.2006,  22:55)
Очень содержательный вопрос. А главное - на него можно найти два ответа.

Да вообщето я не для смеху писал, просто пытаюсь определиться что учить, советуюсь с людьми, которые это уже прошли. Тем более я не нашёл в данном форуме вразумительного описания плюсов и минусов каждой технологии, только разбор полётов конкретных случаев. Ещё вот гдето вычитал, что J# нормально компилит старые исходники Java, ток не жаву а в .NET. А это тоже внушает опасения. Мелкософту Sun давно глаза мозолила, вроде как даже судились. А эта .NET платформа, по-моему таки  направлена на убийство оставшихся конкурентов. 
PM MAIL   Вверх
Exception
Дата 29.4.2006, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Цитата(danilsl @  29.4.2006,  11:41 Найти цитируемый пост)
А эта .NET платформа, по-моему таки  направлена на убийство оставшихся конкурентов.  


Я её использую не потому что я ненавижу конкурентов Microsoft, а потому что мне удобно с ней работать. 
PM   Вверх
Softaz
Дата 30.4.2006, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


wasm
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 16.1.2006

Репутация: 3
Всего: 16



Цитата(danilsl @  29.4.2006,  10:41 Найти цитируемый пост)
Ещё вот гдето вычитал, что J# нормально компилит старые исходники Java, ток не жаву а в .NET. А это тоже внушает опасения. Мелкософту Sun давно глаза мозолила, вроде как даже судились.


Да при чем тут опасения? Sun со своей Java занимает 40% рынка, Microsoft - тоже 40%.
Соответственно, переведя все на .NET, особенно Java, они в будущем отхватят несколько % у Sun.
 


--------------------
Разочарованный в .NET
PM MAIL WWW   Вверх
BlodTor
Дата 2.5.2006, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 27.4.2006

Репутация: нет
Всего: нет



В .Net есть аналог Java Web Start? Что нужно для работы со стороны клиента и сервера? 
Очень хочется пощупать. 
 
Java Web Start, позволяет расположить на http сервере “настольное” приложение. При переходе по определенной ссылке в браузере (например: http://xxx.xxx.ru/MyApp.jnlp), на стороне клиента запускается приложение Java Web Start Launcher, которому передается MyApp.jnlp. 
Пример jnlp файла:
 
Код

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="http:// xxx.xxx.ru" href=" MyApp.jnlp">
  <information>
    <title>title</title>
    <vendor>vendor</vendor>
    <homepage href="Index.html"/>
    <description>description</description>
  </information>
  <security>
    <all-permissions/>
  </security>
  <resources>
    <j2se version="1.4+"/>
    <jar href="1.jar"/>
    <jar href="2.jar"/>
    <jar href="Img.jar"/>
  </resources>
  <application-desc main-class="MainApp"/>
</jnlp>

После этого Java Web Start Launcher проверяет наличие 1.jar, 2.jar, Img.jar на машине клиента. Если их нет, то эти файлы выкачиваются, если есть, то проверяются версии этих файлов на клиенте, и то что отличается, закачивается. После чего приложение запускается с определенными правами (если jar файлы не подписаны, то доступа к ресурсам машины нет вообще, если подписаны, то вы можете разрешить приложению использовать ресурсы вашей машины). В Windows можно сделать ярлык на Java Web Start приложение. Приложение может работать и offlain после загрузки, т.е. запустили один раз, потом закрыли приложение, отсоединились от сети и опять запустили уже в режиме offline, если это разрешил разработчик.

 Java Web Start, входит в JRE.  Если стоит IE или Mozilla то все заработает само, если что-то другое, то просто надо указать браузеру, кем открыть jnlp файл (пребывал в linux со всеми браузерами что там стояли - работало).  
На стороне http сервера надо тока указать что .jnlp это application/x-java-jnlp-file в Mime types, ну и положить  Index.html ,MyApp.jnlp,1.jar, 2.jar, Img.jar туда, где они должны лежать.
 
PM MAIL   Вверх
Exception
Дата 2.5.2006, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Не понял, что это, но для работы ASP .NET нужно пускануть ASP .NET Development Server и пускать странички. 
PM   Вверх
batigoal
Дата 2.5.2006, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Цитата(Exception @  2.5.2006,  17:00 Найти цитируемый пост)
Не понял, что это, но для работы ASP .NET нужно пускануть ASP .NET Development Server и пускать странички.  

Тут немного не то. Речь идет об автоматической закачке и запуске десктопных приложений. 


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Дрон
Дата 2.5.2006, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 24
Всего: 92



Цитата(BlodTor @  2.5.2006,  14:25 Найти цитируемый пост)
В .Net есть аналог Java Web Start? 

Насколько я знаю -- нет. Но я не вижу никаких сложностей в реализации.
Видимо это просто не особо востребовано.
 


--------------------
Да. Именно так.
PM   Вверх
batigoal
Дата 2.5.2006, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Цитата(Дрон @  2.5.2006,  17:30 Найти цитируемый пост)
Видимо это просто не особо востребовано.

Угу. Можно ведь просто ехе-шник скачать smile 


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
BlodTor
Дата 3.5.2006, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 27.4.2006

Репутация: нет
Всего: нет



Цитата(Lamer George @ 2.5.2006,  16:57)
Цитата(Дрон @  2.5.2006,  17:30 Найти цитируемый пост)
Видимо это просто не особо востребовано.

Угу. Можно ведь просто ехе-шник скачать smile

Мне чем нравится эта технология.
 Вот есть куча клиентов, которые используют мою программу на предприятии. И их 1000 человек допустим. Вот они скачали программу и работают с ней, а я взял и переписал код. И теперь мне всем надо об этом сообщить. А тут они запустили программу как обычно через ярлык, она сама посмотрела, что надо обновить, закачала эти части и все работает.
Использование сторонних пакетов, не входящих в состав JRE.
Если я использую POI, например, то его клиенту надо выкачать вместе с моей программой, добавить к переменной окружения указав, где этот пакет лежит или положить туда, где должны лежать сторонние пакеты. А так все само закачалось и расположилось, так как надо. (При этом, когда я в следующий раз перепишу код приложения, то POI выкачиваться не будет).
Если мне вдруг захотелось использовать еще один сторонний пакет (в том числе мной же написанный), то просто в jnlp файле прописал его и все, опять же все само закачается и заработает.
Есть клиенты, которые сидят на модеме, например. И им все время качать полностью программу не в кайф, темболее, если там поменялось что-то только в одном пакете и только его надо качать, мне же влом объяснять что качать, куда качать, а так опять же Web Start Launcher все сделает за меня.
Самое главное! Не забываем, что “тети Дуси” вообще не хотят знать, что и куда и когда им качать. А тут ярлык им повесил, и радуешься жизни.

ASP, JSP и т.д. тут вообще ни причем, нужен любой http сервер (можно и тот что о Java не знает вообще ни чего, главное mime type указать чтоб можно было) и все.

Java Web Start - очень удобно использовать (по крайней мере мне), вот я и хочу тоже делать c использованием .net. Поэтому и спрашиваю! 
  

Это сообщение отредактировал(а) BlodTor - 3.5.2006, 08:57
PM MAIL   Вверх
Дрон
Дата 3.5.2006, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 24
Всего: 92



Я наоборот не люблю, когда программы без моего ведома что-то качают smile
Хотя автообновление присутствует во многих программах независимо от платформы.

А вообще что-то подобное у Microsoft всё-таки есть: Updater Application Block
Цитата
In medium to large organizations, it is common to want to keep all instances of a desktop application up to date with the latest version of executables, libraries, and other files. The Updater Application Block provides an extensible framework that companies can use to create updateable applications.
  

Это сообщение отредактировал(а) Дрон - 3.5.2006, 09:30


--------------------
Да. Именно так.
PM   Вверх
Calve
Дата 3.5.2006, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 12.7.2005

Репутация: нет
Всего: нет



Еще можно почитать в MSDN про ClickOnce Deployment, это как раз то что нужно. 
PM MAIL   Вверх
Exception
Дата 3.5.2006, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



ClickOnce жжот. 
PM   Вверх
BlodTor
Дата 3.5.2006, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 27.4.2006

Репутация: нет
Всего: нет



ClickOnce очень похожа на Java Web Start, судя по описанию. 
Теперь пощупать ее надо. Спасибо. 
PM MAIL   Вверх
arilou
Дата 3.5.2006, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



А вот и я  smile 

Цитата(danilsl @  28.4.2006,  11:48 Найти цитируемый пост)
интерпретироваться на интерпретируемой 

.NET код не интерпретируется!!! Сделайте поиск оп форуму, уже не раз писали об этом.

Цитата(BlodTor @  2.5.2006,  13:25 Найти цитируемый пост)
В .Net есть аналог Java Web Start?

Цитата(Дрон @  2.5.2006,  16:30 Найти цитируемый пост)
Насколько я знаю -- нет.

Есть. Работает через IE и называется IEExec. А в версии 2.0 это все называется ClickOnce.
 


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Се ля ви
Дата 21.8.2006, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java/SOAрхитектор
****


Профиль
Группа: Модератор
Сообщений: 2016
Регистрация: 5.6.2004
Где: place without tim e and space

Репутация: нет
Всего: 127



Как и было заявлено, прошло 2 года с того момента, как тема ушла в небытиё. Мне кажется, можно подводить некоторые предварительные итоги - оправдались ожидания или нет? AntonSaburov, как с вакансиями на сегодня?

Я Java`ист, но всё же попытаюсь быть беспристрастным. IBM и BEA уверенно держат оборону и ещё и умудряются между собой активно конкурировать. Доконкурировались до того, что выдавили с рынка HP, да и Oracle здесь явно постольку-поскольку. Сама Sun не столь успешна, ей тяжело поддерживать этот затратный проект, но это, естественно, не будет означать смерть Java и J2EE - переодически проскакивает слух о том, что проект выкупит IBM как только Sun решит от него отказаться - так что тут уж скорее вопрос, что делать BEA в этой ситуации...

Java развивается очень бурно - буквально каждый день появляется что-то новое - экзотические фреймворки, архитектурные приёмы, тьма тьмущая библиотек, всё это обновляется, расширяется, объединяется, разъединяется, интегрируется друг с другом и со средствами разработки - уже голова устаёт изучать. Однако это даёт простор для обновлений - с Java уж как минимум не соскучишься, change is fun! smile

Именно нынешнюю статистику вакансий по Москве я не смотрел, но за эти два года 2 раза поменял работу и оба раза моя зарплата последовательно удваивалась и вот уже сейчас как минимум по разу в месяц звонят с предложениями перейти на новую, и тоже с ростом зарплаты примерно вдвое по сравнению с моей текущей - и я знаю, что это - не предел. В крупных городах ощущается голод на хороших Java-истов, за них идёт яростная конкуренция - крупные компании-разработчики уже заключают специальные договора, по которым обязуются не переманивать программистов друг у друга, компании по-мельче, кто не может заключить такой договор, действуют иначе - обещают не принимать уволившегося сотрудника назад (в одной из таких компаний у меня работает знакомый - сам рассказывал) - всё ради того, что бы ограничить специалистам простор для частых перебегов.

Насчёт скорости, Java 5 вполне себя оправала, насколько я знаю, по последним тестам она с .NET - довольно-таки вровень. Да и обычно корпоративные заказчики могут позволить себе купить такое железо, на котором нормально-написанная Java-программа работала так быстро, как это нужно.

Что ещё нового за эти годы? SOA, порталы, распространение объектных нашлёпок на реляционные базы, решения для AJAX. Развиваются на Java-платформе так быстро, что не угнаться за всеми хитростями, особенно первые 2, как промышленные, так и опен-соурсные решения. Среды удобнейшие Eclipse и IDEA - и становятся удобнее не по дням а по часам.

Java так же вышла на рынок мелких и средних интернет-проектов. Здесь бесспорный лидер - Resin. Быстрый, сильный (полноценный J2EE!), непривиредливый, да ещё и PHP 5 недавно в него засунули - самая тема сейчас для мелочи. Уже и у нас хостинг приличный и недорогой есть. Вот тут кроссплатворменность в самую точку - рынок-то Linux`овый процентов на 70%. smile Кроме того, восходящая звёздочка Python в Java 6 будет идти как скриптовый язык. smile

Intel набирает большое количество Java-программистов, которые непонятно над чем работают уже года 2 или 3, по этому поводу ходят недоумённые слухи - готовится явно что-то очень крупное.

На горизонте маячит - массовое распространение 64-разрядных процов, которые наверняка стметут большое количество платформо-зависимого ассемблерного и С/С++ софта, по-этому конкуренция обострится - Java и .NET окажутся уже Робинзонами, лицом-к-лицу.


Вот, видимо, всё основное по Java. А как у вас?

Я вижу только что MS на сегодняшний день не смогла полноценно интегрировать .NET с Windows`ом. Не видно что бы операторами C# можно было писать команды в командной строке и в bat-файлах и что бы .NET-проги обгоняли Win32. Не видно, что бы мелкомягким удалось сделать их единым целым, хотя... надежда, конечно, умирает последней...


--------------------
  )
 (
[_])
проф. блог

Кролики думали, что занимаются любовью, а на самом деле их просто разводили...
PM MAIL WWW Skype GTalk   Вверх
mr.DUDA
Дата 22.8.2006, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232





Комментировать бесплатную рекламу Java не буду. Если всё так радужно, то почему всё так грустно ? Почему новичкам всё ещё по-прежнему сложно освоить такую "простую, как сад с подстриженными газонами и табличками с указателями" систему как Java, и так просто освоить "сложную, запутанную как баньян (с) Pegas"  систему как .NET Framework ? Камешек в огород джавистов, чтоб жизнь малиной не казалась. smile

Цитата(Се ля ви @  21.8.2006,  22:16 Найти цитируемый пост)
Я вижу только что MS на сегодняшний день не смогла полноценно интегрировать .NET с Windows`ом. Не видно что бы операторами C# можно было писать команды в командной строке и в bat-файлах и что бы .NET-проги обгоняли Win32. Не видно, что бы мелкомягким удалось сделать их единым целым, хотя... надежда, конечно, умирает последней...

Разве такие возможности есть в Java ?


--------------------
user posted image
PM MAIL WWW   Вверх
batigoal
Дата 22.8.2006, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Цитата(mr.DUDA @  22.8.2006,  10:14 Найти цитируемый пост)
Почему новичкам всё ещё по-прежнему сложно освоить такую "простую, как сад с подстриженными газонами и табличками с указателями" систему как Java,

Потому что простота языка и концепций не означает простоты платформы в целом. Большинтво вопросов новичка упирается не в язык, а в окружение.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
mr.DUDA
Дата 22.8.2006, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(Lamer George @  22.8.2006,  09:30 Найти цитируемый пост)
Потому что простота языка и концепций не означает простоты платформы в целом. Большинтво вопросов новичка упирается не в язык, а в окружение.

Я и не говорил о Java как о языке, имелась ввиду простота освоения системы (язык + инструментарий платформы). Имхо, для практических целей дотнет освоить быстрее и легче, чем Java. Плюс это или минус ?


--------------------
user posted image
PM MAIL WWW   Вверх
Се ля ви
Дата 22.8.2006, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java/SOAрхитектор
****


Профиль
Группа: Модератор
Сообщений: 2016
Регистрация: 5.6.2004
Где: place without tim e and space

Репутация: нет
Всего: 127



Цитата(mr.DUDA @  22.8.2006,  09:14 Найти цитируемый пост)
Если всё так радужно, то почему всё так грустно ? Почему новичкам всё ещё по-прежнему сложно освоить такую "простую, как сад с подстриженными газонами и табличками с указателями" систему как Java, и так просто освоить "сложную, запутанную как баньян (с) Pegas"  систему как .NET Framework ? Камешек в огород джавистов, чтоб жизнь малиной не казалась. smile


Простота и порядок - это всё-таки разные вещи, не думаю, что бы Антон считал Java уж очень простой, когда писал это, скорее речь шла о некоторой годами выработанной концептуальной целостности. Ухоженный сад не просто содержать тому же садовнику, к тому же он значительно ограничивает возможности для творчества, дисциплинирует, а дисциплина редко где бывает простой, но часто требует длительного изучения.

Цитата(mr.DUDA @  22.8.2006,  09:14 Найти цитируемый пост)
Цитата(Се ля ви @  21.8.2006,  22:16 Найти цитируемый пост)
Я вижу только что MS на сегодняшний день не смогла полноценно интегрировать .NET с Windows`ом. Не видно что бы операторами C# можно было писать команды в командной строке и в bat-файлах и что бы .NET-проги обгоняли Win32. Не видно, что бы мелкомягким удалось сделать их единым целым, хотя... надежда, конечно, умирает последней...

Разве такие возможности есть в Java?

Такие вещи не совместимы с кроссплатформенностью. Тут либо-либо, согласись. А у .NET и кроссплатформенности нет и глубокой интеграции хотя бы с одной единственной ОС - тоже нету - о чём и толк.

Добавлено @ 13:05 
Цитата(mr.DUDA @  22.8.2006,  10:48 Найти цитируемый пост)
для практических целей дотнет освоить быстрее и легче, чем Java. Плюс это или минус ? 

А это уже смотря какие практические цели. smile


--------------------
  )
 (
[_])
проф. блог

Кролики думали, что занимаются любовью, а на самом деле их просто разводили...
PM MAIL WWW Skype GTalk   Вверх
mr.DUDA
Дата 22.8.2006, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(Се ля ви @  22.8.2006,  13:04 Найти цитируемый пост)
Такие вещи не совместимы с кроссплатформенностью. Тут либо-либо, согласись. А у .NET и кроссплатформенности нет и глубокой интеграции хотя бы с одной единственной ОС - тоже нету - о чём и толк.


Шутка в тему:
Цитата
Saying that Java is nice because it works on all OS's is like saying that anal sex is nice because it works on all genders.


smile


--------------------
user posted image
PM MAIL WWW   Вверх
Domestic Cat
Дата 22.8.2006, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Цитата(mr.DUDA @  22.8.2006,  04:10 Найти цитируемый пост)
Saying that Java is nice because it works on all OS's is like saying that anal sex is nice because it works on all genders.

И в чем фишка?


--------------------

PM   Вверх
Страницы: (15) [Все] 1 2 3 ... Последняя »
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.5199 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.