Есть ли будущее у С#? (без флуда)

6yrop

Предыдущий тред сильно зафлужен, поэтому я решил начать новый. Большая просьба ко всем, писать здесь только по теме, при необходимости открывать новые треды.
По теме.
1. Вот какие приятные “мелочи” я могу сходу вспомнить, которые есть в C# и нет в Java
1.1 Параметры в функцию могут передаваться и по ссылке и по значению, поддержка out параметров.
1.2 У классов есть свойства.
1.3 Индексаторы и перегрузка операторов.
1.4 Кроме классов есть структуры struct (value-type).
1.5 boxing, unboxing
1.6 Скоро в C# появятся Generic-ы, это типа шаблонов в C++ (ну вроде в Java их тоже обещают).
далее точно не могу сказать
1.7 В Java-е есть Reflection?
1.8 Есть ли в Java-е специальные конструкции языка для событий?
2. В ближайшем будущем все продукты Microsoft-та будут ориентированны на .Net, т.е. в них будет встроена поддержка .Net. Например, в следующую версию MS SQL Server будет встроен CLR, т.е. (насколько я понимаю) хранимые процедуры можно будет писать на .Net языках.
3. .Net работает быстрее Java.

Ivan8202

Начни с описания задач, в рамках которых ты сравниваешь C# и Java.
Без этого всё тобой написанное - не более чем пустой пиздежъ.

6yrop

а может мы сразу с сотворения Мира начнем? сначало было слово, ну и т.д. Задавать общие вопросы каждый может, ты сам поконкретнее напиши.
Если ответ будет в таком же духе, то давай перейдем во флуд, или открой новый тред со своим заголовком.

evgen5555

NET работает быстрее Java, но медленнее Native-кода.
А программы писать на нем удобнее. Эх, разорилась бы микрософт на полноценную платформу дотнет для никсов... Вот тогда будущее несомненно за шарпом.

freezer

1.7 Java Reflections - есть такое
1.9 unsafe
1.10 Атрибуты
1.11 foreach
1.12 не обязательно ловить все исключения
1.13 using ("полуавтоматические" переменные)
4. .NET поддерживает много языков, т.е. можно написать класс на одном языке и образовать от него потомка на другом. Исключения вызванные в одном языке нормально отловятся в другом.

freezer

.NET работает быстрее Java, но медленнее Native-кода.

нетовский код перед выполнением преобразуется в native JIT-компилятором (кстати, Java начиная кажется со 2-й версии это тоже умеет так что то что ты написал - полная лажа. Распространение в бинкоде выгоднее (в плане производительности) чем распространение в родном коде, но хуже чем распространение в исходниках

evgen5555

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

freezer

ну это зависит от кода, насколько он медленно исполняется... Если прога пишет HelloWorld, то затраты на JIT весьма существенны, но они однократны (по крайней мере до перезагрузки). И еще, JIT не компиляет прогу целиком, а только если этот конкретный код понадобился для выполнения. Т.е. некоторые методы могут вообще никогда не компилироваться, если они не используются

markmsk

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

evgen5555

Товарищ со своим фортраном, гзипом, бзипом и широчайшим кругозором всех победил

markmsk

Но мне больше интересно сравнение с обычным плюсатым, так как на работе вопрос стоит переходить на С# или оставаться на С++ Билдере.

freezer

прежде всего плЮсы c# по сравнению с c++:
GC, properties, attributes, check bounds почти без ущерба скорости
Минусы:
нет templates (а те что делают, все равно будут беднее если грамотно прогать то C++ быстрее, managed C++ имеет почти все плюсы c# и c++

markmsk

>если грамотно прогать то C++ быстрее
Билдер по любе медленнее.

freezer

м.б. Я просто такой фигней не пользуюсь. Да, c# компиляет в разы быстрее чем VC++, IC++ и GCC

markmsk

Вот это уже достойный плюс.

oleg_n

Нетовский код - это байт код?
Или что-то наподобие того, что должно было реализовано в опертоне?
(Может быть даже название языка не правильно вспомнил, но фишка в том, что вместо
байт кода хранится какое-то подобие синтаксического дерева, машинно-независимое. И при загрузке проводится
полноценная оптимизация, а не её JIT подобие)

Chupa

имеется ввиду Oberon?

oleg_n

о, полюбому!

xz_post

"NET-овских код", или MSIL - состоит из набора команд (см структуру OpCodes) - на самом деле очень схожих с ассемблерными

oleg_n

тогда большой скорости по сравнению с явой там быть не может?

xz_post

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

6yrop

Я смотрю тут много больших специалистов по компиляторам. Неужели вы думаете, что Microsoft берет и специально делает плохо, зная, что существует лучшее решение.
Мое мнение такое, у Microsoft-а есть деньги, и поэтому она может пригласить ведущих специалистов в этой области. А поскольку у нее хватило денег, чтобы начать такой масштабный проект, значит, появилась возможность учесть недостатки и C++, и Java и др. Почти всегда вещь, разработанная заново, оказывается лучше.

Ivan8209

Дайте ссылку на техописание CLR и IL.
Мои оказались битыми.
---
...Я работаю...

6yrop

я сейчас без Инета сижу , на www.msdn.microsoft.com найдешь

oleg_n

не специалисты по компиляторам
я просто взываю к здравому смыслу
а вот ты делаешь голословные утверждения
(вот много денег у микрософта, а всё же хенрю то и дело выпускают)

Ivan8209

Я там уже копал.
Не нарыл.
---
...Я работаю...

Chupa

> вот много денег у микрософта, а всё же хенрю то и дело выпускают
они могут себе позволить выпускать херню
всё равно будет спросом пользоваться

xz_post

тут
projects\book

Ivan8209

"Руки у меня коротки..."
---
...Я работаю антинаучным аферистом...

6yrop

> вот много денег у микрософта, а всё же хенрю то и дело выпускают
они могут себе позволить выпускать херню
всё равно будет спросом пользоваться
Всё таки пользователи .Net не "домохозяйки", в отличии от пользователей Ofiice и Windows
И не всё от Microsoft-a хуйня, например, MS SQL Server очень приличный продукт

6yrop

они могут себе позволить выпускать херню
всё равно будет спросом пользоваться
Почему? В технологиях для Интернета MS отнюдь не лидер, и им нужно заваевывать рынок, поэтому твое утверждение не понятно.

Chupa

> Почему?
Потому что.
> В технологиях для Интернета MS отнюдь не лидер, и им нужно заваевывать рынок, поэтому твое утверждение не понятно.
Разные цели - разные методы.
Моё утверджение относилось именно к той области где херню съедят.

oleg_n

ты утверждаешь, что будет существенное повышение производительности при переходе от байт кода к какому-то абстрактному ассемблеру?
imho байт код и есть самый абстрактный ассемблер с ориентацией на стек

Chupa

производительность много где НЕ нужна
особенно во всяких гуях
зато писать и отлаживать код проще, да и выглядеть всё будет одинаково

6yrop

Это ты мне написал? (тут два разных Шурика, разница в последних буквах)

oleg_n

ява уж слишком не блещет производительностью в гуях

oleg_n

тебе, наверное :-)

6yrop

Но я ничего такого не писал.

Dasar

Потому что там и контролы тоже написаны на самой Java-е. В .Net-е используются стандартные Window-ые контролы, которые заоптимизированны на полную катушку.

Biglem

К тому же ява нацелен на реальную мультиплатформенность, то есть даже выглядят одни и те же проги в разных ОС одинаково
А вот шарп я так понимаю этого уже не дает
Хотя, с другой стороны уж этим как раз можно было пожертвовать ради скорости в гуе - это то, чем можно привлечь юзера (точнее, не оттолкнуть)

oleg_n

единственное, что меня привлекло в яве - это действительная мультиплатформенность
какой тогда высший смысл тогда в шарпе?

abrek

> единственное, что меня привлекло в яве - это действительная мультиплатформенность
маза tcl/tk на гораздо большем числе платформ работает

freezer

ну и что?.. можно и на С++ писать мультиплатформенно (исходники будут 100% переносимы)... Вообще-то до-бемоль изобретался тоже как мультиплатформенный язык, допускающий легкий перенос с 32-битной платформы на 64-битную

freezer

или Qt

Biglem

Ну, в общем-то этому была посвящена достаточно большая часть предыдущего треда про шарп (которая с флудом)
Но мне так никто и не объяснил в чем его реальные преимущества и зачем реально нужен байт-код, если это не мультиплатформенность
В общем все мутно очень. Я пришел к выводу, что мелкософт запудрил всем мозги, а люди прочидав книжки по шарпу продолжают пудрить мозги всем остальным, т.к. реальных преимуществ как не было так и нет
Кстати, насчет tcl/tk, тогда уж реальнее использовать Qt - это будет мультиплатформенность без потерь. Но тут неизбежна компиляция, да и с существованием Qt и tcl/tk под все платформы - проблема. А вот про JVM я слышал даже о версии под Plan9. А это говорит о многом - Java это действительно мультиплатформенный язык

xz_post

The JIT compiler, relying on the results of the loader’s activity, compiles the methods encoded in IL into the native code of the underlying platform. Because the runtime is not an interpreter, it does not execute the IL code. Instead, the IL code is compiled in memory into the native code, and the native code is executed. The JIT compilation is also done on demand, meaning that a method is compiled only when it is called. The compiled methods stay cached in memory . If memory is limited, however, as in the case of a small computing device such as a handheld PDA or a smart phone, the methods can be discarded if not used. If a method is called again after being discarded, it is recompiled.
По моему, MSIL нужен в первую очередь для независимости от языка, и только потом для реализации мультиплатформенности. Ну я думаю, что .NET ни когда не будет перенесен на 100 процентов на другую платформу. По моему .NET без Windows нет .NET !
Скажите, как работает JAVA если, если утверждается, что JVM - интерпретатор ?

xz_post

По поводу запудривания мозов - я бы согласился. Но чем вас не устраивает этот вариант ? Ведь от этого выигрывает (=получает бабло) MS, Вы как программист, ну может быть и пользователь. Можно хоть 1000 постов тут зафлудить, про то какая дрянь эти продукты МС, но около 80% из Вас если не больше, все равно напишут свои дипломы или курсовые в Word-e, а не каком нибудь Техе... - вот реальность !
Надеюсь так и далее будет продолжаться...

Biglem

вот-вот, прочитал я это и понял, что это одно и то же
и там JIT, и там JIT
а насчет интерпретации, то версии Java 1.0 и Java 1.1 поддерживали только интерпретацию, JIT введена в версии 2.0
если непонятно слово "интерпретация", то пример тому языки Perl, Python, Javascript, ну или если тебе будет ближе, то Basic
В общем, наконец-то, я могу утверждать:
Никаких новшеств Некрософт в области bytecode по сравнению с Java не ввела !

freezer

я от кого-то слышал что байткод Java изначально разрабатывался как интерпретируемый язык, а IL -изначально как компилируемый, поэтому последний компилируется лучше (качественнее, быстрее)

Biglem

Надеюсь так и далее будет продолжаться...

За одно это я уже готов убить. Это означает, что человек не понимает во всем этом ровным счетом ничего.
Только не обижайся, пожалуйста. Это мне как раз обидно.
Ну неужели тебе станет хуже от того, что люди будут использовать что-то еще кроме винды?
ответь мне
а насчет ворда, тут ты опять не прав. Лекции сам небось Теховские ботаешь?
А кроме Теха есть и другие форматы ведь. pdf, ps, html, различные форматы OpenOffice и StarOffice
OpenOffice.org, к примеру, ничем не хуже для написания курсовой чем M$ Office
Я, например многие вещи в vim'е в несколько раз быстрее чем в чем-либо еще набираю (это об удобстве)
Готов посоревноваться
А к моему диплому, я искренне верю, что Micro$oft сильно сдаст позиции. И ты, к примеру, уже будешь придерживаться совсем другого мнения
И это не голые слова
Но мы опять ушли от темы
Без обид

Biglem

Я лично читал, что в байт-коде Java много оптимизаций для того, чтобы он быстрее переводился в машинный код
Возможно ты слышал о пресловутых 1.x версиях. Но эти версии очень разительно отличаются от 2.0
Собственно, если бы Java был тем чем он был до 2.0, то и революции он особой бы не свершил и поклонников не завоевал бы
Так бы и остался Oak'ом

oleg_n

по этому поводу у меня был пост
IL - это ещё один ассемблер типа байт кода или нет
на сколько я понял, что принципиально IL от байт кода далеко не ушёл
Java изначально, по-моему, вообще разрабатывался как язык для холодильников

xz_post

Да нет, я не обиделся конечно . Я не против не-MS - продуктов и технологий. Просто мое знакомство с миром не-Windows состоялось слишком поздно. Менять что то сейчас - нет уже времени... Сейчас бы с виндой разобраться...
Со Starофисом знаком, Work мне ближе. С аналогами Exell & Work из Linux также немного поработал - ну не понравились они мне...;; но pdf для просмотра конечно лучше... Но это не важно. Важно то, что потребители технологий MS будут всегда существовать. Так было, так будет... Факт... Это почти как религиозный фанатизм... а Майкрософт почти как секта...
По поводу флуда - завтра утром создадим новый thread.
Ну я Вас пока покидаю, завтра экзамен, я еще ничего не открывал... Спокойной ночи...

Dasar

Мультиплатформенность бывает разная.
Есть мультиплатформенность на уровне операционной системе, а есть мультиплатформенность на уровне процессора.
.Net в первую очередь сделан для того, чтобы была мультиплатформенность на уровне процессора.
ps
Или другими словами: .Net работает на любой платформе, но на которой установлен Windows.

Biglem

по-моему ps вошло в противоречие с остальным постом
если я на процессор PowerPC поставлю винду, то шарп на нем пойдет?
а если на x86 поставлю Линукс, то тоже пойдет
обратное тоже верно так выходит

Dasar

> если я на процессор PowerPC поставлю винду, то шарп на нем пойдет?
да, пойдет.
> а если на x86 поставлю Линукс, то тоже пойдет
не пойдет
конечно, если поставить на Линукс Моно-вский framework, то пойдет, но опять же не в полном объеме.

Biglem

мультиплатформенность на уровне процессора.

тогда о чем ты?

Biglem

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

Dasar

Когда я говорил "на уровне процессора" я имел ввиду: мы получаем независимость от процессора.

Dasar

Появилась реальная альтернатива Java-е и при этом более стандартизованная, и можно даже сказать более открытая и свободная.

6yrop

и по-моему сейчас если писать под Windows, то надо на .Net-е, даже Borland теперь перешла на .Net

Dasar

> получили инъективное вложение шарпа в яву
если про шарп еще можно так сказать, то про .Net уже нельзя так сказать.
у .Net-а есть более главное преимущество: .Net не зависит от языка, что дает намного большую гибкость

serega435

java - дерьмо!
глупая и неудачная шутка сановцев
1. невозможность переопределять операторы - ваще сакс
2. да и названия классов, а-ля NoSuchAlgorithmException уже многое говорят
3. а про try\catch дак это вообще нереальная проблема - вынужденные try\cath для throw-функций иногда достают вконец
4. без дефайнов тоже весьма неприятно бывает (необходимость дефайнов как раз из-за долбонуто-длинных названий бывает)
5. ещё нельзя передавать простые типы (int) в функции по ссылке, приходится передавать класс
6. вывод дебужного сообщения - System.out.println(...) радует своей краткостью
и т.д.
//добавлено
7. Класс String имеет только одноразовое присваивание
единственная приятная вещь - это printStackTrace
про С# ничего не знаю, но не думаю, что они далеко от явы ушли

xz_post

почти все недостатки java описанные вами тут также есть на C#/NET, а оставшиеся - уже испавлены в последней версии java

serega435

что есть последная версия явы?
у меня 1.4.2 вроде бы

xz_post

Я не знаю Что есть последняя версия java, так как ей не пользуюсь, единственное замечание - тут умные люди сказали про 3) - уже отлов исключений не обязателен. Многие проблемы (практически все )исправлены. Если не прав не бейте.

xz_post

Да снова перечитал ваш пост, C# стал даже роднее

xz_post

По поводу если писать под Windows, то надо на .Net-е.
Абсолютно с Вами согласен. Конечно, для более низкоурвневых задач М$ пока слава Богу
разрешает использовать более подходящие средства. А с выходом Longhorn & Yukon этот вопрос вообще станет не актуальным. Например в Longhorne писанина с использованием Win32-API считается примерно уровня DOS. Даже к привычному сейчас WinForms надо обращатся через механизм напоминающий p/invoke (сейчас пока используется для работы с com & dll). Вы вообще в курсе как будет выглядеть программирование под Longhorn ? Это будет больше напоминать создание страниц на ASP.NET. Ну вот скажите, что это не рекламный трюк...

xz_post

Кстати, если интересно, тут projects\book лежат 2 последних номера MSDN. Один полностью посвящен Longhorn, другой Yukon'у

6yrop

Это будет больше напоминать создание страниц на ASP.NET

а сейчас не так?

xz_post

Вы слышали про Avalon ?

Biglem

Это будет больше напоминать создание страниц на ASP.NET

неужели все будет так же коряво и убого? (спрашиваю как программист на ASP с полугодовым стажем)

6yrop

про это вроде не слыша, про то что в Лонгхорн будет понимать какие-то свои теги слышал

xz_post

Да не переживайте так ! По крайней мере окошки Hello, Avalon выглядят очень даже красиво


xz_post

По поводу тегов - их я и имел ввиду сравнивая с ASP.NET. Опять какая-то ненормальная любовь к XML.
Вот будующий аналог WinForms (кнопка)
<Button FontSize="24pt">
<Text>
<Image Source="Calc.jpg"/>
<LineBreak/>
Calculate
</Text>
</Button>

Biglem

а где тут красота?
не дай Бог такое приснится
ужас какой-то
это у тебя такая винда или это вас всех ждет в длинном и толстом горне?

6yrop

Меня вот, что интересует. Как скажется на программировании то, что интерфейсная часть будет храниться в виде XML?

abrek

а где же координаты в пикселах?

xz_post

Практически никак не измениться
Но вот про Windows.Forms вероятно следует забыть. На смену им придет пространство имен MSAvalon.Windows;
<def:Code>
<![CDATA[
void ButtonClick(object el, ClickEventArgs cea)
{
Button btn = (Button) el;
FlowPanel parent = (FlowPanel) btn.Parent;
parent.Children.Remove(btn);
parent.Children.Insert(1, btn);
}
]]>
</def:Code>
Не, честно говоря я и сам на это смотреть без смеха не могу...

Biglem

В CDATA это все засунуть - это сильно

xz_post

По поводу координат ? Вы часто используете их в HTML ? А как часто юзаете CSC ? Так вот, в longhorne будет CSC-подобное... но на XML !

6yrop

это чё бедный программер будет созерцать эти ужасные уговые скобочки?

xz_post

какая винда - по старинке w2k. Но уже заставляют переходить на longhorn... прямо так и пинают...

Biglem

CSC - это что?
CSS ?
Знаете, а у нас в уродских других ОС.... так вот... представляете... там XML используется там, где он нужен, а не наоборот

abrek

Гы.
А откуда возьмутся визуальные рисовалки формочек, которые будут обходиться без координат?

xz_post

таблица стилей - очепятка

xz_post

да есть там конечно координаты

Ivan8209

Не для этого он изобретался.
Иначе в нём бы не было "++" и "--", определённых из-за используемой машины.
---
...Я работаю антинаучным аферистом...

Dasar

В хорошем пользовательском интерфейсе - очень мало координат (почти совсем нет и много Layouter-ов.

freezer

поясни... при чем тут ++ ?

Ivan8209

При особенностях PDP-11.
---
...Я работаю антинаучным аферистом...

freezer

выражайся конкретнее. В c# есть операция ++ - и это говорит о том что процессор... <нужное вставить>
у проца обязательно должна быть инструкция INC - не факт, без нее можно обойтись

Ivan8209

Си разрабатывался не для лучшей переносимости с платформы на платформу, сказки про переносимый ассемблер более --- позднего времени.
"++" связана с PDP-11 очень просто:
MOV R0R5)+
MOV -(R5R0
Обрати внимание, что ни один _переносимый_ язык, то есть, не опиравшийся на низкоуровневое представление, не имеет подобных извратов.
---
...Я работаю антинаучным аферистом...

freezer

я так и не понял, что ты там написал с R0 и R5 ... у меня это выглидят так:

int a=1;
00579644 C7 45 E8 01 00 00 00 mov dword ptr [a],1
a++;
0057964B 8B 45 E8 mov eax,dword ptr [a]
0057964E 83 C0 01 add eax,1
00579651 89 45 E8 mov dword ptr [a],eax


хотя я бы написал


inc dword ptr [a]


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

Ivan8209

> Вообще-то до-бемоль изобретался тоже как мультиплатформенный язык,
"До-бемоль" изобретался как одноплатформенный, платформа --- PDP-11.
> допускающий легкий перенос с 32-битной платформы на 64-битную
Мало того --- 16-разрядная.
---
...Я работаю антинаучным аферистом...

freezer

пардон, тогда не до-бемоль, а ре-бемоль перепутал
для чего язык B делали - это я не знаю, и то что операция ++ не переносима - меня никто не убедит

Ivan8209

Не перенимай дурных привычек.
В России, B --- это си-бемоль, си --- это H.
---
...Я работаю антинаучным аферистом...
Оставить комментарий
Имя или ник:
Комментарий: