пятница, 29 июня 2007 г.

Дискуссия Java VS .NET

Не могу сказать что я обожаю holy wars, но сам лично стараюсь в них не ввязываться.
Сегодня у меня состоялась дискуссия по ICQ с одним моим знакомым, и я, с его позволения, решил опубликовать наш диалог.

Будем надеяться, что кому-то это покажется познавательным.

Дмитрий: Ты можешь в двух словах обрисовать отличие Явы от Шарпа?
status_alexus: Могу
status_alexus: Java - это консервативная выжимка из C++. Выкинули все редко используемое, которое только добавляло головную боль программистам. Язык реально кроссплатформенный это большой плюс. Язык открыли по лицензии GPL, поэтому это только пойдет ему на пользу, его буду портировать и дальше. Основная GUI библиотека - Swing - выглядит как не родная под целевой OC.
status_alexus: Есть еще либа SWT - приложения выглядят как родные на Windows, Mac OS, Linux
status_alexus: Есть Java Community Process - это группа по развтию технологий языка. Одновременно хорошо и плохо. Хорошо, потому что язык будет более стабильным, не будут прикручивать сомнительные фичи, которые "перегрузят" язык. Плохо, потому что добавляет инертность к введению новых языковых конструкций.
Дмитрий: эм, ну а указателей ведь там нет, и есть GC, как в Шарпе? а нотация венгерская, как в Си?
status_alexus: C# основной язык платформы .NET
Таким образом, зная Framework Class Library можно писать на любом языке. Сейчас реально можно писать на C#, Visual Basic .NET, Iron Python и это огромный плюс.
status_alexus: Говорят что .NET вроде как тоже кроссплатформенный, но реально пока нет.
Дмитрий: А это, Mono?
status_alexus: Есть разработка в виде Mono, но нужно прилагать усилия, чтобы приложение везде работало.
Дмитрий: а, даже так...
status_alexus: Уже в версии 2.0 C# начал "обрастать" сомнительными, на мой взгляд, возможностями.
status_alexus: Мне очень не нравится Nullable типы. Я считаю что это лишнее. Это моя точка зрения.
Дмитрий: Так это для баз данных, имхо
status_alexus: Указателей в C# нет. GC есть. Соответственно, код стабилен и управляем.
status_alexus: да для баз.
Дмитрий: Тем не менее, Ява умирает. Почему?
status_alexus: Ха. Пошутил :)
Дмитрий: Чем Шарп её обскакал?
status_alexus: Java никогда не умрет ;)
Дмитрий: Ну эта... на твоей фирме 2 года назад на Яве было 20% проектов, сейчас - меньше 5% ;)
status_alexus: .NET ее обскакал кроссязыковостью, пиаром, а также тем, что в Microsoft к разработчикам относятся лучше, чем наверное к пользвователям ;)
Дмитрий: Хе... Как по мне, так для программирования в среде .NET во сто крат лучше использовать шарп, а не что-либо иное
status_alexus: Э тут ты не прав. Не всегда C# тебе подойдет.
Дмитрий: А когда не подойдёт? Когда в большом тиме и не с нуля пишешь?
status_alexus: Мне как-то пришлось использовать язык IronPython - это реализация языка Python под платформу .NET. Есть Windows Service который в зависимости от пришедших данных поднимает ту или иную Assembly, в которой есть реализация некоторого интерфейса. Так вот фабричный метод реализован на языке IronPython. Таким образом, мы можем позволить Deployment новой компоненты без останова сервиса, наживую.
status_alexus: Достаточно выложить новую Assembly и новый скрипт с фабричным методом.
Дмитрий:Мммм, не понял... Это только IronPython позволяет? Помимо возможностей CLR?
status_alexus: IronPython это язык интерпретируемый. А C# копилируется в MSIL
Дмитрий: Оригинально... Я-то думал, что все языки на платформе .NET компилируются в MSIL

Большое спасибо Дмитрию за поставленные вопросы.

4 комментария:

Анонимный комментирует...

IronPython не інтерпритується, він просто компілюється.

Про реалізацію сервісу яка підтягує різні ліби. З домену неможливо викинути збірку, а з цього виходить що там усі ті зборки накопичуються. Якщо це робити за допомогою звичайного C#, то треба створити новий домен, в нього завантажити потрібну збірку, і вже звідтіля викликати методи. Цим шляхом ти не робиш бомбу сповільненої дії, а все контролюєш.

Якщо хочеш можу невести декілька десятків проблем з Java ;).

Анонимный комментирует...

IronPython не інтерпритується, він просто компілюється динамічно, у той самий MSIL. Нещодано навіть це відрефакторили в окрему лібу. А ще десь з місяць тому випустили керований javascript, теж базований на цій лібі.

Alexey Diyan комментирует...

> Про реалізацію сервісу яка підтягує різні ліби. З домену неможливо викинути збірку, а з цього виходить що там усі ті зборки накопичуються.

Да, я знаю что сборку невозможно выгрузить из того домена, в которую она была загружена.

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

Скажи, а если я скажем в цилке вызову несколько раз LoadAssembly одной и той же сборки, то разве она будет загружена несколько раз?

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

> IronPython не інтерпритується, він просто компілюється динамічно.
Да, я об этом знаю. Просто решил не перегружать человека моментами, которые на мой взгляд не были критичны в контексте нашей беседы.

Анонимный комментирует...

LoadAssembly використовує Assembly.Load (принаймні в Silverligh, це треба дивитися в конкретному PlatformAdaptationLayer), тобто, якщо збірка дійсно з одним ідентіті, то все буде нормально. Але якщо вона постіно та сама, то я тоді не зрозумів навіщо уся схема?

До речі, дуже цікава примітка стосовно завантаження збірок.
http://blogs.msdn.com/suzcook/archive/2003/05/29/57143.aspx