Re[9]: Определение циклов
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 27.06.05 12:06
Оценка: :)
Здравствуйте, Sergey J. A., Вы писали:

SJA>Оотлично. Ну, раскажите почему try ... finnaly ... end структурная конструкция, а С-шный while — нет.

SJA>Подсказка:
SJA> throw -> break.
SJA>А ?

По определению цикла WHILE, которое я дал выше.

SJA>И кстати, почему замечательно структурной try ... finnaly ... end нет в Обероне ?


Там исключений нет.
Re[10]: Синтаксический оверхед - Новая порция
От: Cyberax Марс  
Дата: 27.06.05 12:09
Оценка:
Трурль wrote:

> F>Нет. Второй пример лучше. Почему для открытия файла, для создания

> окна, объекта ядра (мутекс, событие) и проч. прекрасно подходит
> глагол, а для создания объекта — только прилагательное?
> Мне кажется, что и для открытия файла, создания окна и т.п. больше
> подходят прилагательные. А глагол лучще бы смотрелся в контексте
>
>Экскаватор * мойЭкскаватор;
>создать(мойЭкскаватор);
>
>
Не лучше — функция принимает параметр по неконстантной ссылке, а это ПЛОХО.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[10]: register
От: Cyberax Марс  
Дата: 27.06.05 12:18
Оценка: +1
Сергей Губанов wrote:

> S>- что компиляторы С умеют выдавать warning на практически все

> ошибочные ситуации, которые можно только придумать.
> Жаль что фразу "практически все" нельзя поставить перед словом
> компиляторы.

Все нормальные компиляторы — выдают.

> Другие слушатели курсов воспользовались моим кодом (свой писать лень

> было), но у них почему-то программа не правильно работала. Позвали
> меня спросить почему у меня работает правильно, а у них на выходе
> какая-то ерунда. Посмотрел, увидел вызов Encode(sample, &encoder)
> поменял на Encode(&encoder, sample) заработало. А ведь компилировалось
> не то что без ошибок, а даже без варнингов! И даже выполнялось (не
> правильно, но выполнялось же)!!!

Плохой компилятор, для таких случаев придумали lint. Однако, в языке С++
такая конструкция бы не работала.

> S>- что на языке С не нужно переупорядочивать программу для того,

> чтобы компилятор смог сгенерировать оптимальный код
> Для этого только надо перед переменной написать слово *register*...

Вы откуда пришли? Слово register игнорируется компиляторами с
90-х годов прошлого века (BC 3.11, кажется, был последним компилятором,
который соблюдал эту директиву).

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[11]: Синтаксический оверхед
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 27.06.05 12:32
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Здравствуйте, Sergey J. A., Вы писали:


SJA>>Какие ещё будут предположения ?


Вспомнил. Там речь шла о C++ Builder 6.0 и Delphi 7.0.
Re[10]: register
От: Sinclair Россия https://github.com/evilguest/
Дата: 27.06.05 12:35
Оценка: +1
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Жаль что фразу "практически все" нельзя поставить перед словом компиляторы.
Ну так... Это ж древний-предревний C. Это известная проблема. Попробуй воспроизвести это на любом С++, выпуска хотя бы 1993.

S>>- что на языке С не нужно переупорядочивать программу для того, чтобы компилятор смог сгенерировать оптимальный код

СГ>Для этого только надо перед переменной написать слово register...
Кто вам сказал такую глупость? Старые компиляторы игнорировали слово register, потому что у них вообще не было оптимизаторов. Новые компиляторы его игнорируют потому, что лучше программиста выполняют раскладку про регистры.
Перестаньте упорствовать в своих заблуждениях. Современный компилятор плюсов так переделывает исходный код, что большинство припрыгиваний с низкоуровневой оптимизацией едут мимо кассы. Программист должен заниматься алгоритмической оптимизацией. А всякие инлайнинги и предсказание переходов оставьте для автоматики.
... << RSDN@Home 1.1.4 beta 5 rev. 395>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: FOR
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 27.06.05 12:39
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Кстати говоря, при step=0 в "эквивалентном коде" мы наблюдаем 6-секундную задержку


step — константа известная на момент компиляции (с нулем просто не скомпилируется).

А что такое 6-секундная задержка?
Re[6]: str1 := str2 << str3;
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 27.06.05 12:50
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Покажите мне любой другой перегружаемый оператор, который бы с первого взгляда ассоциировался с конкатенацией.


str1 := str2 << str3;
Re[10]: Определение циклов
От: Sergey J. A. Беларусь  
Дата: 27.06.05 12:51
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Здравствуйте, Sergey J. A., Вы писали:


SJA>>Оотлично. Ну, раскажите почему try ... finnaly ... end структурная конструкция, а С-шный while — нет.

SJA>>Подсказка:
SJA>> throw -> break.
SJA>>А ?

СГ>По определению цикла WHILE, которое я дал выше.


Это вы на что ответили ? почему С-шный while — нет ? Так я спрашивал

почему try ... finnaly ... end структурная конструкция

Он ведь он может иметь более одного выхода ?

Короче говоря. Дайте правила, по которым можно определить — структрная конструкция или нет. Только пожалста не на уровне

структурное оно и значит структурное


SJA>>И кстати, почему замечательно структурной try ... finnaly ... end нет в Обероне ?


СГ>Там исключений нет.


Да ????? А что будет, если обратится по неверному индексу ? Уж не исключение, ли ?
Опять же Stack Overflow это что ?
Я — свихнувшееся сознание Джо.
Re[3]: Идеологически правильный мегарулез
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 27.06.05 12:54
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Это даже не синтаксический сахар. Это синтаксический самогон


За термин спасибо, понравился.

К>Программа становится офигенно понятной. Уж лучше иметь break с меткой, чтобы явно указывать точку отстрела.


EXIT дешево и сердито завершает ближайший LOOP. Чего такого-то?
Re[7]: str1 := str2 << str3;
От: Cyberax Марс  
Дата: 27.06.05 13:10
Оценка:
Сергей Губанов wrote:

> S>Покажите мне любой другой перегружаемый оператор, который бы с

> первого взгляда ассоциировался с конкатенацией.
> str1 := str2 *<<* str3;

Совсем не ассоцируется.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[5]: FOR
От: Cyberax Марс  
Дата: 27.06.05 13:11
Оценка:
Сергей Губанов wrote:

> К>Кстати говоря, при step=0 в "эквивалентном коде" мы наблюдаем

> 6-секундную задержку
> step — константа известная на момент компиляции (с нулем просто не
> скомпилируется).
> А что такое 6-секундная задержка?

"Новые процессоры Intell Pentium 3647 такие быстрые, что выполняют
бесконечный цикл всего за 6 секунд!" (с) анекдот.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[12]: Синтаксический оверхед
От: Sergey J. A. Беларусь  
Дата: 27.06.05 13:12
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

SJA>>>Какие ещё будут предположения ?


СГ>Вспомнил. Там речь шла о C++ Builder 6.0 и Delphi 7.0.


Ну вот.... Нехорошо, однако обобщать C++ Builder 6.0 => C++
Я — свихнувшееся сознание Джо.
Re[11]: Определение циклов
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 27.06.05 13:13
Оценка: :)
Здравствуйте, Sergey J. A., Вы писали:

SJA> Дайте правила, по которым можно определить — структрная конструкция или нет.


Не дам. Тут смысл нужно понимать.

SJA>Да ????? А что будет, если обратится по неверному индексу ? Уж не исключение, ли ?

SJA>Опять же Stack Overflow это что ?

Будет остановлена исполняющаяся команда. Термина "исключение" нет.
Re[4]: Идеологически правильный мегарулез
От: Sergey J. A. Беларусь  
Дата: 27.06.05 13:18
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

К>>Программа становится офигенно понятной. Уж лучше иметь break с меткой, чтобы явно указывать точку отстрела.


СГ>EXIT дешево и сердито завершает ближайший LOOP. Чего такого-то?


break дешево и сердито завершает ближайший while/for/do-while. Чего такого-то?
Я — свихнувшееся сознание Джо.
Re[8]: Синтаксический оверхед
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 27.06.05 13:24
Оценка: -2
Здравствуйте, Sinclair, Вы писали:

S>Например вот такой код:

S>
S>int n=0;
S>for(int i=0; i<5;i++)
S>n +=i;
S>// дальше некоторое использование n
S>

S>Современный компилятор приведет этот код к такому же бинарнику, как и
S>
S>int n = 10;
S>


Хорошо конечно.
Я это запомню, чтобы потом когда мне будут говорить чего это я в одну строчку несколько инструкций написал — дебажить же не удобно будет, я этот пример покажу и спрошу, а куда Вы здесь точку останова поставите...
Re[12]: Определение циклов
От: Sergey J. A. Беларусь  
Дата: 27.06.05 13:37
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Здравствуйте, Sergey J. A., Вы писали:


SJA>> Дайте правила, по которым можно определить — структрная конструкция или нет.


СГ>Не дам. Тут смысл нужно понимать.


SJA>>Да ????? А что будет, если обратится по неверному индексу ? Уж не исключение, ли ?

SJA>>Опять же Stack Overflow это что ?

СГ>Будет остановлена исполняющаяся команда. Термина "исключение" нет.


Да ?
Из хелпа к чёрному коробку:

In the first line, the exception or trap number is given, e.g., "Index out of range" or "TRAP 0".


Наверное авторы тоже не знали, что там нет исключений ?

Но терминология не так интересна. Меня больше интересует как спастись от "index out of range" например ? Перехватить нельзя.... Что ж делать то ???
Я — свихнувшееся сознание Джо.
Re[9]: Синтаксический оверхед
От: Cyberax Марс  
Дата: 27.06.05 13:40
Оценка:
Сергей Губанов wrote:

> Хорошо конечно.

> Я это запомню, чтобы потом когда мне будут говорить чего это я в одну
> строчку несколько инструкций написал — дебажить же не удобно будет, я
> этот пример покажу и спрошу, а куда Вы здесь точку останова поставите...

Все творчество компилятора по оптимизации отключается в отладочном
режиме, так что точку прервывания нормально можно поставить.

В релизном режиме — действительно не поставите.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[5]: Идеологически правильный мегарулез
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 27.06.05 13:43
Оценка: -1
Здравствуйте, Sergey J. A., Вы писали:

СГ>>EXIT дешево и сердито завершает ближайший LOOP. Чего такого-то?


SJA>break дешево и сердито завершает ближайший while/for/do-while. Чего такого-то?


Циклом WHILE или REPEAT называется цикл, который может завершиться только по 1 условию. Цикл завершающийся более чем по одному условию или не завершающийся ни по какому условию называется по другому. Только и всего. В Oberon это LOOP, WHILE, REPEAT, в Си циклы while/for/do-while — есть по сути модификации цикла LOOP, а циклов WHILE и REPEAT нету. (На всякий случай еще раз напоминаю о существующей разнице между завершением цикла и прерыванием цикла.)

Сравните:
WHILE отмерено меньше семи раз DO отмерять END;
Отрезать (* Режем не делая более ни каких проверок *)

REPEAT узнавать где брод DO узнал END
Соваться в воду (* Суемся в воду не делая более ни каких проверок *)

и
LOOP
  ...
  IF отмерено как минимум семь раз THEN EXIT END;
  ...
  IF узнал где брод THEN EXIT END;
  ...
END;
Что здесь делать, соваться в воду или Отрезать?
А может и отрезать и сунуться? 
А может на всякий случай и не соваться и не отрезать?
Re[13]: Определение циклов
От: Курилка Россия http://kirya.narod.ru/
Дата: 27.06.05 13:43
Оценка:
Здравствуйте, Sergey J. A., Вы писали:

SJA>Но терминология не так интересна. Меня больше интересует как спастись от "index out of range" например ? Перехватить нельзя.... Что ж делать то ???


Ну что делать оберонщикам — погибнуть в ходе эволюции, больше вариантов особо я не вижу
Re[9]: Синтаксический оверхед
От: Sinclair Россия https://github.com/evilguest/
Дата: 27.06.05 13:53
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Хорошо конечно.
СГ>Я это запомню, чтобы потом когда мне будут говорить чего это я в одну строчку несколько инструкций написал — дебажить же не удобно будет, я этот пример покажу и спрошу, а куда Вы здесь точку останова поставите...

Сергей, вы вообще о чем? Я говорю о том, что компилятор нафиг выкидывает все при оптимизации, а вы мне про отладку... Ну напишите в несколько строчек — кто мешает-то?

int n=0;
for(
    int i=0; 
    i<5;
    i++)
        n +=i;

Вы что, полагаете от этого лишний ассемблерный код сгенерится?
... << RSDN@Home 1.1.4 beta 5 rev. 395>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.