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 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%) моего опыта не хватает для вынесения вердикта
Page generated Feb. 6th, 2026 08:26 am
Powered by Dreamwidth Studios