catpad: (Default)
[personal profile] catpad
Почти пять лет я программировал на Java, а вот теперь на новой работе буду программировать на С++, в связи с чем его повторяю (по очень, кстати, хорошим книжкам Scott Meyers "Effective C++" и "More Effective C++"). Складывается у меня впечатление - после долгого перерыва - что, когда пишешь на С++, нужно держать в голове кучу, КУЧУ всяких разных вещей, которые в принципе ничего не прибавляют к программе, а только делают её более запутанной, а работу гораздо более сложной. Всё время нужно думать о том, кто именно освобождает память; писать специальные wrappers, которые эту память будут автоматически освобождать; переопределять их операторы; помнить о том, какие именно операторы переопределены; следить, чтобы деструкторы на бросали exceptions; думать, как лучше exceptions ловить - by value, by reference, by address - и кто будет освобождать после них память; всё время следить за тем, деструктор какого объекта вызывется в каком блоке; и так далее, и так далее...

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

Date: 2006-07-13 02:08 am (UTC)
From: [identity profile] vasja-iz-aa.livejournal.com
В зависимости от собственных капризов или требований задачи можно выбирать стиль и писать в диапазоне от низкоуровневого байто-адресного Си до вполне абстрактных ООП конструкций. Одним языком в одном проекте.

Date: 2006-07-13 04:13 am (UTC)
From: [identity profile] cema.livejournal.com
Только возможность самому написать всякий нужный механизм при необходимости. Если необходимости такой нет, то и C++ не нужен.

Date: 2006-07-13 09:58 am (UTC)
From: [identity profile] catpad.livejournal.com
Ну, всякий нужный механизм можно и на Джаве написать, кроме низкоуровневого, конечно.

все что вы описали

Date: 2006-07-13 04:27 am (UTC)
From: (Anonymous)
это возможные варианты действий в рамках языка. надо выработать свой не стиль, а как это - best practice - и вперед. типа - эксепшны ловить только по const-ref. операторы не переопределять вообще никакие и никогда. пользоваться STL во все дыры, там где не достаточно STL, пользоваться ACE.
о фичах конкретно языка - мне нравиться четко определенное время жизни объекта в скопе - вышел вон, позвали деструктор.
но вобщем и целом - какя разница на чем писать профессионалу? надо будет и на бейсике сбацаем. TCP мессадж останется TCP мессджем no matter what.

Date: 2006-07-13 04:52 am (UTC)
From: [identity profile] cema.livejournal.com
Oх, бэйсик... любимая мозоль. Игра в кубики.

Date: 2006-07-13 06:38 am (UTC)
From: [identity profile] kamarado.livejournal.com
Не знаю, но насколько я понимаю ничего нет и быть не должно. Всё-таки хоть так и не принято говорить, но это несколько разные уровни. Ты с C# сравнивай Java, тогда может и ответы какие-то внятные будут.

Date: 2006-07-13 10:02 am (UTC)
From: [identity profile] catpad.livejournal.com
C# нет смысла сравнивать с Java, потому что это одно и то же. В этом и был смысл моего вопроса - чем С++ лучше Java, а не в чём мизерные различия между Java и C#.

Date: 2006-07-13 06:47 am (UTC)
From: [identity profile] navy-99.livejournal.com
В С++ есть templates - очень мощная штука - я не программировал на Java, но максимум, что там может быть - это аналогия C# generics.

В С++ есть детерминированное уничтожение - то есть в С# оно тоже есть, но то что будет писаться в С++ как (не знаю про Яву, думаю там тоже нет)

{
Class a;
...
// тут уничтожаем
}

в С# будет писаться как
using (Class a = new Class())
{
...
//тут уничтожаем
}

Конечно,Java намного красивее и удобнее С++ в целом, но вообще они нужны для абсолютно разных задач, и С++ разрабатывался в первую очередь с уклоном в сторону производительности а не usability.

Date: 2006-07-13 10:03 am (UTC)
From: [identity profile] catpad.livejournal.com
Я как раз считаю, что generics - это как раз то, что надо - не больше и не меньше. А вот всё это метапрограммирование на templates - это всё чушь какая-то, по-моему.

Date: 2006-07-13 10:31 am (UTC)
From: [identity profile] navy-99.livejournal.com
Ну да, человек привыкает к тому с чем работает =)

Опять же, templates разрабатывались в первую очередь с точки зрения производительности, и являются просто продвинутым #define

Date: 2006-07-13 10:22 am (UTC)
From: [identity profile] sean-mcgregor.livejournal.com
Типа, прописные истины :)

1. В JDK 1.5 есть темплейты.
2. В Java нет нужды в уничтожении - есть Garbage collector.

Date: 2006-07-13 08:53 am (UTC)
From: [identity profile] potan.livejournal.com
Generic в Java появился недавно. В C++ это развитое средство, которым многие умеют пользоваться (а некоторые даже используют его именно там где надо :-)).
По наличию готовых библиотек плюсы на первом месте.
Легче, чем на Java, работать с железом и в режиме реального времени.

Хотя на мой взгляд Cyclone и OCaml вместе покрывают все приложения C++ и каждую конкретную задачу решают значительно лучше.

Date: 2006-07-13 10:07 am (UTC)
From: [identity profile] catpad.livejournal.com
Насчёт готовых библиотек не соглашусь ни в коем случае. Ничто не сравнится с Джавой по количеству и разнообразию библиотек.

Date: 2006-07-13 02:47 pm (UTC)
From: [identity profile] potan.livejournal.com
Ну по разнообразию - врядли. Я ни одной джавной библиотеки поддержки Smart Pointer не видел :-))).

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

Кстати, стыковка с другими языками в плюсах легче.

Date: 2006-07-13 09:57 am (UTC)
From: [identity profile] dimas.livejournal.com
Ну ... я бы не сказал что приходится держать все это в "активной памяти" ... После нескольких лет активного программирования на С++ (особенно если в команде есть нормальный Code Style Guide и лиды) "набиваешь руку" на правильных приемах и спокойно педалишь быстрый и безопасный код ...

Я слабо знаю Яву (как-то пришлось написать пару "сноповязалок", правда с разбором XML и обращением к БД), так вот меня сильно раздражало то, что невозможно определить когда об"ект действительно умрет (ну разве что постоянно вручную звать GC, и то не всегда помогает), из-за этого привычные С++ шаблоны поведения перестают работать ...

Date: 2006-07-13 10:06 am (UTC)
From: [identity profile] catpad.livejournal.com
Это всё верно, конечно. Я просто долго на нём не писал.

На самом деле, когда привыкаешь к Java, то уже не думаешь о том, когда объект умрёт - просто не обращаешь внимания. Вместо этого думаешь о том, когда правильно вызвать какую-нибудь деструктивную функцию. То есть, это примерно то же самое, но мне гораздо больше нравится, что это поддаётся чёткому управлению и не происходит автоматически.
Впрочем, достаточно поработать на С++ немного и всё станет наоборот :)

Date: 2006-07-13 10:34 am (UTC)
From: [identity profile] dimas.livejournal.com
Проблема в том, что у С++ у меня есть выбор, с Ява - нет.

Я не думаю об этом специально, но есть масса удобных техник, на этом построенных ... В результате пишется сильно меньше кода "отката состояния", например ...
From: [identity profile] mataanin.livejournal.com
когда я учился java мне показалось что всё равно нельзя оставлять освобожедение наобум: мне казалось (и кажется, потому что вся моя Java закончилась в университете), что всё равно надо следить за тем какие объекты как связаны и вполне разумным показались всякие weak reference. Я очень радовался методу clear в колекциях:) если надо было много объектов перемещать из оного место в другое

пишу я это, потому что мне страно что никто ещё не упомянул, то о чем говорю я, а имено то, что в Java, как мне кажется, всё равно надо думать о памяти.

В то время насколько я понимаю языки программирования, "оканчивающие" функции Java семантически более обоснованы, чем традиция вызывать "заканчивающий" код в деструкторах, которые на мой взгляд были разработаны для отчистки памяти (что в принципе объясняет их почти-отсутствие в Java). Тоесть по-моему, деструкторы не для "заканчивающего" кода. Это либо традиция, либо стиль или bad habit%) моего опыта не хватает для вынесения вердикта

Off

Date: 2006-07-13 04:57 pm (UTC)
From: [identity profile] green-fr.livejournal.com
Кето, я фотки старый разбираю, докопался до 2003 года, мы у вас.
Слушай, приезжайте уже в гости, а?

Re: Off

Date: 2006-07-15 04:17 am (UTC)
From: [identity profile] catpad.livejournal.com
Это хороший вопрос, но он не подлежит обсуждению в ЖЖ.
Выходи на связь!

Date: 2006-07-21 06:39 pm (UTC)
From: [identity profile] luarvique.livejournal.com
Интересно было бы услышать ваше мнение - а есть ли хоть что-то, в чём С++ удобнее Java ?
На С++ можно писать полезные программы. На Жабе нет. Любая с виду полезная программа на Жабе или не работает вообще или работает слишком медленно.

Все остальное упомянутое про C++ - синтаксический клей необязательный к использованию. Большинство людей использует C++ как "better C", без шелухи.
Page generated Feb. 6th, 2026 06:27 am
Powered by Dreamwidth Studios