Re[15]: Идеологически правильный мегарулез
От: Amidlokos Россия  
Дата: 28.06.05 13:22
Оценка:
Здравствуйте, Трурль, Вы писали:

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


A>>Ещё один занят подтасовкой фактов, но уже не так талантливо. Что, i, 0 и 10 посчитать забыли?

Т> i,0 и т.п.- чистый оверхед.

Ага, но при этом 10 почему-то всё же не оверхед?

Ловлю на слове: с этого момента дружно начинаем считать оверхедом объявление и использование переменной

Да, кстати, маленький секрет... Этот for коротко записывается так:

int a[10]={0};


A>>И каждую скобку вынесли лексемой?

Т>А скобки разве не лексемы?

Так я же согласен — пусть будут лексемами каждая по отдельности.

A>>Даже если так, звёздочек всё равно многовато.

Т>Нам уже разъяснили что пробела тоже надо учитывать.
Это разъясняли про значащие пробелы. Иначе код:

int                            a   ;

Побьёт по оверхеду код
int a;


Впрочем, к вашей чести, в вашем коде незначащих пробелов нет.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
WARNING: expression "to_be || !to_be" is always true
Re[16]: Идеологически правильный мегарулез
От: Трурль  
Дата: 28.06.05 13:35
Оценка:
Здравствуйте, Amidlokos, Вы писали:


A>Ага, но при этом 10 почему-то всё же не оверхед?


Оверхед — все, что не относится к делу.

A>Да, кстати, маленький секрет... Этот for коротко записывается так:


A>
A>int a[10]={0};
A>


А вот этот
int a[10];for(int i=0;i<10;i++)a[i]=1;
Re[12]: Народ упорно не врубается
От: Privalov  
Дата: 28.06.05 13:51
Оценка:
Здравствуйте, Mr. None, Вы писали:

P>>Здесь
Автор: Privalov
Дата: 28.06.05
я привожу аналогичный пример. Думаете, помогло?


MN>Даже смотреть не буду (трафик не резиновый) — уверен, что не помогло !


Судя по всему все гораздо хуже. Состояние весьма запущено. Требуется принципиально иной подход к лечению.
Re[17]: Идеологически правильный мегарулез
От: Amidlokos Россия  
Дата: 28.06.05 13:55
Оценка:
Здравствуйте, Трурль, Вы писали:

Т>Оверхед — все, что не относится к делу.


К какому делу? Делу коммунистической партии?

Только вот не надо ерунды с "делом", а то получите симметричный ответ, что там "не по делу" во всяких оберонах (и я уже вижу, как он будет выглядеть — скажем, получается чудная куча звёзд в цикле WHILE с нестандартным выходом — см. в теме). Анализируете язык — вот и анализируйте. Как вам такое:

int a[10];for(int i=0;i<10;i++)a[i]=i;


(специально пишу в том же беспробельно-минималистическом стиле)
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
WARNING: expression "to_be || !to_be" is always true
Re[13]: Народ упорно не врубается
От: Sergey J. A. Беларусь  
Дата: 28.06.05 14:01
Оценка: +1 :))) :)
Здравствуйте, Privalov, Вы писали:

MN>>Даже смотреть не буду (трафик не резиновый) — уверен, что не помогло !


P>Судя по всему все гораздо хуже. Состояние весьма запущено. Требуется принципиально иной подход к лечению.


Я бы даже сказал, структурный подход к лечению
Re[14]: Народ упорно не врубается
От: Курилка Россия http://kirya.narod.ru/
Дата: 28.06.05 14:12
Оценка:
Здравствуйте, Sergey J. A., Вы писали:

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


MN>>>Даже смотреть не буду (трафик не резиновый) — уверен, что не помогло !


P>>Судя по всему все гораздо хуже. Состояние весьма запущено. Требуется принципиально иной подход к лечению.


SJA>Я бы даже сказал, структурный подход к лечению


А лечение будет иметь точки прерывания или завершения? И сколько?
Re[15]: Народ упорно не врубается
От: Sergey J. A. Беларусь  
Дата: 28.06.05 14:28
Оценка: :))
Здравствуйте, Курилка, Вы писали:

P>>>Судя по всему все гораздо хуже. Состояние весьма запущено. Требуется принципиально иной подход к лечению.


SJA>>Я бы даже сказал, структурный подход к лечению


К>А лечение будет иметь точки прерывания или завершения? И сколько?


Лечение не будет иметь выхода, кроме как через полное излечение.
Я — свихнувшееся сознание Джо.
Re[16]: Народ упорно не врубается
От: Курилка Россия http://kirya.narod.ru/
Дата: 28.06.05 14:33
Оценка: :)
Здравствуйте, Sergey J. A., Вы писали:

SJA>Здравствуйте, Курилка, Вы писали:


P>>>>Судя по всему все гораздо хуже. Состояние весьма запущено. Требуется принципиально иной подход к лечению.


SJA>>>Я бы даже сказал, структурный подход к лечению


К>>А лечение будет иметь точки прерывания или завершения? И сколько?


SJA>Лечение не будет иметь выхода, кроме как через полное излечение.


Да здравствует истинно структурное лечение
Re[10]: Идеологически правильный мегарулез
От: Пацак Россия  
Дата: 28.06.05 20:50
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>!(a < 10) — ЗАВЕРШАЕТ

СГ>break — ЗАВЕРШАЕТ!!!!!!!!!!!!!!!!!!!!!!!!!
СГ>goto на конец — ЗАВЕРШАЕТ

СГ>return — ПРЕРЫВАЕТ

СГ>throw куда подальше — ПРЕРЫВАЕТ
СГ>goto куда подальше — ПРЕРЫВАЕТ
СГ>assert — ПРЕРЫВАЕТ
СГ>...

Я тоже так умею:

!(a < 10) — ЗАВЕРШАЕТ
break — ПРЕРЫВАЕТ!!!!!!!!!!!!!!!!!!!!!!!!!
return — ЗАВЕРШАЕТ
throw куда подальше — ПРЕРЫВАЕТ
и т. д....


Детский сад, честное слово. Вы таки объяснить можете, чем одно от другого отличается? Про "выполняется или нет следующая команда" рассказывать не надо: вот здесь, например, она вполне себе выполняется в обоих случаях:

LOOP
    WHILE 1<2 DO
    IF 3<4 THEN EXIT END
    END
END
A := B;


while (1<2) {
    if (3<4) break;
}
a = b;


Ку...
Re[7]: FOR
От: Пацак Россия  
Дата: 28.06.05 20:50
Оценка: +1
Здравствуйте, Сергей Губанов, Вы писали:

П>> То есть вычислить шаг цикла в рантайме я не могу?

СГ>В FOR — нет. Это, видимо, предусмотрено для возможной оптимизации. Иначе FOR ну вообще бы ни чем не отличался от WHILE. А зачем в точности дублировать то что и так уже есть? Используйте WHILE...

... а если цикл надо прервать посередке — то LOOP. В общем есть только LOOP и оберон — пророк его. Итого простенькая запись

for (i = 0; i < max_level; i += step) {
    sound_level(i);
}


реализуется сперва вот так:

{O-o-ops! Пользователь забыл сказать нам, что хочет регулировать нарастание звука
и мы приняли step за константу}
FOR i := 0 TO MAX_LEVEL BY step DO 
    sound_level(i);
END


потом превращается сперва в такого вот гадкого утенка:

{вся разница лишь в том, что step больше не константа.}
step := get_step();
i := 0;
WHILE i < max_level DO
    sound_level(i);
    i := i + step;
END


... а затем, когда юзера осеняет, что он к тому же хочет иногда вручную прерывать звучание на середине — в совсем уж что-то непохожее:

step := get_step();
i := 0;
LOOP 
    IF i >= max_level THEN EXIT END;
    sound_level(i);
    i := i + step;
    IF manual_interrupt() THEN EXIT END;
END


... при том, что в C++ все то же самое решится дописыванием двух строчек в исходный код:

step := get_step();
for (i = 0; i < max_level; i += step) {
    sound_level(i);
    if (manual_interrupt()) break;
}


Да, удобная штука оберон, ничего не скажешь!
Ку...
Re[5]: Идеологически правильный мегарулез
От: Пацак Россия  
Дата: 28.06.05 21:11
Оценка:
Здравствуйте, Socrat, Вы писали:

S>

S>"КРЯК!" — сказала пила.
S>"То-то же!!!" — сказали суровые сибирские лесорубы!



...
-- ...там на светофоре желтый горел, я подумал что проскочу...
-- Я двадцать лет за рулем — у меня хрен проскочишь!

Ку...
Re[16]: Синтаксический оверхед - Новая порция
От: faulx  
Дата: 29.06.05 03:08
Оценка:
Здравствуйте, Amidlokos, Вы писали:

A>Кто сказал, что вызов close() будет удачным?


А delete?

A>И уж простите меня, КТО вам сказал, что Release() удаляет объект?! Этот кто-то врал и не краснел. См. MSDN.


Ну если говорить точно, он _может_ удалить объект. Но я нигде и не говорил, что он удаляет объект. Я всего лишь говорил, что противоположные по смыслу действия должны обозначаться противоположными по смыслу словами. Может, Release() на самом деле и не удаляет объект (наверняка мы этого знать не можем), но этот метод образует логическую пару с созданием объекта (CreateInstance()). Такую же пару образуют new и delete, но в отличие от Create/Release эти слова не противоположны по смыслу (разве что в сознании, испорченном C++), и к тому же вообще из разных грамматических категорий.
Re[24]: Синтаксический оверхед - Новая порция
От: faulx  
Дата: 29.06.05 03:08
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>Ну возьмем лучше RegOpenKey. Принцип тот же самый.


А что, ключ реестра — это объект ядра? К тому же тезис о глаголах, обознающих действия создания/открытия и о противоположных словах для противоположных действий эта функция только подтверждает.
Re[22]: Синтаксический оверхед - Новая порция
От: faulx  
Дата: 29.06.05 03:08
Оценка: -1
Здравствуйте, Трурль, Вы писали:

F>>
F>>let a = OpenFile()
F>>


F>>Нормально.

Т>Пусть a означает "открыть файл"?

Это практически дословный перевод вашей фразы на Бейсик (или, если угодно, на ML). Впрочем, в Бейсике let, кажется, можно опустить.
Re[14]: Синтаксический оверхед - Новая порция
От: faulx  
Дата: 29.06.05 03:08
Оценка:
Здравствуйте, Amidlokos, Вы писали:

C>>>ЗЫ: как смешно читать нападки на С++


F>>Форум такой, так что стараемся.


A>Спасибо, у вас получается — коллеги улыбаются


Главное, самому весело.
Re[13]: Идеологически правильный мегарулез
От: Mr. None Россия http://mrnone.blogspot.com
Дата: 29.06.05 04:51
Оценка: 3 (1)
Здравствуйте, Amidlokos, Вы писали:

A>Такое впечатление, что никто не понимает основных принципов C/C++, но всем надо покритиковать.


Такое впечатление, что вы не поняли сути дискуссии с самого начала. И я попрошу вас воздержаться от оценки моих пофессиональных навыков, без предварительного тестирования.

A>ptr — это именно указатель. На что он там указывает — твои личные дела. Компилятор не должен отслеживать ничего в этом случае. От конструктора это никак не зависит.


A>1. Раз объект стековый (а не указатель на какую-то память где-то в куче), то всё же компилятор заботится о его создании. Вот он и ругается.

A>2. В случае с пустым конструктором достаточно (а может быть, слишком) умный компилятор определяет, что разницы между вызовом конструктора и отсутствием такого вызова не будет никакой. Вот и не ругается.

А теперь к сути дискуссии, поскольку вы, судя по всему, её не поняли. Кодт утверждал, что правильный компилятор не позволит перескочить (goto) через определение локальных переменых. Однако, согласно пункту 6.7/3 стандарта C++ — это не так:

It is possible to transfer into a block, but not in a way that bypasses declarations with initialization. A program
that jumps77) from a point where a local variable with automatic storage duration is not in scope to a point where it is in scope is illformed unless the variable has POD type (3.9) and is declared without an initializer (8.5).
[Example:
void f()
{
// ...
goto lx; // illformed: jump into scope of a
// ...
ly:
X a = 1;
// ...
lx:
goto ly; // OK, jump implies destructor
// call for a followed by construction
// again immediately following label ly
}
—end example]

Что я и показал своим примером... И понимание сути указателя или предположения об умности компилятора в случае пустого конструктора тут и рядом не лежало.
Указатель или постейших класс являются POD типами, поэтому такой переход не является illformed и нормально допускается, какая инициализация будет в этом случае я не знаю, но судя по всему default-initialization, приводящая в случае POD типов к неопределённому результату. В случае VC 7.1, если переменная, определение которой перескакивается оператором goto, является принадлежит классу, который является POD-типом, но имеет определённый конструктор (даже конструктор по-умолчанию), или при определении этой переменной к ней была применена value-initialization, в этом случае VC 7.1 реагирует предупреждением, но не может запретить такое поведение — это не illformed-код (см. выше). В этом случае переменная опять таки оказывается default-initialized. Если goto выполняет переход через участок кода, содержащий определение переменной не-POD типа, в этом случае код является illformed и компиляция прерывается. Добавьте к классу деструктор и вы сами в этом убедитесь.
Так что, прежде чем отзываться о профессиональных навыках оппонента, убедитесь, что вы сами понимаете суть вопроса.
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Re[18]: Идеологически правильный мегарулез
От: Трурль  
Дата: 29.06.05 04:52
Оценка:
Здравствуйте, Amidlokos, Вы писали:


A> Как вам такое:


A>
A>int a[10];for(int i=0;i<10;i++)a[i]=i;
A>


A>(специально пишу в том же беспробельно-минималистическом стиле)


Асимметричный ответ
a:!10
Re[17]: Синтаксический оверхед - Новая порция
От: Sinclair Россия https://github.com/evilguest/
Дата: 29.06.05 04:52
Оценка:
Здравствуйте, faulx, Вы писали:
F>Ну если говорить точно, он _может_ удалить объект. Но я нигде и не говорил, что он удаляет объект. Я всего лишь говорил, что противоположные по смыслу действия должны обозначаться противоположными по смыслу словами. Может, Release() на самом деле и не удаляет объект (наверняка мы этого знать не можем), но этот метод образует логическую пару с созданием объекта (CreateInstance()). Такую же пару образуют new и delete, но в отличие от Create/Release эти слова не противоположны по смыслу (разве что в сознании, испорченном C++), и к тому же вообще из разных грамматических категорий
А с каких это пор у нас CreateInstance противоположно по смыслу Release? Не пора ли заглянуть в словарь?
Парой к CreateInstance была бы, очевидно, DeleteInstance. Парой к Release — Lock. А парой к AddRef (которая на самом деле парная к Release в Com — CreateInstance штука неспаренная) была бы RemoveRef.
... << RSDN@Home 1.1.4 beta 5 rev. 395>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[14]: Идеологически правильный мегарулез
От: Mr. None Россия http://mrnone.blogspot.com
Дата: 29.06.05 04:53
Оценка:
Здравствуйте, Amidlokos, Вы писали:

A>P.S. Mr. None, только на мою фразу про "никто не понимает" обижаться не нужно Сгоряча сказалось.


В следующий раз досчитайте до 10, прежде чем горячиться и перечтите всю ветку дискуссии.

A>Ведь правда же — пример, в котором указатель не отличают от стекового объекта... Нехорошо это даже для флейма


Отличий между указателем (именно указетелем, а не объектом, на который он указывает) и стековым объектом POD-типа нет. Потому что указатель такой же POD-тип, подчинённый тем же правилам поведения.
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Re[14]: Народ упорно не врубается
От: Privalov  
Дата: 29.06.05 04:56
Оценка:
Здравствуйте, Sergey J. A., Вы писали:

P>>Судя по всему все гораздо хуже. Состояние весьма запущено. Требуется принципиально иной подход к лечению.


SJA>Я бы даже сказал, структурный подход к лечению


Может, это и хороший способ, только с принципиальными отличиями от традиционных методов не все ясно. Лечение подобным? Нет, здесь что-то совсем другое требуется. А вот что... В общем, тема для хорошего флейма...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.