Sunday, October 24, 2010

Выбор между Java и C#

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

Для решения всяких мелких (а порой и не очень) прикладных задач я обычно использую Python/Ruby. Однако после поступления в универ понадобилось нечто среднее между ними и С++, ибо:
1) в компьютерных классах попросту нет этих самых Python/Ruby;
2) всё-таки нужна производительность. Увы, скриптовые языки в этом плане от С++ отстают на порядок. Основной помехой в этом, наверное, является. концепция "всё что угодно есть объект". Теоретически — это изумительно: ах, вы только поглядите, у числа "2" вон сколько методов! А в Ruby on Rails и вовсе чёрт-те что можно творить, скажем, 2.hours вернёт 7200, а 7200.from_now вернёт время, которое будет через два часа. Так что вообще можно писать 2.hours.from_now. Изящно? А то! Но когда эти числа-объекты используются при перемножении матриц, весь их объектный характер нахрен никому не сдался, а лишние память и время жрутся.

А отчего же не продолжать использовать С++? Дело в том, что:
1) его стандартная библиотека содержит мало что. После использования Python кажется, что там вообще почти ничего нету. Java в этом плане великолепна.
2) непонятно, когда наконец выйдет новый стандарт, содержащий в себе кучу вкусностей — C++0x. А я тащусь от лямбда-функций, замыканий и всего такого. Кроме того, в стандарте С++ нет такой стандартнейшей (сорри за каламбур) вещи, как Dictionary (хэш-таблица). И меня убивает, когда только из-за этого к алгоритму добавляется логарифмический множитель.

Возможные варианты перехода — С#, Java, Delphi. Последний отпадает моментально, потому что... Да хотя бы потому, что мне лень эти проклятые begin-end-ы писать. Так что остаются первые два.

Так вот, результаты сравнения Java и C# (большое спасибо английской Википедии):
Java привлекает своей офигенной по размеру стандартной библиотекой. Прям как Python, идущий "с батарейками". Также здорово, что имена методов пишутся с маленькой буквы (я ж лентяй, шифт нажимать влом). Т.е. System.out.println мне нравится куда больше, чем System.Console.WriteLine.
Однако C# содержит вещи, без которых кодинг — тоска зелёная. Как можно жить без operator overloading, вы мне скажите, а?! Среди приятных вещей (в отличие от Java) также есть properties (ням-ням-ням!), лямбда-функции и замыкания, а также комплексные числа (начиная с .NET 4.0).

Так что, несмотря на всю свою нелюбовь к Microsoft и .NET, я пришёл к выводу, что пришла пора учить C#. Вот так вот.

1 comment:

  1. Есть еще такой критерий как количество сторонних библиотек. Java мир - он весь на библиотеках построен. В Java у меня до сих пор не возникало вопроса "где взять библиотеку" для такой-то задачи, возникал вопрос "какую из них выбрать", а в .Net куда ни глянь то платное, то недоделанное.
    Потом еще, Моно - реализация дотнета для Linux, как-то уж совсем неприлично сливает.
    А вот в плане самого языка - согласен. В C# много больше фич и возможностей. После него возвращаешься на Java и чувсвуешь себя каким-то инвалидом.

    ReplyDelete