Здравствуйте, Sergey J. A., Вы писали:
SJA>Оотлично. Ну, раскажите почему try ... finnaly ... end структурная конструкция, а С-шный while — нет. SJA>Подсказка: SJA> throw -> break. SJA>А ?
По определению цикла WHILE, которое я дал выше.
SJA>И кстати, почему замечательно структурной try ... finnaly ... end нет в Обероне ?
Трурль wrote:
> F>Нет. Второй пример лучше. Почему для открытия файла, для создания > окна, объекта ядра (мутекс, событие) и проч. прекрасно подходит > глагол, а для создания объекта — только прилагательное? > Мне кажется, что и для открытия файла, создания окна и т.п. больше > подходят прилагательные. А глагол лучще бы смотрелся в контексте > >Экскаватор * мойЭкскаватор; >создать(мойЭкскаватор); > >
Не лучше — функция принимает параметр по неконстантной ссылке, а это ПЛОХО.
Сергей Губанов wrote:
> S>- что компиляторы С умеют выдавать warning на практически все > ошибочные ситуации, которые можно только придумать. > Жаль что фразу "практически все" нельзя поставить перед словом > компиляторы.
Все нормальные компиляторы — выдают.
> Другие слушатели курсов воспользовались моим кодом (свой писать лень > было), но у них почему-то программа не правильно работала. Позвали > меня спросить почему у меня работает правильно, а у них на выходе > какая-то ерунда. Посмотрел, увидел вызов Encode(sample, &encoder) > поменял на Encode(&encoder, sample) заработало. А ведь компилировалось > не то что без ошибок, а даже без варнингов! И даже выполнялось (не > правильно, но выполнялось же)!!!
Плохой компилятор, для таких случаев придумали lint. Однако, в языке С++
такая конструкция бы не работала.
> S>- что на языке С не нужно переупорядочивать программу для того, > чтобы компилятор смог сгенерировать оптимальный код > Для этого только надо перед переменной написать слово *register*...
Вы откуда пришли? Слово register игнорируется компиляторами с
90-х годов прошлого века (BC 3.11, кажется, был последним компилятором,
который соблюдал эту директиву).
Здравствуйте, Сергей Губанов, Вы писали: СГ>Жаль что фразу "практически все" нельзя поставить перед словом компиляторы.
Ну так... Это ж древний-предревний C. Это известная проблема. Попробуй воспроизвести это на любом С++, выпуска хотя бы 1993.
S>>- что на языке С не нужно переупорядочивать программу для того, чтобы компилятор смог сгенерировать оптимальный код СГ>Для этого только надо перед переменной написать слово register...
Кто вам сказал такую глупость? Старые компиляторы игнорировали слово register, потому что у них вообще не было оптимизаторов. Новые компиляторы его игнорируют потому, что лучше программиста выполняют раскладку про регистры.
Перестаньте упорствовать в своих заблуждениях. Современный компилятор плюсов так переделывает исходный код, что большинство припрыгиваний с низкоуровневой оптимизацией едут мимо кассы. Программист должен заниматься алгоритмической оптимизацией. А всякие инлайнинги и предсказание переходов оставьте для автоматики.
... << RSDN@Home 1.1.4 beta 5 rev. 395>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Здравствуйте, Sergey J. A., Вы писали:
SJA>>Оотлично. Ну, раскажите почему try ... finnaly ... end структурная конструкция, а С-шный while — нет. SJA>>Подсказка: SJA>> throw -> break. SJA>>А ?
СГ>По определению цикла WHILE, которое я дал выше.
Это вы на что ответили ? почему С-шный while — нет ? Так я спрашивал
почему try ... finnaly ... end структурная конструкция
Он ведь он может иметь более одного выхода ?
Короче говоря. Дайте правила, по которым можно определить — структрная конструкция или нет. Только пожалста не на уровне
структурное оно и значит структурное
SJA>>И кстати, почему замечательно структурной try ... finnaly ... end нет в Обероне ?
СГ>Там исключений нет.
Да ????? А что будет, если обратится по неверному индексу ? Уж не исключение, ли ?
Опять же Stack Overflow это что ?
Сергей Губанов wrote:
> S>Покажите мне любой другой перегружаемый оператор, который бы с > первого взгляда ассоциировался с конкатенацией. > str1 := str2 *<<* str3;
Сергей Губанов wrote:
> К>Кстати говоря, при step=0 в "эквивалентном коде" мы наблюдаем > 6-секундную задержку > step — константа известная на момент компиляции (с нулем просто не > скомпилируется). > А что такое 6-секундная задержка?
"Новые процессоры Intell Pentium 3647 такие быстрые, что выполняют
бесконечный цикл всего за 6 секунд!" (с) анекдот.
Здравствуйте, Sergey J. A., Вы писали:
SJA> Дайте правила, по которым можно определить — структрная конструкция или нет.
Не дам. Тут смысл нужно понимать.
SJA>Да ????? А что будет, если обратится по неверному индексу ? Уж не исключение, ли ? SJA>Опять же Stack Overflow это что ?
Будет остановлена исполняющаяся команда. Термина "исключение" нет.
Здравствуйте, Сергей Губанов, Вы писали:
К>>Программа становится офигенно понятной. Уж лучше иметь break с меткой, чтобы явно указывать точку отстрела.
СГ>EXIT дешево и сердито завершает ближайший LOOP. Чего такого-то?
break дешево и сердито завершает ближайший while/for/do-while. Чего такого-то?
Здравствуйте, 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>
Хорошо конечно.
Я это запомню, чтобы потом когда мне будут говорить чего это я в одну строчку несколько инструкций написал — дебажить же не удобно будет, я этот пример покажу и спрошу, а куда Вы здесь точку останова поставите...
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Здравствуйте, 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" например ? Перехватить нельзя.... Что ж делать то ???
Сергей Губанов wrote:
> Хорошо конечно. > Я это запомню, чтобы потом когда мне будут говорить чего это я в одну > строчку несколько инструкций написал — дебажить же не удобно будет, я > этот пример покажу и спрошу, а куда Вы здесь точку останова поставите...
Все творчество компилятора по оптимизации отключается в отладочном
режиме, так что точку прервывания нормально можно поставить.
Здравствуйте, 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;
Что здесь делать, соваться в воду или Отрезать?
А может и отрезать и сунуться?
А может на всякий случай и не соваться и не отрезать?
Здравствуйте, Sergey J. A., Вы писали:
SJA>Но терминология не так интересна. Меня больше интересует как спастись от "index out of range" например ? Перехватить нельзя.... Что ж делать то ???
Ну что делать оберонщикам — погибнуть в ходе эволюции, больше вариантов особо я не вижу
Здравствуйте, Сергей Губанов, Вы писали: СГ>Хорошо конечно. СГ>Я это запомню, чтобы потом когда мне будут говорить чего это я в одну строчку несколько инструкций написал — дебажить же не удобно будет, я этот пример покажу и спрошу, а куда Вы здесь точку останова поставите...
Сергей, вы вообще о чем? Я говорю о том, что компилятор нафиг выкидывает все при оптимизации, а вы мне про отладку... Ну напишите в несколько строчек — кто мешает-то?
int n=0;
for(
int i=0;
i<5;
i++)
n +=i;
Вы что, полагаете от этого лишний ассемблерный код сгенерится?
... << RSDN@Home 1.1.4 beta 5 rev. 395>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.