powered by simpleCommunicator - 2.0.57     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / C# глазами Java
11 сообщений из 11, страница 1 из 1
C# глазами Java
    #32649278
Яков Сироткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оригинал можно посмотреть на
http://telamon.ru/articles/csharpfromjava.html
=========================================================
Есть два подхода к сравнению языков программирования: религиозная война и «a нам всё равно». Я постараюсь втиснутся между ними и начну с общего. Ключевой особенностью и Java, и C# является автоматическое управление памятью . Конечно, оба языка из-за этого совершенно не подходят для написания ядра операционной системы, но зато существенно упрощают разработку прикладных программ, потому что:


остаётся меньше возможностей для memory leak;
не надо писать код для освобождения памяти;
можно написать f(g(x)) и не думать об освобождении памяти от результата g(x) .

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

Влияние Microsoft
Исторически Java появилась раньше .NET и потихоньку захватывала рынок не только серверного ПО, но и GUI-приложений для корпоративных клиентов, потому что C++ сложноват для рисования формочек, Visual Basic не похож на язык для крутых девелоперов, а Borland инвестировал в Java больше, чем в Delphi.

Но чем больше приложений на Java, тем меньше потребность в Windows, поэтому Microsoft решил не поддерживать Java, а создать .NET, чтобы стимулировать разработку программ для Windows. Кончено, какая-то кроссплатформенность у .NET есть, но, с точки зрения Windows, .NET стремится стать частью операционной системы, как Internet Explorer. Карьера .NET-разработчика предполагает тесные партнёрские отношения с Microsoft, включая использование среды разработки Visual Studio, базы данных MS SQL и системы контроля версий Visual SourceSafe.

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

CVS vs. VSS
Большинство Java-разработчиков привыкли к CVS, после этого переход на Visual SourceSafe в сочетании с реализацией интеграции с ним в Visual Studio и концепцией solutions-projects воспринимается весьма болезненно. Справедливости ради стоит отметить, что переход на CVS в большом проекте теоретически возможен, но вызовет крайне негативную реакцию людей, привыкших к VSS.

В этом месте можно было бы немного помахать кулаками на тему «почему CVS лучше VSS», но я этого делать не буду, потому что CVS тоже не идеален, и есть такой проект как Subversion , который открыто позиционируется в качестве замены CVS. Microsoft тоже не считает VSS своим флагманским продуктом и готовит ему замену в виде Visual Studio 2005 Team System .

Влияние VB.NET
Программы на многих языках могут быть скомпилированы в байт-код для JVM, но практически абсолютно всё программное обеспечение для платформы Java написано именно на Java. Для .NET примерно с равной вероятностью проект может разрабатываться как на C#, так и на VB.NET, причём очень часто используются сразу оба языка.

Понятно, что C# и VB.NET практически не имеют между собой отличий, кроме синтаксиса, но вносят раздробленность в сообщество разработчиков. Даже если использовать только на C#, то в результатах поиска по документации всегда будут путаться материалы, относящиеся к VB.NET. В десктоп-версии MSDN можно настроить фильтр по языку программирования, но всё равно, на мой вкус, документация по Java значительно удобней и понятней .

Разработка GUI
Разработка GUI на C# являет типичным примером RAD , как Delphi. На Java GUI, как правило, делается при помощи Swing. Хотя Swing весьма объёмен и сложен, хорошая продуманность и расширяемость архитектуры в сочетании с доступными исходными кодами позволяет разрабатывать GUI любой сложности.

Разработка веб-приложений
Я съел собаку на разработке веб-приложений на Java, но никогда не использовал ASP.NET; тем не менее, я вполне допускаю, что ASP.NET имеет определённые и весьма существенные преимущества при создании небольших сайтов. Однако, эти преимущества выделяют веб-приложения в отдельный сегмент, очень многие .NET-разработчики специализируются либо только на GUI, либо только на веб. На Java веб-приложения можно создавать без использования каких-либо специфических технологий вроде JSP, JSTL или Struts: extends HttpServlet — и вперёд!

Конечно, рынок разработки сайтов Java без боя не отдаст, можно ожидать новостей от JavaServer Faces или от Fabrique . В любом случае, делать веб-странички — это не самый сложный класс задач для современных языков программирования.

Is everything object?
В Java очень популярен лозунг "Everything is object", в C# это не так. Первое, что бросается в глаза — наличие структур в C#. Очевидно, что есть мотивы использовать структуры для повышения производительности, но мне кажется, что современные компьютеры достаточно производительны, чтобы не добавлять ещё одну сущность в язык.

Также, вместо анонимных классов в C# используются делегаты, это такая идея о том, что если у метода есть определённый набор аргументов и заданный тип возвращаемого значения, то совершенно не важно, как он называется, является ли он статическим и прочие глупости — можно его дёргать.

Если уж зашла речь о delegate, то нужно упомянуть и об event — они действительно сокращают размер кода при разработке GUI, хотя и ценой отступления от идей ООП.

В определённой степени C# менее лаконичен , не вдаваясь в подробности, ограничусь упоминанием ключевых слов virtual, override, ref, out и param, не имеющих аналогов в Java.

Влияние платформы на самосознание программистов
Безусловно, больше всего на качество программного обеспечения влияет качество самих разработчиков, а не язык программирования. Тем не менее, мой опыт говорит о том, что в подавляющем большинстве проектов на Java для build management используется Ant , а в .NET очень часто билды делаются встроенными средствами Visual Studio, хотя аналогичные инструменты существуют и для .NET. Кроме этого, в C# нет чётких правил наименования классов и их размещения на диске , что часто вносит дополнительную путаницу (конечно, квалифицированные программисты успешно борются с этой проблемой).

В С# нет checked exceptions, есть даже объяснение почему . Такое решение имеет свои резоны, но если компилятор не контролирует обработку checked exception, то нужно больше рассказывать об обработке ошибок через другие коммуникационные каналы, иначе появятся программисты, которые вообще не будут знать, что такое exception.

Тигры рвутся вперёд
Есть области, в которых Java доминирует безусловно , например, игры для мобильных телефонов или технология JavaCard. Однако, борьба между C# и Java за долю на рынке будет идти ещё долго, обе платформы будут совершенствоваться, например, в Java 5 и .NET 2.0 появится поддержка generics.

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

Благодарности
Огромное спасибо Дмитрию Жемерову , благодаря которому вам не пришлось читать всю ту ерунду, которую я написал сначала, компании DataArt, которая дала мне возможность заниматься изучением C# в рабочее время, коллегам из компании DataArt , которые оказывали мне интеллектуальную и моральную поддержку, а также компании JetBrains , которая очень вовремя начала делать ReSharper, который позволяет получать на C# многие виды удовольствия, привычные пользователям IntelliJ IDEA. Особая благодарность Алексею Пчелинцеву за заботу о букве Ё .

Ссылки
1. The C# Programming Language for Java Developers
http://msdn.microsoft.com/vstudio/java/gettingstarted/csharpforjava/

2. J2EE fundamentals for .NET developers
http://www-106.ibm.com/developerworks/java/library/j-roadmap1/
...
Рейтинг: 0 / 0
C# глазами Java
    #32649389
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
---остаётся меньше возможностей для memory leak;

Для людей правильно пишуших такая проблема практически не стоит.

--не надо писать код для освобождения памяти;
--можно написать f(g(x)) и не думать об освобождении памяти от результата g(x).


Справедливо для задача класса Notepad

Но когда обьем данных достаточно велик такие безконтрольные операции делают работу с программой крайне неэффективной

--мировые софтверные гиганты

вы что-то путаете. Microsoft и Sun это как кит с планктоном. Как в финансовом смысле, так и по обьему захваченного рынка.

--потому что C++ сложноват для рисования формочек,
как синтаксис языка связан с RAD ? Не нравится VC++ пользуйтесь BCB++


--Но чем больше приложений на Java, тем меньше потребность в Windows

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

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

Вот это действительно стоящая фраза
...
Рейтинг: 0 / 0
C# глазами Java
    #32649488
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
---остаётся меньше возможностей для memory leak;

Ведь действительно меньше, даже для правильно пишущих.

--не надо писать код для освобождения памяти;
--можно написать f(g(x)) и не думать об освобождении памяти от результата g(x).

Да, это освобождает от кучи рутинной работы.

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


--мировые софтверные гиганты

Если сравнивать Sun в его нише, и ms который пытается туда прощимиться.

--потому что C++ сложноват для рисования формочек,

что верно, то верно.

--Но чем больше приложений на Java, тем меньше потребность в Windows

Так и есть. Больше java - меньше преимуществ какой-то одной OS.
Если бы ms загодя об этом не думал - давно стал посредственностью.

--Безусловно, больше всего на качество программного обеспечения влияет качество самих разработчиков, а не язык программирования.
...
Рейтинг: 0 / 0
C# глазами Java
    #32649573
Яков Сироткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Под мировыми софтверными гигантами имеются ввиду IBM и Oracle, ещё есть производители телефонов с поддержкой J2ME.

Про то, что с интенсивно создающимися объектами нужно бороться - это очень верно, в этом смысле можно говорить, что языки с автоматической сборкой мусора сложнее, потому что есть фактор, который девелоперы не контролируют. Но в этом плане C# от Java не отличается.
...
Рейтинг: 0 / 0
C# глазами Java
    #32651890
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-NotGonnaGetUs
--Сообщений: 75 ---остаётся меньше возможностей для memory leak;
--Ведь действительно меньше, даже для правильно пишущих.

В последнем своем проекте (почти 10 мег исходников) я ни разу! с этим не столкнулся.

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

Утечки в C++ - эти миф, запущенный любителями - новичками и адептами Java.
...
Рейтинг: 0 / 0
C# глазами Java
    #32659767
Constantine Voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lepsik-NotGonnaGetUs
--Сообщений: 75 ---остаётся меньше возможностей для memory leak;
--Ведь действительно меньше, даже для правильно пишущих.

В последнем своем проекте (почти 10 мег исходников) я ни разу! с этим не столкнулся.
...

В книгу рекордов Гиннесса!
...
Рейтинг: 0 / 0
C# глазами Java
    #32659771
Constantine Voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Яков СироткинОригинал можно посмотреть на
http://telamon.ru/articles/csharpfromjava.html
=========================================================
...

Блин, отчего все так не пишут? Без шума и крику, хорошим языком...
Спасибо! :)
...
Рейтинг: 0 / 0
C# глазами Java
    #32663421
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LepsikУтечки в C++ - эти миф, запущенный любителями - новичками и адептами Java.

Точно. Утечки в java тоже миф, запущенный любителями - новичками и адептами C++ :)

В С++ две порблемы с утечками: объект создан, но его не удалили по ошибке
(запутавшись в сложной логики или просто пропустив), и вторая, объекты сохраняются хотя уже не нужны, в последствии их всё-таки удалят, но до этого светлого момента, будет замусоренна куча памяти просто так.
Или я ерунду сморозил?

В Java только последний вариант.

Как ни крути, но с утечками в Java ничуть не сложнее, чем в C++ ^_^
...
Рейтинг: 0 / 0
C# глазами Java
    #32678474
ArchiMage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По поводу документации автор первого поста весьма погорячился...
Мне по роду деятельности писать на Java приходится на порядок больше, чем на C#,
но на втором на порядок проще именно из-за великолепнейшего MSDN-а.
...
Рейтинг: 0 / 0
C# глазами Java
    #32719404
Паниковский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Класс просто почему если прогу в Java закрыть дочерний процесс проги не отрубается?
утечки в Java есть искать надо лучше
...
Рейтинг: 0 / 0
C# глазами Java
    #32721083
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1.Если ты закроешь JVM, то все потоки подохнут: System.exit(0);
2.Если ты будешь объявлять потоки как демоны, они сами дохнут при завершении основного потока.
3.Если ты запускаешь новый процесс, то с какой стати ему дохнуть при завершении процесса родителя? если конечно речь шла о процессах (Runtime.exec("subProcess");). При желании его тоже можно убить: Process.destroy().
4.Все проблемы Java - малограмотные программисты, которые ее не знают, но берутся судить. (это для тех кто создает кода на 10Мб - видимо парень писал свою ОС :)
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / C# глазами Java
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]