Re[28]: Синтаксический оверхед - Новая порция
От: faulx  
Дата: 30.06.05 07:08
Оценка:
Здравствуйте, Sinclair, Вы писали:

F>>Тогда зачем вызывать AddRef/Release руками?

S>Этот вопрос в данном контексте не нужен.

Этот вопрос был вызван фразой

приходится несколько раз ручками вызывать AddRef()


F>>1. Не считать ссылки на него.

F>>2. Считать их с помощью AddRef/Release
F>>3. Считать их с помощью, например, boost::shared_pointer
S>Вариант 1 — это как раз рискованный способ, о небезопасности которого писал Amidlokos.

Это я понял.

F>>Если вариант 1 по каким-либо причинам не устраивает, есть ли разница (не в производительности) между вариантами 2 и 3?

S>Есть. вариант 3 укорачивает запись, вариант 2 поддерживается везде (напомню, что COM работает не только в С++).

Ну мы же пишем программу, которая использует COM-объект, и пишем, как подразумевается, на C++.

F>> И если нет, то, как мне кажется, по соображениям той же производительности, лучше использовать вариант 3. Напоминаю, что речь идет об однопоточном приложении. Я прав?

S>По соображениям производительности вариант 3 гарантированно не лучше, чем вариант 2. Ты не прав.

Почему? Ведь в boost::shared_ptr (или самодельном умном указателе)

не вызывается дорогостоящая операция интерлокед инкремента/декремента

Re[29]: Синтаксический оверхед - Новая порция
От: Дарней Россия  
Дата: 30.06.05 07:27
Оценка:
Здравствуйте, faulx, Вы писали:

F>>>Там не HANDLE, а HKEY. И ключ реестра — не объект ядра.


F>По крайней мере в MDSN их нет в списке объектов ядра. (Но вообще этот список отражает нелегкий путь, по которому двигалась разработка WinAPI )


Что характерно, в этом списке есть
1. Функции, которые начинаются с Open (и которые действительно открывают! )
2. Типы, отличные от HANDLE

Ну и что ты этим доказал?
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[30]: Синтаксический оверхед - Новая порция
От: faulx  
Дата: 30.06.05 07:34
Оценка: :)
Здравствуйте, Дарней, Вы писали:

Д>Что характерно, в этом списке есть

Д>1. Функции, которые начинаются с Open (и которые действительно открывают! )
Д>2. Типы, отличные от HANDLE

Д>Ну и что ты этим доказал?


Нелегкий путь, по которому двигалась разработка WinAPI

Я же не говорил, что WinAPI — это идеал. Если бы беспорядок в именах был его единственным недостатком, это было бы просто прекрасно.
Re[27]: Синтаксический оверхед - Новая порция
От: Sinclair Россия https://github.com/evilguest/
Дата: 30.06.05 07:36
Оценка:
Здравствуйте, faulx, Вы писали:

F>А если серьезно, то нам трудно рассуждать о значении слов неродного языка. Перевод не дает всего. Даже если пройтись по синонимам release, можно найти много интересного, например dismiss. У него есть значения "распускать (организацию, общество и т.п.)", "отвергать". Уже ближе. В любом случае, даже если мы согласимся, что Release — не точный антоним Create, значения у них лежат в противоположных смысловых полях.

Зато нам нетрудно. Я достаточно много читаю технического английского, чтобы с уверенностью судить об оттенках смысла таких терминов. Если тебе это затруднительно, то не стоит и начинать дискуссию о корректности new/delete.

F>Однако вспомним, из-за чего возникла дискуссия. Хорошо, пусть у CreateInstance нет противоположного действия. Пусть Release — антоним только к AddRef (с этим-то вы согласны? Впрочем, я уже говорил, что пара AddRef/Release не кажется мне слишком удачной). Мои тезисы, которые я повторял столько раз, что уже устал, эти факты только подтверждают.

Нет. Никакого подтверждения твоих тезисов не наблюдается. Наоборот, сплошные опровержения. А количество повторений на истинность не влияет.


F>Разница же с вашим примером простая: если мы будем думать о new как о декларативной операции, мы напоремся на какую-нибудь неожиданную неприятность гораздо раньше, чем когда мы полагаем декларативной операцией As.

Замечательно. То есть теперь уже скорость напарывания на неожиданность считается аргументом? Ну-ну. С учетом того, что я не могу себе представить таких неприятностей вообще (вылет исключения возможен где угодно), аргументация уже совсем теряет смысл.

F>Это в первую очередь относится к C++ (а мы именно о нем и говорим), где полагание чего бы то ни было декларативным — очень рискованное занятие.

F>Кстати, какой был язык в вашем примере? VB или C#? В любом случае, явно не C++.
Язык был Delphi.
Мы говорим о программировании вообще. Не надо замыкаться на С++. А если сильно хочется замкнуться там, то скажи мне, о великий лингвист, какая часть речи соответствует оператору reinterpret_cast?
S>>А зачем? Ты вон уже и сам привел примеры — with и using
F>Это не действия, это инструкции компилятору
В таком случае new — тоже инструкция компилятору.
... << RSDN@Home 1.1.4 beta 5 rev. 395>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[20]: Идеологически правильный мегарулез
От: jazzer Россия Skype: enerjazzer
Дата: 30.06.05 07:36
Оценка: +1
Здравствуйте, Mr. None, Вы писали:

Стандарт, 9/4
...A POD-struct is an aggregate class that has no nonstatic data members of type pointer to member, non-POD-struct,
non-POD-union (or array of such types) or reference, and has no userdefined copy assignment operator and no userdefined destructor...

Стандарт, 8.5.1/1
An aggregate is an array or a class (clause 9) with no user-declared constructors (12.1), no private or protected non-static data members (clause 11), no base classes (clause 10), and no virtual functions (10.3).


MN>Странно... выходит если я добавлю закрытое поле — это уже будет не-POD-тип... Ну ладно — комитету по стндартизации виднее...


Это будет не агрегат, а POD-тип — это обязательно агрегат.
А почему наложено ограничение на агрегат — тоже понятно: ведь агрегаты можно инициализировать через = {...}, а закрытые/защищенные члены так инициализировать нельзя по принципиальным соображениям, согласен?

MN>Но конкретно в данном случае (goto через определение) студия реагирует ошибкой именно на деструктор — конструктор ей по барабану, на него она реагирует предупреждением...


Ну, студия... :)
Ведь наличие конструктора — это предоставление языком гарантий, что объект класса не может быть инициализирован иначе, чем через вызов этого конструктора, что идеологии POD никак не соответствует.
Просто для чего чаще всего нужны поды? Чтобы можно было без проблем делать memmove и прочие бинарные вещи, а при memmove ты фактически получаешь доступ к закрытым/защищенным членам, а язык, по идее, должен давать гарантии, что ты никак извне к ним доступа не получишь, если сам класс этого явно не захочет.

P.S. Из чего следует финт ушами: если класс, удовлетворяющий требованиям POD, за исключением наличия закрытых/защищенных членов, объявляет кого-либо другом, то он должен вести себя по отношению к нему как POD :)
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[28]: Синтаксический оверхед - Новая порция
От: faulx  
Дата: 30.06.05 08:00
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Зато нам нетрудно. Я достаточно много читаю технического английского, чтобы с уверенностью судить об оттенках смысла таких терминов. Если тебе это затруднительно, то не стоит и начинать дискуссию о корректности new/delete.


Не будем мерятся тем, кто и сколько чего читает. Не думаю, что вы владеете всеми оттенками смысла любого произвольно взятого английского слова. Но на то, чтобы понять, что Create и Release — из противоположных смысловых полей, моего знания английского хватает.

S>Нет. Никакого подтверждения твоих тезисов не наблюдается. Наоборот, сплошные опровержения. А количество повторений на истинность не влияет.


Create, AddRef, Release обозначают действия? Хоть одно из перечисленных в дискуссии действий обозначалось словом, не содержащим глагола, несущего основной смысл? Противоположные действия обозначались противоположными по смыслу словами (сочетаниями слов, если учесть AddRef)? Где же опровержение?

S>Замечательно. То есть теперь уже скорость напарывания на неожиданность считается аргументом? Ну-ну. С учетом того, что я не могу себе представить таких неприятностей вообще (вылет исключения возможен где угодно), аргументация уже совсем теряет смысл.


Скорость напарывания — это отражение степени дырявости абстракции. Абстракция new гораздо более дырявая, чем as. Хотя бы потому, что требует delete.

S>Язык был Delphi.


Понятно.

S>Мы говорим о программировании вообще. Не надо замыкаться на С++. А если сильно хочется замкнуться там, то скажи мне, о великий лингвист, какая часть речи соответствует оператору reinterpret_cast?


Существительному. Но это только подтверждает корявость и непоследовательность C++. new/delete из той же серии.

S>В таком случае new — тоже инструкция компилятору.


Нет, это действие, которое может произойти, даже когда последний экземпляр компилятора, которым new был скомпилирован, исчезнет со всех носителей информации во Вселенной
Re: Синтаксический оверхед
От: viellsky  
Дата: 30.06.05 08:08
Оценка: :))
Здравствуйте, Сергей Губанов, Вы писали:

СГ>1) Известно, что Си-образный синтаксис использует больше лексем чем это реально необходимо.

Неправда — это неизвестно.
СГ>2) Известно, что стандарты оформления Си-образного кода требуют использования большего количества строчек чем это реально необходимо (чтобы читающему понятно стало где что написано).
Неправда — это тоже неизвестно.

СГ>Давайте посчитаем количественно этот перерасход?


А можно ваш метод подстчета неизвестности применить для свержения принципа неопределенности Гейзенберга?
Re: Синтаксический оверхед
От: Gemel  
Дата: 30.06.05 08:50
Оценка: -1 :))
Здравствуйте, Сергей Губанов, Вы писали:


СГ>Программа записанная в Си-образном синтаксисе содержит в разы, а не на проценты больше лексем и строчек кода чем это реально необходимо. Спрашивается, и как долго этот синтаксис еще будет существовать?


Сие жалкие попытки продлить жизнь умирающему паскалю!!!!!!!


Я, например, если язык хоть отдаленно напоминает паскаль никогда не буду на нем писать!!! Работаю в С++Builder 6!
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[22]: Синтаксический оверхед - Новая порция
От: Кодт Россия  
Дата: 30.06.05 09:14
Оценка: +2
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, faulx, Вы писали:


F>>Антоним для практически любого слова, если он существует, не единственный. Так что то, что вы написали — правда, но не вся правда. Также антонимами могут быть CreateInstance, MakeInstance, BuildInstance и еще куча других.

S>Оттенки смысла у разных глаголов разные. Если уж подбирать пару, то именно противоположностей, а не "почти противоположностей". Дискуссия на эту тему была в "Проблемах перевода".

Мне кажется, что здесь неправильно вообще обращаться к концепции "пара противоположностей".
Жизненный цикл ссылки — это отрезок [инициализация, работа, инвалидация].

Ссылки бывают нескольких видов: слабые, владеющие, connection point и т.д... Ниже — только про обычную владеющую.

Инициализацию ссылки можно провести несколькими разными способами
— создать новый объект (factory -> CreateInstance)
— сообщить объекту о присоединении (object -> AddRef)
— получить извне (object -> GetAnotherObject)
после каждого из этих действий выполняется одно и то же постусловие (о целостности счётчиков ссылок) и различать ссылки, полученные разными способами, не нужно.

Инвалидацию ссылки также можно произвести несколькими независимыми способами
— сообщить объекту об отсоединении (object -> Release)
— скопировать указатель в новую владеющую ссылку и обнулиться

Конечно, можно сказать, что наиболее похоже зеркалят друг друга AddRef и Release. Но это не значит, что они выступают антонимами.
Ведь Release может по условию уничтожить объект. То есть выступить противоположностью к CreateInstance.

Так что логичность COM сохраняется, будучи корректно не отражённой в словах (а не "некорректно отражённой").

F>>Потому что программист пишет именно в терминах этого паттерна (не всегда, конечно).

S>Это бред. Программист пишет в рамках и совершенно других паттернов. Множество объектов он получает вовсе не при помощи CreateInstance. И что теперь, объявлять IConnection.CreateCommand обратной к Release? Не слишком ли много антонимов к одному Release получится?
F>>Ну вот видите, сами нашли ответ.
S>Нет.
F>>Вообще, все эти рассуждения никак не опровергают тех тезисов, которые я здесь продвигаю, и которые повторю еще раз:
F>>1. Действие должно обозначаться глаголом.
F>>2. Противоположные по смыслу действия должны обозначаться противоположными по смыслу словами (одной и той же грамматической категории).
S>Ну то есть COM неверен, так? Ведь там противоположные по смыслу действия не обозначаются противоположными по смыслу словами.
F>>Найдется ли смелый человек, который прямо выступит против этих тезисов, без увода разговора в сторону? Например, прямо скажет: тезис 1 неправильный, действие может обозначаться как угодно, например, существительным, наречием, предлогом и т.п. (Естественно, весь разговор ведется в рамках языков программирования). Или скажет про тезис 2: он неверный, противоположные действия могут обозначаться синонимами (создать объект с помощью ключевого слова yes, а удалить — ключевым словом of_course).
S>Тезис 1 неправильный, действие может обозначаться как угодно, например существительным, наречием, пригагательным, предлогом. Главное — чтобы применение было очевидным и не вызывало отторжения.

Пойдём ещё дальше: система тезисов 1,2 неприменима (неважно, правильна/неправильна), потому что здесь нет противоположных действий.
Есть две особых точки временного отрезка, противоположные между собой. Но в каждой из этих точек происходит одно из независимых действий.

Например, я ремонтирую квартиру.
Давным давно я мог стену (покрасить краской, оклеить обоями, задрапировать). А теперь хочу привести в исходное состояние — (ободрать краску/обои/ткань, снести и поставить новую стену).
Разве можно утверждать, что покрасить и переустановить — противоположные действия? Нет. Они только относятся к противоположным моментам времени.
Перекуём баги на фичи!
Re[2]: Синтаксический оверхед
От: Privalov  
Дата: 30.06.05 10:15
Оценка:
Здравствуйте, Gemel, Вы писали:

G>Я, например, если язык хоть отдаленно напоминает паскаль никогда не буду на нем писать!!! Работаю в С++Builder 6!


Вот я не стал бы так категорично. Возьмется, к примеру, твой работодатель поддерживать чью-нибудь систему на паскалеподобном языке и на тебя все технические дела навесит. И что тогда делать будешь?
Re[10]: Синтаксический оверхед
От: moudrick Россия http://community.moudrick.net/
Дата: 01.07.05 16:37
Оценка:
Здравствуйте, ZayatsZ, Вы писали:

ZZ>Здравствуйте, Дарней, Вы писали:



Д>>А это идея! Надо просто выпустить клавиатуры а-ля Спектрум, на которых будут нанесены все ключевые слова оберона — IF, THEN, END и т.д. И клавишу Enter спрятать подальше, чтобы поощрить написание кода в "однострочном" стиле.

ZZ>История развивается по спирали

Которая скручивается внутрь себя и сжимается в точку.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[24]: Яркий пример
От: prVovik Россия  
Дата: 04.07.05 20:56
Оценка: 3 (1) :)
Здравствуйте, Sergey J. A., Вы писали:


SJA>Да что там !


SJA>
SJA>        LOOP
SJA>            IF TRUE THEN EXIT END;
SJA>        END
SJA>


SJA>* * * * * * *


SJA>


Да что уж там:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

************************************************************************************************************
... << RSDN@Home 1.1.4 @@subversion >>
лэт ми спик фром май харт
Re[13]: Так Вы определитесь
От: prVovik Россия  
Дата: 05.07.05 06:47
Оценка:
Здравствуйте, Amidlokos, Вы писали:


A>Да, Сергей... Видно, что никогда у вас не было необходимости к уже созданному дополнительно привинтить мгновенный фоновый экспорт в excel, а затем возможность быстрой остановки всего процесса, а затем индексацию...


А что мы делаем, чтобы энтропия проекта не росла очень сильно?


(хором) Р-Е-Е-Е-Ф-А-А-А-К-Т-О-О-О-Р-И-И-И-Н-Г

... << RSDN@Home 1.1.4 @@subversion >>
лэт ми спик фром май харт
Re[2]: Синтаксический оверхед
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 05.07.05 07:31
Оценка: -1 :))
Здравствуйте, viellsky, Вы писали:

V>Здравствуйте, Сергей Губанов, Вы писали:


СГ>>1) Известно, что Си-образный синтаксис использует больше лексем чем это реально необходимо.

V>Неправда — это неизвестно.
СГ>>2) Известно, что стандарты оформления Си-образного кода требуют использования большего количества строчек чем это реально необходимо (чтобы читающему понятно стало где что написано).
V>Неправда — это тоже неизвестно.

А теперь, благодаря этой ветке форума, известно!
Более того, известны даже количественные данные в предельных случаях, а именно 235% и 700%.
Re[3]: Синтаксический оверхед
От: Sergey J. A. Беларусь  
Дата: 05.07.05 11:30
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>А теперь, благодаря этой ветке форума, известно!

СГ>Более того, известны даже количественные данные в предельных случаях, а именно 235% и 700%.

Да, да. Теперь это извесно, хотя и раньше не вызывало сомнений. Только Вы напутали с цифрами. Должны быть 233% и 600%
Это расписано здесь
Автор: Sergey J. A.
Дата: 24.06.05
и здесь
Автор: Sergey J. A.
Дата: 27.06.05
.

Таким образом, средний оверхед Оберона — (233+600)/2 = 416%
Я — свихнувшееся сознание Джо.
Re[14]: Так Вы определитесь
От: Amidlokos Россия  
Дата: 05.07.05 11:39
Оценка:
Здравствуйте, prVovik, Вы писали:

V>(хором) Р-Е-Е-Е-Ф-А-А-А-К-Т-О-О-О-Р-И-И-И-Н-Г


Вы это Сергею скажите
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
WARNING: expression "to_be || !to_be" is always true
Re[4]: Синтаксический оверхед
От: peterbes Россия  
Дата: 05.07.05 11:40
Оценка:
Здравствуйте, Sergey J. A., Вы писали:

[offtopic]

Sergey, вы идею с прохождением полтиника под водой не забросили?
В Питере бассейны позакрывали на лето, жабры у меня сохнут. Ребята ополоумели, решили со стрелки Васильевского острова до Кронштадта плыть, 29 км, Сухорученков (Jeka) пердрекает что количество утопленников будет равно количеству участников заплыва.
Re[5]: Синтаксический оверхед
От: Sergey J. A. Беларусь  
Дата: 05.07.05 11:53
Оценка:
Здравствуйте, peterbes, Вы писали:

P>[offtopic]


P>Sergey, вы идею с прохождением полтиника под водой не забросили?


Не, не забросил. Но пока не получается...

P>В Питере бассейны позакрывали на лето, жабры у меня сохнут. Ребята ополоумели, решили со стрелки Васильевского острова до Кронштадта плыть, 29 км, Сухорученков (Jeka) пердрекает что количество утопленников будет равно количеству участников заплыва.


Маньяки
Я — свихнувшееся сознание Джо.
Re[15]: Так Вы определитесь
От: moudrick Россия http://community.moudrick.net/
Дата: 06.07.05 12:32
Оценка:
Здравствуйте, Amidlokos, Вы писали:

A>Здравствуйте, prVovik, Вы писали:


V>>(хором) Р-Е-Е-Е-Ф-А-А-А-К-Т-О-О-О-Р-И-И-И-Н-Г


A>Вы это Сергею скажите


Пусть лучше он скажет, знает ли он, что такое вообще энтропия и когда он последний раз открывал Шеннона.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[3]: Синтаксический оверхед
От: Gemel  
Дата: 07.07.05 05:14
Оценка:
Здравствуйте, Privalov, Вы писали:

P>Здравствуйте, Gemel, Вы писали:


G>>Я, например, если язык хоть отдаленно напоминает паскаль никогда не буду на нем писать!!! Работаю в С++Builder 6!


P>Вот я не стал бы так категорично. Возьмется, к примеру, твой работодатель поддерживать чью-нибудь систему на паскалеподобном языке и на тебя все технические дела навесит. И что тогда делать будешь?


Работу искать!!!
Пытались такое провернуть невышло..... хотели на атлантис меня посадить, это ваабще бред какойто а не язык.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.